[python-astropy] 07/07: Merge branch 'debian' of git+ssh://git.debian.org/git/debian-science/packages/python-astropy into debian

Ole Streicher olebole-guest at moszumanska.debian.org
Fri Jan 24 10:50:52 UTC 2014


This is an automated email from the git hooks/post-receive script.

olebole-guest pushed a commit to branch debian
in repository python-astropy.

commit 16519444e626e2a9869f4f82e088d975b1910d71
Merge: e380888 63fec33
Author: Ole Streicher <debian at liska.ath.cx>
Date:   Fri Jan 24 11:50:19 2014 +0100

    Merge branch 'debian' of git+ssh://git.debian.org/git/debian-science/packages/python-astropy into debian
    
    Conflicts:
    	debian/changelog

 astropy/convolution/boundary_extend.c |  8608 -----------------
 astropy/convolution/boundary_fill.c   |  8737 -----------------
 astropy/convolution/boundary_none.c   |  8291 ----------------
 astropy/convolution/boundary_wrap.c   |  8608 -----------------
 astropy/cython_version.py             |     2 -
 astropy/table/_np_utils.c             |  7096 --------------
 astropy/time/erfa_time.c              | 16574 --------------------------------
 astropy/version.py                    |    25 -
 astropy/wcs/include/wcsconfig.h       |    35 -
 astropy/wcs/src/docstrings.c          |   910 --
 debian/changelog                      |    12 +
 debian/control                        |     2 +
 debian/patches/python3.4.patch        |   149 +-
 13 files changed, 162 insertions(+), 58887 deletions(-)

diff --cc astropy/convolution/boundary_extend.c
index a481300,a481300..0000000
deleted file mode 100644,100644
--- a/astropy/convolution/boundary_extend.c
+++ /dev/null
@@@ -1,8608 -1,8608 +1,0 @@@
--/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
--
--#define PY_SSIZE_T_CLEAN
--#include "Python.h"
--#ifndef Py_PYTHON_H
--    #error Python headers needed to compile C extensions, please install development version of Python.
--#elif PY_VERSION_HEX < 0x02040000
--    #error Cython requires Python 2.4+.
--#else
--#include <stddef.h> /* For offsetof */
--#ifndef offsetof
--#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
--#endif
--#if !defined(WIN32) && !defined(MS_WINDOWS)
--  #ifndef __stdcall
--    #define __stdcall
--  #endif
--  #ifndef __cdecl
--    #define __cdecl
--  #endif
--  #ifndef __fastcall
--    #define __fastcall
--  #endif
--#endif
--#ifndef DL_IMPORT
--  #define DL_IMPORT(t) t
--#endif
--#ifndef DL_EXPORT
--  #define DL_EXPORT(t) t
--#endif
--#ifndef PY_LONG_LONG
--  #define PY_LONG_LONG LONG_LONG
--#endif
--#ifndef Py_HUGE_VAL
--  #define Py_HUGE_VAL HUGE_VAL
--#endif
--#ifdef PYPY_VERSION
--#define CYTHON_COMPILING_IN_PYPY 1
--#define CYTHON_COMPILING_IN_CPYTHON 0
--#else
--#define CYTHON_COMPILING_IN_PYPY 0
--#define CYTHON_COMPILING_IN_CPYTHON 1
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  typedef int Py_ssize_t;
--  #define PY_SSIZE_T_MAX INT_MAX
--  #define PY_SSIZE_T_MIN INT_MIN
--  #define PY_FORMAT_SIZE_T ""
--  #define CYTHON_FORMAT_SSIZE_T ""
--  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
--  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
--  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
--                                (PyErr_Format(PyExc_TypeError, \
--                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
--                                 (PyObject*)0))
--  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
--                                  !PyComplex_Check(o))
--  #define PyIndex_Check __Pyx_PyIndex_Check
--  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
--  #define __PYX_BUILD_PY_SSIZE_T "i"
--#else
--  #define __PYX_BUILD_PY_SSIZE_T "n"
--  #define CYTHON_FORMAT_SSIZE_T "z"
--  #define __Pyx_PyIndex_Check PyIndex_Check
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
--  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
--  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
--  #define PyVarObject_HEAD_INIT(type, size) \
--          PyObject_HEAD_INIT(type) size,
--  #define PyType_Modified(t)
--  typedef struct {
--     void *buf;
--     PyObject *obj;
--     Py_ssize_t len;
--     Py_ssize_t itemsize;
--     int readonly;
--     int ndim;
--     char *format;
--     Py_ssize_t *shape;
--     Py_ssize_t *strides;
--     Py_ssize_t *suboffsets;
--     void *internal;
--  } Py_buffer;
--  #define PyBUF_SIMPLE 0
--  #define PyBUF_WRITABLE 0x0001
--  #define PyBUF_FORMAT 0x0004
--  #define PyBUF_ND 0x0008
--  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
--  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
--  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
--  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
--  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
--  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
--  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
--  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
--  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
--#endif
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#else
--  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#endif
--#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
--  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define Py_TPFLAGS_CHECKTYPES 0
--  #define Py_TPFLAGS_HAVE_INDEX 0
--#endif
--#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
--  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
--#endif
--#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
--  #define CYTHON_PEP393_ENABLED 1
--  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
--                                              0 : _PyUnicode_Ready((PyObject *)(op)))
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
--  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
--#else
--  #define CYTHON_PEP393_ENABLED 0
--  #define __Pyx_PyUnicode_READY(op)       (0)
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
--  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBaseString_Type            PyUnicode_Type
--  #define PyStringObject               PyUnicodeObject
--  #define PyString_Type                PyUnicode_Type
--  #define PyString_Check               PyUnicode_Check
--  #define PyString_CheckExact          PyUnicode_CheckExact
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PyBytesObject                PyStringObject
--  #define PyBytes_Type                 PyString_Type
--  #define PyBytes_Check                PyString_Check
--  #define PyBytes_CheckExact           PyString_CheckExact
--  #define PyBytes_FromString           PyString_FromString
--  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
--  #define PyBytes_FromFormat           PyString_FromFormat
--  #define PyBytes_DecodeEscape         PyString_DecodeEscape
--  #define PyBytes_AsString             PyString_AsString
--  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
--  #define PyBytes_Size                 PyString_Size
--  #define PyBytes_AS_STRING            PyString_AS_STRING
--  #define PyBytes_GET_SIZE             PyString_GET_SIZE
--  #define PyBytes_Repr                 PyString_Repr
--  #define PyBytes_Concat               PyString_Concat
--  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
--  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
--#endif
--#ifndef PySet_CheckExact
--  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
--#endif
--#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
--#if PY_MAJOR_VERSION >= 3
--  #define PyIntObject                  PyLongObject
--  #define PyInt_Type                   PyLong_Type
--  #define PyInt_Check(op)              PyLong_Check(op)
--  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
--  #define PyInt_FromString             PyLong_FromString
--  #define PyInt_FromUnicode            PyLong_FromUnicode
--  #define PyInt_FromLong               PyLong_FromLong
--  #define PyInt_FromSize_t             PyLong_FromSize_t
--  #define PyInt_FromSsize_t            PyLong_FromSsize_t
--  #define PyInt_AsLong                 PyLong_AsLong
--  #define PyInt_AS_LONG                PyLong_AS_LONG
--  #define PyInt_AsSsize_t              PyLong_AsSsize_t
--  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
--  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBoolObject                 PyLongObject
--#endif
--#if PY_VERSION_HEX < 0x03020000
--  typedef long Py_hash_t;
--  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
--#else
--  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
--#endif
--#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
--  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
--  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
--#else
--  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
--  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
--#else
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_NAMESTR(n) ((char *)(n))
--  #define __Pyx_DOCSTR(n)  ((char *)(n))
--#else
--  #define __Pyx_NAMESTR(n) (n)
--  #define __Pyx_DOCSTR(n)  (n)
--#endif
--
--
--#if PY_MAJOR_VERSION >= 3
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#else
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#endif
--
--#ifndef __PYX_EXTERN_C
--  #ifdef __cplusplus
--    #define __PYX_EXTERN_C extern "C"
--  #else
--    #define __PYX_EXTERN_C extern
--  #endif
--#endif
--
--#if defined(WIN32) || defined(MS_WINDOWS)
--#define _USE_MATH_DEFINES
--#endif
--#include <math.h>
--#define __PYX_HAVE__astropy__convolution__boundary_extend
--#define __PYX_HAVE_API__astropy__convolution__boundary_extend
--#include "string.h"
--#include "stdio.h"
--#include "stdlib.h"
--#include "numpy/arrayobject.h"
--#include "numpy/ufuncobject.h"
--#include "numpy/npy_math.h"
--#ifdef _OPENMP
--#include <omp.h>
--#endif /* _OPENMP */
--
--#ifdef PYREX_WITHOUT_ASSERTIONS
--#define CYTHON_WITHOUT_ASSERTIONS
--#endif
--
--#ifndef CYTHON_INLINE
--  #if defined(__GNUC__)
--    #define CYTHON_INLINE __inline__
--  #elif defined(_MSC_VER)
--    #define CYTHON_INLINE __inline
--  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--    #define CYTHON_INLINE inline
--  #else
--    #define CYTHON_INLINE
--  #endif
--#endif
--#ifndef CYTHON_UNUSED
--# if defined(__GNUC__)
--#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
--#     define CYTHON_UNUSED __attribute__ ((__unused__))
--#   else
--#     define CYTHON_UNUSED
--#   endif
--# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
--#   define CYTHON_UNUSED __attribute__ ((__unused__))
--# else
--#   define CYTHON_UNUSED
--# endif
--#endif
--typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
--
--#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
--#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
--#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
--#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
--#if CYTHON_COMPILING_IN_CPYTHON
--#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
--#else
--#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
--#endif
--#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
--
--
--#ifdef __GNUC__
--  /* Test for GCC > 2.95 */
--  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
--    #define likely(x)   __builtin_expect(!!(x), 1)
--    #define unlikely(x) __builtin_expect(!!(x), 0)
--  #else /* __GNUC__ > 2 ... */
--    #define likely(x)   (x)
--    #define unlikely(x) (x)
--  #endif /* __GNUC__ > 2 ... */
--#else /* __GNUC__ */
--  #define likely(x)   (x)
--  #define unlikely(x) (x)
--#endif /* __GNUC__ */
--    
--static PyObject *__pyx_m;
--static PyObject *__pyx_b;
--static PyObject *__pyx_empty_tuple;
--static PyObject *__pyx_empty_bytes;
--static int __pyx_lineno;
--static int __pyx_clineno = 0;
--static const char * __pyx_cfilenm= __FILE__;
--static const char *__pyx_filename;
--
--#if !defined(CYTHON_CCOMPLEX)
--  #if defined(__cplusplus)
--    #define CYTHON_CCOMPLEX 1
--  #elif defined(_Complex_I)
--    #define CYTHON_CCOMPLEX 1
--  #else
--    #define CYTHON_CCOMPLEX 0
--  #endif
--#endif
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #include <complex>
--  #else
--    #include <complex.h>
--  #endif
--#endif
--#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
--  #undef _Complex_I
--  #define _Complex_I 1.0fj
--#endif
--
--
--static const char *__pyx_f[] = {
--  "boundary_extend.pyx",
--  "numpy.pxd",
--  "type.pxd",
--};
--#define IS_UNSIGNED(type) (((type) -1) > 0)
--struct __Pyx_StructField_;
--#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
--typedef struct {
--  const char* name; /* for error messages only */
--  struct __Pyx_StructField_* fields;
--  size_t size;     /* sizeof(type) */
--  size_t arraysize[8]; /* length of array in each dimension */
--  int ndim;
--  char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */
--  char is_unsigned;
--  int flags;
--} __Pyx_TypeInfo;
--typedef struct __Pyx_StructField_ {
--  __Pyx_TypeInfo* type;
--  const char* name;
--  size_t offset;
--} __Pyx_StructField;
--typedef struct {
--  __Pyx_StructField* field;
--  size_t parent_offset;
--} __Pyx_BufFmt_StackElem;
--typedef struct {
--  __Pyx_StructField root;
--  __Pyx_BufFmt_StackElem* head;
--  size_t fmt_offset;
--  size_t new_count, enc_count;
--  size_t struct_alignment;
--  int is_complex;
--  char enc_type;
--  char new_packmode;
--  char enc_packmode;
--  char is_valid_array;
--} __Pyx_BufFmt_Context;
--
--
--/* "numpy.pxd":723
-- * # in Cython to enable them only on the right systems.
-- * 
-- * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- */
--typedef npy_int8 __pyx_t_5numpy_int8_t;
--
--/* "numpy.pxd":724
-- * 
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t
-- */
--typedef npy_int16 __pyx_t_5numpy_int16_t;
--
--/* "numpy.pxd":725
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int64      int64_t
-- * #ctypedef npy_int96      int96_t
-- */
--typedef npy_int32 __pyx_t_5numpy_int32_t;
--
--/* "numpy.pxd":726
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_int96      int96_t
-- * #ctypedef npy_int128     int128_t
-- */
--typedef npy_int64 __pyx_t_5numpy_int64_t;
--
--/* "numpy.pxd":730
-- * #ctypedef npy_int128     int128_t
-- * 
-- * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- */
--typedef npy_uint8 __pyx_t_5numpy_uint8_t;
--
--/* "numpy.pxd":731
-- * 
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t
-- */
--typedef npy_uint16 __pyx_t_5numpy_uint16_t;
--
--/* "numpy.pxd":732
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint64     uint64_t
-- * #ctypedef npy_uint96     uint96_t
-- */
--typedef npy_uint32 __pyx_t_5numpy_uint32_t;
--
--/* "numpy.pxd":733
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_uint96     uint96_t
-- * #ctypedef npy_uint128    uint128_t
-- */
--typedef npy_uint64 __pyx_t_5numpy_uint64_t;
--
--/* "numpy.pxd":737
-- * #ctypedef npy_uint128    uint128_t
-- * 
-- * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_float64    float64_t
-- * #ctypedef npy_float80    float80_t
-- */
--typedef npy_float32 __pyx_t_5numpy_float32_t;
--
--/* "numpy.pxd":738
-- * 
-- * ctypedef npy_float32    float32_t
-- * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_float80    float80_t
-- * #ctypedef npy_float128   float128_t
-- */
--typedef npy_float64 __pyx_t_5numpy_float64_t;
--
--/* "numpy.pxd":747
-- * # The int types are mapped a bit surprising --
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t
-- */
--typedef npy_long __pyx_t_5numpy_int_t;
--
--/* "numpy.pxd":748
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   longlong_t
-- * 
-- */
--typedef npy_longlong __pyx_t_5numpy_long_t;
--
--/* "numpy.pxd":749
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_ulong      uint_t
-- */
--typedef npy_longlong __pyx_t_5numpy_longlong_t;
--
--/* "numpy.pxd":751
-- * ctypedef npy_longlong   longlong_t
-- * 
-- * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t
-- */
--typedef npy_ulong __pyx_t_5numpy_uint_t;
--
--/* "numpy.pxd":752
-- * 
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
--
--/* "numpy.pxd":753
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_intp       intp_t
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
--
--/* "numpy.pxd":755
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uintp      uintp_t
-- * 
-- */
--typedef npy_intp __pyx_t_5numpy_intp_t;
--
--/* "numpy.pxd":756
-- * 
-- * ctypedef npy_intp       intp_t
-- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_double     float_t
-- */
--typedef npy_uintp __pyx_t_5numpy_uintp_t;
--
--/* "numpy.pxd":758
-- * ctypedef npy_uintp      uintp_t
-- * 
-- * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t
-- */
--typedef npy_double __pyx_t_5numpy_float_t;
--
--/* "numpy.pxd":759
-- * 
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- */
--typedef npy_double __pyx_t_5numpy_double_t;
--
--/* "numpy.pxd":760
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- */
--typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
--
--/* "astropy/convolution/boundary_extend.pyx":7
-- * 
-- * DTYPE = np.float
-- * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline int int_max(int a, int b): return a if a >= b else b
-- */
--typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t;
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< float > __pyx_t_float_complex;
--  #else
--    typedef float _Complex __pyx_t_float_complex;
--  #endif
--#else
--    typedef struct { float real, imag; } __pyx_t_float_complex;
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< double > __pyx_t_double_complex;
--  #else
--    typedef double _Complex __pyx_t_double_complex;
--  #endif
--#else
--    typedef struct { double real, imag; } __pyx_t_double_complex;
--#endif
--
--
--/*--- Type declarations ---*/
--
--/* "numpy.pxd":762
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t
-- */
--typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
--
--/* "numpy.pxd":763
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- */
--typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
--
--/* "numpy.pxd":764
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cdouble     complex_t
-- */
--typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
--
--/* "numpy.pxd":766
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- */
--typedef npy_cdouble __pyx_t_5numpy_complex_t;
--#ifndef CYTHON_REFNANNY
--  #define CYTHON_REFNANNY 0
--#endif
--#if CYTHON_REFNANNY
--  typedef struct {
--    void (*INCREF)(void*, PyObject*, int);
--    void (*DECREF)(void*, PyObject*, int);
--    void (*GOTREF)(void*, PyObject*, int);
--    void (*GIVEREF)(void*, PyObject*, int);
--    void* (*SetupContext)(const char*, int, const char*);
--    void (*FinishContext)(void**);
--  } __Pyx_RefNannyAPIStruct;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
--  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
--#ifdef WITH_THREAD
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          if (acquire_gil) { \
--              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--              PyGILState_Release(__pyx_gilstate_save); \
--          } else { \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--          }
--#else
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
--#endif
--  #define __Pyx_RefNannyFinishContext() \
--          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
--  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
--  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
--  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
--  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
--#else
--  #define __Pyx_RefNannyDeclarations
--  #define __Pyx_RefNannySetupContext(name, acquire_gil)
--  #define __Pyx_RefNannyFinishContext()
--  #define __Pyx_INCREF(r) Py_INCREF(r)
--  #define __Pyx_DECREF(r) Py_DECREF(r)
--  #define __Pyx_GOTREF(r)
--  #define __Pyx_GIVEREF(r)
--  #define __Pyx_XINCREF(r) Py_XINCREF(r)
--  #define __Pyx_XDECREF(r) Py_XDECREF(r)
--  #define __Pyx_XGOTREF(r)
--  #define __Pyx_XGIVEREF(r)
--#endif /* CYTHON_REFNANNY */
--#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
--#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
--
--static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
--    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
--
--static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
--
--static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
--    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
--    const char* function_name); /*proto*/
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact); /*proto*/
--
--static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
--    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
--
--static CYTHON_INLINE long __Pyx_mod_long(long, long); /* proto */
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
--
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
--
--static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
--
--#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
--#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
--#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2)
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
--
--static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
--
--typedef struct {
--  Py_ssize_t shape, strides, suboffsets;
--} __Pyx_Buf_DimInfo;
--typedef struct {
--  size_t refcount;
--  Py_buffer pybuffer;
--} __Pyx_Buffer;
--typedef struct {
--  __Pyx_Buffer *rcbuffer;
--  char *data;
--  __Pyx_Buf_DimInfo diminfo[8];
--} __Pyx_LocalBuf_ND;
--
--#if PY_MAJOR_VERSION < 3
--    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
--    static void __Pyx_ReleaseBuffer(Py_buffer *view);
--#else
--    #define __Pyx_GetBuffer PyObject_GetBuffer
--    #define __Pyx_ReleaseBuffer PyBuffer_Release
--#endif
--
--
--static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
--static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
--
--static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #define __Pyx_CREAL(z) ((z).real())
--    #define __Pyx_CIMAG(z) ((z).imag())
--  #else
--    #define __Pyx_CREAL(z) (__real__(z))
--    #define __Pyx_CIMAG(z) (__imag__(z))
--  #endif
--#else
--    #define __Pyx_CREAL(z) ((z).real)
--    #define __Pyx_CIMAG(z) ((z).imag)
--#endif
--#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
--    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
--    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
--#else
--    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
--    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
--#endif
--
--static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eqf(a, b)   ((a)==(b))
--    #define __Pyx_c_sumf(a, b)  ((a)+(b))
--    #define __Pyx_c_difff(a, b) ((a)-(b))
--    #define __Pyx_c_prodf(a, b) ((a)*(b))
--    #define __Pyx_c_quotf(a, b) ((a)/(b))
--    #define __Pyx_c_negf(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
--    #define __Pyx_c_conjf(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (::std::abs(z))
--        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zerof(z) ((z)==0)
--    #define __Pyx_c_conjf(z)    (conjf(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (cabsf(z))
--        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eq(a, b)   ((a)==(b))
--    #define __Pyx_c_sum(a, b)  ((a)+(b))
--    #define __Pyx_c_diff(a, b) ((a)-(b))
--    #define __Pyx_c_prod(a, b) ((a)*(b))
--    #define __Pyx_c_quot(a, b) ((a)/(b))
--    #define __Pyx_c_neg(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zero(z) ((z)==(double)0)
--    #define __Pyx_c_conj(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (::std::abs(z))
--        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zero(z) ((z)==0)
--    #define __Pyx_c_conj(z)    (conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (cabs(z))
--        #define __Pyx_c_pow(a, b)  (cpow(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
--
--static int __Pyx_check_binary_version(void);
--
--#if !defined(__Pyx_PyIdentifier_FromString)
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
--#else
--  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
--#endif
--#endif
--
--static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
--
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
--
--typedef struct {
--    int code_line;
--    PyCodeObject* code_object;
--} __Pyx_CodeObjectCacheEntry;
--struct __Pyx_CodeObjectCache {
--    int count;
--    int max_count;
--    __Pyx_CodeObjectCacheEntry* entries;
--};
--static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
--static PyCodeObject *__pyx_find_code_object(int code_line);
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
--
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename); /*proto*/
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
--
--
--/* Module declarations from 'cpython.buffer' */
--
--/* Module declarations from 'cpython.ref' */
--
--/* Module declarations from 'libc.string' */
--
--/* Module declarations from 'libc.stdio' */
--
--/* Module declarations from 'cpython.object' */
--
--/* Module declarations from '__builtin__' */
--
--/* Module declarations from 'cpython.type' */
--static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
--
--/* Module declarations from 'libc.stdlib' */
--
--/* Module declarations from 'numpy' */
--
--/* Module declarations from 'numpy' */
--static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
--static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
--static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
--static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
--
--/* Module declarations from 'cython' */
--
--/* Module declarations from 'astropy.convolution.boundary_extend' */
--static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_max(int, int); /*proto*/
--static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_min(int, int); /*proto*/
--static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
--#define __Pyx_MODULE_NAME "astropy.convolution.boundary_extend"
--int __pyx_module_is_main_astropy__convolution__boundary_extend = 0;
--
--/* Implementation of 'astropy.convolution.boundary_extend' */
--static PyObject *__pyx_builtin_ValueError;
--static PyObject *__pyx_builtin_range;
--static PyObject *__pyx_builtin_RuntimeError;
--static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_convolve1d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_2convolve2d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_4convolve3d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
--static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
--static char __pyx_k_5[] = "ndarray is not C contiguous";
--static char __pyx_k_7[] = "ndarray is not Fortran contiguous";
--static char __pyx_k_9[] = "Non-native byte order not supported";
--static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
--static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
--static char __pyx_k_15[] = "Format string allocated too short.";
--static char __pyx_k_19[] = "convolve1d_boundary_extend";
--static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_extend.pyx";
--static char __pyx_k_21[] = "astropy.convolution.boundary_extend";
--static char __pyx_k_24[] = "convolve2d_boundary_extend";
--static char __pyx_k_27[] = "convolve3d_boundary_extend";
--static char __pyx_k__B[] = "B";
--static char __pyx_k__H[] = "H";
--static char __pyx_k__I[] = "I";
--static char __pyx_k__L[] = "L";
--static char __pyx_k__O[] = "O";
--static char __pyx_k__Q[] = "Q";
--static char __pyx_k__b[] = "b";
--static char __pyx_k__d[] = "d";
--static char __pyx_k__f[] = "f";
--static char __pyx_k__g[] = "g";
--static char __pyx_k__h[] = "h";
--static char __pyx_k__i[] = "i";
--static char __pyx_k__j[] = "j";
--static char __pyx_k__k[] = "k";
--static char __pyx_k__l[] = "l";
--static char __pyx_k__q[] = "q";
--static char __pyx_k__Zd[] = "Zd";
--static char __pyx_k__Zf[] = "Zf";
--static char __pyx_k__Zg[] = "Zg";
--static char __pyx_k__ii[] = "ii";
--static char __pyx_k__jj[] = "jj";
--static char __pyx_k__kk[] = "kk";
--static char __pyx_k__np[] = "np";
--static char __pyx_k__nx[] = "nx";
--static char __pyx_k__ny[] = "ny";
--static char __pyx_k__nz[] = "nz";
--static char __pyx_k__bot[] = "bot";
--static char __pyx_k__iii[] = "iii";
--static char __pyx_k__jjj[] = "jjj";
--static char __pyx_k__ker[] = "ker";
--static char __pyx_k__kkk[] = "kkk";
--static char __pyx_k__nkx[] = "nkx";
--static char __pyx_k__nky[] = "nky";
--static char __pyx_k__nkz[] = "nkz";
--static char __pyx_k__top[] = "top";
--static char __pyx_k__val[] = "val";
--static char __pyx_k__wkx[] = "wkx";
--static char __pyx_k__wky[] = "wky";
--static char __pyx_k__wkz[] = "wkz";
--static char __pyx_k__conv[] = "conv";
--static char __pyx_k__DTYPE[] = "DTYPE";
--static char __pyx_k__dtype[] = "dtype";
--static char __pyx_k__empty[] = "empty";
--static char __pyx_k__fixed[] = "fixed";
--static char __pyx_k__float[] = "float";
--static char __pyx_k__iimax[] = "iimax";
--static char __pyx_k__iimin[] = "iimin";
--static char __pyx_k__jjmax[] = "jjmax";
--static char __pyx_k__jjmin[] = "jjmin";
--static char __pyx_k__kkmax[] = "kkmax";
--static char __pyx_k__kkmin[] = "kkmin";
--static char __pyx_k__numpy[] = "numpy";
--static char __pyx_k__range[] = "range";
--static char __pyx_k____main__[] = "__main__";
--static char __pyx_k____test__[] = "__test__";
--static char __pyx_k__ValueError[] = "ValueError";
--static char __pyx_k__RuntimeError[] = "RuntimeError";
--static PyObject *__pyx_kp_s_1;
--static PyObject *__pyx_kp_u_11;
--static PyObject *__pyx_kp_u_12;
--static PyObject *__pyx_kp_u_15;
--static PyObject *__pyx_n_s_19;
--static PyObject *__pyx_kp_s_20;
--static PyObject *__pyx_n_s_21;
--static PyObject *__pyx_n_s_24;
--static PyObject *__pyx_n_s_27;
--static PyObject *__pyx_kp_u_5;
--static PyObject *__pyx_kp_u_7;
--static PyObject *__pyx_kp_u_9;
--static PyObject *__pyx_n_s__DTYPE;
--static PyObject *__pyx_n_s__RuntimeError;
--static PyObject *__pyx_n_s__ValueError;
--static PyObject *__pyx_n_s____main__;
--static PyObject *__pyx_n_s____test__;
--static PyObject *__pyx_n_s__bot;
--static PyObject *__pyx_n_s__conv;
--static PyObject *__pyx_n_s__dtype;
--static PyObject *__pyx_n_s__empty;
--static PyObject *__pyx_n_s__f;
--static PyObject *__pyx_n_s__fixed;
--static PyObject *__pyx_n_s__float;
--static PyObject *__pyx_n_s__g;
--static PyObject *__pyx_n_s__i;
--static PyObject *__pyx_n_s__ii;
--static PyObject *__pyx_n_s__iii;
--static PyObject *__pyx_n_s__iimax;
--static PyObject *__pyx_n_s__iimin;
--static PyObject *__pyx_n_s__j;
--static PyObject *__pyx_n_s__jj;
--static PyObject *__pyx_n_s__jjj;
--static PyObject *__pyx_n_s__jjmax;
--static PyObject *__pyx_n_s__jjmin;
--static PyObject *__pyx_n_s__k;
--static PyObject *__pyx_n_s__ker;
--static PyObject *__pyx_n_s__kk;
--static PyObject *__pyx_n_s__kkk;
--static PyObject *__pyx_n_s__kkmax;
--static PyObject *__pyx_n_s__kkmin;
--static PyObject *__pyx_n_s__nkx;
--static PyObject *__pyx_n_s__nky;
--static PyObject *__pyx_n_s__nkz;
--static PyObject *__pyx_n_s__np;
--static PyObject *__pyx_n_s__numpy;
--static PyObject *__pyx_n_s__nx;
--static PyObject *__pyx_n_s__ny;
--static PyObject *__pyx_n_s__nz;
--static PyObject *__pyx_n_s__range;
--static PyObject *__pyx_n_s__top;
--static PyObject *__pyx_n_s__val;
--static PyObject *__pyx_n_s__wkx;
--static PyObject *__pyx_n_s__wky;
--static PyObject *__pyx_n_s__wkz;
--static PyObject *__pyx_int_15;
--static PyObject *__pyx_k_tuple_2;
--static PyObject *__pyx_k_tuple_3;
--static PyObject *__pyx_k_tuple_4;
--static PyObject *__pyx_k_tuple_6;
--static PyObject *__pyx_k_tuple_8;
--static PyObject *__pyx_k_tuple_10;
--static PyObject *__pyx_k_tuple_13;
--static PyObject *__pyx_k_tuple_14;
--static PyObject *__pyx_k_tuple_16;
--static PyObject *__pyx_k_tuple_17;
--static PyObject *__pyx_k_tuple_22;
--static PyObject *__pyx_k_tuple_25;
--static PyObject *__pyx_k_codeobj_18;
--static PyObject *__pyx_k_codeobj_23;
--static PyObject *__pyx_k_codeobj_26;
--
--/* "astropy/convolution/boundary_extend.pyx":9
-- * ctypedef np.float_t DTYPE_t
-- * 
-- * cdef inline int int_max(int a, int b): return a if a >= b else b             # <<<<<<<<<<<<<<
-- * cdef inline int int_min(int a, int b): return a if a <= b else b
-- * 
-- */
--
--static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_max(int __pyx_v_a, int __pyx_v_b) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("int_max", 0);
--  if ((__pyx_v_a >= __pyx_v_b)) {
--    __pyx_t_1 = __pyx_v_a;
--  } else {
--    __pyx_t_1 = __pyx_v_b;
--  }
--  __pyx_r = __pyx_t_1;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_extend.pyx":10
-- * 
-- * cdef inline int int_max(int a, int b): return a if a >= b else b
-- * cdef inline int int_min(int a, int b): return a if a <= b else b             # <<<<<<<<<<<<<<
-- * 
-- * cdef extern from "numpy/npy_math.h":
-- */
--
--static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_min(int __pyx_v_a, int __pyx_v_b) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("int_min", 0);
--  if ((__pyx_v_a <= __pyx_v_b)) {
--    __pyx_t_1 = __pyx_v_a;
--  } else {
--    __pyx_t_1 = __pyx_v_b;
--  }
--  __pyx_r = __pyx_t_1;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend = {__Pyx_NAMESTR("convolve1d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve1d_boundary_extend (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve1d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_15boundary_extend_convolve1d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_extend.pyx":19
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_extend(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_convolve1d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_nkx;
--  int __pyx_v_wkx;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_iii;
--  int __pyx_v_ii;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  int __pyx_t_13;
--  int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  unsigned int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  unsigned int __pyx_t_21;
--  unsigned int __pyx_t_22;
--  unsigned int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve1d_boundary_extend", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/convolution/boundary_extend.pyx":22
-- *                                np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (__pyx_t_1) {
--
--    /* "astropy/convolution/boundary_extend.pyx":23
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_extend.pyx":25
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (__pyx_t_1) {
--    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __pyx_t_6 = __pyx_t_5;
--  } else {
--    __pyx_t_6 = __pyx_t_1;
--  }
--  if (unlikely(!__pyx_t_6)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_extend.pyx":27
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_extend.pyx":28
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_extend.pyx":29
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_extend.pyx":30
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
-- *     cdef unsigned int i, iii
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
--  __pyx_t_4 = 0;
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":31
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, iii
-- *     cdef int ii
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
--  __pyx_t_3 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":41
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if npy_isnan(f[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_extend.pyx":42
-- *     # neighboring values
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
--    if (__pyx_t_6) {
--
--      /* "astropy/convolution/boundary_extend.pyx":43
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             iimin = i - wkx
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_extend.pyx":44
-- *         if npy_isnan(f[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_extend.pyx":45
-- *             top = 0.
-- *             bot = 0.
-- *             iimin = i - wkx             # <<<<<<<<<<<<<<
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- */
--      __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--      /* "astropy/convolution/boundary_extend.pyx":46
-- *             bot = 0.
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *             for ii in range(iimin, iimax):
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- */
--      __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--      /* "astropy/convolution/boundary_extend.pyx":47
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                 val = f[iii]
-- */
--      __pyx_t_13 = __pyx_v_iimax;
--      for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
--        __pyx_v_ii = __pyx_t_14;
--
--        /* "astropy/convolution/boundary_extend.pyx":48
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- *                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
-- *                 val = f[iii]
-- *                 if not npy_isnan(val):
-- */
--        __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
--
--        /* "astropy/convolution/boundary_extend.pyx":49
-- *             for ii in range(iimin, iimax):
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                 val = f[iii]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- */
--        __pyx_t_15 = __pyx_v_iii;
--        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_extend.pyx":50
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                 val = f[iii]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- */
--        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_6) {
--
--          /* "astropy/convolution/boundary_extend.pyx":51
-- *                 val = f[iii]
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--          __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
--
--          /* "astropy/convolution/boundary_extend.pyx":52
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- * 
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_extend.pyx":53
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- * 
-- *             if bot != 0.:
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L9;
--        }
--        __pyx_L9:;
--      }
--
--      /* "astropy/convolution/boundary_extend.pyx":55
-- *                     bot += ker
-- * 
-- *             if bot != 0.:             # <<<<<<<<<<<<<<
-- *                 fixed[i] = top / bot
-- *             else:
-- */
--      __pyx_t_6 = (__pyx_v_bot != 0.);
--      if (__pyx_t_6) {
--
--        /* "astropy/convolution/boundary_extend.pyx":56
-- * 
-- *             if bot != 0.:
-- *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i] = f[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_17 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L10;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_extend.pyx":58
-- *                 fixed[i] = top / bot
-- *             else:
-- *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             fixed[i] = f[i]
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
--      }
--      __pyx_L10:;
--      goto __pyx_L6;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_extend.pyx":60
-- *                 fixed[i] = f[i]
-- *         else:
-- *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--      __pyx_t_20 = __pyx_v_i;
--      __pyx_t_21 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
--    }
--    __pyx_L6:;
--  }
--
--  /* "astropy/convolution/boundary_extend.pyx":63
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_extend.pyx":64
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_22 = __pyx_v_i;
--    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
--    if (__pyx_t_6) {
--
--      /* "astropy/convolution/boundary_extend.pyx":65
-- *     for i in range(nx):
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             iimin = i - wkx
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_extend.pyx":66
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_extend.pyx":67
-- *             top = 0.
-- *             bot = 0.
-- *             iimin = i - wkx             # <<<<<<<<<<<<<<
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- */
--      __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--      /* "astropy/convolution/boundary_extend.pyx":68
-- *             bot = 0.
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *             for ii in range(iimin, iimax):
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- */
--      __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--      /* "astropy/convolution/boundary_extend.pyx":69
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                 val = fixed[iii]
-- */
--      __pyx_t_13 = __pyx_v_iimax;
--      for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
--        __pyx_v_ii = __pyx_t_14;
--
--        /* "astropy/convolution/boundary_extend.pyx":70
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- *                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
-- *                 val = fixed[iii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- */
--        __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
--
--        /* "astropy/convolution/boundary_extend.pyx":71
-- *             for ii in range(iimin, iimax):
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                 val = fixed[iii]             # <<<<<<<<<<<<<<
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- */
--        __pyx_t_23 = __pyx_v_iii;
--        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_extend.pyx":72
-- *                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                 val = fixed[iii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- */
--        __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_extend.pyx":73
-- *                 val = fixed[iii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_6) {
--
--          /* "astropy/convolution/boundary_extend.pyx":74
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- *             if bot != 0:
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_extend.pyx":75
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- *             if bot != 0:
-- *                 conv[i] = top / bot
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L16;
--        }
--        __pyx_L16:;
--      }
--
--      /* "astropy/convolution/boundary_extend.pyx":76
-- *                     top += val * ker
-- *                     bot += ker
-- *             if bot != 0:             # <<<<<<<<<<<<<<
-- *                 conv[i] = top / bot
-- *             else:
-- */
--      __pyx_t_6 = (__pyx_v_bot != 0.0);
--      if (__pyx_t_6) {
--
--        /* "astropy/convolution/boundary_extend.pyx":77
-- *                     bot += ker
-- *             if bot != 0:
-- *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i] = fixed[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_25 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L17;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_extend.pyx":79
-- *                 conv[i] = top / bot
-- *             else:
-- *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             conv[i] = fixed[i]
-- */
--        __pyx_t_26 = __pyx_v_i;
--        __pyx_t_27 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
--      }
--      __pyx_L17:;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_extend.pyx":81
-- *                 conv[i] = fixed[i]
-- *         else:
-- *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--      __pyx_t_28 = __pyx_v_i;
--      __pyx_t_29 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
--    }
--    __pyx_L13:;
--  }
--
--  /* "astropy/convolution/boundary_extend.pyx":83
-- *             conv[i] = fixed[i]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve1d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend = {__Pyx_NAMESTR("convolve2d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve2d_boundary_extend (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve2d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_15boundary_extend_2convolve2d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_extend.pyx":87
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_extend(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_2convolve2d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_iii;
--  unsigned int __pyx_v_jjj;
--  int __pyx_v_ii;
--  int __pyx_v_jj;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  int __pyx_v_jjmin;
--  int __pyx_v_jjmax;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  int __pyx_t_17;
--  int __pyx_t_18;
--  int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  unsigned int __pyx_t_21;
--  unsigned int __pyx_t_22;
--  unsigned int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve2d_boundary_extend", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
--
--  /* "astropy/convolution/boundary_extend.pyx":90
-- *                                np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "astropy/convolution/boundary_extend.pyx":91
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_extend.pyx":93
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  if (__pyx_t_3) {
--    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (unlikely(!__pyx_t_2)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_extend.pyx":95
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_extend.pyx":96
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_extend.pyx":97
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_extend.pyx":98
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_extend.pyx":99
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_extend.pyx":100
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_extend.pyx":101
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef unsigned int i, j, iii, jjj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":102
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, j, iii, jjj
-- *     cdef int ii, jj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":112
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_extend.pyx":113
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_extend.pyx":114
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_14 = __pyx_v_i;
--      __pyx_t_15 = __pyx_v_j;
--      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
--      if (__pyx_t_2) {
--
--        /* "astropy/convolution/boundary_extend.pyx":115
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_extend.pyx":116
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_extend.pyx":117
-- *                 top = 0.
-- *                 bot = 0.
-- *                 iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- */
--        __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--        /* "astropy/convolution/boundary_extend.pyx":118
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- */
--        __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--        /* "astropy/convolution/boundary_extend.pyx":119
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- */
--        __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--        /* "astropy/convolution/boundary_extend.pyx":120
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- */
--        __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--        /* "astropy/convolution/boundary_extend.pyx":121
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- */
--        __pyx_t_16 = __pyx_v_iimax;
--        for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--          __pyx_v_ii = __pyx_t_17;
--
--          /* "astropy/convolution/boundary_extend.pyx":122
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- */
--          __pyx_t_18 = __pyx_v_jjmax;
--          for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
--            __pyx_v_jj = __pyx_t_19;
--
--            /* "astropy/convolution/boundary_extend.pyx":123
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- *                         val = f[iii, jjj]
-- */
--            __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
--
--            /* "astropy/convolution/boundary_extend.pyx":124
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
-- *                         val = f[iii, jjj]
-- *                         if not npy_isnan(val):
-- */
--            __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
--
--            /* "astropy/convolution/boundary_extend.pyx":125
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- *                         val = f[iii, jjj]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- */
--            __pyx_t_20 = __pyx_v_iii;
--            __pyx_t_21 = __pyx_v_jjj;
--            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_extend.pyx":126
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- *                         val = f[iii, jjj]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_2) {
--
--              /* "astropy/convolution/boundary_extend.pyx":128
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--              __pyx_t_22 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--              __pyx_t_23 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
--
--              /* "astropy/convolution/boundary_extend.pyx":129
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- * 
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_extend.pyx":130
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- * 
-- *                 if bot != 0.:
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L13;
--            }
--            __pyx_L13:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_extend.pyx":132
-- *                             bot += ker
-- * 
-- *                 if bot != 0.:             # <<<<<<<<<<<<<<
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_2 = (__pyx_v_bot != 0.);
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_extend.pyx":133
-- * 
-- *                 if bot != 0.:
-- *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j] = f[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_24 = __pyx_v_i;
--          __pyx_t_25 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L14;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_extend.pyx":135
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i, j] = f[i, j]
-- */
--          __pyx_t_26 = __pyx_v_i;
--          __pyx_t_27 = __pyx_v_j;
--          __pyx_t_28 = __pyx_v_i;
--          __pyx_t_29 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_f.diminfo[1].strides));
--        }
--        __pyx_L14:;
--        goto __pyx_L8;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_extend.pyx":137
-- *                     fixed[i, j] = f[i, j]
-- *             else:
-- *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--        __pyx_t_30 = __pyx_v_i;
--        __pyx_t_31 = __pyx_v_j;
--        __pyx_t_32 = __pyx_v_i;
--        __pyx_t_33 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides));
--      }
--      __pyx_L8:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_extend.pyx":140
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_extend.pyx":141
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_extend.pyx":142
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_34 = __pyx_v_i;
--      __pyx_t_35 = __pyx_v_j;
--      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides))));
--      if (__pyx_t_2) {
--
--        /* "astropy/convolution/boundary_extend.pyx":143
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_extend.pyx":144
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_extend.pyx":145
-- *                 top = 0.
-- *                 bot = 0.
-- *                 iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- */
--        __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--        /* "astropy/convolution/boundary_extend.pyx":146
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- */
--        __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--        /* "astropy/convolution/boundary_extend.pyx":147
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- */
--        __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--        /* "astropy/convolution/boundary_extend.pyx":148
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- */
--        __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--        /* "astropy/convolution/boundary_extend.pyx":149
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- */
--        __pyx_t_16 = __pyx_v_iimax;
--        for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--          __pyx_v_ii = __pyx_t_17;
--
--          /* "astropy/convolution/boundary_extend.pyx":150
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- */
--          __pyx_t_18 = __pyx_v_jjmax;
--          for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
--            __pyx_v_jj = __pyx_t_19;
--
--            /* "astropy/convolution/boundary_extend.pyx":151
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- *                         val = fixed[iii, jjj]
-- */
--            __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
--
--            /* "astropy/convolution/boundary_extend.pyx":152
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
-- *                         val = fixed[iii, jjj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- */
--            __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
--
--            /* "astropy/convolution/boundary_extend.pyx":153
-- *                         iii = int_min(int_max(ii, 0), nx - 1)
-- *                         jjj = int_min(int_max(jj, 0), ny - 1)
-- *                         val = fixed[iii, jjj]             # <<<<<<<<<<<<<<
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_36 = __pyx_v_iii;
--            __pyx_t_37 = __pyx_v_jjj;
--            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_extend.pyx":155
-- *                         val = fixed[iii, jjj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- */
--            __pyx_t_38 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--            __pyx_t_39 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_extend.pyx":156
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_2) {
--
--              /* "astropy/convolution/boundary_extend.pyx":157
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- *                 if bot != 0:
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_extend.pyx":158
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L24;
--            }
--            __pyx_L24:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_extend.pyx":159
-- *                             top += val * ker
-- *                             bot += ker
-- *                 if bot != 0:             # <<<<<<<<<<<<<<
-- *                     conv[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_2 = (__pyx_v_bot != 0.0);
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_extend.pyx":160
-- *                             bot += ker
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_40 = __pyx_v_i;
--          __pyx_t_41 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L25;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_extend.pyx":162
-- *                     conv[i, j] = top / bot
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i, j] = fixed[i, j]
-- */
--          __pyx_t_42 = __pyx_v_i;
--          __pyx_t_43 = __pyx_v_j;
--          __pyx_t_44 = __pyx_v_i;
--          __pyx_t_45 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides));
--        }
--        __pyx_L25:;
--        goto __pyx_L19;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_extend.pyx":164
-- *                     conv[i, j] = fixed[i, j]
-- *             else:
-- *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--        __pyx_t_46 = __pyx_v_i;
--        __pyx_t_47 = __pyx_v_j;
--        __pyx_t_48 = __pyx_v_i;
--        __pyx_t_49 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].strides));
--      }
--      __pyx_L19:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_extend.pyx":166
-- *                 conv[i, j] = fixed[i, j]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve2d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend = {__Pyx_NAMESTR("convolve3d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve3d_boundary_extend (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve3d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_15boundary_extend_4convolve3d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_extend.pyx":170
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_extend(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_4convolve3d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nz;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_nkz;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  int __pyx_v_wkz;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_k;
--  unsigned int __pyx_v_iii;
--  unsigned int __pyx_v_jjj;
--  unsigned int __pyx_v_kkk;
--  int __pyx_v_ii;
--  int __pyx_v_jj;
--  int __pyx_v_kk;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  int __pyx_v_jjmin;
--  int __pyx_v_jjmax;
--  int __pyx_v_kkmin;
--  int __pyx_v_kkmax;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  int __pyx_t_4;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyObject *__pyx_t_8 = NULL;
--  PyObject *__pyx_t_9 = NULL;
--  PyArrayObject *__pyx_t_10 = NULL;
--  PyArrayObject *__pyx_t_11 = NULL;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  int __pyx_t_21;
--  int __pyx_t_22;
--  int __pyx_t_23;
--  int __pyx_t_24;
--  int __pyx_t_25;
--  int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  unsigned int __pyx_t_50;
--  unsigned int __pyx_t_51;
--  unsigned int __pyx_t_52;
--  unsigned int __pyx_t_53;
--  unsigned int __pyx_t_54;
--  unsigned int __pyx_t_55;
--  unsigned int __pyx_t_56;
--  unsigned int __pyx_t_57;
--  unsigned int __pyx_t_58;
--  unsigned int __pyx_t_59;
--  unsigned int __pyx_t_60;
--  unsigned int __pyx_t_61;
--  unsigned int __pyx_t_62;
--  unsigned int __pyx_t_63;
--  unsigned int __pyx_t_64;
--  unsigned int __pyx_t_65;
--  unsigned int __pyx_t_66;
--  unsigned int __pyx_t_67;
--  unsigned int __pyx_t_68;
--  unsigned int __pyx_t_69;
--  unsigned int __pyx_t_70;
--  unsigned int __pyx_t_71;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve3d_boundary_extend", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pyb [...]
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pyb [...]
--
--  /* "astropy/convolution/boundary_extend.pyx":173
-- *                                np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    if (!__pyx_t_2) {
--      __pyx_t_3 = (__Pyx_mod_long((__pyx_v_g->dimensions[2]), 2) != 1);
--      __pyx_t_4 = __pyx_t_3;
--    } else {
--      __pyx_t_4 = __pyx_t_2;
--    }
--    __pyx_t_2 = __pyx_t_4;
--  } else {
--    __pyx_t_2 = __pyx_t_1;
--  }
--  if (__pyx_t_2) {
--
--    /* "astropy/convolution/boundary_extend.pyx":174
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_extend.pyx":176
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  if (__pyx_t_2) {
--    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_7);
--    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_4 = __pyx_t_1;
--  } else {
--    __pyx_t_4 = __pyx_t_2;
--  }
--  if (unlikely(!__pyx_t_4)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_extend.pyx":178
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_extend.pyx":179
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_extend.pyx":180
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_nz = (__pyx_v_f->dimensions[2]);
--
--  /* "astropy/convolution/boundary_extend.pyx":181
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_extend.pyx":182
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_extend.pyx":183
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
--
--  /* "astropy/convolution/boundary_extend.pyx":184
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_extend.pyx":185
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_extend.pyx":186
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
-- */
--  __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
--
--  /* "astropy/convolution/boundary_extend.pyx":187
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef unsigned int i, j, k, iii, jjj, kkk
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  __pyx_t_5 = 0;
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
--  __pyx_t_9 = 0;
--  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2 [...]
--    }
--  }
--  __pyx_t_10 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":188
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, j, k, iii, jjj, kkk
-- *     cdef int ii, jj, kk
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_p [...]
--    }
--  }
--  __pyx_t_11 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
--  __pyx_t_8 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":198
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_extend.pyx":199
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_extend.pyx":200
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_extend.pyx":201
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_j;
--        __pyx_t_20 = __pyx_v_k;
--        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
--        if (__pyx_t_4) {
--
--          /* "astropy/convolution/boundary_extend.pyx":202
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_extend.pyx":203
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_extend.pyx":204
-- *                     top = 0.
-- *                     bot = 0.
-- *                     iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- */
--          __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--          /* "astropy/convolution/boundary_extend.pyx":205
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- */
--          __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--          /* "astropy/convolution/boundary_extend.pyx":206
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- */
--          __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--          /* "astropy/convolution/boundary_extend.pyx":207
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- */
--          __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--          /* "astropy/convolution/boundary_extend.pyx":208
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- */
--          __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
--
--          /* "astropy/convolution/boundary_extend.pyx":209
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- */
--          __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
--
--          /* "astropy/convolution/boundary_extend.pyx":210
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- */
--          __pyx_t_21 = __pyx_v_iimax;
--          for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_ii = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_extend.pyx":211
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- */
--            __pyx_t_23 = __pyx_v_jjmax;
--            for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
--              __pyx_v_jj = __pyx_t_24;
--
--              /* "astropy/convolution/boundary_extend.pyx":212
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- */
--              __pyx_t_25 = __pyx_v_kkmax;
--              for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--                __pyx_v_kk = __pyx_t_26;
--
--                /* "astropy/convolution/boundary_extend.pyx":213
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- */
--                __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
--
--                /* "astropy/convolution/boundary_extend.pyx":214
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- *                                 val = f[iii, jjj, kkk]
-- */
--                __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
--
--                /* "astropy/convolution/boundary_extend.pyx":215
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)             # <<<<<<<<<<<<<<
-- *                                 val = f[iii, jjj, kkk]
-- *                                 if not npy_isnan(val):
-- */
--                __pyx_v_kkk = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_kk, 0), (__pyx_v_nz - 1));
--
--                /* "astropy/convolution/boundary_extend.pyx":216
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- *                                 val = f[iii, jjj, kkk]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- */
--                __pyx_t_27 = __pyx_v_iii;
--                __pyx_t_28 = __pyx_v_jjj;
--                __pyx_t_29 = __pyx_v_kkk;
--                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_extend.pyx":217
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- *                                 val = f[iii, jjj, kkk]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_4) {
--
--                  /* "astropy/convolution/boundary_extend.pyx":220
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                  __pyx_t_30 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                  __pyx_t_31 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                  __pyx_t_32 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                  /* "astropy/convolution/boundary_extend.pyx":221
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- * 
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_extend.pyx":222
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- * 
-- *                     if bot != 0.:
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L17;
--                }
--                __pyx_L17:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_extend.pyx":224
-- *                                     bot += ker
-- * 
-- *                     if bot != 0.:             # <<<<<<<<<<<<<<
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_4 = (__pyx_v_bot != 0.);
--          if (__pyx_t_4) {
--
--            /* "astropy/convolution/boundary_extend.pyx":225
-- * 
-- *                     if bot != 0.:
-- *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_33 = __pyx_v_i;
--            __pyx_t_34 = __pyx_v_j;
--            __pyx_t_35 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L18;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_extend.pyx":227
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]
-- */
--            __pyx_t_36 = __pyx_v_i;
--            __pyx_t_37 = __pyx_v_j;
--            __pyx_t_38 = __pyx_v_k;
--            __pyx_t_39 = __pyx_v_i;
--            __pyx_t_40 = __pyx_v_j;
--            __pyx_t_41 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_f.diminfo[0].strides, __py [...]
--          }
--          __pyx_L18:;
--          goto __pyx_L10;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_extend.pyx":229
-- *                         fixed[i, j, k] = f[i, j, k]
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--          __pyx_t_42 = __pyx_v_i;
--          __pyx_t_43 = __pyx_v_j;
--          __pyx_t_44 = __pyx_v_k;
--          __pyx_t_45 = __pyx_v_i;
--          __pyx_t_46 = __pyx_v_j;
--          __pyx_t_47 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_ [...]
--        }
--        __pyx_L10:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_extend.pyx":232
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_extend.pyx":233
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_extend.pyx":234
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_extend.pyx":235
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_48 = __pyx_v_i;
--        __pyx_t_49 = __pyx_v_j;
--        __pyx_t_50 = __pyx_v_k;
--        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides))));
--        if (__pyx_t_4) {
--
--          /* "astropy/convolution/boundary_extend.pyx":236
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_extend.pyx":237
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_extend.pyx":238
-- *                     top = 0.
-- *                     bot = 0.
-- *                     iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- */
--          __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--          /* "astropy/convolution/boundary_extend.pyx":239
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- */
--          __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--          /* "astropy/convolution/boundary_extend.pyx":240
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- */
--          __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--          /* "astropy/convolution/boundary_extend.pyx":241
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- */
--          __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--          /* "astropy/convolution/boundary_extend.pyx":242
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- */
--          __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
--
--          /* "astropy/convolution/boundary_extend.pyx":243
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- */
--          __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
--
--          /* "astropy/convolution/boundary_extend.pyx":244
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- */
--          __pyx_t_21 = __pyx_v_iimax;
--          for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_ii = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_extend.pyx":245
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- */
--            __pyx_t_23 = __pyx_v_jjmax;
--            for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
--              __pyx_v_jj = __pyx_t_24;
--
--              /* "astropy/convolution/boundary_extend.pyx":246
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- */
--              __pyx_t_25 = __pyx_v_kkmax;
--              for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--                __pyx_v_kk = __pyx_t_26;
--
--                /* "astropy/convolution/boundary_extend.pyx":247
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- */
--                __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
--
--                /* "astropy/convolution/boundary_extend.pyx":248
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- *                                 val = fixed[iii, jjj, kkk]
-- */
--                __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
--
--                /* "astropy/convolution/boundary_extend.pyx":249
-- *                                 iii = int_min(int_max(ii, 0), nx - 1)
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)             # <<<<<<<<<<<<<<
-- *                                 val = fixed[iii, jjj, kkk]
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- */
--                __pyx_v_kkk = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_kk, 0), (__pyx_v_nz - 1));
--
--                /* "astropy/convolution/boundary_extend.pyx":250
-- *                                 jjj = int_min(int_max(jj, 0), ny - 1)
-- *                                 kkk = int_min(int_max(kk, 0), nz - 1)
-- *                                 val = fixed[iii, jjj, kkk]             # <<<<<<<<<<<<<<
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_51 = __pyx_v_iii;
--                __pyx_t_52 = __pyx_v_jjj;
--                __pyx_t_53 = __pyx_v_kkk;
--                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_extend.pyx":253
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- */
--                __pyx_t_54 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                __pyx_t_55 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                __pyx_t_56 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_extend.pyx":254
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_4) {
--
--                  /* "astropy/convolution/boundary_extend.pyx":255
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- *                     if bot != 0:
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_extend.pyx":256
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L32;
--                }
--                __pyx_L32:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_extend.pyx":257
-- *                                     top += val * ker
-- *                                     bot += ker
-- *                     if bot != 0:             # <<<<<<<<<<<<<<
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_4 = (__pyx_v_bot != 0.0);
--          if (__pyx_t_4) {
--
--            /* "astropy/convolution/boundary_extend.pyx":258
-- *                                     bot += ker
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_57 = __pyx_v_i;
--            __pyx_t_58 = __pyx_v_j;
--            __pyx_t_59 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L33;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_extend.pyx":260
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]
-- */
--            __pyx_t_60 = __pyx_v_i;
--            __pyx_t_61 = __pyx_v_j;
--            __pyx_t_62 = __pyx_v_k;
--            __pyx_t_63 = __pyx_v_i;
--            __pyx_t_64 = __pyx_v_j;
--            __pyx_t_65 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_fixed.diminfo[0].strides,  [...]
--          }
--          __pyx_L33:;
--          goto __pyx_L25;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_extend.pyx":262
-- *                         conv[i, j, k] = fixed[i, j, k]
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--          __pyx_t_66 = __pyx_v_i;
--          __pyx_t_67 = __pyx_v_j;
--          __pyx_t_68 = __pyx_v_k;
--          __pyx_t_69 = __pyx_v_i;
--          __pyx_t_70 = __pyx_v_j;
--          __pyx_t_71 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_fixed.diminfo[0].strides, __ [...]
--        }
--        __pyx_L25:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_extend.pyx":264
-- *                     conv[i, j, k] = fixed[i, j, k]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_XDECREF(__pyx_t_9);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve3d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
--  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":194
-- *         # experimental exception made for __getbuffer__ and __releasebuffer__
-- *         # -- the details of this may change.
-- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
-- *             # This implementation of getbuffer is geared towards Cython
-- *             # requirements, and does not yet fullfill the PEP.
-- */
--
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_v_copy_shape;
--  int __pyx_v_i;
--  int __pyx_v_ndim;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  int __pyx_v_t;
--  char *__pyx_v_f;
--  PyArray_Descr *__pyx_v_descr = 0;
--  int __pyx_v_offset;
--  int __pyx_v_hasfields;
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  int __pyx_t_7;
--  PyObject *__pyx_t_8 = NULL;
--  char *__pyx_t_9;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("__getbuffer__", 0);
--  if (__pyx_v_info != NULL) {
--    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(__pyx_v_info->obj);
--  }
--
--  /* "numpy.pxd":200
-- *             # of flags
-- * 
-- *             if info == NULL: return             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int copy_shape, i, ndim
-- */
--  __pyx_t_1 = (__pyx_v_info == NULL);
--  if (__pyx_t_1) {
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":203
-- * 
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":204
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- * 
-- *             ndim = PyArray_NDIM(self)
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":206
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
--
--  /* "numpy.pxd":208
-- *             ndim = PyArray_NDIM(self)
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 copy_shape = 1
-- *             else:
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":209
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 copy_shape = 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 copy_shape = 0
-- */
--    __pyx_v_copy_shape = 1;
--    goto __pyx_L4;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":211
-- *                 copy_shape = 1
-- *             else:
-- *                 copy_shape = 0             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- */
--    __pyx_v_copy_shape = 0;
--  }
--  __pyx_L4:;
--
--  /* "numpy.pxd":213
-- *                 copy_shape = 0
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- */
--  __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":214
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- */
--    __pyx_t_2 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS));
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L5;
--  }
--  __pyx_L5:;
--
--  /* "numpy.pxd":217
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- */
--  __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":218
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- */
--    __pyx_t_1 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS));
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (__pyx_t_2) {
--
--    /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L6;
--  }
--  __pyx_L6:;
--
--  /* "numpy.pxd":221
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
-- *             info.ndim = ndim
-- *             if copy_shape:
-- */
--  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
--
--  /* "numpy.pxd":222
-- * 
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim             # <<<<<<<<<<<<<<
-- *             if copy_shape:
-- *                 # Allocate new buffer for strides and shape info.
-- */
--  __pyx_v_info->ndim = __pyx_v_ndim;
--
--  /* "numpy.pxd":223
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim
-- *             if copy_shape:             # <<<<<<<<<<<<<<
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- */
--  if (__pyx_v_copy_shape) {
--
--    /* "numpy.pxd":226
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
--
--    /* "numpy.pxd":227
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- */
--    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
--
--    /* "numpy.pxd":228
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- */
--    __pyx_t_5 = __pyx_v_ndim;
--    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
--      __pyx_v_i = __pyx_t_6;
--
--      /* "numpy.pxd":229
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- */
--      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
--
--      /* "numpy.pxd":230
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- */
--      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
--    }
--    goto __pyx_L7;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":232
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
--
--    /* "numpy.pxd":233
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- */
--    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
--  }
--  __pyx_L7:;
--
--  /* "numpy.pxd":234
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- */
--  __pyx_v_info->suboffsets = NULL;
--
--  /* "numpy.pxd":235
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- * 
-- */
--  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
--
--  /* "numpy.pxd":236
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int t
-- */
--  __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(__pyx_v_self));
--
--  /* "numpy.pxd":239
-- * 
-- *             cdef int t
-- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
-- *             cdef dtype descr = self.descr
-- *             cdef list stack
-- */
--  __pyx_v_f = NULL;
--
--  /* "numpy.pxd":240
-- *             cdef int t
-- *             cdef char* f = NULL
-- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
-- *             cdef list stack
-- *             cdef int offset
-- */
--  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
--  __Pyx_INCREF(__pyx_t_4);
--  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "numpy.pxd":244
-- *             cdef int offset
-- * 
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields and not copy_shape:
-- */
--  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
--
--  /* "numpy.pxd":246
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
-- * 
-- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
-- *                 # do not call releasebuffer
-- *                 info.obj = None
-- */
--  __pyx_t_2 = (!__pyx_v_hasfields);
--  if (__pyx_t_2) {
--    __pyx_t_3 = (!__pyx_v_copy_shape);
--    __pyx_t_1 = __pyx_t_3;
--  } else {
--    __pyx_t_1 = __pyx_t_2;
--  }
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":248
-- *             if not hasfields and not copy_shape:
-- *                 # do not call releasebuffer
-- *                 info.obj = None             # <<<<<<<<<<<<<<
-- *             else:
-- *                 # need to call releasebuffer
-- */
--    __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(Py_None);
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = Py_None;
--    goto __pyx_L10;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":251
-- *             else:
-- *                 # need to call releasebuffer
-- *                 info.obj = self             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields:
-- */
--    __Pyx_INCREF(((PyObject *)__pyx_v_self));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
--  }
--  __pyx_L10:;
--
--  /* "numpy.pxd":253
-- *                 info.obj = self
-- * 
-- *             if not hasfields:             # <<<<<<<<<<<<<<
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- */
--  __pyx_t_1 = (!__pyx_v_hasfields);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":254
-- * 
-- *             if not hasfields:
-- *                 t = descr.type_num             # <<<<<<<<<<<<<<
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- */
--    __pyx_t_5 = __pyx_v_descr->type_num;
--    __pyx_v_t = __pyx_t_5;
--
--    /* "numpy.pxd":255
-- *             if not hasfields:
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_1 = (__pyx_v_descr->byteorder == '>');
--    if (__pyx_t_1) {
--      __pyx_t_2 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_2 = __pyx_t_1;
--    }
--    if (!__pyx_t_2) {
--
--      /* "numpy.pxd":256
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- */
--      __pyx_t_1 = (__pyx_v_descr->byteorder == '<');
--      if (__pyx_t_1) {
--        __pyx_t_3 = (!__pyx_v_little_endian);
--        __pyx_t_7 = __pyx_t_3;
--      } else {
--        __pyx_t_7 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_7;
--    } else {
--      __pyx_t_1 = __pyx_t_2;
--    }
--    if (__pyx_t_1) {
--
--      /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L12;
--    }
--    __pyx_L12:;
--
--    /* "numpy.pxd":258
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_BYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__b;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":259
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UBYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__B;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":260
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_SHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__h;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":261
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_USHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__H;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":262
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_INT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__i;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":263
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UINT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__I;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":264
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__l;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":265
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__L;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":266
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":267
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":268
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_FLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__f;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":269
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__d;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":270
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__g;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":271
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zf;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":272
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zd;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":273
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zg;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":274
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_OBJECT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__O;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":276
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *                 info.format = f
-- *                 return
-- */
--      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
--      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
--      __pyx_t_8 = 0;
--      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_8);
--      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--    __pyx_L13:;
--
--    /* "numpy.pxd":277
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f             # <<<<<<<<<<<<<<
-- *                 return
-- *             else:
-- */
--    __pyx_v_info->format = __pyx_v_f;
--
--    /* "numpy.pxd":278
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f
-- *                 return             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- */
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L11;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":280
-- *                 return
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0
-- */
--    __pyx_v_info->format = ((char *)malloc(255));
--
--    /* "numpy.pxd":281
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
-- *                 offset = 0
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- */
--    (__pyx_v_info->format[0]) = '^';
--
--    /* "numpy.pxd":282
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0             # <<<<<<<<<<<<<<
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- */
--    __pyx_v_offset = 0;
--
--    /* "numpy.pxd":285
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)             # <<<<<<<<<<<<<<
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- */
--    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_v_f = __pyx_t_9;
--
--    /* "numpy.pxd":286
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)
-- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- */
--    (__pyx_v_f[0]) = '\x00';
--  }
--  __pyx_L11:;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = -1;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
--  }
--  goto __pyx_L2;
--  __pyx_L0:;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
--    __Pyx_GOTREF(Py_None);
--    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
--  }
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
--  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":288
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- */
--
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
--
--  /* "numpy.pxd":289
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_t_1 = PyArray_HASFIELDS(__pyx_v_self);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":290
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)
-- */
--    free(__pyx_v_info->format);
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":291
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.strides)
-- *                 # info.shape was stored after info.strides in the same block
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":292
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
-- *                 # info.shape was stored after info.strides in the same block
-- * 
-- */
--    free(__pyx_v_info->strides);
--    goto __pyx_L4;
--  }
--  __pyx_L4:;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":768
-- * ctypedef npy_cdouble     complex_t
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
--
--  /* "numpy.pxd":769
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":771
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
--
--  /* "numpy.pxd":772
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":774
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
--
--  /* "numpy.pxd":775
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":777
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
--
--  /* "numpy.pxd":778
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":780
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
--
--  /* "numpy.pxd":781
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":783
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
-- *     # Recursive utility function used in __getbuffer__ to get format
-- *     # string. The new location in the format string is returned.
-- */
--
--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) {
--  PyArray_Descr *__pyx_v_child = 0;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  PyObject *__pyx_v_fields = 0;
--  PyObject *__pyx_v_childname = NULL;
--  PyObject *__pyx_v_new_offset = NULL;
--  PyObject *__pyx_v_t = NULL;
--  char *__pyx_r;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  Py_ssize_t __pyx_t_2;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *(*__pyx_t_6)(PyObject *);
--  int __pyx_t_7;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  long __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
--
--  /* "numpy.pxd":790
-- *     cdef int delta_offset
-- *     cdef tuple i
-- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- *     cdef tuple fields
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":791
-- *     cdef tuple i
-- *     cdef int endian_detector = 1
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- *     cdef tuple fields
-- * 
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":794
-- *     cdef tuple fields
-- * 
-- *     for childname in descr.names:             # <<<<<<<<<<<<<<
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields
-- */
--  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
--  for (;;) {
--    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
--    #if CYTHON_COMPILING_IN_CPYTHON
--    __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_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #else
--    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #endif
--    __Pyx_XDECREF(__pyx_v_childname);
--    __pyx_v_childname = __pyx_t_3;
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":795
-- * 
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
-- *         child, new_offset = fields
-- * 
-- */
--    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
--    __pyx_v_fields = ((PyObject*)__pyx_t_3);
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":796
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields             # <<<<<<<<<<<<<<
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- */
--    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
--      PyObject* sequence = ((PyObject *)__pyx_v_fields);
--      #if CYTHON_COMPILING_IN_CPYTHON
--      Py_ssize_t size = Py_SIZE(sequence);
--      #else
--      Py_ssize_t size = PySequence_Size(sequence);
--      #endif
--      if (unlikely(size != 2)) {
--        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
--        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      #if CYTHON_COMPILING_IN_CPYTHON
--      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
--      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
--      __Pyx_INCREF(__pyx_t_3);
--      __Pyx_INCREF(__pyx_t_4);
--      #else
--      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      #endif
--    } else if (1) {
--      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else
--    {
--      Py_ssize_t index = -1;
--      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
--      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_3);
--      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_4);
--      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_t_6 = NULL;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      goto __pyx_L6_unpacking_done;
--      __pyx_L5_unpacking_failed:;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_6 = NULL;
--      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_L6_unpacking_done:;
--    }
--    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
--    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
--    __pyx_t_3 = 0;
--    __Pyx_XDECREF(__pyx_v_new_offset);
--    __pyx_v_new_offset = __pyx_t_4;
--    __pyx_t_4 = 0;
--
--    /* "numpy.pxd":798
-- *         child, new_offset = fields
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- */
--    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L7;
--    }
--    __pyx_L7:;
--
--    /* "numpy.pxd":801
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_7 = (__pyx_v_child->byteorder == '>');
--    if (__pyx_t_7) {
--      __pyx_t_8 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_8 = __pyx_t_7;
--    }
--    if (!__pyx_t_8) {
--
--      /* "numpy.pxd":802
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *             raise ValueError(u"Non-native byte order not supported")
-- *             # One could encode it in the format string and have Cython
-- */
--      __pyx_t_7 = (__pyx_v_child->byteorder == '<');
--      if (__pyx_t_7) {
--        __pyx_t_9 = (!__pyx_v_little_endian);
--        __pyx_t_10 = __pyx_t_9;
--      } else {
--        __pyx_t_10 = __pyx_t_7;
--      }
--      __pyx_t_7 = __pyx_t_10;
--    } else {
--      __pyx_t_7 = __pyx_t_8;
--    }
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L8;
--    }
--    __pyx_L8:;
--
--    /* "numpy.pxd":813
-- * 
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- */
--    while (1) {
--      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (!__pyx_t_7) break;
--
--      /* "numpy.pxd":814
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
-- *             f += 1
-- *             offset[0] += 1
-- */
--      (__pyx_v_f[0]) = 120;
--
--      /* "numpy.pxd":815
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1             # <<<<<<<<<<<<<<
-- *             offset[0] += 1
-- * 
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--
--      /* "numpy.pxd":816
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- *             offset[0] += 1             # <<<<<<<<<<<<<<
-- * 
-- *         offset[0] += child.itemsize
-- */
--      __pyx_t_11 = 0;
--      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
--    }
--
--    /* "numpy.pxd":818
-- *             offset[0] += 1
-- * 
-- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- */
--    __pyx_t_11 = 0;
--    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
--
--    /* "numpy.pxd":820
-- *         offset[0] += child.itemsize
-- * 
-- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
-- *             t = child.type_num
-- *             if end - f < 5:
-- */
--    __pyx_t_7 = (!PyDataType_HASFIELDS(__pyx_v_child));
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":821
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num             # <<<<<<<<<<<<<<
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- */
--      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __Pyx_XDECREF(__pyx_v_t);
--      __pyx_v_t = __pyx_t_3;
--      __pyx_t_3 = 0;
--
--      /* "numpy.pxd":822
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num
-- *             if end - f < 5:             # <<<<<<<<<<<<<<
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- * 
-- */
--      __pyx_t_7 = ((__pyx_v_end - __pyx_v_f) < 5);
--      if (__pyx_t_7) {
--
--        /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--
--      /* "numpy.pxd":826
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 98;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":827
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 66;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":828
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 104;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":829
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 72;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":830
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 105;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":831
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 73;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":832
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 108;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":833
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 76;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":834
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 113;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":835
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 81;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":836
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 102;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":837
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 100;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":838
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 103;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":839
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 102;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":840
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 100;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":841
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 103;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":842
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 79;
--        goto __pyx_L13;
--      }
--      /*else*/ {
--
--        /* "numpy.pxd":844
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *             f += 1
-- *         else:
-- */
--        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
--        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--        __pyx_t_5 = 0;
--        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_5);
--        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      __pyx_L13:;
--
--      /* "numpy.pxd":845
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *             f += 1             # <<<<<<<<<<<<<<
-- *         else:
-- *             # Cython ignores struct boundary information ("T{...}"),
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--      goto __pyx_L11;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":849
-- *             # Cython ignores struct boundary information ("T{...}"),
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
-- *     return f
-- * 
-- */
--      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_v_f = __pyx_t_12;
--    }
--    __pyx_L11:;
--  }
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "numpy.pxd":850
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)
-- *     return f             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __pyx_r = __pyx_v_f;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_child);
--  __Pyx_XDECREF(__pyx_v_fields);
--  __Pyx_XDECREF(__pyx_v_childname);
--  __Pyx_XDECREF(__pyx_v_new_offset);
--  __Pyx_XDECREF(__pyx_v_t);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":965
-- * 
-- * 
-- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- */
--
--static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
--  PyObject *__pyx_v_baseptr;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("set_array_base", 0);
--
--  /* "numpy.pxd":967
-- * cdef inline void set_array_base(ndarray arr, object base):
-- *      cdef PyObject* baseptr
-- *      if base is None:             # <<<<<<<<<<<<<<
-- *          baseptr = NULL
-- *      else:
-- */
--  __pyx_t_1 = (__pyx_v_base == Py_None);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":968
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- *          baseptr = NULL             # <<<<<<<<<<<<<<
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- */
--    __pyx_v_baseptr = NULL;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":970
-- *          baseptr = NULL
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- */
--    Py_INCREF(__pyx_v_base);
--
--    /* "numpy.pxd":971
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr
-- */
--    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":972
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
-- *      arr.base = baseptr
-- * 
-- */
--  Py_XDECREF(__pyx_v_arr->base);
--
--  /* "numpy.pxd":973
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- */
--  __pyx_v_arr->base = __pyx_v_baseptr;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("get_array_base", 0);
--
--  /* "numpy.pxd":976
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
-- *         return None
-- *     else:
-- */
--  __pyx_t_1 = (__pyx_v_arr->base == NULL);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":977
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:
-- *         return None             # <<<<<<<<<<<<<<
-- *     else:
-- *         return <object>arr.base
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(Py_None);
--    __pyx_r = Py_None;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":979
-- *         return None
-- *     else:
-- *         return <object>arr.base             # <<<<<<<<<<<<<<
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
--    __pyx_r = ((PyObject *)__pyx_v_arr->base);
--    goto __pyx_L0;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--static PyMethodDef __pyx_methods[] = {
--  {0, 0, 0, 0}
--};
--
--#if PY_MAJOR_VERSION >= 3
--static struct PyModuleDef __pyx_moduledef = {
--  #if PY_VERSION_HEX < 0x03020000
--    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
--  #else
--    PyModuleDef_HEAD_INIT,
--  #endif
--    __Pyx_NAMESTR("boundary_extend"),
--    0, /* m_doc */
--    -1, /* m_size */
--    __pyx_methods /* m_methods */,
--    NULL, /* m_reload */
--    NULL, /* m_traverse */
--    NULL, /* m_clear */
--    NULL /* m_free */
--};
--#endif
--
--static __Pyx_StringTabEntry __pyx_string_tab[] = {
--  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
--  {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0},
--  {&__pyx_kp_u_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 1, 0, 0},
--  {&__pyx_kp_u_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 1, 0, 0},
--  {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1},
--  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
--  {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1},
--  {&__pyx_n_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 1},
--  {&__pyx_n_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 1},
--  {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0},
--  {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0},
--  {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0},
--  {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1},
--  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
--  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
--  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
--  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
--  {&__pyx_n_s__bot, __pyx_k__bot, sizeof(__pyx_k__bot), 0, 0, 1, 1},
--  {&__pyx_n_s__conv, __pyx_k__conv, sizeof(__pyx_k__conv), 0, 0, 1, 1},
--  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
--  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
--  {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1},
--  {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1},
--  {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1},
--  {&__pyx_n_s__g, __pyx_k__g, sizeof(__pyx_k__g), 0, 0, 1, 1},
--  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
--  {&__pyx_n_s__ii, __pyx_k__ii, sizeof(__pyx_k__ii), 0, 0, 1, 1},
--  {&__pyx_n_s__iii, __pyx_k__iii, sizeof(__pyx_k__iii), 0, 0, 1, 1},
--  {&__pyx_n_s__iimax, __pyx_k__iimax, sizeof(__pyx_k__iimax), 0, 0, 1, 1},
--  {&__pyx_n_s__iimin, __pyx_k__iimin, sizeof(__pyx_k__iimin), 0, 0, 1, 1},
--  {&__pyx_n_s__j, __pyx_k__j, sizeof(__pyx_k__j), 0, 0, 1, 1},
--  {&__pyx_n_s__jj, __pyx_k__jj, sizeof(__pyx_k__jj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjj, __pyx_k__jjj, sizeof(__pyx_k__jjj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmax, __pyx_k__jjmax, sizeof(__pyx_k__jjmax), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmin, __pyx_k__jjmin, sizeof(__pyx_k__jjmin), 0, 0, 1, 1},
--  {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1},
--  {&__pyx_n_s__ker, __pyx_k__ker, sizeof(__pyx_k__ker), 0, 0, 1, 1},
--  {&__pyx_n_s__kk, __pyx_k__kk, sizeof(__pyx_k__kk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkk, __pyx_k__kkk, sizeof(__pyx_k__kkk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmax, __pyx_k__kkmax, sizeof(__pyx_k__kkmax), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmin, __pyx_k__kkmin, sizeof(__pyx_k__kkmin), 0, 0, 1, 1},
--  {&__pyx_n_s__nkx, __pyx_k__nkx, sizeof(__pyx_k__nkx), 0, 0, 1, 1},
--  {&__pyx_n_s__nky, __pyx_k__nky, sizeof(__pyx_k__nky), 0, 0, 1, 1},
--  {&__pyx_n_s__nkz, __pyx_k__nkz, sizeof(__pyx_k__nkz), 0, 0, 1, 1},
--  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
--  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
--  {&__pyx_n_s__nx, __pyx_k__nx, sizeof(__pyx_k__nx), 0, 0, 1, 1},
--  {&__pyx_n_s__ny, __pyx_k__ny, sizeof(__pyx_k__ny), 0, 0, 1, 1},
--  {&__pyx_n_s__nz, __pyx_k__nz, sizeof(__pyx_k__nz), 0, 0, 1, 1},
--  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
--  {&__pyx_n_s__top, __pyx_k__top, sizeof(__pyx_k__top), 0, 0, 1, 1},
--  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
--  {&__pyx_n_s__wkx, __pyx_k__wkx, sizeof(__pyx_k__wkx), 0, 0, 1, 1},
--  {&__pyx_n_s__wky, __pyx_k__wky, sizeof(__pyx_k__wky), 0, 0, 1, 1},
--  {&__pyx_n_s__wkz, __pyx_k__wkz, sizeof(__pyx_k__wkz), 0, 0, 1, 1},
--  {0, 0, 0, 0, 0, 0, 0}
--};
--static int __Pyx_InitCachedBuiltins(void) {
--  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--static int __Pyx_InitCachedConstants(void) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
--
--  /* "astropy/convolution/boundary_extend.pyx":23
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_2);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
--
--  /* "astropy/convolution/boundary_extend.pyx":91
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_3);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
--
--  /* "astropy/convolution/boundary_extend.pyx":174
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_4);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
--
--  /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_6);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
--
--  /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--  __pyx_k_tuple_8 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_7)); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_8);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8));
--
--  /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_10);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
--
--  /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_13);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
--
--  /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--  __pyx_k_tuple_14 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_14);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14));
--
--  /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--  __pyx_k_tuple_16 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_15)); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_16);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
--
--  /* "astropy/convolution/boundary_extend.pyx":19
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_extend(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--  __pyx_k_tuple_17 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((Py [...]
--  __Pyx_GOTREF(__pyx_k_tuple_17);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
--  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 19, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_extend.pyx":87
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_extend(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--  __pyx_k_tuple_22 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((PyObject *)__pyx_n_s__ii), ((PyObject  [...]
--  __Pyx_GOTREF(__pyx_k_tuple_22);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
--  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 87, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_extend.pyx":170
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_extend(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--  __pyx_k_tuple_25 = PyTuple_Pack(32, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject  [...]
--  __Pyx_GOTREF(__pyx_k_tuple_25);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
--  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 170, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_RefNannyFinishContext();
--  return 0;
--  __pyx_L1_error:;
--  __Pyx_RefNannyFinishContext();
--  return -1;
--}
--
--static int __Pyx_InitGlobals(void) {
--  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--#if PY_MAJOR_VERSION < 3
--PyMODINIT_FUNC initboundary_extend(void); /*proto*/
--PyMODINIT_FUNC initboundary_extend(void)
--#else
--PyMODINIT_FUNC PyInit_boundary_extend(void); /*proto*/
--PyMODINIT_FUNC PyInit_boundary_extend(void)
--#endif
--{
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  __Pyx_RefNannyDeclarations
--  #if CYTHON_REFNANNY
--  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
--  if (!__Pyx_RefNanny) {
--      PyErr_Clear();
--      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
--      if (!__Pyx_RefNanny)
--          Py_FatalError("failed to import 'refnanny' module");
--  }
--  #endif
--  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_boundary_extend(void)", 0);
--  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #ifdef __Pyx_CyFunction_USED
--  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_FusedFunction_USED
--  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_Generator_USED
--  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  /*--- Library function declarations ---*/
--  /*--- Threads initialization code ---*/
--  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
--  #ifdef WITH_THREAD /* Python build with threading support? */
--  PyEval_InitThreads();
--  #endif
--  #endif
--  /*--- Module creation code ---*/
--  #if PY_MAJOR_VERSION < 3
--  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("boundary_extend"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
--  #else
--  __pyx_m = PyModule_Create(&__pyx_moduledef);
--  #endif
--  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if PY_MAJOR_VERSION >= 3
--  {
--    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_extend")) {
--      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_extend", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--  }
--  #endif
--  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if CYTHON_COMPILING_IN_PYPY
--  Py_INCREF(__pyx_b);
--  #endif
--  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  /*--- Initialize various global constants etc. ---*/
--  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_module_is_main_astropy__convolution__boundary_extend) {
--    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  }
--  /*--- Builtin init code ---*/
--  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Constants init code ---*/
--  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Global init code ---*/
--  /*--- Variable export code ---*/
--  /*--- Function export code ---*/
--  /*--- Type init code ---*/
--  /*--- Type import code ---*/
--  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
--  #if CYTHON_COMPILING_IN_PYPY
--  sizeof(PyTypeObject),
--  #else
--  sizeof(PyHeapTypeObject),
--  #endif
--  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Variable import code ---*/
--  /*--- Function import code ---*/
--  /*--- Execution code ---*/
--
--  /* "astropy/convolution/boundary_extend.pyx":3
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst
-- * from __future__ import division
-- * import numpy as np             # <<<<<<<<<<<<<<
-- * cimport numpy as np
-- * 
-- */
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":6
-- * cimport numpy as np
-- * 
-- * DTYPE = np.float             # <<<<<<<<<<<<<<
-- * ctypedef np.float_t DTYPE_t
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":19
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_extend(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":87
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_extend(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":170
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_extend(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                                np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_extend.pyx":1
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
-- * from __future__ import division
-- * import numpy as np
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--
--  /* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  if (__pyx_m) {
--    __Pyx_AddTraceback("init astropy.convolution.boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
--    Py_DECREF(__pyx_m); __pyx_m = 0;
--  } else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_extend");
--  }
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  #if PY_MAJOR_VERSION < 3
--  return;
--  #else
--  return __pyx_m;
--  #endif
--}
--
--/* Runtime support code */
--#if CYTHON_REFNANNY
--static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
--    PyObject *m = NULL, *p = NULL;
--    void *r = NULL;
--    m = PyImport_ImportModule((char *)modname);
--    if (!m) goto end;
--    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
--    if (!p) goto end;
--    r = PyLong_AsVoidPtr(p);
--end:
--    Py_XDECREF(p);
--    Py_XDECREF(m);
--    return (__Pyx_RefNannyAPIStruct *)r;
--}
--#endif /* CYTHON_REFNANNY */
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
--    PyObject *result;
--    result = PyObject_GetAttr(dict, name);
--    if (!result) {
--        if (dict != __pyx_b) {
--            PyErr_Clear();
--            result = PyObject_GetAttr(__pyx_b, name);
--        }
--        if (!result) {
--            PyErr_SetObject(PyExc_NameError, name);
--        }
--    }
--    return result;
--}
--
--static void __Pyx_RaiseArgtupleInvalid(
--    const char* func_name,
--    int exact,
--    Py_ssize_t num_min,
--    Py_ssize_t num_max,
--    Py_ssize_t num_found)
--{
--    Py_ssize_t num_expected;
--    const char *more_or_less;
--    if (num_found < num_min) {
--        num_expected = num_min;
--        more_or_less = "at least";
--    } else {
--        num_expected = num_max;
--        more_or_less = "at most";
--    }
--    if (exact) {
--        more_or_less = "exactly";
--    }
--    PyErr_Format(PyExc_TypeError,
--                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
--                 func_name, more_or_less, num_expected,
--                 (num_expected == 1) ? "" : "s", num_found);
--}
--
--static void __Pyx_RaiseDoubleKeywordsError(
--    const char* func_name,
--    PyObject* kw_name)
--{
--    PyErr_Format(PyExc_TypeError,
--        #if PY_MAJOR_VERSION >= 3
--        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
--        #else
--        "%s() got multiple values for keyword argument '%s'", func_name,
--        PyString_AsString(kw_name));
--        #endif
--}
--
--static int __Pyx_ParseOptionalKeywords(
--    PyObject *kwds,
--    PyObject **argnames[],
--    PyObject *kwds2,
--    PyObject *values[],
--    Py_ssize_t num_pos_args,
--    const char* function_name)
--{
--    PyObject *key = 0, *value = 0;
--    Py_ssize_t pos = 0;
--    PyObject*** name;
--    PyObject*** first_kw_arg = argnames + num_pos_args;
--    while (PyDict_Next(kwds, &pos, &key, &value)) {
--        name = first_kw_arg;
--        while (*name && (**name != key)) name++;
--        if (*name) {
--            values[name-argnames] = value;
--            continue;
--        }
--        name = first_kw_arg;
--        #if PY_MAJOR_VERSION < 3
--        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
--            while (*name) {
--                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
--                        && _PyString_Eq(**name, key)) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    if ((**argname == key) || (
--                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
--                             && _PyString_Eq(**argname, key))) {
--                        goto arg_passed_twice;
--                    }
--                    argname++;
--                }
--            }
--        } else
--        #endif
--        if (likely(PyUnicode_Check(key))) {
--            while (*name) {
--                int cmp = (**name == key) ? 0 :
--                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
--                #endif
--                    PyUnicode_Compare(**name, key);
--                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                if (cmp == 0) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    int cmp = (**argname == key) ? 0 :
--                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
--                    #endif
--                        PyUnicode_Compare(**argname, key);
--                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                    if (cmp == 0) goto arg_passed_twice;
--                    argname++;
--                }
--            }
--        } else
--            goto invalid_keyword_type;
--        if (kwds2) {
--            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
--        } else {
--            goto invalid_keyword;
--        }
--    }
--    return 0;
--arg_passed_twice:
--    __Pyx_RaiseDoubleKeywordsError(function_name, key);
--    goto bad;
--invalid_keyword_type:
--    PyErr_Format(PyExc_TypeError,
--        "%s() keywords must be strings", function_name);
--    goto bad;
--invalid_keyword:
--    PyErr_Format(PyExc_TypeError,
--    #if PY_MAJOR_VERSION < 3
--        "%s() got an unexpected keyword argument '%s'",
--        function_name, PyString_AsString(key));
--    #else
--        "%s() got an unexpected keyword argument '%U'",
--        function_name, key);
--    #endif
--bad:
--    return -1;
--}
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact)
--{
--    if (!type) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (none_allowed && obj == Py_None) return 1;
--    else if (exact) {
--        if (Py_TYPE(obj) == type) return 1;
--    }
--    else {
--        if (PyObject_TypeCheck(obj, type)) return 1;
--    }
--    PyErr_Format(PyExc_TypeError,
--        "Argument '%s' has incorrect type (expected %s, got %s)",
--        name, type->tp_name, Py_TYPE(obj)->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_IsLittleEndian(void) {
--  unsigned int n = 1;
--  return *(unsigned char*)(&n) != 0;
--}
--static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
--                              __Pyx_BufFmt_StackElem* stack,
--                              __Pyx_TypeInfo* type) {
--  stack[0].field = &ctx->root;
--  stack[0].parent_offset = 0;
--  ctx->root.type = type;
--  ctx->root.name = "buffer dtype";
--  ctx->root.offset = 0;
--  ctx->head = stack;
--  ctx->head->field = &ctx->root;
--  ctx->fmt_offset = 0;
--  ctx->head->parent_offset = 0;
--  ctx->new_packmode = '@';
--  ctx->enc_packmode = '@';
--  ctx->new_count = 1;
--  ctx->enc_count = 0;
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  ctx->is_valid_array = 0;
--  ctx->struct_alignment = 0;
--  while (type->typegroup == 'S') {
--    ++ctx->head;
--    ctx->head->field = type->fields;
--    ctx->head->parent_offset = 0;
--    type = type->fields->type;
--  }
--}
--static int __Pyx_BufFmt_ParseNumber(const char** ts) {
--    int count;
--    const char* t = *ts;
--    if (*t < '0' || *t > '9') {
--      return -1;
--    } else {
--        count = *t++ - '0';
--        while (*t >= '0' && *t < '9') {
--            count *= 10;
--            count += *t++ - '0';
--        }
--    }
--    *ts = t;
--    return count;
--}
--static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
--    int number = __Pyx_BufFmt_ParseNumber(ts);
--    if (number == -1) /* First char was not a digit */
--        PyErr_Format(PyExc_ValueError,\
--                     "Does not understand character buffer dtype format string ('%c')", **ts);
--    return number;
--}
--static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
--  PyErr_Format(PyExc_ValueError,
--               "Unexpected format string character: '%c'", ch);
--}
--static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': return "'char'";
--    case 'b': return "'signed char'";
--    case 'B': return "'unsigned char'";
--    case 'h': return "'short'";
--    case 'H': return "'unsigned short'";
--    case 'i': return "'int'";
--    case 'I': return "'unsigned int'";
--    case 'l': return "'long'";
--    case 'L': return "'unsigned long'";
--    case 'q': return "'long long'";
--    case 'Q': return "'unsigned long long'";
--    case 'f': return (is_complex ? "'complex float'" : "'float'");
--    case 'd': return (is_complex ? "'complex double'" : "'double'");
--    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
--    case 'T': return "a struct";
--    case 'O': return "Python object";
--    case 'P': return "a pointer";
--    case 's': case 'p': return "a string";
--    case 0: return "end";
--    default: return "unparseable format string";
--  }
--}
--static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return 2;
--    case 'i': case 'I': case 'l': case 'L': return 4;
--    case 'q': case 'Q': return 8;
--    case 'f': return (is_complex ? 8 : 4);
--    case 'd': return (is_complex ? 16 : 8);
--    case 'g': {
--      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
--      return 0;
--    }
--    case 'O': case 'P': return sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(short);
--    case 'i': case 'I': return sizeof(int);
--    case 'l': case 'L': return sizeof(long);
--    #ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
--    #endif
--    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
--    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
--    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
--    case 'O': case 'P': return sizeof(void*);
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--typedef struct { char c; short x; } __Pyx_st_short;
--typedef struct { char c; int x; } __Pyx_st_int;
--typedef struct { char c; long x; } __Pyx_st_long;
--typedef struct { char c; float x; } __Pyx_st_float;
--typedef struct { char c; double x; } __Pyx_st_double;
--typedef struct { char c; long double x; } __Pyx_st_longdouble;
--typedef struct { char c; void *x; } __Pyx_st_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--/* These are for computing the padding at the end of the struct to align
--   on the first member of the struct. This will probably the same as above,
--   but we don't have any guarantees.
-- */
--typedef struct { short x; char c; } __Pyx_pad_short;
--typedef struct { int x; char c; } __Pyx_pad_int;
--typedef struct { long x; char c; } __Pyx_pad_long;
--typedef struct { float x; char c; } __Pyx_pad_float;
--typedef struct { double x; char c; } __Pyx_pad_double;
--typedef struct { long double x; char c; } __Pyx_pad_longdouble;
--typedef struct { void *x; char c; } __Pyx_pad_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
--  switch (ch) {
--    case 'c':
--        return 'H';
--    case 'b': case 'h': case 'i':
--    case 'l': case 'q': case 's': case 'p':
--        return 'I';
--    case 'B': case 'H': case 'I': case 'L': case 'Q':
--        return 'U';
--    case 'f': case 'd': case 'g':
--        return (is_complex ? 'C' : 'R');
--    case 'O':
--        return 'O';
--    case 'P':
--        return 'P';
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
--  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
--    const char* expected;
--    const char* quote;
--    if (ctx->head == NULL) {
--      expected = "end";
--      quote = "";
--    } else {
--      expected = ctx->head->field->type->name;
--      quote = "'";
--    }
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected %s%s%s but got %s",
--                 quote, expected, quote,
--                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
--  } else {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_StructField* parent = (ctx->head - 1)->field;
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
--                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
--                 parent->type->name, field->name);
--  }
--}
--static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
--  char group;
--  size_t size, offset, arraysize = 1;
--  if (ctx->enc_type == 0) return 0;
--  if (ctx->head->field->type->arraysize[0]) {
--    int i, ndim = 0;
--    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
--        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
--        ndim = 1;
--        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
--            PyErr_Format(PyExc_ValueError,
--                         "Expected a dimension of size %zu, got %zu",
--                         ctx->head->field->type->arraysize[0], ctx->enc_count);
--            return -1;
--        }
--    }
--    if (!ctx->is_valid_array) {
--      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
--                   ctx->head->field->type->ndim, ndim);
--      return -1;
--    }
--    for (i = 0; i < ctx->head->field->type->ndim; i++) {
--      arraysize *= ctx->head->field->type->arraysize[i];
--    }
--    ctx->is_valid_array = 0;
--    ctx->enc_count = 1;
--  }
--  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
--  do {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_TypeInfo* type = field->type;
--    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
--      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
--    } else {
--      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
--    }
--    if (ctx->enc_packmode == '@') {
--      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
--      size_t align_mod_offset;
--      if (align_at == 0) return -1;
--      align_mod_offset = ctx->fmt_offset % align_at;
--      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
--      if (ctx->struct_alignment == 0)
--          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
--                                                                 ctx->is_complex);
--    }
--    if (type->size != size || type->typegroup != group) {
--      if (type->typegroup == 'C' && type->fields != NULL) {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        ++ctx->head;
--        ctx->head->field = type->fields;
--        ctx->head->parent_offset = parent_offset;
--        continue;
--      }
--      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
--      } else {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--      }
--    }
--    offset = ctx->head->parent_offset + field->offset;
--    if (ctx->fmt_offset != offset) {
--      PyErr_Format(PyExc_ValueError,
--                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
--                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
--      return -1;
--    }
--    ctx->fmt_offset += size;
--    if (arraysize)
--      ctx->fmt_offset += (arraysize - 1) * size;
--    --ctx->enc_count; /* Consume from buffer string */
--    while (1) {
--      if (field == &ctx->root) {
--        ctx->head = NULL;
--        if (ctx->enc_count != 0) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--        }
--        break; /* breaks both loops as ctx->enc_count == 0 */
--      }
--      ctx->head->field = ++field;
--      if (field->type == NULL) {
--        --ctx->head;
--        field = ctx->head->field;
--        continue;
--      } else if (field->type->typegroup == 'S') {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        if (field->type->fields->type == NULL) continue; /* empty struct */
--        field = field->type->fields;
--        ++ctx->head;
--        ctx->head->field = field;
--        ctx->head->parent_offset = parent_offset;
--        break;
--      } else {
--        break;
--      }
--    }
--  } while (ctx->enc_count);
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  return 0;
--}
--static CYTHON_INLINE PyObject *
--__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
--{
--    const char *ts = *tsp;
--    int i = 0, number;
--    int ndim = ctx->head->field->type->ndim;
--;
--    ++ts;
--    if (ctx->new_count != 1) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Cannot handle repeated arrays in format string");
--        return NULL;
--    }
--    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--    while (*ts && *ts != ')') {
--        if (isspace(*ts))
--            continue;
--        number = __Pyx_BufFmt_ExpectNumber(&ts);
--        if (number == -1) return NULL;
--        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
--            return PyErr_Format(PyExc_ValueError,
--                        "Expected a dimension of size %zu, got %d",
--                        ctx->head->field->type->arraysize[i], number);
--        if (*ts != ',' && *ts != ')')
--            return PyErr_Format(PyExc_ValueError,
--                                "Expected a comma in format string, got '%c'", *ts);
--        if (*ts == ',') ts++;
--        i++;
--    }
--    if (i != ndim)
--        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
--                            ctx->head->field->type->ndim, i);
--    if (!*ts) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Unexpected end of format string, expected ')'");
--        return NULL;
--    }
--    ctx->is_valid_array = 1;
--    ctx->new_count = 1;
--    *tsp = ++ts;
--    return Py_None;
--}
--static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
--  int got_Z = 0;
--  while (1) {
--    switch(*ts) {
--      case 0:
--        if (ctx->enc_type != 0 && ctx->head == NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        if (ctx->head != NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--                return ts;
--      case ' ':
--      case 10:
--      case 13:
--        ++ts;
--        break;
--      case '<':
--        if (!__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '>':
--      case '!':
--        if (__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '=':
--      case '@':
--      case '^':
--        ctx->new_packmode = *ts++;
--        break;
--      case 'T': /* substruct */
--        {
--          const char* ts_after_sub;
--          size_t i, struct_count = ctx->new_count;
--          size_t struct_alignment = ctx->struct_alignment;
--          ctx->new_count = 1;
--          ++ts;
--          if (*ts != '{') {
--            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
--            return NULL;
--          }
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          ctx->enc_count = 0;
--          ctx->struct_alignment = 0;
--          ++ts;
--          ts_after_sub = ts;
--          for (i = 0; i != struct_count; ++i) {
--            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
--            if (!ts_after_sub) return NULL;
--          }
--          ts = ts_after_sub;
--          if (struct_alignment) ctx->struct_alignment = struct_alignment;
--        }
--        break;
--      case '}': /* end of substruct; either repeat or move on */
--        {
--          size_t alignment = ctx->struct_alignment;
--          ++ts;
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          if (alignment && ctx->fmt_offset % alignment) {
--            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
--          }
--        }
--        return ts;
--      case 'x':
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        ctx->fmt_offset += ctx->new_count;
--        ctx->new_count = 1;
--        ctx->enc_count = 0;
--        ctx->enc_type = 0;
--        ctx->enc_packmode = ctx->new_packmode;
--        ++ts;
--        break;
--      case 'Z':
--        got_Z = 1;
--        ++ts;
--        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
--          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
--          return NULL;
--        }        /* fall through */
--      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
--      case 'l': case 'L': case 'q': case 'Q':
--      case 'f': case 'd': case 'g':
--      case 'O': case 's': case 'p':
--        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
--            ctx->enc_packmode == ctx->new_packmode) {
--          ctx->enc_count += ctx->new_count;
--        } else {
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_count = ctx->new_count;
--          ctx->enc_packmode = ctx->new_packmode;
--          ctx->enc_type = *ts;
--          ctx->is_complex = got_Z;
--        }
--        ++ts;
--        ctx->new_count = 1;
--        got_Z = 0;
--        break;
--      case ':':
--        ++ts;
--        while(*ts != ':') ++ts;
--        ++ts;
--        break;
--      case '(':
--        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
--        break;
--      default:
--        {
--          int number = __Pyx_BufFmt_ExpectNumber(&ts);
--          if (number == -1) return NULL;
--          ctx->new_count = (size_t)number;
--        }
--    }
--  }
--}
--static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
--  buf->buf = NULL;
--  buf->obj = NULL;
--  buf->strides = __Pyx_zeros;
--  buf->shape = __Pyx_zeros;
--  buf->suboffsets = __Pyx_minusones;
--}
--static CYTHON_INLINE int __Pyx_GetBufferAndValidate(
--        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
--        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
--{
--  if (obj == Py_None || obj == NULL) {
--    __Pyx_ZeroBuffer(buf);
--    return 0;
--  }
--  buf->buf = NULL;
--  if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail;
--  if (buf->ndim != nd) {
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer has wrong number of dimensions (expected %d, got %d)",
--                 nd, buf->ndim);
--    goto fail;
--  }
--  if (!cast) {
--    __Pyx_BufFmt_Context ctx;
--    __Pyx_BufFmt_Init(&ctx, stack, dtype);
--    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
--  }
--  if ((unsigned)buf->itemsize != dtype->size) {
--    PyErr_Format(PyExc_ValueError,
--      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
--      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
--      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
--    goto fail;
--  }
--  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
--  return 0;
--fail:;
--  __Pyx_ZeroBuffer(buf);
--  return -1;
--}
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
--  if (info->buf == NULL) return;
--  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
--  __Pyx_ReleaseBuffer(info);
--}
--
--static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
--    long r = a % b;
--    r += ((r != 0) & ((r ^ b) < 0)) * b;
--    return r;
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyObject *tmp_type, *tmp_value, *tmp_tb;
--    PyThreadState *tstate = PyThreadState_GET();
--    tmp_type = tstate->curexc_type;
--    tmp_value = tstate->curexc_value;
--    tmp_tb = tstate->curexc_traceback;
--    tstate->curexc_type = type;
--    tstate->curexc_value = value;
--    tstate->curexc_traceback = tb;
--    Py_XDECREF(tmp_type);
--    Py_XDECREF(tmp_value);
--    Py_XDECREF(tmp_tb);
--#else
--    PyErr_Restore(type, value, tb);
--#endif
--}
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    *type = tstate->curexc_type;
--    *value = tstate->curexc_value;
--    *tb = tstate->curexc_traceback;
--    tstate->curexc_type = 0;
--    tstate->curexc_value = 0;
--    tstate->curexc_traceback = 0;
--#else
--    PyErr_Fetch(type, value, tb);
--#endif
--}
--
--#if PY_MAJOR_VERSION < 3
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
--                        CYTHON_UNUSED PyObject *cause) {
--    Py_XINCREF(type);
--    if (!value || value == Py_None)
--        value = NULL;
--    else
--        Py_INCREF(value);
--    if (!tb || tb == Py_None)
--        tb = NULL;
--    else {
--        Py_INCREF(tb);
--        if (!PyTraceBack_Check(tb)) {
--            PyErr_SetString(PyExc_TypeError,
--                "raise: arg 3 must be a traceback or None");
--            goto raise_error;
--        }
--    }
--    #if PY_VERSION_HEX < 0x02050000
--    if (PyClass_Check(type)) {
--    #else
--    if (PyType_Check(type)) {
--    #endif
--#if CYTHON_COMPILING_IN_PYPY
--        if (!value) {
--            Py_INCREF(Py_None);
--            value = Py_None;
--        }
--#endif
--        PyErr_NormalizeException(&type, &value, &tb);
--    } else {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto raise_error;
--        }
--        value = type;
--        #if PY_VERSION_HEX < 0x02050000
--            if (PyInstance_Check(type)) {
--                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
--                Py_INCREF(type);
--            }
--            else {
--                type = 0;
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception must be an old-style class or instance");
--                goto raise_error;
--            }
--        #else
--            type = (PyObject*) Py_TYPE(type);
--            Py_INCREF(type);
--            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception class must be a subclass of BaseException");
--                goto raise_error;
--            }
--        #endif
--    }
--    __Pyx_ErrRestore(type, value, tb);
--    return;
--raise_error:
--    Py_XDECREF(value);
--    Py_XDECREF(type);
--    Py_XDECREF(tb);
--    return;
--}
--#else /* Python 3+ */
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
--    PyObject* owned_instance = NULL;
--    if (tb == Py_None) {
--        tb = 0;
--    } else if (tb && !PyTraceBack_Check(tb)) {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: arg 3 must be a traceback or None");
--        goto bad;
--    }
--    if (value == Py_None)
--        value = 0;
--    if (PyExceptionInstance_Check(type)) {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto bad;
--        }
--        value = type;
--        type = (PyObject*) Py_TYPE(value);
--    } else if (PyExceptionClass_Check(type)) {
--        PyObject *args;
--        if (!value)
--            args = PyTuple_New(0);
--        else if (PyTuple_Check(value)) {
--            Py_INCREF(value);
--            args = value;
--        }
--        else
--            args = PyTuple_Pack(1, value);
--        if (!args)
--            goto bad;
--        owned_instance = PyEval_CallObject(type, args);
--        Py_DECREF(args);
--        if (!owned_instance)
--            goto bad;
--        value = owned_instance;
--        if (!PyExceptionInstance_Check(value)) {
--            PyErr_Format(PyExc_TypeError,
--                         "calling %R should have returned an instance of "
--                         "BaseException, not %R",
--                         type, Py_TYPE(value));
--            goto bad;
--        }
--    } else {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: exception class must be a subclass of BaseException");
--        goto bad;
--    }
--    if (cause && cause != Py_None) {
--        PyObject *fixed_cause;
--        if (PyExceptionClass_Check(cause)) {
--            fixed_cause = PyObject_CallObject(cause, NULL);
--            if (fixed_cause == NULL)
--                goto bad;
--        }
--        else if (PyExceptionInstance_Check(cause)) {
--            fixed_cause = cause;
--            Py_INCREF(fixed_cause);
--        }
--        else {
--            PyErr_SetString(PyExc_TypeError,
--                            "exception causes must derive from "
--                            "BaseException");
--            goto bad;
--        }
--        PyException_SetCause(value, fixed_cause);
--    }
--    PyErr_SetObject(type, value);
--    if (tb) {
--        PyThreadState *tstate = PyThreadState_GET();
--        PyObject* tmp_tb = tstate->curexc_traceback;
--        if (tb != tmp_tb) {
--            Py_INCREF(tb);
--            tstate->curexc_traceback = tb;
--            Py_XDECREF(tmp_tb);
--        }
--    }
--bad:
--    Py_XDECREF(owned_instance);
--    return;
--}
--#endif
--
--static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
--    long q = a / b;
--    long r = a - q*b;
--    q -= ((r != 0) & ((r ^ b) < 0));
--    return q;
--}
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
--    if (unlikely(!type)) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (likely(PyObject_TypeCheck(obj, type)))
--        return 1;
--    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
--                 Py_TYPE(obj)->tp_name, type->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
--    PyErr_Format(PyExc_ValueError,
--                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
--    PyErr_Format(PyExc_ValueError,
--                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
--                 index, (index == 1) ? "" : "s");
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--}
--
--static CYTHON_INLINE int __Pyx_IterFinish(void) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    PyObject* exc_type = tstate->curexc_type;
--    if (unlikely(exc_type)) {
--        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
--            PyObject *exc_value, *exc_tb;
--            exc_value = tstate->curexc_value;
--            exc_tb = tstate->curexc_traceback;
--            tstate->curexc_type = 0;
--            tstate->curexc_value = 0;
--            tstate->curexc_traceback = 0;
--            Py_DECREF(exc_type);
--            Py_XDECREF(exc_value);
--            Py_XDECREF(exc_tb);
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#else
--    if (unlikely(PyErr_Occurred())) {
--        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
--            PyErr_Clear();
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#endif
--}
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
--    if (unlikely(retval)) {
--        Py_DECREF(retval);
--        __Pyx_RaiseTooManyValuesError(expected);
--        return -1;
--    } else {
--        return __Pyx_IterFinish();
--    }
--    return 0;
--}
--
--#if PY_MAJOR_VERSION < 3
--static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
--    CYTHON_UNUSED PyObject *getbuffer_cobj;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (getbuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                             "__pyx_getbuffer"))) {
--        getbufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (getbufferproc) PyCapsule_GetPointer(getbuffer_cobj, "getbuffer(obj, view, flags)");
--      #else
--        func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj);
--      #endif
--        Py_DECREF(getbuffer_cobj);
--        if (!func)
--            goto fail;
--        return func(obj, view, flags);
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    return -1;
--}
--static void __Pyx_ReleaseBuffer(Py_buffer *view) {
--    PyObject *obj = view->obj;
--    CYTHON_UNUSED PyObject *releasebuffer_cobj;
--    if (!obj) return;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) {
--        PyBuffer_Release(view);
--        return;
--    }
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; }
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (releasebuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                                      "__pyx_releasebuffer"))) {
--        releasebufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (releasebufferproc) PyCapsule_GetPointer(releasebuffer_cobj, "releasebuffer(obj, view)");
--      #else
--        func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj);
--      #endif
--        Py_DECREF(releasebuffer_cobj);
--        if (!func)
--            goto fail;
--        func(obj, view);
--        return;
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    goto nofail;
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    PyErr_WriteUnraisable(obj);
--nofail:
--    Py_DECREF(obj);
--    view->obj = NULL;
--}
--#endif /*  PY_MAJOR_VERSION < 3 */
--
--
--    static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
--    PyObject *empty_list = 0;
--    PyObject *module = 0;
--    PyObject *global_dict = 0;
--    PyObject *empty_dict = 0;
--    PyObject *list;
--    #if PY_VERSION_HEX < 0x03030000
--    PyObject *py_import = 0;
--    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
--    if (!py_import)
--        goto bad;
--    #endif
--    if (from_list)
--        list = from_list;
--    else {
--        empty_list = PyList_New(0);
--        if (!empty_list)
--            goto bad;
--        list = empty_list;
--    }
--    global_dict = PyModule_GetDict(__pyx_m);
--    if (!global_dict)
--        goto bad;
--    empty_dict = PyDict_New();
--    if (!empty_dict)
--        goto bad;
--    #if PY_VERSION_HEX >= 0x02050000
--    {
--        #if PY_MAJOR_VERSION >= 3
--        if (level == -1) {
--            if (strchr(__Pyx_MODULE_NAME, '.')) {
--                #if PY_VERSION_HEX < 0x03030000
--                PyObject *py_level = PyInt_FromLong(1);
--                if (!py_level)
--                    goto bad;
--                module = PyObject_CallFunctionObjArgs(py_import,
--                    name, global_dict, empty_dict, list, py_level, NULL);
--                Py_DECREF(py_level);
--                #else
--                module = PyImport_ImportModuleLevelObject(
--                    name, global_dict, empty_dict, list, 1);
--                #endif
--                if (!module) {
--                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
--                        goto bad;
--                    PyErr_Clear();
--                }
--            }
--            level = 0; /* try absolute import on failure */
--        }
--        #endif
--        if (!module) {
--            #if PY_VERSION_HEX < 0x03030000
--            PyObject *py_level = PyInt_FromLong(level);
--            if (!py_level)
--                goto bad;
--            module = PyObject_CallFunctionObjArgs(py_import,
--                name, global_dict, empty_dict, list, py_level, NULL);
--            Py_DECREF(py_level);
--            #else
--            module = PyImport_ImportModuleLevelObject(
--                name, global_dict, empty_dict, list, level);
--            #endif
--        }
--    }
--    #else
--    if (level>0) {
--        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
--        goto bad;
--    }
--    module = PyObject_CallFunctionObjArgs(py_import,
--        name, global_dict, empty_dict, list, NULL);
--    #endif
--bad:
--    #if PY_VERSION_HEX < 0x03030000
--    Py_XDECREF(py_import);
--    #endif
--    Py_XDECREF(empty_list);
--    Py_XDECREF(empty_dict);
--    return module;
--}
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return ::std::complex< float >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return x + y*(__pyx_t_float_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      __pyx_t_float_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        float denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrtf(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypotf(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--            __pyx_t_float_complex z;
--            float r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    float denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(a, a);
--                    case 3:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, a);
--                    case 4:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_absf(a);
--                theta = atan2f(a.imag, a.real);
--            }
--            lnr = logf(r);
--            z_r = expf(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cosf(z_theta);
--            z.imag = z_r * sinf(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return ::std::complex< double >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return x + y*(__pyx_t_double_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      __pyx_t_double_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        double denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrt(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypot(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--            __pyx_t_double_complex z;
--            double r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    double denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(a, a);
--                    case 3:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, a);
--                    case 4:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_abs(a);
--                theta = atan2(a.imag, a.real);
--            }
--            lnr = log(r);
--            z_r = exp(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cos(z_theta);
--            z.imag = z_r * sin(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
--    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned char" :
--                    "value too large to convert to unsigned char");
--            }
--            return (unsigned char)-1;
--        }
--        return (unsigned char)val;
--    }
--    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
--    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned short" :
--                    "value too large to convert to unsigned short");
--            }
--            return (unsigned short)-1;
--        }
--        return (unsigned short)val;
--    }
--    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
--    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned int" :
--                    "value too large to convert to unsigned int");
--            }
--            return (unsigned int)-1;
--        }
--        return (unsigned int)val;
--    }
--    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
--    const char neg_one = (char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to char" :
--                    "value too large to convert to char");
--            }
--            return (char)-1;
--        }
--        return (char)val;
--    }
--    return (char)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
--    const short neg_one = (short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to short" :
--                    "value too large to convert to short");
--            }
--            return (short)-1;
--        }
--        return (short)val;
--    }
--    return (short)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
--    const signed char neg_one = (signed char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed char" :
--                    "value too large to convert to signed char");
--            }
--            return (signed char)-1;
--        }
--        return (signed char)val;
--    }
--    return (signed char)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
--    const signed short neg_one = (signed short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed short" :
--                    "value too large to convert to signed short");
--            }
--            return (signed short)-1;
--        }
--        return (signed short)val;
--    }
--    return (signed short)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
--    const signed int neg_one = (signed int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed int" :
--                    "value too large to convert to signed int");
--            }
--            return (signed int)-1;
--        }
--        return (signed int)val;
--    }
--    return (signed int)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
--    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned long");
--            return (unsigned long)-1;
--        }
--        return (unsigned long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned long");
--                return (unsigned long)-1;
--            }
--            return (unsigned long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (unsigned long)PyLong_AsLong(x);
--        }
--    } else {
--        unsigned long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned long)-1;
--        val = __Pyx_PyInt_AsUnsignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
--    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned PY_LONG_LONG");
--            return (unsigned PY_LONG_LONG)-1;
--        }
--        return (unsigned PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned PY_LONG_LONG");
--                return (unsigned PY_LONG_LONG)-1;
--            }
--            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        unsigned PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
--    const long neg_one = (long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to long");
--            return (long)-1;
--        }
--        return (long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to long");
--                return (long)-1;
--            }
--            return (long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (long)PyLong_AsLong(x);
--        }
--    } else {
--        long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (long)-1;
--        val = __Pyx_PyInt_AsLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
--    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to PY_LONG_LONG");
--            return (PY_LONG_LONG)-1;
--        }
--        return (PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to PY_LONG_LONG");
--                return (PY_LONG_LONG)-1;
--            }
--            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
--    const signed long neg_one = (signed long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed long");
--            return (signed long)-1;
--        }
--        return (signed long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed long");
--                return (signed long)-1;
--            }
--            return (signed long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (signed long)PyLong_AsLong(x);
--        }
--    } else {
--        signed long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed long)-1;
--        val = __Pyx_PyInt_AsSignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
--    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed PY_LONG_LONG");
--            return (signed PY_LONG_LONG)-1;
--        }
--        return (signed PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed PY_LONG_LONG");
--                return (signed PY_LONG_LONG)-1;
--            }
--            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        signed PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsSignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static int __Pyx_check_binary_version(void) {
--    char ctversion[4], rtversion[4];
--    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
--    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
--    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
--        char message[200];
--        PyOS_snprintf(message, sizeof(message),
--                      "compiletime version %s of module '%.100s' "
--                      "does not match runtime version %s",
--                      ctversion, __Pyx_MODULE_NAME, rtversion);
--        #if PY_VERSION_HEX < 0x02050000
--        return PyErr_Warn(NULL, message);
--        #else
--        return PyErr_WarnEx(NULL, message, 1);
--        #endif
--    }
--    return 0;
--}
--
--#ifndef __PYX_HAVE_RT_ImportModule
--#define __PYX_HAVE_RT_ImportModule
--static PyObject *__Pyx_ImportModule(const char *name) {
--    PyObject *py_name = 0;
--    PyObject *py_module = 0;
--    py_name = __Pyx_PyIdentifier_FromString(name);
--    if (!py_name)
--        goto bad;
--    py_module = PyImport_Import(py_name);
--    Py_DECREF(py_name);
--    return py_module;
--bad:
--    Py_XDECREF(py_name);
--    return 0;
--}
--#endif
--
--#ifndef __PYX_HAVE_RT_ImportType
--#define __PYX_HAVE_RT_ImportType
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
--    size_t size, int strict)
--{
--    PyObject *py_module = 0;
--    PyObject *result = 0;
--    PyObject *py_name = 0;
--    char warning[200];
--    Py_ssize_t basicsize;
--#ifdef Py_LIMITED_API
--    PyObject *py_basicsize;
--#endif
--    py_module = __Pyx_ImportModule(module_name);
--    if (!py_module)
--        goto bad;
--    py_name = __Pyx_PyIdentifier_FromString(class_name);
--    if (!py_name)
--        goto bad;
--    result = PyObject_GetAttr(py_module, py_name);
--    Py_DECREF(py_name);
--    py_name = 0;
--    Py_DECREF(py_module);
--    py_module = 0;
--    if (!result)
--        goto bad;
--    if (!PyType_Check(result)) {
--        PyErr_Format(PyExc_TypeError,
--            "%s.%s is not a type object",
--            module_name, class_name);
--        goto bad;
--    }
--#ifndef Py_LIMITED_API
--    basicsize = ((PyTypeObject *)result)->tp_basicsize;
--#else
--    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
--    if (!py_basicsize)
--        goto bad;
--    basicsize = PyLong_AsSsize_t(py_basicsize);
--    Py_DECREF(py_basicsize);
--    py_basicsize = 0;
--    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
--        goto bad;
--#endif
--    if (!strict && (size_t)basicsize > size) {
--        PyOS_snprintf(warning, sizeof(warning),
--            "%s.%s size changed, may indicate binary incompatibility",
--            module_name, class_name);
--        #if PY_VERSION_HEX < 0x02050000
--        if (PyErr_Warn(NULL, warning) < 0) goto bad;
--        #else
--        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
--        #endif
--    }
--    else if ((size_t)basicsize != size) {
--        PyErr_Format(PyExc_ValueError,
--            "%s.%s has the wrong size, try recompiling",
--            module_name, class_name);
--        goto bad;
--    }
--    return (PyTypeObject *)result;
--bad:
--    Py_XDECREF(py_module);
--    Py_XDECREF(result);
--    return NULL;
--}
--#endif
--
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
--    int start = 0, mid = 0, end = count - 1;
--    if (end >= 0 && code_line > entries[end].code_line) {
--        return count;
--    }
--    while (start < end) {
--        mid = (start + end) / 2;
--        if (code_line < entries[mid].code_line) {
--            end = mid;
--        } else if (code_line > entries[mid].code_line) {
--             start = mid + 1;
--        } else {
--            return mid;
--        }
--    }
--    if (code_line <= entries[mid].code_line) {
--        return mid;
--    } else {
--        return mid + 1;
--    }
--}
--static PyCodeObject *__pyx_find_code_object(int code_line) {
--    PyCodeObject* code_object;
--    int pos;
--    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
--        return NULL;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
--        return NULL;
--    }
--    code_object = __pyx_code_cache.entries[pos].code_object;
--    Py_INCREF(code_object);
--    return code_object;
--}
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
--    int pos, i;
--    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
--    if (unlikely(!code_line)) {
--        return;
--    }
--    if (unlikely(!entries)) {
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (likely(entries)) {
--            __pyx_code_cache.entries = entries;
--            __pyx_code_cache.max_count = 64;
--            __pyx_code_cache.count = 1;
--            entries[0].code_line = code_line;
--            entries[0].code_object = code_object;
--            Py_INCREF(code_object);
--        }
--        return;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
--        PyCodeObject* tmp = entries[pos].code_object;
--        entries[pos].code_object = code_object;
--        Py_DECREF(tmp);
--        return;
--    }
--    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
--        int new_max = __pyx_code_cache.max_count + 64;
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
--            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (unlikely(!entries)) {
--            return;
--        }
--        __pyx_code_cache.entries = entries;
--        __pyx_code_cache.max_count = new_max;
--    }
--    for (i=__pyx_code_cache.count; i>pos; i--) {
--        entries[i] = entries[i-1];
--    }
--    entries[pos].code_line = code_line;
--    entries[pos].code_object = code_object;
--    __pyx_code_cache.count++;
--    Py_INCREF(code_object);
--}
--
--#include "compile.h"
--#include "frameobject.h"
--#include "traceback.h"
--static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
--            const char *funcname, int c_line,
--            int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_srcfile = 0;
--    PyObject *py_funcname = 0;
--    #if PY_MAJOR_VERSION < 3
--    py_srcfile = PyString_FromString(filename);
--    #else
--    py_srcfile = PyUnicode_FromString(filename);
--    #endif
--    if (!py_srcfile) goto bad;
--    if (c_line) {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #else
--        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #endif
--    }
--    else {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromString(funcname);
--        #else
--        py_funcname = PyUnicode_FromString(funcname);
--        #endif
--    }
--    if (!py_funcname) goto bad;
--    py_code = __Pyx_PyCode_New(
--        0,            /*int argcount,*/
--        0,            /*int kwonlyargcount,*/
--        0,            /*int nlocals,*/
--        0,            /*int stacksize,*/
--        0,            /*int flags,*/
--        __pyx_empty_bytes, /*PyObject *code,*/
--        __pyx_empty_tuple, /*PyObject *consts,*/
--        __pyx_empty_tuple, /*PyObject *names,*/
--        __pyx_empty_tuple, /*PyObject *varnames,*/
--        __pyx_empty_tuple, /*PyObject *freevars,*/
--        __pyx_empty_tuple, /*PyObject *cellvars,*/
--        py_srcfile,   /*PyObject *filename,*/
--        py_funcname,  /*PyObject *name,*/
--        py_line,      /*int firstlineno,*/
--        __pyx_empty_bytes  /*PyObject *lnotab*/
--    );
--    Py_DECREF(py_srcfile);
--    Py_DECREF(py_funcname);
--    return py_code;
--bad:
--    Py_XDECREF(py_srcfile);
--    Py_XDECREF(py_funcname);
--    return NULL;
--}
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_globals = 0;
--    PyFrameObject *py_frame = 0;
--    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
--    if (!py_code) {
--        py_code = __Pyx_CreateCodeObjectForTraceback(
--            funcname, c_line, py_line, filename);
--        if (!py_code) goto bad;
--        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
--    }
--    py_globals = PyModule_GetDict(__pyx_m);
--    if (!py_globals) goto bad;
--    py_frame = PyFrame_New(
--        PyThreadState_GET(), /*PyThreadState *tstate,*/
--        py_code,             /*PyCodeObject *code,*/
--        py_globals,          /*PyObject *globals,*/
--        0                    /*PyObject *locals*/
--    );
--    if (!py_frame) goto bad;
--    py_frame->f_lineno = py_line;
--    PyTraceBack_Here(py_frame);
--bad:
--    Py_XDECREF(py_code);
--    Py_XDECREF(py_frame);
--}
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
--    while (t->p) {
--        #if PY_MAJOR_VERSION < 3
--        if (t->is_unicode) {
--            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
--        } else if (t->intern) {
--            *t->p = PyString_InternFromString(t->s);
--        } else {
--            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
--        }
--        #else  /* Python 3+ has unicode identifiers */
--        if (t->is_unicode | t->is_str) {
--            if (t->intern) {
--                *t->p = PyUnicode_InternFromString(t->s);
--            } else if (t->encoding) {
--                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
--            } else {
--                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
--            }
--        } else {
--            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
--        }
--        #endif
--        if (!*t->p)
--            return -1;
--        ++t;
--    }
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
--   int is_true = x == Py_True;
--   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
--   else return PyObject_IsTrue(x);
--}
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
--  PyNumberMethods *m;
--  const char *name = NULL;
--  PyObject *res = NULL;
--#if PY_VERSION_HEX < 0x03000000
--  if (PyInt_Check(x) || PyLong_Check(x))
--#else
--  if (PyLong_Check(x))
--#endif
--    return Py_INCREF(x), x;
--  m = Py_TYPE(x)->tp_as_number;
--#if PY_VERSION_HEX < 0x03000000
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Int(x);
--  }
--  else if (m && m->nb_long) {
--    name = "long";
--    res = PyNumber_Long(x);
--  }
--#else
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Long(x);
--  }
--#endif
--  if (res) {
--#if PY_VERSION_HEX < 0x03000000
--    if (!PyInt_Check(res) && !PyLong_Check(res)) {
--#else
--    if (!PyLong_Check(res)) {
--#endif
--      PyErr_Format(PyExc_TypeError,
--                   "__%s__ returned non-%s (type %.200s)",
--                   name, name, Py_TYPE(res)->tp_name);
--      Py_DECREF(res);
--      return NULL;
--    }
--  }
--  else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_TypeError,
--                    "an integer is required");
--  }
--  return res;
--}
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
--  Py_ssize_t ival;
--  PyObject* x = PyNumber_Index(b);
--  if (!x) return -1;
--  ival = PyInt_AsSsize_t(x);
--  Py_DECREF(x);
--  return ival;
--}
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
--#if PY_VERSION_HEX < 0x02050000
--   if (ival <= LONG_MAX)
--       return PyInt_FromLong((long)ival);
--   else {
--       unsigned char *bytes = (unsigned char *) &ival;
--       int one = 1; int little = (int)*(unsigned char*)&one;
--       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
--   }
--#else
--   return PyInt_FromSize_t(ival);
--#endif
--}
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
--   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
--   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
--       return (size_t)-1;
--   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
--       PyErr_SetString(PyExc_OverflowError,
--                       "value too large to convert to size_t");
--       return (size_t)-1;
--   }
--   return (size_t)val;
--}
--
--
--#endif /* Py_PYTHON_H */
diff --cc astropy/convolution/boundary_fill.c
index 4ce8963,4ce8963..0000000
deleted file mode 100644,100644
--- a/astropy/convolution/boundary_fill.c
+++ /dev/null
@@@ -1,8737 -1,8737 +1,0 @@@
--/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
--
--#define PY_SSIZE_T_CLEAN
--#include "Python.h"
--#ifndef Py_PYTHON_H
--    #error Python headers needed to compile C extensions, please install development version of Python.
--#elif PY_VERSION_HEX < 0x02040000
--    #error Cython requires Python 2.4+.
--#else
--#include <stddef.h> /* For offsetof */
--#ifndef offsetof
--#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
--#endif
--#if !defined(WIN32) && !defined(MS_WINDOWS)
--  #ifndef __stdcall
--    #define __stdcall
--  #endif
--  #ifndef __cdecl
--    #define __cdecl
--  #endif
--  #ifndef __fastcall
--    #define __fastcall
--  #endif
--#endif
--#ifndef DL_IMPORT
--  #define DL_IMPORT(t) t
--#endif
--#ifndef DL_EXPORT
--  #define DL_EXPORT(t) t
--#endif
--#ifndef PY_LONG_LONG
--  #define PY_LONG_LONG LONG_LONG
--#endif
--#ifndef Py_HUGE_VAL
--  #define Py_HUGE_VAL HUGE_VAL
--#endif
--#ifdef PYPY_VERSION
--#define CYTHON_COMPILING_IN_PYPY 1
--#define CYTHON_COMPILING_IN_CPYTHON 0
--#else
--#define CYTHON_COMPILING_IN_PYPY 0
--#define CYTHON_COMPILING_IN_CPYTHON 1
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  typedef int Py_ssize_t;
--  #define PY_SSIZE_T_MAX INT_MAX
--  #define PY_SSIZE_T_MIN INT_MIN
--  #define PY_FORMAT_SIZE_T ""
--  #define CYTHON_FORMAT_SSIZE_T ""
--  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
--  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
--  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
--                                (PyErr_Format(PyExc_TypeError, \
--                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
--                                 (PyObject*)0))
--  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
--                                  !PyComplex_Check(o))
--  #define PyIndex_Check __Pyx_PyIndex_Check
--  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
--  #define __PYX_BUILD_PY_SSIZE_T "i"
--#else
--  #define __PYX_BUILD_PY_SSIZE_T "n"
--  #define CYTHON_FORMAT_SSIZE_T "z"
--  #define __Pyx_PyIndex_Check PyIndex_Check
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
--  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
--  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
--  #define PyVarObject_HEAD_INIT(type, size) \
--          PyObject_HEAD_INIT(type) size,
--  #define PyType_Modified(t)
--  typedef struct {
--     void *buf;
--     PyObject *obj;
--     Py_ssize_t len;
--     Py_ssize_t itemsize;
--     int readonly;
--     int ndim;
--     char *format;
--     Py_ssize_t *shape;
--     Py_ssize_t *strides;
--     Py_ssize_t *suboffsets;
--     void *internal;
--  } Py_buffer;
--  #define PyBUF_SIMPLE 0
--  #define PyBUF_WRITABLE 0x0001
--  #define PyBUF_FORMAT 0x0004
--  #define PyBUF_ND 0x0008
--  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
--  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
--  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
--  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
--  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
--  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
--  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
--  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
--  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
--#endif
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#else
--  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#endif
--#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
--  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define Py_TPFLAGS_CHECKTYPES 0
--  #define Py_TPFLAGS_HAVE_INDEX 0
--#endif
--#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
--  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
--#endif
--#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
--  #define CYTHON_PEP393_ENABLED 1
--  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
--                                              0 : _PyUnicode_Ready((PyObject *)(op)))
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
--  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
--#else
--  #define CYTHON_PEP393_ENABLED 0
--  #define __Pyx_PyUnicode_READY(op)       (0)
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
--  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBaseString_Type            PyUnicode_Type
--  #define PyStringObject               PyUnicodeObject
--  #define PyString_Type                PyUnicode_Type
--  #define PyString_Check               PyUnicode_Check
--  #define PyString_CheckExact          PyUnicode_CheckExact
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PyBytesObject                PyStringObject
--  #define PyBytes_Type                 PyString_Type
--  #define PyBytes_Check                PyString_Check
--  #define PyBytes_CheckExact           PyString_CheckExact
--  #define PyBytes_FromString           PyString_FromString
--  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
--  #define PyBytes_FromFormat           PyString_FromFormat
--  #define PyBytes_DecodeEscape         PyString_DecodeEscape
--  #define PyBytes_AsString             PyString_AsString
--  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
--  #define PyBytes_Size                 PyString_Size
--  #define PyBytes_AS_STRING            PyString_AS_STRING
--  #define PyBytes_GET_SIZE             PyString_GET_SIZE
--  #define PyBytes_Repr                 PyString_Repr
--  #define PyBytes_Concat               PyString_Concat
--  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
--  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
--#endif
--#ifndef PySet_CheckExact
--  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
--#endif
--#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
--#if PY_MAJOR_VERSION >= 3
--  #define PyIntObject                  PyLongObject
--  #define PyInt_Type                   PyLong_Type
--  #define PyInt_Check(op)              PyLong_Check(op)
--  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
--  #define PyInt_FromString             PyLong_FromString
--  #define PyInt_FromUnicode            PyLong_FromUnicode
--  #define PyInt_FromLong               PyLong_FromLong
--  #define PyInt_FromSize_t             PyLong_FromSize_t
--  #define PyInt_FromSsize_t            PyLong_FromSsize_t
--  #define PyInt_AsLong                 PyLong_AsLong
--  #define PyInt_AS_LONG                PyLong_AS_LONG
--  #define PyInt_AsSsize_t              PyLong_AsSsize_t
--  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
--  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBoolObject                 PyLongObject
--#endif
--#if PY_VERSION_HEX < 0x03020000
--  typedef long Py_hash_t;
--  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
--#else
--  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
--#endif
--#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
--  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
--  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
--#else
--  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
--  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
--#else
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_NAMESTR(n) ((char *)(n))
--  #define __Pyx_DOCSTR(n)  ((char *)(n))
--#else
--  #define __Pyx_NAMESTR(n) (n)
--  #define __Pyx_DOCSTR(n)  (n)
--#endif
--
--
--#if PY_MAJOR_VERSION >= 3
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#else
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#endif
--
--#ifndef __PYX_EXTERN_C
--  #ifdef __cplusplus
--    #define __PYX_EXTERN_C extern "C"
--  #else
--    #define __PYX_EXTERN_C extern
--  #endif
--#endif
--
--#if defined(WIN32) || defined(MS_WINDOWS)
--#define _USE_MATH_DEFINES
--#endif
--#include <math.h>
--#define __PYX_HAVE__astropy__convolution__boundary_fill
--#define __PYX_HAVE_API__astropy__convolution__boundary_fill
--#include "string.h"
--#include "stdio.h"
--#include "stdlib.h"
--#include "numpy/arrayobject.h"
--#include "numpy/ufuncobject.h"
--#include "numpy/npy_math.h"
--#ifdef _OPENMP
--#include <omp.h>
--#endif /* _OPENMP */
--
--#ifdef PYREX_WITHOUT_ASSERTIONS
--#define CYTHON_WITHOUT_ASSERTIONS
--#endif
--
--#ifndef CYTHON_INLINE
--  #if defined(__GNUC__)
--    #define CYTHON_INLINE __inline__
--  #elif defined(_MSC_VER)
--    #define CYTHON_INLINE __inline
--  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--    #define CYTHON_INLINE inline
--  #else
--    #define CYTHON_INLINE
--  #endif
--#endif
--#ifndef CYTHON_UNUSED
--# if defined(__GNUC__)
--#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
--#     define CYTHON_UNUSED __attribute__ ((__unused__))
--#   else
--#     define CYTHON_UNUSED
--#   endif
--# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
--#   define CYTHON_UNUSED __attribute__ ((__unused__))
--# else
--#   define CYTHON_UNUSED
--# endif
--#endif
--typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
--
--#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
--#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
--#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
--#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
--#if CYTHON_COMPILING_IN_CPYTHON
--#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
--#else
--#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
--#endif
--#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
--
--
--#ifdef __GNUC__
--  /* Test for GCC > 2.95 */
--  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
--    #define likely(x)   __builtin_expect(!!(x), 1)
--    #define unlikely(x) __builtin_expect(!!(x), 0)
--  #else /* __GNUC__ > 2 ... */
--    #define likely(x)   (x)
--    #define unlikely(x) (x)
--  #endif /* __GNUC__ > 2 ... */
--#else /* __GNUC__ */
--  #define likely(x)   (x)
--  #define unlikely(x) (x)
--#endif /* __GNUC__ */
--    
--static PyObject *__pyx_m;
--static PyObject *__pyx_b;
--static PyObject *__pyx_empty_tuple;
--static PyObject *__pyx_empty_bytes;
--static int __pyx_lineno;
--static int __pyx_clineno = 0;
--static const char * __pyx_cfilenm= __FILE__;
--static const char *__pyx_filename;
--
--#if !defined(CYTHON_CCOMPLEX)
--  #if defined(__cplusplus)
--    #define CYTHON_CCOMPLEX 1
--  #elif defined(_Complex_I)
--    #define CYTHON_CCOMPLEX 1
--  #else
--    #define CYTHON_CCOMPLEX 0
--  #endif
--#endif
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #include <complex>
--  #else
--    #include <complex.h>
--  #endif
--#endif
--#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
--  #undef _Complex_I
--  #define _Complex_I 1.0fj
--#endif
--
--
--static const char *__pyx_f[] = {
--  "boundary_fill.pyx",
--  "numpy.pxd",
--  "type.pxd",
--};
--#define IS_UNSIGNED(type) (((type) -1) > 0)
--struct __Pyx_StructField_;
--#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
--typedef struct {
--  const char* name; /* for error messages only */
--  struct __Pyx_StructField_* fields;
--  size_t size;     /* sizeof(type) */
--  size_t arraysize[8]; /* length of array in each dimension */
--  int ndim;
--  char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */
--  char is_unsigned;
--  int flags;
--} __Pyx_TypeInfo;
--typedef struct __Pyx_StructField_ {
--  __Pyx_TypeInfo* type;
--  const char* name;
--  size_t offset;
--} __Pyx_StructField;
--typedef struct {
--  __Pyx_StructField* field;
--  size_t parent_offset;
--} __Pyx_BufFmt_StackElem;
--typedef struct {
--  __Pyx_StructField root;
--  __Pyx_BufFmt_StackElem* head;
--  size_t fmt_offset;
--  size_t new_count, enc_count;
--  size_t struct_alignment;
--  int is_complex;
--  char enc_type;
--  char new_packmode;
--  char enc_packmode;
--  char is_valid_array;
--} __Pyx_BufFmt_Context;
--
--
--/* "numpy.pxd":723
-- * # in Cython to enable them only on the right systems.
-- * 
-- * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- */
--typedef npy_int8 __pyx_t_5numpy_int8_t;
--
--/* "numpy.pxd":724
-- * 
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t
-- */
--typedef npy_int16 __pyx_t_5numpy_int16_t;
--
--/* "numpy.pxd":725
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int64      int64_t
-- * #ctypedef npy_int96      int96_t
-- */
--typedef npy_int32 __pyx_t_5numpy_int32_t;
--
--/* "numpy.pxd":726
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_int96      int96_t
-- * #ctypedef npy_int128     int128_t
-- */
--typedef npy_int64 __pyx_t_5numpy_int64_t;
--
--/* "numpy.pxd":730
-- * #ctypedef npy_int128     int128_t
-- * 
-- * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- */
--typedef npy_uint8 __pyx_t_5numpy_uint8_t;
--
--/* "numpy.pxd":731
-- * 
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t
-- */
--typedef npy_uint16 __pyx_t_5numpy_uint16_t;
--
--/* "numpy.pxd":732
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint64     uint64_t
-- * #ctypedef npy_uint96     uint96_t
-- */
--typedef npy_uint32 __pyx_t_5numpy_uint32_t;
--
--/* "numpy.pxd":733
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_uint96     uint96_t
-- * #ctypedef npy_uint128    uint128_t
-- */
--typedef npy_uint64 __pyx_t_5numpy_uint64_t;
--
--/* "numpy.pxd":737
-- * #ctypedef npy_uint128    uint128_t
-- * 
-- * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_float64    float64_t
-- * #ctypedef npy_float80    float80_t
-- */
--typedef npy_float32 __pyx_t_5numpy_float32_t;
--
--/* "numpy.pxd":738
-- * 
-- * ctypedef npy_float32    float32_t
-- * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_float80    float80_t
-- * #ctypedef npy_float128   float128_t
-- */
--typedef npy_float64 __pyx_t_5numpy_float64_t;
--
--/* "numpy.pxd":747
-- * # The int types are mapped a bit surprising --
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t
-- */
--typedef npy_long __pyx_t_5numpy_int_t;
--
--/* "numpy.pxd":748
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   longlong_t
-- * 
-- */
--typedef npy_longlong __pyx_t_5numpy_long_t;
--
--/* "numpy.pxd":749
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_ulong      uint_t
-- */
--typedef npy_longlong __pyx_t_5numpy_longlong_t;
--
--/* "numpy.pxd":751
-- * ctypedef npy_longlong   longlong_t
-- * 
-- * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t
-- */
--typedef npy_ulong __pyx_t_5numpy_uint_t;
--
--/* "numpy.pxd":752
-- * 
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
--
--/* "numpy.pxd":753
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_intp       intp_t
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
--
--/* "numpy.pxd":755
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uintp      uintp_t
-- * 
-- */
--typedef npy_intp __pyx_t_5numpy_intp_t;
--
--/* "numpy.pxd":756
-- * 
-- * ctypedef npy_intp       intp_t
-- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_double     float_t
-- */
--typedef npy_uintp __pyx_t_5numpy_uintp_t;
--
--/* "numpy.pxd":758
-- * ctypedef npy_uintp      uintp_t
-- * 
-- * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t
-- */
--typedef npy_double __pyx_t_5numpy_float_t;
--
--/* "numpy.pxd":759
-- * 
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- */
--typedef npy_double __pyx_t_5numpy_double_t;
--
--/* "numpy.pxd":760
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- */
--typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
--
--/* "astropy/convolution/boundary_fill.pyx":7
-- * 
-- * DTYPE = np.float
-- * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef extern from "numpy/npy_math.h":
-- */
--typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t;
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< float > __pyx_t_float_complex;
--  #else
--    typedef float _Complex __pyx_t_float_complex;
--  #endif
--#else
--    typedef struct { float real, imag; } __pyx_t_float_complex;
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< double > __pyx_t_double_complex;
--  #else
--    typedef double _Complex __pyx_t_double_complex;
--  #endif
--#else
--    typedef struct { double real, imag; } __pyx_t_double_complex;
--#endif
--
--
--/*--- Type declarations ---*/
--
--/* "numpy.pxd":762
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t
-- */
--typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
--
--/* "numpy.pxd":763
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- */
--typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
--
--/* "numpy.pxd":764
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cdouble     complex_t
-- */
--typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
--
--/* "numpy.pxd":766
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- */
--typedef npy_cdouble __pyx_t_5numpy_complex_t;
--#ifndef CYTHON_REFNANNY
--  #define CYTHON_REFNANNY 0
--#endif
--#if CYTHON_REFNANNY
--  typedef struct {
--    void (*INCREF)(void*, PyObject*, int);
--    void (*DECREF)(void*, PyObject*, int);
--    void (*GOTREF)(void*, PyObject*, int);
--    void (*GIVEREF)(void*, PyObject*, int);
--    void* (*SetupContext)(const char*, int, const char*);
--    void (*FinishContext)(void**);
--  } __Pyx_RefNannyAPIStruct;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
--  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
--#ifdef WITH_THREAD
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          if (acquire_gil) { \
--              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--              PyGILState_Release(__pyx_gilstate_save); \
--          } else { \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--          }
--#else
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
--#endif
--  #define __Pyx_RefNannyFinishContext() \
--          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
--  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
--  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
--  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
--  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
--#else
--  #define __Pyx_RefNannyDeclarations
--  #define __Pyx_RefNannySetupContext(name, acquire_gil)
--  #define __Pyx_RefNannyFinishContext()
--  #define __Pyx_INCREF(r) Py_INCREF(r)
--  #define __Pyx_DECREF(r) Py_DECREF(r)
--  #define __Pyx_GOTREF(r)
--  #define __Pyx_GIVEREF(r)
--  #define __Pyx_XINCREF(r) Py_XINCREF(r)
--  #define __Pyx_XDECREF(r) Py_XDECREF(r)
--  #define __Pyx_XGOTREF(r)
--  #define __Pyx_XGIVEREF(r)
--#endif /* CYTHON_REFNANNY */
--#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
--#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
--
--static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
--    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
--
--static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
--
--static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
--    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
--    const char* function_name); /*proto*/
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact); /*proto*/
--
--static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
--    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
--
--static CYTHON_INLINE long __Pyx_mod_long(long, long); /* proto */
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
--
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
--
--static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
--
--#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
--#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
--#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2)
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
--
--static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
--
--typedef struct {
--  Py_ssize_t shape, strides, suboffsets;
--} __Pyx_Buf_DimInfo;
--typedef struct {
--  size_t refcount;
--  Py_buffer pybuffer;
--} __Pyx_Buffer;
--typedef struct {
--  __Pyx_Buffer *rcbuffer;
--  char *data;
--  __Pyx_Buf_DimInfo diminfo[8];
--} __Pyx_LocalBuf_ND;
--
--#if PY_MAJOR_VERSION < 3
--    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
--    static void __Pyx_ReleaseBuffer(Py_buffer *view);
--#else
--    #define __Pyx_GetBuffer PyObject_GetBuffer
--    #define __Pyx_ReleaseBuffer PyBuffer_Release
--#endif
--
--
--static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
--static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
--
--static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #define __Pyx_CREAL(z) ((z).real())
--    #define __Pyx_CIMAG(z) ((z).imag())
--  #else
--    #define __Pyx_CREAL(z) (__real__(z))
--    #define __Pyx_CIMAG(z) (__imag__(z))
--  #endif
--#else
--    #define __Pyx_CREAL(z) ((z).real)
--    #define __Pyx_CIMAG(z) ((z).imag)
--#endif
--#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
--    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
--    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
--#else
--    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
--    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
--#endif
--
--static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eqf(a, b)   ((a)==(b))
--    #define __Pyx_c_sumf(a, b)  ((a)+(b))
--    #define __Pyx_c_difff(a, b) ((a)-(b))
--    #define __Pyx_c_prodf(a, b) ((a)*(b))
--    #define __Pyx_c_quotf(a, b) ((a)/(b))
--    #define __Pyx_c_negf(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
--    #define __Pyx_c_conjf(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (::std::abs(z))
--        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zerof(z) ((z)==0)
--    #define __Pyx_c_conjf(z)    (conjf(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (cabsf(z))
--        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eq(a, b)   ((a)==(b))
--    #define __Pyx_c_sum(a, b)  ((a)+(b))
--    #define __Pyx_c_diff(a, b) ((a)-(b))
--    #define __Pyx_c_prod(a, b) ((a)*(b))
--    #define __Pyx_c_quot(a, b) ((a)/(b))
--    #define __Pyx_c_neg(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zero(z) ((z)==(double)0)
--    #define __Pyx_c_conj(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (::std::abs(z))
--        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zero(z) ((z)==0)
--    #define __Pyx_c_conj(z)    (conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (cabs(z))
--        #define __Pyx_c_pow(a, b)  (cpow(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
--
--static int __Pyx_check_binary_version(void);
--
--#if !defined(__Pyx_PyIdentifier_FromString)
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
--#else
--  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
--#endif
--#endif
--
--static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
--
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
--
--typedef struct {
--    int code_line;
--    PyCodeObject* code_object;
--} __Pyx_CodeObjectCacheEntry;
--struct __Pyx_CodeObjectCache {
--    int count;
--    int max_count;
--    __Pyx_CodeObjectCacheEntry* entries;
--};
--static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
--static PyCodeObject *__pyx_find_code_object(int code_line);
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
--
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename); /*proto*/
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
--
--
--/* Module declarations from 'cpython.buffer' */
--
--/* Module declarations from 'cpython.ref' */
--
--/* Module declarations from 'libc.string' */
--
--/* Module declarations from 'libc.stdio' */
--
--/* Module declarations from 'cpython.object' */
--
--/* Module declarations from '__builtin__' */
--
--/* Module declarations from 'cpython.type' */
--static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
--
--/* Module declarations from 'libc.stdlib' */
--
--/* Module declarations from 'numpy' */
--
--/* Module declarations from 'numpy' */
--static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
--static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
--static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
--static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
--
--/* Module declarations from 'cython' */
--
--/* Module declarations from 'astropy.convolution.boundary_fill' */
--static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
--#define __Pyx_MODULE_NAME "astropy.convolution.boundary_fill"
--int __pyx_module_is_main_astropy__convolution__boundary_fill = 0;
--
--/* Implementation of 'astropy.convolution.boundary_fill' */
--static PyObject *__pyx_builtin_ValueError;
--static PyObject *__pyx_builtin_range;
--static PyObject *__pyx_builtin_RuntimeError;
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_convolve1d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_2convolve2d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_4convolve3d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
--static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
--static char __pyx_k_5[] = "ndarray is not C contiguous";
--static char __pyx_k_7[] = "ndarray is not Fortran contiguous";
--static char __pyx_k_9[] = "Non-native byte order not supported";
--static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
--static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
--static char __pyx_k_15[] = "Format string allocated too short.";
--static char __pyx_k_19[] = "convolve1d_boundary_fill";
--static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_fill.pyx";
--static char __pyx_k_21[] = "astropy.convolution.boundary_fill";
--static char __pyx_k_24[] = "convolve2d_boundary_fill";
--static char __pyx_k_27[] = "convolve3d_boundary_fill";
--static char __pyx_k__B[] = "B";
--static char __pyx_k__H[] = "H";
--static char __pyx_k__I[] = "I";
--static char __pyx_k__L[] = "L";
--static char __pyx_k__O[] = "O";
--static char __pyx_k__Q[] = "Q";
--static char __pyx_k__b[] = "b";
--static char __pyx_k__d[] = "d";
--static char __pyx_k__f[] = "f";
--static char __pyx_k__g[] = "g";
--static char __pyx_k__h[] = "h";
--static char __pyx_k__i[] = "i";
--static char __pyx_k__j[] = "j";
--static char __pyx_k__k[] = "k";
--static char __pyx_k__l[] = "l";
--static char __pyx_k__q[] = "q";
--static char __pyx_k__Zd[] = "Zd";
--static char __pyx_k__Zf[] = "Zf";
--static char __pyx_k__Zg[] = "Zg";
--static char __pyx_k__ii[] = "ii";
--static char __pyx_k__jj[] = "jj";
--static char __pyx_k__kk[] = "kk";
--static char __pyx_k__np[] = "np";
--static char __pyx_k__nx[] = "nx";
--static char __pyx_k__ny[] = "ny";
--static char __pyx_k__nz[] = "nz";
--static char __pyx_k__bot[] = "bot";
--static char __pyx_k__iii[] = "iii";
--static char __pyx_k__jjj[] = "jjj";
--static char __pyx_k__ker[] = "ker";
--static char __pyx_k__kkk[] = "kkk";
--static char __pyx_k__nkx[] = "nkx";
--static char __pyx_k__nky[] = "nky";
--static char __pyx_k__nkz[] = "nkz";
--static char __pyx_k__top[] = "top";
--static char __pyx_k__val[] = "val";
--static char __pyx_k__wkx[] = "wkx";
--static char __pyx_k__wky[] = "wky";
--static char __pyx_k__wkz[] = "wkz";
--static char __pyx_k__conv[] = "conv";
--static char __pyx_k__DTYPE[] = "DTYPE";
--static char __pyx_k__dtype[] = "dtype";
--static char __pyx_k__empty[] = "empty";
--static char __pyx_k__fixed[] = "fixed";
--static char __pyx_k__float[] = "float";
--static char __pyx_k__iimax[] = "iimax";
--static char __pyx_k__iimin[] = "iimin";
--static char __pyx_k__jjmax[] = "jjmax";
--static char __pyx_k__jjmin[] = "jjmin";
--static char __pyx_k__kkmax[] = "kkmax";
--static char __pyx_k__kkmin[] = "kkmin";
--static char __pyx_k__numpy[] = "numpy";
--static char __pyx_k__range[] = "range";
--static char __pyx_k____main__[] = "__main__";
--static char __pyx_k____test__[] = "__test__";
--static char __pyx_k__ValueError[] = "ValueError";
--static char __pyx_k__fill_value[] = "fill_value";
--static char __pyx_k__RuntimeError[] = "RuntimeError";
--static PyObject *__pyx_kp_s_1;
--static PyObject *__pyx_kp_u_11;
--static PyObject *__pyx_kp_u_12;
--static PyObject *__pyx_kp_u_15;
--static PyObject *__pyx_n_s_19;
--static PyObject *__pyx_kp_s_20;
--static PyObject *__pyx_n_s_21;
--static PyObject *__pyx_n_s_24;
--static PyObject *__pyx_n_s_27;
--static PyObject *__pyx_kp_u_5;
--static PyObject *__pyx_kp_u_7;
--static PyObject *__pyx_kp_u_9;
--static PyObject *__pyx_n_s__DTYPE;
--static PyObject *__pyx_n_s__RuntimeError;
--static PyObject *__pyx_n_s__ValueError;
--static PyObject *__pyx_n_s____main__;
--static PyObject *__pyx_n_s____test__;
--static PyObject *__pyx_n_s__bot;
--static PyObject *__pyx_n_s__conv;
--static PyObject *__pyx_n_s__dtype;
--static PyObject *__pyx_n_s__empty;
--static PyObject *__pyx_n_s__f;
--static PyObject *__pyx_n_s__fill_value;
--static PyObject *__pyx_n_s__fixed;
--static PyObject *__pyx_n_s__float;
--static PyObject *__pyx_n_s__g;
--static PyObject *__pyx_n_s__i;
--static PyObject *__pyx_n_s__ii;
--static PyObject *__pyx_n_s__iii;
--static PyObject *__pyx_n_s__iimax;
--static PyObject *__pyx_n_s__iimin;
--static PyObject *__pyx_n_s__j;
--static PyObject *__pyx_n_s__jj;
--static PyObject *__pyx_n_s__jjj;
--static PyObject *__pyx_n_s__jjmax;
--static PyObject *__pyx_n_s__jjmin;
--static PyObject *__pyx_n_s__k;
--static PyObject *__pyx_n_s__ker;
--static PyObject *__pyx_n_s__kk;
--static PyObject *__pyx_n_s__kkk;
--static PyObject *__pyx_n_s__kkmax;
--static PyObject *__pyx_n_s__kkmin;
--static PyObject *__pyx_n_s__nkx;
--static PyObject *__pyx_n_s__nky;
--static PyObject *__pyx_n_s__nkz;
--static PyObject *__pyx_n_s__np;
--static PyObject *__pyx_n_s__numpy;
--static PyObject *__pyx_n_s__nx;
--static PyObject *__pyx_n_s__ny;
--static PyObject *__pyx_n_s__nz;
--static PyObject *__pyx_n_s__range;
--static PyObject *__pyx_n_s__top;
--static PyObject *__pyx_n_s__val;
--static PyObject *__pyx_n_s__wkx;
--static PyObject *__pyx_n_s__wky;
--static PyObject *__pyx_n_s__wkz;
--static PyObject *__pyx_int_15;
--static PyObject *__pyx_k_tuple_2;
--static PyObject *__pyx_k_tuple_3;
--static PyObject *__pyx_k_tuple_4;
--static PyObject *__pyx_k_tuple_6;
--static PyObject *__pyx_k_tuple_8;
--static PyObject *__pyx_k_tuple_10;
--static PyObject *__pyx_k_tuple_13;
--static PyObject *__pyx_k_tuple_14;
--static PyObject *__pyx_k_tuple_16;
--static PyObject *__pyx_k_tuple_17;
--static PyObject *__pyx_k_tuple_22;
--static PyObject *__pyx_k_tuple_25;
--static PyObject *__pyx_k_codeobj_18;
--static PyObject *__pyx_k_codeobj_23;
--static PyObject *__pyx_k_codeobj_26;
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill = {__Pyx_NAMESTR("convolve1d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  float __pyx_v_fill_value;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve1d_boundary_fill (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,&__pyx_n_s__fill_value,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fill_value)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve1d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_fill_convolve1d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_fill.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_fill(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g,
-- *                              float fill_value):
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_convolve1d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
--  int __pyx_v_nx;
--  int __pyx_v_nkx;
--  int __pyx_v_wkx;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  int __pyx_v_ii;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  int __pyx_t_13;
--  int __pyx_t_14;
--  int __pyx_t_15;
--  unsigned int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  unsigned int __pyx_t_21;
--  unsigned int __pyx_t_22;
--  int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve1d_boundary_fill", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/convolution/boundary_fill.pyx":20
-- *                              float fill_value):
-- * 
-- *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (__pyx_t_1) {
--
--    /* "astropy/convolution/boundary_fill.pyx":21
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_fill.pyx":23
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (__pyx_t_1) {
--    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __pyx_t_6 = __pyx_t_5;
--  } else {
--    __pyx_t_6 = __pyx_t_1;
--  }
--  if (unlikely(!__pyx_t_6)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_fill.pyx":25
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_fill.pyx":26
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_fill.pyx":27
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_fill.pyx":28
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
-- *     cdef unsigned int i, iii
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
--  __pyx_t_4 = 0;
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":29
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, iii
-- *     cdef int ii
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
--  __pyx_t_3 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":39
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if npy_isnan(f[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_fill.pyx":40
-- *     # neighboring values
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
--    if (__pyx_t_6) {
--
--      /* "astropy/convolution/boundary_fill.pyx":41
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             iimin = i - wkx
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_fill.pyx":42
-- *         if npy_isnan(f[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_fill.pyx":43
-- *             top = 0.
-- *             bot = 0.
-- *             iimin = i - wkx             # <<<<<<<<<<<<<<
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- */
--      __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--      /* "astropy/convolution/boundary_fill.pyx":44
-- *             bot = 0.
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *             for ii in range(iimin, iimax):
-- *                 if ii < 0 or ii > nx - 1:
-- */
--      __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--      /* "astropy/convolution/boundary_fill.pyx":45
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                 if ii < 0 or ii > nx - 1:
-- *                     val = fill_value
-- */
--      __pyx_t_13 = __pyx_v_iimax;
--      for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
--        __pyx_v_ii = __pyx_t_14;
--
--        /* "astropy/convolution/boundary_fill.pyx":46
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- *                 if ii < 0 or ii > nx - 1:             # <<<<<<<<<<<<<<
-- *                     val = fill_value
-- *                 else:
-- */
--        __pyx_t_6 = (__pyx_v_ii < 0);
--        if (!__pyx_t_6) {
--          __pyx_t_1 = (__pyx_v_ii > (__pyx_v_nx - 1));
--          __pyx_t_5 = __pyx_t_1;
--        } else {
--          __pyx_t_5 = __pyx_t_6;
--        }
--        if (__pyx_t_5) {
--
--          /* "astropy/convolution/boundary_fill.pyx":47
-- *             for ii in range(iimin, iimax):
-- *                 if ii < 0 or ii > nx - 1:
-- *                     val = fill_value             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     val = f[ii]
-- */
--          __pyx_v_val = __pyx_v_fill_value;
--          goto __pyx_L9;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_fill.pyx":49
-- *                     val = fill_value
-- *                 else:
-- *                     val = f[ii]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- */
--          __pyx_t_15 = __pyx_v_ii;
--          if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_pybuffernd_f.diminfo[0].shape;
--          __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
--        }
--        __pyx_L9:;
--
--        /* "astropy/convolution/boundary_fill.pyx":50
-- *                 else:
-- *                     val = f[ii]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- */
--        __pyx_t_5 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_5) {
--
--          /* "astropy/convolution/boundary_fill.pyx":51
-- *                     val = f[ii]
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--          __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
--
--          /* "astropy/convolution/boundary_fill.pyx":52
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- *             if bot != 0.:
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_fill.pyx":53
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- *             if bot != 0.:
-- *                 fixed[i] = top / bot
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L10;
--        }
--        __pyx_L10:;
--      }
--
--      /* "astropy/convolution/boundary_fill.pyx":54
-- *                     top += val * ker
-- *                     bot += ker
-- *             if bot != 0.:             # <<<<<<<<<<<<<<
-- *                 fixed[i] = top / bot
-- *             else:
-- */
--      __pyx_t_5 = (__pyx_v_bot != 0.);
--      if (__pyx_t_5) {
--
--        /* "astropy/convolution/boundary_fill.pyx":55
-- *                     bot += ker
-- *             if bot != 0.:
-- *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i] = f[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_17 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L11;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_fill.pyx":57
-- *                 fixed[i] = top / bot
-- *             else:
-- *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             fixed[i] = f[i]
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
--      }
--      __pyx_L11:;
--      goto __pyx_L6;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_fill.pyx":59
-- *                 fixed[i] = f[i]
-- *         else:
-- *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--      __pyx_t_20 = __pyx_v_i;
--      __pyx_t_21 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
--    }
--    __pyx_L6:;
--  }
--
--  /* "astropy/convolution/boundary_fill.pyx":62
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_fill.pyx":63
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_22 = __pyx_v_i;
--    __pyx_t_5 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
--    if (__pyx_t_5) {
--
--      /* "astropy/convolution/boundary_fill.pyx":64
-- *     for i in range(nx):
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             iimin = i - wkx
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_fill.pyx":65
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_fill.pyx":66
-- *             top = 0.
-- *             bot = 0.
-- *             iimin = i - wkx             # <<<<<<<<<<<<<<
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- */
--      __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--      /* "astropy/convolution/boundary_fill.pyx":67
-- *             bot = 0.
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *             for ii in range(iimin, iimax):
-- *                 if ii < 0 or ii > nx - 1:
-- */
--      __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--      /* "astropy/convolution/boundary_fill.pyx":68
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                 if ii < 0 or ii > nx - 1:
-- *                     val = fill_value
-- */
--      __pyx_t_13 = __pyx_v_iimax;
--      for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
--        __pyx_v_ii = __pyx_t_14;
--
--        /* "astropy/convolution/boundary_fill.pyx":69
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- *                 if ii < 0 or ii > nx - 1:             # <<<<<<<<<<<<<<
-- *                     val = fill_value
-- *                 else:
-- */
--        __pyx_t_5 = (__pyx_v_ii < 0);
--        if (!__pyx_t_5) {
--          __pyx_t_6 = (__pyx_v_ii > (__pyx_v_nx - 1));
--          __pyx_t_1 = __pyx_t_6;
--        } else {
--          __pyx_t_1 = __pyx_t_5;
--        }
--        if (__pyx_t_1) {
--
--          /* "astropy/convolution/boundary_fill.pyx":70
-- *             for ii in range(iimin, iimax):
-- *                 if ii < 0 or ii > nx - 1:
-- *                     val = fill_value             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     val = fixed[ii]
-- */
--          __pyx_v_val = __pyx_v_fill_value;
--          goto __pyx_L17;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_fill.pyx":72
-- *                     val = fill_value
-- *                 else:
-- *                     val = fixed[ii]             # <<<<<<<<<<<<<<
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- */
--          __pyx_t_23 = __pyx_v_ii;
--          if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_fixed.diminfo[0].shape;
--          __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
--        }
--        __pyx_L17:;
--
--        /* "astropy/convolution/boundary_fill.pyx":73
-- *                 else:
-- *                     val = fixed[ii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- */
--        __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_fill.pyx":74
-- *                     val = fixed[ii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--        __pyx_t_1 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_1) {
--
--          /* "astropy/convolution/boundary_fill.pyx":75
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- *             if bot != 0:
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_fill.pyx":76
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- *             if bot != 0:
-- *                 conv[i] = top / bot
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L18;
--        }
--        __pyx_L18:;
--      }
--
--      /* "astropy/convolution/boundary_fill.pyx":77
-- *                     top += val * ker
-- *                     bot += ker
-- *             if bot != 0:             # <<<<<<<<<<<<<<
-- *                 conv[i] = top / bot
-- *             else:
-- */
--      __pyx_t_1 = (__pyx_v_bot != 0.0);
--      if (__pyx_t_1) {
--
--        /* "astropy/convolution/boundary_fill.pyx":78
-- *                     bot += ker
-- *             if bot != 0:
-- *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i] = fixed[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_25 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L19;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_fill.pyx":80
-- *                 conv[i] = top / bot
-- *             else:
-- *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             conv[i] = fixed[i]
-- */
--        __pyx_t_26 = __pyx_v_i;
--        __pyx_t_27 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
--      }
--      __pyx_L19:;
--      goto __pyx_L14;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_fill.pyx":82
-- *                 conv[i] = fixed[i]
-- *         else:
-- *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--      __pyx_t_28 = __pyx_v_i;
--      __pyx_t_29 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
--    }
--    __pyx_L14:;
--  }
--
--  /* "astropy/convolution/boundary_fill.pyx":84
-- *             conv[i] = fixed[i]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve1d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill = {__Pyx_NAMESTR("convolve2d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  float __pyx_v_fill_value;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve2d_boundary_fill (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,&__pyx_n_s__fill_value,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fill_value)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve2d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_fill_2convolve2d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_fill.pyx":88
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_fill(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g,
-- *                              float fill_value):
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_2convolve2d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  int __pyx_v_ii;
--  int __pyx_v_jj;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  int __pyx_v_jjmin;
--  int __pyx_v_jjmax;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  int __pyx_t_17;
--  int __pyx_t_18;
--  int __pyx_t_19;
--  int __pyx_t_20;
--  int __pyx_t_21;
--  int __pyx_t_22;
--  int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  int __pyx_t_38;
--  int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  unsigned int __pyx_t_50;
--  unsigned int __pyx_t_51;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve2d_boundary_fill", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
--
--  /* "astropy/convolution/boundary_fill.pyx":92
-- *                              float fill_value):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "astropy/convolution/boundary_fill.pyx":93
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_fill.pyx":95
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  if (__pyx_t_3) {
--    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (unlikely(!__pyx_t_2)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_fill.pyx":97
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_fill.pyx":98
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_fill.pyx":99
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_fill.pyx":100
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_fill.pyx":101
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_fill.pyx":102
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_fill.pyx":103
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef unsigned int i, j, iii, jjj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":104
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, j, iii, jjj
-- *     cdef int ii, jj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":114
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_fill.pyx":115
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_fill.pyx":116
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_14 = __pyx_v_i;
--      __pyx_t_15 = __pyx_v_j;
--      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
--      if (__pyx_t_2) {
--
--        /* "astropy/convolution/boundary_fill.pyx":117
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_fill.pyx":118
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_fill.pyx":119
-- *                 top = 0.
-- *                 bot = 0.
-- *                 iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- */
--        __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--        /* "astropy/convolution/boundary_fill.pyx":120
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- */
--        __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--        /* "astropy/convolution/boundary_fill.pyx":121
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- */
--        __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--        /* "astropy/convolution/boundary_fill.pyx":122
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- */
--        __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--        /* "astropy/convolution/boundary_fill.pyx":123
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                     for jj in range(jjmin, jjmax):
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
-- */
--        __pyx_t_16 = __pyx_v_iimax;
--        for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--          __pyx_v_ii = __pyx_t_17;
--
--          /* "astropy/convolution/boundary_fill.pyx":124
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
-- *                             val = fill_value
-- */
--          __pyx_t_18 = __pyx_v_jjmax;
--          for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
--            __pyx_v_jj = __pyx_t_19;
--
--            /* "astropy/convolution/boundary_fill.pyx":125
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:             # <<<<<<<<<<<<<<
-- *                             val = fill_value
-- *                         else:
-- */
--            __pyx_t_2 = (__pyx_v_ii < 0);
--            if (!__pyx_t_2) {
--              __pyx_t_3 = (__pyx_v_ii > (__pyx_v_nx - 1));
--              if (!__pyx_t_3) {
--                __pyx_t_1 = (__pyx_v_jj < 0);
--                if (!__pyx_t_1) {
--                  __pyx_t_20 = (__pyx_v_jj > (__pyx_v_ny - 1));
--                  __pyx_t_21 = __pyx_t_20;
--                } else {
--                  __pyx_t_21 = __pyx_t_1;
--                }
--                __pyx_t_1 = __pyx_t_21;
--              } else {
--                __pyx_t_1 = __pyx_t_3;
--              }
--              __pyx_t_3 = __pyx_t_1;
--            } else {
--              __pyx_t_3 = __pyx_t_2;
--            }
--            if (__pyx_t_3) {
--
--              /* "astropy/convolution/boundary_fill.pyx":126
-- *                     for jj in range(jjmin, jjmax):
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
-- *                             val = fill_value             # <<<<<<<<<<<<<<
-- *                         else:
-- *                             val = f[ii, jj]
-- */
--              __pyx_v_val = __pyx_v_fill_value;
--              goto __pyx_L13;
--            }
--            /*else*/ {
--
--              /* "astropy/convolution/boundary_fill.pyx":128
-- *                             val = fill_value
-- *                         else:
-- *                             val = f[ii, jj]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- */
--              __pyx_t_22 = __pyx_v_ii;
--              __pyx_t_23 = __pyx_v_jj;
--              if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_pybuffernd_f.diminfo[0].shape;
--              if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_f.diminfo[1].shape;
--              __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_f.diminfo[1].strides));
--            }
--            __pyx_L13:;
--
--            /* "astropy/convolution/boundary_fill.pyx":129
-- *                         else:
-- *                             val = f[ii, jj]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_3 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_3) {
--
--              /* "astropy/convolution/boundary_fill.pyx":131
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--              __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--              __pyx_t_25 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_g.diminfo[1].strides));
--
--              /* "astropy/convolution/boundary_fill.pyx":132
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- *                 if bot != 0.:
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_fill.pyx":133
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- *                 if bot != 0.:
-- *                     fixed[i, j] = top / bot
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L14;
--            }
--            __pyx_L14:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_fill.pyx":134
-- *                             top += val * ker
-- *                             bot += ker
-- *                 if bot != 0.:             # <<<<<<<<<<<<<<
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_3 = (__pyx_v_bot != 0.);
--        if (__pyx_t_3) {
--
--          /* "astropy/convolution/boundary_fill.pyx":135
-- *                             bot += ker
-- *                 if bot != 0.:
-- *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j] = f[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_26 = __pyx_v_i;
--          __pyx_t_27 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L15;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_fill.pyx":137
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i, j] = f[i, j]
-- */
--          __pyx_t_28 = __pyx_v_i;
--          __pyx_t_29 = __pyx_v_j;
--          __pyx_t_30 = __pyx_v_i;
--          __pyx_t_31 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[1].strides));
--        }
--        __pyx_L15:;
--        goto __pyx_L8;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_fill.pyx":139
-- *                     fixed[i, j] = f[i, j]
-- *             else:
-- *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--        __pyx_t_32 = __pyx_v_i;
--        __pyx_t_33 = __pyx_v_j;
--        __pyx_t_34 = __pyx_v_i;
--        __pyx_t_35 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_f.diminfo[1].strides));
--      }
--      __pyx_L8:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_fill.pyx":142
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_fill.pyx":143
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_fill.pyx":144
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_36 = __pyx_v_i;
--      __pyx_t_37 = __pyx_v_j;
--      __pyx_t_3 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides))));
--      if (__pyx_t_3) {
--
--        /* "astropy/convolution/boundary_fill.pyx":145
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_fill.pyx":146
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_fill.pyx":147
-- *                 top = 0.
-- *                 bot = 0.
-- *                 iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- */
--        __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--        /* "astropy/convolution/boundary_fill.pyx":148
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- */
--        __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--        /* "astropy/convolution/boundary_fill.pyx":149
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- */
--        __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--        /* "astropy/convolution/boundary_fill.pyx":150
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- */
--        __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--        /* "astropy/convolution/boundary_fill.pyx":151
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                     for jj in range(jjmin, jjmax):
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
-- */
--        __pyx_t_16 = __pyx_v_iimax;
--        for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--          __pyx_v_ii = __pyx_t_17;
--
--          /* "astropy/convolution/boundary_fill.pyx":152
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
-- *                             val = fill_value
-- */
--          __pyx_t_18 = __pyx_v_jjmax;
--          for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
--            __pyx_v_jj = __pyx_t_19;
--
--            /* "astropy/convolution/boundary_fill.pyx":153
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:             # <<<<<<<<<<<<<<
-- *                             val = fill_value
-- *                         else:
-- */
--            __pyx_t_3 = (__pyx_v_ii < 0);
--            if (!__pyx_t_3) {
--              __pyx_t_2 = (__pyx_v_ii > (__pyx_v_nx - 1));
--              if (!__pyx_t_2) {
--                __pyx_t_1 = (__pyx_v_jj < 0);
--                if (!__pyx_t_1) {
--                  __pyx_t_21 = (__pyx_v_jj > (__pyx_v_ny - 1));
--                  __pyx_t_20 = __pyx_t_21;
--                } else {
--                  __pyx_t_20 = __pyx_t_1;
--                }
--                __pyx_t_1 = __pyx_t_20;
--              } else {
--                __pyx_t_1 = __pyx_t_2;
--              }
--              __pyx_t_2 = __pyx_t_1;
--            } else {
--              __pyx_t_2 = __pyx_t_3;
--            }
--            if (__pyx_t_2) {
--
--              /* "astropy/convolution/boundary_fill.pyx":154
-- *                     for jj in range(jjmin, jjmax):
-- *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
-- *                             val = fill_value             # <<<<<<<<<<<<<<
-- *                         else:
-- *                             val = fixed[ii, jj]
-- */
--              __pyx_v_val = __pyx_v_fill_value;
--              goto __pyx_L25;
--            }
--            /*else*/ {
--
--              /* "astropy/convolution/boundary_fill.pyx":156
-- *                             val = fill_value
-- *                         else:
-- *                             val = fixed[ii, jj]             # <<<<<<<<<<<<<<
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- */
--              __pyx_t_38 = __pyx_v_ii;
--              __pyx_t_39 = __pyx_v_jj;
--              if (__pyx_t_38 < 0) __pyx_t_38 += __pyx_pybuffernd_fixed.diminfo[0].shape;
--              if (__pyx_t_39 < 0) __pyx_t_39 += __pyx_pybuffernd_fixed.diminfo[1].shape;
--              __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[1].strides));
--            }
--            __pyx_L25:;
--
--            /* "astropy/convolution/boundary_fill.pyx":158
-- *                             val = fixed[ii, jj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- */
--            __pyx_t_40 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--            __pyx_t_41 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_g.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_fill.pyx":159
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_2) {
--
--              /* "astropy/convolution/boundary_fill.pyx":160
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- *                 if bot != 0:
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_fill.pyx":161
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L26;
--            }
--            __pyx_L26:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_fill.pyx":162
-- *                             top += val * ker
-- *                             bot += ker
-- *                 if bot != 0:             # <<<<<<<<<<<<<<
-- *                     conv[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_2 = (__pyx_v_bot != 0.0);
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_fill.pyx":163
-- *                             bot += ker
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_42 = __pyx_v_i;
--          __pyx_t_43 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L27;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_fill.pyx":165
-- *                     conv[i, j] = top / bot
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i, j] = fixed[i, j]
-- */
--          __pyx_t_44 = __pyx_v_i;
--          __pyx_t_45 = __pyx_v_j;
--          __pyx_t_46 = __pyx_v_i;
--          __pyx_t_47 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[1].strides));
--        }
--        __pyx_L27:;
--        goto __pyx_L20;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_fill.pyx":167
-- *                     conv[i, j] = fixed[i, j]
-- *             else:
-- *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--        __pyx_t_48 = __pyx_v_i;
--        __pyx_t_49 = __pyx_v_j;
--        __pyx_t_50 = __pyx_v_i;
--        __pyx_t_51 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_51, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides));
--      }
--      __pyx_L20:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_fill.pyx":169
-- *                 conv[i, j] = fixed[i, j]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve2d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill = {__Pyx_NAMESTR("convolve3d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  float __pyx_v_fill_value;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve3d_boundary_fill (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,&__pyx_n_s__fill_value,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fill_value)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve3d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_fill_4convolve3d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_fill.pyx":173
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_fill(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g,
-- *                              float fill_value):
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_4convolve3d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nz;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_nkz;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  int __pyx_v_wkz;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_k;
--  int __pyx_v_ii;
--  int __pyx_v_jj;
--  int __pyx_v_kk;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  int __pyx_v_jjmin;
--  int __pyx_v_jjmax;
--  int __pyx_v_kkmin;
--  int __pyx_v_kkmax;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  int __pyx_t_4;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyObject *__pyx_t_8 = NULL;
--  PyObject *__pyx_t_9 = NULL;
--  PyArrayObject *__pyx_t_10 = NULL;
--  PyArrayObject *__pyx_t_11 = NULL;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  int __pyx_t_21;
--  int __pyx_t_22;
--  int __pyx_t_23;
--  int __pyx_t_24;
--  int __pyx_t_25;
--  int __pyx_t_26;
--  int __pyx_t_27;
--  int __pyx_t_28;
--  int __pyx_t_29;
--  int __pyx_t_30;
--  int __pyx_t_31;
--  int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  unsigned int __pyx_t_50;
--  unsigned int __pyx_t_51;
--  unsigned int __pyx_t_52;
--  unsigned int __pyx_t_53;
--  int __pyx_t_54;
--  int __pyx_t_55;
--  int __pyx_t_56;
--  unsigned int __pyx_t_57;
--  unsigned int __pyx_t_58;
--  unsigned int __pyx_t_59;
--  unsigned int __pyx_t_60;
--  unsigned int __pyx_t_61;
--  unsigned int __pyx_t_62;
--  unsigned int __pyx_t_63;
--  unsigned int __pyx_t_64;
--  unsigned int __pyx_t_65;
--  unsigned int __pyx_t_66;
--  unsigned int __pyx_t_67;
--  unsigned int __pyx_t_68;
--  unsigned int __pyx_t_69;
--  unsigned int __pyx_t_70;
--  unsigned int __pyx_t_71;
--  unsigned int __pyx_t_72;
--  unsigned int __pyx_t_73;
--  unsigned int __pyx_t_74;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve3d_boundary_fill", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pyb [...]
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pyb [...]
--
--  /* "astropy/convolution/boundary_fill.pyx":177
-- *                              float fill_value):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    if (!__pyx_t_2) {
--      __pyx_t_3 = (__Pyx_mod_long((__pyx_v_g->dimensions[2]), 2) != 1);
--      __pyx_t_4 = __pyx_t_3;
--    } else {
--      __pyx_t_4 = __pyx_t_2;
--    }
--    __pyx_t_2 = __pyx_t_4;
--  } else {
--    __pyx_t_2 = __pyx_t_1;
--  }
--  if (__pyx_t_2) {
--
--    /* "astropy/convolution/boundary_fill.pyx":178
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_fill.pyx":180
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  if (__pyx_t_2) {
--    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_7);
--    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_4 = __pyx_t_1;
--  } else {
--    __pyx_t_4 = __pyx_t_2;
--  }
--  if (unlikely(!__pyx_t_4)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_fill.pyx":182
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_fill.pyx":183
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_fill.pyx":184
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_nz = (__pyx_v_f->dimensions[2]);
--
--  /* "astropy/convolution/boundary_fill.pyx":185
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_fill.pyx":186
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_fill.pyx":187
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
--
--  /* "astropy/convolution/boundary_fill.pyx":188
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_fill.pyx":189
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_fill.pyx":190
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
-- */
--  __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
--
--  /* "astropy/convolution/boundary_fill.pyx":191
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef unsigned int i, j, k, iii, jjj, kkk
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  __pyx_t_5 = 0;
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
--  __pyx_t_9 = 0;
--  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2 [...]
--    }
--  }
--  __pyx_t_10 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":192
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, j, k, iii, jjj, kkk
-- *     cdef int ii, jj, kk
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_p [...]
--    }
--  }
--  __pyx_t_11 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
--  __pyx_t_8 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":202
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_fill.pyx":203
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_fill.pyx":204
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_fill.pyx":205
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_j;
--        __pyx_t_20 = __pyx_v_k;
--        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
--        if (__pyx_t_4) {
--
--          /* "astropy/convolution/boundary_fill.pyx":206
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_fill.pyx":207
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_fill.pyx":208
-- *                     top = 0.
-- *                     bot = 0.
-- *                     iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- */
--          __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--          /* "astropy/convolution/boundary_fill.pyx":209
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- */
--          __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--          /* "astropy/convolution/boundary_fill.pyx":210
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- */
--          __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--          /* "astropy/convolution/boundary_fill.pyx":211
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- */
--          __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--          /* "astropy/convolution/boundary_fill.pyx":212
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- */
--          __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
--
--          /* "astropy/convolution/boundary_fill.pyx":213
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- */
--          __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
--
--          /* "astropy/convolution/boundary_fill.pyx":214
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- */
--          __pyx_t_21 = __pyx_v_iimax;
--          for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_ii = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_fill.pyx":215
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                             for kk in range(kkmin, kkmax):
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
-- */
--            __pyx_t_23 = __pyx_v_jjmax;
--            for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
--              __pyx_v_jj = __pyx_t_24;
--
--              /* "astropy/convolution/boundary_fill.pyx":216
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
-- *                                     val = fill_value
-- */
--              __pyx_t_25 = __pyx_v_kkmax;
--              for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--                __pyx_v_kk = __pyx_t_26;
--
--                /* "astropy/convolution/boundary_fill.pyx":217
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:             # <<<<<<<<<<<<<<
-- *                                     val = fill_value
-- *                                 else:
-- */
--                __pyx_t_4 = (__pyx_v_ii < 0);
--                if (!__pyx_t_4) {
--                  __pyx_t_2 = (__pyx_v_ii > (__pyx_v_nx - 1));
--                  if (!__pyx_t_2) {
--                    __pyx_t_1 = (__pyx_v_jj < 0);
--                    if (!__pyx_t_1) {
--                      __pyx_t_3 = (__pyx_v_jj > (__pyx_v_ny - 1));
--                      if (!__pyx_t_3) {
--                        __pyx_t_27 = (__pyx_v_kk < 0);
--                        if (!__pyx_t_27) {
--                          __pyx_t_28 = (__pyx_v_kk > (__pyx_v_nz - 1));
--                          __pyx_t_29 = __pyx_t_28;
--                        } else {
--                          __pyx_t_29 = __pyx_t_27;
--                        }
--                        __pyx_t_27 = __pyx_t_29;
--                      } else {
--                        __pyx_t_27 = __pyx_t_3;
--                      }
--                      __pyx_t_3 = __pyx_t_27;
--                    } else {
--                      __pyx_t_3 = __pyx_t_1;
--                    }
--                    __pyx_t_1 = __pyx_t_3;
--                  } else {
--                    __pyx_t_1 = __pyx_t_2;
--                  }
--                  __pyx_t_2 = __pyx_t_1;
--                } else {
--                  __pyx_t_2 = __pyx_t_4;
--                }
--                if (__pyx_t_2) {
--
--                  /* "astropy/convolution/boundary_fill.pyx":218
-- *                             for kk in range(kkmin, kkmax):
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
-- *                                     val = fill_value             # <<<<<<<<<<<<<<
-- *                                 else:
-- *                                     val = f[ii, jj, kk]
-- */
--                  __pyx_v_val = __pyx_v_fill_value;
--                  goto __pyx_L17;
--                }
--                /*else*/ {
--
--                  /* "astropy/convolution/boundary_fill.pyx":220
-- *                                     val = fill_value
-- *                                 else:
-- *                                     val = f[ii, jj, kk]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- */
--                  __pyx_t_30 = __pyx_v_ii;
--                  __pyx_t_31 = __pyx_v_jj;
--                  __pyx_t_32 = __pyx_v_kk;
--                  if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_pybuffernd_f.diminfo[0].shape;
--                  if (__pyx_t_31 < 0) __pyx_t_31 += __pyx_pybuffernd_f.diminfo[1].shape;
--                  if (__pyx_t_32 < 0) __pyx_t_32 += __pyx_pybuffernd_f.diminfo[2].shape;
--                  __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[2].strides));
--                }
--                __pyx_L17:;
--
--                /* "astropy/convolution/boundary_fill.pyx":221
-- *                                 else:
-- *                                     val = f[ii, jj, kk]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_2) {
--
--                  /* "astropy/convolution/boundary_fill.pyx":224
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                  __pyx_t_33 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                  __pyx_t_34 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                  __pyx_t_35 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                  /* "astropy/convolution/boundary_fill.pyx":225
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- *                     if bot != 0.:
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_fill.pyx":226
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- *                     if bot != 0.:
-- *                         fixed[i, j, k] = top / bot
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L18;
--                }
--                __pyx_L18:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_fill.pyx":227
-- *                                     top += val * ker
-- *                                     bot += ker
-- *                     if bot != 0.:             # <<<<<<<<<<<<<<
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_2 = (__pyx_v_bot != 0.);
--          if (__pyx_t_2) {
--
--            /* "astropy/convolution/boundary_fill.pyx":228
-- *                                     bot += ker
-- *                     if bot != 0.:
-- *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_36 = __pyx_v_i;
--            __pyx_t_37 = __pyx_v_j;
--            __pyx_t_38 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L19;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_fill.pyx":230
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]
-- */
--            __pyx_t_39 = __pyx_v_i;
--            __pyx_t_40 = __pyx_v_j;
--            __pyx_t_41 = __pyx_v_k;
--            __pyx_t_42 = __pyx_v_i;
--            __pyx_t_43 = __pyx_v_j;
--            __pyx_t_44 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_ [...]
--          }
--          __pyx_L19:;
--          goto __pyx_L10;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_fill.pyx":232
-- *                         fixed[i, j, k] = f[i, j, k]
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--          __pyx_t_45 = __pyx_v_i;
--          __pyx_t_46 = __pyx_v_j;
--          __pyx_t_47 = __pyx_v_k;
--          __pyx_t_48 = __pyx_v_i;
--          __pyx_t_49 = __pyx_v_j;
--          __pyx_t_50 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_46 [...]
--        }
--        __pyx_L10:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_fill.pyx":235
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_fill.pyx":236
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_fill.pyx":237
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_fill.pyx":238
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_51 = __pyx_v_i;
--        __pyx_t_52 = __pyx_v_j;
--        __pyx_t_53 = __pyx_v_k;
--        __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides))));
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_fill.pyx":239
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_fill.pyx":240
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_fill.pyx":241
-- *                     top = 0.
-- *                     bot = 0.
-- *                     iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- */
--          __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--          /* "astropy/convolution/boundary_fill.pyx":242
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- */
--          __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--          /* "astropy/convolution/boundary_fill.pyx":243
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- */
--          __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--          /* "astropy/convolution/boundary_fill.pyx":244
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- */
--          __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--          /* "astropy/convolution/boundary_fill.pyx":245
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- */
--          __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
--
--          /* "astropy/convolution/boundary_fill.pyx":246
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- */
--          __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
--
--          /* "astropy/convolution/boundary_fill.pyx":247
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- */
--          __pyx_t_21 = __pyx_v_iimax;
--          for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_ii = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_fill.pyx":248
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                             for kk in range(kkmin, kkmax):
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
-- */
--            __pyx_t_23 = __pyx_v_jjmax;
--            for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
--              __pyx_v_jj = __pyx_t_24;
--
--              /* "astropy/convolution/boundary_fill.pyx":249
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
-- *                                     val = fill_value
-- */
--              __pyx_t_25 = __pyx_v_kkmax;
--              for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--                __pyx_v_kk = __pyx_t_26;
--
--                /* "astropy/convolution/boundary_fill.pyx":250
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:             # <<<<<<<<<<<<<<
-- *                                     val = fill_value
-- *                                 else:
-- */
--                __pyx_t_2 = (__pyx_v_ii < 0);
--                if (!__pyx_t_2) {
--                  __pyx_t_4 = (__pyx_v_ii > (__pyx_v_nx - 1));
--                  if (!__pyx_t_4) {
--                    __pyx_t_1 = (__pyx_v_jj < 0);
--                    if (!__pyx_t_1) {
--                      __pyx_t_3 = (__pyx_v_jj > (__pyx_v_ny - 1));
--                      if (!__pyx_t_3) {
--                        __pyx_t_27 = (__pyx_v_kk < 0);
--                        if (!__pyx_t_27) {
--                          __pyx_t_29 = (__pyx_v_kk > (__pyx_v_nz - 1));
--                          __pyx_t_28 = __pyx_t_29;
--                        } else {
--                          __pyx_t_28 = __pyx_t_27;
--                        }
--                        __pyx_t_27 = __pyx_t_28;
--                      } else {
--                        __pyx_t_27 = __pyx_t_3;
--                      }
--                      __pyx_t_3 = __pyx_t_27;
--                    } else {
--                      __pyx_t_3 = __pyx_t_1;
--                    }
--                    __pyx_t_1 = __pyx_t_3;
--                  } else {
--                    __pyx_t_1 = __pyx_t_4;
--                  }
--                  __pyx_t_4 = __pyx_t_1;
--                } else {
--                  __pyx_t_4 = __pyx_t_2;
--                }
--                if (__pyx_t_4) {
--
--                  /* "astropy/convolution/boundary_fill.pyx":251
-- *                             for kk in range(kkmin, kkmax):
-- *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
-- *                                     val = fill_value             # <<<<<<<<<<<<<<
-- *                                 else:
-- *                                     val = fixed[ii, jj, kk]
-- */
--                  __pyx_v_val = __pyx_v_fill_value;
--                  goto __pyx_L33;
--                }
--                /*else*/ {
--
--                  /* "astropy/convolution/boundary_fill.pyx":253
-- *                                     val = fill_value
-- *                                 else:
-- *                                     val = fixed[ii, jj, kk]             # <<<<<<<<<<<<<<
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- */
--                  __pyx_t_54 = __pyx_v_ii;
--                  __pyx_t_55 = __pyx_v_jj;
--                  __pyx_t_56 = __pyx_v_kk;
--                  if (__pyx_t_54 < 0) __pyx_t_54 += __pyx_pybuffernd_fixed.diminfo[0].shape;
--                  if (__pyx_t_55 < 0) __pyx_t_55 += __pyx_pybuffernd_fixed.diminfo[1].shape;
--                  if (__pyx_t_56 < 0) __pyx_t_56 += __pyx_pybuffernd_fixed.diminfo[2].shape;
--                  __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_fixed.diminfo[2].strides));
--                }
--                __pyx_L33:;
--
--                /* "astropy/convolution/boundary_fill.pyx":256
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- */
--                __pyx_t_57 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                __pyx_t_58 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                __pyx_t_59 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_fill.pyx":257
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_4) {
--
--                  /* "astropy/convolution/boundary_fill.pyx":258
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- *                     if bot != 0:
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_fill.pyx":259
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L34;
--                }
--                __pyx_L34:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_fill.pyx":260
-- *                                     top += val * ker
-- *                                     bot += ker
-- *                     if bot != 0:             # <<<<<<<<<<<<<<
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_4 = (__pyx_v_bot != 0.0);
--          if (__pyx_t_4) {
--
--            /* "astropy/convolution/boundary_fill.pyx":261
-- *                                     bot += ker
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_60 = __pyx_v_i;
--            __pyx_t_61 = __pyx_v_j;
--            __pyx_t_62 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_62, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L35;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_fill.pyx":263
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]
-- */
--            __pyx_t_63 = __pyx_v_i;
--            __pyx_t_64 = __pyx_v_j;
--            __pyx_t_65 = __pyx_v_k;
--            __pyx_t_66 = __pyx_v_i;
--            __pyx_t_67 = __pyx_v_j;
--            __pyx_t_68 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_67, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_68, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_fixed.diminfo[0].strides, __py [...]
--          }
--          __pyx_L35:;
--          goto __pyx_L26;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_fill.pyx":265
-- *                         conv[i, j, k] = fixed[i, j, k]
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--          __pyx_t_69 = __pyx_v_i;
--          __pyx_t_70 = __pyx_v_j;
--          __pyx_t_71 = __pyx_v_k;
--          __pyx_t_72 = __pyx_v_i;
--          __pyx_t_73 = __pyx_v_j;
--          __pyx_t_74 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_73, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_74, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_ [...]
--        }
--        __pyx_L26:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_fill.pyx":267
-- *                     conv[i, j, k] = fixed[i, j, k]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_XDECREF(__pyx_t_9);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve3d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
--  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":194
-- *         # experimental exception made for __getbuffer__ and __releasebuffer__
-- *         # -- the details of this may change.
-- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
-- *             # This implementation of getbuffer is geared towards Cython
-- *             # requirements, and does not yet fullfill the PEP.
-- */
--
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_v_copy_shape;
--  int __pyx_v_i;
--  int __pyx_v_ndim;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  int __pyx_v_t;
--  char *__pyx_v_f;
--  PyArray_Descr *__pyx_v_descr = 0;
--  int __pyx_v_offset;
--  int __pyx_v_hasfields;
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  int __pyx_t_7;
--  PyObject *__pyx_t_8 = NULL;
--  char *__pyx_t_9;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("__getbuffer__", 0);
--  if (__pyx_v_info != NULL) {
--    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(__pyx_v_info->obj);
--  }
--
--  /* "numpy.pxd":200
-- *             # of flags
-- * 
-- *             if info == NULL: return             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int copy_shape, i, ndim
-- */
--  __pyx_t_1 = (__pyx_v_info == NULL);
--  if (__pyx_t_1) {
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":203
-- * 
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":204
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- * 
-- *             ndim = PyArray_NDIM(self)
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":206
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
--
--  /* "numpy.pxd":208
-- *             ndim = PyArray_NDIM(self)
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 copy_shape = 1
-- *             else:
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":209
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 copy_shape = 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 copy_shape = 0
-- */
--    __pyx_v_copy_shape = 1;
--    goto __pyx_L4;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":211
-- *                 copy_shape = 1
-- *             else:
-- *                 copy_shape = 0             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- */
--    __pyx_v_copy_shape = 0;
--  }
--  __pyx_L4:;
--
--  /* "numpy.pxd":213
-- *                 copy_shape = 0
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- */
--  __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":214
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- */
--    __pyx_t_2 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS));
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L5;
--  }
--  __pyx_L5:;
--
--  /* "numpy.pxd":217
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- */
--  __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":218
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- */
--    __pyx_t_1 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS));
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (__pyx_t_2) {
--
--    /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L6;
--  }
--  __pyx_L6:;
--
--  /* "numpy.pxd":221
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
-- *             info.ndim = ndim
-- *             if copy_shape:
-- */
--  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
--
--  /* "numpy.pxd":222
-- * 
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim             # <<<<<<<<<<<<<<
-- *             if copy_shape:
-- *                 # Allocate new buffer for strides and shape info.
-- */
--  __pyx_v_info->ndim = __pyx_v_ndim;
--
--  /* "numpy.pxd":223
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim
-- *             if copy_shape:             # <<<<<<<<<<<<<<
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- */
--  if (__pyx_v_copy_shape) {
--
--    /* "numpy.pxd":226
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
--
--    /* "numpy.pxd":227
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- */
--    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
--
--    /* "numpy.pxd":228
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- */
--    __pyx_t_5 = __pyx_v_ndim;
--    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
--      __pyx_v_i = __pyx_t_6;
--
--      /* "numpy.pxd":229
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- */
--      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
--
--      /* "numpy.pxd":230
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- */
--      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
--    }
--    goto __pyx_L7;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":232
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
--
--    /* "numpy.pxd":233
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- */
--    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
--  }
--  __pyx_L7:;
--
--  /* "numpy.pxd":234
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- */
--  __pyx_v_info->suboffsets = NULL;
--
--  /* "numpy.pxd":235
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- * 
-- */
--  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
--
--  /* "numpy.pxd":236
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int t
-- */
--  __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(__pyx_v_self));
--
--  /* "numpy.pxd":239
-- * 
-- *             cdef int t
-- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
-- *             cdef dtype descr = self.descr
-- *             cdef list stack
-- */
--  __pyx_v_f = NULL;
--
--  /* "numpy.pxd":240
-- *             cdef int t
-- *             cdef char* f = NULL
-- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
-- *             cdef list stack
-- *             cdef int offset
-- */
--  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
--  __Pyx_INCREF(__pyx_t_4);
--  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "numpy.pxd":244
-- *             cdef int offset
-- * 
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields and not copy_shape:
-- */
--  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
--
--  /* "numpy.pxd":246
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
-- * 
-- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
-- *                 # do not call releasebuffer
-- *                 info.obj = None
-- */
--  __pyx_t_2 = (!__pyx_v_hasfields);
--  if (__pyx_t_2) {
--    __pyx_t_3 = (!__pyx_v_copy_shape);
--    __pyx_t_1 = __pyx_t_3;
--  } else {
--    __pyx_t_1 = __pyx_t_2;
--  }
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":248
-- *             if not hasfields and not copy_shape:
-- *                 # do not call releasebuffer
-- *                 info.obj = None             # <<<<<<<<<<<<<<
-- *             else:
-- *                 # need to call releasebuffer
-- */
--    __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(Py_None);
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = Py_None;
--    goto __pyx_L10;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":251
-- *             else:
-- *                 # need to call releasebuffer
-- *                 info.obj = self             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields:
-- */
--    __Pyx_INCREF(((PyObject *)__pyx_v_self));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
--  }
--  __pyx_L10:;
--
--  /* "numpy.pxd":253
-- *                 info.obj = self
-- * 
-- *             if not hasfields:             # <<<<<<<<<<<<<<
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- */
--  __pyx_t_1 = (!__pyx_v_hasfields);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":254
-- * 
-- *             if not hasfields:
-- *                 t = descr.type_num             # <<<<<<<<<<<<<<
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- */
--    __pyx_t_5 = __pyx_v_descr->type_num;
--    __pyx_v_t = __pyx_t_5;
--
--    /* "numpy.pxd":255
-- *             if not hasfields:
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_1 = (__pyx_v_descr->byteorder == '>');
--    if (__pyx_t_1) {
--      __pyx_t_2 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_2 = __pyx_t_1;
--    }
--    if (!__pyx_t_2) {
--
--      /* "numpy.pxd":256
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- */
--      __pyx_t_1 = (__pyx_v_descr->byteorder == '<');
--      if (__pyx_t_1) {
--        __pyx_t_3 = (!__pyx_v_little_endian);
--        __pyx_t_7 = __pyx_t_3;
--      } else {
--        __pyx_t_7 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_7;
--    } else {
--      __pyx_t_1 = __pyx_t_2;
--    }
--    if (__pyx_t_1) {
--
--      /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L12;
--    }
--    __pyx_L12:;
--
--    /* "numpy.pxd":258
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_BYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__b;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":259
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UBYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__B;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":260
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_SHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__h;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":261
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_USHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__H;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":262
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_INT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__i;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":263
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UINT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__I;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":264
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__l;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":265
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__L;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":266
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":267
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":268
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_FLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__f;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":269
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__d;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":270
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__g;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":271
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zf;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":272
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zd;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":273
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zg;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":274
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_OBJECT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__O;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":276
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *                 info.format = f
-- *                 return
-- */
--      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
--      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
--      __pyx_t_8 = 0;
--      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_8);
--      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--    __pyx_L13:;
--
--    /* "numpy.pxd":277
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f             # <<<<<<<<<<<<<<
-- *                 return
-- *             else:
-- */
--    __pyx_v_info->format = __pyx_v_f;
--
--    /* "numpy.pxd":278
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f
-- *                 return             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- */
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L11;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":280
-- *                 return
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0
-- */
--    __pyx_v_info->format = ((char *)malloc(255));
--
--    /* "numpy.pxd":281
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
-- *                 offset = 0
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- */
--    (__pyx_v_info->format[0]) = '^';
--
--    /* "numpy.pxd":282
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0             # <<<<<<<<<<<<<<
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- */
--    __pyx_v_offset = 0;
--
--    /* "numpy.pxd":285
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)             # <<<<<<<<<<<<<<
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- */
--    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_v_f = __pyx_t_9;
--
--    /* "numpy.pxd":286
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)
-- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- */
--    (__pyx_v_f[0]) = '\x00';
--  }
--  __pyx_L11:;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = -1;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
--  }
--  goto __pyx_L2;
--  __pyx_L0:;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
--    __Pyx_GOTREF(Py_None);
--    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
--  }
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
--  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":288
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- */
--
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
--
--  /* "numpy.pxd":289
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_t_1 = PyArray_HASFIELDS(__pyx_v_self);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":290
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)
-- */
--    free(__pyx_v_info->format);
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":291
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.strides)
-- *                 # info.shape was stored after info.strides in the same block
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":292
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
-- *                 # info.shape was stored after info.strides in the same block
-- * 
-- */
--    free(__pyx_v_info->strides);
--    goto __pyx_L4;
--  }
--  __pyx_L4:;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":768
-- * ctypedef npy_cdouble     complex_t
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
--
--  /* "numpy.pxd":769
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":771
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
--
--  /* "numpy.pxd":772
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":774
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
--
--  /* "numpy.pxd":775
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":777
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
--
--  /* "numpy.pxd":778
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":780
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
--
--  /* "numpy.pxd":781
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":783
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
-- *     # Recursive utility function used in __getbuffer__ to get format
-- *     # string. The new location in the format string is returned.
-- */
--
--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) {
--  PyArray_Descr *__pyx_v_child = 0;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  PyObject *__pyx_v_fields = 0;
--  PyObject *__pyx_v_childname = NULL;
--  PyObject *__pyx_v_new_offset = NULL;
--  PyObject *__pyx_v_t = NULL;
--  char *__pyx_r;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  Py_ssize_t __pyx_t_2;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *(*__pyx_t_6)(PyObject *);
--  int __pyx_t_7;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  long __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
--
--  /* "numpy.pxd":790
-- *     cdef int delta_offset
-- *     cdef tuple i
-- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- *     cdef tuple fields
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":791
-- *     cdef tuple i
-- *     cdef int endian_detector = 1
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- *     cdef tuple fields
-- * 
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":794
-- *     cdef tuple fields
-- * 
-- *     for childname in descr.names:             # <<<<<<<<<<<<<<
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields
-- */
--  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
--  for (;;) {
--    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
--    #if CYTHON_COMPILING_IN_CPYTHON
--    __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_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #else
--    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #endif
--    __Pyx_XDECREF(__pyx_v_childname);
--    __pyx_v_childname = __pyx_t_3;
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":795
-- * 
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
-- *         child, new_offset = fields
-- * 
-- */
--    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
--    __pyx_v_fields = ((PyObject*)__pyx_t_3);
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":796
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields             # <<<<<<<<<<<<<<
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- */
--    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
--      PyObject* sequence = ((PyObject *)__pyx_v_fields);
--      #if CYTHON_COMPILING_IN_CPYTHON
--      Py_ssize_t size = Py_SIZE(sequence);
--      #else
--      Py_ssize_t size = PySequence_Size(sequence);
--      #endif
--      if (unlikely(size != 2)) {
--        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
--        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      #if CYTHON_COMPILING_IN_CPYTHON
--      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
--      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
--      __Pyx_INCREF(__pyx_t_3);
--      __Pyx_INCREF(__pyx_t_4);
--      #else
--      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      #endif
--    } else if (1) {
--      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else
--    {
--      Py_ssize_t index = -1;
--      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
--      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_3);
--      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_4);
--      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_t_6 = NULL;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      goto __pyx_L6_unpacking_done;
--      __pyx_L5_unpacking_failed:;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_6 = NULL;
--      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_L6_unpacking_done:;
--    }
--    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
--    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
--    __pyx_t_3 = 0;
--    __Pyx_XDECREF(__pyx_v_new_offset);
--    __pyx_v_new_offset = __pyx_t_4;
--    __pyx_t_4 = 0;
--
--    /* "numpy.pxd":798
-- *         child, new_offset = fields
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- */
--    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L7;
--    }
--    __pyx_L7:;
--
--    /* "numpy.pxd":801
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_7 = (__pyx_v_child->byteorder == '>');
--    if (__pyx_t_7) {
--      __pyx_t_8 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_8 = __pyx_t_7;
--    }
--    if (!__pyx_t_8) {
--
--      /* "numpy.pxd":802
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *             raise ValueError(u"Non-native byte order not supported")
-- *             # One could encode it in the format string and have Cython
-- */
--      __pyx_t_7 = (__pyx_v_child->byteorder == '<');
--      if (__pyx_t_7) {
--        __pyx_t_9 = (!__pyx_v_little_endian);
--        __pyx_t_10 = __pyx_t_9;
--      } else {
--        __pyx_t_10 = __pyx_t_7;
--      }
--      __pyx_t_7 = __pyx_t_10;
--    } else {
--      __pyx_t_7 = __pyx_t_8;
--    }
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L8;
--    }
--    __pyx_L8:;
--
--    /* "numpy.pxd":813
-- * 
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- */
--    while (1) {
--      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (!__pyx_t_7) break;
--
--      /* "numpy.pxd":814
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
-- *             f += 1
-- *             offset[0] += 1
-- */
--      (__pyx_v_f[0]) = 120;
--
--      /* "numpy.pxd":815
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1             # <<<<<<<<<<<<<<
-- *             offset[0] += 1
-- * 
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--
--      /* "numpy.pxd":816
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- *             offset[0] += 1             # <<<<<<<<<<<<<<
-- * 
-- *         offset[0] += child.itemsize
-- */
--      __pyx_t_11 = 0;
--      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
--    }
--
--    /* "numpy.pxd":818
-- *             offset[0] += 1
-- * 
-- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- */
--    __pyx_t_11 = 0;
--    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
--
--    /* "numpy.pxd":820
-- *         offset[0] += child.itemsize
-- * 
-- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
-- *             t = child.type_num
-- *             if end - f < 5:
-- */
--    __pyx_t_7 = (!PyDataType_HASFIELDS(__pyx_v_child));
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":821
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num             # <<<<<<<<<<<<<<
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- */
--      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __Pyx_XDECREF(__pyx_v_t);
--      __pyx_v_t = __pyx_t_3;
--      __pyx_t_3 = 0;
--
--      /* "numpy.pxd":822
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num
-- *             if end - f < 5:             # <<<<<<<<<<<<<<
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- * 
-- */
--      __pyx_t_7 = ((__pyx_v_end - __pyx_v_f) < 5);
--      if (__pyx_t_7) {
--
--        /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--
--      /* "numpy.pxd":826
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 98;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":827
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 66;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":828
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 104;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":829
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 72;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":830
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 105;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":831
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 73;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":832
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 108;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":833
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 76;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":834
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 113;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":835
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 81;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":836
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 102;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":837
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 100;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":838
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 103;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":839
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 102;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":840
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 100;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":841
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 103;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":842
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 79;
--        goto __pyx_L13;
--      }
--      /*else*/ {
--
--        /* "numpy.pxd":844
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *             f += 1
-- *         else:
-- */
--        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
--        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--        __pyx_t_5 = 0;
--        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_5);
--        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      __pyx_L13:;
--
--      /* "numpy.pxd":845
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *             f += 1             # <<<<<<<<<<<<<<
-- *         else:
-- *             # Cython ignores struct boundary information ("T{...}"),
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--      goto __pyx_L11;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":849
-- *             # Cython ignores struct boundary information ("T{...}"),
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
-- *     return f
-- * 
-- */
--      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_v_f = __pyx_t_12;
--    }
--    __pyx_L11:;
--  }
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "numpy.pxd":850
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)
-- *     return f             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __pyx_r = __pyx_v_f;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_child);
--  __Pyx_XDECREF(__pyx_v_fields);
--  __Pyx_XDECREF(__pyx_v_childname);
--  __Pyx_XDECREF(__pyx_v_new_offset);
--  __Pyx_XDECREF(__pyx_v_t);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":965
-- * 
-- * 
-- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- */
--
--static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
--  PyObject *__pyx_v_baseptr;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("set_array_base", 0);
--
--  /* "numpy.pxd":967
-- * cdef inline void set_array_base(ndarray arr, object base):
-- *      cdef PyObject* baseptr
-- *      if base is None:             # <<<<<<<<<<<<<<
-- *          baseptr = NULL
-- *      else:
-- */
--  __pyx_t_1 = (__pyx_v_base == Py_None);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":968
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- *          baseptr = NULL             # <<<<<<<<<<<<<<
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- */
--    __pyx_v_baseptr = NULL;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":970
-- *          baseptr = NULL
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- */
--    Py_INCREF(__pyx_v_base);
--
--    /* "numpy.pxd":971
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr
-- */
--    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":972
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
-- *      arr.base = baseptr
-- * 
-- */
--  Py_XDECREF(__pyx_v_arr->base);
--
--  /* "numpy.pxd":973
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- */
--  __pyx_v_arr->base = __pyx_v_baseptr;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("get_array_base", 0);
--
--  /* "numpy.pxd":976
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
-- *         return None
-- *     else:
-- */
--  __pyx_t_1 = (__pyx_v_arr->base == NULL);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":977
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:
-- *         return None             # <<<<<<<<<<<<<<
-- *     else:
-- *         return <object>arr.base
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(Py_None);
--    __pyx_r = Py_None;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":979
-- *         return None
-- *     else:
-- *         return <object>arr.base             # <<<<<<<<<<<<<<
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
--    __pyx_r = ((PyObject *)__pyx_v_arr->base);
--    goto __pyx_L0;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--static PyMethodDef __pyx_methods[] = {
--  {0, 0, 0, 0}
--};
--
--#if PY_MAJOR_VERSION >= 3
--static struct PyModuleDef __pyx_moduledef = {
--  #if PY_VERSION_HEX < 0x03020000
--    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
--  #else
--    PyModuleDef_HEAD_INIT,
--  #endif
--    __Pyx_NAMESTR("boundary_fill"),
--    0, /* m_doc */
--    -1, /* m_size */
--    __pyx_methods /* m_methods */,
--    NULL, /* m_reload */
--    NULL, /* m_traverse */
--    NULL, /* m_clear */
--    NULL /* m_free */
--};
--#endif
--
--static __Pyx_StringTabEntry __pyx_string_tab[] = {
--  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
--  {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0},
--  {&__pyx_kp_u_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 1, 0, 0},
--  {&__pyx_kp_u_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 1, 0, 0},
--  {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1},
--  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
--  {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1},
--  {&__pyx_n_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 1},
--  {&__pyx_n_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 1},
--  {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0},
--  {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0},
--  {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0},
--  {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1},
--  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
--  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
--  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
--  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
--  {&__pyx_n_s__bot, __pyx_k__bot, sizeof(__pyx_k__bot), 0, 0, 1, 1},
--  {&__pyx_n_s__conv, __pyx_k__conv, sizeof(__pyx_k__conv), 0, 0, 1, 1},
--  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
--  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
--  {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1},
--  {&__pyx_n_s__fill_value, __pyx_k__fill_value, sizeof(__pyx_k__fill_value), 0, 0, 1, 1},
--  {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1},
--  {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1},
--  {&__pyx_n_s__g, __pyx_k__g, sizeof(__pyx_k__g), 0, 0, 1, 1},
--  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
--  {&__pyx_n_s__ii, __pyx_k__ii, sizeof(__pyx_k__ii), 0, 0, 1, 1},
--  {&__pyx_n_s__iii, __pyx_k__iii, sizeof(__pyx_k__iii), 0, 0, 1, 1},
--  {&__pyx_n_s__iimax, __pyx_k__iimax, sizeof(__pyx_k__iimax), 0, 0, 1, 1},
--  {&__pyx_n_s__iimin, __pyx_k__iimin, sizeof(__pyx_k__iimin), 0, 0, 1, 1},
--  {&__pyx_n_s__j, __pyx_k__j, sizeof(__pyx_k__j), 0, 0, 1, 1},
--  {&__pyx_n_s__jj, __pyx_k__jj, sizeof(__pyx_k__jj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjj, __pyx_k__jjj, sizeof(__pyx_k__jjj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmax, __pyx_k__jjmax, sizeof(__pyx_k__jjmax), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmin, __pyx_k__jjmin, sizeof(__pyx_k__jjmin), 0, 0, 1, 1},
--  {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1},
--  {&__pyx_n_s__ker, __pyx_k__ker, sizeof(__pyx_k__ker), 0, 0, 1, 1},
--  {&__pyx_n_s__kk, __pyx_k__kk, sizeof(__pyx_k__kk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkk, __pyx_k__kkk, sizeof(__pyx_k__kkk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmax, __pyx_k__kkmax, sizeof(__pyx_k__kkmax), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmin, __pyx_k__kkmin, sizeof(__pyx_k__kkmin), 0, 0, 1, 1},
--  {&__pyx_n_s__nkx, __pyx_k__nkx, sizeof(__pyx_k__nkx), 0, 0, 1, 1},
--  {&__pyx_n_s__nky, __pyx_k__nky, sizeof(__pyx_k__nky), 0, 0, 1, 1},
--  {&__pyx_n_s__nkz, __pyx_k__nkz, sizeof(__pyx_k__nkz), 0, 0, 1, 1},
--  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
--  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
--  {&__pyx_n_s__nx, __pyx_k__nx, sizeof(__pyx_k__nx), 0, 0, 1, 1},
--  {&__pyx_n_s__ny, __pyx_k__ny, sizeof(__pyx_k__ny), 0, 0, 1, 1},
--  {&__pyx_n_s__nz, __pyx_k__nz, sizeof(__pyx_k__nz), 0, 0, 1, 1},
--  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
--  {&__pyx_n_s__top, __pyx_k__top, sizeof(__pyx_k__top), 0, 0, 1, 1},
--  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
--  {&__pyx_n_s__wkx, __pyx_k__wkx, sizeof(__pyx_k__wkx), 0, 0, 1, 1},
--  {&__pyx_n_s__wky, __pyx_k__wky, sizeof(__pyx_k__wky), 0, 0, 1, 1},
--  {&__pyx_n_s__wkz, __pyx_k__wkz, sizeof(__pyx_k__wkz), 0, 0, 1, 1},
--  {0, 0, 0, 0, 0, 0, 0}
--};
--static int __Pyx_InitCachedBuiltins(void) {
--  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--static int __Pyx_InitCachedConstants(void) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
--
--  /* "astropy/convolution/boundary_fill.pyx":21
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_2);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
--
--  /* "astropy/convolution/boundary_fill.pyx":93
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_3);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
--
--  /* "astropy/convolution/boundary_fill.pyx":178
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_4);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
--
--  /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_6);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
--
--  /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--  __pyx_k_tuple_8 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_7)); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_8);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8));
--
--  /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_10);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
--
--  /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_13);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
--
--  /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--  __pyx_k_tuple_14 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_14);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14));
--
--  /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--  __pyx_k_tuple_16 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_15)); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_16);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
--
--  /* "astropy/convolution/boundary_fill.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_fill(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g,
-- *                              float fill_value):
-- */
--  __pyx_k_tuple_17 = PyTuple_Pack(17, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot [...]
--  __Pyx_GOTREF(__pyx_k_tuple_17);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
--  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(3, 0, 17, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 16, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_fill.pyx":88
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_fill(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g,
-- *                              float fill_value):
-- */
--  __pyx_k_tuple_22 = PyTuple_Pack(25, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((P [...]
--  __Pyx_GOTREF(__pyx_k_tuple_22);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
--  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(3, 0, 25, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 88, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_fill.pyx":173
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_fill(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g,
-- *                              float fill_value):
-- */
--  __pyx_k_tuple_25 = PyTuple_Pack(33, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), (( [...]
--  __Pyx_GOTREF(__pyx_k_tuple_25);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
--  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(3, 0, 33, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 173, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_RefNannyFinishContext();
--  return 0;
--  __pyx_L1_error:;
--  __Pyx_RefNannyFinishContext();
--  return -1;
--}
--
--static int __Pyx_InitGlobals(void) {
--  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--#if PY_MAJOR_VERSION < 3
--PyMODINIT_FUNC initboundary_fill(void); /*proto*/
--PyMODINIT_FUNC initboundary_fill(void)
--#else
--PyMODINIT_FUNC PyInit_boundary_fill(void); /*proto*/
--PyMODINIT_FUNC PyInit_boundary_fill(void)
--#endif
--{
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  __Pyx_RefNannyDeclarations
--  #if CYTHON_REFNANNY
--  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
--  if (!__Pyx_RefNanny) {
--      PyErr_Clear();
--      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
--      if (!__Pyx_RefNanny)
--          Py_FatalError("failed to import 'refnanny' module");
--  }
--  #endif
--  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_boundary_fill(void)", 0);
--  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #ifdef __Pyx_CyFunction_USED
--  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_FusedFunction_USED
--  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_Generator_USED
--  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  /*--- Library function declarations ---*/
--  /*--- Threads initialization code ---*/
--  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
--  #ifdef WITH_THREAD /* Python build with threading support? */
--  PyEval_InitThreads();
--  #endif
--  #endif
--  /*--- Module creation code ---*/
--  #if PY_MAJOR_VERSION < 3
--  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("boundary_fill"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
--  #else
--  __pyx_m = PyModule_Create(&__pyx_moduledef);
--  #endif
--  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if PY_MAJOR_VERSION >= 3
--  {
--    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_fill")) {
--      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_fill", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--  }
--  #endif
--  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if CYTHON_COMPILING_IN_PYPY
--  Py_INCREF(__pyx_b);
--  #endif
--  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  /*--- Initialize various global constants etc. ---*/
--  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_module_is_main_astropy__convolution__boundary_fill) {
--    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  }
--  /*--- Builtin init code ---*/
--  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Constants init code ---*/
--  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Global init code ---*/
--  /*--- Variable export code ---*/
--  /*--- Function export code ---*/
--  /*--- Type init code ---*/
--  /*--- Type import code ---*/
--  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
--  #if CYTHON_COMPILING_IN_PYPY
--  sizeof(PyTypeObject),
--  #else
--  sizeof(PyHeapTypeObject),
--  #endif
--  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Variable import code ---*/
--  /*--- Function import code ---*/
--  /*--- Execution code ---*/
--
--  /* "astropy/convolution/boundary_fill.pyx":3
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst
-- * from __future__ import division
-- * import numpy as np             # <<<<<<<<<<<<<<
-- * cimport numpy as np
-- * 
-- */
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":6
-- * cimport numpy as np
-- * 
-- * DTYPE = np.float             # <<<<<<<<<<<<<<
-- * ctypedef np.float_t DTYPE_t
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_fill(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g,
-- *                              float fill_value):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":88
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_fill(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g,
-- *                              float fill_value):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":173
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_fill(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g,
-- *                              float fill_value):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_fill.pyx":1
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
-- * from __future__ import division
-- * import numpy as np
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--
--  /* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  if (__pyx_m) {
--    __Pyx_AddTraceback("init astropy.convolution.boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
--    Py_DECREF(__pyx_m); __pyx_m = 0;
--  } else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_fill");
--  }
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  #if PY_MAJOR_VERSION < 3
--  return;
--  #else
--  return __pyx_m;
--  #endif
--}
--
--/* Runtime support code */
--#if CYTHON_REFNANNY
--static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
--    PyObject *m = NULL, *p = NULL;
--    void *r = NULL;
--    m = PyImport_ImportModule((char *)modname);
--    if (!m) goto end;
--    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
--    if (!p) goto end;
--    r = PyLong_AsVoidPtr(p);
--end:
--    Py_XDECREF(p);
--    Py_XDECREF(m);
--    return (__Pyx_RefNannyAPIStruct *)r;
--}
--#endif /* CYTHON_REFNANNY */
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
--    PyObject *result;
--    result = PyObject_GetAttr(dict, name);
--    if (!result) {
--        if (dict != __pyx_b) {
--            PyErr_Clear();
--            result = PyObject_GetAttr(__pyx_b, name);
--        }
--        if (!result) {
--            PyErr_SetObject(PyExc_NameError, name);
--        }
--    }
--    return result;
--}
--
--static void __Pyx_RaiseArgtupleInvalid(
--    const char* func_name,
--    int exact,
--    Py_ssize_t num_min,
--    Py_ssize_t num_max,
--    Py_ssize_t num_found)
--{
--    Py_ssize_t num_expected;
--    const char *more_or_less;
--    if (num_found < num_min) {
--        num_expected = num_min;
--        more_or_less = "at least";
--    } else {
--        num_expected = num_max;
--        more_or_less = "at most";
--    }
--    if (exact) {
--        more_or_less = "exactly";
--    }
--    PyErr_Format(PyExc_TypeError,
--                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
--                 func_name, more_or_less, num_expected,
--                 (num_expected == 1) ? "" : "s", num_found);
--}
--
--static void __Pyx_RaiseDoubleKeywordsError(
--    const char* func_name,
--    PyObject* kw_name)
--{
--    PyErr_Format(PyExc_TypeError,
--        #if PY_MAJOR_VERSION >= 3
--        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
--        #else
--        "%s() got multiple values for keyword argument '%s'", func_name,
--        PyString_AsString(kw_name));
--        #endif
--}
--
--static int __Pyx_ParseOptionalKeywords(
--    PyObject *kwds,
--    PyObject **argnames[],
--    PyObject *kwds2,
--    PyObject *values[],
--    Py_ssize_t num_pos_args,
--    const char* function_name)
--{
--    PyObject *key = 0, *value = 0;
--    Py_ssize_t pos = 0;
--    PyObject*** name;
--    PyObject*** first_kw_arg = argnames + num_pos_args;
--    while (PyDict_Next(kwds, &pos, &key, &value)) {
--        name = first_kw_arg;
--        while (*name && (**name != key)) name++;
--        if (*name) {
--            values[name-argnames] = value;
--            continue;
--        }
--        name = first_kw_arg;
--        #if PY_MAJOR_VERSION < 3
--        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
--            while (*name) {
--                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
--                        && _PyString_Eq(**name, key)) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    if ((**argname == key) || (
--                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
--                             && _PyString_Eq(**argname, key))) {
--                        goto arg_passed_twice;
--                    }
--                    argname++;
--                }
--            }
--        } else
--        #endif
--        if (likely(PyUnicode_Check(key))) {
--            while (*name) {
--                int cmp = (**name == key) ? 0 :
--                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
--                #endif
--                    PyUnicode_Compare(**name, key);
--                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                if (cmp == 0) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    int cmp = (**argname == key) ? 0 :
--                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
--                    #endif
--                        PyUnicode_Compare(**argname, key);
--                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                    if (cmp == 0) goto arg_passed_twice;
--                    argname++;
--                }
--            }
--        } else
--            goto invalid_keyword_type;
--        if (kwds2) {
--            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
--        } else {
--            goto invalid_keyword;
--        }
--    }
--    return 0;
--arg_passed_twice:
--    __Pyx_RaiseDoubleKeywordsError(function_name, key);
--    goto bad;
--invalid_keyword_type:
--    PyErr_Format(PyExc_TypeError,
--        "%s() keywords must be strings", function_name);
--    goto bad;
--invalid_keyword:
--    PyErr_Format(PyExc_TypeError,
--    #if PY_MAJOR_VERSION < 3
--        "%s() got an unexpected keyword argument '%s'",
--        function_name, PyString_AsString(key));
--    #else
--        "%s() got an unexpected keyword argument '%U'",
--        function_name, key);
--    #endif
--bad:
--    return -1;
--}
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact)
--{
--    if (!type) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (none_allowed && obj == Py_None) return 1;
--    else if (exact) {
--        if (Py_TYPE(obj) == type) return 1;
--    }
--    else {
--        if (PyObject_TypeCheck(obj, type)) return 1;
--    }
--    PyErr_Format(PyExc_TypeError,
--        "Argument '%s' has incorrect type (expected %s, got %s)",
--        name, type->tp_name, Py_TYPE(obj)->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_IsLittleEndian(void) {
--  unsigned int n = 1;
--  return *(unsigned char*)(&n) != 0;
--}
--static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
--                              __Pyx_BufFmt_StackElem* stack,
--                              __Pyx_TypeInfo* type) {
--  stack[0].field = &ctx->root;
--  stack[0].parent_offset = 0;
--  ctx->root.type = type;
--  ctx->root.name = "buffer dtype";
--  ctx->root.offset = 0;
--  ctx->head = stack;
--  ctx->head->field = &ctx->root;
--  ctx->fmt_offset = 0;
--  ctx->head->parent_offset = 0;
--  ctx->new_packmode = '@';
--  ctx->enc_packmode = '@';
--  ctx->new_count = 1;
--  ctx->enc_count = 0;
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  ctx->is_valid_array = 0;
--  ctx->struct_alignment = 0;
--  while (type->typegroup == 'S') {
--    ++ctx->head;
--    ctx->head->field = type->fields;
--    ctx->head->parent_offset = 0;
--    type = type->fields->type;
--  }
--}
--static int __Pyx_BufFmt_ParseNumber(const char** ts) {
--    int count;
--    const char* t = *ts;
--    if (*t < '0' || *t > '9') {
--      return -1;
--    } else {
--        count = *t++ - '0';
--        while (*t >= '0' && *t < '9') {
--            count *= 10;
--            count += *t++ - '0';
--        }
--    }
--    *ts = t;
--    return count;
--}
--static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
--    int number = __Pyx_BufFmt_ParseNumber(ts);
--    if (number == -1) /* First char was not a digit */
--        PyErr_Format(PyExc_ValueError,\
--                     "Does not understand character buffer dtype format string ('%c')", **ts);
--    return number;
--}
--static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
--  PyErr_Format(PyExc_ValueError,
--               "Unexpected format string character: '%c'", ch);
--}
--static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': return "'char'";
--    case 'b': return "'signed char'";
--    case 'B': return "'unsigned char'";
--    case 'h': return "'short'";
--    case 'H': return "'unsigned short'";
--    case 'i': return "'int'";
--    case 'I': return "'unsigned int'";
--    case 'l': return "'long'";
--    case 'L': return "'unsigned long'";
--    case 'q': return "'long long'";
--    case 'Q': return "'unsigned long long'";
--    case 'f': return (is_complex ? "'complex float'" : "'float'");
--    case 'd': return (is_complex ? "'complex double'" : "'double'");
--    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
--    case 'T': return "a struct";
--    case 'O': return "Python object";
--    case 'P': return "a pointer";
--    case 's': case 'p': return "a string";
--    case 0: return "end";
--    default: return "unparseable format string";
--  }
--}
--static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return 2;
--    case 'i': case 'I': case 'l': case 'L': return 4;
--    case 'q': case 'Q': return 8;
--    case 'f': return (is_complex ? 8 : 4);
--    case 'd': return (is_complex ? 16 : 8);
--    case 'g': {
--      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
--      return 0;
--    }
--    case 'O': case 'P': return sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(short);
--    case 'i': case 'I': return sizeof(int);
--    case 'l': case 'L': return sizeof(long);
--    #ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
--    #endif
--    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
--    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
--    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
--    case 'O': case 'P': return sizeof(void*);
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--typedef struct { char c; short x; } __Pyx_st_short;
--typedef struct { char c; int x; } __Pyx_st_int;
--typedef struct { char c; long x; } __Pyx_st_long;
--typedef struct { char c; float x; } __Pyx_st_float;
--typedef struct { char c; double x; } __Pyx_st_double;
--typedef struct { char c; long double x; } __Pyx_st_longdouble;
--typedef struct { char c; void *x; } __Pyx_st_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--/* These are for computing the padding at the end of the struct to align
--   on the first member of the struct. This will probably the same as above,
--   but we don't have any guarantees.
-- */
--typedef struct { short x; char c; } __Pyx_pad_short;
--typedef struct { int x; char c; } __Pyx_pad_int;
--typedef struct { long x; char c; } __Pyx_pad_long;
--typedef struct { float x; char c; } __Pyx_pad_float;
--typedef struct { double x; char c; } __Pyx_pad_double;
--typedef struct { long double x; char c; } __Pyx_pad_longdouble;
--typedef struct { void *x; char c; } __Pyx_pad_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
--  switch (ch) {
--    case 'c':
--        return 'H';
--    case 'b': case 'h': case 'i':
--    case 'l': case 'q': case 's': case 'p':
--        return 'I';
--    case 'B': case 'H': case 'I': case 'L': case 'Q':
--        return 'U';
--    case 'f': case 'd': case 'g':
--        return (is_complex ? 'C' : 'R');
--    case 'O':
--        return 'O';
--    case 'P':
--        return 'P';
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
--  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
--    const char* expected;
--    const char* quote;
--    if (ctx->head == NULL) {
--      expected = "end";
--      quote = "";
--    } else {
--      expected = ctx->head->field->type->name;
--      quote = "'";
--    }
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected %s%s%s but got %s",
--                 quote, expected, quote,
--                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
--  } else {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_StructField* parent = (ctx->head - 1)->field;
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
--                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
--                 parent->type->name, field->name);
--  }
--}
--static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
--  char group;
--  size_t size, offset, arraysize = 1;
--  if (ctx->enc_type == 0) return 0;
--  if (ctx->head->field->type->arraysize[0]) {
--    int i, ndim = 0;
--    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
--        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
--        ndim = 1;
--        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
--            PyErr_Format(PyExc_ValueError,
--                         "Expected a dimension of size %zu, got %zu",
--                         ctx->head->field->type->arraysize[0], ctx->enc_count);
--            return -1;
--        }
--    }
--    if (!ctx->is_valid_array) {
--      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
--                   ctx->head->field->type->ndim, ndim);
--      return -1;
--    }
--    for (i = 0; i < ctx->head->field->type->ndim; i++) {
--      arraysize *= ctx->head->field->type->arraysize[i];
--    }
--    ctx->is_valid_array = 0;
--    ctx->enc_count = 1;
--  }
--  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
--  do {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_TypeInfo* type = field->type;
--    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
--      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
--    } else {
--      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
--    }
--    if (ctx->enc_packmode == '@') {
--      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
--      size_t align_mod_offset;
--      if (align_at == 0) return -1;
--      align_mod_offset = ctx->fmt_offset % align_at;
--      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
--      if (ctx->struct_alignment == 0)
--          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
--                                                                 ctx->is_complex);
--    }
--    if (type->size != size || type->typegroup != group) {
--      if (type->typegroup == 'C' && type->fields != NULL) {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        ++ctx->head;
--        ctx->head->field = type->fields;
--        ctx->head->parent_offset = parent_offset;
--        continue;
--      }
--      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
--      } else {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--      }
--    }
--    offset = ctx->head->parent_offset + field->offset;
--    if (ctx->fmt_offset != offset) {
--      PyErr_Format(PyExc_ValueError,
--                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
--                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
--      return -1;
--    }
--    ctx->fmt_offset += size;
--    if (arraysize)
--      ctx->fmt_offset += (arraysize - 1) * size;
--    --ctx->enc_count; /* Consume from buffer string */
--    while (1) {
--      if (field == &ctx->root) {
--        ctx->head = NULL;
--        if (ctx->enc_count != 0) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--        }
--        break; /* breaks both loops as ctx->enc_count == 0 */
--      }
--      ctx->head->field = ++field;
--      if (field->type == NULL) {
--        --ctx->head;
--        field = ctx->head->field;
--        continue;
--      } else if (field->type->typegroup == 'S') {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        if (field->type->fields->type == NULL) continue; /* empty struct */
--        field = field->type->fields;
--        ++ctx->head;
--        ctx->head->field = field;
--        ctx->head->parent_offset = parent_offset;
--        break;
--      } else {
--        break;
--      }
--    }
--  } while (ctx->enc_count);
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  return 0;
--}
--static CYTHON_INLINE PyObject *
--__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
--{
--    const char *ts = *tsp;
--    int i = 0, number;
--    int ndim = ctx->head->field->type->ndim;
--;
--    ++ts;
--    if (ctx->new_count != 1) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Cannot handle repeated arrays in format string");
--        return NULL;
--    }
--    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--    while (*ts && *ts != ')') {
--        if (isspace(*ts))
--            continue;
--        number = __Pyx_BufFmt_ExpectNumber(&ts);
--        if (number == -1) return NULL;
--        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
--            return PyErr_Format(PyExc_ValueError,
--                        "Expected a dimension of size %zu, got %d",
--                        ctx->head->field->type->arraysize[i], number);
--        if (*ts != ',' && *ts != ')')
--            return PyErr_Format(PyExc_ValueError,
--                                "Expected a comma in format string, got '%c'", *ts);
--        if (*ts == ',') ts++;
--        i++;
--    }
--    if (i != ndim)
--        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
--                            ctx->head->field->type->ndim, i);
--    if (!*ts) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Unexpected end of format string, expected ')'");
--        return NULL;
--    }
--    ctx->is_valid_array = 1;
--    ctx->new_count = 1;
--    *tsp = ++ts;
--    return Py_None;
--}
--static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
--  int got_Z = 0;
--  while (1) {
--    switch(*ts) {
--      case 0:
--        if (ctx->enc_type != 0 && ctx->head == NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        if (ctx->head != NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--                return ts;
--      case ' ':
--      case 10:
--      case 13:
--        ++ts;
--        break;
--      case '<':
--        if (!__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '>':
--      case '!':
--        if (__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '=':
--      case '@':
--      case '^':
--        ctx->new_packmode = *ts++;
--        break;
--      case 'T': /* substruct */
--        {
--          const char* ts_after_sub;
--          size_t i, struct_count = ctx->new_count;
--          size_t struct_alignment = ctx->struct_alignment;
--          ctx->new_count = 1;
--          ++ts;
--          if (*ts != '{') {
--            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
--            return NULL;
--          }
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          ctx->enc_count = 0;
--          ctx->struct_alignment = 0;
--          ++ts;
--          ts_after_sub = ts;
--          for (i = 0; i != struct_count; ++i) {
--            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
--            if (!ts_after_sub) return NULL;
--          }
--          ts = ts_after_sub;
--          if (struct_alignment) ctx->struct_alignment = struct_alignment;
--        }
--        break;
--      case '}': /* end of substruct; either repeat or move on */
--        {
--          size_t alignment = ctx->struct_alignment;
--          ++ts;
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          if (alignment && ctx->fmt_offset % alignment) {
--            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
--          }
--        }
--        return ts;
--      case 'x':
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        ctx->fmt_offset += ctx->new_count;
--        ctx->new_count = 1;
--        ctx->enc_count = 0;
--        ctx->enc_type = 0;
--        ctx->enc_packmode = ctx->new_packmode;
--        ++ts;
--        break;
--      case 'Z':
--        got_Z = 1;
--        ++ts;
--        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
--          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
--          return NULL;
--        }        /* fall through */
--      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
--      case 'l': case 'L': case 'q': case 'Q':
--      case 'f': case 'd': case 'g':
--      case 'O': case 's': case 'p':
--        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
--            ctx->enc_packmode == ctx->new_packmode) {
--          ctx->enc_count += ctx->new_count;
--        } else {
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_count = ctx->new_count;
--          ctx->enc_packmode = ctx->new_packmode;
--          ctx->enc_type = *ts;
--          ctx->is_complex = got_Z;
--        }
--        ++ts;
--        ctx->new_count = 1;
--        got_Z = 0;
--        break;
--      case ':':
--        ++ts;
--        while(*ts != ':') ++ts;
--        ++ts;
--        break;
--      case '(':
--        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
--        break;
--      default:
--        {
--          int number = __Pyx_BufFmt_ExpectNumber(&ts);
--          if (number == -1) return NULL;
--          ctx->new_count = (size_t)number;
--        }
--    }
--  }
--}
--static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
--  buf->buf = NULL;
--  buf->obj = NULL;
--  buf->strides = __Pyx_zeros;
--  buf->shape = __Pyx_zeros;
--  buf->suboffsets = __Pyx_minusones;
--}
--static CYTHON_INLINE int __Pyx_GetBufferAndValidate(
--        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
--        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
--{
--  if (obj == Py_None || obj == NULL) {
--    __Pyx_ZeroBuffer(buf);
--    return 0;
--  }
--  buf->buf = NULL;
--  if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail;
--  if (buf->ndim != nd) {
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer has wrong number of dimensions (expected %d, got %d)",
--                 nd, buf->ndim);
--    goto fail;
--  }
--  if (!cast) {
--    __Pyx_BufFmt_Context ctx;
--    __Pyx_BufFmt_Init(&ctx, stack, dtype);
--    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
--  }
--  if ((unsigned)buf->itemsize != dtype->size) {
--    PyErr_Format(PyExc_ValueError,
--      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
--      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
--      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
--    goto fail;
--  }
--  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
--  return 0;
--fail:;
--  __Pyx_ZeroBuffer(buf);
--  return -1;
--}
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
--  if (info->buf == NULL) return;
--  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
--  __Pyx_ReleaseBuffer(info);
--}
--
--static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
--    long r = a % b;
--    r += ((r != 0) & ((r ^ b) < 0)) * b;
--    return r;
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyObject *tmp_type, *tmp_value, *tmp_tb;
--    PyThreadState *tstate = PyThreadState_GET();
--    tmp_type = tstate->curexc_type;
--    tmp_value = tstate->curexc_value;
--    tmp_tb = tstate->curexc_traceback;
--    tstate->curexc_type = type;
--    tstate->curexc_value = value;
--    tstate->curexc_traceback = tb;
--    Py_XDECREF(tmp_type);
--    Py_XDECREF(tmp_value);
--    Py_XDECREF(tmp_tb);
--#else
--    PyErr_Restore(type, value, tb);
--#endif
--}
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    *type = tstate->curexc_type;
--    *value = tstate->curexc_value;
--    *tb = tstate->curexc_traceback;
--    tstate->curexc_type = 0;
--    tstate->curexc_value = 0;
--    tstate->curexc_traceback = 0;
--#else
--    PyErr_Fetch(type, value, tb);
--#endif
--}
--
--#if PY_MAJOR_VERSION < 3
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
--                        CYTHON_UNUSED PyObject *cause) {
--    Py_XINCREF(type);
--    if (!value || value == Py_None)
--        value = NULL;
--    else
--        Py_INCREF(value);
--    if (!tb || tb == Py_None)
--        tb = NULL;
--    else {
--        Py_INCREF(tb);
--        if (!PyTraceBack_Check(tb)) {
--            PyErr_SetString(PyExc_TypeError,
--                "raise: arg 3 must be a traceback or None");
--            goto raise_error;
--        }
--    }
--    #if PY_VERSION_HEX < 0x02050000
--    if (PyClass_Check(type)) {
--    #else
--    if (PyType_Check(type)) {
--    #endif
--#if CYTHON_COMPILING_IN_PYPY
--        if (!value) {
--            Py_INCREF(Py_None);
--            value = Py_None;
--        }
--#endif
--        PyErr_NormalizeException(&type, &value, &tb);
--    } else {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto raise_error;
--        }
--        value = type;
--        #if PY_VERSION_HEX < 0x02050000
--            if (PyInstance_Check(type)) {
--                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
--                Py_INCREF(type);
--            }
--            else {
--                type = 0;
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception must be an old-style class or instance");
--                goto raise_error;
--            }
--        #else
--            type = (PyObject*) Py_TYPE(type);
--            Py_INCREF(type);
--            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception class must be a subclass of BaseException");
--                goto raise_error;
--            }
--        #endif
--    }
--    __Pyx_ErrRestore(type, value, tb);
--    return;
--raise_error:
--    Py_XDECREF(value);
--    Py_XDECREF(type);
--    Py_XDECREF(tb);
--    return;
--}
--#else /* Python 3+ */
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
--    PyObject* owned_instance = NULL;
--    if (tb == Py_None) {
--        tb = 0;
--    } else if (tb && !PyTraceBack_Check(tb)) {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: arg 3 must be a traceback or None");
--        goto bad;
--    }
--    if (value == Py_None)
--        value = 0;
--    if (PyExceptionInstance_Check(type)) {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto bad;
--        }
--        value = type;
--        type = (PyObject*) Py_TYPE(value);
--    } else if (PyExceptionClass_Check(type)) {
--        PyObject *args;
--        if (!value)
--            args = PyTuple_New(0);
--        else if (PyTuple_Check(value)) {
--            Py_INCREF(value);
--            args = value;
--        }
--        else
--            args = PyTuple_Pack(1, value);
--        if (!args)
--            goto bad;
--        owned_instance = PyEval_CallObject(type, args);
--        Py_DECREF(args);
--        if (!owned_instance)
--            goto bad;
--        value = owned_instance;
--        if (!PyExceptionInstance_Check(value)) {
--            PyErr_Format(PyExc_TypeError,
--                         "calling %R should have returned an instance of "
--                         "BaseException, not %R",
--                         type, Py_TYPE(value));
--            goto bad;
--        }
--    } else {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: exception class must be a subclass of BaseException");
--        goto bad;
--    }
--    if (cause && cause != Py_None) {
--        PyObject *fixed_cause;
--        if (PyExceptionClass_Check(cause)) {
--            fixed_cause = PyObject_CallObject(cause, NULL);
--            if (fixed_cause == NULL)
--                goto bad;
--        }
--        else if (PyExceptionInstance_Check(cause)) {
--            fixed_cause = cause;
--            Py_INCREF(fixed_cause);
--        }
--        else {
--            PyErr_SetString(PyExc_TypeError,
--                            "exception causes must derive from "
--                            "BaseException");
--            goto bad;
--        }
--        PyException_SetCause(value, fixed_cause);
--    }
--    PyErr_SetObject(type, value);
--    if (tb) {
--        PyThreadState *tstate = PyThreadState_GET();
--        PyObject* tmp_tb = tstate->curexc_traceback;
--        if (tb != tmp_tb) {
--            Py_INCREF(tb);
--            tstate->curexc_traceback = tb;
--            Py_XDECREF(tmp_tb);
--        }
--    }
--bad:
--    Py_XDECREF(owned_instance);
--    return;
--}
--#endif
--
--static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
--    long q = a / b;
--    long r = a - q*b;
--    q -= ((r != 0) & ((r ^ b) < 0));
--    return q;
--}
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
--    if (unlikely(!type)) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (likely(PyObject_TypeCheck(obj, type)))
--        return 1;
--    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
--                 Py_TYPE(obj)->tp_name, type->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
--    PyErr_Format(PyExc_ValueError,
--                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
--    PyErr_Format(PyExc_ValueError,
--                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
--                 index, (index == 1) ? "" : "s");
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--}
--
--static CYTHON_INLINE int __Pyx_IterFinish(void) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    PyObject* exc_type = tstate->curexc_type;
--    if (unlikely(exc_type)) {
--        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
--            PyObject *exc_value, *exc_tb;
--            exc_value = tstate->curexc_value;
--            exc_tb = tstate->curexc_traceback;
--            tstate->curexc_type = 0;
--            tstate->curexc_value = 0;
--            tstate->curexc_traceback = 0;
--            Py_DECREF(exc_type);
--            Py_XDECREF(exc_value);
--            Py_XDECREF(exc_tb);
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#else
--    if (unlikely(PyErr_Occurred())) {
--        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
--            PyErr_Clear();
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#endif
--}
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
--    if (unlikely(retval)) {
--        Py_DECREF(retval);
--        __Pyx_RaiseTooManyValuesError(expected);
--        return -1;
--    } else {
--        return __Pyx_IterFinish();
--    }
--    return 0;
--}
--
--#if PY_MAJOR_VERSION < 3
--static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
--    CYTHON_UNUSED PyObject *getbuffer_cobj;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (getbuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                             "__pyx_getbuffer"))) {
--        getbufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (getbufferproc) PyCapsule_GetPointer(getbuffer_cobj, "getbuffer(obj, view, flags)");
--      #else
--        func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj);
--      #endif
--        Py_DECREF(getbuffer_cobj);
--        if (!func)
--            goto fail;
--        return func(obj, view, flags);
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    return -1;
--}
--static void __Pyx_ReleaseBuffer(Py_buffer *view) {
--    PyObject *obj = view->obj;
--    CYTHON_UNUSED PyObject *releasebuffer_cobj;
--    if (!obj) return;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) {
--        PyBuffer_Release(view);
--        return;
--    }
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; }
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (releasebuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                                      "__pyx_releasebuffer"))) {
--        releasebufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (releasebufferproc) PyCapsule_GetPointer(releasebuffer_cobj, "releasebuffer(obj, view)");
--      #else
--        func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj);
--      #endif
--        Py_DECREF(releasebuffer_cobj);
--        if (!func)
--            goto fail;
--        func(obj, view);
--        return;
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    goto nofail;
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    PyErr_WriteUnraisable(obj);
--nofail:
--    Py_DECREF(obj);
--    view->obj = NULL;
--}
--#endif /*  PY_MAJOR_VERSION < 3 */
--
--
--    static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
--    PyObject *empty_list = 0;
--    PyObject *module = 0;
--    PyObject *global_dict = 0;
--    PyObject *empty_dict = 0;
--    PyObject *list;
--    #if PY_VERSION_HEX < 0x03030000
--    PyObject *py_import = 0;
--    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
--    if (!py_import)
--        goto bad;
--    #endif
--    if (from_list)
--        list = from_list;
--    else {
--        empty_list = PyList_New(0);
--        if (!empty_list)
--            goto bad;
--        list = empty_list;
--    }
--    global_dict = PyModule_GetDict(__pyx_m);
--    if (!global_dict)
--        goto bad;
--    empty_dict = PyDict_New();
--    if (!empty_dict)
--        goto bad;
--    #if PY_VERSION_HEX >= 0x02050000
--    {
--        #if PY_MAJOR_VERSION >= 3
--        if (level == -1) {
--            if (strchr(__Pyx_MODULE_NAME, '.')) {
--                #if PY_VERSION_HEX < 0x03030000
--                PyObject *py_level = PyInt_FromLong(1);
--                if (!py_level)
--                    goto bad;
--                module = PyObject_CallFunctionObjArgs(py_import,
--                    name, global_dict, empty_dict, list, py_level, NULL);
--                Py_DECREF(py_level);
--                #else
--                module = PyImport_ImportModuleLevelObject(
--                    name, global_dict, empty_dict, list, 1);
--                #endif
--                if (!module) {
--                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
--                        goto bad;
--                    PyErr_Clear();
--                }
--            }
--            level = 0; /* try absolute import on failure */
--        }
--        #endif
--        if (!module) {
--            #if PY_VERSION_HEX < 0x03030000
--            PyObject *py_level = PyInt_FromLong(level);
--            if (!py_level)
--                goto bad;
--            module = PyObject_CallFunctionObjArgs(py_import,
--                name, global_dict, empty_dict, list, py_level, NULL);
--            Py_DECREF(py_level);
--            #else
--            module = PyImport_ImportModuleLevelObject(
--                name, global_dict, empty_dict, list, level);
--            #endif
--        }
--    }
--    #else
--    if (level>0) {
--        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
--        goto bad;
--    }
--    module = PyObject_CallFunctionObjArgs(py_import,
--        name, global_dict, empty_dict, list, NULL);
--    #endif
--bad:
--    #if PY_VERSION_HEX < 0x03030000
--    Py_XDECREF(py_import);
--    #endif
--    Py_XDECREF(empty_list);
--    Py_XDECREF(empty_dict);
--    return module;
--}
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return ::std::complex< float >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return x + y*(__pyx_t_float_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      __pyx_t_float_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        float denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrtf(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypotf(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--            __pyx_t_float_complex z;
--            float r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    float denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(a, a);
--                    case 3:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, a);
--                    case 4:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_absf(a);
--                theta = atan2f(a.imag, a.real);
--            }
--            lnr = logf(r);
--            z_r = expf(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cosf(z_theta);
--            z.imag = z_r * sinf(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return ::std::complex< double >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return x + y*(__pyx_t_double_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      __pyx_t_double_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        double denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrt(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypot(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--            __pyx_t_double_complex z;
--            double r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    double denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(a, a);
--                    case 3:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, a);
--                    case 4:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_abs(a);
--                theta = atan2(a.imag, a.real);
--            }
--            lnr = log(r);
--            z_r = exp(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cos(z_theta);
--            z.imag = z_r * sin(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
--    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned char" :
--                    "value too large to convert to unsigned char");
--            }
--            return (unsigned char)-1;
--        }
--        return (unsigned char)val;
--    }
--    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
--    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned short" :
--                    "value too large to convert to unsigned short");
--            }
--            return (unsigned short)-1;
--        }
--        return (unsigned short)val;
--    }
--    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
--    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned int" :
--                    "value too large to convert to unsigned int");
--            }
--            return (unsigned int)-1;
--        }
--        return (unsigned int)val;
--    }
--    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
--    const char neg_one = (char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to char" :
--                    "value too large to convert to char");
--            }
--            return (char)-1;
--        }
--        return (char)val;
--    }
--    return (char)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
--    const short neg_one = (short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to short" :
--                    "value too large to convert to short");
--            }
--            return (short)-1;
--        }
--        return (short)val;
--    }
--    return (short)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
--    const signed char neg_one = (signed char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed char" :
--                    "value too large to convert to signed char");
--            }
--            return (signed char)-1;
--        }
--        return (signed char)val;
--    }
--    return (signed char)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
--    const signed short neg_one = (signed short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed short" :
--                    "value too large to convert to signed short");
--            }
--            return (signed short)-1;
--        }
--        return (signed short)val;
--    }
--    return (signed short)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
--    const signed int neg_one = (signed int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed int" :
--                    "value too large to convert to signed int");
--            }
--            return (signed int)-1;
--        }
--        return (signed int)val;
--    }
--    return (signed int)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
--    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned long");
--            return (unsigned long)-1;
--        }
--        return (unsigned long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned long");
--                return (unsigned long)-1;
--            }
--            return (unsigned long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (unsigned long)PyLong_AsLong(x);
--        }
--    } else {
--        unsigned long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned long)-1;
--        val = __Pyx_PyInt_AsUnsignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
--    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned PY_LONG_LONG");
--            return (unsigned PY_LONG_LONG)-1;
--        }
--        return (unsigned PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned PY_LONG_LONG");
--                return (unsigned PY_LONG_LONG)-1;
--            }
--            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        unsigned PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
--    const long neg_one = (long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to long");
--            return (long)-1;
--        }
--        return (long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to long");
--                return (long)-1;
--            }
--            return (long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (long)PyLong_AsLong(x);
--        }
--    } else {
--        long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (long)-1;
--        val = __Pyx_PyInt_AsLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
--    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to PY_LONG_LONG");
--            return (PY_LONG_LONG)-1;
--        }
--        return (PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to PY_LONG_LONG");
--                return (PY_LONG_LONG)-1;
--            }
--            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
--    const signed long neg_one = (signed long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed long");
--            return (signed long)-1;
--        }
--        return (signed long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed long");
--                return (signed long)-1;
--            }
--            return (signed long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (signed long)PyLong_AsLong(x);
--        }
--    } else {
--        signed long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed long)-1;
--        val = __Pyx_PyInt_AsSignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
--    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed PY_LONG_LONG");
--            return (signed PY_LONG_LONG)-1;
--        }
--        return (signed PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed PY_LONG_LONG");
--                return (signed PY_LONG_LONG)-1;
--            }
--            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        signed PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsSignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static int __Pyx_check_binary_version(void) {
--    char ctversion[4], rtversion[4];
--    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
--    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
--    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
--        char message[200];
--        PyOS_snprintf(message, sizeof(message),
--                      "compiletime version %s of module '%.100s' "
--                      "does not match runtime version %s",
--                      ctversion, __Pyx_MODULE_NAME, rtversion);
--        #if PY_VERSION_HEX < 0x02050000
--        return PyErr_Warn(NULL, message);
--        #else
--        return PyErr_WarnEx(NULL, message, 1);
--        #endif
--    }
--    return 0;
--}
--
--#ifndef __PYX_HAVE_RT_ImportModule
--#define __PYX_HAVE_RT_ImportModule
--static PyObject *__Pyx_ImportModule(const char *name) {
--    PyObject *py_name = 0;
--    PyObject *py_module = 0;
--    py_name = __Pyx_PyIdentifier_FromString(name);
--    if (!py_name)
--        goto bad;
--    py_module = PyImport_Import(py_name);
--    Py_DECREF(py_name);
--    return py_module;
--bad:
--    Py_XDECREF(py_name);
--    return 0;
--}
--#endif
--
--#ifndef __PYX_HAVE_RT_ImportType
--#define __PYX_HAVE_RT_ImportType
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
--    size_t size, int strict)
--{
--    PyObject *py_module = 0;
--    PyObject *result = 0;
--    PyObject *py_name = 0;
--    char warning[200];
--    Py_ssize_t basicsize;
--#ifdef Py_LIMITED_API
--    PyObject *py_basicsize;
--#endif
--    py_module = __Pyx_ImportModule(module_name);
--    if (!py_module)
--        goto bad;
--    py_name = __Pyx_PyIdentifier_FromString(class_name);
--    if (!py_name)
--        goto bad;
--    result = PyObject_GetAttr(py_module, py_name);
--    Py_DECREF(py_name);
--    py_name = 0;
--    Py_DECREF(py_module);
--    py_module = 0;
--    if (!result)
--        goto bad;
--    if (!PyType_Check(result)) {
--        PyErr_Format(PyExc_TypeError,
--            "%s.%s is not a type object",
--            module_name, class_name);
--        goto bad;
--    }
--#ifndef Py_LIMITED_API
--    basicsize = ((PyTypeObject *)result)->tp_basicsize;
--#else
--    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
--    if (!py_basicsize)
--        goto bad;
--    basicsize = PyLong_AsSsize_t(py_basicsize);
--    Py_DECREF(py_basicsize);
--    py_basicsize = 0;
--    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
--        goto bad;
--#endif
--    if (!strict && (size_t)basicsize > size) {
--        PyOS_snprintf(warning, sizeof(warning),
--            "%s.%s size changed, may indicate binary incompatibility",
--            module_name, class_name);
--        #if PY_VERSION_HEX < 0x02050000
--        if (PyErr_Warn(NULL, warning) < 0) goto bad;
--        #else
--        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
--        #endif
--    }
--    else if ((size_t)basicsize != size) {
--        PyErr_Format(PyExc_ValueError,
--            "%s.%s has the wrong size, try recompiling",
--            module_name, class_name);
--        goto bad;
--    }
--    return (PyTypeObject *)result;
--bad:
--    Py_XDECREF(py_module);
--    Py_XDECREF(result);
--    return NULL;
--}
--#endif
--
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
--    int start = 0, mid = 0, end = count - 1;
--    if (end >= 0 && code_line > entries[end].code_line) {
--        return count;
--    }
--    while (start < end) {
--        mid = (start + end) / 2;
--        if (code_line < entries[mid].code_line) {
--            end = mid;
--        } else if (code_line > entries[mid].code_line) {
--             start = mid + 1;
--        } else {
--            return mid;
--        }
--    }
--    if (code_line <= entries[mid].code_line) {
--        return mid;
--    } else {
--        return mid + 1;
--    }
--}
--static PyCodeObject *__pyx_find_code_object(int code_line) {
--    PyCodeObject* code_object;
--    int pos;
--    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
--        return NULL;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
--        return NULL;
--    }
--    code_object = __pyx_code_cache.entries[pos].code_object;
--    Py_INCREF(code_object);
--    return code_object;
--}
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
--    int pos, i;
--    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
--    if (unlikely(!code_line)) {
--        return;
--    }
--    if (unlikely(!entries)) {
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (likely(entries)) {
--            __pyx_code_cache.entries = entries;
--            __pyx_code_cache.max_count = 64;
--            __pyx_code_cache.count = 1;
--            entries[0].code_line = code_line;
--            entries[0].code_object = code_object;
--            Py_INCREF(code_object);
--        }
--        return;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
--        PyCodeObject* tmp = entries[pos].code_object;
--        entries[pos].code_object = code_object;
--        Py_DECREF(tmp);
--        return;
--    }
--    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
--        int new_max = __pyx_code_cache.max_count + 64;
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
--            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (unlikely(!entries)) {
--            return;
--        }
--        __pyx_code_cache.entries = entries;
--        __pyx_code_cache.max_count = new_max;
--    }
--    for (i=__pyx_code_cache.count; i>pos; i--) {
--        entries[i] = entries[i-1];
--    }
--    entries[pos].code_line = code_line;
--    entries[pos].code_object = code_object;
--    __pyx_code_cache.count++;
--    Py_INCREF(code_object);
--}
--
--#include "compile.h"
--#include "frameobject.h"
--#include "traceback.h"
--static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
--            const char *funcname, int c_line,
--            int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_srcfile = 0;
--    PyObject *py_funcname = 0;
--    #if PY_MAJOR_VERSION < 3
--    py_srcfile = PyString_FromString(filename);
--    #else
--    py_srcfile = PyUnicode_FromString(filename);
--    #endif
--    if (!py_srcfile) goto bad;
--    if (c_line) {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #else
--        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #endif
--    }
--    else {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromString(funcname);
--        #else
--        py_funcname = PyUnicode_FromString(funcname);
--        #endif
--    }
--    if (!py_funcname) goto bad;
--    py_code = __Pyx_PyCode_New(
--        0,            /*int argcount,*/
--        0,            /*int kwonlyargcount,*/
--        0,            /*int nlocals,*/
--        0,            /*int stacksize,*/
--        0,            /*int flags,*/
--        __pyx_empty_bytes, /*PyObject *code,*/
--        __pyx_empty_tuple, /*PyObject *consts,*/
--        __pyx_empty_tuple, /*PyObject *names,*/
--        __pyx_empty_tuple, /*PyObject *varnames,*/
--        __pyx_empty_tuple, /*PyObject *freevars,*/
--        __pyx_empty_tuple, /*PyObject *cellvars,*/
--        py_srcfile,   /*PyObject *filename,*/
--        py_funcname,  /*PyObject *name,*/
--        py_line,      /*int firstlineno,*/
--        __pyx_empty_bytes  /*PyObject *lnotab*/
--    );
--    Py_DECREF(py_srcfile);
--    Py_DECREF(py_funcname);
--    return py_code;
--bad:
--    Py_XDECREF(py_srcfile);
--    Py_XDECREF(py_funcname);
--    return NULL;
--}
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_globals = 0;
--    PyFrameObject *py_frame = 0;
--    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
--    if (!py_code) {
--        py_code = __Pyx_CreateCodeObjectForTraceback(
--            funcname, c_line, py_line, filename);
--        if (!py_code) goto bad;
--        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
--    }
--    py_globals = PyModule_GetDict(__pyx_m);
--    if (!py_globals) goto bad;
--    py_frame = PyFrame_New(
--        PyThreadState_GET(), /*PyThreadState *tstate,*/
--        py_code,             /*PyCodeObject *code,*/
--        py_globals,          /*PyObject *globals,*/
--        0                    /*PyObject *locals*/
--    );
--    if (!py_frame) goto bad;
--    py_frame->f_lineno = py_line;
--    PyTraceBack_Here(py_frame);
--bad:
--    Py_XDECREF(py_code);
--    Py_XDECREF(py_frame);
--}
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
--    while (t->p) {
--        #if PY_MAJOR_VERSION < 3
--        if (t->is_unicode) {
--            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
--        } else if (t->intern) {
--            *t->p = PyString_InternFromString(t->s);
--        } else {
--            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
--        }
--        #else  /* Python 3+ has unicode identifiers */
--        if (t->is_unicode | t->is_str) {
--            if (t->intern) {
--                *t->p = PyUnicode_InternFromString(t->s);
--            } else if (t->encoding) {
--                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
--            } else {
--                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
--            }
--        } else {
--            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
--        }
--        #endif
--        if (!*t->p)
--            return -1;
--        ++t;
--    }
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
--   int is_true = x == Py_True;
--   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
--   else return PyObject_IsTrue(x);
--}
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
--  PyNumberMethods *m;
--  const char *name = NULL;
--  PyObject *res = NULL;
--#if PY_VERSION_HEX < 0x03000000
--  if (PyInt_Check(x) || PyLong_Check(x))
--#else
--  if (PyLong_Check(x))
--#endif
--    return Py_INCREF(x), x;
--  m = Py_TYPE(x)->tp_as_number;
--#if PY_VERSION_HEX < 0x03000000
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Int(x);
--  }
--  else if (m && m->nb_long) {
--    name = "long";
--    res = PyNumber_Long(x);
--  }
--#else
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Long(x);
--  }
--#endif
--  if (res) {
--#if PY_VERSION_HEX < 0x03000000
--    if (!PyInt_Check(res) && !PyLong_Check(res)) {
--#else
--    if (!PyLong_Check(res)) {
--#endif
--      PyErr_Format(PyExc_TypeError,
--                   "__%s__ returned non-%s (type %.200s)",
--                   name, name, Py_TYPE(res)->tp_name);
--      Py_DECREF(res);
--      return NULL;
--    }
--  }
--  else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_TypeError,
--                    "an integer is required");
--  }
--  return res;
--}
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
--  Py_ssize_t ival;
--  PyObject* x = PyNumber_Index(b);
--  if (!x) return -1;
--  ival = PyInt_AsSsize_t(x);
--  Py_DECREF(x);
--  return ival;
--}
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
--#if PY_VERSION_HEX < 0x02050000
--   if (ival <= LONG_MAX)
--       return PyInt_FromLong((long)ival);
--   else {
--       unsigned char *bytes = (unsigned char *) &ival;
--       int one = 1; int little = (int)*(unsigned char*)&one;
--       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
--   }
--#else
--   return PyInt_FromSize_t(ival);
--#endif
--}
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
--   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
--   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
--       return (size_t)-1;
--   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
--       PyErr_SetString(PyExc_OverflowError,
--                       "value too large to convert to size_t");
--       return (size_t)-1;
--   }
--   return (size_t)val;
--}
--
--
--#endif /* Py_PYTHON_H */
diff --cc astropy/convolution/boundary_none.c
index 6423018,6423018..0000000
deleted file mode 100644,100644
--- a/astropy/convolution/boundary_none.c
+++ /dev/null
@@@ -1,8291 -1,8291 +1,0 @@@
--/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
--
--#define PY_SSIZE_T_CLEAN
--#include "Python.h"
--#ifndef Py_PYTHON_H
--    #error Python headers needed to compile C extensions, please install development version of Python.
--#elif PY_VERSION_HEX < 0x02040000
--    #error Cython requires Python 2.4+.
--#else
--#include <stddef.h> /* For offsetof */
--#ifndef offsetof
--#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
--#endif
--#if !defined(WIN32) && !defined(MS_WINDOWS)
--  #ifndef __stdcall
--    #define __stdcall
--  #endif
--  #ifndef __cdecl
--    #define __cdecl
--  #endif
--  #ifndef __fastcall
--    #define __fastcall
--  #endif
--#endif
--#ifndef DL_IMPORT
--  #define DL_IMPORT(t) t
--#endif
--#ifndef DL_EXPORT
--  #define DL_EXPORT(t) t
--#endif
--#ifndef PY_LONG_LONG
--  #define PY_LONG_LONG LONG_LONG
--#endif
--#ifndef Py_HUGE_VAL
--  #define Py_HUGE_VAL HUGE_VAL
--#endif
--#ifdef PYPY_VERSION
--#define CYTHON_COMPILING_IN_PYPY 1
--#define CYTHON_COMPILING_IN_CPYTHON 0
--#else
--#define CYTHON_COMPILING_IN_PYPY 0
--#define CYTHON_COMPILING_IN_CPYTHON 1
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  typedef int Py_ssize_t;
--  #define PY_SSIZE_T_MAX INT_MAX
--  #define PY_SSIZE_T_MIN INT_MIN
--  #define PY_FORMAT_SIZE_T ""
--  #define CYTHON_FORMAT_SSIZE_T ""
--  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
--  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
--  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
--                                (PyErr_Format(PyExc_TypeError, \
--                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
--                                 (PyObject*)0))
--  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
--                                  !PyComplex_Check(o))
--  #define PyIndex_Check __Pyx_PyIndex_Check
--  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
--  #define __PYX_BUILD_PY_SSIZE_T "i"
--#else
--  #define __PYX_BUILD_PY_SSIZE_T "n"
--  #define CYTHON_FORMAT_SSIZE_T "z"
--  #define __Pyx_PyIndex_Check PyIndex_Check
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
--  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
--  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
--  #define PyVarObject_HEAD_INIT(type, size) \
--          PyObject_HEAD_INIT(type) size,
--  #define PyType_Modified(t)
--  typedef struct {
--     void *buf;
--     PyObject *obj;
--     Py_ssize_t len;
--     Py_ssize_t itemsize;
--     int readonly;
--     int ndim;
--     char *format;
--     Py_ssize_t *shape;
--     Py_ssize_t *strides;
--     Py_ssize_t *suboffsets;
--     void *internal;
--  } Py_buffer;
--  #define PyBUF_SIMPLE 0
--  #define PyBUF_WRITABLE 0x0001
--  #define PyBUF_FORMAT 0x0004
--  #define PyBUF_ND 0x0008
--  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
--  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
--  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
--  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
--  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
--  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
--  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
--  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
--  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
--#endif
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#else
--  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#endif
--#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
--  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define Py_TPFLAGS_CHECKTYPES 0
--  #define Py_TPFLAGS_HAVE_INDEX 0
--#endif
--#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
--  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
--#endif
--#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
--  #define CYTHON_PEP393_ENABLED 1
--  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
--                                              0 : _PyUnicode_Ready((PyObject *)(op)))
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
--  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
--#else
--  #define CYTHON_PEP393_ENABLED 0
--  #define __Pyx_PyUnicode_READY(op)       (0)
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
--  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBaseString_Type            PyUnicode_Type
--  #define PyStringObject               PyUnicodeObject
--  #define PyString_Type                PyUnicode_Type
--  #define PyString_Check               PyUnicode_Check
--  #define PyString_CheckExact          PyUnicode_CheckExact
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PyBytesObject                PyStringObject
--  #define PyBytes_Type                 PyString_Type
--  #define PyBytes_Check                PyString_Check
--  #define PyBytes_CheckExact           PyString_CheckExact
--  #define PyBytes_FromString           PyString_FromString
--  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
--  #define PyBytes_FromFormat           PyString_FromFormat
--  #define PyBytes_DecodeEscape         PyString_DecodeEscape
--  #define PyBytes_AsString             PyString_AsString
--  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
--  #define PyBytes_Size                 PyString_Size
--  #define PyBytes_AS_STRING            PyString_AS_STRING
--  #define PyBytes_GET_SIZE             PyString_GET_SIZE
--  #define PyBytes_Repr                 PyString_Repr
--  #define PyBytes_Concat               PyString_Concat
--  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
--  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
--#endif
--#ifndef PySet_CheckExact
--  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
--#endif
--#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
--#if PY_MAJOR_VERSION >= 3
--  #define PyIntObject                  PyLongObject
--  #define PyInt_Type                   PyLong_Type
--  #define PyInt_Check(op)              PyLong_Check(op)
--  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
--  #define PyInt_FromString             PyLong_FromString
--  #define PyInt_FromUnicode            PyLong_FromUnicode
--  #define PyInt_FromLong               PyLong_FromLong
--  #define PyInt_FromSize_t             PyLong_FromSize_t
--  #define PyInt_FromSsize_t            PyLong_FromSsize_t
--  #define PyInt_AsLong                 PyLong_AsLong
--  #define PyInt_AS_LONG                PyLong_AS_LONG
--  #define PyInt_AsSsize_t              PyLong_AsSsize_t
--  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
--  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBoolObject                 PyLongObject
--#endif
--#if PY_VERSION_HEX < 0x03020000
--  typedef long Py_hash_t;
--  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
--#else
--  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
--#endif
--#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
--  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
--  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
--#else
--  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
--  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
--#else
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_NAMESTR(n) ((char *)(n))
--  #define __Pyx_DOCSTR(n)  ((char *)(n))
--#else
--  #define __Pyx_NAMESTR(n) (n)
--  #define __Pyx_DOCSTR(n)  (n)
--#endif
--
--
--#if PY_MAJOR_VERSION >= 3
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#else
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#endif
--
--#ifndef __PYX_EXTERN_C
--  #ifdef __cplusplus
--    #define __PYX_EXTERN_C extern "C"
--  #else
--    #define __PYX_EXTERN_C extern
--  #endif
--#endif
--
--#if defined(WIN32) || defined(MS_WINDOWS)
--#define _USE_MATH_DEFINES
--#endif
--#include <math.h>
--#define __PYX_HAVE__astropy__convolution__boundary_none
--#define __PYX_HAVE_API__astropy__convolution__boundary_none
--#include "string.h"
--#include "stdio.h"
--#include "stdlib.h"
--#include "numpy/arrayobject.h"
--#include "numpy/ufuncobject.h"
--#include "numpy/npy_math.h"
--#ifdef _OPENMP
--#include <omp.h>
--#endif /* _OPENMP */
--
--#ifdef PYREX_WITHOUT_ASSERTIONS
--#define CYTHON_WITHOUT_ASSERTIONS
--#endif
--
--#ifndef CYTHON_INLINE
--  #if defined(__GNUC__)
--    #define CYTHON_INLINE __inline__
--  #elif defined(_MSC_VER)
--    #define CYTHON_INLINE __inline
--  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--    #define CYTHON_INLINE inline
--  #else
--    #define CYTHON_INLINE
--  #endif
--#endif
--#ifndef CYTHON_UNUSED
--# if defined(__GNUC__)
--#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
--#     define CYTHON_UNUSED __attribute__ ((__unused__))
--#   else
--#     define CYTHON_UNUSED
--#   endif
--# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
--#   define CYTHON_UNUSED __attribute__ ((__unused__))
--# else
--#   define CYTHON_UNUSED
--# endif
--#endif
--typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
--
--#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
--#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
--#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
--#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
--#if CYTHON_COMPILING_IN_CPYTHON
--#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
--#else
--#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
--#endif
--#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
--
--
--#ifdef __GNUC__
--  /* Test for GCC > 2.95 */
--  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
--    #define likely(x)   __builtin_expect(!!(x), 1)
--    #define unlikely(x) __builtin_expect(!!(x), 0)
--  #else /* __GNUC__ > 2 ... */
--    #define likely(x)   (x)
--    #define unlikely(x) (x)
--  #endif /* __GNUC__ > 2 ... */
--#else /* __GNUC__ */
--  #define likely(x)   (x)
--  #define unlikely(x) (x)
--#endif /* __GNUC__ */
--    
--static PyObject *__pyx_m;
--static PyObject *__pyx_b;
--static PyObject *__pyx_empty_tuple;
--static PyObject *__pyx_empty_bytes;
--static int __pyx_lineno;
--static int __pyx_clineno = 0;
--static const char * __pyx_cfilenm= __FILE__;
--static const char *__pyx_filename;
--
--#if !defined(CYTHON_CCOMPLEX)
--  #if defined(__cplusplus)
--    #define CYTHON_CCOMPLEX 1
--  #elif defined(_Complex_I)
--    #define CYTHON_CCOMPLEX 1
--  #else
--    #define CYTHON_CCOMPLEX 0
--  #endif
--#endif
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #include <complex>
--  #else
--    #include <complex.h>
--  #endif
--#endif
--#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
--  #undef _Complex_I
--  #define _Complex_I 1.0fj
--#endif
--
--
--static const char *__pyx_f[] = {
--  "boundary_none.pyx",
--  "numpy.pxd",
--  "type.pxd",
--};
--#define IS_UNSIGNED(type) (((type) -1) > 0)
--struct __Pyx_StructField_;
--#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
--typedef struct {
--  const char* name; /* for error messages only */
--  struct __Pyx_StructField_* fields;
--  size_t size;     /* sizeof(type) */
--  size_t arraysize[8]; /* length of array in each dimension */
--  int ndim;
--  char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */
--  char is_unsigned;
--  int flags;
--} __Pyx_TypeInfo;
--typedef struct __Pyx_StructField_ {
--  __Pyx_TypeInfo* type;
--  const char* name;
--  size_t offset;
--} __Pyx_StructField;
--typedef struct {
--  __Pyx_StructField* field;
--  size_t parent_offset;
--} __Pyx_BufFmt_StackElem;
--typedef struct {
--  __Pyx_StructField root;
--  __Pyx_BufFmt_StackElem* head;
--  size_t fmt_offset;
--  size_t new_count, enc_count;
--  size_t struct_alignment;
--  int is_complex;
--  char enc_type;
--  char new_packmode;
--  char enc_packmode;
--  char is_valid_array;
--} __Pyx_BufFmt_Context;
--
--
--/* "numpy.pxd":723
-- * # in Cython to enable them only on the right systems.
-- * 
-- * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- */
--typedef npy_int8 __pyx_t_5numpy_int8_t;
--
--/* "numpy.pxd":724
-- * 
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t
-- */
--typedef npy_int16 __pyx_t_5numpy_int16_t;
--
--/* "numpy.pxd":725
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int64      int64_t
-- * #ctypedef npy_int96      int96_t
-- */
--typedef npy_int32 __pyx_t_5numpy_int32_t;
--
--/* "numpy.pxd":726
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_int96      int96_t
-- * #ctypedef npy_int128     int128_t
-- */
--typedef npy_int64 __pyx_t_5numpy_int64_t;
--
--/* "numpy.pxd":730
-- * #ctypedef npy_int128     int128_t
-- * 
-- * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- */
--typedef npy_uint8 __pyx_t_5numpy_uint8_t;
--
--/* "numpy.pxd":731
-- * 
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t
-- */
--typedef npy_uint16 __pyx_t_5numpy_uint16_t;
--
--/* "numpy.pxd":732
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint64     uint64_t
-- * #ctypedef npy_uint96     uint96_t
-- */
--typedef npy_uint32 __pyx_t_5numpy_uint32_t;
--
--/* "numpy.pxd":733
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_uint96     uint96_t
-- * #ctypedef npy_uint128    uint128_t
-- */
--typedef npy_uint64 __pyx_t_5numpy_uint64_t;
--
--/* "numpy.pxd":737
-- * #ctypedef npy_uint128    uint128_t
-- * 
-- * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_float64    float64_t
-- * #ctypedef npy_float80    float80_t
-- */
--typedef npy_float32 __pyx_t_5numpy_float32_t;
--
--/* "numpy.pxd":738
-- * 
-- * ctypedef npy_float32    float32_t
-- * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_float80    float80_t
-- * #ctypedef npy_float128   float128_t
-- */
--typedef npy_float64 __pyx_t_5numpy_float64_t;
--
--/* "numpy.pxd":747
-- * # The int types are mapped a bit surprising --
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t
-- */
--typedef npy_long __pyx_t_5numpy_int_t;
--
--/* "numpy.pxd":748
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   longlong_t
-- * 
-- */
--typedef npy_longlong __pyx_t_5numpy_long_t;
--
--/* "numpy.pxd":749
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_ulong      uint_t
-- */
--typedef npy_longlong __pyx_t_5numpy_longlong_t;
--
--/* "numpy.pxd":751
-- * ctypedef npy_longlong   longlong_t
-- * 
-- * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t
-- */
--typedef npy_ulong __pyx_t_5numpy_uint_t;
--
--/* "numpy.pxd":752
-- * 
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
--
--/* "numpy.pxd":753
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_intp       intp_t
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
--
--/* "numpy.pxd":755
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uintp      uintp_t
-- * 
-- */
--typedef npy_intp __pyx_t_5numpy_intp_t;
--
--/* "numpy.pxd":756
-- * 
-- * ctypedef npy_intp       intp_t
-- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_double     float_t
-- */
--typedef npy_uintp __pyx_t_5numpy_uintp_t;
--
--/* "numpy.pxd":758
-- * ctypedef npy_uintp      uintp_t
-- * 
-- * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t
-- */
--typedef npy_double __pyx_t_5numpy_float_t;
--
--/* "numpy.pxd":759
-- * 
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- */
--typedef npy_double __pyx_t_5numpy_double_t;
--
--/* "numpy.pxd":760
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- */
--typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
--
--/* "astropy/convolution/boundary_none.pyx":7
-- * 
-- * DTYPE = np.float
-- * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef extern from "numpy/npy_math.h":
-- */
--typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t;
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< float > __pyx_t_float_complex;
--  #else
--    typedef float _Complex __pyx_t_float_complex;
--  #endif
--#else
--    typedef struct { float real, imag; } __pyx_t_float_complex;
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< double > __pyx_t_double_complex;
--  #else
--    typedef double _Complex __pyx_t_double_complex;
--  #endif
--#else
--    typedef struct { double real, imag; } __pyx_t_double_complex;
--#endif
--
--
--/*--- Type declarations ---*/
--
--/* "numpy.pxd":762
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t
-- */
--typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
--
--/* "numpy.pxd":763
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- */
--typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
--
--/* "numpy.pxd":764
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cdouble     complex_t
-- */
--typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
--
--/* "numpy.pxd":766
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- */
--typedef npy_cdouble __pyx_t_5numpy_complex_t;
--#ifndef CYTHON_REFNANNY
--  #define CYTHON_REFNANNY 0
--#endif
--#if CYTHON_REFNANNY
--  typedef struct {
--    void (*INCREF)(void*, PyObject*, int);
--    void (*DECREF)(void*, PyObject*, int);
--    void (*GOTREF)(void*, PyObject*, int);
--    void (*GIVEREF)(void*, PyObject*, int);
--    void* (*SetupContext)(const char*, int, const char*);
--    void (*FinishContext)(void**);
--  } __Pyx_RefNannyAPIStruct;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
--  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
--#ifdef WITH_THREAD
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          if (acquire_gil) { \
--              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--              PyGILState_Release(__pyx_gilstate_save); \
--          } else { \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--          }
--#else
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
--#endif
--  #define __Pyx_RefNannyFinishContext() \
--          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
--  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
--  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
--  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
--  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
--#else
--  #define __Pyx_RefNannyDeclarations
--  #define __Pyx_RefNannySetupContext(name, acquire_gil)
--  #define __Pyx_RefNannyFinishContext()
--  #define __Pyx_INCREF(r) Py_INCREF(r)
--  #define __Pyx_DECREF(r) Py_DECREF(r)
--  #define __Pyx_GOTREF(r)
--  #define __Pyx_GIVEREF(r)
--  #define __Pyx_XINCREF(r) Py_XINCREF(r)
--  #define __Pyx_XDECREF(r) Py_XDECREF(r)
--  #define __Pyx_XGOTREF(r)
--  #define __Pyx_XGIVEREF(r)
--#endif /* CYTHON_REFNANNY */
--#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
--#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
--
--static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
--    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
--
--static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
--
--static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
--    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
--    const char* function_name); /*proto*/
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact); /*proto*/
--
--static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
--    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
--
--static CYTHON_INLINE long __Pyx_mod_long(long, long); /* proto */
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
--
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
--
--static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
--
--#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
--#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
--#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2)
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
--
--static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
--
--typedef struct {
--  Py_ssize_t shape, strides, suboffsets;
--} __Pyx_Buf_DimInfo;
--typedef struct {
--  size_t refcount;
--  Py_buffer pybuffer;
--} __Pyx_Buffer;
--typedef struct {
--  __Pyx_Buffer *rcbuffer;
--  char *data;
--  __Pyx_Buf_DimInfo diminfo[8];
--} __Pyx_LocalBuf_ND;
--
--#if PY_MAJOR_VERSION < 3
--    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
--    static void __Pyx_ReleaseBuffer(Py_buffer *view);
--#else
--    #define __Pyx_GetBuffer PyObject_GetBuffer
--    #define __Pyx_ReleaseBuffer PyBuffer_Release
--#endif
--
--
--static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
--static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
--
--static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #define __Pyx_CREAL(z) ((z).real())
--    #define __Pyx_CIMAG(z) ((z).imag())
--  #else
--    #define __Pyx_CREAL(z) (__real__(z))
--    #define __Pyx_CIMAG(z) (__imag__(z))
--  #endif
--#else
--    #define __Pyx_CREAL(z) ((z).real)
--    #define __Pyx_CIMAG(z) ((z).imag)
--#endif
--#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
--    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
--    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
--#else
--    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
--    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
--#endif
--
--static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eqf(a, b)   ((a)==(b))
--    #define __Pyx_c_sumf(a, b)  ((a)+(b))
--    #define __Pyx_c_difff(a, b) ((a)-(b))
--    #define __Pyx_c_prodf(a, b) ((a)*(b))
--    #define __Pyx_c_quotf(a, b) ((a)/(b))
--    #define __Pyx_c_negf(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
--    #define __Pyx_c_conjf(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (::std::abs(z))
--        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zerof(z) ((z)==0)
--    #define __Pyx_c_conjf(z)    (conjf(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (cabsf(z))
--        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eq(a, b)   ((a)==(b))
--    #define __Pyx_c_sum(a, b)  ((a)+(b))
--    #define __Pyx_c_diff(a, b) ((a)-(b))
--    #define __Pyx_c_prod(a, b) ((a)*(b))
--    #define __Pyx_c_quot(a, b) ((a)/(b))
--    #define __Pyx_c_neg(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zero(z) ((z)==(double)0)
--    #define __Pyx_c_conj(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (::std::abs(z))
--        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zero(z) ((z)==0)
--    #define __Pyx_c_conj(z)    (conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (cabs(z))
--        #define __Pyx_c_pow(a, b)  (cpow(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
--
--static int __Pyx_check_binary_version(void);
--
--#if !defined(__Pyx_PyIdentifier_FromString)
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
--#else
--  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
--#endif
--#endif
--
--static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
--
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
--
--typedef struct {
--    int code_line;
--    PyCodeObject* code_object;
--} __Pyx_CodeObjectCacheEntry;
--struct __Pyx_CodeObjectCache {
--    int count;
--    int max_count;
--    __Pyx_CodeObjectCacheEntry* entries;
--};
--static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
--static PyCodeObject *__pyx_find_code_object(int code_line);
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
--
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename); /*proto*/
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
--
--
--/* Module declarations from 'cpython.buffer' */
--
--/* Module declarations from 'cpython.ref' */
--
--/* Module declarations from 'libc.string' */
--
--/* Module declarations from 'libc.stdio' */
--
--/* Module declarations from 'cpython.object' */
--
--/* Module declarations from '__builtin__' */
--
--/* Module declarations from 'cpython.type' */
--static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
--
--/* Module declarations from 'libc.stdlib' */
--
--/* Module declarations from 'numpy' */
--
--/* Module declarations from 'numpy' */
--static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
--static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
--static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
--static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
--
--/* Module declarations from 'cython' */
--
--/* Module declarations from 'astropy.convolution.boundary_none' */
--static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
--#define __Pyx_MODULE_NAME "astropy.convolution.boundary_none"
--int __pyx_module_is_main_astropy__convolution__boundary_none = 0;
--
--/* Implementation of 'astropy.convolution.boundary_none' */
--static PyObject *__pyx_builtin_ValueError;
--static PyObject *__pyx_builtin_range;
--static PyObject *__pyx_builtin_RuntimeError;
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
--static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
--static char __pyx_k_5[] = "ndarray is not C contiguous";
--static char __pyx_k_7[] = "ndarray is not Fortran contiguous";
--static char __pyx_k_9[] = "Non-native byte order not supported";
--static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
--static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
--static char __pyx_k_15[] = "Format string allocated too short.";
--static char __pyx_k_19[] = "convolve1d_boundary_none";
--static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_none.pyx";
--static char __pyx_k_21[] = "astropy.convolution.boundary_none";
--static char __pyx_k_24[] = "convolve2d_boundary_none";
--static char __pyx_k_27[] = "convolve3d_boundary_none";
--static char __pyx_k__B[] = "B";
--static char __pyx_k__H[] = "H";
--static char __pyx_k__I[] = "I";
--static char __pyx_k__L[] = "L";
--static char __pyx_k__O[] = "O";
--static char __pyx_k__Q[] = "Q";
--static char __pyx_k__b[] = "b";
--static char __pyx_k__d[] = "d";
--static char __pyx_k__f[] = "f";
--static char __pyx_k__g[] = "g";
--static char __pyx_k__h[] = "h";
--static char __pyx_k__i[] = "i";
--static char __pyx_k__j[] = "j";
--static char __pyx_k__k[] = "k";
--static char __pyx_k__l[] = "l";
--static char __pyx_k__q[] = "q";
--static char __pyx_k__Zd[] = "Zd";
--static char __pyx_k__Zf[] = "Zf";
--static char __pyx_k__Zg[] = "Zg";
--static char __pyx_k__ii[] = "ii";
--static char __pyx_k__jj[] = "jj";
--static char __pyx_k__kk[] = "kk";
--static char __pyx_k__np[] = "np";
--static char __pyx_k__nx[] = "nx";
--static char __pyx_k__ny[] = "ny";
--static char __pyx_k__nz[] = "nz";
--static char __pyx_k__bot[] = "bot";
--static char __pyx_k__ker[] = "ker";
--static char __pyx_k__nkx[] = "nkx";
--static char __pyx_k__nky[] = "nky";
--static char __pyx_k__nkz[] = "nkz";
--static char __pyx_k__top[] = "top";
--static char __pyx_k__val[] = "val";
--static char __pyx_k__wkx[] = "wkx";
--static char __pyx_k__wky[] = "wky";
--static char __pyx_k__wkz[] = "wkz";
--static char __pyx_k__conv[] = "conv";
--static char __pyx_k__DTYPE[] = "DTYPE";
--static char __pyx_k__dtype[] = "dtype";
--static char __pyx_k__fixed[] = "fixed";
--static char __pyx_k__float[] = "float";
--static char __pyx_k__iimax[] = "iimax";
--static char __pyx_k__iimin[] = "iimin";
--static char __pyx_k__jjmax[] = "jjmax";
--static char __pyx_k__jjmin[] = "jjmin";
--static char __pyx_k__kkmax[] = "kkmax";
--static char __pyx_k__kkmin[] = "kkmin";
--static char __pyx_k__numpy[] = "numpy";
--static char __pyx_k__range[] = "range";
--static char __pyx_k__zeros[] = "zeros";
--static char __pyx_k____main__[] = "__main__";
--static char __pyx_k____test__[] = "__test__";
--static char __pyx_k__ValueError[] = "ValueError";
--static char __pyx_k__RuntimeError[] = "RuntimeError";
--static PyObject *__pyx_kp_s_1;
--static PyObject *__pyx_kp_u_11;
--static PyObject *__pyx_kp_u_12;
--static PyObject *__pyx_kp_u_15;
--static PyObject *__pyx_n_s_19;
--static PyObject *__pyx_kp_s_20;
--static PyObject *__pyx_n_s_21;
--static PyObject *__pyx_n_s_24;
--static PyObject *__pyx_n_s_27;
--static PyObject *__pyx_kp_u_5;
--static PyObject *__pyx_kp_u_7;
--static PyObject *__pyx_kp_u_9;
--static PyObject *__pyx_n_s__DTYPE;
--static PyObject *__pyx_n_s__RuntimeError;
--static PyObject *__pyx_n_s__ValueError;
--static PyObject *__pyx_n_s____main__;
--static PyObject *__pyx_n_s____test__;
--static PyObject *__pyx_n_s__bot;
--static PyObject *__pyx_n_s__conv;
--static PyObject *__pyx_n_s__dtype;
--static PyObject *__pyx_n_s__f;
--static PyObject *__pyx_n_s__fixed;
--static PyObject *__pyx_n_s__float;
--static PyObject *__pyx_n_s__g;
--static PyObject *__pyx_n_s__i;
--static PyObject *__pyx_n_s__ii;
--static PyObject *__pyx_n_s__iimax;
--static PyObject *__pyx_n_s__iimin;
--static PyObject *__pyx_n_s__j;
--static PyObject *__pyx_n_s__jj;
--static PyObject *__pyx_n_s__jjmax;
--static PyObject *__pyx_n_s__jjmin;
--static PyObject *__pyx_n_s__k;
--static PyObject *__pyx_n_s__ker;
--static PyObject *__pyx_n_s__kk;
--static PyObject *__pyx_n_s__kkmax;
--static PyObject *__pyx_n_s__kkmin;
--static PyObject *__pyx_n_s__nkx;
--static PyObject *__pyx_n_s__nky;
--static PyObject *__pyx_n_s__nkz;
--static PyObject *__pyx_n_s__np;
--static PyObject *__pyx_n_s__numpy;
--static PyObject *__pyx_n_s__nx;
--static PyObject *__pyx_n_s__ny;
--static PyObject *__pyx_n_s__nz;
--static PyObject *__pyx_n_s__range;
--static PyObject *__pyx_n_s__top;
--static PyObject *__pyx_n_s__val;
--static PyObject *__pyx_n_s__wkx;
--static PyObject *__pyx_n_s__wky;
--static PyObject *__pyx_n_s__wkz;
--static PyObject *__pyx_n_s__zeros;
--static PyObject *__pyx_int_15;
--static PyObject *__pyx_k_tuple_2;
--static PyObject *__pyx_k_tuple_3;
--static PyObject *__pyx_k_tuple_4;
--static PyObject *__pyx_k_tuple_6;
--static PyObject *__pyx_k_tuple_8;
--static PyObject *__pyx_k_tuple_10;
--static PyObject *__pyx_k_tuple_13;
--static PyObject *__pyx_k_tuple_14;
--static PyObject *__pyx_k_tuple_16;
--static PyObject *__pyx_k_tuple_17;
--static PyObject *__pyx_k_tuple_22;
--static PyObject *__pyx_k_tuple_25;
--static PyObject *__pyx_k_codeobj_18;
--static PyObject *__pyx_k_codeobj_23;
--static PyObject *__pyx_k_codeobj_26;
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none = {__Pyx_NAMESTR("convolve1d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve1d_boundary_none (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_none_convolve1d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_none.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_nkx;
--  int __pyx_v_wkx;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_ii;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  int __pyx_t_13;
--  long __pyx_t_14;
--  unsigned int __pyx_t_15;
--  unsigned int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  unsigned int __pyx_t_21;
--  unsigned int __pyx_t_22;
--  unsigned int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve1d_boundary_none", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/convolution/boundary_none.pyx":19
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (__pyx_t_1) {
--
--    /* "astropy/convolution/boundary_none.pyx":20
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_none.pyx":22
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (__pyx_t_1) {
--    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __pyx_t_6 = __pyx_t_5;
--  } else {
--    __pyx_t_6 = __pyx_t_1;
--  }
--  if (unlikely(!__pyx_t_6)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_none.pyx":24
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_none.pyx":25
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- * 
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_none.pyx":26
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- * 
-- *     # The following need to be set to zeros rather than empty because the
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_none.pyx":30
-- *     # The following need to be set to zeros rather than empty because the
-- *     # boundary does not get reset.
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.zeros([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.zeros([nx], dtype=DTYPE)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
--  __pyx_t_4 = 0;
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":31
-- *     # boundary does not get reset.
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.zeros([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.zeros([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- * 
-- *     cdef unsigned int i, ii
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
--  __pyx_t_3 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":41
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_none.pyx":42
-- *     # neighboring values
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
--    if (__pyx_t_6) {
--      __pyx_t_1 = (__pyx_v_i >= __pyx_v_wkx);
--      if (__pyx_t_1) {
--        __pyx_t_5 = (__pyx_v_i < (__pyx_v_nx - __pyx_v_wkx));
--        __pyx_t_13 = __pyx_t_5;
--      } else {
--        __pyx_t_13 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_13;
--    } else {
--      __pyx_t_1 = __pyx_t_6;
--    }
--    if (__pyx_t_1) {
--
--      /* "astropy/convolution/boundary_none.pyx":43
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             for ii in range(i - wkx, i + wkx + 1):
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_none.pyx":44
-- *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             for ii in range(i - wkx, i + wkx + 1):
-- *                 val = f[ii]
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_none.pyx":45
-- *             top = 0.
-- *             bot = 0.
-- *             for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
-- *                 val = f[ii]
-- *                 if not npy_isnan(val):
-- */
--      __pyx_t_14 = ((__pyx_v_i + __pyx_v_wkx) + 1);
--      for (__pyx_t_15 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--        __pyx_v_ii = __pyx_t_15;
--
--        /* "astropy/convolution/boundary_none.pyx":46
-- *             bot = 0.
-- *             for ii in range(i - wkx, i + wkx + 1):
-- *                 val = f[ii]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- */
--        __pyx_t_16 = __pyx_v_ii;
--        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_f.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_none.pyx":47
-- *             for ii in range(i - wkx, i + wkx + 1):
-- *                 val = f[ii]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- */
--        __pyx_t_1 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_1) {
--
--          /* "astropy/convolution/boundary_none.pyx":48
-- *                 val = f[ii]
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--          __pyx_t_17 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_g.diminfo[0].strides));
--
--          /* "astropy/convolution/boundary_none.pyx":49
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- *             if bot != 0.:
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_none.pyx":50
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- *             if bot != 0.:
-- *                 fixed[i] = top / bot
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L9;
--        }
--        __pyx_L9:;
--      }
--
--      /* "astropy/convolution/boundary_none.pyx":51
-- *                     top += val * ker
-- *                     bot += ker
-- *             if bot != 0.:             # <<<<<<<<<<<<<<
-- *                 fixed[i] = top / bot
-- *             else:
-- */
--      __pyx_t_1 = (__pyx_v_bot != 0.);
--      if (__pyx_t_1) {
--
--        /* "astropy/convolution/boundary_none.pyx":52
-- *                     bot += ker
-- *             if bot != 0.:
-- *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i] = f[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_15 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L10;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_none.pyx":54
-- *                 fixed[i] = top / bot
-- *             else:
-- *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             fixed[i] = f[i]
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
--      }
--      __pyx_L10:;
--      goto __pyx_L6;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_none.pyx":56
-- *                 fixed[i] = f[i]
-- *         else:
-- *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--      __pyx_t_20 = __pyx_v_i;
--      __pyx_t_21 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
--    }
--    __pyx_L6:;
--  }
--
--  /* "astropy/convolution/boundary_none.pyx":59
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
--  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_none.pyx":60
-- *     # Now run the proper convolution
-- *     for i in range(wkx, nx - wkx):
-- *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_22 = __pyx_v_i;
--    __pyx_t_1 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
--    if (__pyx_t_1) {
--
--      /* "astropy/convolution/boundary_none.pyx":61
-- *     for i in range(wkx, nx - wkx):
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             for ii in range(i - wkx, i + wkx + 1):
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_none.pyx":62
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             for ii in range(i - wkx, i + wkx + 1):
-- *                 val = fixed[ii]
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_none.pyx":63
-- *             top = 0.
-- *             bot = 0.
-- *             for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
-- *                 val = fixed[ii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- */
--      __pyx_t_14 = ((__pyx_v_i + __pyx_v_wkx) + 1);
--      for (__pyx_t_23 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_23 < __pyx_t_14; __pyx_t_23+=1) {
--        __pyx_v_ii = __pyx_t_23;
--
--        /* "astropy/convolution/boundary_none.pyx":64
-- *             bot = 0.
-- *             for ii in range(i - wkx, i + wkx + 1):
-- *                 val = fixed[ii]             # <<<<<<<<<<<<<<
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- */
--        __pyx_t_24 = __pyx_v_ii;
--        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_none.pyx":65
-- *             for ii in range(i - wkx, i + wkx + 1):
-- *                 val = fixed[ii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- */
--        __pyx_t_25 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_g.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_none.pyx":66
-- *                 val = fixed[ii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--        __pyx_t_1 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_1) {
--
--          /* "astropy/convolution/boundary_none.pyx":67
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- *             if bot != 0:
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_none.pyx":68
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- *             if bot != 0:
-- *                 conv[i] = top / bot
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L16;
--        }
--        __pyx_L16:;
--      }
--
--      /* "astropy/convolution/boundary_none.pyx":69
-- *                     top += val * ker
-- *                     bot += ker
-- *             if bot != 0:             # <<<<<<<<<<<<<<
-- *                 conv[i] = top / bot
-- *             else:
-- */
--      __pyx_t_1 = (__pyx_v_bot != 0.0);
--      if (__pyx_t_1) {
--
--        /* "astropy/convolution/boundary_none.pyx":70
-- *                     bot += ker
-- *             if bot != 0:
-- *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i] = fixed[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_23 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L17;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_none.pyx":72
-- *                 conv[i] = top / bot
-- *             else:
-- *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             conv[i] = fixed[i]
-- */
--        __pyx_t_26 = __pyx_v_i;
--        __pyx_t_27 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
--      }
--      __pyx_L17:;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_none.pyx":74
-- *                 conv[i] = fixed[i]
-- *         else:
-- *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--      __pyx_t_28 = __pyx_v_i;
--      __pyx_t_29 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
--    }
--    __pyx_L13:;
--  }
--
--  /* "astropy/convolution/boundary_none.pyx":76
-- *             conv[i] = fixed[i]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none = {__Pyx_NAMESTR("convolve2d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve2d_boundary_none (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_none_2convolve2d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_none.pyx":80
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_ii;
--  unsigned int __pyx_v_jj;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  int __pyx_t_17;
--  int __pyx_t_18;
--  long __pyx_t_19;
--  unsigned int __pyx_t_20;
--  long __pyx_t_21;
--  unsigned int __pyx_t_22;
--  unsigned int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  unsigned int __pyx_t_50;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve2d_boundary_none", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
--
--  /* "astropy/convolution/boundary_none.pyx":83
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "astropy/convolution/boundary_none.pyx":84
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_none.pyx":86
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  if (__pyx_t_3) {
--    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (unlikely(!__pyx_t_2)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_none.pyx":88
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_none.pyx":89
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_none.pyx":90
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_none.pyx":91
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_none.pyx":92
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- * 
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_none.pyx":93
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- * 
-- *     # The following need to be set to zeros rather than empty because the
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_none.pyx":97
-- *     # The following need to be set to zeros rather than empty because the
-- *     # boundary does not get reset.
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.zeros([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.zeros([nx, ny], dtype=DTYPE)
-- * 
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":98
-- *     # boundary does not get reset.
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.zeros([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.zeros([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- * 
-- *     cdef unsigned int i, j, ii, jj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":108
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_none.pyx":109
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
-- *             and j >= wky and j < ny - wky:
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_none.pyx":110
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \             # <<<<<<<<<<<<<<
-- *             and j >= wky and j < ny - wky:
-- *                 top = 0.
-- */
--      __pyx_t_14 = __pyx_v_i;
--      __pyx_t_15 = __pyx_v_j;
--      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
--      if (__pyx_t_2) {
--        __pyx_t_3 = (__pyx_v_i >= __pyx_v_wkx);
--        if (__pyx_t_3) {
--
--          /* "astropy/convolution/boundary_none.pyx":111
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
-- *             and j >= wky and j < ny - wky:             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--          __pyx_t_1 = (__pyx_v_i < (__pyx_v_nx - __pyx_v_wkx));
--          if (__pyx_t_1) {
--            __pyx_t_16 = (__pyx_v_j >= __pyx_v_wky);
--            if (__pyx_t_16) {
--              __pyx_t_17 = (__pyx_v_j < (__pyx_v_ny - __pyx_v_wky));
--              __pyx_t_18 = __pyx_t_17;
--            } else {
--              __pyx_t_18 = __pyx_t_16;
--            }
--            __pyx_t_16 = __pyx_t_18;
--          } else {
--            __pyx_t_16 = __pyx_t_1;
--          }
--          __pyx_t_1 = __pyx_t_16;
--        } else {
--          __pyx_t_1 = __pyx_t_3;
--        }
--        __pyx_t_3 = __pyx_t_1;
--      } else {
--        __pyx_t_3 = __pyx_t_2;
--      }
--      if (__pyx_t_3) {
--
--        /* "astropy/convolution/boundary_none.pyx":112
-- *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
-- *             and j >= wky and j < ny - wky:
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_none.pyx":113
-- *             and j >= wky and j < ny - wky:
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- *                     for jj in range(j - wky, j + wky + 1):
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_none.pyx":114
-- *                 top = 0.
-- *                 bot = 0.
-- *                 for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
-- *                     for jj in range(j - wky, j + wky + 1):
-- *                         val = f[ii, jj]
-- */
--        __pyx_t_19 = ((__pyx_v_i + __pyx_v_wkx) + 1);
--        for (__pyx_t_20 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
--          __pyx_v_ii = __pyx_t_20;
--
--          /* "astropy/convolution/boundary_none.pyx":115
-- *                 bot = 0.
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- *                     for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
-- *                         val = f[ii, jj]
-- *                         if not npy_isnan(val):
-- */
--          __pyx_t_21 = ((__pyx_v_j + __pyx_v_wky) + 1);
--          for (__pyx_t_22 = (__pyx_v_j - __pyx_v_wky); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_jj = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_none.pyx":116
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- *                     for jj in range(j - wky, j + wky + 1):
-- *                         val = f[ii, jj]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- */
--            __pyx_t_23 = __pyx_v_ii;
--            __pyx_t_24 = __pyx_v_jj;
--            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_f.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_none.pyx":117
-- *                     for jj in range(j - wky, j + wky + 1):
-- *                         val = f[ii, jj]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_3 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_3) {
--
--              /* "astropy/convolution/boundary_none.pyx":119
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--              __pyx_t_25 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--              __pyx_t_26 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_g.diminfo[1].strides));
--
--              /* "astropy/convolution/boundary_none.pyx":120
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- *                 if bot != 0.:
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_none.pyx":121
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- *                 if bot != 0.:
-- *                     fixed[i, j] = top / bot
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L13;
--            }
--            __pyx_L13:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_none.pyx":122
-- *                             top += val * ker
-- *                             bot += ker
-- *                 if bot != 0.:             # <<<<<<<<<<<<<<
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_3 = (__pyx_v_bot != 0.);
--        if (__pyx_t_3) {
--
--          /* "astropy/convolution/boundary_none.pyx":123
-- *                             bot += ker
-- *                 if bot != 0.:
-- *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j] = f[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_20 = __pyx_v_i;
--          __pyx_t_22 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L14;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_none.pyx":125
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i, j] = f[i, j]
-- */
--          __pyx_t_27 = __pyx_v_i;
--          __pyx_t_28 = __pyx_v_j;
--          __pyx_t_29 = __pyx_v_i;
--          __pyx_t_30 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides));
--        }
--        __pyx_L14:;
--        goto __pyx_L8;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_none.pyx":127
-- *                     fixed[i, j] = f[i, j]
-- *             else:
-- *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--        __pyx_t_31 = __pyx_v_i;
--        __pyx_t_32 = __pyx_v_j;
--        __pyx_t_33 = __pyx_v_i;
--        __pyx_t_34 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[1].strides));
--      }
--      __pyx_L8:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_none.pyx":130
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
-- *         for j in range(wky, ny - wky):
-- *             if not npy_isnan(fixed[i, j]):
-- */
--  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
--  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_none.pyx":131
-- *     # Now run the proper convolution
-- *     for i in range(wkx, nx - wkx):
-- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = (__pyx_v_ny - __pyx_v_wky);
--    for (__pyx_t_13 = __pyx_v_wky; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_none.pyx":132
-- *     for i in range(wkx, nx - wkx):
-- *         for j in range(wky, ny - wky):
-- *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_35 = __pyx_v_i;
--      __pyx_t_36 = __pyx_v_j;
--      __pyx_t_3 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[1].strides))));
--      if (__pyx_t_3) {
--
--        /* "astropy/convolution/boundary_none.pyx":133
-- *         for j in range(wky, ny - wky):
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_none.pyx":134
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- *                     for jj in range(j - wky, j + wky + 1):
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_none.pyx":135
-- *                 top = 0.
-- *                 bot = 0.
-- *                 for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
-- *                     for jj in range(j - wky, j + wky + 1):
-- *                         val = fixed[ii, jj]
-- */
--        __pyx_t_19 = ((__pyx_v_i + __pyx_v_wkx) + 1);
--        for (__pyx_t_37 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_37 < __pyx_t_19; __pyx_t_37+=1) {
--          __pyx_v_ii = __pyx_t_37;
--
--          /* "astropy/convolution/boundary_none.pyx":136
-- *                 bot = 0.
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- *                     for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
-- *                         val = fixed[ii, jj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- */
--          __pyx_t_21 = ((__pyx_v_j + __pyx_v_wky) + 1);
--          for (__pyx_t_38 = (__pyx_v_j - __pyx_v_wky); __pyx_t_38 < __pyx_t_21; __pyx_t_38+=1) {
--            __pyx_v_jj = __pyx_t_38;
--
--            /* "astropy/convolution/boundary_none.pyx":137
-- *                 for ii in range(i - wkx, i + wkx + 1):
-- *                     for jj in range(j - wky, j + wky + 1):
-- *                         val = fixed[ii, jj]             # <<<<<<<<<<<<<<
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_39 = __pyx_v_ii;
--            __pyx_t_40 = __pyx_v_jj;
--            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_none.pyx":139
-- *                         val = fixed[ii, jj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- */
--            __pyx_t_41 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--            __pyx_t_42 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_41, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_42, __pyx_pybuffernd_g.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_none.pyx":140
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--            __pyx_t_3 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_3) {
--
--              /* "astropy/convolution/boundary_none.pyx":141
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- *                 if bot != 0:
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_none.pyx":142
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L24;
--            }
--            __pyx_L24:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_none.pyx":143
-- *                             top += val * ker
-- *                             bot += ker
-- *                 if bot != 0:             # <<<<<<<<<<<<<<
-- *                     conv[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_3 = (__pyx_v_bot != 0.0);
--        if (__pyx_t_3) {
--
--          /* "astropy/convolution/boundary_none.pyx":144
-- *                             bot += ker
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_37 = __pyx_v_i;
--          __pyx_t_38 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_38, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L25;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_none.pyx":146
-- *                     conv[i, j] = top / bot
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i, j] = fixed[i, j]
-- */
--          __pyx_t_43 = __pyx_v_i;
--          __pyx_t_44 = __pyx_v_j;
--          __pyx_t_45 = __pyx_v_i;
--          __pyx_t_46 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[1].strides));
--        }
--        __pyx_L25:;
--        goto __pyx_L19;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_none.pyx":148
-- *                     conv[i, j] = fixed[i, j]
-- *             else:
-- *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--        __pyx_t_47 = __pyx_v_i;
--        __pyx_t_48 = __pyx_v_j;
--        __pyx_t_49 = __pyx_v_i;
--        __pyx_t_50 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[1].strides));
--      }
--      __pyx_L19:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_none.pyx":150
-- *                 conv[i, j] = fixed[i, j]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none = {__Pyx_NAMESTR("convolve3d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve3d_boundary_none (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_none_4convolve3d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_none.pyx":154
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nz;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_nkz;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  int __pyx_v_wkz;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_k;
--  unsigned int __pyx_v_ii;
--  unsigned int __pyx_v_jj;
--  unsigned int __pyx_v_kk;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  int __pyx_t_4;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyObject *__pyx_t_8 = NULL;
--  PyObject *__pyx_t_9 = NULL;
--  PyArrayObject *__pyx_t_10 = NULL;
--  PyArrayObject *__pyx_t_11 = NULL;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  int __pyx_t_21;
--  int __pyx_t_22;
--  int __pyx_t_23;
--  int __pyx_t_24;
--  long __pyx_t_25;
--  unsigned int __pyx_t_26;
--  long __pyx_t_27;
--  unsigned int __pyx_t_28;
--  long __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  unsigned int __pyx_t_50;
--  unsigned int __pyx_t_51;
--  unsigned int __pyx_t_52;
--  unsigned int __pyx_t_53;
--  unsigned int __pyx_t_54;
--  unsigned int __pyx_t_55;
--  unsigned int __pyx_t_56;
--  unsigned int __pyx_t_57;
--  unsigned int __pyx_t_58;
--  unsigned int __pyx_t_59;
--  unsigned int __pyx_t_60;
--  unsigned int __pyx_t_61;
--  unsigned int __pyx_t_62;
--  unsigned int __pyx_t_63;
--  unsigned int __pyx_t_64;
--  unsigned int __pyx_t_65;
--  unsigned int __pyx_t_66;
--  unsigned int __pyx_t_67;
--  unsigned int __pyx_t_68;
--  unsigned int __pyx_t_69;
--  unsigned int __pyx_t_70;
--  unsigned int __pyx_t_71;
--  unsigned int __pyx_t_72;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve3d_boundary_none", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pyb [...]
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pyb [...]
--
--  /* "astropy/convolution/boundary_none.pyx":157
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    if (!__pyx_t_2) {
--      __pyx_t_3 = (__Pyx_mod_long((__pyx_v_g->dimensions[2]), 2) != 1);
--      __pyx_t_4 = __pyx_t_3;
--    } else {
--      __pyx_t_4 = __pyx_t_2;
--    }
--    __pyx_t_2 = __pyx_t_4;
--  } else {
--    __pyx_t_2 = __pyx_t_1;
--  }
--  if (__pyx_t_2) {
--
--    /* "astropy/convolution/boundary_none.pyx":158
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_none.pyx":160
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  if (__pyx_t_2) {
--    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_7);
--    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_4 = __pyx_t_1;
--  } else {
--    __pyx_t_4 = __pyx_t_2;
--  }
--  if (unlikely(!__pyx_t_4)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_none.pyx":162
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_none.pyx":163
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_none.pyx":164
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_nz = (__pyx_v_f->dimensions[2]);
--
--  /* "astropy/convolution/boundary_none.pyx":165
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_none.pyx":166
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_none.pyx":167
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
--
--  /* "astropy/convolution/boundary_none.pyx":168
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_none.pyx":169
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef int wkz = nkz // 2
-- * 
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_none.pyx":170
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
-- * 
-- *     # The following need to be set to zeros rather than empty because the
-- */
--  __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
--
--  /* "astropy/convolution/boundary_none.pyx":174
-- *     # The following need to be set to zeros rather than empty because the
-- *     # boundary does not get reset.
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.zeros([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.zeros([nx, ny, nz], dtype=DTYPE)
-- * 
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  __pyx_t_5 = 0;
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
--  __pyx_t_9 = 0;
--  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2 [...]
--    }
--  }
--  __pyx_t_10 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":175
-- *     # boundary does not get reset.
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.zeros([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.zeros([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- * 
-- *     cdef unsigned int i, j, k, ii, jj, kk
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_p [...]
--    }
--  }
--  __pyx_t_11 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
--  __pyx_t_8 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":185
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_none.pyx":186
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_none.pyx":187
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
-- *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_none.pyx":188
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \             # <<<<<<<<<<<<<<
-- *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
-- *                     top = 0.
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_j;
--        __pyx_t_20 = __pyx_v_k;
--        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
--        if (__pyx_t_4) {
--          __pyx_t_2 = (__pyx_v_i >= __pyx_v_wkx);
--          if (__pyx_t_2) {
--
--            /* "astropy/convolution/boundary_none.pyx":189
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
-- *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--            __pyx_t_1 = (__pyx_v_i < (__pyx_v_nx - __pyx_v_wkx));
--            if (__pyx_t_1) {
--              __pyx_t_3 = (__pyx_v_j >= __pyx_v_wky);
--              if (__pyx_t_3) {
--                __pyx_t_21 = (__pyx_v_j < (__pyx_v_ny - __pyx_v_wky));
--                if (__pyx_t_21) {
--                  __pyx_t_22 = (__pyx_v_k >= __pyx_v_wkz);
--                  if (__pyx_t_22) {
--                    __pyx_t_23 = (__pyx_v_k <= (__pyx_v_nz - __pyx_v_wkz));
--                    __pyx_t_24 = __pyx_t_23;
--                  } else {
--                    __pyx_t_24 = __pyx_t_22;
--                  }
--                  __pyx_t_22 = __pyx_t_24;
--                } else {
--                  __pyx_t_22 = __pyx_t_21;
--                }
--                __pyx_t_21 = __pyx_t_22;
--              } else {
--                __pyx_t_21 = __pyx_t_3;
--              }
--              __pyx_t_3 = __pyx_t_21;
--            } else {
--              __pyx_t_3 = __pyx_t_1;
--            }
--            __pyx_t_1 = __pyx_t_3;
--          } else {
--            __pyx_t_1 = __pyx_t_2;
--          }
--          __pyx_t_2 = __pyx_t_1;
--        } else {
--          __pyx_t_2 = __pyx_t_4;
--        }
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_none.pyx":190
-- *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
-- *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_none.pyx":191
-- *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- *                         for jj in range(j - wky, j + wky + 1):
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_none.pyx":192
-- *                     top = 0.
-- *                     bot = 0.
-- *                     for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
-- *                         for jj in range(j - wky, j + wky + 1):
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- */
--          __pyx_t_25 = ((__pyx_v_i + __pyx_v_wkx) + 1);
--          for (__pyx_t_26 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--            __pyx_v_ii = __pyx_t_26;
--
--            /* "astropy/convolution/boundary_none.pyx":193
-- *                     bot = 0.
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- *                         for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- *                                 val = f[ii, jj, kk]
-- */
--            __pyx_t_27 = ((__pyx_v_j + __pyx_v_wky) + 1);
--            for (__pyx_t_28 = (__pyx_v_j - __pyx_v_wky); __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
--              __pyx_v_jj = __pyx_t_28;
--
--              /* "astropy/convolution/boundary_none.pyx":194
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- *                         for jj in range(j - wky, j + wky + 1):
-- *                             for kk in range(k - wkz, k + wkz + 1):             # <<<<<<<<<<<<<<
-- *                                 val = f[ii, jj, kk]
-- *                                 if not npy_isnan(val):
-- */
--              __pyx_t_29 = ((__pyx_v_k + __pyx_v_wkz) + 1);
--              for (__pyx_t_30 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) {
--                __pyx_v_kk = __pyx_t_30;
--
--                /* "astropy/convolution/boundary_none.pyx":195
-- *                         for jj in range(j - wky, j + wky + 1):
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- *                                 val = f[ii, jj, kk]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- */
--                __pyx_t_31 = __pyx_v_ii;
--                __pyx_t_32 = __pyx_v_jj;
--                __pyx_t_33 = __pyx_v_kk;
--                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_f.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_none.pyx":196
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- *                                 val = f[ii, jj, kk]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_2) {
--
--                  /* "astropy/convolution/boundary_none.pyx":199
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                  __pyx_t_34 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                  __pyx_t_35 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                  __pyx_t_36 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_36, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                  /* "astropy/convolution/boundary_none.pyx":200
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- *                     if bot != 0.:
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_none.pyx":201
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- *                     if bot != 0.:
-- *                         fixed[i, j, k] = top / bot
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L17;
--                }
--                __pyx_L17:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_none.pyx":202
-- *                                     top += val * ker
-- *                                     bot += ker
-- *                     if bot != 0.:             # <<<<<<<<<<<<<<
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_2 = (__pyx_v_bot != 0.);
--          if (__pyx_t_2) {
--
--            /* "astropy/convolution/boundary_none.pyx":203
-- *                                     bot += ker
-- *                     if bot != 0.:
-- *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_26 = __pyx_v_i;
--            __pyx_t_28 = __pyx_v_j;
--            __pyx_t_30 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L18;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_none.pyx":205
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]
-- */
--            __pyx_t_37 = __pyx_v_i;
--            __pyx_t_38 = __pyx_v_j;
--            __pyx_t_39 = __pyx_v_k;
--            __pyx_t_40 = __pyx_v_i;
--            __pyx_t_41 = __pyx_v_j;
--            __pyx_t_42 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_ [...]
--          }
--          __pyx_L18:;
--          goto __pyx_L10;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_none.pyx":207
-- *                         fixed[i, j, k] = f[i, j, k]
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--          __pyx_t_43 = __pyx_v_i;
--          __pyx_t_44 = __pyx_v_j;
--          __pyx_t_45 = __pyx_v_k;
--          __pyx_t_46 = __pyx_v_i;
--          __pyx_t_47 = __pyx_v_j;
--          __pyx_t_48 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_44 [...]
--        }
--        __pyx_L10:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_none.pyx":210
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
-- *         for j in range(wky, ny - wky):
-- *             for k in range(wkz, nz - wkz):
-- */
--  __pyx_t_12 = (__pyx_v_nx - __pyx_v_wkx);
--  for (__pyx_t_13 = __pyx_v_wkx; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_none.pyx":211
-- *     # Now run the proper convolution
-- *     for i in range(wkx, nx - wkx):
-- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
-- *             for k in range(wkz, nz - wkz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- */
--    __pyx_t_14 = (__pyx_v_ny - __pyx_v_wky);
--    for (__pyx_t_15 = __pyx_v_wky; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_none.pyx":212
-- *     for i in range(wkx, nx - wkx):
-- *         for j in range(wky, ny - wky):
-- *             for k in range(wkz, nz - wkz):             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = (__pyx_v_nz - __pyx_v_wkz);
--      for (__pyx_t_17 = __pyx_v_wkz; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_none.pyx":213
-- *         for j in range(wky, ny - wky):
-- *             for k in range(wkz, nz - wkz):
-- *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_49 = __pyx_v_i;
--        __pyx_t_50 = __pyx_v_j;
--        __pyx_t_51 = __pyx_v_k;
--        __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[2].strides))));
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_none.pyx":214
-- *             for k in range(wkz, nz - wkz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_none.pyx":215
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- *                         for jj in range(j - wky, j + wky + 1):
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_none.pyx":216
-- *                     top = 0.
-- *                     bot = 0.
-- *                     for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
-- *                         for jj in range(j - wky, j + wky + 1):
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- */
--          __pyx_t_25 = ((__pyx_v_i + __pyx_v_wkx) + 1);
--          for (__pyx_t_52 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_52 < __pyx_t_25; __pyx_t_52+=1) {
--            __pyx_v_ii = __pyx_t_52;
--
--            /* "astropy/convolution/boundary_none.pyx":217
-- *                     bot = 0.
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- *                         for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- *                                 val = fixed[ii, jj, kk]
-- */
--            __pyx_t_27 = ((__pyx_v_j + __pyx_v_wky) + 1);
--            for (__pyx_t_53 = (__pyx_v_j - __pyx_v_wky); __pyx_t_53 < __pyx_t_27; __pyx_t_53+=1) {
--              __pyx_v_jj = __pyx_t_53;
--
--              /* "astropy/convolution/boundary_none.pyx":218
-- *                     for ii in range(i - wkx, i + wkx + 1):
-- *                         for jj in range(j - wky, j + wky + 1):
-- *                             for kk in range(k - wkz, k + wkz + 1):             # <<<<<<<<<<<<<<
-- *                                 val = fixed[ii, jj, kk]
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- */
--              __pyx_t_29 = ((__pyx_v_k + __pyx_v_wkz) + 1);
--              for (__pyx_t_54 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_54 < __pyx_t_29; __pyx_t_54+=1) {
--                __pyx_v_kk = __pyx_t_54;
--
--                /* "astropy/convolution/boundary_none.pyx":219
-- *                         for jj in range(j - wky, j + wky + 1):
-- *                             for kk in range(k - wkz, k + wkz + 1):
-- *                                 val = fixed[ii, jj, kk]             # <<<<<<<<<<<<<<
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_55 = __pyx_v_ii;
--                __pyx_t_56 = __pyx_v_jj;
--                __pyx_t_57 = __pyx_v_kk;
--                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_55, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_56, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_57, __pyx_pybuffernd_fixed.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_none.pyx":222
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- */
--                __pyx_t_58 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                __pyx_t_59 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                __pyx_t_60 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_58, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_59, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_60, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_none.pyx":223
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_2) {
--
--                  /* "astropy/convolution/boundary_none.pyx":224
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- *                     if bot != 0:
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_none.pyx":225
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L32;
--                }
--                __pyx_L32:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_none.pyx":226
-- *                                     top += val * ker
-- *                                     bot += ker
-- *                     if bot != 0:             # <<<<<<<<<<<<<<
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_2 = (__pyx_v_bot != 0.0);
--          if (__pyx_t_2) {
--
--            /* "astropy/convolution/boundary_none.pyx":227
-- *                                     bot += ker
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_52 = __pyx_v_i;
--            __pyx_t_53 = __pyx_v_j;
--            __pyx_t_54 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_52, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_53, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_54, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L33;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_none.pyx":229
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]
-- */
--            __pyx_t_61 = __pyx_v_i;
--            __pyx_t_62 = __pyx_v_j;
--            __pyx_t_63 = __pyx_v_k;
--            __pyx_t_64 = __pyx_v_i;
--            __pyx_t_65 = __pyx_v_j;
--            __pyx_t_66 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_61, __pyx_pybuffernd_fixed.diminfo[0].strides, __py [...]
--          }
--          __pyx_L33:;
--          goto __pyx_L25;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_none.pyx":231
-- *                         conv[i, j, k] = fixed[i, j, k]
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--          __pyx_t_67 = __pyx_v_i;
--          __pyx_t_68 = __pyx_v_j;
--          __pyx_t_69 = __pyx_v_k;
--          __pyx_t_70 = __pyx_v_i;
--          __pyx_t_71 = __pyx_v_j;
--          __pyx_t_72 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_72, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_67, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_ [...]
--        }
--        __pyx_L25:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_none.pyx":233
-- *                     conv[i, j, k] = fixed[i, j, k]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_XDECREF(__pyx_t_9);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
--  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":194
-- *         # experimental exception made for __getbuffer__ and __releasebuffer__
-- *         # -- the details of this may change.
-- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
-- *             # This implementation of getbuffer is geared towards Cython
-- *             # requirements, and does not yet fullfill the PEP.
-- */
--
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_v_copy_shape;
--  int __pyx_v_i;
--  int __pyx_v_ndim;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  int __pyx_v_t;
--  char *__pyx_v_f;
--  PyArray_Descr *__pyx_v_descr = 0;
--  int __pyx_v_offset;
--  int __pyx_v_hasfields;
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  int __pyx_t_7;
--  PyObject *__pyx_t_8 = NULL;
--  char *__pyx_t_9;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("__getbuffer__", 0);
--  if (__pyx_v_info != NULL) {
--    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(__pyx_v_info->obj);
--  }
--
--  /* "numpy.pxd":200
-- *             # of flags
-- * 
-- *             if info == NULL: return             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int copy_shape, i, ndim
-- */
--  __pyx_t_1 = (__pyx_v_info == NULL);
--  if (__pyx_t_1) {
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":203
-- * 
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":204
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- * 
-- *             ndim = PyArray_NDIM(self)
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":206
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
--
--  /* "numpy.pxd":208
-- *             ndim = PyArray_NDIM(self)
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 copy_shape = 1
-- *             else:
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":209
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 copy_shape = 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 copy_shape = 0
-- */
--    __pyx_v_copy_shape = 1;
--    goto __pyx_L4;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":211
-- *                 copy_shape = 1
-- *             else:
-- *                 copy_shape = 0             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- */
--    __pyx_v_copy_shape = 0;
--  }
--  __pyx_L4:;
--
--  /* "numpy.pxd":213
-- *                 copy_shape = 0
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- */
--  __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":214
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- */
--    __pyx_t_2 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS));
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L5;
--  }
--  __pyx_L5:;
--
--  /* "numpy.pxd":217
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- */
--  __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":218
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- */
--    __pyx_t_1 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS));
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (__pyx_t_2) {
--
--    /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L6;
--  }
--  __pyx_L6:;
--
--  /* "numpy.pxd":221
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
-- *             info.ndim = ndim
-- *             if copy_shape:
-- */
--  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
--
--  /* "numpy.pxd":222
-- * 
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim             # <<<<<<<<<<<<<<
-- *             if copy_shape:
-- *                 # Allocate new buffer for strides and shape info.
-- */
--  __pyx_v_info->ndim = __pyx_v_ndim;
--
--  /* "numpy.pxd":223
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim
-- *             if copy_shape:             # <<<<<<<<<<<<<<
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- */
--  if (__pyx_v_copy_shape) {
--
--    /* "numpy.pxd":226
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
--
--    /* "numpy.pxd":227
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- */
--    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
--
--    /* "numpy.pxd":228
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- */
--    __pyx_t_5 = __pyx_v_ndim;
--    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
--      __pyx_v_i = __pyx_t_6;
--
--      /* "numpy.pxd":229
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- */
--      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
--
--      /* "numpy.pxd":230
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- */
--      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
--    }
--    goto __pyx_L7;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":232
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
--
--    /* "numpy.pxd":233
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- */
--    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
--  }
--  __pyx_L7:;
--
--  /* "numpy.pxd":234
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- */
--  __pyx_v_info->suboffsets = NULL;
--
--  /* "numpy.pxd":235
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- * 
-- */
--  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
--
--  /* "numpy.pxd":236
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int t
-- */
--  __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(__pyx_v_self));
--
--  /* "numpy.pxd":239
-- * 
-- *             cdef int t
-- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
-- *             cdef dtype descr = self.descr
-- *             cdef list stack
-- */
--  __pyx_v_f = NULL;
--
--  /* "numpy.pxd":240
-- *             cdef int t
-- *             cdef char* f = NULL
-- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
-- *             cdef list stack
-- *             cdef int offset
-- */
--  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
--  __Pyx_INCREF(__pyx_t_4);
--  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "numpy.pxd":244
-- *             cdef int offset
-- * 
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields and not copy_shape:
-- */
--  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
--
--  /* "numpy.pxd":246
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
-- * 
-- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
-- *                 # do not call releasebuffer
-- *                 info.obj = None
-- */
--  __pyx_t_2 = (!__pyx_v_hasfields);
--  if (__pyx_t_2) {
--    __pyx_t_3 = (!__pyx_v_copy_shape);
--    __pyx_t_1 = __pyx_t_3;
--  } else {
--    __pyx_t_1 = __pyx_t_2;
--  }
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":248
-- *             if not hasfields and not copy_shape:
-- *                 # do not call releasebuffer
-- *                 info.obj = None             # <<<<<<<<<<<<<<
-- *             else:
-- *                 # need to call releasebuffer
-- */
--    __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(Py_None);
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = Py_None;
--    goto __pyx_L10;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":251
-- *             else:
-- *                 # need to call releasebuffer
-- *                 info.obj = self             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields:
-- */
--    __Pyx_INCREF(((PyObject *)__pyx_v_self));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
--  }
--  __pyx_L10:;
--
--  /* "numpy.pxd":253
-- *                 info.obj = self
-- * 
-- *             if not hasfields:             # <<<<<<<<<<<<<<
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- */
--  __pyx_t_1 = (!__pyx_v_hasfields);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":254
-- * 
-- *             if not hasfields:
-- *                 t = descr.type_num             # <<<<<<<<<<<<<<
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- */
--    __pyx_t_5 = __pyx_v_descr->type_num;
--    __pyx_v_t = __pyx_t_5;
--
--    /* "numpy.pxd":255
-- *             if not hasfields:
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_1 = (__pyx_v_descr->byteorder == '>');
--    if (__pyx_t_1) {
--      __pyx_t_2 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_2 = __pyx_t_1;
--    }
--    if (!__pyx_t_2) {
--
--      /* "numpy.pxd":256
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- */
--      __pyx_t_1 = (__pyx_v_descr->byteorder == '<');
--      if (__pyx_t_1) {
--        __pyx_t_3 = (!__pyx_v_little_endian);
--        __pyx_t_7 = __pyx_t_3;
--      } else {
--        __pyx_t_7 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_7;
--    } else {
--      __pyx_t_1 = __pyx_t_2;
--    }
--    if (__pyx_t_1) {
--
--      /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L12;
--    }
--    __pyx_L12:;
--
--    /* "numpy.pxd":258
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_BYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__b;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":259
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UBYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__B;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":260
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_SHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__h;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":261
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_USHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__H;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":262
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_INT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__i;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":263
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UINT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__I;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":264
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__l;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":265
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__L;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":266
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":267
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":268
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_FLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__f;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":269
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__d;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":270
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__g;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":271
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zf;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":272
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zd;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":273
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zg;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":274
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_OBJECT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__O;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":276
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *                 info.format = f
-- *                 return
-- */
--      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
--      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
--      __pyx_t_8 = 0;
--      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_8);
--      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--    __pyx_L13:;
--
--    /* "numpy.pxd":277
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f             # <<<<<<<<<<<<<<
-- *                 return
-- *             else:
-- */
--    __pyx_v_info->format = __pyx_v_f;
--
--    /* "numpy.pxd":278
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f
-- *                 return             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- */
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L11;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":280
-- *                 return
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0
-- */
--    __pyx_v_info->format = ((char *)malloc(255));
--
--    /* "numpy.pxd":281
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
-- *                 offset = 0
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- */
--    (__pyx_v_info->format[0]) = '^';
--
--    /* "numpy.pxd":282
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0             # <<<<<<<<<<<<<<
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- */
--    __pyx_v_offset = 0;
--
--    /* "numpy.pxd":285
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)             # <<<<<<<<<<<<<<
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- */
--    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_v_f = __pyx_t_9;
--
--    /* "numpy.pxd":286
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)
-- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- */
--    (__pyx_v_f[0]) = '\x00';
--  }
--  __pyx_L11:;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = -1;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
--  }
--  goto __pyx_L2;
--  __pyx_L0:;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
--    __Pyx_GOTREF(Py_None);
--    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
--  }
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
--  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":288
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- */
--
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
--
--  /* "numpy.pxd":289
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_t_1 = PyArray_HASFIELDS(__pyx_v_self);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":290
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)
-- */
--    free(__pyx_v_info->format);
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":291
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.strides)
-- *                 # info.shape was stored after info.strides in the same block
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":292
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
-- *                 # info.shape was stored after info.strides in the same block
-- * 
-- */
--    free(__pyx_v_info->strides);
--    goto __pyx_L4;
--  }
--  __pyx_L4:;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":768
-- * ctypedef npy_cdouble     complex_t
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
--
--  /* "numpy.pxd":769
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":771
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
--
--  /* "numpy.pxd":772
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":774
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
--
--  /* "numpy.pxd":775
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":777
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
--
--  /* "numpy.pxd":778
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":780
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
--
--  /* "numpy.pxd":781
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":783
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
-- *     # Recursive utility function used in __getbuffer__ to get format
-- *     # string. The new location in the format string is returned.
-- */
--
--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) {
--  PyArray_Descr *__pyx_v_child = 0;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  PyObject *__pyx_v_fields = 0;
--  PyObject *__pyx_v_childname = NULL;
--  PyObject *__pyx_v_new_offset = NULL;
--  PyObject *__pyx_v_t = NULL;
--  char *__pyx_r;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  Py_ssize_t __pyx_t_2;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *(*__pyx_t_6)(PyObject *);
--  int __pyx_t_7;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  long __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
--
--  /* "numpy.pxd":790
-- *     cdef int delta_offset
-- *     cdef tuple i
-- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- *     cdef tuple fields
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":791
-- *     cdef tuple i
-- *     cdef int endian_detector = 1
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- *     cdef tuple fields
-- * 
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":794
-- *     cdef tuple fields
-- * 
-- *     for childname in descr.names:             # <<<<<<<<<<<<<<
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields
-- */
--  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
--  for (;;) {
--    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
--    #if CYTHON_COMPILING_IN_CPYTHON
--    __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_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #else
--    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #endif
--    __Pyx_XDECREF(__pyx_v_childname);
--    __pyx_v_childname = __pyx_t_3;
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":795
-- * 
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
-- *         child, new_offset = fields
-- * 
-- */
--    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
--    __pyx_v_fields = ((PyObject*)__pyx_t_3);
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":796
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields             # <<<<<<<<<<<<<<
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- */
--    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
--      PyObject* sequence = ((PyObject *)__pyx_v_fields);
--      #if CYTHON_COMPILING_IN_CPYTHON
--      Py_ssize_t size = Py_SIZE(sequence);
--      #else
--      Py_ssize_t size = PySequence_Size(sequence);
--      #endif
--      if (unlikely(size != 2)) {
--        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
--        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      #if CYTHON_COMPILING_IN_CPYTHON
--      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
--      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
--      __Pyx_INCREF(__pyx_t_3);
--      __Pyx_INCREF(__pyx_t_4);
--      #else
--      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      #endif
--    } else if (1) {
--      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else
--    {
--      Py_ssize_t index = -1;
--      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
--      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_3);
--      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_4);
--      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_t_6 = NULL;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      goto __pyx_L6_unpacking_done;
--      __pyx_L5_unpacking_failed:;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_6 = NULL;
--      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_L6_unpacking_done:;
--    }
--    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
--    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
--    __pyx_t_3 = 0;
--    __Pyx_XDECREF(__pyx_v_new_offset);
--    __pyx_v_new_offset = __pyx_t_4;
--    __pyx_t_4 = 0;
--
--    /* "numpy.pxd":798
-- *         child, new_offset = fields
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- */
--    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L7;
--    }
--    __pyx_L7:;
--
--    /* "numpy.pxd":801
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_7 = (__pyx_v_child->byteorder == '>');
--    if (__pyx_t_7) {
--      __pyx_t_8 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_8 = __pyx_t_7;
--    }
--    if (!__pyx_t_8) {
--
--      /* "numpy.pxd":802
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *             raise ValueError(u"Non-native byte order not supported")
-- *             # One could encode it in the format string and have Cython
-- */
--      __pyx_t_7 = (__pyx_v_child->byteorder == '<');
--      if (__pyx_t_7) {
--        __pyx_t_9 = (!__pyx_v_little_endian);
--        __pyx_t_10 = __pyx_t_9;
--      } else {
--        __pyx_t_10 = __pyx_t_7;
--      }
--      __pyx_t_7 = __pyx_t_10;
--    } else {
--      __pyx_t_7 = __pyx_t_8;
--    }
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L8;
--    }
--    __pyx_L8:;
--
--    /* "numpy.pxd":813
-- * 
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- */
--    while (1) {
--      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (!__pyx_t_7) break;
--
--      /* "numpy.pxd":814
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
-- *             f += 1
-- *             offset[0] += 1
-- */
--      (__pyx_v_f[0]) = 120;
--
--      /* "numpy.pxd":815
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1             # <<<<<<<<<<<<<<
-- *             offset[0] += 1
-- * 
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--
--      /* "numpy.pxd":816
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- *             offset[0] += 1             # <<<<<<<<<<<<<<
-- * 
-- *         offset[0] += child.itemsize
-- */
--      __pyx_t_11 = 0;
--      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
--    }
--
--    /* "numpy.pxd":818
-- *             offset[0] += 1
-- * 
-- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- */
--    __pyx_t_11 = 0;
--    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
--
--    /* "numpy.pxd":820
-- *         offset[0] += child.itemsize
-- * 
-- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
-- *             t = child.type_num
-- *             if end - f < 5:
-- */
--    __pyx_t_7 = (!PyDataType_HASFIELDS(__pyx_v_child));
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":821
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num             # <<<<<<<<<<<<<<
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- */
--      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __Pyx_XDECREF(__pyx_v_t);
--      __pyx_v_t = __pyx_t_3;
--      __pyx_t_3 = 0;
--
--      /* "numpy.pxd":822
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num
-- *             if end - f < 5:             # <<<<<<<<<<<<<<
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- * 
-- */
--      __pyx_t_7 = ((__pyx_v_end - __pyx_v_f) < 5);
--      if (__pyx_t_7) {
--
--        /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--
--      /* "numpy.pxd":826
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 98;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":827
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 66;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":828
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 104;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":829
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 72;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":830
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 105;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":831
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 73;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":832
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 108;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":833
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 76;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":834
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 113;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":835
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 81;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":836
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 102;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":837
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 100;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":838
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 103;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":839
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 102;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":840
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 100;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":841
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 103;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":842
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 79;
--        goto __pyx_L13;
--      }
--      /*else*/ {
--
--        /* "numpy.pxd":844
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *             f += 1
-- *         else:
-- */
--        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
--        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--        __pyx_t_5 = 0;
--        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_5);
--        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      __pyx_L13:;
--
--      /* "numpy.pxd":845
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *             f += 1             # <<<<<<<<<<<<<<
-- *         else:
-- *             # Cython ignores struct boundary information ("T{...}"),
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--      goto __pyx_L11;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":849
-- *             # Cython ignores struct boundary information ("T{...}"),
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
-- *     return f
-- * 
-- */
--      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_v_f = __pyx_t_12;
--    }
--    __pyx_L11:;
--  }
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "numpy.pxd":850
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)
-- *     return f             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __pyx_r = __pyx_v_f;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_child);
--  __Pyx_XDECREF(__pyx_v_fields);
--  __Pyx_XDECREF(__pyx_v_childname);
--  __Pyx_XDECREF(__pyx_v_new_offset);
--  __Pyx_XDECREF(__pyx_v_t);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":965
-- * 
-- * 
-- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- */
--
--static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
--  PyObject *__pyx_v_baseptr;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("set_array_base", 0);
--
--  /* "numpy.pxd":967
-- * cdef inline void set_array_base(ndarray arr, object base):
-- *      cdef PyObject* baseptr
-- *      if base is None:             # <<<<<<<<<<<<<<
-- *          baseptr = NULL
-- *      else:
-- */
--  __pyx_t_1 = (__pyx_v_base == Py_None);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":968
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- *          baseptr = NULL             # <<<<<<<<<<<<<<
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- */
--    __pyx_v_baseptr = NULL;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":970
-- *          baseptr = NULL
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- */
--    Py_INCREF(__pyx_v_base);
--
--    /* "numpy.pxd":971
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr
-- */
--    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":972
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
-- *      arr.base = baseptr
-- * 
-- */
--  Py_XDECREF(__pyx_v_arr->base);
--
--  /* "numpy.pxd":973
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- */
--  __pyx_v_arr->base = __pyx_v_baseptr;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("get_array_base", 0);
--
--  /* "numpy.pxd":976
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
-- *         return None
-- *     else:
-- */
--  __pyx_t_1 = (__pyx_v_arr->base == NULL);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":977
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:
-- *         return None             # <<<<<<<<<<<<<<
-- *     else:
-- *         return <object>arr.base
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(Py_None);
--    __pyx_r = Py_None;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":979
-- *         return None
-- *     else:
-- *         return <object>arr.base             # <<<<<<<<<<<<<<
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
--    __pyx_r = ((PyObject *)__pyx_v_arr->base);
--    goto __pyx_L0;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--static PyMethodDef __pyx_methods[] = {
--  {0, 0, 0, 0}
--};
--
--#if PY_MAJOR_VERSION >= 3
--static struct PyModuleDef __pyx_moduledef = {
--  #if PY_VERSION_HEX < 0x03020000
--    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
--  #else
--    PyModuleDef_HEAD_INIT,
--  #endif
--    __Pyx_NAMESTR("boundary_none"),
--    0, /* m_doc */
--    -1, /* m_size */
--    __pyx_methods /* m_methods */,
--    NULL, /* m_reload */
--    NULL, /* m_traverse */
--    NULL, /* m_clear */
--    NULL /* m_free */
--};
--#endif
--
--static __Pyx_StringTabEntry __pyx_string_tab[] = {
--  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
--  {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0},
--  {&__pyx_kp_u_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 1, 0, 0},
--  {&__pyx_kp_u_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 1, 0, 0},
--  {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1},
--  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
--  {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1},
--  {&__pyx_n_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 1},
--  {&__pyx_n_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 1},
--  {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0},
--  {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0},
--  {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0},
--  {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1},
--  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
--  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
--  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
--  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
--  {&__pyx_n_s__bot, __pyx_k__bot, sizeof(__pyx_k__bot), 0, 0, 1, 1},
--  {&__pyx_n_s__conv, __pyx_k__conv, sizeof(__pyx_k__conv), 0, 0, 1, 1},
--  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
--  {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1},
--  {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1},
--  {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1},
--  {&__pyx_n_s__g, __pyx_k__g, sizeof(__pyx_k__g), 0, 0, 1, 1},
--  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
--  {&__pyx_n_s__ii, __pyx_k__ii, sizeof(__pyx_k__ii), 0, 0, 1, 1},
--  {&__pyx_n_s__iimax, __pyx_k__iimax, sizeof(__pyx_k__iimax), 0, 0, 1, 1},
--  {&__pyx_n_s__iimin, __pyx_k__iimin, sizeof(__pyx_k__iimin), 0, 0, 1, 1},
--  {&__pyx_n_s__j, __pyx_k__j, sizeof(__pyx_k__j), 0, 0, 1, 1},
--  {&__pyx_n_s__jj, __pyx_k__jj, sizeof(__pyx_k__jj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmax, __pyx_k__jjmax, sizeof(__pyx_k__jjmax), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmin, __pyx_k__jjmin, sizeof(__pyx_k__jjmin), 0, 0, 1, 1},
--  {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1},
--  {&__pyx_n_s__ker, __pyx_k__ker, sizeof(__pyx_k__ker), 0, 0, 1, 1},
--  {&__pyx_n_s__kk, __pyx_k__kk, sizeof(__pyx_k__kk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmax, __pyx_k__kkmax, sizeof(__pyx_k__kkmax), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmin, __pyx_k__kkmin, sizeof(__pyx_k__kkmin), 0, 0, 1, 1},
--  {&__pyx_n_s__nkx, __pyx_k__nkx, sizeof(__pyx_k__nkx), 0, 0, 1, 1},
--  {&__pyx_n_s__nky, __pyx_k__nky, sizeof(__pyx_k__nky), 0, 0, 1, 1},
--  {&__pyx_n_s__nkz, __pyx_k__nkz, sizeof(__pyx_k__nkz), 0, 0, 1, 1},
--  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
--  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
--  {&__pyx_n_s__nx, __pyx_k__nx, sizeof(__pyx_k__nx), 0, 0, 1, 1},
--  {&__pyx_n_s__ny, __pyx_k__ny, sizeof(__pyx_k__ny), 0, 0, 1, 1},
--  {&__pyx_n_s__nz, __pyx_k__nz, sizeof(__pyx_k__nz), 0, 0, 1, 1},
--  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
--  {&__pyx_n_s__top, __pyx_k__top, sizeof(__pyx_k__top), 0, 0, 1, 1},
--  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
--  {&__pyx_n_s__wkx, __pyx_k__wkx, sizeof(__pyx_k__wkx), 0, 0, 1, 1},
--  {&__pyx_n_s__wky, __pyx_k__wky, sizeof(__pyx_k__wky), 0, 0, 1, 1},
--  {&__pyx_n_s__wkz, __pyx_k__wkz, sizeof(__pyx_k__wkz), 0, 0, 1, 1},
--  {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1},
--  {0, 0, 0, 0, 0, 0, 0}
--};
--static int __Pyx_InitCachedBuiltins(void) {
--  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--static int __Pyx_InitCachedConstants(void) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
--
--  /* "astropy/convolution/boundary_none.pyx":20
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_2);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
--
--  /* "astropy/convolution/boundary_none.pyx":84
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_3);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
--
--  /* "astropy/convolution/boundary_none.pyx":158
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_4);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
--
--  /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_6);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
--
--  /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--  __pyx_k_tuple_8 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_7)); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_8);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8));
--
--  /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_10);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
--
--  /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_13);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
--
--  /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--  __pyx_k_tuple_14 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_14);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14));
--
--  /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--  __pyx_k_tuple_16 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_15)); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_16);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
--
--  /* "astropy/convolution/boundary_none.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--  __pyx_k_tuple_17 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyObject *)__pyx_n_s__val)); if  [...]
--  __Pyx_GOTREF(__pyx_k_tuple_17);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
--  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 16, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_none.pyx":80
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--  __pyx_k_tuple_22 = PyTuple_Pack(22, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__jj), ((PyObject *)__pyx_n_s__iimin), ((PyObject [...]
--  __Pyx_GOTREF(__pyx_k_tuple_22);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
--  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 22, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 80, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_none.pyx":154
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--  __pyx_k_tuple_25 = PyTuple_Pack(29, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject  [...]
--  __Pyx_GOTREF(__pyx_k_tuple_25);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
--  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 29, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 154, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_RefNannyFinishContext();
--  return 0;
--  __pyx_L1_error:;
--  __Pyx_RefNannyFinishContext();
--  return -1;
--}
--
--static int __Pyx_InitGlobals(void) {
--  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--#if PY_MAJOR_VERSION < 3
--PyMODINIT_FUNC initboundary_none(void); /*proto*/
--PyMODINIT_FUNC initboundary_none(void)
--#else
--PyMODINIT_FUNC PyInit_boundary_none(void); /*proto*/
--PyMODINIT_FUNC PyInit_boundary_none(void)
--#endif
--{
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  __Pyx_RefNannyDeclarations
--  #if CYTHON_REFNANNY
--  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
--  if (!__Pyx_RefNanny) {
--      PyErr_Clear();
--      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
--      if (!__Pyx_RefNanny)
--          Py_FatalError("failed to import 'refnanny' module");
--  }
--  #endif
--  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_boundary_none(void)", 0);
--  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #ifdef __Pyx_CyFunction_USED
--  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_FusedFunction_USED
--  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_Generator_USED
--  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  /*--- Library function declarations ---*/
--  /*--- Threads initialization code ---*/
--  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
--  #ifdef WITH_THREAD /* Python build with threading support? */
--  PyEval_InitThreads();
--  #endif
--  #endif
--  /*--- Module creation code ---*/
--  #if PY_MAJOR_VERSION < 3
--  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("boundary_none"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
--  #else
--  __pyx_m = PyModule_Create(&__pyx_moduledef);
--  #endif
--  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if PY_MAJOR_VERSION >= 3
--  {
--    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_none")) {
--      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_none", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--  }
--  #endif
--  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if CYTHON_COMPILING_IN_PYPY
--  Py_INCREF(__pyx_b);
--  #endif
--  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  /*--- Initialize various global constants etc. ---*/
--  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_module_is_main_astropy__convolution__boundary_none) {
--    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  }
--  /*--- Builtin init code ---*/
--  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Constants init code ---*/
--  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Global init code ---*/
--  /*--- Variable export code ---*/
--  /*--- Function export code ---*/
--  /*--- Type init code ---*/
--  /*--- Type import code ---*/
--  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
--  #if CYTHON_COMPILING_IN_PYPY
--  sizeof(PyTypeObject),
--  #else
--  sizeof(PyHeapTypeObject),
--  #endif
--  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Variable import code ---*/
--  /*--- Function import code ---*/
--  /*--- Execution code ---*/
--
--  /* "astropy/convolution/boundary_none.pyx":3
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst
-- * from __future__ import division
-- * import numpy as np             # <<<<<<<<<<<<<<
-- * cimport numpy as np
-- * 
-- */
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":6
-- * cimport numpy as np
-- * 
-- * DTYPE = np.float             # <<<<<<<<<<<<<<
-- * ctypedef np.float_t DTYPE_t
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":80
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":154
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_none.pyx":1
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
-- * from __future__ import division
-- * import numpy as np
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--
--  /* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  if (__pyx_m) {
--    __Pyx_AddTraceback("init astropy.convolution.boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
--    Py_DECREF(__pyx_m); __pyx_m = 0;
--  } else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_none");
--  }
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  #if PY_MAJOR_VERSION < 3
--  return;
--  #else
--  return __pyx_m;
--  #endif
--}
--
--/* Runtime support code */
--#if CYTHON_REFNANNY
--static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
--    PyObject *m = NULL, *p = NULL;
--    void *r = NULL;
--    m = PyImport_ImportModule((char *)modname);
--    if (!m) goto end;
--    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
--    if (!p) goto end;
--    r = PyLong_AsVoidPtr(p);
--end:
--    Py_XDECREF(p);
--    Py_XDECREF(m);
--    return (__Pyx_RefNannyAPIStruct *)r;
--}
--#endif /* CYTHON_REFNANNY */
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
--    PyObject *result;
--    result = PyObject_GetAttr(dict, name);
--    if (!result) {
--        if (dict != __pyx_b) {
--            PyErr_Clear();
--            result = PyObject_GetAttr(__pyx_b, name);
--        }
--        if (!result) {
--            PyErr_SetObject(PyExc_NameError, name);
--        }
--    }
--    return result;
--}
--
--static void __Pyx_RaiseArgtupleInvalid(
--    const char* func_name,
--    int exact,
--    Py_ssize_t num_min,
--    Py_ssize_t num_max,
--    Py_ssize_t num_found)
--{
--    Py_ssize_t num_expected;
--    const char *more_or_less;
--    if (num_found < num_min) {
--        num_expected = num_min;
--        more_or_less = "at least";
--    } else {
--        num_expected = num_max;
--        more_or_less = "at most";
--    }
--    if (exact) {
--        more_or_less = "exactly";
--    }
--    PyErr_Format(PyExc_TypeError,
--                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
--                 func_name, more_or_less, num_expected,
--                 (num_expected == 1) ? "" : "s", num_found);
--}
--
--static void __Pyx_RaiseDoubleKeywordsError(
--    const char* func_name,
--    PyObject* kw_name)
--{
--    PyErr_Format(PyExc_TypeError,
--        #if PY_MAJOR_VERSION >= 3
--        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
--        #else
--        "%s() got multiple values for keyword argument '%s'", func_name,
--        PyString_AsString(kw_name));
--        #endif
--}
--
--static int __Pyx_ParseOptionalKeywords(
--    PyObject *kwds,
--    PyObject **argnames[],
--    PyObject *kwds2,
--    PyObject *values[],
--    Py_ssize_t num_pos_args,
--    const char* function_name)
--{
--    PyObject *key = 0, *value = 0;
--    Py_ssize_t pos = 0;
--    PyObject*** name;
--    PyObject*** first_kw_arg = argnames + num_pos_args;
--    while (PyDict_Next(kwds, &pos, &key, &value)) {
--        name = first_kw_arg;
--        while (*name && (**name != key)) name++;
--        if (*name) {
--            values[name-argnames] = value;
--            continue;
--        }
--        name = first_kw_arg;
--        #if PY_MAJOR_VERSION < 3
--        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
--            while (*name) {
--                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
--                        && _PyString_Eq(**name, key)) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    if ((**argname == key) || (
--                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
--                             && _PyString_Eq(**argname, key))) {
--                        goto arg_passed_twice;
--                    }
--                    argname++;
--                }
--            }
--        } else
--        #endif
--        if (likely(PyUnicode_Check(key))) {
--            while (*name) {
--                int cmp = (**name == key) ? 0 :
--                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
--                #endif
--                    PyUnicode_Compare(**name, key);
--                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                if (cmp == 0) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    int cmp = (**argname == key) ? 0 :
--                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
--                    #endif
--                        PyUnicode_Compare(**argname, key);
--                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                    if (cmp == 0) goto arg_passed_twice;
--                    argname++;
--                }
--            }
--        } else
--            goto invalid_keyword_type;
--        if (kwds2) {
--            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
--        } else {
--            goto invalid_keyword;
--        }
--    }
--    return 0;
--arg_passed_twice:
--    __Pyx_RaiseDoubleKeywordsError(function_name, key);
--    goto bad;
--invalid_keyword_type:
--    PyErr_Format(PyExc_TypeError,
--        "%s() keywords must be strings", function_name);
--    goto bad;
--invalid_keyword:
--    PyErr_Format(PyExc_TypeError,
--    #if PY_MAJOR_VERSION < 3
--        "%s() got an unexpected keyword argument '%s'",
--        function_name, PyString_AsString(key));
--    #else
--        "%s() got an unexpected keyword argument '%U'",
--        function_name, key);
--    #endif
--bad:
--    return -1;
--}
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact)
--{
--    if (!type) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (none_allowed && obj == Py_None) return 1;
--    else if (exact) {
--        if (Py_TYPE(obj) == type) return 1;
--    }
--    else {
--        if (PyObject_TypeCheck(obj, type)) return 1;
--    }
--    PyErr_Format(PyExc_TypeError,
--        "Argument '%s' has incorrect type (expected %s, got %s)",
--        name, type->tp_name, Py_TYPE(obj)->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_IsLittleEndian(void) {
--  unsigned int n = 1;
--  return *(unsigned char*)(&n) != 0;
--}
--static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
--                              __Pyx_BufFmt_StackElem* stack,
--                              __Pyx_TypeInfo* type) {
--  stack[0].field = &ctx->root;
--  stack[0].parent_offset = 0;
--  ctx->root.type = type;
--  ctx->root.name = "buffer dtype";
--  ctx->root.offset = 0;
--  ctx->head = stack;
--  ctx->head->field = &ctx->root;
--  ctx->fmt_offset = 0;
--  ctx->head->parent_offset = 0;
--  ctx->new_packmode = '@';
--  ctx->enc_packmode = '@';
--  ctx->new_count = 1;
--  ctx->enc_count = 0;
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  ctx->is_valid_array = 0;
--  ctx->struct_alignment = 0;
--  while (type->typegroup == 'S') {
--    ++ctx->head;
--    ctx->head->field = type->fields;
--    ctx->head->parent_offset = 0;
--    type = type->fields->type;
--  }
--}
--static int __Pyx_BufFmt_ParseNumber(const char** ts) {
--    int count;
--    const char* t = *ts;
--    if (*t < '0' || *t > '9') {
--      return -1;
--    } else {
--        count = *t++ - '0';
--        while (*t >= '0' && *t < '9') {
--            count *= 10;
--            count += *t++ - '0';
--        }
--    }
--    *ts = t;
--    return count;
--}
--static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
--    int number = __Pyx_BufFmt_ParseNumber(ts);
--    if (number == -1) /* First char was not a digit */
--        PyErr_Format(PyExc_ValueError,\
--                     "Does not understand character buffer dtype format string ('%c')", **ts);
--    return number;
--}
--static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
--  PyErr_Format(PyExc_ValueError,
--               "Unexpected format string character: '%c'", ch);
--}
--static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': return "'char'";
--    case 'b': return "'signed char'";
--    case 'B': return "'unsigned char'";
--    case 'h': return "'short'";
--    case 'H': return "'unsigned short'";
--    case 'i': return "'int'";
--    case 'I': return "'unsigned int'";
--    case 'l': return "'long'";
--    case 'L': return "'unsigned long'";
--    case 'q': return "'long long'";
--    case 'Q': return "'unsigned long long'";
--    case 'f': return (is_complex ? "'complex float'" : "'float'");
--    case 'd': return (is_complex ? "'complex double'" : "'double'");
--    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
--    case 'T': return "a struct";
--    case 'O': return "Python object";
--    case 'P': return "a pointer";
--    case 's': case 'p': return "a string";
--    case 0: return "end";
--    default: return "unparseable format string";
--  }
--}
--static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return 2;
--    case 'i': case 'I': case 'l': case 'L': return 4;
--    case 'q': case 'Q': return 8;
--    case 'f': return (is_complex ? 8 : 4);
--    case 'd': return (is_complex ? 16 : 8);
--    case 'g': {
--      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
--      return 0;
--    }
--    case 'O': case 'P': return sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(short);
--    case 'i': case 'I': return sizeof(int);
--    case 'l': case 'L': return sizeof(long);
--    #ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
--    #endif
--    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
--    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
--    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
--    case 'O': case 'P': return sizeof(void*);
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--typedef struct { char c; short x; } __Pyx_st_short;
--typedef struct { char c; int x; } __Pyx_st_int;
--typedef struct { char c; long x; } __Pyx_st_long;
--typedef struct { char c; float x; } __Pyx_st_float;
--typedef struct { char c; double x; } __Pyx_st_double;
--typedef struct { char c; long double x; } __Pyx_st_longdouble;
--typedef struct { char c; void *x; } __Pyx_st_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--/* These are for computing the padding at the end of the struct to align
--   on the first member of the struct. This will probably the same as above,
--   but we don't have any guarantees.
-- */
--typedef struct { short x; char c; } __Pyx_pad_short;
--typedef struct { int x; char c; } __Pyx_pad_int;
--typedef struct { long x; char c; } __Pyx_pad_long;
--typedef struct { float x; char c; } __Pyx_pad_float;
--typedef struct { double x; char c; } __Pyx_pad_double;
--typedef struct { long double x; char c; } __Pyx_pad_longdouble;
--typedef struct { void *x; char c; } __Pyx_pad_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
--  switch (ch) {
--    case 'c':
--        return 'H';
--    case 'b': case 'h': case 'i':
--    case 'l': case 'q': case 's': case 'p':
--        return 'I';
--    case 'B': case 'H': case 'I': case 'L': case 'Q':
--        return 'U';
--    case 'f': case 'd': case 'g':
--        return (is_complex ? 'C' : 'R');
--    case 'O':
--        return 'O';
--    case 'P':
--        return 'P';
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
--  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
--    const char* expected;
--    const char* quote;
--    if (ctx->head == NULL) {
--      expected = "end";
--      quote = "";
--    } else {
--      expected = ctx->head->field->type->name;
--      quote = "'";
--    }
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected %s%s%s but got %s",
--                 quote, expected, quote,
--                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
--  } else {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_StructField* parent = (ctx->head - 1)->field;
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
--                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
--                 parent->type->name, field->name);
--  }
--}
--static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
--  char group;
--  size_t size, offset, arraysize = 1;
--  if (ctx->enc_type == 0) return 0;
--  if (ctx->head->field->type->arraysize[0]) {
--    int i, ndim = 0;
--    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
--        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
--        ndim = 1;
--        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
--            PyErr_Format(PyExc_ValueError,
--                         "Expected a dimension of size %zu, got %zu",
--                         ctx->head->field->type->arraysize[0], ctx->enc_count);
--            return -1;
--        }
--    }
--    if (!ctx->is_valid_array) {
--      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
--                   ctx->head->field->type->ndim, ndim);
--      return -1;
--    }
--    for (i = 0; i < ctx->head->field->type->ndim; i++) {
--      arraysize *= ctx->head->field->type->arraysize[i];
--    }
--    ctx->is_valid_array = 0;
--    ctx->enc_count = 1;
--  }
--  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
--  do {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_TypeInfo* type = field->type;
--    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
--      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
--    } else {
--      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
--    }
--    if (ctx->enc_packmode == '@') {
--      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
--      size_t align_mod_offset;
--      if (align_at == 0) return -1;
--      align_mod_offset = ctx->fmt_offset % align_at;
--      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
--      if (ctx->struct_alignment == 0)
--          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
--                                                                 ctx->is_complex);
--    }
--    if (type->size != size || type->typegroup != group) {
--      if (type->typegroup == 'C' && type->fields != NULL) {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        ++ctx->head;
--        ctx->head->field = type->fields;
--        ctx->head->parent_offset = parent_offset;
--        continue;
--      }
--      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
--      } else {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--      }
--    }
--    offset = ctx->head->parent_offset + field->offset;
--    if (ctx->fmt_offset != offset) {
--      PyErr_Format(PyExc_ValueError,
--                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
--                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
--      return -1;
--    }
--    ctx->fmt_offset += size;
--    if (arraysize)
--      ctx->fmt_offset += (arraysize - 1) * size;
--    --ctx->enc_count; /* Consume from buffer string */
--    while (1) {
--      if (field == &ctx->root) {
--        ctx->head = NULL;
--        if (ctx->enc_count != 0) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--        }
--        break; /* breaks both loops as ctx->enc_count == 0 */
--      }
--      ctx->head->field = ++field;
--      if (field->type == NULL) {
--        --ctx->head;
--        field = ctx->head->field;
--        continue;
--      } else if (field->type->typegroup == 'S') {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        if (field->type->fields->type == NULL) continue; /* empty struct */
--        field = field->type->fields;
--        ++ctx->head;
--        ctx->head->field = field;
--        ctx->head->parent_offset = parent_offset;
--        break;
--      } else {
--        break;
--      }
--    }
--  } while (ctx->enc_count);
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  return 0;
--}
--static CYTHON_INLINE PyObject *
--__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
--{
--    const char *ts = *tsp;
--    int i = 0, number;
--    int ndim = ctx->head->field->type->ndim;
--;
--    ++ts;
--    if (ctx->new_count != 1) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Cannot handle repeated arrays in format string");
--        return NULL;
--    }
--    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--    while (*ts && *ts != ')') {
--        if (isspace(*ts))
--            continue;
--        number = __Pyx_BufFmt_ExpectNumber(&ts);
--        if (number == -1) return NULL;
--        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
--            return PyErr_Format(PyExc_ValueError,
--                        "Expected a dimension of size %zu, got %d",
--                        ctx->head->field->type->arraysize[i], number);
--        if (*ts != ',' && *ts != ')')
--            return PyErr_Format(PyExc_ValueError,
--                                "Expected a comma in format string, got '%c'", *ts);
--        if (*ts == ',') ts++;
--        i++;
--    }
--    if (i != ndim)
--        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
--                            ctx->head->field->type->ndim, i);
--    if (!*ts) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Unexpected end of format string, expected ')'");
--        return NULL;
--    }
--    ctx->is_valid_array = 1;
--    ctx->new_count = 1;
--    *tsp = ++ts;
--    return Py_None;
--}
--static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
--  int got_Z = 0;
--  while (1) {
--    switch(*ts) {
--      case 0:
--        if (ctx->enc_type != 0 && ctx->head == NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        if (ctx->head != NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--                return ts;
--      case ' ':
--      case 10:
--      case 13:
--        ++ts;
--        break;
--      case '<':
--        if (!__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '>':
--      case '!':
--        if (__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '=':
--      case '@':
--      case '^':
--        ctx->new_packmode = *ts++;
--        break;
--      case 'T': /* substruct */
--        {
--          const char* ts_after_sub;
--          size_t i, struct_count = ctx->new_count;
--          size_t struct_alignment = ctx->struct_alignment;
--          ctx->new_count = 1;
--          ++ts;
--          if (*ts != '{') {
--            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
--            return NULL;
--          }
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          ctx->enc_count = 0;
--          ctx->struct_alignment = 0;
--          ++ts;
--          ts_after_sub = ts;
--          for (i = 0; i != struct_count; ++i) {
--            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
--            if (!ts_after_sub) return NULL;
--          }
--          ts = ts_after_sub;
--          if (struct_alignment) ctx->struct_alignment = struct_alignment;
--        }
--        break;
--      case '}': /* end of substruct; either repeat or move on */
--        {
--          size_t alignment = ctx->struct_alignment;
--          ++ts;
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          if (alignment && ctx->fmt_offset % alignment) {
--            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
--          }
--        }
--        return ts;
--      case 'x':
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        ctx->fmt_offset += ctx->new_count;
--        ctx->new_count = 1;
--        ctx->enc_count = 0;
--        ctx->enc_type = 0;
--        ctx->enc_packmode = ctx->new_packmode;
--        ++ts;
--        break;
--      case 'Z':
--        got_Z = 1;
--        ++ts;
--        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
--          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
--          return NULL;
--        }        /* fall through */
--      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
--      case 'l': case 'L': case 'q': case 'Q':
--      case 'f': case 'd': case 'g':
--      case 'O': case 's': case 'p':
--        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
--            ctx->enc_packmode == ctx->new_packmode) {
--          ctx->enc_count += ctx->new_count;
--        } else {
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_count = ctx->new_count;
--          ctx->enc_packmode = ctx->new_packmode;
--          ctx->enc_type = *ts;
--          ctx->is_complex = got_Z;
--        }
--        ++ts;
--        ctx->new_count = 1;
--        got_Z = 0;
--        break;
--      case ':':
--        ++ts;
--        while(*ts != ':') ++ts;
--        ++ts;
--        break;
--      case '(':
--        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
--        break;
--      default:
--        {
--          int number = __Pyx_BufFmt_ExpectNumber(&ts);
--          if (number == -1) return NULL;
--          ctx->new_count = (size_t)number;
--        }
--    }
--  }
--}
--static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
--  buf->buf = NULL;
--  buf->obj = NULL;
--  buf->strides = __Pyx_zeros;
--  buf->shape = __Pyx_zeros;
--  buf->suboffsets = __Pyx_minusones;
--}
--static CYTHON_INLINE int __Pyx_GetBufferAndValidate(
--        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
--        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
--{
--  if (obj == Py_None || obj == NULL) {
--    __Pyx_ZeroBuffer(buf);
--    return 0;
--  }
--  buf->buf = NULL;
--  if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail;
--  if (buf->ndim != nd) {
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer has wrong number of dimensions (expected %d, got %d)",
--                 nd, buf->ndim);
--    goto fail;
--  }
--  if (!cast) {
--    __Pyx_BufFmt_Context ctx;
--    __Pyx_BufFmt_Init(&ctx, stack, dtype);
--    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
--  }
--  if ((unsigned)buf->itemsize != dtype->size) {
--    PyErr_Format(PyExc_ValueError,
--      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
--      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
--      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
--    goto fail;
--  }
--  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
--  return 0;
--fail:;
--  __Pyx_ZeroBuffer(buf);
--  return -1;
--}
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
--  if (info->buf == NULL) return;
--  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
--  __Pyx_ReleaseBuffer(info);
--}
--
--static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
--    long r = a % b;
--    r += ((r != 0) & ((r ^ b) < 0)) * b;
--    return r;
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyObject *tmp_type, *tmp_value, *tmp_tb;
--    PyThreadState *tstate = PyThreadState_GET();
--    tmp_type = tstate->curexc_type;
--    tmp_value = tstate->curexc_value;
--    tmp_tb = tstate->curexc_traceback;
--    tstate->curexc_type = type;
--    tstate->curexc_value = value;
--    tstate->curexc_traceback = tb;
--    Py_XDECREF(tmp_type);
--    Py_XDECREF(tmp_value);
--    Py_XDECREF(tmp_tb);
--#else
--    PyErr_Restore(type, value, tb);
--#endif
--}
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    *type = tstate->curexc_type;
--    *value = tstate->curexc_value;
--    *tb = tstate->curexc_traceback;
--    tstate->curexc_type = 0;
--    tstate->curexc_value = 0;
--    tstate->curexc_traceback = 0;
--#else
--    PyErr_Fetch(type, value, tb);
--#endif
--}
--
--#if PY_MAJOR_VERSION < 3
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
--                        CYTHON_UNUSED PyObject *cause) {
--    Py_XINCREF(type);
--    if (!value || value == Py_None)
--        value = NULL;
--    else
--        Py_INCREF(value);
--    if (!tb || tb == Py_None)
--        tb = NULL;
--    else {
--        Py_INCREF(tb);
--        if (!PyTraceBack_Check(tb)) {
--            PyErr_SetString(PyExc_TypeError,
--                "raise: arg 3 must be a traceback or None");
--            goto raise_error;
--        }
--    }
--    #if PY_VERSION_HEX < 0x02050000
--    if (PyClass_Check(type)) {
--    #else
--    if (PyType_Check(type)) {
--    #endif
--#if CYTHON_COMPILING_IN_PYPY
--        if (!value) {
--            Py_INCREF(Py_None);
--            value = Py_None;
--        }
--#endif
--        PyErr_NormalizeException(&type, &value, &tb);
--    } else {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto raise_error;
--        }
--        value = type;
--        #if PY_VERSION_HEX < 0x02050000
--            if (PyInstance_Check(type)) {
--                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
--                Py_INCREF(type);
--            }
--            else {
--                type = 0;
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception must be an old-style class or instance");
--                goto raise_error;
--            }
--        #else
--            type = (PyObject*) Py_TYPE(type);
--            Py_INCREF(type);
--            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception class must be a subclass of BaseException");
--                goto raise_error;
--            }
--        #endif
--    }
--    __Pyx_ErrRestore(type, value, tb);
--    return;
--raise_error:
--    Py_XDECREF(value);
--    Py_XDECREF(type);
--    Py_XDECREF(tb);
--    return;
--}
--#else /* Python 3+ */
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
--    PyObject* owned_instance = NULL;
--    if (tb == Py_None) {
--        tb = 0;
--    } else if (tb && !PyTraceBack_Check(tb)) {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: arg 3 must be a traceback or None");
--        goto bad;
--    }
--    if (value == Py_None)
--        value = 0;
--    if (PyExceptionInstance_Check(type)) {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto bad;
--        }
--        value = type;
--        type = (PyObject*) Py_TYPE(value);
--    } else if (PyExceptionClass_Check(type)) {
--        PyObject *args;
--        if (!value)
--            args = PyTuple_New(0);
--        else if (PyTuple_Check(value)) {
--            Py_INCREF(value);
--            args = value;
--        }
--        else
--            args = PyTuple_Pack(1, value);
--        if (!args)
--            goto bad;
--        owned_instance = PyEval_CallObject(type, args);
--        Py_DECREF(args);
--        if (!owned_instance)
--            goto bad;
--        value = owned_instance;
--        if (!PyExceptionInstance_Check(value)) {
--            PyErr_Format(PyExc_TypeError,
--                         "calling %R should have returned an instance of "
--                         "BaseException, not %R",
--                         type, Py_TYPE(value));
--            goto bad;
--        }
--    } else {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: exception class must be a subclass of BaseException");
--        goto bad;
--    }
--    if (cause && cause != Py_None) {
--        PyObject *fixed_cause;
--        if (PyExceptionClass_Check(cause)) {
--            fixed_cause = PyObject_CallObject(cause, NULL);
--            if (fixed_cause == NULL)
--                goto bad;
--        }
--        else if (PyExceptionInstance_Check(cause)) {
--            fixed_cause = cause;
--            Py_INCREF(fixed_cause);
--        }
--        else {
--            PyErr_SetString(PyExc_TypeError,
--                            "exception causes must derive from "
--                            "BaseException");
--            goto bad;
--        }
--        PyException_SetCause(value, fixed_cause);
--    }
--    PyErr_SetObject(type, value);
--    if (tb) {
--        PyThreadState *tstate = PyThreadState_GET();
--        PyObject* tmp_tb = tstate->curexc_traceback;
--        if (tb != tmp_tb) {
--            Py_INCREF(tb);
--            tstate->curexc_traceback = tb;
--            Py_XDECREF(tmp_tb);
--        }
--    }
--bad:
--    Py_XDECREF(owned_instance);
--    return;
--}
--#endif
--
--static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
--    long q = a / b;
--    long r = a - q*b;
--    q -= ((r != 0) & ((r ^ b) < 0));
--    return q;
--}
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
--    if (unlikely(!type)) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (likely(PyObject_TypeCheck(obj, type)))
--        return 1;
--    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
--                 Py_TYPE(obj)->tp_name, type->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
--    PyErr_Format(PyExc_ValueError,
--                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
--    PyErr_Format(PyExc_ValueError,
--                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
--                 index, (index == 1) ? "" : "s");
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--}
--
--static CYTHON_INLINE int __Pyx_IterFinish(void) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    PyObject* exc_type = tstate->curexc_type;
--    if (unlikely(exc_type)) {
--        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
--            PyObject *exc_value, *exc_tb;
--            exc_value = tstate->curexc_value;
--            exc_tb = tstate->curexc_traceback;
--            tstate->curexc_type = 0;
--            tstate->curexc_value = 0;
--            tstate->curexc_traceback = 0;
--            Py_DECREF(exc_type);
--            Py_XDECREF(exc_value);
--            Py_XDECREF(exc_tb);
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#else
--    if (unlikely(PyErr_Occurred())) {
--        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
--            PyErr_Clear();
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#endif
--}
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
--    if (unlikely(retval)) {
--        Py_DECREF(retval);
--        __Pyx_RaiseTooManyValuesError(expected);
--        return -1;
--    } else {
--        return __Pyx_IterFinish();
--    }
--    return 0;
--}
--
--#if PY_MAJOR_VERSION < 3
--static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
--    CYTHON_UNUSED PyObject *getbuffer_cobj;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (getbuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                             "__pyx_getbuffer"))) {
--        getbufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (getbufferproc) PyCapsule_GetPointer(getbuffer_cobj, "getbuffer(obj, view, flags)");
--      #else
--        func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj);
--      #endif
--        Py_DECREF(getbuffer_cobj);
--        if (!func)
--            goto fail;
--        return func(obj, view, flags);
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    return -1;
--}
--static void __Pyx_ReleaseBuffer(Py_buffer *view) {
--    PyObject *obj = view->obj;
--    CYTHON_UNUSED PyObject *releasebuffer_cobj;
--    if (!obj) return;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) {
--        PyBuffer_Release(view);
--        return;
--    }
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; }
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (releasebuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                                      "__pyx_releasebuffer"))) {
--        releasebufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (releasebufferproc) PyCapsule_GetPointer(releasebuffer_cobj, "releasebuffer(obj, view)");
--      #else
--        func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj);
--      #endif
--        Py_DECREF(releasebuffer_cobj);
--        if (!func)
--            goto fail;
--        func(obj, view);
--        return;
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    goto nofail;
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    PyErr_WriteUnraisable(obj);
--nofail:
--    Py_DECREF(obj);
--    view->obj = NULL;
--}
--#endif /*  PY_MAJOR_VERSION < 3 */
--
--
--    static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
--    PyObject *empty_list = 0;
--    PyObject *module = 0;
--    PyObject *global_dict = 0;
--    PyObject *empty_dict = 0;
--    PyObject *list;
--    #if PY_VERSION_HEX < 0x03030000
--    PyObject *py_import = 0;
--    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
--    if (!py_import)
--        goto bad;
--    #endif
--    if (from_list)
--        list = from_list;
--    else {
--        empty_list = PyList_New(0);
--        if (!empty_list)
--            goto bad;
--        list = empty_list;
--    }
--    global_dict = PyModule_GetDict(__pyx_m);
--    if (!global_dict)
--        goto bad;
--    empty_dict = PyDict_New();
--    if (!empty_dict)
--        goto bad;
--    #if PY_VERSION_HEX >= 0x02050000
--    {
--        #if PY_MAJOR_VERSION >= 3
--        if (level == -1) {
--            if (strchr(__Pyx_MODULE_NAME, '.')) {
--                #if PY_VERSION_HEX < 0x03030000
--                PyObject *py_level = PyInt_FromLong(1);
--                if (!py_level)
--                    goto bad;
--                module = PyObject_CallFunctionObjArgs(py_import,
--                    name, global_dict, empty_dict, list, py_level, NULL);
--                Py_DECREF(py_level);
--                #else
--                module = PyImport_ImportModuleLevelObject(
--                    name, global_dict, empty_dict, list, 1);
--                #endif
--                if (!module) {
--                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
--                        goto bad;
--                    PyErr_Clear();
--                }
--            }
--            level = 0; /* try absolute import on failure */
--        }
--        #endif
--        if (!module) {
--            #if PY_VERSION_HEX < 0x03030000
--            PyObject *py_level = PyInt_FromLong(level);
--            if (!py_level)
--                goto bad;
--            module = PyObject_CallFunctionObjArgs(py_import,
--                name, global_dict, empty_dict, list, py_level, NULL);
--            Py_DECREF(py_level);
--            #else
--            module = PyImport_ImportModuleLevelObject(
--                name, global_dict, empty_dict, list, level);
--            #endif
--        }
--    }
--    #else
--    if (level>0) {
--        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
--        goto bad;
--    }
--    module = PyObject_CallFunctionObjArgs(py_import,
--        name, global_dict, empty_dict, list, NULL);
--    #endif
--bad:
--    #if PY_VERSION_HEX < 0x03030000
--    Py_XDECREF(py_import);
--    #endif
--    Py_XDECREF(empty_list);
--    Py_XDECREF(empty_dict);
--    return module;
--}
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return ::std::complex< float >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return x + y*(__pyx_t_float_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      __pyx_t_float_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        float denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrtf(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypotf(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--            __pyx_t_float_complex z;
--            float r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    float denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(a, a);
--                    case 3:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, a);
--                    case 4:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_absf(a);
--                theta = atan2f(a.imag, a.real);
--            }
--            lnr = logf(r);
--            z_r = expf(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cosf(z_theta);
--            z.imag = z_r * sinf(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return ::std::complex< double >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return x + y*(__pyx_t_double_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      __pyx_t_double_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        double denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrt(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypot(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--            __pyx_t_double_complex z;
--            double r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    double denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(a, a);
--                    case 3:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, a);
--                    case 4:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_abs(a);
--                theta = atan2(a.imag, a.real);
--            }
--            lnr = log(r);
--            z_r = exp(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cos(z_theta);
--            z.imag = z_r * sin(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
--    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned char" :
--                    "value too large to convert to unsigned char");
--            }
--            return (unsigned char)-1;
--        }
--        return (unsigned char)val;
--    }
--    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
--    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned short" :
--                    "value too large to convert to unsigned short");
--            }
--            return (unsigned short)-1;
--        }
--        return (unsigned short)val;
--    }
--    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
--    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned int" :
--                    "value too large to convert to unsigned int");
--            }
--            return (unsigned int)-1;
--        }
--        return (unsigned int)val;
--    }
--    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
--    const char neg_one = (char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to char" :
--                    "value too large to convert to char");
--            }
--            return (char)-1;
--        }
--        return (char)val;
--    }
--    return (char)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
--    const short neg_one = (short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to short" :
--                    "value too large to convert to short");
--            }
--            return (short)-1;
--        }
--        return (short)val;
--    }
--    return (short)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
--    const signed char neg_one = (signed char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed char" :
--                    "value too large to convert to signed char");
--            }
--            return (signed char)-1;
--        }
--        return (signed char)val;
--    }
--    return (signed char)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
--    const signed short neg_one = (signed short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed short" :
--                    "value too large to convert to signed short");
--            }
--            return (signed short)-1;
--        }
--        return (signed short)val;
--    }
--    return (signed short)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
--    const signed int neg_one = (signed int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed int" :
--                    "value too large to convert to signed int");
--            }
--            return (signed int)-1;
--        }
--        return (signed int)val;
--    }
--    return (signed int)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
--    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned long");
--            return (unsigned long)-1;
--        }
--        return (unsigned long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned long");
--                return (unsigned long)-1;
--            }
--            return (unsigned long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (unsigned long)PyLong_AsLong(x);
--        }
--    } else {
--        unsigned long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned long)-1;
--        val = __Pyx_PyInt_AsUnsignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
--    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned PY_LONG_LONG");
--            return (unsigned PY_LONG_LONG)-1;
--        }
--        return (unsigned PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned PY_LONG_LONG");
--                return (unsigned PY_LONG_LONG)-1;
--            }
--            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        unsigned PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
--    const long neg_one = (long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to long");
--            return (long)-1;
--        }
--        return (long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to long");
--                return (long)-1;
--            }
--            return (long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (long)PyLong_AsLong(x);
--        }
--    } else {
--        long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (long)-1;
--        val = __Pyx_PyInt_AsLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
--    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to PY_LONG_LONG");
--            return (PY_LONG_LONG)-1;
--        }
--        return (PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to PY_LONG_LONG");
--                return (PY_LONG_LONG)-1;
--            }
--            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
--    const signed long neg_one = (signed long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed long");
--            return (signed long)-1;
--        }
--        return (signed long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed long");
--                return (signed long)-1;
--            }
--            return (signed long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (signed long)PyLong_AsLong(x);
--        }
--    } else {
--        signed long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed long)-1;
--        val = __Pyx_PyInt_AsSignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
--    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed PY_LONG_LONG");
--            return (signed PY_LONG_LONG)-1;
--        }
--        return (signed PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed PY_LONG_LONG");
--                return (signed PY_LONG_LONG)-1;
--            }
--            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        signed PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsSignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static int __Pyx_check_binary_version(void) {
--    char ctversion[4], rtversion[4];
--    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
--    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
--    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
--        char message[200];
--        PyOS_snprintf(message, sizeof(message),
--                      "compiletime version %s of module '%.100s' "
--                      "does not match runtime version %s",
--                      ctversion, __Pyx_MODULE_NAME, rtversion);
--        #if PY_VERSION_HEX < 0x02050000
--        return PyErr_Warn(NULL, message);
--        #else
--        return PyErr_WarnEx(NULL, message, 1);
--        #endif
--    }
--    return 0;
--}
--
--#ifndef __PYX_HAVE_RT_ImportModule
--#define __PYX_HAVE_RT_ImportModule
--static PyObject *__Pyx_ImportModule(const char *name) {
--    PyObject *py_name = 0;
--    PyObject *py_module = 0;
--    py_name = __Pyx_PyIdentifier_FromString(name);
--    if (!py_name)
--        goto bad;
--    py_module = PyImport_Import(py_name);
--    Py_DECREF(py_name);
--    return py_module;
--bad:
--    Py_XDECREF(py_name);
--    return 0;
--}
--#endif
--
--#ifndef __PYX_HAVE_RT_ImportType
--#define __PYX_HAVE_RT_ImportType
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
--    size_t size, int strict)
--{
--    PyObject *py_module = 0;
--    PyObject *result = 0;
--    PyObject *py_name = 0;
--    char warning[200];
--    Py_ssize_t basicsize;
--#ifdef Py_LIMITED_API
--    PyObject *py_basicsize;
--#endif
--    py_module = __Pyx_ImportModule(module_name);
--    if (!py_module)
--        goto bad;
--    py_name = __Pyx_PyIdentifier_FromString(class_name);
--    if (!py_name)
--        goto bad;
--    result = PyObject_GetAttr(py_module, py_name);
--    Py_DECREF(py_name);
--    py_name = 0;
--    Py_DECREF(py_module);
--    py_module = 0;
--    if (!result)
--        goto bad;
--    if (!PyType_Check(result)) {
--        PyErr_Format(PyExc_TypeError,
--            "%s.%s is not a type object",
--            module_name, class_name);
--        goto bad;
--    }
--#ifndef Py_LIMITED_API
--    basicsize = ((PyTypeObject *)result)->tp_basicsize;
--#else
--    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
--    if (!py_basicsize)
--        goto bad;
--    basicsize = PyLong_AsSsize_t(py_basicsize);
--    Py_DECREF(py_basicsize);
--    py_basicsize = 0;
--    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
--        goto bad;
--#endif
--    if (!strict && (size_t)basicsize > size) {
--        PyOS_snprintf(warning, sizeof(warning),
--            "%s.%s size changed, may indicate binary incompatibility",
--            module_name, class_name);
--        #if PY_VERSION_HEX < 0x02050000
--        if (PyErr_Warn(NULL, warning) < 0) goto bad;
--        #else
--        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
--        #endif
--    }
--    else if ((size_t)basicsize != size) {
--        PyErr_Format(PyExc_ValueError,
--            "%s.%s has the wrong size, try recompiling",
--            module_name, class_name);
--        goto bad;
--    }
--    return (PyTypeObject *)result;
--bad:
--    Py_XDECREF(py_module);
--    Py_XDECREF(result);
--    return NULL;
--}
--#endif
--
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
--    int start = 0, mid = 0, end = count - 1;
--    if (end >= 0 && code_line > entries[end].code_line) {
--        return count;
--    }
--    while (start < end) {
--        mid = (start + end) / 2;
--        if (code_line < entries[mid].code_line) {
--            end = mid;
--        } else if (code_line > entries[mid].code_line) {
--             start = mid + 1;
--        } else {
--            return mid;
--        }
--    }
--    if (code_line <= entries[mid].code_line) {
--        return mid;
--    } else {
--        return mid + 1;
--    }
--}
--static PyCodeObject *__pyx_find_code_object(int code_line) {
--    PyCodeObject* code_object;
--    int pos;
--    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
--        return NULL;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
--        return NULL;
--    }
--    code_object = __pyx_code_cache.entries[pos].code_object;
--    Py_INCREF(code_object);
--    return code_object;
--}
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
--    int pos, i;
--    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
--    if (unlikely(!code_line)) {
--        return;
--    }
--    if (unlikely(!entries)) {
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (likely(entries)) {
--            __pyx_code_cache.entries = entries;
--            __pyx_code_cache.max_count = 64;
--            __pyx_code_cache.count = 1;
--            entries[0].code_line = code_line;
--            entries[0].code_object = code_object;
--            Py_INCREF(code_object);
--        }
--        return;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
--        PyCodeObject* tmp = entries[pos].code_object;
--        entries[pos].code_object = code_object;
--        Py_DECREF(tmp);
--        return;
--    }
--    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
--        int new_max = __pyx_code_cache.max_count + 64;
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
--            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (unlikely(!entries)) {
--            return;
--        }
--        __pyx_code_cache.entries = entries;
--        __pyx_code_cache.max_count = new_max;
--    }
--    for (i=__pyx_code_cache.count; i>pos; i--) {
--        entries[i] = entries[i-1];
--    }
--    entries[pos].code_line = code_line;
--    entries[pos].code_object = code_object;
--    __pyx_code_cache.count++;
--    Py_INCREF(code_object);
--}
--
--#include "compile.h"
--#include "frameobject.h"
--#include "traceback.h"
--static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
--            const char *funcname, int c_line,
--            int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_srcfile = 0;
--    PyObject *py_funcname = 0;
--    #if PY_MAJOR_VERSION < 3
--    py_srcfile = PyString_FromString(filename);
--    #else
--    py_srcfile = PyUnicode_FromString(filename);
--    #endif
--    if (!py_srcfile) goto bad;
--    if (c_line) {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #else
--        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #endif
--    }
--    else {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromString(funcname);
--        #else
--        py_funcname = PyUnicode_FromString(funcname);
--        #endif
--    }
--    if (!py_funcname) goto bad;
--    py_code = __Pyx_PyCode_New(
--        0,            /*int argcount,*/
--        0,            /*int kwonlyargcount,*/
--        0,            /*int nlocals,*/
--        0,            /*int stacksize,*/
--        0,            /*int flags,*/
--        __pyx_empty_bytes, /*PyObject *code,*/
--        __pyx_empty_tuple, /*PyObject *consts,*/
--        __pyx_empty_tuple, /*PyObject *names,*/
--        __pyx_empty_tuple, /*PyObject *varnames,*/
--        __pyx_empty_tuple, /*PyObject *freevars,*/
--        __pyx_empty_tuple, /*PyObject *cellvars,*/
--        py_srcfile,   /*PyObject *filename,*/
--        py_funcname,  /*PyObject *name,*/
--        py_line,      /*int firstlineno,*/
--        __pyx_empty_bytes  /*PyObject *lnotab*/
--    );
--    Py_DECREF(py_srcfile);
--    Py_DECREF(py_funcname);
--    return py_code;
--bad:
--    Py_XDECREF(py_srcfile);
--    Py_XDECREF(py_funcname);
--    return NULL;
--}
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_globals = 0;
--    PyFrameObject *py_frame = 0;
--    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
--    if (!py_code) {
--        py_code = __Pyx_CreateCodeObjectForTraceback(
--            funcname, c_line, py_line, filename);
--        if (!py_code) goto bad;
--        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
--    }
--    py_globals = PyModule_GetDict(__pyx_m);
--    if (!py_globals) goto bad;
--    py_frame = PyFrame_New(
--        PyThreadState_GET(), /*PyThreadState *tstate,*/
--        py_code,             /*PyCodeObject *code,*/
--        py_globals,          /*PyObject *globals,*/
--        0                    /*PyObject *locals*/
--    );
--    if (!py_frame) goto bad;
--    py_frame->f_lineno = py_line;
--    PyTraceBack_Here(py_frame);
--bad:
--    Py_XDECREF(py_code);
--    Py_XDECREF(py_frame);
--}
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
--    while (t->p) {
--        #if PY_MAJOR_VERSION < 3
--        if (t->is_unicode) {
--            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
--        } else if (t->intern) {
--            *t->p = PyString_InternFromString(t->s);
--        } else {
--            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
--        }
--        #else  /* Python 3+ has unicode identifiers */
--        if (t->is_unicode | t->is_str) {
--            if (t->intern) {
--                *t->p = PyUnicode_InternFromString(t->s);
--            } else if (t->encoding) {
--                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
--            } else {
--                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
--            }
--        } else {
--            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
--        }
--        #endif
--        if (!*t->p)
--            return -1;
--        ++t;
--    }
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
--   int is_true = x == Py_True;
--   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
--   else return PyObject_IsTrue(x);
--}
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
--  PyNumberMethods *m;
--  const char *name = NULL;
--  PyObject *res = NULL;
--#if PY_VERSION_HEX < 0x03000000
--  if (PyInt_Check(x) || PyLong_Check(x))
--#else
--  if (PyLong_Check(x))
--#endif
--    return Py_INCREF(x), x;
--  m = Py_TYPE(x)->tp_as_number;
--#if PY_VERSION_HEX < 0x03000000
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Int(x);
--  }
--  else if (m && m->nb_long) {
--    name = "long";
--    res = PyNumber_Long(x);
--  }
--#else
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Long(x);
--  }
--#endif
--  if (res) {
--#if PY_VERSION_HEX < 0x03000000
--    if (!PyInt_Check(res) && !PyLong_Check(res)) {
--#else
--    if (!PyLong_Check(res)) {
--#endif
--      PyErr_Format(PyExc_TypeError,
--                   "__%s__ returned non-%s (type %.200s)",
--                   name, name, Py_TYPE(res)->tp_name);
--      Py_DECREF(res);
--      return NULL;
--    }
--  }
--  else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_TypeError,
--                    "an integer is required");
--  }
--  return res;
--}
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
--  Py_ssize_t ival;
--  PyObject* x = PyNumber_Index(b);
--  if (!x) return -1;
--  ival = PyInt_AsSsize_t(x);
--  Py_DECREF(x);
--  return ival;
--}
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
--#if PY_VERSION_HEX < 0x02050000
--   if (ival <= LONG_MAX)
--       return PyInt_FromLong((long)ival);
--   else {
--       unsigned char *bytes = (unsigned char *) &ival;
--       int one = 1; int little = (int)*(unsigned char*)&one;
--       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
--   }
--#else
--   return PyInt_FromSize_t(ival);
--#endif
--}
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
--   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
--   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
--       return (size_t)-1;
--   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
--       PyErr_SetString(PyExc_OverflowError,
--                       "value too large to convert to size_t");
--       return (size_t)-1;
--   }
--   return (size_t)val;
--}
--
--
--#endif /* Py_PYTHON_H */
diff --cc astropy/convolution/boundary_wrap.c
index 46c927c,46c927c..0000000
deleted file mode 100644,100644
--- a/astropy/convolution/boundary_wrap.c
+++ /dev/null
@@@ -1,8608 -1,8608 +1,0 @@@
--/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
--
--#define PY_SSIZE_T_CLEAN
--#include "Python.h"
--#ifndef Py_PYTHON_H
--    #error Python headers needed to compile C extensions, please install development version of Python.
--#elif PY_VERSION_HEX < 0x02040000
--    #error Cython requires Python 2.4+.
--#else
--#include <stddef.h> /* For offsetof */
--#ifndef offsetof
--#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
--#endif
--#if !defined(WIN32) && !defined(MS_WINDOWS)
--  #ifndef __stdcall
--    #define __stdcall
--  #endif
--  #ifndef __cdecl
--    #define __cdecl
--  #endif
--  #ifndef __fastcall
--    #define __fastcall
--  #endif
--#endif
--#ifndef DL_IMPORT
--  #define DL_IMPORT(t) t
--#endif
--#ifndef DL_EXPORT
--  #define DL_EXPORT(t) t
--#endif
--#ifndef PY_LONG_LONG
--  #define PY_LONG_LONG LONG_LONG
--#endif
--#ifndef Py_HUGE_VAL
--  #define Py_HUGE_VAL HUGE_VAL
--#endif
--#ifdef PYPY_VERSION
--#define CYTHON_COMPILING_IN_PYPY 1
--#define CYTHON_COMPILING_IN_CPYTHON 0
--#else
--#define CYTHON_COMPILING_IN_PYPY 0
--#define CYTHON_COMPILING_IN_CPYTHON 1
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  typedef int Py_ssize_t;
--  #define PY_SSIZE_T_MAX INT_MAX
--  #define PY_SSIZE_T_MIN INT_MIN
--  #define PY_FORMAT_SIZE_T ""
--  #define CYTHON_FORMAT_SSIZE_T ""
--  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
--  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
--  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
--                                (PyErr_Format(PyExc_TypeError, \
--                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
--                                 (PyObject*)0))
--  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
--                                  !PyComplex_Check(o))
--  #define PyIndex_Check __Pyx_PyIndex_Check
--  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
--  #define __PYX_BUILD_PY_SSIZE_T "i"
--#else
--  #define __PYX_BUILD_PY_SSIZE_T "n"
--  #define CYTHON_FORMAT_SSIZE_T "z"
--  #define __Pyx_PyIndex_Check PyIndex_Check
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
--  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
--  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
--  #define PyVarObject_HEAD_INIT(type, size) \
--          PyObject_HEAD_INIT(type) size,
--  #define PyType_Modified(t)
--  typedef struct {
--     void *buf;
--     PyObject *obj;
--     Py_ssize_t len;
--     Py_ssize_t itemsize;
--     int readonly;
--     int ndim;
--     char *format;
--     Py_ssize_t *shape;
--     Py_ssize_t *strides;
--     Py_ssize_t *suboffsets;
--     void *internal;
--  } Py_buffer;
--  #define PyBUF_SIMPLE 0
--  #define PyBUF_WRITABLE 0x0001
--  #define PyBUF_FORMAT 0x0004
--  #define PyBUF_ND 0x0008
--  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
--  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
--  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
--  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
--  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
--  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
--  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
--  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
--  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
--#endif
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#else
--  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#endif
--#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
--  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define Py_TPFLAGS_CHECKTYPES 0
--  #define Py_TPFLAGS_HAVE_INDEX 0
--#endif
--#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
--  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
--#endif
--#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
--  #define CYTHON_PEP393_ENABLED 1
--  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
--                                              0 : _PyUnicode_Ready((PyObject *)(op)))
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
--  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
--#else
--  #define CYTHON_PEP393_ENABLED 0
--  #define __Pyx_PyUnicode_READY(op)       (0)
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
--  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBaseString_Type            PyUnicode_Type
--  #define PyStringObject               PyUnicodeObject
--  #define PyString_Type                PyUnicode_Type
--  #define PyString_Check               PyUnicode_Check
--  #define PyString_CheckExact          PyUnicode_CheckExact
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PyBytesObject                PyStringObject
--  #define PyBytes_Type                 PyString_Type
--  #define PyBytes_Check                PyString_Check
--  #define PyBytes_CheckExact           PyString_CheckExact
--  #define PyBytes_FromString           PyString_FromString
--  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
--  #define PyBytes_FromFormat           PyString_FromFormat
--  #define PyBytes_DecodeEscape         PyString_DecodeEscape
--  #define PyBytes_AsString             PyString_AsString
--  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
--  #define PyBytes_Size                 PyString_Size
--  #define PyBytes_AS_STRING            PyString_AS_STRING
--  #define PyBytes_GET_SIZE             PyString_GET_SIZE
--  #define PyBytes_Repr                 PyString_Repr
--  #define PyBytes_Concat               PyString_Concat
--  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
--  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
--#endif
--#ifndef PySet_CheckExact
--  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
--#endif
--#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
--#if PY_MAJOR_VERSION >= 3
--  #define PyIntObject                  PyLongObject
--  #define PyInt_Type                   PyLong_Type
--  #define PyInt_Check(op)              PyLong_Check(op)
--  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
--  #define PyInt_FromString             PyLong_FromString
--  #define PyInt_FromUnicode            PyLong_FromUnicode
--  #define PyInt_FromLong               PyLong_FromLong
--  #define PyInt_FromSize_t             PyLong_FromSize_t
--  #define PyInt_FromSsize_t            PyLong_FromSsize_t
--  #define PyInt_AsLong                 PyLong_AsLong
--  #define PyInt_AS_LONG                PyLong_AS_LONG
--  #define PyInt_AsSsize_t              PyLong_AsSsize_t
--  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
--  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBoolObject                 PyLongObject
--#endif
--#if PY_VERSION_HEX < 0x03020000
--  typedef long Py_hash_t;
--  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
--#else
--  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
--#endif
--#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
--  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
--  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
--#else
--  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
--  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
--#else
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_NAMESTR(n) ((char *)(n))
--  #define __Pyx_DOCSTR(n)  ((char *)(n))
--#else
--  #define __Pyx_NAMESTR(n) (n)
--  #define __Pyx_DOCSTR(n)  (n)
--#endif
--
--
--#if PY_MAJOR_VERSION >= 3
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#else
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#endif
--
--#ifndef __PYX_EXTERN_C
--  #ifdef __cplusplus
--    #define __PYX_EXTERN_C extern "C"
--  #else
--    #define __PYX_EXTERN_C extern
--  #endif
--#endif
--
--#if defined(WIN32) || defined(MS_WINDOWS)
--#define _USE_MATH_DEFINES
--#endif
--#include <math.h>
--#define __PYX_HAVE__astropy__convolution__boundary_wrap
--#define __PYX_HAVE_API__astropy__convolution__boundary_wrap
--#include "string.h"
--#include "stdio.h"
--#include "stdlib.h"
--#include "numpy/arrayobject.h"
--#include "numpy/ufuncobject.h"
--#include "numpy/npy_math.h"
--#ifdef _OPENMP
--#include <omp.h>
--#endif /* _OPENMP */
--
--#ifdef PYREX_WITHOUT_ASSERTIONS
--#define CYTHON_WITHOUT_ASSERTIONS
--#endif
--
--#ifndef CYTHON_INLINE
--  #if defined(__GNUC__)
--    #define CYTHON_INLINE __inline__
--  #elif defined(_MSC_VER)
--    #define CYTHON_INLINE __inline
--  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--    #define CYTHON_INLINE inline
--  #else
--    #define CYTHON_INLINE
--  #endif
--#endif
--#ifndef CYTHON_UNUSED
--# if defined(__GNUC__)
--#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
--#     define CYTHON_UNUSED __attribute__ ((__unused__))
--#   else
--#     define CYTHON_UNUSED
--#   endif
--# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
--#   define CYTHON_UNUSED __attribute__ ((__unused__))
--# else
--#   define CYTHON_UNUSED
--# endif
--#endif
--typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
--
--#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
--#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
--#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
--#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
--#if CYTHON_COMPILING_IN_CPYTHON
--#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
--#else
--#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
--#endif
--#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
--
--
--#ifdef __GNUC__
--  /* Test for GCC > 2.95 */
--  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
--    #define likely(x)   __builtin_expect(!!(x), 1)
--    #define unlikely(x) __builtin_expect(!!(x), 0)
--  #else /* __GNUC__ > 2 ... */
--    #define likely(x)   (x)
--    #define unlikely(x) (x)
--  #endif /* __GNUC__ > 2 ... */
--#else /* __GNUC__ */
--  #define likely(x)   (x)
--  #define unlikely(x) (x)
--#endif /* __GNUC__ */
--    
--static PyObject *__pyx_m;
--static PyObject *__pyx_b;
--static PyObject *__pyx_empty_tuple;
--static PyObject *__pyx_empty_bytes;
--static int __pyx_lineno;
--static int __pyx_clineno = 0;
--static const char * __pyx_cfilenm= __FILE__;
--static const char *__pyx_filename;
--
--#if !defined(CYTHON_CCOMPLEX)
--  #if defined(__cplusplus)
--    #define CYTHON_CCOMPLEX 1
--  #elif defined(_Complex_I)
--    #define CYTHON_CCOMPLEX 1
--  #else
--    #define CYTHON_CCOMPLEX 0
--  #endif
--#endif
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #include <complex>
--  #else
--    #include <complex.h>
--  #endif
--#endif
--#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
--  #undef _Complex_I
--  #define _Complex_I 1.0fj
--#endif
--
--
--static const char *__pyx_f[] = {
--  "boundary_wrap.pyx",
--  "numpy.pxd",
--  "type.pxd",
--};
--#define IS_UNSIGNED(type) (((type) -1) > 0)
--struct __Pyx_StructField_;
--#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
--typedef struct {
--  const char* name; /* for error messages only */
--  struct __Pyx_StructField_* fields;
--  size_t size;     /* sizeof(type) */
--  size_t arraysize[8]; /* length of array in each dimension */
--  int ndim;
--  char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */
--  char is_unsigned;
--  int flags;
--} __Pyx_TypeInfo;
--typedef struct __Pyx_StructField_ {
--  __Pyx_TypeInfo* type;
--  const char* name;
--  size_t offset;
--} __Pyx_StructField;
--typedef struct {
--  __Pyx_StructField* field;
--  size_t parent_offset;
--} __Pyx_BufFmt_StackElem;
--typedef struct {
--  __Pyx_StructField root;
--  __Pyx_BufFmt_StackElem* head;
--  size_t fmt_offset;
--  size_t new_count, enc_count;
--  size_t struct_alignment;
--  int is_complex;
--  char enc_type;
--  char new_packmode;
--  char enc_packmode;
--  char is_valid_array;
--} __Pyx_BufFmt_Context;
--
--
--/* "numpy.pxd":723
-- * # in Cython to enable them only on the right systems.
-- * 
-- * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- */
--typedef npy_int8 __pyx_t_5numpy_int8_t;
--
--/* "numpy.pxd":724
-- * 
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t
-- */
--typedef npy_int16 __pyx_t_5numpy_int16_t;
--
--/* "numpy.pxd":725
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int64      int64_t
-- * #ctypedef npy_int96      int96_t
-- */
--typedef npy_int32 __pyx_t_5numpy_int32_t;
--
--/* "numpy.pxd":726
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_int96      int96_t
-- * #ctypedef npy_int128     int128_t
-- */
--typedef npy_int64 __pyx_t_5numpy_int64_t;
--
--/* "numpy.pxd":730
-- * #ctypedef npy_int128     int128_t
-- * 
-- * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- */
--typedef npy_uint8 __pyx_t_5numpy_uint8_t;
--
--/* "numpy.pxd":731
-- * 
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t
-- */
--typedef npy_uint16 __pyx_t_5numpy_uint16_t;
--
--/* "numpy.pxd":732
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint64     uint64_t
-- * #ctypedef npy_uint96     uint96_t
-- */
--typedef npy_uint32 __pyx_t_5numpy_uint32_t;
--
--/* "numpy.pxd":733
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_uint96     uint96_t
-- * #ctypedef npy_uint128    uint128_t
-- */
--typedef npy_uint64 __pyx_t_5numpy_uint64_t;
--
--/* "numpy.pxd":737
-- * #ctypedef npy_uint128    uint128_t
-- * 
-- * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_float64    float64_t
-- * #ctypedef npy_float80    float80_t
-- */
--typedef npy_float32 __pyx_t_5numpy_float32_t;
--
--/* "numpy.pxd":738
-- * 
-- * ctypedef npy_float32    float32_t
-- * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_float80    float80_t
-- * #ctypedef npy_float128   float128_t
-- */
--typedef npy_float64 __pyx_t_5numpy_float64_t;
--
--/* "numpy.pxd":747
-- * # The int types are mapped a bit surprising --
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t
-- */
--typedef npy_long __pyx_t_5numpy_int_t;
--
--/* "numpy.pxd":748
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   longlong_t
-- * 
-- */
--typedef npy_longlong __pyx_t_5numpy_long_t;
--
--/* "numpy.pxd":749
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_ulong      uint_t
-- */
--typedef npy_longlong __pyx_t_5numpy_longlong_t;
--
--/* "numpy.pxd":751
-- * ctypedef npy_longlong   longlong_t
-- * 
-- * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t
-- */
--typedef npy_ulong __pyx_t_5numpy_uint_t;
--
--/* "numpy.pxd":752
-- * 
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
--
--/* "numpy.pxd":753
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_intp       intp_t
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
--
--/* "numpy.pxd":755
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uintp      uintp_t
-- * 
-- */
--typedef npy_intp __pyx_t_5numpy_intp_t;
--
--/* "numpy.pxd":756
-- * 
-- * ctypedef npy_intp       intp_t
-- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_double     float_t
-- */
--typedef npy_uintp __pyx_t_5numpy_uintp_t;
--
--/* "numpy.pxd":758
-- * ctypedef npy_uintp      uintp_t
-- * 
-- * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t
-- */
--typedef npy_double __pyx_t_5numpy_float_t;
--
--/* "numpy.pxd":759
-- * 
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- */
--typedef npy_double __pyx_t_5numpy_double_t;
--
--/* "numpy.pxd":760
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- */
--typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
--
--/* "astropy/convolution/boundary_wrap.pyx":7
-- * 
-- * DTYPE = np.float
-- * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef extern from "numpy/npy_math.h":
-- */
--typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t;
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< float > __pyx_t_float_complex;
--  #else
--    typedef float _Complex __pyx_t_float_complex;
--  #endif
--#else
--    typedef struct { float real, imag; } __pyx_t_float_complex;
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< double > __pyx_t_double_complex;
--  #else
--    typedef double _Complex __pyx_t_double_complex;
--  #endif
--#else
--    typedef struct { double real, imag; } __pyx_t_double_complex;
--#endif
--
--
--/*--- Type declarations ---*/
--
--/* "numpy.pxd":762
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t
-- */
--typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
--
--/* "numpy.pxd":763
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- */
--typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
--
--/* "numpy.pxd":764
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cdouble     complex_t
-- */
--typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
--
--/* "numpy.pxd":766
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- */
--typedef npy_cdouble __pyx_t_5numpy_complex_t;
--#ifndef CYTHON_REFNANNY
--  #define CYTHON_REFNANNY 0
--#endif
--#if CYTHON_REFNANNY
--  typedef struct {
--    void (*INCREF)(void*, PyObject*, int);
--    void (*DECREF)(void*, PyObject*, int);
--    void (*GOTREF)(void*, PyObject*, int);
--    void (*GIVEREF)(void*, PyObject*, int);
--    void* (*SetupContext)(const char*, int, const char*);
--    void (*FinishContext)(void**);
--  } __Pyx_RefNannyAPIStruct;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
--  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
--#ifdef WITH_THREAD
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          if (acquire_gil) { \
--              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--              PyGILState_Release(__pyx_gilstate_save); \
--          } else { \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--          }
--#else
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
--#endif
--  #define __Pyx_RefNannyFinishContext() \
--          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
--  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
--  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
--  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
--  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
--#else
--  #define __Pyx_RefNannyDeclarations
--  #define __Pyx_RefNannySetupContext(name, acquire_gil)
--  #define __Pyx_RefNannyFinishContext()
--  #define __Pyx_INCREF(r) Py_INCREF(r)
--  #define __Pyx_DECREF(r) Py_DECREF(r)
--  #define __Pyx_GOTREF(r)
--  #define __Pyx_GIVEREF(r)
--  #define __Pyx_XINCREF(r) Py_XINCREF(r)
--  #define __Pyx_XDECREF(r) Py_XDECREF(r)
--  #define __Pyx_XGOTREF(r)
--  #define __Pyx_XGIVEREF(r)
--#endif /* CYTHON_REFNANNY */
--#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
--#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
--
--static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
--    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
--
--static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
--
--static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
--    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
--    const char* function_name); /*proto*/
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact); /*proto*/
--
--static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
--    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
--
--static CYTHON_INLINE long __Pyx_mod_long(long, long); /* proto */
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
--
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
--
--static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
--
--#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
--static CYTHON_INLINE int __Pyx_mod_int(int, int); /* proto */
--
--#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
--#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2)
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
--
--static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
--
--typedef struct {
--  Py_ssize_t shape, strides, suboffsets;
--} __Pyx_Buf_DimInfo;
--typedef struct {
--  size_t refcount;
--  Py_buffer pybuffer;
--} __Pyx_Buffer;
--typedef struct {
--  __Pyx_Buffer *rcbuffer;
--  char *data;
--  __Pyx_Buf_DimInfo diminfo[8];
--} __Pyx_LocalBuf_ND;
--
--#if PY_MAJOR_VERSION < 3
--    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
--    static void __Pyx_ReleaseBuffer(Py_buffer *view);
--#else
--    #define __Pyx_GetBuffer PyObject_GetBuffer
--    #define __Pyx_ReleaseBuffer PyBuffer_Release
--#endif
--
--
--static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
--static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
--
--static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #define __Pyx_CREAL(z) ((z).real())
--    #define __Pyx_CIMAG(z) ((z).imag())
--  #else
--    #define __Pyx_CREAL(z) (__real__(z))
--    #define __Pyx_CIMAG(z) (__imag__(z))
--  #endif
--#else
--    #define __Pyx_CREAL(z) ((z).real)
--    #define __Pyx_CIMAG(z) ((z).imag)
--#endif
--#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
--    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
--    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
--#else
--    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
--    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
--#endif
--
--static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eqf(a, b)   ((a)==(b))
--    #define __Pyx_c_sumf(a, b)  ((a)+(b))
--    #define __Pyx_c_difff(a, b) ((a)-(b))
--    #define __Pyx_c_prodf(a, b) ((a)*(b))
--    #define __Pyx_c_quotf(a, b) ((a)/(b))
--    #define __Pyx_c_negf(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
--    #define __Pyx_c_conjf(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (::std::abs(z))
--        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zerof(z) ((z)==0)
--    #define __Pyx_c_conjf(z)    (conjf(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (cabsf(z))
--        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eq(a, b)   ((a)==(b))
--    #define __Pyx_c_sum(a, b)  ((a)+(b))
--    #define __Pyx_c_diff(a, b) ((a)-(b))
--    #define __Pyx_c_prod(a, b) ((a)*(b))
--    #define __Pyx_c_quot(a, b) ((a)/(b))
--    #define __Pyx_c_neg(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zero(z) ((z)==(double)0)
--    #define __Pyx_c_conj(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (::std::abs(z))
--        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zero(z) ((z)==0)
--    #define __Pyx_c_conj(z)    (conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (cabs(z))
--        #define __Pyx_c_pow(a, b)  (cpow(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
--
--static int __Pyx_check_binary_version(void);
--
--#if !defined(__Pyx_PyIdentifier_FromString)
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
--#else
--  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
--#endif
--#endif
--
--static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
--
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
--
--typedef struct {
--    int code_line;
--    PyCodeObject* code_object;
--} __Pyx_CodeObjectCacheEntry;
--struct __Pyx_CodeObjectCache {
--    int count;
--    int max_count;
--    __Pyx_CodeObjectCacheEntry* entries;
--};
--static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
--static PyCodeObject *__pyx_find_code_object(int code_line);
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
--
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename); /*proto*/
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
--
--
--/* Module declarations from 'cpython.buffer' */
--
--/* Module declarations from 'cpython.ref' */
--
--/* Module declarations from 'libc.string' */
--
--/* Module declarations from 'libc.stdio' */
--
--/* Module declarations from 'cpython.object' */
--
--/* Module declarations from '__builtin__' */
--
--/* Module declarations from 'cpython.type' */
--static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
--
--/* Module declarations from 'libc.stdlib' */
--
--/* Module declarations from 'numpy' */
--
--/* Module declarations from 'numpy' */
--static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
--static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
--static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
--static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
--
--/* Module declarations from 'cython' */
--
--/* Module declarations from 'astropy.convolution.boundary_wrap' */
--static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
--#define __Pyx_MODULE_NAME "astropy.convolution.boundary_wrap"
--int __pyx_module_is_main_astropy__convolution__boundary_wrap = 0;
--
--/* Implementation of 'astropy.convolution.boundary_wrap' */
--static PyObject *__pyx_builtin_ValueError;
--static PyObject *__pyx_builtin_range;
--static PyObject *__pyx_builtin_RuntimeError;
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_convolve1d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
--static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
--static char __pyx_k_5[] = "ndarray is not C contiguous";
--static char __pyx_k_7[] = "ndarray is not Fortran contiguous";
--static char __pyx_k_9[] = "Non-native byte order not supported";
--static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
--static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
--static char __pyx_k_15[] = "Format string allocated too short.";
--static char __pyx_k_19[] = "convolve1d_boundary_wrap";
--static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_wrap.pyx";
--static char __pyx_k_21[] = "astropy.convolution.boundary_wrap";
--static char __pyx_k_24[] = "convolve2d_boundary_wrap";
--static char __pyx_k_27[] = "convolve3d_boundary_wrap";
--static char __pyx_k__B[] = "B";
--static char __pyx_k__H[] = "H";
--static char __pyx_k__I[] = "I";
--static char __pyx_k__L[] = "L";
--static char __pyx_k__O[] = "O";
--static char __pyx_k__Q[] = "Q";
--static char __pyx_k__b[] = "b";
--static char __pyx_k__d[] = "d";
--static char __pyx_k__f[] = "f";
--static char __pyx_k__g[] = "g";
--static char __pyx_k__h[] = "h";
--static char __pyx_k__i[] = "i";
--static char __pyx_k__j[] = "j";
--static char __pyx_k__k[] = "k";
--static char __pyx_k__l[] = "l";
--static char __pyx_k__q[] = "q";
--static char __pyx_k__Zd[] = "Zd";
--static char __pyx_k__Zf[] = "Zf";
--static char __pyx_k__Zg[] = "Zg";
--static char __pyx_k__ii[] = "ii";
--static char __pyx_k__jj[] = "jj";
--static char __pyx_k__kk[] = "kk";
--static char __pyx_k__np[] = "np";
--static char __pyx_k__nx[] = "nx";
--static char __pyx_k__ny[] = "ny";
--static char __pyx_k__nz[] = "nz";
--static char __pyx_k__bot[] = "bot";
--static char __pyx_k__iii[] = "iii";
--static char __pyx_k__jjj[] = "jjj";
--static char __pyx_k__ker[] = "ker";
--static char __pyx_k__kkk[] = "kkk";
--static char __pyx_k__nkx[] = "nkx";
--static char __pyx_k__nky[] = "nky";
--static char __pyx_k__nkz[] = "nkz";
--static char __pyx_k__top[] = "top";
--static char __pyx_k__val[] = "val";
--static char __pyx_k__wkx[] = "wkx";
--static char __pyx_k__wky[] = "wky";
--static char __pyx_k__wkz[] = "wkz";
--static char __pyx_k__conv[] = "conv";
--static char __pyx_k__DTYPE[] = "DTYPE";
--static char __pyx_k__dtype[] = "dtype";
--static char __pyx_k__empty[] = "empty";
--static char __pyx_k__fixed[] = "fixed";
--static char __pyx_k__float[] = "float";
--static char __pyx_k__iimax[] = "iimax";
--static char __pyx_k__iimin[] = "iimin";
--static char __pyx_k__jjmax[] = "jjmax";
--static char __pyx_k__jjmin[] = "jjmin";
--static char __pyx_k__kkmax[] = "kkmax";
--static char __pyx_k__kkmin[] = "kkmin";
--static char __pyx_k__numpy[] = "numpy";
--static char __pyx_k__range[] = "range";
--static char __pyx_k____main__[] = "__main__";
--static char __pyx_k____test__[] = "__test__";
--static char __pyx_k__ValueError[] = "ValueError";
--static char __pyx_k__RuntimeError[] = "RuntimeError";
--static PyObject *__pyx_kp_s_1;
--static PyObject *__pyx_kp_u_11;
--static PyObject *__pyx_kp_u_12;
--static PyObject *__pyx_kp_u_15;
--static PyObject *__pyx_n_s_19;
--static PyObject *__pyx_kp_s_20;
--static PyObject *__pyx_n_s_21;
--static PyObject *__pyx_n_s_24;
--static PyObject *__pyx_n_s_27;
--static PyObject *__pyx_kp_u_5;
--static PyObject *__pyx_kp_u_7;
--static PyObject *__pyx_kp_u_9;
--static PyObject *__pyx_n_s__DTYPE;
--static PyObject *__pyx_n_s__RuntimeError;
--static PyObject *__pyx_n_s__ValueError;
--static PyObject *__pyx_n_s____main__;
--static PyObject *__pyx_n_s____test__;
--static PyObject *__pyx_n_s__bot;
--static PyObject *__pyx_n_s__conv;
--static PyObject *__pyx_n_s__dtype;
--static PyObject *__pyx_n_s__empty;
--static PyObject *__pyx_n_s__f;
--static PyObject *__pyx_n_s__fixed;
--static PyObject *__pyx_n_s__float;
--static PyObject *__pyx_n_s__g;
--static PyObject *__pyx_n_s__i;
--static PyObject *__pyx_n_s__ii;
--static PyObject *__pyx_n_s__iii;
--static PyObject *__pyx_n_s__iimax;
--static PyObject *__pyx_n_s__iimin;
--static PyObject *__pyx_n_s__j;
--static PyObject *__pyx_n_s__jj;
--static PyObject *__pyx_n_s__jjj;
--static PyObject *__pyx_n_s__jjmax;
--static PyObject *__pyx_n_s__jjmin;
--static PyObject *__pyx_n_s__k;
--static PyObject *__pyx_n_s__ker;
--static PyObject *__pyx_n_s__kk;
--static PyObject *__pyx_n_s__kkk;
--static PyObject *__pyx_n_s__kkmax;
--static PyObject *__pyx_n_s__kkmin;
--static PyObject *__pyx_n_s__nkx;
--static PyObject *__pyx_n_s__nky;
--static PyObject *__pyx_n_s__nkz;
--static PyObject *__pyx_n_s__np;
--static PyObject *__pyx_n_s__numpy;
--static PyObject *__pyx_n_s__nx;
--static PyObject *__pyx_n_s__ny;
--static PyObject *__pyx_n_s__nz;
--static PyObject *__pyx_n_s__range;
--static PyObject *__pyx_n_s__top;
--static PyObject *__pyx_n_s__val;
--static PyObject *__pyx_n_s__wkx;
--static PyObject *__pyx_n_s__wky;
--static PyObject *__pyx_n_s__wkz;
--static PyObject *__pyx_int_15;
--static PyObject *__pyx_k_tuple_2;
--static PyObject *__pyx_k_tuple_3;
--static PyObject *__pyx_k_tuple_4;
--static PyObject *__pyx_k_tuple_6;
--static PyObject *__pyx_k_tuple_8;
--static PyObject *__pyx_k_tuple_10;
--static PyObject *__pyx_k_tuple_13;
--static PyObject *__pyx_k_tuple_14;
--static PyObject *__pyx_k_tuple_16;
--static PyObject *__pyx_k_tuple_17;
--static PyObject *__pyx_k_tuple_22;
--static PyObject *__pyx_k_tuple_25;
--static PyObject *__pyx_k_codeobj_18;
--static PyObject *__pyx_k_codeobj_23;
--static PyObject *__pyx_k_codeobj_26;
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap = {__Pyx_NAMESTR("convolve1d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve1d_boundary_wrap (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve1d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_wrap_convolve1d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_wrap.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_wrap(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_convolve1d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_nkx;
--  int __pyx_v_wkx;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_iii;
--  int __pyx_v_ii;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  int __pyx_t_13;
--  int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  unsigned int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  unsigned int __pyx_t_21;
--  unsigned int __pyx_t_22;
--  unsigned int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve1d_boundary_wrap", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/convolution/boundary_wrap.pyx":19
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (__pyx_t_1) {
--
--    /* "astropy/convolution/boundary_wrap.pyx":20
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_wrap.pyx":22
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (__pyx_t_1) {
--    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __pyx_t_6 = __pyx_t_5;
--  } else {
--    __pyx_t_6 = __pyx_t_1;
--  }
--  if (unlikely(!__pyx_t_6)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_wrap.pyx":24
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":25
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":26
-- *     cdef int nx = f.shape[0]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_wrap.pyx":27
-- *     cdef int nkx = g.shape[0]
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
-- *     cdef unsigned int i, iii
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
--  __pyx_t_4 = 0;
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":28
-- *     cdef int wkx = nkx // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, iii
-- *     cdef int ii
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
--  __pyx_t_3 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":38
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if npy_isnan(f[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_wrap.pyx":39
-- *     # neighboring values
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
--    if (__pyx_t_6) {
--
--      /* "astropy/convolution/boundary_wrap.pyx":40
-- *     for i in range(nx):
-- *         if npy_isnan(f[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             iimin = i - wkx
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_wrap.pyx":41
-- *         if npy_isnan(f[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_wrap.pyx":42
-- *             top = 0.
-- *             bot = 0.
-- *             iimin = i - wkx             # <<<<<<<<<<<<<<
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- */
--      __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--      /* "astropy/convolution/boundary_wrap.pyx":43
-- *             bot = 0.
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *             for ii in range(iimin, iimax):
-- *                 iii = ii % nx
-- */
--      __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--      /* "astropy/convolution/boundary_wrap.pyx":44
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                 iii = ii % nx
-- *                 val = f[iii]
-- */
--      __pyx_t_13 = __pyx_v_iimax;
--      for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
--        __pyx_v_ii = __pyx_t_14;
--
--        /* "astropy/convolution/boundary_wrap.pyx":45
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- *                 iii = ii % nx             # <<<<<<<<<<<<<<
-- *                 val = f[iii]
-- *                 if not npy_isnan(val):
-- */
--        if (unlikely(__pyx_v_nx == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
--
--        /* "astropy/convolution/boundary_wrap.pyx":46
-- *             for ii in range(iimin, iimax):
-- *                 iii = ii % nx
-- *                 val = f[iii]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- */
--        __pyx_t_15 = __pyx_v_iii;
--        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_wrap.pyx":47
-- *                 iii = ii % nx
-- *                 val = f[iii]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- */
--        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_6) {
--
--          /* "astropy/convolution/boundary_wrap.pyx":48
-- *                 val = f[iii]
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--          __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
--
--          /* "astropy/convolution/boundary_wrap.pyx":49
-- *                 if not npy_isnan(val):
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- * 
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_wrap.pyx":50
-- *                     ker = g[<unsigned int>(wkx + ii - i)]
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- * 
-- *             if bot != 0.:
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L9;
--        }
--        __pyx_L9:;
--      }
--
--      /* "astropy/convolution/boundary_wrap.pyx":52
-- *                     bot += ker
-- * 
-- *             if bot != 0.:             # <<<<<<<<<<<<<<
-- *                 fixed[i] = top / bot
-- *             else:
-- */
--      __pyx_t_6 = (__pyx_v_bot != 0.);
--      if (__pyx_t_6) {
--
--        /* "astropy/convolution/boundary_wrap.pyx":53
-- * 
-- *             if bot != 0.:
-- *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i] = f[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_17 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L10;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_wrap.pyx":55
-- *                 fixed[i] = top / bot
-- *             else:
-- *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             fixed[i] = f[i]
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
--      }
--      __pyx_L10:;
--      goto __pyx_L6;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_wrap.pyx":57
-- *                 fixed[i] = f[i]
-- *         else:
-- *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--      __pyx_t_20 = __pyx_v_i;
--      __pyx_t_21 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
--    }
--    __pyx_L6:;
--  }
--
--  /* "astropy/convolution/boundary_wrap.pyx":60
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_wrap.pyx":61
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
-- *             top = 0.
-- *             bot = 0.
-- */
--    __pyx_t_22 = __pyx_v_i;
--    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
--    if (__pyx_t_6) {
--
--      /* "astropy/convolution/boundary_wrap.pyx":62
-- *     for i in range(nx):
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.             # <<<<<<<<<<<<<<
-- *             bot = 0.
-- *             iimin = i - wkx
-- */
--      __pyx_v_top = 0.;
--
--      /* "astropy/convolution/boundary_wrap.pyx":63
-- *         if not npy_isnan(fixed[i]):
-- *             top = 0.
-- *             bot = 0.             # <<<<<<<<<<<<<<
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- */
--      __pyx_v_bot = 0.;
--
--      /* "astropy/convolution/boundary_wrap.pyx":64
-- *             top = 0.
-- *             bot = 0.
-- *             iimin = i - wkx             # <<<<<<<<<<<<<<
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- */
--      __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--      /* "astropy/convolution/boundary_wrap.pyx":65
-- *             bot = 0.
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *             for ii in range(iimin, iimax):
-- *                 iii = ii % nx
-- */
--      __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--      /* "astropy/convolution/boundary_wrap.pyx":66
-- *             iimin = i - wkx
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                 iii = ii % nx
-- *                 val = fixed[iii]
-- */
--      __pyx_t_13 = __pyx_v_iimax;
--      for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
--        __pyx_v_ii = __pyx_t_14;
--
--        /* "astropy/convolution/boundary_wrap.pyx":67
-- *             iimax = i + wkx + 1
-- *             for ii in range(iimin, iimax):
-- *                 iii = ii % nx             # <<<<<<<<<<<<<<
-- *                 val = fixed[iii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- */
--        if (unlikely(__pyx_v_nx == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
--
--        /* "astropy/convolution/boundary_wrap.pyx":68
-- *             for ii in range(iimin, iimax):
-- *                 iii = ii % nx
-- *                 val = fixed[iii]             # <<<<<<<<<<<<<<
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- */
--        __pyx_t_23 = __pyx_v_iii;
--        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_wrap.pyx":69
-- *                 iii = ii % nx
-- *                 val = fixed[iii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- */
--        __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
--
--        /* "astropy/convolution/boundary_wrap.pyx":70
-- *                 val = fixed[iii]
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                     top += val * ker
-- *                     bot += ker
-- */
--        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
--        if (__pyx_t_6) {
--
--          /* "astropy/convolution/boundary_wrap.pyx":71
-- *                 ker = g[<unsigned int>(wkx + ii - i)]
-- *                 if not npy_isnan(val):
-- *                     top += val * ker             # <<<<<<<<<<<<<<
-- *                     bot += ker
-- *             if bot != 0:
-- */
--          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--          /* "astropy/convolution/boundary_wrap.pyx":72
-- *                 if not npy_isnan(val):
-- *                     top += val * ker
-- *                     bot += ker             # <<<<<<<<<<<<<<
-- *             if bot != 0:
-- *                 conv[i] = top / bot
-- */
--          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--          goto __pyx_L16;
--        }
--        __pyx_L16:;
--      }
--
--      /* "astropy/convolution/boundary_wrap.pyx":73
-- *                     top += val * ker
-- *                     bot += ker
-- *             if bot != 0:             # <<<<<<<<<<<<<<
-- *                 conv[i] = top / bot
-- *             else:
-- */
--      __pyx_t_6 = (__pyx_v_bot != 0.0);
--      if (__pyx_t_6) {
--
--        /* "astropy/convolution/boundary_wrap.pyx":74
-- *                     bot += ker
-- *             if bot != 0:
-- *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i] = fixed[i]
-- */
--        if (unlikely(__pyx_v_bot == 0)) {
--          PyErr_Format(PyExc_ZeroDivisionError, "float division");
--          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        }
--        __pyx_t_25 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
--        goto __pyx_L17;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_wrap.pyx":76
-- *                 conv[i] = top / bot
-- *             else:
-- *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- *         else:
-- *             conv[i] = fixed[i]
-- */
--        __pyx_t_26 = __pyx_v_i;
--        __pyx_t_27 = __pyx_v_i;
--        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
--      }
--      __pyx_L17:;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "astropy/convolution/boundary_wrap.pyx":78
-- *                 conv[i] = fixed[i]
-- *         else:
-- *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--      __pyx_t_28 = __pyx_v_i;
--      __pyx_t_29 = __pyx_v_i;
--      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
--    }
--    __pyx_L13:;
--  }
--
--  /* "astropy/convolution/boundary_wrap.pyx":80
-- *             conv[i] = fixed[i]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve1d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap = {__Pyx_NAMESTR("convolve2d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve2d_boundary_wrap (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve2d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_wrap.pyx":84
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_wrap(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_iii;
--  unsigned int __pyx_v_jjj;
--  int __pyx_v_ii;
--  int __pyx_v_jj;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  int __pyx_v_jjmin;
--  int __pyx_v_jjmax;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  int __pyx_t_17;
--  int __pyx_t_18;
--  int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  unsigned int __pyx_t_21;
--  unsigned int __pyx_t_22;
--  unsigned int __pyx_t_23;
--  unsigned int __pyx_t_24;
--  unsigned int __pyx_t_25;
--  unsigned int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve2d_boundary_wrap", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
--
--  /* "astropy/convolution/boundary_wrap.pyx":87
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "astropy/convolution/boundary_wrap.pyx":88
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_wrap.pyx":90
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  if (__pyx_t_3) {
--    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (unlikely(!__pyx_t_2)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_wrap.pyx":92
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":93
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":94
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":95
-- *     cdef int ny = f.shape[1]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":96
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_wrap.pyx":97
-- *     cdef int nky = g.shape[1]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_wrap.pyx":98
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef unsigned int i, j, iii, jjj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
--  __pyx_t_7 = 0;
--  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":99
-- *     cdef int wky = nky // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, j, iii, jjj
-- *     cdef int ii, jj
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_4 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":109
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_wrap.pyx":110
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_wrap.pyx":111
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_14 = __pyx_v_i;
--      __pyx_t_15 = __pyx_v_j;
--      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
--      if (__pyx_t_2) {
--
--        /* "astropy/convolution/boundary_wrap.pyx":112
-- *         for j in range(ny):
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_wrap.pyx":113
-- *             if npy_isnan(f[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_wrap.pyx":114
-- *                 top = 0.
-- *                 bot = 0.
-- *                 iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- */
--        __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--        /* "astropy/convolution/boundary_wrap.pyx":115
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- */
--        __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--        /* "astropy/convolution/boundary_wrap.pyx":116
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- */
--        __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--        /* "astropy/convolution/boundary_wrap.pyx":117
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- */
--        __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--        /* "astropy/convolution/boundary_wrap.pyx":118
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = ii % nx
-- */
--        __pyx_t_16 = __pyx_v_iimax;
--        for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--          __pyx_v_ii = __pyx_t_17;
--
--          /* "astropy/convolution/boundary_wrap.pyx":119
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                         iii = ii % nx
-- *                         jjj = jj % ny
-- */
--          __pyx_t_18 = __pyx_v_jjmax;
--          for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
--            __pyx_v_jj = __pyx_t_19;
--
--            /* "astropy/convolution/boundary_wrap.pyx":120
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = ii % nx             # <<<<<<<<<<<<<<
-- *                         jjj = jj % ny
-- *                         val = f[iii, jjj]
-- */
--            if (unlikely(__pyx_v_nx == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
--
--            /* "astropy/convolution/boundary_wrap.pyx":121
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = ii % nx
-- *                         jjj = jj % ny             # <<<<<<<<<<<<<<
-- *                         val = f[iii, jjj]
-- *                         if not npy_isnan(val):
-- */
--            if (unlikely(__pyx_v_ny == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
--
--            /* "astropy/convolution/boundary_wrap.pyx":122
-- *                         iii = ii % nx
-- *                         jjj = jj % ny
-- *                         val = f[iii, jjj]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- */
--            __pyx_t_20 = __pyx_v_iii;
--            __pyx_t_21 = __pyx_v_jjj;
--            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_wrap.pyx":123
-- *                         jjj = jj % ny
-- *                         val = f[iii, jjj]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_2) {
--
--              /* "astropy/convolution/boundary_wrap.pyx":125
-- *                         if not npy_isnan(val):
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--              __pyx_t_22 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--              __pyx_t_23 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
--
--              /* "astropy/convolution/boundary_wrap.pyx":126
-- *                             ker = g[<unsigned int>(wkx + ii - i),
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- * 
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_wrap.pyx":127
-- *                                     <unsigned int>(wky + jj - j)]
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- * 
-- *                 if bot != 0.:
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L13;
--            }
--            __pyx_L13:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_wrap.pyx":129
-- *                             bot += ker
-- * 
-- *                 if bot != 0.:             # <<<<<<<<<<<<<<
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_2 = (__pyx_v_bot != 0.);
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_wrap.pyx":130
-- * 
-- *                 if bot != 0.:
-- *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j] = f[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_24 = __pyx_v_i;
--          __pyx_t_25 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L14;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_wrap.pyx":132
-- *                     fixed[i, j] = top / bot
-- *                 else:
-- *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 fixed[i, j] = f[i, j]
-- */
--          __pyx_t_26 = __pyx_v_i;
--          __pyx_t_27 = __pyx_v_j;
--          __pyx_t_28 = __pyx_v_i;
--          __pyx_t_29 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_f.diminfo[1].strides));
--        }
--        __pyx_L14:;
--        goto __pyx_L8;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_wrap.pyx":134
-- *                     fixed[i, j] = f[i, j]
-- *             else:
-- *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--        __pyx_t_30 = __pyx_v_i;
--        __pyx_t_31 = __pyx_v_j;
--        __pyx_t_32 = __pyx_v_i;
--        __pyx_t_33 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides));
--      }
--      __pyx_L8:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_wrap.pyx":137
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):
-- */
--  __pyx_t_10 = __pyx_v_nx;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/convolution/boundary_wrap.pyx":138
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- */
--    __pyx_t_12 = __pyx_v_ny;
--    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--      __pyx_v_j = __pyx_t_13;
--
--      /* "astropy/convolution/boundary_wrap.pyx":139
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
-- *                 top = 0.
-- *                 bot = 0.
-- */
--      __pyx_t_34 = __pyx_v_i;
--      __pyx_t_35 = __pyx_v_j;
--      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides))));
--      if (__pyx_t_2) {
--
--        /* "astropy/convolution/boundary_wrap.pyx":140
-- *         for j in range(ny):
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.             # <<<<<<<<<<<<<<
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- */
--        __pyx_v_top = 0.;
--
--        /* "astropy/convolution/boundary_wrap.pyx":141
-- *             if not npy_isnan(fixed[i, j]):
-- *                 top = 0.
-- *                 bot = 0.             # <<<<<<<<<<<<<<
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- */
--        __pyx_v_bot = 0.;
--
--        /* "astropy/convolution/boundary_wrap.pyx":142
-- *                 top = 0.
-- *                 bot = 0.
-- *                 iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- */
--        __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--        /* "astropy/convolution/boundary_wrap.pyx":143
-- *                 bot = 0.
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- */
--        __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--        /* "astropy/convolution/boundary_wrap.pyx":144
-- *                 iimin = i - wkx
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- */
--        __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--        /* "astropy/convolution/boundary_wrap.pyx":145
-- *                 iimax = i + wkx + 1
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- */
--        __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--        /* "astropy/convolution/boundary_wrap.pyx":146
-- *                 jjmin = j - wky
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = ii % nx
-- */
--        __pyx_t_16 = __pyx_v_iimax;
--        for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--          __pyx_v_ii = __pyx_t_17;
--
--          /* "astropy/convolution/boundary_wrap.pyx":147
-- *                 jjmax = j + wky + 1
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                         iii = ii % nx
-- *                         jjj = jj % ny
-- */
--          __pyx_t_18 = __pyx_v_jjmax;
--          for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
--            __pyx_v_jj = __pyx_t_19;
--
--            /* "astropy/convolution/boundary_wrap.pyx":148
-- *                 for ii in range(iimin, iimax):
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = ii % nx             # <<<<<<<<<<<<<<
-- *                         jjj = jj % ny
-- *                         val = fixed[iii, jjj]
-- */
--            if (unlikely(__pyx_v_nx == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
--
--            /* "astropy/convolution/boundary_wrap.pyx":149
-- *                     for jj in range(jjmin, jjmax):
-- *                         iii = ii % nx
-- *                         jjj = jj % ny             # <<<<<<<<<<<<<<
-- *                         val = fixed[iii, jjj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- */
--            if (unlikely(__pyx_v_ny == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
--
--            /* "astropy/convolution/boundary_wrap.pyx":150
-- *                         iii = ii % nx
-- *                         jjj = jj % ny
-- *                         val = fixed[iii, jjj]             # <<<<<<<<<<<<<<
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- */
--            __pyx_t_36 = __pyx_v_iii;
--            __pyx_t_37 = __pyx_v_jjj;
--            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_wrap.pyx":152
-- *                         val = fixed[iii, jjj]
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- */
--            __pyx_t_38 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--            __pyx_t_39 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
--
--            /* "astropy/convolution/boundary_wrap.pyx":153
-- *                         ker = g[<unsigned int>(wkx + ii - i),
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                             top += val * ker
-- *                             bot += ker
-- */
--            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
--            if (__pyx_t_2) {
--
--              /* "astropy/convolution/boundary_wrap.pyx":154
-- *                                 <unsigned int>(wky + jj - j)]
-- *                         if not npy_isnan(val):
-- *                             top += val * ker             # <<<<<<<<<<<<<<
-- *                             bot += ker
-- *                 if bot != 0:
-- */
--              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--              /* "astropy/convolution/boundary_wrap.pyx":155
-- *                         if not npy_isnan(val):
-- *                             top += val * ker
-- *                             bot += ker             # <<<<<<<<<<<<<<
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot
-- */
--              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--              goto __pyx_L24;
--            }
--            __pyx_L24:;
--          }
--        }
--
--        /* "astropy/convolution/boundary_wrap.pyx":156
-- *                             top += val * ker
-- *                             bot += ker
-- *                 if bot != 0:             # <<<<<<<<<<<<<<
-- *                     conv[i, j] = top / bot
-- *                 else:
-- */
--        __pyx_t_2 = (__pyx_v_bot != 0.0);
--        if (__pyx_t_2) {
--
--          /* "astropy/convolution/boundary_wrap.pyx":157
-- *                             bot += ker
-- *                 if bot != 0:
-- *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]
-- */
--          if (unlikely(__pyx_v_bot == 0)) {
--            PyErr_Format(PyExc_ZeroDivisionError, "float division");
--            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          }
--          __pyx_t_40 = __pyx_v_i;
--          __pyx_t_41 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
--          goto __pyx_L25;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_wrap.pyx":159
-- *                     conv[i, j] = top / bot
-- *                 else:
-- *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 conv[i, j] = fixed[i, j]
-- */
--          __pyx_t_42 = __pyx_v_i;
--          __pyx_t_43 = __pyx_v_j;
--          __pyx_t_44 = __pyx_v_i;
--          __pyx_t_45 = __pyx_v_j;
--          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides));
--        }
--        __pyx_L25:;
--        goto __pyx_L19;
--      }
--      /*else*/ {
--
--        /* "astropy/convolution/boundary_wrap.pyx":161
-- *                     conv[i, j] = fixed[i, j]
-- *             else:
-- *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--        __pyx_t_46 = __pyx_v_i;
--        __pyx_t_47 = __pyx_v_j;
--        __pyx_t_48 = __pyx_v_i;
--        __pyx_t_49 = __pyx_v_j;
--        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].strides));
--      }
--      __pyx_L19:;
--    }
--  }
--
--  /* "astropy/convolution/boundary_wrap.pyx":163
-- *                 conv[i, j] = fixed[i, j]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve2d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap = {__Pyx_NAMESTR("convolve3d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
--static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_f = 0;
--  PyArrayObject *__pyx_v_g = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("convolve3d_boundary_wrap (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_f = ((PyArrayObject *)values[0]);
--    __pyx_v_g = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve3d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/convolution/boundary_wrap.pyx":167
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_wrap(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--
--static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
--  int __pyx_v_nx;
--  int __pyx_v_ny;
--  int __pyx_v_nz;
--  int __pyx_v_nkx;
--  int __pyx_v_nky;
--  int __pyx_v_nkz;
--  int __pyx_v_wkx;
--  int __pyx_v_wky;
--  int __pyx_v_wkz;
--  PyArrayObject *__pyx_v_fixed = 0;
--  PyArrayObject *__pyx_v_conv = 0;
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_j;
--  unsigned int __pyx_v_k;
--  unsigned int __pyx_v_iii;
--  unsigned int __pyx_v_jjj;
--  unsigned int __pyx_v_kkk;
--  int __pyx_v_ii;
--  int __pyx_v_jj;
--  int __pyx_v_kk;
--  int __pyx_v_iimin;
--  int __pyx_v_iimax;
--  int __pyx_v_jjmin;
--  int __pyx_v_jjmax;
--  int __pyx_v_kkmin;
--  int __pyx_v_kkmax;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
--  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
--  __Pyx_Buffer __pyx_pybuffer_conv;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
--  __Pyx_Buffer __pyx_pybuffer_f;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
--  __Pyx_Buffer __pyx_pybuffer_fixed;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
--  __Pyx_Buffer __pyx_pybuffer_g;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  int __pyx_t_4;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyObject *__pyx_t_7 = NULL;
--  PyObject *__pyx_t_8 = NULL;
--  PyObject *__pyx_t_9 = NULL;
--  PyArrayObject *__pyx_t_10 = NULL;
--  PyArrayObject *__pyx_t_11 = NULL;
--  int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_t_16;
--  unsigned int __pyx_t_17;
--  unsigned int __pyx_t_18;
--  unsigned int __pyx_t_19;
--  unsigned int __pyx_t_20;
--  int __pyx_t_21;
--  int __pyx_t_22;
--  int __pyx_t_23;
--  int __pyx_t_24;
--  int __pyx_t_25;
--  int __pyx_t_26;
--  unsigned int __pyx_t_27;
--  unsigned int __pyx_t_28;
--  unsigned int __pyx_t_29;
--  unsigned int __pyx_t_30;
--  unsigned int __pyx_t_31;
--  unsigned int __pyx_t_32;
--  unsigned int __pyx_t_33;
--  unsigned int __pyx_t_34;
--  unsigned int __pyx_t_35;
--  unsigned int __pyx_t_36;
--  unsigned int __pyx_t_37;
--  unsigned int __pyx_t_38;
--  unsigned int __pyx_t_39;
--  unsigned int __pyx_t_40;
--  unsigned int __pyx_t_41;
--  unsigned int __pyx_t_42;
--  unsigned int __pyx_t_43;
--  unsigned int __pyx_t_44;
--  unsigned int __pyx_t_45;
--  unsigned int __pyx_t_46;
--  unsigned int __pyx_t_47;
--  unsigned int __pyx_t_48;
--  unsigned int __pyx_t_49;
--  unsigned int __pyx_t_50;
--  unsigned int __pyx_t_51;
--  unsigned int __pyx_t_52;
--  unsigned int __pyx_t_53;
--  unsigned int __pyx_t_54;
--  unsigned int __pyx_t_55;
--  unsigned int __pyx_t_56;
--  unsigned int __pyx_t_57;
--  unsigned int __pyx_t_58;
--  unsigned int __pyx_t_59;
--  unsigned int __pyx_t_60;
--  unsigned int __pyx_t_61;
--  unsigned int __pyx_t_62;
--  unsigned int __pyx_t_63;
--  unsigned int __pyx_t_64;
--  unsigned int __pyx_t_65;
--  unsigned int __pyx_t_66;
--  unsigned int __pyx_t_67;
--  unsigned int __pyx_t_68;
--  unsigned int __pyx_t_69;
--  unsigned int __pyx_t_70;
--  unsigned int __pyx_t_71;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("convolve3d_boundary_wrap", 0);
--  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
--  __pyx_pybuffer_fixed.refcount = 0;
--  __pyx_pybuffernd_fixed.data = NULL;
--  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
--  __pyx_pybuffer_conv.pybuffer.buf = NULL;
--  __pyx_pybuffer_conv.refcount = 0;
--  __pyx_pybuffernd_conv.data = NULL;
--  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
--  __pyx_pybuffer_f.pybuffer.buf = NULL;
--  __pyx_pybuffer_f.refcount = 0;
--  __pyx_pybuffernd_f.data = NULL;
--  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
--  __pyx_pybuffer_g.pybuffer.buf = NULL;
--  __pyx_pybuffer_g.refcount = 0;
--  __pyx_pybuffernd_g.data = NULL;
--  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pyb [...]
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pyb [...]
--
--  /* "astropy/convolution/boundary_wrap.pyx":170
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- */
--  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
--  if (!__pyx_t_1) {
--    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
--    if (!__pyx_t_2) {
--      __pyx_t_3 = (__Pyx_mod_long((__pyx_v_g->dimensions[2]), 2) != 1);
--      __pyx_t_4 = __pyx_t_3;
--    } else {
--      __pyx_t_4 = __pyx_t_2;
--    }
--    __pyx_t_2 = __pyx_t_4;
--  } else {
--    __pyx_t_2 = __pyx_t_1;
--  }
--  if (__pyx_t_2) {
--
--    /* "astropy/convolution/boundary_wrap.pyx":171
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "astropy/convolution/boundary_wrap.pyx":173
-- *         raise ValueError("Convolution kernel must have odd dimensions")
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
-- * 
-- *     cdef int nx = f.shape[0]
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  if (__pyx_t_2) {
--    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_7);
--    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_4 = __pyx_t_1;
--  } else {
--    __pyx_t_4 = __pyx_t_2;
--  }
--  if (unlikely(!__pyx_t_4)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/convolution/boundary_wrap.pyx":175
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- * 
-- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- */
--  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":176
-- * 
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- */
--  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":177
-- *     cdef int nx = f.shape[0]
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- */
--  __pyx_v_nz = (__pyx_v_f->dimensions[2]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":178
-- *     cdef int ny = f.shape[1]
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- */
--  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":179
-- *     cdef int nz = f.shape[2]
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- */
--  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":180
-- *     cdef int nkx = g.shape[0]
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- */
--  __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
--
--  /* "astropy/convolution/boundary_wrap.pyx":181
-- *     cdef int nky = g.shape[1]
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- */
--  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
--
--  /* "astropy/convolution/boundary_wrap.pyx":182
-- *     cdef int nkz = g.shape[2]
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- */
--  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
--
--  /* "astropy/convolution/boundary_wrap.pyx":183
-- *     cdef int wkx = nkx // 2
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
-- */
--  __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
--
--  /* "astropy/convolution/boundary_wrap.pyx":184
-- *     cdef int wky = nky // 2
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef unsigned int i, j, k, iii, jjj, kkk
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  __pyx_t_5 = 0;
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
--  __pyx_t_9 = 0;
--  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
--  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2 [...]
--    }
--  }
--  __pyx_t_10 = 0;
--  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
--  __pyx_t_7 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":185
-- *     cdef int wkz = nkz // 2
-- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
-- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i, j, k, iii, jjj, kkk
-- *     cdef int ii, jj, kk
-- */
--  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
--  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
--  __Pyx_GIVEREF(__pyx_t_7);
--  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
--  __Pyx_GIVEREF(__pyx_t_8);
--  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_7 = 0;
--  __pyx_t_8 = 0;
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_8);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
--      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_p [...]
--    }
--  }
--  __pyx_t_11 = 0;
--  __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
--  __pyx_t_8 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":195
-- *     # Need a first pass to replace NaN values with value convolved from
-- *     # neighboring values
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_wrap.pyx":196
-- *     # neighboring values
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_wrap.pyx":197
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_wrap.pyx":198
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_18 = __pyx_v_i;
--        __pyx_t_19 = __pyx_v_j;
--        __pyx_t_20 = __pyx_v_k;
--        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
--        if (__pyx_t_4) {
--
--          /* "astropy/convolution/boundary_wrap.pyx":199
-- *             for k in range(nz):
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_wrap.pyx":200
-- *                 if npy_isnan(f[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_wrap.pyx":201
-- *                     top = 0.
-- *                     bot = 0.
-- *                     iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- */
--          __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--          /* "astropy/convolution/boundary_wrap.pyx":202
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- */
--          __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--          /* "astropy/convolution/boundary_wrap.pyx":203
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- */
--          __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--          /* "astropy/convolution/boundary_wrap.pyx":204
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- */
--          __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--          /* "astropy/convolution/boundary_wrap.pyx":205
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- */
--          __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
--
--          /* "astropy/convolution/boundary_wrap.pyx":206
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- */
--          __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
--
--          /* "astropy/convolution/boundary_wrap.pyx":207
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- */
--          __pyx_t_21 = __pyx_v_iimax;
--          for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_ii = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_wrap.pyx":208
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = ii % nx
-- */
--            __pyx_t_23 = __pyx_v_jjmax;
--            for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
--              __pyx_v_jj = __pyx_t_24;
--
--              /* "astropy/convolution/boundary_wrap.pyx":209
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
-- *                                 iii = ii % nx
-- *                                 jjj = jj % ny
-- */
--              __pyx_t_25 = __pyx_v_kkmax;
--              for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--                __pyx_v_kk = __pyx_t_26;
--
--                /* "astropy/convolution/boundary_wrap.pyx":210
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = ii % nx             # <<<<<<<<<<<<<<
-- *                                 jjj = jj % ny
-- *                                 kkk = kk % nz
-- */
--                if (unlikely(__pyx_v_nx == 0)) {
--                  PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--                }
--                __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
--
--                /* "astropy/convolution/boundary_wrap.pyx":211
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = ii % nx
-- *                                 jjj = jj % ny             # <<<<<<<<<<<<<<
-- *                                 kkk = kk % nz
-- *                                 val = f[iii, jjj, kkk]
-- */
--                if (unlikely(__pyx_v_ny == 0)) {
--                  PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--                }
--                __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
--
--                /* "astropy/convolution/boundary_wrap.pyx":212
-- *                                 iii = ii % nx
-- *                                 jjj = jj % ny
-- *                                 kkk = kk % nz             # <<<<<<<<<<<<<<
-- *                                 val = f[iii, jjj, kkk]
-- *                                 if not npy_isnan(val):
-- */
--                if (unlikely(__pyx_v_nz == 0)) {
--                  PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--                }
--                __pyx_v_kkk = __Pyx_mod_int(__pyx_v_kk, __pyx_v_nz);
--
--                /* "astropy/convolution/boundary_wrap.pyx":213
-- *                                 jjj = jj % ny
-- *                                 kkk = kk % nz
-- *                                 val = f[iii, jjj, kkk]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- */
--                __pyx_t_27 = __pyx_v_iii;
--                __pyx_t_28 = __pyx_v_jjj;
--                __pyx_t_29 = __pyx_v_kkk;
--                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_wrap.pyx":214
-- *                                 kkk = kk % nz
-- *                                 val = f[iii, jjj, kkk]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_4) {
--
--                  /* "astropy/convolution/boundary_wrap.pyx":217
-- *                                     ker = g[<unsigned int>(wkx + ii - i),
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                  __pyx_t_30 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                  __pyx_t_31 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                  __pyx_t_32 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                  /* "astropy/convolution/boundary_wrap.pyx":218
-- *                                             <unsigned int>(wky + jj - j),
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- * 
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_wrap.pyx":219
-- *                                             <unsigned int>(wkz + kk - k)]
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- * 
-- *                     if bot != 0.:
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L17;
--                }
--                __pyx_L17:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_wrap.pyx":221
-- *                                     bot += ker
-- * 
-- *                     if bot != 0.:             # <<<<<<<<<<<<<<
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_4 = (__pyx_v_bot != 0.);
--          if (__pyx_t_4) {
--
--            /* "astropy/convolution/boundary_wrap.pyx":222
-- * 
-- *                     if bot != 0.:
-- *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_33 = __pyx_v_i;
--            __pyx_t_34 = __pyx_v_j;
--            __pyx_t_35 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L18;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_wrap.pyx":224
-- *                         fixed[i, j, k] = top / bot
-- *                     else:
-- *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]
-- */
--            __pyx_t_36 = __pyx_v_i;
--            __pyx_t_37 = __pyx_v_j;
--            __pyx_t_38 = __pyx_v_k;
--            __pyx_t_39 = __pyx_v_i;
--            __pyx_t_40 = __pyx_v_j;
--            __pyx_t_41 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_ [...]
--          }
--          __pyx_L18:;
--          goto __pyx_L10;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_wrap.pyx":226
-- *                         fixed[i, j, k] = f[i, j, k]
-- *                 else:
-- *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     # Now run the proper convolution
-- */
--          __pyx_t_42 = __pyx_v_i;
--          __pyx_t_43 = __pyx_v_j;
--          __pyx_t_44 = __pyx_v_k;
--          __pyx_t_45 = __pyx_v_i;
--          __pyx_t_46 = __pyx_v_j;
--          __pyx_t_47 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_43 [...]
--        }
--        __pyx_L10:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_wrap.pyx":229
-- * 
-- *     # Now run the proper convolution
-- *     for i in range(nx):             # <<<<<<<<<<<<<<
-- *         for j in range(ny):
-- *             for k in range(nz):
-- */
--  __pyx_t_12 = __pyx_v_nx;
--  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
--    __pyx_v_i = __pyx_t_13;
--
--    /* "astropy/convolution/boundary_wrap.pyx":230
-- *     # Now run the proper convolution
-- *     for i in range(nx):
-- *         for j in range(ny):             # <<<<<<<<<<<<<<
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- */
--    __pyx_t_14 = __pyx_v_ny;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
--      __pyx_v_j = __pyx_t_15;
--
--      /* "astropy/convolution/boundary_wrap.pyx":231
-- *     for i in range(nx):
-- *         for j in range(ny):
-- *             for k in range(nz):             # <<<<<<<<<<<<<<
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- */
--      __pyx_t_16 = __pyx_v_nz;
--      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
--        __pyx_v_k = __pyx_t_17;
--
--        /* "astropy/convolution/boundary_wrap.pyx":232
-- *         for j in range(ny):
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
-- *                     top = 0.
-- *                     bot = 0.
-- */
--        __pyx_t_48 = __pyx_v_i;
--        __pyx_t_49 = __pyx_v_j;
--        __pyx_t_50 = __pyx_v_k;
--        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides))));
--        if (__pyx_t_4) {
--
--          /* "astropy/convolution/boundary_wrap.pyx":233
-- *             for k in range(nz):
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.             # <<<<<<<<<<<<<<
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- */
--          __pyx_v_top = 0.;
--
--          /* "astropy/convolution/boundary_wrap.pyx":234
-- *                 if not npy_isnan(fixed[i, j, k]):
-- *                     top = 0.
-- *                     bot = 0.             # <<<<<<<<<<<<<<
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- */
--          __pyx_v_bot = 0.;
--
--          /* "astropy/convolution/boundary_wrap.pyx":235
-- *                     top = 0.
-- *                     bot = 0.
-- *                     iimin = i - wkx             # <<<<<<<<<<<<<<
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- */
--          __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
--
--          /* "astropy/convolution/boundary_wrap.pyx":236
-- *                     bot = 0.
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- */
--          __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
--
--          /* "astropy/convolution/boundary_wrap.pyx":237
-- *                     iimin = i - wkx
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky             # <<<<<<<<<<<<<<
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- */
--          __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
--
--          /* "astropy/convolution/boundary_wrap.pyx":238
-- *                     iimax = i + wkx + 1
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- */
--          __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
--
--          /* "astropy/convolution/boundary_wrap.pyx":239
-- *                     jjmin = j - wky
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- */
--          __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
--
--          /* "astropy/convolution/boundary_wrap.pyx":240
-- *                     jjmax = j + wky + 1
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- */
--          __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
--
--          /* "astropy/convolution/boundary_wrap.pyx":241
-- *                     kkmin = k - wkz
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- */
--          __pyx_t_21 = __pyx_v_iimax;
--          for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
--            __pyx_v_ii = __pyx_t_22;
--
--            /* "astropy/convolution/boundary_wrap.pyx":242
-- *                     kkmax = k + wkz + 1
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = ii % nx
-- */
--            __pyx_t_23 = __pyx_v_jjmax;
--            for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
--              __pyx_v_jj = __pyx_t_24;
--
--              /* "astropy/convolution/boundary_wrap.pyx":243
-- *                     for ii in range(iimin, iimax):
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
-- *                                 iii = ii % nx
-- *                                 jjj = jj % ny
-- */
--              __pyx_t_25 = __pyx_v_kkmax;
--              for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
--                __pyx_v_kk = __pyx_t_26;
--
--                /* "astropy/convolution/boundary_wrap.pyx":244
-- *                         for jj in range(jjmin, jjmax):
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = ii % nx             # <<<<<<<<<<<<<<
-- *                                 jjj = jj % ny
-- *                                 kkk = kk % nz
-- */
--                if (unlikely(__pyx_v_nx == 0)) {
--                  PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--                }
--                __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
--
--                /* "astropy/convolution/boundary_wrap.pyx":245
-- *                             for kk in range(kkmin, kkmax):
-- *                                 iii = ii % nx
-- *                                 jjj = jj % ny             # <<<<<<<<<<<<<<
-- *                                 kkk = kk % nz
-- *                                 val = fixed[iii, jjj, kkk]
-- */
--                if (unlikely(__pyx_v_ny == 0)) {
--                  PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--                }
--                __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
--
--                /* "astropy/convolution/boundary_wrap.pyx":246
-- *                                 iii = ii % nx
-- *                                 jjj = jj % ny
-- *                                 kkk = kk % nz             # <<<<<<<<<<<<<<
-- *                                 val = fixed[iii, jjj, kkk]
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- */
--                if (unlikely(__pyx_v_nz == 0)) {
--                  PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
--                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--                }
--                __pyx_v_kkk = __Pyx_mod_int(__pyx_v_kk, __pyx_v_nz);
--
--                /* "astropy/convolution/boundary_wrap.pyx":247
-- *                                 jjj = jj % ny
-- *                                 kkk = kk % nz
-- *                                 val = fixed[iii, jjj, kkk]             # <<<<<<<<<<<<<<
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- */
--                __pyx_t_51 = __pyx_v_iii;
--                __pyx_t_52 = __pyx_v_jjj;
--                __pyx_t_53 = __pyx_v_kkk;
--                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_wrap.pyx":250
-- *                                 ker = g[<unsigned int>(wkx + ii - i),
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- */
--                __pyx_t_54 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
--                __pyx_t_55 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
--                __pyx_t_56 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
--                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
--
--                /* "astropy/convolution/boundary_wrap.pyx":251
-- *                                         <unsigned int>(wky + jj - j),
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
-- *                                     top += val * ker
-- *                                     bot += ker
-- */
--                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
--                if (__pyx_t_4) {
--
--                  /* "astropy/convolution/boundary_wrap.pyx":252
-- *                                         <unsigned int>(wkz + kk - k)]
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker             # <<<<<<<<<<<<<<
-- *                                     bot += ker
-- *                     if bot != 0:
-- */
--                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
--
--                  /* "astropy/convolution/boundary_wrap.pyx":253
-- *                                 if not npy_isnan(val):
-- *                                     top += val * ker
-- *                                     bot += ker             # <<<<<<<<<<<<<<
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot
-- */
--                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
--                  goto __pyx_L32;
--                }
--                __pyx_L32:;
--              }
--            }
--          }
--
--          /* "astropy/convolution/boundary_wrap.pyx":254
-- *                                     top += val * ker
-- *                                     bot += ker
-- *                     if bot != 0:             # <<<<<<<<<<<<<<
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- */
--          __pyx_t_4 = (__pyx_v_bot != 0.0);
--          if (__pyx_t_4) {
--
--            /* "astropy/convolution/boundary_wrap.pyx":255
-- *                                     bot += ker
-- *                     if bot != 0:
-- *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]
-- */
--            if (unlikely(__pyx_v_bot == 0)) {
--              PyErr_Format(PyExc_ZeroDivisionError, "float division");
--              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--            }
--            __pyx_t_57 = __pyx_v_i;
--            __pyx_t_58 = __pyx_v_j;
--            __pyx_t_59 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
--            goto __pyx_L33;
--          }
--          /*else*/ {
--
--            /* "astropy/convolution/boundary_wrap.pyx":257
-- *                         conv[i, j, k] = top / bot
-- *                     else:
-- *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]
-- */
--            __pyx_t_60 = __pyx_v_i;
--            __pyx_t_61 = __pyx_v_j;
--            __pyx_t_62 = __pyx_v_k;
--            __pyx_t_63 = __pyx_v_i;
--            __pyx_t_64 = __pyx_v_j;
--            __pyx_t_65 = __pyx_v_k;
--            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_fixed.diminfo[0].strides, __py [...]
--          }
--          __pyx_L33:;
--          goto __pyx_L25;
--        }
--        /*else*/ {
--
--          /* "astropy/convolution/boundary_wrap.pyx":259
-- *                         conv[i, j, k] = fixed[i, j, k]
-- *                 else:
-- *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
-- * 
-- *     return conv
-- */
--          __pyx_t_66 = __pyx_v_i;
--          __pyx_t_67 = __pyx_v_j;
--          __pyx_t_68 = __pyx_v_k;
--          __pyx_t_69 = __pyx_v_i;
--          __pyx_t_70 = __pyx_v_j;
--          __pyx_t_71 = __pyx_v_k;
--          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_ [...]
--        }
--        __pyx_L25:;
--      }
--    }
--  }
--
--  /* "astropy/convolution/boundary_wrap.pyx":261
-- *                     conv[i, j, k] = fixed[i, j, k]
-- * 
-- *     return conv             # <<<<<<<<<<<<<<
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
--  __pyx_r = ((PyObject *)__pyx_v_conv);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  __Pyx_XDECREF(__pyx_t_7);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_XDECREF(__pyx_t_9);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve3d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
--  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
--  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":194
-- *         # experimental exception made for __getbuffer__ and __releasebuffer__
-- *         # -- the details of this may change.
-- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
-- *             # This implementation of getbuffer is geared towards Cython
-- *             # requirements, and does not yet fullfill the PEP.
-- */
--
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_v_copy_shape;
--  int __pyx_v_i;
--  int __pyx_v_ndim;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  int __pyx_v_t;
--  char *__pyx_v_f;
--  PyArray_Descr *__pyx_v_descr = 0;
--  int __pyx_v_offset;
--  int __pyx_v_hasfields;
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  int __pyx_t_7;
--  PyObject *__pyx_t_8 = NULL;
--  char *__pyx_t_9;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("__getbuffer__", 0);
--  if (__pyx_v_info != NULL) {
--    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(__pyx_v_info->obj);
--  }
--
--  /* "numpy.pxd":200
-- *             # of flags
-- * 
-- *             if info == NULL: return             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int copy_shape, i, ndim
-- */
--  __pyx_t_1 = (__pyx_v_info == NULL);
--  if (__pyx_t_1) {
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":203
-- * 
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":204
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- * 
-- *             ndim = PyArray_NDIM(self)
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":206
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
--
--  /* "numpy.pxd":208
-- *             ndim = PyArray_NDIM(self)
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 copy_shape = 1
-- *             else:
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":209
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 copy_shape = 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 copy_shape = 0
-- */
--    __pyx_v_copy_shape = 1;
--    goto __pyx_L4;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":211
-- *                 copy_shape = 1
-- *             else:
-- *                 copy_shape = 0             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- */
--    __pyx_v_copy_shape = 0;
--  }
--  __pyx_L4:;
--
--  /* "numpy.pxd":213
-- *                 copy_shape = 0
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- */
--  __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":214
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- */
--    __pyx_t_2 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS));
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L5;
--  }
--  __pyx_L5:;
--
--  /* "numpy.pxd":217
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- */
--  __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":218
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- */
--    __pyx_t_1 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS));
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (__pyx_t_2) {
--
--    /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L6;
--  }
--  __pyx_L6:;
--
--  /* "numpy.pxd":221
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
-- *             info.ndim = ndim
-- *             if copy_shape:
-- */
--  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
--
--  /* "numpy.pxd":222
-- * 
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim             # <<<<<<<<<<<<<<
-- *             if copy_shape:
-- *                 # Allocate new buffer for strides and shape info.
-- */
--  __pyx_v_info->ndim = __pyx_v_ndim;
--
--  /* "numpy.pxd":223
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim
-- *             if copy_shape:             # <<<<<<<<<<<<<<
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- */
--  if (__pyx_v_copy_shape) {
--
--    /* "numpy.pxd":226
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
--
--    /* "numpy.pxd":227
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- */
--    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
--
--    /* "numpy.pxd":228
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- */
--    __pyx_t_5 = __pyx_v_ndim;
--    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
--      __pyx_v_i = __pyx_t_6;
--
--      /* "numpy.pxd":229
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- */
--      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
--
--      /* "numpy.pxd":230
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- */
--      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
--    }
--    goto __pyx_L7;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":232
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
--
--    /* "numpy.pxd":233
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- */
--    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
--  }
--  __pyx_L7:;
--
--  /* "numpy.pxd":234
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- */
--  __pyx_v_info->suboffsets = NULL;
--
--  /* "numpy.pxd":235
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- * 
-- */
--  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
--
--  /* "numpy.pxd":236
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int t
-- */
--  __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(__pyx_v_self));
--
--  /* "numpy.pxd":239
-- * 
-- *             cdef int t
-- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
-- *             cdef dtype descr = self.descr
-- *             cdef list stack
-- */
--  __pyx_v_f = NULL;
--
--  /* "numpy.pxd":240
-- *             cdef int t
-- *             cdef char* f = NULL
-- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
-- *             cdef list stack
-- *             cdef int offset
-- */
--  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
--  __Pyx_INCREF(__pyx_t_4);
--  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "numpy.pxd":244
-- *             cdef int offset
-- * 
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields and not copy_shape:
-- */
--  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
--
--  /* "numpy.pxd":246
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
-- * 
-- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
-- *                 # do not call releasebuffer
-- *                 info.obj = None
-- */
--  __pyx_t_2 = (!__pyx_v_hasfields);
--  if (__pyx_t_2) {
--    __pyx_t_3 = (!__pyx_v_copy_shape);
--    __pyx_t_1 = __pyx_t_3;
--  } else {
--    __pyx_t_1 = __pyx_t_2;
--  }
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":248
-- *             if not hasfields and not copy_shape:
-- *                 # do not call releasebuffer
-- *                 info.obj = None             # <<<<<<<<<<<<<<
-- *             else:
-- *                 # need to call releasebuffer
-- */
--    __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(Py_None);
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = Py_None;
--    goto __pyx_L10;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":251
-- *             else:
-- *                 # need to call releasebuffer
-- *                 info.obj = self             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields:
-- */
--    __Pyx_INCREF(((PyObject *)__pyx_v_self));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
--  }
--  __pyx_L10:;
--
--  /* "numpy.pxd":253
-- *                 info.obj = self
-- * 
-- *             if not hasfields:             # <<<<<<<<<<<<<<
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- */
--  __pyx_t_1 = (!__pyx_v_hasfields);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":254
-- * 
-- *             if not hasfields:
-- *                 t = descr.type_num             # <<<<<<<<<<<<<<
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- */
--    __pyx_t_5 = __pyx_v_descr->type_num;
--    __pyx_v_t = __pyx_t_5;
--
--    /* "numpy.pxd":255
-- *             if not hasfields:
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_1 = (__pyx_v_descr->byteorder == '>');
--    if (__pyx_t_1) {
--      __pyx_t_2 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_2 = __pyx_t_1;
--    }
--    if (!__pyx_t_2) {
--
--      /* "numpy.pxd":256
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- */
--      __pyx_t_1 = (__pyx_v_descr->byteorder == '<');
--      if (__pyx_t_1) {
--        __pyx_t_3 = (!__pyx_v_little_endian);
--        __pyx_t_7 = __pyx_t_3;
--      } else {
--        __pyx_t_7 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_7;
--    } else {
--      __pyx_t_1 = __pyx_t_2;
--    }
--    if (__pyx_t_1) {
--
--      /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L12;
--    }
--    __pyx_L12:;
--
--    /* "numpy.pxd":258
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_BYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__b;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":259
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UBYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__B;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":260
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_SHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__h;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":261
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_USHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__H;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":262
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_INT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__i;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":263
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UINT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__I;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":264
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__l;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":265
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__L;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":266
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":267
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":268
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_FLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__f;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":269
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__d;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":270
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__g;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":271
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zf;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":272
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zd;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":273
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zg;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":274
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_OBJECT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__O;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":276
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *                 info.format = f
-- *                 return
-- */
--      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
--      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
--      __pyx_t_8 = 0;
--      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_8);
--      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--    __pyx_L13:;
--
--    /* "numpy.pxd":277
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f             # <<<<<<<<<<<<<<
-- *                 return
-- *             else:
-- */
--    __pyx_v_info->format = __pyx_v_f;
--
--    /* "numpy.pxd":278
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f
-- *                 return             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- */
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L11;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":280
-- *                 return
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0
-- */
--    __pyx_v_info->format = ((char *)malloc(255));
--
--    /* "numpy.pxd":281
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
-- *                 offset = 0
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- */
--    (__pyx_v_info->format[0]) = '^';
--
--    /* "numpy.pxd":282
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0             # <<<<<<<<<<<<<<
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- */
--    __pyx_v_offset = 0;
--
--    /* "numpy.pxd":285
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)             # <<<<<<<<<<<<<<
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- */
--    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_v_f = __pyx_t_9;
--
--    /* "numpy.pxd":286
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)
-- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- */
--    (__pyx_v_f[0]) = '\x00';
--  }
--  __pyx_L11:;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = -1;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
--  }
--  goto __pyx_L2;
--  __pyx_L0:;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
--    __Pyx_GOTREF(Py_None);
--    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
--  }
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
--  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":288
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- */
--
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
--
--  /* "numpy.pxd":289
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_t_1 = PyArray_HASFIELDS(__pyx_v_self);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":290
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)
-- */
--    free(__pyx_v_info->format);
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":291
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.strides)
-- *                 # info.shape was stored after info.strides in the same block
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":292
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
-- *                 # info.shape was stored after info.strides in the same block
-- * 
-- */
--    free(__pyx_v_info->strides);
--    goto __pyx_L4;
--  }
--  __pyx_L4:;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":768
-- * ctypedef npy_cdouble     complex_t
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
--
--  /* "numpy.pxd":769
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":771
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
--
--  /* "numpy.pxd":772
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":774
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
--
--  /* "numpy.pxd":775
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":777
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
--
--  /* "numpy.pxd":778
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":780
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
--
--  /* "numpy.pxd":781
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":783
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
-- *     # Recursive utility function used in __getbuffer__ to get format
-- *     # string. The new location in the format string is returned.
-- */
--
--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) {
--  PyArray_Descr *__pyx_v_child = 0;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  PyObject *__pyx_v_fields = 0;
--  PyObject *__pyx_v_childname = NULL;
--  PyObject *__pyx_v_new_offset = NULL;
--  PyObject *__pyx_v_t = NULL;
--  char *__pyx_r;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  Py_ssize_t __pyx_t_2;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *(*__pyx_t_6)(PyObject *);
--  int __pyx_t_7;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  long __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
--
--  /* "numpy.pxd":790
-- *     cdef int delta_offset
-- *     cdef tuple i
-- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- *     cdef tuple fields
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":791
-- *     cdef tuple i
-- *     cdef int endian_detector = 1
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- *     cdef tuple fields
-- * 
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":794
-- *     cdef tuple fields
-- * 
-- *     for childname in descr.names:             # <<<<<<<<<<<<<<
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields
-- */
--  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
--  for (;;) {
--    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
--    #if CYTHON_COMPILING_IN_CPYTHON
--    __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_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #else
--    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #endif
--    __Pyx_XDECREF(__pyx_v_childname);
--    __pyx_v_childname = __pyx_t_3;
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":795
-- * 
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
-- *         child, new_offset = fields
-- * 
-- */
--    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
--    __pyx_v_fields = ((PyObject*)__pyx_t_3);
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":796
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields             # <<<<<<<<<<<<<<
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- */
--    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
--      PyObject* sequence = ((PyObject *)__pyx_v_fields);
--      #if CYTHON_COMPILING_IN_CPYTHON
--      Py_ssize_t size = Py_SIZE(sequence);
--      #else
--      Py_ssize_t size = PySequence_Size(sequence);
--      #endif
--      if (unlikely(size != 2)) {
--        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
--        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      #if CYTHON_COMPILING_IN_CPYTHON
--      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
--      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
--      __Pyx_INCREF(__pyx_t_3);
--      __Pyx_INCREF(__pyx_t_4);
--      #else
--      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      #endif
--    } else if (1) {
--      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else
--    {
--      Py_ssize_t index = -1;
--      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
--      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_3);
--      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_4);
--      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_t_6 = NULL;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      goto __pyx_L6_unpacking_done;
--      __pyx_L5_unpacking_failed:;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_6 = NULL;
--      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_L6_unpacking_done:;
--    }
--    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
--    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
--    __pyx_t_3 = 0;
--    __Pyx_XDECREF(__pyx_v_new_offset);
--    __pyx_v_new_offset = __pyx_t_4;
--    __pyx_t_4 = 0;
--
--    /* "numpy.pxd":798
-- *         child, new_offset = fields
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- */
--    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L7;
--    }
--    __pyx_L7:;
--
--    /* "numpy.pxd":801
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_7 = (__pyx_v_child->byteorder == '>');
--    if (__pyx_t_7) {
--      __pyx_t_8 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_8 = __pyx_t_7;
--    }
--    if (!__pyx_t_8) {
--
--      /* "numpy.pxd":802
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *             raise ValueError(u"Non-native byte order not supported")
-- *             # One could encode it in the format string and have Cython
-- */
--      __pyx_t_7 = (__pyx_v_child->byteorder == '<');
--      if (__pyx_t_7) {
--        __pyx_t_9 = (!__pyx_v_little_endian);
--        __pyx_t_10 = __pyx_t_9;
--      } else {
--        __pyx_t_10 = __pyx_t_7;
--      }
--      __pyx_t_7 = __pyx_t_10;
--    } else {
--      __pyx_t_7 = __pyx_t_8;
--    }
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L8;
--    }
--    __pyx_L8:;
--
--    /* "numpy.pxd":813
-- * 
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- */
--    while (1) {
--      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (!__pyx_t_7) break;
--
--      /* "numpy.pxd":814
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
-- *             f += 1
-- *             offset[0] += 1
-- */
--      (__pyx_v_f[0]) = 120;
--
--      /* "numpy.pxd":815
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1             # <<<<<<<<<<<<<<
-- *             offset[0] += 1
-- * 
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--
--      /* "numpy.pxd":816
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- *             offset[0] += 1             # <<<<<<<<<<<<<<
-- * 
-- *         offset[0] += child.itemsize
-- */
--      __pyx_t_11 = 0;
--      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
--    }
--
--    /* "numpy.pxd":818
-- *             offset[0] += 1
-- * 
-- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- */
--    __pyx_t_11 = 0;
--    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
--
--    /* "numpy.pxd":820
-- *         offset[0] += child.itemsize
-- * 
-- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
-- *             t = child.type_num
-- *             if end - f < 5:
-- */
--    __pyx_t_7 = (!PyDataType_HASFIELDS(__pyx_v_child));
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":821
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num             # <<<<<<<<<<<<<<
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- */
--      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __Pyx_XDECREF(__pyx_v_t);
--      __pyx_v_t = __pyx_t_3;
--      __pyx_t_3 = 0;
--
--      /* "numpy.pxd":822
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num
-- *             if end - f < 5:             # <<<<<<<<<<<<<<
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- * 
-- */
--      __pyx_t_7 = ((__pyx_v_end - __pyx_v_f) < 5);
--      if (__pyx_t_7) {
--
--        /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--
--      /* "numpy.pxd":826
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 98;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":827
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 66;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":828
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 104;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":829
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 72;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":830
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 105;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":831
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 73;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":832
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 108;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":833
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 76;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":834
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 113;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":835
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 81;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":836
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 102;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":837
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 100;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":838
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 103;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":839
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 102;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":840
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 100;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":841
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 103;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":842
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 79;
--        goto __pyx_L13;
--      }
--      /*else*/ {
--
--        /* "numpy.pxd":844
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *             f += 1
-- *         else:
-- */
--        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
--        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--        __pyx_t_5 = 0;
--        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_5);
--        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      __pyx_L13:;
--
--      /* "numpy.pxd":845
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *             f += 1             # <<<<<<<<<<<<<<
-- *         else:
-- *             # Cython ignores struct boundary information ("T{...}"),
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--      goto __pyx_L11;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":849
-- *             # Cython ignores struct boundary information ("T{...}"),
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
-- *     return f
-- * 
-- */
--      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_v_f = __pyx_t_12;
--    }
--    __pyx_L11:;
--  }
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "numpy.pxd":850
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)
-- *     return f             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __pyx_r = __pyx_v_f;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_child);
--  __Pyx_XDECREF(__pyx_v_fields);
--  __Pyx_XDECREF(__pyx_v_childname);
--  __Pyx_XDECREF(__pyx_v_new_offset);
--  __Pyx_XDECREF(__pyx_v_t);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":965
-- * 
-- * 
-- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- */
--
--static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
--  PyObject *__pyx_v_baseptr;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("set_array_base", 0);
--
--  /* "numpy.pxd":967
-- * cdef inline void set_array_base(ndarray arr, object base):
-- *      cdef PyObject* baseptr
-- *      if base is None:             # <<<<<<<<<<<<<<
-- *          baseptr = NULL
-- *      else:
-- */
--  __pyx_t_1 = (__pyx_v_base == Py_None);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":968
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- *          baseptr = NULL             # <<<<<<<<<<<<<<
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- */
--    __pyx_v_baseptr = NULL;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":970
-- *          baseptr = NULL
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- */
--    Py_INCREF(__pyx_v_base);
--
--    /* "numpy.pxd":971
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr
-- */
--    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":972
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
-- *      arr.base = baseptr
-- * 
-- */
--  Py_XDECREF(__pyx_v_arr->base);
--
--  /* "numpy.pxd":973
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- */
--  __pyx_v_arr->base = __pyx_v_baseptr;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("get_array_base", 0);
--
--  /* "numpy.pxd":976
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
-- *         return None
-- *     else:
-- */
--  __pyx_t_1 = (__pyx_v_arr->base == NULL);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":977
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:
-- *         return None             # <<<<<<<<<<<<<<
-- *     else:
-- *         return <object>arr.base
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(Py_None);
--    __pyx_r = Py_None;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":979
-- *         return None
-- *     else:
-- *         return <object>arr.base             # <<<<<<<<<<<<<<
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
--    __pyx_r = ((PyObject *)__pyx_v_arr->base);
--    goto __pyx_L0;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--static PyMethodDef __pyx_methods[] = {
--  {0, 0, 0, 0}
--};
--
--#if PY_MAJOR_VERSION >= 3
--static struct PyModuleDef __pyx_moduledef = {
--  #if PY_VERSION_HEX < 0x03020000
--    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
--  #else
--    PyModuleDef_HEAD_INIT,
--  #endif
--    __Pyx_NAMESTR("boundary_wrap"),
--    0, /* m_doc */
--    -1, /* m_size */
--    __pyx_methods /* m_methods */,
--    NULL, /* m_reload */
--    NULL, /* m_traverse */
--    NULL, /* m_clear */
--    NULL /* m_free */
--};
--#endif
--
--static __Pyx_StringTabEntry __pyx_string_tab[] = {
--  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
--  {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0},
--  {&__pyx_kp_u_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 1, 0, 0},
--  {&__pyx_kp_u_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 1, 0, 0},
--  {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1},
--  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
--  {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1},
--  {&__pyx_n_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 1},
--  {&__pyx_n_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 1},
--  {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0},
--  {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0},
--  {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0},
--  {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1},
--  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
--  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
--  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
--  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
--  {&__pyx_n_s__bot, __pyx_k__bot, sizeof(__pyx_k__bot), 0, 0, 1, 1},
--  {&__pyx_n_s__conv, __pyx_k__conv, sizeof(__pyx_k__conv), 0, 0, 1, 1},
--  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
--  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
--  {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1},
--  {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1},
--  {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1},
--  {&__pyx_n_s__g, __pyx_k__g, sizeof(__pyx_k__g), 0, 0, 1, 1},
--  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
--  {&__pyx_n_s__ii, __pyx_k__ii, sizeof(__pyx_k__ii), 0, 0, 1, 1},
--  {&__pyx_n_s__iii, __pyx_k__iii, sizeof(__pyx_k__iii), 0, 0, 1, 1},
--  {&__pyx_n_s__iimax, __pyx_k__iimax, sizeof(__pyx_k__iimax), 0, 0, 1, 1},
--  {&__pyx_n_s__iimin, __pyx_k__iimin, sizeof(__pyx_k__iimin), 0, 0, 1, 1},
--  {&__pyx_n_s__j, __pyx_k__j, sizeof(__pyx_k__j), 0, 0, 1, 1},
--  {&__pyx_n_s__jj, __pyx_k__jj, sizeof(__pyx_k__jj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjj, __pyx_k__jjj, sizeof(__pyx_k__jjj), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmax, __pyx_k__jjmax, sizeof(__pyx_k__jjmax), 0, 0, 1, 1},
--  {&__pyx_n_s__jjmin, __pyx_k__jjmin, sizeof(__pyx_k__jjmin), 0, 0, 1, 1},
--  {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1},
--  {&__pyx_n_s__ker, __pyx_k__ker, sizeof(__pyx_k__ker), 0, 0, 1, 1},
--  {&__pyx_n_s__kk, __pyx_k__kk, sizeof(__pyx_k__kk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkk, __pyx_k__kkk, sizeof(__pyx_k__kkk), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmax, __pyx_k__kkmax, sizeof(__pyx_k__kkmax), 0, 0, 1, 1},
--  {&__pyx_n_s__kkmin, __pyx_k__kkmin, sizeof(__pyx_k__kkmin), 0, 0, 1, 1},
--  {&__pyx_n_s__nkx, __pyx_k__nkx, sizeof(__pyx_k__nkx), 0, 0, 1, 1},
--  {&__pyx_n_s__nky, __pyx_k__nky, sizeof(__pyx_k__nky), 0, 0, 1, 1},
--  {&__pyx_n_s__nkz, __pyx_k__nkz, sizeof(__pyx_k__nkz), 0, 0, 1, 1},
--  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
--  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
--  {&__pyx_n_s__nx, __pyx_k__nx, sizeof(__pyx_k__nx), 0, 0, 1, 1},
--  {&__pyx_n_s__ny, __pyx_k__ny, sizeof(__pyx_k__ny), 0, 0, 1, 1},
--  {&__pyx_n_s__nz, __pyx_k__nz, sizeof(__pyx_k__nz), 0, 0, 1, 1},
--  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
--  {&__pyx_n_s__top, __pyx_k__top, sizeof(__pyx_k__top), 0, 0, 1, 1},
--  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
--  {&__pyx_n_s__wkx, __pyx_k__wkx, sizeof(__pyx_k__wkx), 0, 0, 1, 1},
--  {&__pyx_n_s__wky, __pyx_k__wky, sizeof(__pyx_k__wky), 0, 0, 1, 1},
--  {&__pyx_n_s__wkz, __pyx_k__wkz, sizeof(__pyx_k__wkz), 0, 0, 1, 1},
--  {0, 0, 0, 0, 0, 0, 0}
--};
--static int __Pyx_InitCachedBuiltins(void) {
--  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--static int __Pyx_InitCachedConstants(void) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
--
--  /* "astropy/convolution/boundary_wrap.pyx":20
-- * 
-- *     if g.shape[0] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_2);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
--
--  /* "astropy/convolution/boundary_wrap.pyx":88
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_3);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
--
--  /* "astropy/convolution/boundary_wrap.pyx":171
-- * 
-- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
-- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
-- * 
-- *     assert f.dtype == DTYPE and g.dtype == DTYPE
-- */
--  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_4);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
--
--  /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_6);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
--
--  /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--  __pyx_k_tuple_8 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_7)); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_8);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8));
--
--  /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_10);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
--
--  /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_13);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
--
--  /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--  __pyx_k_tuple_14 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_14);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14));
--
--  /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--  __pyx_k_tuple_16 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_15)); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_16);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
--
--  /* "astropy/convolution/boundary_wrap.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_wrap(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--  __pyx_k_tuple_17 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((Py [...]
--  __Pyx_GOTREF(__pyx_k_tuple_17);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
--  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 16, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_wrap.pyx":84
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_wrap(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--  __pyx_k_tuple_22 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((PyObject *)__pyx_n_s__ii), ((PyObject  [...]
--  __Pyx_GOTREF(__pyx_k_tuple_22);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
--  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 84, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/convolution/boundary_wrap.pyx":167
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_wrap(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--  __pyx_k_tuple_25 = PyTuple_Pack(32, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject  [...]
--  __Pyx_GOTREF(__pyx_k_tuple_25);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
--  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 167, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_RefNannyFinishContext();
--  return 0;
--  __pyx_L1_error:;
--  __Pyx_RefNannyFinishContext();
--  return -1;
--}
--
--static int __Pyx_InitGlobals(void) {
--  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--#if PY_MAJOR_VERSION < 3
--PyMODINIT_FUNC initboundary_wrap(void); /*proto*/
--PyMODINIT_FUNC initboundary_wrap(void)
--#else
--PyMODINIT_FUNC PyInit_boundary_wrap(void); /*proto*/
--PyMODINIT_FUNC PyInit_boundary_wrap(void)
--#endif
--{
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  __Pyx_RefNannyDeclarations
--  #if CYTHON_REFNANNY
--  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
--  if (!__Pyx_RefNanny) {
--      PyErr_Clear();
--      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
--      if (!__Pyx_RefNanny)
--          Py_FatalError("failed to import 'refnanny' module");
--  }
--  #endif
--  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_boundary_wrap(void)", 0);
--  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #ifdef __Pyx_CyFunction_USED
--  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_FusedFunction_USED
--  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_Generator_USED
--  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  /*--- Library function declarations ---*/
--  /*--- Threads initialization code ---*/
--  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
--  #ifdef WITH_THREAD /* Python build with threading support? */
--  PyEval_InitThreads();
--  #endif
--  #endif
--  /*--- Module creation code ---*/
--  #if PY_MAJOR_VERSION < 3
--  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("boundary_wrap"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
--  #else
--  __pyx_m = PyModule_Create(&__pyx_moduledef);
--  #endif
--  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if PY_MAJOR_VERSION >= 3
--  {
--    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_wrap")) {
--      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_wrap", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--  }
--  #endif
--  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if CYTHON_COMPILING_IN_PYPY
--  Py_INCREF(__pyx_b);
--  #endif
--  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  /*--- Initialize various global constants etc. ---*/
--  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_module_is_main_astropy__convolution__boundary_wrap) {
--    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  }
--  /*--- Builtin init code ---*/
--  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Constants init code ---*/
--  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Global init code ---*/
--  /*--- Variable export code ---*/
--  /*--- Function export code ---*/
--  /*--- Type init code ---*/
--  /*--- Type import code ---*/
--  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
--  #if CYTHON_COMPILING_IN_PYPY
--  sizeof(PyTypeObject),
--  #else
--  sizeof(PyHeapTypeObject),
--  #endif
--  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Variable import code ---*/
--  /*--- Function import code ---*/
--  /*--- Execution code ---*/
--
--  /* "astropy/convolution/boundary_wrap.pyx":3
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst
-- * from __future__ import division
-- * import numpy as np             # <<<<<<<<<<<<<<
-- * cimport numpy as np
-- * 
-- */
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":6
-- * cimport numpy as np
-- * 
-- * DTYPE = np.float             # <<<<<<<<<<<<<<
-- * ctypedef np.float_t DTYPE_t
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":16
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve1d_boundary_wrap(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=1] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":84
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve2d_boundary_wrap(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=2] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":167
-- * 
-- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
-- * def convolve3d_boundary_wrap(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
-- *                              np.ndarray[DTYPE_t, ndim=3] g):
-- * 
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/convolution/boundary_wrap.pyx":1
-- * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
-- * from __future__ import division
-- * import numpy as np
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--
--  /* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  if (__pyx_m) {
--    __Pyx_AddTraceback("init astropy.convolution.boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
--    Py_DECREF(__pyx_m); __pyx_m = 0;
--  } else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_wrap");
--  }
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  #if PY_MAJOR_VERSION < 3
--  return;
--  #else
--  return __pyx_m;
--  #endif
--}
--
--/* Runtime support code */
--#if CYTHON_REFNANNY
--static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
--    PyObject *m = NULL, *p = NULL;
--    void *r = NULL;
--    m = PyImport_ImportModule((char *)modname);
--    if (!m) goto end;
--    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
--    if (!p) goto end;
--    r = PyLong_AsVoidPtr(p);
--end:
--    Py_XDECREF(p);
--    Py_XDECREF(m);
--    return (__Pyx_RefNannyAPIStruct *)r;
--}
--#endif /* CYTHON_REFNANNY */
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
--    PyObject *result;
--    result = PyObject_GetAttr(dict, name);
--    if (!result) {
--        if (dict != __pyx_b) {
--            PyErr_Clear();
--            result = PyObject_GetAttr(__pyx_b, name);
--        }
--        if (!result) {
--            PyErr_SetObject(PyExc_NameError, name);
--        }
--    }
--    return result;
--}
--
--static void __Pyx_RaiseArgtupleInvalid(
--    const char* func_name,
--    int exact,
--    Py_ssize_t num_min,
--    Py_ssize_t num_max,
--    Py_ssize_t num_found)
--{
--    Py_ssize_t num_expected;
--    const char *more_or_less;
--    if (num_found < num_min) {
--        num_expected = num_min;
--        more_or_less = "at least";
--    } else {
--        num_expected = num_max;
--        more_or_less = "at most";
--    }
--    if (exact) {
--        more_or_less = "exactly";
--    }
--    PyErr_Format(PyExc_TypeError,
--                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
--                 func_name, more_or_less, num_expected,
--                 (num_expected == 1) ? "" : "s", num_found);
--}
--
--static void __Pyx_RaiseDoubleKeywordsError(
--    const char* func_name,
--    PyObject* kw_name)
--{
--    PyErr_Format(PyExc_TypeError,
--        #if PY_MAJOR_VERSION >= 3
--        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
--        #else
--        "%s() got multiple values for keyword argument '%s'", func_name,
--        PyString_AsString(kw_name));
--        #endif
--}
--
--static int __Pyx_ParseOptionalKeywords(
--    PyObject *kwds,
--    PyObject **argnames[],
--    PyObject *kwds2,
--    PyObject *values[],
--    Py_ssize_t num_pos_args,
--    const char* function_name)
--{
--    PyObject *key = 0, *value = 0;
--    Py_ssize_t pos = 0;
--    PyObject*** name;
--    PyObject*** first_kw_arg = argnames + num_pos_args;
--    while (PyDict_Next(kwds, &pos, &key, &value)) {
--        name = first_kw_arg;
--        while (*name && (**name != key)) name++;
--        if (*name) {
--            values[name-argnames] = value;
--            continue;
--        }
--        name = first_kw_arg;
--        #if PY_MAJOR_VERSION < 3
--        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
--            while (*name) {
--                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
--                        && _PyString_Eq(**name, key)) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    if ((**argname == key) || (
--                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
--                             && _PyString_Eq(**argname, key))) {
--                        goto arg_passed_twice;
--                    }
--                    argname++;
--                }
--            }
--        } else
--        #endif
--        if (likely(PyUnicode_Check(key))) {
--            while (*name) {
--                int cmp = (**name == key) ? 0 :
--                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
--                #endif
--                    PyUnicode_Compare(**name, key);
--                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                if (cmp == 0) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    int cmp = (**argname == key) ? 0 :
--                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
--                    #endif
--                        PyUnicode_Compare(**argname, key);
--                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                    if (cmp == 0) goto arg_passed_twice;
--                    argname++;
--                }
--            }
--        } else
--            goto invalid_keyword_type;
--        if (kwds2) {
--            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
--        } else {
--            goto invalid_keyword;
--        }
--    }
--    return 0;
--arg_passed_twice:
--    __Pyx_RaiseDoubleKeywordsError(function_name, key);
--    goto bad;
--invalid_keyword_type:
--    PyErr_Format(PyExc_TypeError,
--        "%s() keywords must be strings", function_name);
--    goto bad;
--invalid_keyword:
--    PyErr_Format(PyExc_TypeError,
--    #if PY_MAJOR_VERSION < 3
--        "%s() got an unexpected keyword argument '%s'",
--        function_name, PyString_AsString(key));
--    #else
--        "%s() got an unexpected keyword argument '%U'",
--        function_name, key);
--    #endif
--bad:
--    return -1;
--}
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact)
--{
--    if (!type) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (none_allowed && obj == Py_None) return 1;
--    else if (exact) {
--        if (Py_TYPE(obj) == type) return 1;
--    }
--    else {
--        if (PyObject_TypeCheck(obj, type)) return 1;
--    }
--    PyErr_Format(PyExc_TypeError,
--        "Argument '%s' has incorrect type (expected %s, got %s)",
--        name, type->tp_name, Py_TYPE(obj)->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_IsLittleEndian(void) {
--  unsigned int n = 1;
--  return *(unsigned char*)(&n) != 0;
--}
--static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
--                              __Pyx_BufFmt_StackElem* stack,
--                              __Pyx_TypeInfo* type) {
--  stack[0].field = &ctx->root;
--  stack[0].parent_offset = 0;
--  ctx->root.type = type;
--  ctx->root.name = "buffer dtype";
--  ctx->root.offset = 0;
--  ctx->head = stack;
--  ctx->head->field = &ctx->root;
--  ctx->fmt_offset = 0;
--  ctx->head->parent_offset = 0;
--  ctx->new_packmode = '@';
--  ctx->enc_packmode = '@';
--  ctx->new_count = 1;
--  ctx->enc_count = 0;
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  ctx->is_valid_array = 0;
--  ctx->struct_alignment = 0;
--  while (type->typegroup == 'S') {
--    ++ctx->head;
--    ctx->head->field = type->fields;
--    ctx->head->parent_offset = 0;
--    type = type->fields->type;
--  }
--}
--static int __Pyx_BufFmt_ParseNumber(const char** ts) {
--    int count;
--    const char* t = *ts;
--    if (*t < '0' || *t > '9') {
--      return -1;
--    } else {
--        count = *t++ - '0';
--        while (*t >= '0' && *t < '9') {
--            count *= 10;
--            count += *t++ - '0';
--        }
--    }
--    *ts = t;
--    return count;
--}
--static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
--    int number = __Pyx_BufFmt_ParseNumber(ts);
--    if (number == -1) /* First char was not a digit */
--        PyErr_Format(PyExc_ValueError,\
--                     "Does not understand character buffer dtype format string ('%c')", **ts);
--    return number;
--}
--static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
--  PyErr_Format(PyExc_ValueError,
--               "Unexpected format string character: '%c'", ch);
--}
--static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': return "'char'";
--    case 'b': return "'signed char'";
--    case 'B': return "'unsigned char'";
--    case 'h': return "'short'";
--    case 'H': return "'unsigned short'";
--    case 'i': return "'int'";
--    case 'I': return "'unsigned int'";
--    case 'l': return "'long'";
--    case 'L': return "'unsigned long'";
--    case 'q': return "'long long'";
--    case 'Q': return "'unsigned long long'";
--    case 'f': return (is_complex ? "'complex float'" : "'float'");
--    case 'd': return (is_complex ? "'complex double'" : "'double'");
--    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
--    case 'T': return "a struct";
--    case 'O': return "Python object";
--    case 'P': return "a pointer";
--    case 's': case 'p': return "a string";
--    case 0: return "end";
--    default: return "unparseable format string";
--  }
--}
--static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return 2;
--    case 'i': case 'I': case 'l': case 'L': return 4;
--    case 'q': case 'Q': return 8;
--    case 'f': return (is_complex ? 8 : 4);
--    case 'd': return (is_complex ? 16 : 8);
--    case 'g': {
--      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
--      return 0;
--    }
--    case 'O': case 'P': return sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(short);
--    case 'i': case 'I': return sizeof(int);
--    case 'l': case 'L': return sizeof(long);
--    #ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
--    #endif
--    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
--    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
--    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
--    case 'O': case 'P': return sizeof(void*);
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--typedef struct { char c; short x; } __Pyx_st_short;
--typedef struct { char c; int x; } __Pyx_st_int;
--typedef struct { char c; long x; } __Pyx_st_long;
--typedef struct { char c; float x; } __Pyx_st_float;
--typedef struct { char c; double x; } __Pyx_st_double;
--typedef struct { char c; long double x; } __Pyx_st_longdouble;
--typedef struct { char c; void *x; } __Pyx_st_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--/* These are for computing the padding at the end of the struct to align
--   on the first member of the struct. This will probably the same as above,
--   but we don't have any guarantees.
-- */
--typedef struct { short x; char c; } __Pyx_pad_short;
--typedef struct { int x; char c; } __Pyx_pad_int;
--typedef struct { long x; char c; } __Pyx_pad_long;
--typedef struct { float x; char c; } __Pyx_pad_float;
--typedef struct { double x; char c; } __Pyx_pad_double;
--typedef struct { long double x; char c; } __Pyx_pad_longdouble;
--typedef struct { void *x; char c; } __Pyx_pad_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
--  switch (ch) {
--    case 'c':
--        return 'H';
--    case 'b': case 'h': case 'i':
--    case 'l': case 'q': case 's': case 'p':
--        return 'I';
--    case 'B': case 'H': case 'I': case 'L': case 'Q':
--        return 'U';
--    case 'f': case 'd': case 'g':
--        return (is_complex ? 'C' : 'R');
--    case 'O':
--        return 'O';
--    case 'P':
--        return 'P';
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
--  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
--    const char* expected;
--    const char* quote;
--    if (ctx->head == NULL) {
--      expected = "end";
--      quote = "";
--    } else {
--      expected = ctx->head->field->type->name;
--      quote = "'";
--    }
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected %s%s%s but got %s",
--                 quote, expected, quote,
--                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
--  } else {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_StructField* parent = (ctx->head - 1)->field;
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
--                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
--                 parent->type->name, field->name);
--  }
--}
--static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
--  char group;
--  size_t size, offset, arraysize = 1;
--  if (ctx->enc_type == 0) return 0;
--  if (ctx->head->field->type->arraysize[0]) {
--    int i, ndim = 0;
--    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
--        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
--        ndim = 1;
--        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
--            PyErr_Format(PyExc_ValueError,
--                         "Expected a dimension of size %zu, got %zu",
--                         ctx->head->field->type->arraysize[0], ctx->enc_count);
--            return -1;
--        }
--    }
--    if (!ctx->is_valid_array) {
--      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
--                   ctx->head->field->type->ndim, ndim);
--      return -1;
--    }
--    for (i = 0; i < ctx->head->field->type->ndim; i++) {
--      arraysize *= ctx->head->field->type->arraysize[i];
--    }
--    ctx->is_valid_array = 0;
--    ctx->enc_count = 1;
--  }
--  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
--  do {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_TypeInfo* type = field->type;
--    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
--      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
--    } else {
--      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
--    }
--    if (ctx->enc_packmode == '@') {
--      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
--      size_t align_mod_offset;
--      if (align_at == 0) return -1;
--      align_mod_offset = ctx->fmt_offset % align_at;
--      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
--      if (ctx->struct_alignment == 0)
--          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
--                                                                 ctx->is_complex);
--    }
--    if (type->size != size || type->typegroup != group) {
--      if (type->typegroup == 'C' && type->fields != NULL) {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        ++ctx->head;
--        ctx->head->field = type->fields;
--        ctx->head->parent_offset = parent_offset;
--        continue;
--      }
--      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
--      } else {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--      }
--    }
--    offset = ctx->head->parent_offset + field->offset;
--    if (ctx->fmt_offset != offset) {
--      PyErr_Format(PyExc_ValueError,
--                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
--                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
--      return -1;
--    }
--    ctx->fmt_offset += size;
--    if (arraysize)
--      ctx->fmt_offset += (arraysize - 1) * size;
--    --ctx->enc_count; /* Consume from buffer string */
--    while (1) {
--      if (field == &ctx->root) {
--        ctx->head = NULL;
--        if (ctx->enc_count != 0) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--        }
--        break; /* breaks both loops as ctx->enc_count == 0 */
--      }
--      ctx->head->field = ++field;
--      if (field->type == NULL) {
--        --ctx->head;
--        field = ctx->head->field;
--        continue;
--      } else if (field->type->typegroup == 'S') {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        if (field->type->fields->type == NULL) continue; /* empty struct */
--        field = field->type->fields;
--        ++ctx->head;
--        ctx->head->field = field;
--        ctx->head->parent_offset = parent_offset;
--        break;
--      } else {
--        break;
--      }
--    }
--  } while (ctx->enc_count);
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  return 0;
--}
--static CYTHON_INLINE PyObject *
--__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
--{
--    const char *ts = *tsp;
--    int i = 0, number;
--    int ndim = ctx->head->field->type->ndim;
--;
--    ++ts;
--    if (ctx->new_count != 1) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Cannot handle repeated arrays in format string");
--        return NULL;
--    }
--    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--    while (*ts && *ts != ')') {
--        if (isspace(*ts))
--            continue;
--        number = __Pyx_BufFmt_ExpectNumber(&ts);
--        if (number == -1) return NULL;
--        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
--            return PyErr_Format(PyExc_ValueError,
--                        "Expected a dimension of size %zu, got %d",
--                        ctx->head->field->type->arraysize[i], number);
--        if (*ts != ',' && *ts != ')')
--            return PyErr_Format(PyExc_ValueError,
--                                "Expected a comma in format string, got '%c'", *ts);
--        if (*ts == ',') ts++;
--        i++;
--    }
--    if (i != ndim)
--        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
--                            ctx->head->field->type->ndim, i);
--    if (!*ts) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Unexpected end of format string, expected ')'");
--        return NULL;
--    }
--    ctx->is_valid_array = 1;
--    ctx->new_count = 1;
--    *tsp = ++ts;
--    return Py_None;
--}
--static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
--  int got_Z = 0;
--  while (1) {
--    switch(*ts) {
--      case 0:
--        if (ctx->enc_type != 0 && ctx->head == NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        if (ctx->head != NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--                return ts;
--      case ' ':
--      case 10:
--      case 13:
--        ++ts;
--        break;
--      case '<':
--        if (!__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '>':
--      case '!':
--        if (__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '=':
--      case '@':
--      case '^':
--        ctx->new_packmode = *ts++;
--        break;
--      case 'T': /* substruct */
--        {
--          const char* ts_after_sub;
--          size_t i, struct_count = ctx->new_count;
--          size_t struct_alignment = ctx->struct_alignment;
--          ctx->new_count = 1;
--          ++ts;
--          if (*ts != '{') {
--            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
--            return NULL;
--          }
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          ctx->enc_count = 0;
--          ctx->struct_alignment = 0;
--          ++ts;
--          ts_after_sub = ts;
--          for (i = 0; i != struct_count; ++i) {
--            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
--            if (!ts_after_sub) return NULL;
--          }
--          ts = ts_after_sub;
--          if (struct_alignment) ctx->struct_alignment = struct_alignment;
--        }
--        break;
--      case '}': /* end of substruct; either repeat or move on */
--        {
--          size_t alignment = ctx->struct_alignment;
--          ++ts;
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          if (alignment && ctx->fmt_offset % alignment) {
--            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
--          }
--        }
--        return ts;
--      case 'x':
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        ctx->fmt_offset += ctx->new_count;
--        ctx->new_count = 1;
--        ctx->enc_count = 0;
--        ctx->enc_type = 0;
--        ctx->enc_packmode = ctx->new_packmode;
--        ++ts;
--        break;
--      case 'Z':
--        got_Z = 1;
--        ++ts;
--        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
--          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
--          return NULL;
--        }        /* fall through */
--      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
--      case 'l': case 'L': case 'q': case 'Q':
--      case 'f': case 'd': case 'g':
--      case 'O': case 's': case 'p':
--        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
--            ctx->enc_packmode == ctx->new_packmode) {
--          ctx->enc_count += ctx->new_count;
--        } else {
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_count = ctx->new_count;
--          ctx->enc_packmode = ctx->new_packmode;
--          ctx->enc_type = *ts;
--          ctx->is_complex = got_Z;
--        }
--        ++ts;
--        ctx->new_count = 1;
--        got_Z = 0;
--        break;
--      case ':':
--        ++ts;
--        while(*ts != ':') ++ts;
--        ++ts;
--        break;
--      case '(':
--        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
--        break;
--      default:
--        {
--          int number = __Pyx_BufFmt_ExpectNumber(&ts);
--          if (number == -1) return NULL;
--          ctx->new_count = (size_t)number;
--        }
--    }
--  }
--}
--static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
--  buf->buf = NULL;
--  buf->obj = NULL;
--  buf->strides = __Pyx_zeros;
--  buf->shape = __Pyx_zeros;
--  buf->suboffsets = __Pyx_minusones;
--}
--static CYTHON_INLINE int __Pyx_GetBufferAndValidate(
--        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
--        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
--{
--  if (obj == Py_None || obj == NULL) {
--    __Pyx_ZeroBuffer(buf);
--    return 0;
--  }
--  buf->buf = NULL;
--  if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail;
--  if (buf->ndim != nd) {
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer has wrong number of dimensions (expected %d, got %d)",
--                 nd, buf->ndim);
--    goto fail;
--  }
--  if (!cast) {
--    __Pyx_BufFmt_Context ctx;
--    __Pyx_BufFmt_Init(&ctx, stack, dtype);
--    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
--  }
--  if ((unsigned)buf->itemsize != dtype->size) {
--    PyErr_Format(PyExc_ValueError,
--      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
--      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
--      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
--    goto fail;
--  }
--  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
--  return 0;
--fail:;
--  __Pyx_ZeroBuffer(buf);
--  return -1;
--}
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
--  if (info->buf == NULL) return;
--  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
--  __Pyx_ReleaseBuffer(info);
--}
--
--static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
--    long r = a % b;
--    r += ((r != 0) & ((r ^ b) < 0)) * b;
--    return r;
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyObject *tmp_type, *tmp_value, *tmp_tb;
--    PyThreadState *tstate = PyThreadState_GET();
--    tmp_type = tstate->curexc_type;
--    tmp_value = tstate->curexc_value;
--    tmp_tb = tstate->curexc_traceback;
--    tstate->curexc_type = type;
--    tstate->curexc_value = value;
--    tstate->curexc_traceback = tb;
--    Py_XDECREF(tmp_type);
--    Py_XDECREF(tmp_value);
--    Py_XDECREF(tmp_tb);
--#else
--    PyErr_Restore(type, value, tb);
--#endif
--}
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    *type = tstate->curexc_type;
--    *value = tstate->curexc_value;
--    *tb = tstate->curexc_traceback;
--    tstate->curexc_type = 0;
--    tstate->curexc_value = 0;
--    tstate->curexc_traceback = 0;
--#else
--    PyErr_Fetch(type, value, tb);
--#endif
--}
--
--#if PY_MAJOR_VERSION < 3
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
--                        CYTHON_UNUSED PyObject *cause) {
--    Py_XINCREF(type);
--    if (!value || value == Py_None)
--        value = NULL;
--    else
--        Py_INCREF(value);
--    if (!tb || tb == Py_None)
--        tb = NULL;
--    else {
--        Py_INCREF(tb);
--        if (!PyTraceBack_Check(tb)) {
--            PyErr_SetString(PyExc_TypeError,
--                "raise: arg 3 must be a traceback or None");
--            goto raise_error;
--        }
--    }
--    #if PY_VERSION_HEX < 0x02050000
--    if (PyClass_Check(type)) {
--    #else
--    if (PyType_Check(type)) {
--    #endif
--#if CYTHON_COMPILING_IN_PYPY
--        if (!value) {
--            Py_INCREF(Py_None);
--            value = Py_None;
--        }
--#endif
--        PyErr_NormalizeException(&type, &value, &tb);
--    } else {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto raise_error;
--        }
--        value = type;
--        #if PY_VERSION_HEX < 0x02050000
--            if (PyInstance_Check(type)) {
--                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
--                Py_INCREF(type);
--            }
--            else {
--                type = 0;
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception must be an old-style class or instance");
--                goto raise_error;
--            }
--        #else
--            type = (PyObject*) Py_TYPE(type);
--            Py_INCREF(type);
--            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception class must be a subclass of BaseException");
--                goto raise_error;
--            }
--        #endif
--    }
--    __Pyx_ErrRestore(type, value, tb);
--    return;
--raise_error:
--    Py_XDECREF(value);
--    Py_XDECREF(type);
--    Py_XDECREF(tb);
--    return;
--}
--#else /* Python 3+ */
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
--    PyObject* owned_instance = NULL;
--    if (tb == Py_None) {
--        tb = 0;
--    } else if (tb && !PyTraceBack_Check(tb)) {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: arg 3 must be a traceback or None");
--        goto bad;
--    }
--    if (value == Py_None)
--        value = 0;
--    if (PyExceptionInstance_Check(type)) {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto bad;
--        }
--        value = type;
--        type = (PyObject*) Py_TYPE(value);
--    } else if (PyExceptionClass_Check(type)) {
--        PyObject *args;
--        if (!value)
--            args = PyTuple_New(0);
--        else if (PyTuple_Check(value)) {
--            Py_INCREF(value);
--            args = value;
--        }
--        else
--            args = PyTuple_Pack(1, value);
--        if (!args)
--            goto bad;
--        owned_instance = PyEval_CallObject(type, args);
--        Py_DECREF(args);
--        if (!owned_instance)
--            goto bad;
--        value = owned_instance;
--        if (!PyExceptionInstance_Check(value)) {
--            PyErr_Format(PyExc_TypeError,
--                         "calling %R should have returned an instance of "
--                         "BaseException, not %R",
--                         type, Py_TYPE(value));
--            goto bad;
--        }
--    } else {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: exception class must be a subclass of BaseException");
--        goto bad;
--    }
--    if (cause && cause != Py_None) {
--        PyObject *fixed_cause;
--        if (PyExceptionClass_Check(cause)) {
--            fixed_cause = PyObject_CallObject(cause, NULL);
--            if (fixed_cause == NULL)
--                goto bad;
--        }
--        else if (PyExceptionInstance_Check(cause)) {
--            fixed_cause = cause;
--            Py_INCREF(fixed_cause);
--        }
--        else {
--            PyErr_SetString(PyExc_TypeError,
--                            "exception causes must derive from "
--                            "BaseException");
--            goto bad;
--        }
--        PyException_SetCause(value, fixed_cause);
--    }
--    PyErr_SetObject(type, value);
--    if (tb) {
--        PyThreadState *tstate = PyThreadState_GET();
--        PyObject* tmp_tb = tstate->curexc_traceback;
--        if (tb != tmp_tb) {
--            Py_INCREF(tb);
--            tstate->curexc_traceback = tb;
--            Py_XDECREF(tmp_tb);
--        }
--    }
--bad:
--    Py_XDECREF(owned_instance);
--    return;
--}
--#endif
--
--static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
--    long q = a / b;
--    long r = a - q*b;
--    q -= ((r != 0) & ((r ^ b) < 0));
--    return q;
--}
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
--    if (unlikely(!type)) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (likely(PyObject_TypeCheck(obj, type)))
--        return 1;
--    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
--                 Py_TYPE(obj)->tp_name, type->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_mod_int(int a, int b) {
--    int r = a % b;
--    r += ((r != 0) & ((r ^ b) < 0)) * b;
--    return r;
--}
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
--    PyErr_Format(PyExc_ValueError,
--                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
--    PyErr_Format(PyExc_ValueError,
--                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
--                 index, (index == 1) ? "" : "s");
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--}
--
--static CYTHON_INLINE int __Pyx_IterFinish(void) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    PyObject* exc_type = tstate->curexc_type;
--    if (unlikely(exc_type)) {
--        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
--            PyObject *exc_value, *exc_tb;
--            exc_value = tstate->curexc_value;
--            exc_tb = tstate->curexc_traceback;
--            tstate->curexc_type = 0;
--            tstate->curexc_value = 0;
--            tstate->curexc_traceback = 0;
--            Py_DECREF(exc_type);
--            Py_XDECREF(exc_value);
--            Py_XDECREF(exc_tb);
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#else
--    if (unlikely(PyErr_Occurred())) {
--        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
--            PyErr_Clear();
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#endif
--}
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
--    if (unlikely(retval)) {
--        Py_DECREF(retval);
--        __Pyx_RaiseTooManyValuesError(expected);
--        return -1;
--    } else {
--        return __Pyx_IterFinish();
--    }
--    return 0;
--}
--
--#if PY_MAJOR_VERSION < 3
--static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
--    CYTHON_UNUSED PyObject *getbuffer_cobj;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (getbuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                             "__pyx_getbuffer"))) {
--        getbufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (getbufferproc) PyCapsule_GetPointer(getbuffer_cobj, "getbuffer(obj, view, flags)");
--      #else
--        func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj);
--      #endif
--        Py_DECREF(getbuffer_cobj);
--        if (!func)
--            goto fail;
--        return func(obj, view, flags);
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    return -1;
--}
--static void __Pyx_ReleaseBuffer(Py_buffer *view) {
--    PyObject *obj = view->obj;
--    CYTHON_UNUSED PyObject *releasebuffer_cobj;
--    if (!obj) return;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) {
--        PyBuffer_Release(view);
--        return;
--    }
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; }
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (releasebuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                                      "__pyx_releasebuffer"))) {
--        releasebufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (releasebufferproc) PyCapsule_GetPointer(releasebuffer_cobj, "releasebuffer(obj, view)");
--      #else
--        func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj);
--      #endif
--        Py_DECREF(releasebuffer_cobj);
--        if (!func)
--            goto fail;
--        func(obj, view);
--        return;
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    goto nofail;
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    PyErr_WriteUnraisable(obj);
--nofail:
--    Py_DECREF(obj);
--    view->obj = NULL;
--}
--#endif /*  PY_MAJOR_VERSION < 3 */
--
--
--    static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
--    PyObject *empty_list = 0;
--    PyObject *module = 0;
--    PyObject *global_dict = 0;
--    PyObject *empty_dict = 0;
--    PyObject *list;
--    #if PY_VERSION_HEX < 0x03030000
--    PyObject *py_import = 0;
--    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
--    if (!py_import)
--        goto bad;
--    #endif
--    if (from_list)
--        list = from_list;
--    else {
--        empty_list = PyList_New(0);
--        if (!empty_list)
--            goto bad;
--        list = empty_list;
--    }
--    global_dict = PyModule_GetDict(__pyx_m);
--    if (!global_dict)
--        goto bad;
--    empty_dict = PyDict_New();
--    if (!empty_dict)
--        goto bad;
--    #if PY_VERSION_HEX >= 0x02050000
--    {
--        #if PY_MAJOR_VERSION >= 3
--        if (level == -1) {
--            if (strchr(__Pyx_MODULE_NAME, '.')) {
--                #if PY_VERSION_HEX < 0x03030000
--                PyObject *py_level = PyInt_FromLong(1);
--                if (!py_level)
--                    goto bad;
--                module = PyObject_CallFunctionObjArgs(py_import,
--                    name, global_dict, empty_dict, list, py_level, NULL);
--                Py_DECREF(py_level);
--                #else
--                module = PyImport_ImportModuleLevelObject(
--                    name, global_dict, empty_dict, list, 1);
--                #endif
--                if (!module) {
--                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
--                        goto bad;
--                    PyErr_Clear();
--                }
--            }
--            level = 0; /* try absolute import on failure */
--        }
--        #endif
--        if (!module) {
--            #if PY_VERSION_HEX < 0x03030000
--            PyObject *py_level = PyInt_FromLong(level);
--            if (!py_level)
--                goto bad;
--            module = PyObject_CallFunctionObjArgs(py_import,
--                name, global_dict, empty_dict, list, py_level, NULL);
--            Py_DECREF(py_level);
--            #else
--            module = PyImport_ImportModuleLevelObject(
--                name, global_dict, empty_dict, list, level);
--            #endif
--        }
--    }
--    #else
--    if (level>0) {
--        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
--        goto bad;
--    }
--    module = PyObject_CallFunctionObjArgs(py_import,
--        name, global_dict, empty_dict, list, NULL);
--    #endif
--bad:
--    #if PY_VERSION_HEX < 0x03030000
--    Py_XDECREF(py_import);
--    #endif
--    Py_XDECREF(empty_list);
--    Py_XDECREF(empty_dict);
--    return module;
--}
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return ::std::complex< float >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return x + y*(__pyx_t_float_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      __pyx_t_float_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        float denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrtf(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypotf(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--            __pyx_t_float_complex z;
--            float r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    float denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(a, a);
--                    case 3:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, a);
--                    case 4:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_absf(a);
--                theta = atan2f(a.imag, a.real);
--            }
--            lnr = logf(r);
--            z_r = expf(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cosf(z_theta);
--            z.imag = z_r * sinf(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return ::std::complex< double >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return x + y*(__pyx_t_double_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      __pyx_t_double_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        double denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrt(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypot(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--            __pyx_t_double_complex z;
--            double r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    double denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(a, a);
--                    case 3:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, a);
--                    case 4:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_abs(a);
--                theta = atan2(a.imag, a.real);
--            }
--            lnr = log(r);
--            z_r = exp(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cos(z_theta);
--            z.imag = z_r * sin(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
--    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned char" :
--                    "value too large to convert to unsigned char");
--            }
--            return (unsigned char)-1;
--        }
--        return (unsigned char)val;
--    }
--    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
--    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned short" :
--                    "value too large to convert to unsigned short");
--            }
--            return (unsigned short)-1;
--        }
--        return (unsigned short)val;
--    }
--    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
--    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned int" :
--                    "value too large to convert to unsigned int");
--            }
--            return (unsigned int)-1;
--        }
--        return (unsigned int)val;
--    }
--    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
--    const char neg_one = (char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to char" :
--                    "value too large to convert to char");
--            }
--            return (char)-1;
--        }
--        return (char)val;
--    }
--    return (char)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
--    const short neg_one = (short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to short" :
--                    "value too large to convert to short");
--            }
--            return (short)-1;
--        }
--        return (short)val;
--    }
--    return (short)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
--    const signed char neg_one = (signed char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed char" :
--                    "value too large to convert to signed char");
--            }
--            return (signed char)-1;
--        }
--        return (signed char)val;
--    }
--    return (signed char)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
--    const signed short neg_one = (signed short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed short" :
--                    "value too large to convert to signed short");
--            }
--            return (signed short)-1;
--        }
--        return (signed short)val;
--    }
--    return (signed short)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
--    const signed int neg_one = (signed int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed int" :
--                    "value too large to convert to signed int");
--            }
--            return (signed int)-1;
--        }
--        return (signed int)val;
--    }
--    return (signed int)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
--    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned long");
--            return (unsigned long)-1;
--        }
--        return (unsigned long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned long");
--                return (unsigned long)-1;
--            }
--            return (unsigned long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (unsigned long)PyLong_AsLong(x);
--        }
--    } else {
--        unsigned long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned long)-1;
--        val = __Pyx_PyInt_AsUnsignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
--    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned PY_LONG_LONG");
--            return (unsigned PY_LONG_LONG)-1;
--        }
--        return (unsigned PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned PY_LONG_LONG");
--                return (unsigned PY_LONG_LONG)-1;
--            }
--            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        unsigned PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
--    const long neg_one = (long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to long");
--            return (long)-1;
--        }
--        return (long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to long");
--                return (long)-1;
--            }
--            return (long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (long)PyLong_AsLong(x);
--        }
--    } else {
--        long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (long)-1;
--        val = __Pyx_PyInt_AsLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
--    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to PY_LONG_LONG");
--            return (PY_LONG_LONG)-1;
--        }
--        return (PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to PY_LONG_LONG");
--                return (PY_LONG_LONG)-1;
--            }
--            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
--    const signed long neg_one = (signed long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed long");
--            return (signed long)-1;
--        }
--        return (signed long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed long");
--                return (signed long)-1;
--            }
--            return (signed long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (signed long)PyLong_AsLong(x);
--        }
--    } else {
--        signed long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed long)-1;
--        val = __Pyx_PyInt_AsSignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
--    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed PY_LONG_LONG");
--            return (signed PY_LONG_LONG)-1;
--        }
--        return (signed PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed PY_LONG_LONG");
--                return (signed PY_LONG_LONG)-1;
--            }
--            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        signed PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsSignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static int __Pyx_check_binary_version(void) {
--    char ctversion[4], rtversion[4];
--    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
--    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
--    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
--        char message[200];
--        PyOS_snprintf(message, sizeof(message),
--                      "compiletime version %s of module '%.100s' "
--                      "does not match runtime version %s",
--                      ctversion, __Pyx_MODULE_NAME, rtversion);
--        #if PY_VERSION_HEX < 0x02050000
--        return PyErr_Warn(NULL, message);
--        #else
--        return PyErr_WarnEx(NULL, message, 1);
--        #endif
--    }
--    return 0;
--}
--
--#ifndef __PYX_HAVE_RT_ImportModule
--#define __PYX_HAVE_RT_ImportModule
--static PyObject *__Pyx_ImportModule(const char *name) {
--    PyObject *py_name = 0;
--    PyObject *py_module = 0;
--    py_name = __Pyx_PyIdentifier_FromString(name);
--    if (!py_name)
--        goto bad;
--    py_module = PyImport_Import(py_name);
--    Py_DECREF(py_name);
--    return py_module;
--bad:
--    Py_XDECREF(py_name);
--    return 0;
--}
--#endif
--
--#ifndef __PYX_HAVE_RT_ImportType
--#define __PYX_HAVE_RT_ImportType
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
--    size_t size, int strict)
--{
--    PyObject *py_module = 0;
--    PyObject *result = 0;
--    PyObject *py_name = 0;
--    char warning[200];
--    Py_ssize_t basicsize;
--#ifdef Py_LIMITED_API
--    PyObject *py_basicsize;
--#endif
--    py_module = __Pyx_ImportModule(module_name);
--    if (!py_module)
--        goto bad;
--    py_name = __Pyx_PyIdentifier_FromString(class_name);
--    if (!py_name)
--        goto bad;
--    result = PyObject_GetAttr(py_module, py_name);
--    Py_DECREF(py_name);
--    py_name = 0;
--    Py_DECREF(py_module);
--    py_module = 0;
--    if (!result)
--        goto bad;
--    if (!PyType_Check(result)) {
--        PyErr_Format(PyExc_TypeError,
--            "%s.%s is not a type object",
--            module_name, class_name);
--        goto bad;
--    }
--#ifndef Py_LIMITED_API
--    basicsize = ((PyTypeObject *)result)->tp_basicsize;
--#else
--    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
--    if (!py_basicsize)
--        goto bad;
--    basicsize = PyLong_AsSsize_t(py_basicsize);
--    Py_DECREF(py_basicsize);
--    py_basicsize = 0;
--    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
--        goto bad;
--#endif
--    if (!strict && (size_t)basicsize > size) {
--        PyOS_snprintf(warning, sizeof(warning),
--            "%s.%s size changed, may indicate binary incompatibility",
--            module_name, class_name);
--        #if PY_VERSION_HEX < 0x02050000
--        if (PyErr_Warn(NULL, warning) < 0) goto bad;
--        #else
--        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
--        #endif
--    }
--    else if ((size_t)basicsize != size) {
--        PyErr_Format(PyExc_ValueError,
--            "%s.%s has the wrong size, try recompiling",
--            module_name, class_name);
--        goto bad;
--    }
--    return (PyTypeObject *)result;
--bad:
--    Py_XDECREF(py_module);
--    Py_XDECREF(result);
--    return NULL;
--}
--#endif
--
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
--    int start = 0, mid = 0, end = count - 1;
--    if (end >= 0 && code_line > entries[end].code_line) {
--        return count;
--    }
--    while (start < end) {
--        mid = (start + end) / 2;
--        if (code_line < entries[mid].code_line) {
--            end = mid;
--        } else if (code_line > entries[mid].code_line) {
--             start = mid + 1;
--        } else {
--            return mid;
--        }
--    }
--    if (code_line <= entries[mid].code_line) {
--        return mid;
--    } else {
--        return mid + 1;
--    }
--}
--static PyCodeObject *__pyx_find_code_object(int code_line) {
--    PyCodeObject* code_object;
--    int pos;
--    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
--        return NULL;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
--        return NULL;
--    }
--    code_object = __pyx_code_cache.entries[pos].code_object;
--    Py_INCREF(code_object);
--    return code_object;
--}
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
--    int pos, i;
--    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
--    if (unlikely(!code_line)) {
--        return;
--    }
--    if (unlikely(!entries)) {
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (likely(entries)) {
--            __pyx_code_cache.entries = entries;
--            __pyx_code_cache.max_count = 64;
--            __pyx_code_cache.count = 1;
--            entries[0].code_line = code_line;
--            entries[0].code_object = code_object;
--            Py_INCREF(code_object);
--        }
--        return;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
--        PyCodeObject* tmp = entries[pos].code_object;
--        entries[pos].code_object = code_object;
--        Py_DECREF(tmp);
--        return;
--    }
--    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
--        int new_max = __pyx_code_cache.max_count + 64;
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
--            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (unlikely(!entries)) {
--            return;
--        }
--        __pyx_code_cache.entries = entries;
--        __pyx_code_cache.max_count = new_max;
--    }
--    for (i=__pyx_code_cache.count; i>pos; i--) {
--        entries[i] = entries[i-1];
--    }
--    entries[pos].code_line = code_line;
--    entries[pos].code_object = code_object;
--    __pyx_code_cache.count++;
--    Py_INCREF(code_object);
--}
--
--#include "compile.h"
--#include "frameobject.h"
--#include "traceback.h"
--static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
--            const char *funcname, int c_line,
--            int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_srcfile = 0;
--    PyObject *py_funcname = 0;
--    #if PY_MAJOR_VERSION < 3
--    py_srcfile = PyString_FromString(filename);
--    #else
--    py_srcfile = PyUnicode_FromString(filename);
--    #endif
--    if (!py_srcfile) goto bad;
--    if (c_line) {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #else
--        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #endif
--    }
--    else {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromString(funcname);
--        #else
--        py_funcname = PyUnicode_FromString(funcname);
--        #endif
--    }
--    if (!py_funcname) goto bad;
--    py_code = __Pyx_PyCode_New(
--        0,            /*int argcount,*/
--        0,            /*int kwonlyargcount,*/
--        0,            /*int nlocals,*/
--        0,            /*int stacksize,*/
--        0,            /*int flags,*/
--        __pyx_empty_bytes, /*PyObject *code,*/
--        __pyx_empty_tuple, /*PyObject *consts,*/
--        __pyx_empty_tuple, /*PyObject *names,*/
--        __pyx_empty_tuple, /*PyObject *varnames,*/
--        __pyx_empty_tuple, /*PyObject *freevars,*/
--        __pyx_empty_tuple, /*PyObject *cellvars,*/
--        py_srcfile,   /*PyObject *filename,*/
--        py_funcname,  /*PyObject *name,*/
--        py_line,      /*int firstlineno,*/
--        __pyx_empty_bytes  /*PyObject *lnotab*/
--    );
--    Py_DECREF(py_srcfile);
--    Py_DECREF(py_funcname);
--    return py_code;
--bad:
--    Py_XDECREF(py_srcfile);
--    Py_XDECREF(py_funcname);
--    return NULL;
--}
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_globals = 0;
--    PyFrameObject *py_frame = 0;
--    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
--    if (!py_code) {
--        py_code = __Pyx_CreateCodeObjectForTraceback(
--            funcname, c_line, py_line, filename);
--        if (!py_code) goto bad;
--        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
--    }
--    py_globals = PyModule_GetDict(__pyx_m);
--    if (!py_globals) goto bad;
--    py_frame = PyFrame_New(
--        PyThreadState_GET(), /*PyThreadState *tstate,*/
--        py_code,             /*PyCodeObject *code,*/
--        py_globals,          /*PyObject *globals,*/
--        0                    /*PyObject *locals*/
--    );
--    if (!py_frame) goto bad;
--    py_frame->f_lineno = py_line;
--    PyTraceBack_Here(py_frame);
--bad:
--    Py_XDECREF(py_code);
--    Py_XDECREF(py_frame);
--}
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
--    while (t->p) {
--        #if PY_MAJOR_VERSION < 3
--        if (t->is_unicode) {
--            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
--        } else if (t->intern) {
--            *t->p = PyString_InternFromString(t->s);
--        } else {
--            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
--        }
--        #else  /* Python 3+ has unicode identifiers */
--        if (t->is_unicode | t->is_str) {
--            if (t->intern) {
--                *t->p = PyUnicode_InternFromString(t->s);
--            } else if (t->encoding) {
--                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
--            } else {
--                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
--            }
--        } else {
--            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
--        }
--        #endif
--        if (!*t->p)
--            return -1;
--        ++t;
--    }
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
--   int is_true = x == Py_True;
--   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
--   else return PyObject_IsTrue(x);
--}
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
--  PyNumberMethods *m;
--  const char *name = NULL;
--  PyObject *res = NULL;
--#if PY_VERSION_HEX < 0x03000000
--  if (PyInt_Check(x) || PyLong_Check(x))
--#else
--  if (PyLong_Check(x))
--#endif
--    return Py_INCREF(x), x;
--  m = Py_TYPE(x)->tp_as_number;
--#if PY_VERSION_HEX < 0x03000000
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Int(x);
--  }
--  else if (m && m->nb_long) {
--    name = "long";
--    res = PyNumber_Long(x);
--  }
--#else
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Long(x);
--  }
--#endif
--  if (res) {
--#if PY_VERSION_HEX < 0x03000000
--    if (!PyInt_Check(res) && !PyLong_Check(res)) {
--#else
--    if (!PyLong_Check(res)) {
--#endif
--      PyErr_Format(PyExc_TypeError,
--                   "__%s__ returned non-%s (type %.200s)",
--                   name, name, Py_TYPE(res)->tp_name);
--      Py_DECREF(res);
--      return NULL;
--    }
--  }
--  else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_TypeError,
--                    "an integer is required");
--  }
--  return res;
--}
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
--  Py_ssize_t ival;
--  PyObject* x = PyNumber_Index(b);
--  if (!x) return -1;
--  ival = PyInt_AsSsize_t(x);
--  Py_DECREF(x);
--  return ival;
--}
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
--#if PY_VERSION_HEX < 0x02050000
--   if (ival <= LONG_MAX)
--       return PyInt_FromLong((long)ival);
--   else {
--       unsigned char *bytes = (unsigned char *) &ival;
--       int one = 1; int little = (int)*(unsigned char*)&one;
--       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
--   }
--#else
--   return PyInt_FromSize_t(ival);
--#endif
--}
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
--   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
--   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
--       return (size_t)-1;
--   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
--       PyErr_SetString(PyExc_OverflowError,
--                       "value too large to convert to size_t");
--       return (size_t)-1;
--   }
--   return (size_t)val;
--}
--
--
--#endif /* Py_PYTHON_H */
diff --cc astropy/cython_version.py
index 9c5ac9f,9c5ac9f..0000000
deleted file mode 100644,100644
--- a/astropy/cython_version.py
+++ /dev/null
@@@ -1,2 -1,2 +1,0 @@@
--# Generated file; do not modify
--cython_version = '0.18'
diff --cc astropy/table/_np_utils.c
index 74609f1,74609f1..0000000
deleted file mode 100644,100644
--- a/astropy/table/_np_utils.c
+++ /dev/null
@@@ -1,7096 -1,7096 +1,0 @@@
--/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
--
--#define PY_SSIZE_T_CLEAN
--#include "Python.h"
--#ifndef Py_PYTHON_H
--    #error Python headers needed to compile C extensions, please install development version of Python.
--#elif PY_VERSION_HEX < 0x02040000
--    #error Cython requires Python 2.4+.
--#else
--#include <stddef.h> /* For offsetof */
--#ifndef offsetof
--#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
--#endif
--#if !defined(WIN32) && !defined(MS_WINDOWS)
--  #ifndef __stdcall
--    #define __stdcall
--  #endif
--  #ifndef __cdecl
--    #define __cdecl
--  #endif
--  #ifndef __fastcall
--    #define __fastcall
--  #endif
--#endif
--#ifndef DL_IMPORT
--  #define DL_IMPORT(t) t
--#endif
--#ifndef DL_EXPORT
--  #define DL_EXPORT(t) t
--#endif
--#ifndef PY_LONG_LONG
--  #define PY_LONG_LONG LONG_LONG
--#endif
--#ifndef Py_HUGE_VAL
--  #define Py_HUGE_VAL HUGE_VAL
--#endif
--#ifdef PYPY_VERSION
--#define CYTHON_COMPILING_IN_PYPY 1
--#define CYTHON_COMPILING_IN_CPYTHON 0
--#else
--#define CYTHON_COMPILING_IN_PYPY 0
--#define CYTHON_COMPILING_IN_CPYTHON 1
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  typedef int Py_ssize_t;
--  #define PY_SSIZE_T_MAX INT_MAX
--  #define PY_SSIZE_T_MIN INT_MIN
--  #define PY_FORMAT_SIZE_T ""
--  #define CYTHON_FORMAT_SSIZE_T ""
--  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
--  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
--  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
--                                (PyErr_Format(PyExc_TypeError, \
--                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
--                                 (PyObject*)0))
--  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
--                                  !PyComplex_Check(o))
--  #define PyIndex_Check __Pyx_PyIndex_Check
--  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
--  #define __PYX_BUILD_PY_SSIZE_T "i"
--#else
--  #define __PYX_BUILD_PY_SSIZE_T "n"
--  #define CYTHON_FORMAT_SSIZE_T "z"
--  #define __Pyx_PyIndex_Check PyIndex_Check
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
--  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
--  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
--  #define PyVarObject_HEAD_INIT(type, size) \
--          PyObject_HEAD_INIT(type) size,
--  #define PyType_Modified(t)
--  typedef struct {
--     void *buf;
--     PyObject *obj;
--     Py_ssize_t len;
--     Py_ssize_t itemsize;
--     int readonly;
--     int ndim;
--     char *format;
--     Py_ssize_t *shape;
--     Py_ssize_t *strides;
--     Py_ssize_t *suboffsets;
--     void *internal;
--  } Py_buffer;
--  #define PyBUF_SIMPLE 0
--  #define PyBUF_WRITABLE 0x0001
--  #define PyBUF_FORMAT 0x0004
--  #define PyBUF_ND 0x0008
--  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
--  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
--  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
--  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
--  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
--  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
--  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
--  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
--  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
--#endif
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#else
--  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#endif
--#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
--  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define Py_TPFLAGS_CHECKTYPES 0
--  #define Py_TPFLAGS_HAVE_INDEX 0
--#endif
--#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
--  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
--#endif
--#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
--  #define CYTHON_PEP393_ENABLED 1
--  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
--                                              0 : _PyUnicode_Ready((PyObject *)(op)))
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
--  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
--#else
--  #define CYTHON_PEP393_ENABLED 0
--  #define __Pyx_PyUnicode_READY(op)       (0)
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
--  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBaseString_Type            PyUnicode_Type
--  #define PyStringObject               PyUnicodeObject
--  #define PyString_Type                PyUnicode_Type
--  #define PyString_Check               PyUnicode_Check
--  #define PyString_CheckExact          PyUnicode_CheckExact
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PyBytesObject                PyStringObject
--  #define PyBytes_Type                 PyString_Type
--  #define PyBytes_Check                PyString_Check
--  #define PyBytes_CheckExact           PyString_CheckExact
--  #define PyBytes_FromString           PyString_FromString
--  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
--  #define PyBytes_FromFormat           PyString_FromFormat
--  #define PyBytes_DecodeEscape         PyString_DecodeEscape
--  #define PyBytes_AsString             PyString_AsString
--  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
--  #define PyBytes_Size                 PyString_Size
--  #define PyBytes_AS_STRING            PyString_AS_STRING
--  #define PyBytes_GET_SIZE             PyString_GET_SIZE
--  #define PyBytes_Repr                 PyString_Repr
--  #define PyBytes_Concat               PyString_Concat
--  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
--  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
--#endif
--#ifndef PySet_CheckExact
--  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
--#endif
--#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
--#if PY_MAJOR_VERSION >= 3
--  #define PyIntObject                  PyLongObject
--  #define PyInt_Type                   PyLong_Type
--  #define PyInt_Check(op)              PyLong_Check(op)
--  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
--  #define PyInt_FromString             PyLong_FromString
--  #define PyInt_FromUnicode            PyLong_FromUnicode
--  #define PyInt_FromLong               PyLong_FromLong
--  #define PyInt_FromSize_t             PyLong_FromSize_t
--  #define PyInt_FromSsize_t            PyLong_FromSsize_t
--  #define PyInt_AsLong                 PyLong_AsLong
--  #define PyInt_AS_LONG                PyLong_AS_LONG
--  #define PyInt_AsSsize_t              PyLong_AsSsize_t
--  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
--  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBoolObject                 PyLongObject
--#endif
--#if PY_VERSION_HEX < 0x03020000
--  typedef long Py_hash_t;
--  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
--#else
--  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
--#endif
--#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
--  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
--  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
--#else
--  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
--  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
--#else
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_NAMESTR(n) ((char *)(n))
--  #define __Pyx_DOCSTR(n)  ((char *)(n))
--#else
--  #define __Pyx_NAMESTR(n) (n)
--  #define __Pyx_DOCSTR(n)  (n)
--#endif
--
--
--#if PY_MAJOR_VERSION >= 3
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#else
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
--#endif
--
--#ifndef __PYX_EXTERN_C
--  #ifdef __cplusplus
--    #define __PYX_EXTERN_C extern "C"
--  #else
--    #define __PYX_EXTERN_C extern
--  #endif
--#endif
--
--#if defined(WIN32) || defined(MS_WINDOWS)
--#define _USE_MATH_DEFINES
--#endif
--#include <math.h>
--#define __PYX_HAVE__astropy__table___np_utils
--#define __PYX_HAVE_API__astropy__table___np_utils
--#include "string.h"
--#include "stdio.h"
--#include "stdlib.h"
--#include "numpy/arrayobject.h"
--#include "numpy/ufuncobject.h"
--#ifdef _OPENMP
--#include <omp.h>
--#endif /* _OPENMP */
--
--#ifdef PYREX_WITHOUT_ASSERTIONS
--#define CYTHON_WITHOUT_ASSERTIONS
--#endif
--
--#ifndef CYTHON_INLINE
--  #if defined(__GNUC__)
--    #define CYTHON_INLINE __inline__
--  #elif defined(_MSC_VER)
--    #define CYTHON_INLINE __inline
--  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--    #define CYTHON_INLINE inline
--  #else
--    #define CYTHON_INLINE
--  #endif
--#endif
--#ifndef CYTHON_UNUSED
--# if defined(__GNUC__)
--#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
--#     define CYTHON_UNUSED __attribute__ ((__unused__))
--#   else
--#     define CYTHON_UNUSED
--#   endif
--# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
--#   define CYTHON_UNUSED __attribute__ ((__unused__))
--# else
--#   define CYTHON_UNUSED
--# endif
--#endif
--typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
--
--#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
--#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
--#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
--#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
--#if CYTHON_COMPILING_IN_CPYTHON
--#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
--#else
--#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
--#endif
--#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
--
--
--#ifdef __GNUC__
--  /* Test for GCC > 2.95 */
--  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
--    #define likely(x)   __builtin_expect(!!(x), 1)
--    #define unlikely(x) __builtin_expect(!!(x), 0)
--  #else /* __GNUC__ > 2 ... */
--    #define likely(x)   (x)
--    #define unlikely(x) (x)
--  #endif /* __GNUC__ > 2 ... */
--#else /* __GNUC__ */
--  #define likely(x)   (x)
--  #define unlikely(x) (x)
--#endif /* __GNUC__ */
--    
--static PyObject *__pyx_m;
--static PyObject *__pyx_b;
--static PyObject *__pyx_empty_tuple;
--static PyObject *__pyx_empty_bytes;
--static int __pyx_lineno;
--static int __pyx_clineno = 0;
--static const char * __pyx_cfilenm= __FILE__;
--static const char *__pyx_filename;
--
--#if !defined(CYTHON_CCOMPLEX)
--  #if defined(__cplusplus)
--    #define CYTHON_CCOMPLEX 1
--  #elif defined(_Complex_I)
--    #define CYTHON_CCOMPLEX 1
--  #else
--    #define CYTHON_CCOMPLEX 0
--  #endif
--#endif
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #include <complex>
--  #else
--    #include <complex.h>
--  #endif
--#endif
--#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
--  #undef _Complex_I
--  #define _Complex_I 1.0fj
--#endif
--
--
--static const char *__pyx_f[] = {
--  "_np_utils.pyx",
--  "numpy.pxd",
--  "type.pxd",
--};
--#define IS_UNSIGNED(type) (((type) -1) > 0)
--struct __Pyx_StructField_;
--#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
--typedef struct {
--  const char* name; /* for error messages only */
--  struct __Pyx_StructField_* fields;
--  size_t size;     /* sizeof(type) */
--  size_t arraysize[8]; /* length of array in each dimension */
--  int ndim;
--  char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */
--  char is_unsigned;
--  int flags;
--} __Pyx_TypeInfo;
--typedef struct __Pyx_StructField_ {
--  __Pyx_TypeInfo* type;
--  const char* name;
--  size_t offset;
--} __Pyx_StructField;
--typedef struct {
--  __Pyx_StructField* field;
--  size_t parent_offset;
--} __Pyx_BufFmt_StackElem;
--typedef struct {
--  __Pyx_StructField root;
--  __Pyx_BufFmt_StackElem* head;
--  size_t fmt_offset;
--  size_t new_count, enc_count;
--  size_t struct_alignment;
--  int is_complex;
--  char enc_type;
--  char new_packmode;
--  char enc_packmode;
--  char is_valid_array;
--} __Pyx_BufFmt_Context;
--
--
--/* "numpy.pxd":723
-- * # in Cython to enable them only on the right systems.
-- * 
-- * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- */
--typedef npy_int8 __pyx_t_5numpy_int8_t;
--
--/* "numpy.pxd":724
-- * 
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t
-- */
--typedef npy_int16 __pyx_t_5numpy_int16_t;
--
--/* "numpy.pxd":725
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int64      int64_t
-- * #ctypedef npy_int96      int96_t
-- */
--typedef npy_int32 __pyx_t_5numpy_int32_t;
--
--/* "numpy.pxd":726
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_int96      int96_t
-- * #ctypedef npy_int128     int128_t
-- */
--typedef npy_int64 __pyx_t_5numpy_int64_t;
--
--/* "numpy.pxd":730
-- * #ctypedef npy_int128     int128_t
-- * 
-- * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- */
--typedef npy_uint8 __pyx_t_5numpy_uint8_t;
--
--/* "numpy.pxd":731
-- * 
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t
-- */
--typedef npy_uint16 __pyx_t_5numpy_uint16_t;
--
--/* "numpy.pxd":732
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint64     uint64_t
-- * #ctypedef npy_uint96     uint96_t
-- */
--typedef npy_uint32 __pyx_t_5numpy_uint32_t;
--
--/* "numpy.pxd":733
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_uint96     uint96_t
-- * #ctypedef npy_uint128    uint128_t
-- */
--typedef npy_uint64 __pyx_t_5numpy_uint64_t;
--
--/* "numpy.pxd":737
-- * #ctypedef npy_uint128    uint128_t
-- * 
-- * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_float64    float64_t
-- * #ctypedef npy_float80    float80_t
-- */
--typedef npy_float32 __pyx_t_5numpy_float32_t;
--
--/* "numpy.pxd":738
-- * 
-- * ctypedef npy_float32    float32_t
-- * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_float80    float80_t
-- * #ctypedef npy_float128   float128_t
-- */
--typedef npy_float64 __pyx_t_5numpy_float64_t;
--
--/* "numpy.pxd":747
-- * # The int types are mapped a bit surprising --
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t
-- */
--typedef npy_long __pyx_t_5numpy_int_t;
--
--/* "numpy.pxd":748
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   longlong_t
-- * 
-- */
--typedef npy_longlong __pyx_t_5numpy_long_t;
--
--/* "numpy.pxd":749
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_ulong      uint_t
-- */
--typedef npy_longlong __pyx_t_5numpy_longlong_t;
--
--/* "numpy.pxd":751
-- * ctypedef npy_longlong   longlong_t
-- * 
-- * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t
-- */
--typedef npy_ulong __pyx_t_5numpy_uint_t;
--
--/* "numpy.pxd":752
-- * 
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
--
--/* "numpy.pxd":753
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_intp       intp_t
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
--
--/* "numpy.pxd":755
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uintp      uintp_t
-- * 
-- */
--typedef npy_intp __pyx_t_5numpy_intp_t;
--
--/* "numpy.pxd":756
-- * 
-- * ctypedef npy_intp       intp_t
-- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_double     float_t
-- */
--typedef npy_uintp __pyx_t_5numpy_uintp_t;
--
--/* "numpy.pxd":758
-- * ctypedef npy_uintp      uintp_t
-- * 
-- * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t
-- */
--typedef npy_double __pyx_t_5numpy_float_t;
--
--/* "numpy.pxd":759
-- * 
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- */
--typedef npy_double __pyx_t_5numpy_double_t;
--
--/* "numpy.pxd":760
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- */
--typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
--
--/* "astropy/table/_np_utils.pyx":15
-- * cimport numpy as np
-- * DTYPE = np.int
-- * ctypedef np.int_t DTYPE_t             # <<<<<<<<<<<<<<
-- * 
-- * @cython.wraparound(False)
-- */
--typedef __pyx_t_5numpy_int_t __pyx_t_7astropy_5table_9_np_utils_DTYPE_t;
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< float > __pyx_t_float_complex;
--  #else
--    typedef float _Complex __pyx_t_float_complex;
--  #endif
--#else
--    typedef struct { float real, imag; } __pyx_t_float_complex;
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< double > __pyx_t_double_complex;
--  #else
--    typedef double _Complex __pyx_t_double_complex;
--  #endif
--#else
--    typedef struct { double real, imag; } __pyx_t_double_complex;
--#endif
--
--
--/*--- Type declarations ---*/
--
--/* "numpy.pxd":762
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t
-- */
--typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
--
--/* "numpy.pxd":763
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- */
--typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
--
--/* "numpy.pxd":764
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cdouble     complex_t
-- */
--typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
--
--/* "numpy.pxd":766
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- */
--typedef npy_cdouble __pyx_t_5numpy_complex_t;
--#ifndef CYTHON_REFNANNY
--  #define CYTHON_REFNANNY 0
--#endif
--#if CYTHON_REFNANNY
--  typedef struct {
--    void (*INCREF)(void*, PyObject*, int);
--    void (*DECREF)(void*, PyObject*, int);
--    void (*GOTREF)(void*, PyObject*, int);
--    void (*GIVEREF)(void*, PyObject*, int);
--    void* (*SetupContext)(const char*, int, const char*);
--    void (*FinishContext)(void**);
--  } __Pyx_RefNannyAPIStruct;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
--  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
--#ifdef WITH_THREAD
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          if (acquire_gil) { \
--              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--              PyGILState_Release(__pyx_gilstate_save); \
--          } else { \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--          }
--#else
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
--#endif
--  #define __Pyx_RefNannyFinishContext() \
--          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
--  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
--  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
--  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
--  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
--#else
--  #define __Pyx_RefNannyDeclarations
--  #define __Pyx_RefNannySetupContext(name, acquire_gil)
--  #define __Pyx_RefNannyFinishContext()
--  #define __Pyx_INCREF(r) Py_INCREF(r)
--  #define __Pyx_DECREF(r) Py_DECREF(r)
--  #define __Pyx_GOTREF(r)
--  #define __Pyx_GIVEREF(r)
--  #define __Pyx_XINCREF(r) Py_XINCREF(r)
--  #define __Pyx_XDECREF(r) Py_XDECREF(r)
--  #define __Pyx_XGOTREF(r)
--  #define __Pyx_XGIVEREF(r)
--#endif /* CYTHON_REFNANNY */
--#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
--#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
--
--static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
--    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
--
--static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
--
--static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
--    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
--    const char* function_name); /*proto*/
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact); /*proto*/
--
--static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
--    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
--
--#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
--
--#define __Pyx_SetItemInt(o, i, v, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
--                                                    __Pyx_SetItemInt_Fast(o, i, v) : \
--                                                    __Pyx_SetItemInt_Generic(o, to_py_func(i), v))
--static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
--    int r;
--    if (!j) return -1;
--    r = PyObject_SetItem(o, j, v);
--    Py_DECREF(j);
--    return r;
--}
--static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    if (PyList_CheckExact(o)) {
--        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
--        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
--            PyObject* old = PyList_GET_ITEM(o, n);
--            Py_INCREF(v);
--            PyList_SET_ITEM(o, n, v);
--            Py_DECREF(old);
--            return 1;
--        }
--    } else {  /* inlined PySequence_SetItem() */
--        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
--        if (likely(m && m->sq_ass_item)) {
--            if (unlikely(i < 0) && likely(m->sq_length)) {
--                Py_ssize_t l = m->sq_length(o);
--                if (unlikely(l < 0)) return -1;
--                i += l;
--            }
--            return m->sq_ass_item(o, i, v);
--        }
--    }
--#else
--#if CYTHON_COMPILING_IN_PYPY
--    if (PySequence_Check(o) && !PyDict_Check(o)) {
--#else
--    if (PySequence_Check(o)) {
--#endif
--        return PySequence_SetItem(o, i, v);
--    }
--#endif
--    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
--}
--
--static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
--    PyObject *r;
--    if (!j) return NULL;
--    r = PyObject_GetItem(o, j);
--    Py_DECREF(j);
--    return r;
--}
--#define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
--                                                    __Pyx_GetItemInt_List_Fast(o, i) : \
--                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
--static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
--        PyObject *r = PyList_GET_ITEM(o, i);
--        Py_INCREF(r);
--        return r;
--    }
--    else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
--        PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
--        Py_INCREF(r);
--        return r;
--    }
--    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
--#else
--    return PySequence_GetItem(o, i);
--#endif
--}
--#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
--                                                    __Pyx_GetItemInt_Tuple_Fast(o, i) : \
--                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
--static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
--        PyObject *r = PyTuple_GET_ITEM(o, i);
--        Py_INCREF(r);
--        return r;
--    }
--    else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
--        PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
--        Py_INCREF(r);
--        return r;
--    }
--    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
--#else
--    return PySequence_GetItem(o, i);
--#endif
--}
--#define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
--                                                    __Pyx_GetItemInt_Fast(o, i) : \
--                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
--static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    if (PyList_CheckExact(o)) {
--        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
--        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
--            PyObject *r = PyList_GET_ITEM(o, n);
--            Py_INCREF(r);
--            return r;
--        }
--    }
--    else if (PyTuple_CheckExact(o)) {
--        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
--        if (likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
--            PyObject *r = PyTuple_GET_ITEM(o, n);
--            Py_INCREF(r);
--            return r;
--        }
--    } else {  /* inlined PySequence_GetItem() */
--        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
--        if (likely(m && m->sq_item)) {
--            if (unlikely(i < 0) && likely(m->sq_length)) {
--                Py_ssize_t l = m->sq_length(o);
--                if (unlikely(l < 0)) return NULL;
--                i += l;
--            }
--            return m->sq_item(o, i);
--        }
--    }
--#else
--    if (PySequence_Check(o)) {
--        return PySequence_GetItem(o, i);
--    }
--#endif
--    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
--
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
--
--static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
--
--typedef struct {
--  Py_ssize_t shape, strides, suboffsets;
--} __Pyx_Buf_DimInfo;
--typedef struct {
--  size_t refcount;
--  Py_buffer pybuffer;
--} __Pyx_Buffer;
--typedef struct {
--  __Pyx_Buffer *rcbuffer;
--  char *data;
--  __Pyx_Buf_DimInfo diminfo[8];
--} __Pyx_LocalBuf_ND;
--
--#if PY_MAJOR_VERSION < 3
--    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
--    static void __Pyx_ReleaseBuffer(Py_buffer *view);
--#else
--    #define __Pyx_GetBuffer PyObject_GetBuffer
--    #define __Pyx_ReleaseBuffer PyBuffer_Release
--#endif
--
--
--  static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
--static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
--
--static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
--
--static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name);
--
--static CYTHON_INLINE npy_long __Pyx_PyInt_from_py_npy_long(PyObject *);
--
--static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_long(npy_long);
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #define __Pyx_CREAL(z) ((z).real())
--    #define __Pyx_CIMAG(z) ((z).imag())
--  #else
--    #define __Pyx_CREAL(z) (__real__(z))
--    #define __Pyx_CIMAG(z) (__imag__(z))
--  #endif
--#else
--    #define __Pyx_CREAL(z) ((z).real)
--    #define __Pyx_CIMAG(z) ((z).imag)
--#endif
--#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
--    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
--    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
--#else
--    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
--    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
--#endif
--
--static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eqf(a, b)   ((a)==(b))
--    #define __Pyx_c_sumf(a, b)  ((a)+(b))
--    #define __Pyx_c_difff(a, b) ((a)-(b))
--    #define __Pyx_c_prodf(a, b) ((a)*(b))
--    #define __Pyx_c_quotf(a, b) ((a)/(b))
--    #define __Pyx_c_negf(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
--    #define __Pyx_c_conjf(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (::std::abs(z))
--        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zerof(z) ((z)==0)
--    #define __Pyx_c_conjf(z)    (conjf(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (cabsf(z))
--        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eq(a, b)   ((a)==(b))
--    #define __Pyx_c_sum(a, b)  ((a)+(b))
--    #define __Pyx_c_diff(a, b) ((a)-(b))
--    #define __Pyx_c_prod(a, b) ((a)*(b))
--    #define __Pyx_c_quot(a, b) ((a)/(b))
--    #define __Pyx_c_neg(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zero(z) ((z)==(double)0)
--    #define __Pyx_c_conj(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (::std::abs(z))
--        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zero(z) ((z)==0)
--    #define __Pyx_c_conj(z)    (conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (cabs(z))
--        #define __Pyx_c_pow(a, b)  (cpow(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
--
--static int __Pyx_check_binary_version(void);
--
--#if !defined(__Pyx_PyIdentifier_FromString)
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
--#else
--  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
--#endif
--#endif
--
--static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
--
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
--
--typedef struct {
--    int code_line;
--    PyCodeObject* code_object;
--} __Pyx_CodeObjectCacheEntry;
--struct __Pyx_CodeObjectCache {
--    int count;
--    int max_count;
--    __Pyx_CodeObjectCacheEntry* entries;
--};
--static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
--static PyCodeObject *__pyx_find_code_object(int code_line);
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
--
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename); /*proto*/
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
--
--
--/* Module declarations from 'cython' */
--
--/* Module declarations from 'cpython.buffer' */
--
--/* Module declarations from 'cpython.ref' */
--
--/* Module declarations from 'libc.string' */
--
--/* Module declarations from 'libc.stdio' */
--
--/* Module declarations from 'cpython.object' */
--
--/* Module declarations from '__builtin__' */
--
--/* Module declarations from 'cpython.type' */
--static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
--
--/* Module declarations from 'libc.stdlib' */
--
--/* Module declarations from 'numpy' */
--
--/* Module declarations from 'numpy' */
--static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
--static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
--static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
--static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
--
--/* Module declarations from 'astropy.table._np_utils' */
--static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_5table_9_np_utils_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), 0 };
--#define __Pyx_MODULE_NAME "astropy.table._np_utils"
--int __pyx_module_is_main_astropy__table___np_utils = 0;
--
--/* Implementation of 'astropy.table._np_utils' */
--static PyObject *__pyx_builtin_range;
--static PyObject *__pyx_builtin_ValueError;
--static PyObject *__pyx_builtin_RuntimeError;
--static PyObject *__pyx_pf_7astropy_5table_9_np_utils_join_inner(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_idxs, PyArrayObject *__pyx_v_idx_sort, int __pyx_v_len_left, int __pyx_v_jointype); /* proto */
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
--static char __pyx_k_1[] = "ndarray is not C contiguous";
--static char __pyx_k_3[] = "ndarray is not Fortran contiguous";
--static char __pyx_k_5[] = "Non-native byte order not supported";
--static char __pyx_k_7[] = "unknown dtype code in numpy.pxd (%d)";
--static char __pyx_k_8[] = "Format string allocated too short, see comment in numpy.pxd";
--static char __pyx_k_11[] = "Format string allocated too short.";
--static char __pyx_k_13[] = "\nCython utilities for numpy structured arrays.\n\njoin_inner():  Do the inner-loop cartesian product for np_utils.join() processing.\n               (The \"inner\" is about the inner loop, not inner join).\n";
--static char __pyx_k_14[] = "numpy.ma";
--static char __pyx_k_15[] = "*";
--static char __pyx_k_16[] = "numpy.lib.recfunctions";
--static char __pyx_k_19[] = "/internal/1/root/src/astropy/astropy-release/astropy/table/_np_utils.pyx";
--static char __pyx_k_20[] = "astropy.table._np_utils";
--static char __pyx_k__B[] = "B";
--static char __pyx_k__H[] = "H";
--static char __pyx_k__I[] = "I";
--static char __pyx_k__L[] = "L";
--static char __pyx_k__O[] = "O";
--static char __pyx_k__Q[] = "Q";
--static char __pyx_k__b[] = "b";
--static char __pyx_k__d[] = "d";
--static char __pyx_k__f[] = "f";
--static char __pyx_k__g[] = "g";
--static char __pyx_k__h[] = "h";
--static char __pyx_k__i[] = "i";
--static char __pyx_k__l[] = "l";
--static char __pyx_k__q[] = "q";
--static char __pyx_k__Zd[] = "Zd";
--static char __pyx_k__Zf[] = "Zf";
--static char __pyx_k__Zg[] = "Zg";
--static char __pyx_k__ii[] = "ii";
--static char __pyx_k__ma[] = "ma";
--static char __pyx_k__np[] = "np";
--static char __pyx_k__idx[] = "idx";
--static char __pyx_k__int[] = "int";
--static char __pyx_k__bool[] = "bool";
--static char __pyx_k__idx0[] = "idx0";
--static char __pyx_k__idx1[] = "idx1";
--static char __pyx_k__idxs[] = "idxs";
--static char __pyx_k__DTYPE[] = "DTYPE";
--static char __pyx_k__dtype[] = "dtype";
--static char __pyx_k__empty[] = "empty";
--static char __pyx_k__i_out[] = "i_out";
--static char __pyx_k__n_out[] = "n_out";
--static char __pyx_k__numpy[] = "numpy";
--static char __pyx_k__range[] = "range";
--static char __pyx_k__zeros[] = "zeros";
--static char __pyx_k__i_left[] = "i_left";
--static char __pyx_k__masked[] = "masked";
--static char __pyx_k__n_left[] = "n_left";
--static char __pyx_k__i_right[] = "i_right";
--static char __pyx_k__n_right[] = "n_right";
--static char __pyx_k____main__[] = "__main__";
--static char __pyx_k____test__[] = "__test__";
--static char __pyx_k__idx_sort[] = "idx_sort";
--static char __pyx_k__jointype[] = "jointype";
--static char __pyx_k__key_idxs[] = "key_idxs";
--static char __pyx_k__left_out[] = "left_out";
--static char __pyx_k__len_left[] = "len_left";
--static char __pyx_k__left_idxs[] = "left_idxs";
--static char __pyx_k__left_mask[] = "left_mask";
--static char __pyx_k__right_out[] = "right_out";
--static char __pyx_k__ValueError[] = "ValueError";
--static char __pyx_k__join_inner[] = "join_inner";
--static char __pyx_k__right_idxs[] = "right_idxs";
--static char __pyx_k__right_mask[] = "right_mask";
--static char __pyx_k__drop_fields[] = "drop_fields";
--static char __pyx_k__RuntimeError[] = "RuntimeError";
--static char __pyx_k__max_key_idxs[] = "max_key_idxs";
--static PyObject *__pyx_kp_u_1;
--static PyObject *__pyx_kp_u_11;
--static PyObject *__pyx_n_s_14;
--static PyObject *__pyx_n_s_15;
--static PyObject *__pyx_n_s_16;
--static PyObject *__pyx_kp_s_19;
--static PyObject *__pyx_n_s_20;
--static PyObject *__pyx_kp_u_3;
--static PyObject *__pyx_kp_u_5;
--static PyObject *__pyx_kp_u_7;
--static PyObject *__pyx_kp_u_8;
--static PyObject *__pyx_n_s__DTYPE;
--static PyObject *__pyx_n_s__RuntimeError;
--static PyObject *__pyx_n_s__ValueError;
--static PyObject *__pyx_n_s____main__;
--static PyObject *__pyx_n_s____test__;
--static PyObject *__pyx_n_s__bool;
--static PyObject *__pyx_n_s__drop_fields;
--static PyObject *__pyx_n_s__dtype;
--static PyObject *__pyx_n_s__empty;
--static PyObject *__pyx_n_s__i;
--static PyObject *__pyx_n_s__i_left;
--static PyObject *__pyx_n_s__i_out;
--static PyObject *__pyx_n_s__i_right;
--static PyObject *__pyx_n_s__idx;
--static PyObject *__pyx_n_s__idx0;
--static PyObject *__pyx_n_s__idx1;
--static PyObject *__pyx_n_s__idx_sort;
--static PyObject *__pyx_n_s__idxs;
--static PyObject *__pyx_n_s__ii;
--static PyObject *__pyx_n_s__int;
--static PyObject *__pyx_n_s__join_inner;
--static PyObject *__pyx_n_s__jointype;
--static PyObject *__pyx_n_s__key_idxs;
--static PyObject *__pyx_n_s__left_idxs;
--static PyObject *__pyx_n_s__left_mask;
--static PyObject *__pyx_n_s__left_out;
--static PyObject *__pyx_n_s__len_left;
--static PyObject *__pyx_n_s__ma;
--static PyObject *__pyx_n_s__masked;
--static PyObject *__pyx_n_s__max_key_idxs;
--static PyObject *__pyx_n_s__n_left;
--static PyObject *__pyx_n_s__n_out;
--static PyObject *__pyx_n_s__n_right;
--static PyObject *__pyx_n_s__np;
--static PyObject *__pyx_n_s__numpy;
--static PyObject *__pyx_n_s__range;
--static PyObject *__pyx_n_s__right_idxs;
--static PyObject *__pyx_n_s__right_mask;
--static PyObject *__pyx_n_s__right_out;
--static PyObject *__pyx_n_s__zeros;
--static PyObject *__pyx_int_1;
--static PyObject *__pyx_int_neg_1;
--static PyObject *__pyx_int_15;
--static PyObject *__pyx_k_tuple_2;
--static PyObject *__pyx_k_tuple_4;
--static PyObject *__pyx_k_tuple_6;
--static PyObject *__pyx_k_tuple_9;
--static PyObject *__pyx_k_tuple_10;
--static PyObject *__pyx_k_tuple_12;
--static PyObject *__pyx_k_tuple_17;
--static PyObject *__pyx_k_codeobj_18;
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_5table_9_np_utils_1join_inner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_5table_9_np_utils_join_inner[] = "\n    Do the inner-loop cartesian product for np_utils.join() processing.\n    (The \"inner\" is about the inner loop, not inner join).\n    ";
--static PyMethodDef __pyx_mdef_7astropy_5table_9_np_utils_1join_inner = {__Pyx_NAMESTR("join_inner"), (PyCFunction)__pyx_pw_7astropy_5table_9_np_utils_1join_inner, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_5table_9_np_utils_join_inner)};
--static PyObject *__pyx_pw_7astropy_5table_9_np_utils_1join_inner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_idxs = 0;
--  PyArrayObject *__pyx_v_idx_sort = 0;
--  int __pyx_v_len_left;
--  int __pyx_v_jointype;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("join_inner (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__idxs,&__pyx_n_s__idx_sort,&__pyx_n_s__len_left,&__pyx_n_s__jointype,0};
--    PyObject* values[4] = {0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__idxs)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__idx_sort)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__len_left)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jointype)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "join_inner") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--    }
--    __pyx_v_idxs = ((PyArrayObject *)values[0]);
--    __pyx_v_idx_sort = ((PyArrayObject *)values[1]);
--    __pyx_v_len_left = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_len_left == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--    __pyx_v_jointype = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_jointype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.table._np_utils.join_inner", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idxs), __pyx_ptype_5numpy_ndarray, 1, "idxs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idx_sort), __pyx_ptype_5numpy_ndarray, 1, "idx_sort", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_5table_9_np_utils_join_inner(__pyx_self, __pyx_v_idxs, __pyx_v_idx_sort, __pyx_v_len_left, __pyx_v_jointype);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/table/_np_utils.pyx":19
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,             # <<<<<<<<<<<<<<
-- *                np.ndarray[DTYPE_t, ndim=1] idx_sort,
-- *                int len_left,
-- */
--
--static PyObject *__pyx_pf_7astropy_5table_9_np_utils_join_inner(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_idxs, PyArrayObject *__pyx_v_idx_sort, int __pyx_v_len_left, int __pyx_v_jointype) {
--  int __pyx_v_n_out;
--  int __pyx_v_max_key_idxs;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_ii;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_key_idxs;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_n_left;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_n_right;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_idx0;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_idx1;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_idx;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i_left;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i_right;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i_out;
--  int __pyx_v_masked;
--  PyArrayObject *__pyx_v_left_out = 0;
--  PyArrayObject *__pyx_v_right_out = 0;
--  PyArrayObject *__pyx_v_left_mask = 0;
--  PyArrayObject *__pyx_v_right_mask = 0;
--  PyArrayObject *__pyx_v_left_idxs = 0;
--  PyArrayObject *__pyx_v_right_idxs = 0;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_idx_sort;
--  __Pyx_Buffer __pyx_pybuffer_idx_sort;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_idxs;
--  __Pyx_Buffer __pyx_pybuffer_idxs;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  long __pyx_t_1;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_2;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_3;
--  long __pyx_t_4;
--  int __pyx_t_5;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_6;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_7;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_8;
--  PyObject *__pyx_t_9 = NULL;
--  PyObject *__pyx_t_10 = NULL;
--  PyObject *__pyx_t_11 = NULL;
--  PyObject *__pyx_t_12 = NULL;
--  PyObject *__pyx_t_13 = NULL;
--  long __pyx_t_14;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_15;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_16;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_17;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_18;
--  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_19;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("join_inner", 0);
--  __pyx_pybuffer_idxs.pybuffer.buf = NULL;
--  __pyx_pybuffer_idxs.refcount = 0;
--  __pyx_pybuffernd_idxs.data = NULL;
--  __pyx_pybuffernd_idxs.rcbuffer = &__pyx_pybuffer_idxs;
--  __pyx_pybuffer_idx_sort.pybuffer.buf = NULL;
--  __pyx_pybuffer_idx_sort.refcount = 0;
--  __pyx_pybuffernd_idx_sort.data = NULL;
--  __pyx_pybuffernd_idx_sort.rcbuffer = &__pyx_pybuffer_idx_sort;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_idxs.rcbuffer->pybuffer, (PyObject*)__pyx_v_idxs, &__Pyx_TypeInfo_nn___pyx_t_7astropy_5table_9_np_utils_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_idxs.diminfo[0].strides = __pyx_pybuffernd_idxs.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_idxs.diminfo[0].shape = __pyx_pybuffernd_idxs.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_idx_sort.rcbuffer->pybuffer, (PyObject*)__pyx_v_idx_sort, &__Pyx_TypeInfo_nn___pyx_t_7astropy_5table_9_np_utils_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_idx_sort.diminfo[0].strides = __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_idx_sort.diminfo[0].shape = __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/table/_np_utils.pyx":27
-- *     (The "inner" is about the inner loop, not inner join).
-- *     """
-- *     cdef int n_out = 0             # <<<<<<<<<<<<<<
-- *     cdef int max_key_idxs = 0
-- *     cdef DTYPE_t ii, key_idxs, n_left, n_right, idx0, idx1, idx, i
-- */
--  __pyx_v_n_out = 0;
--
--  /* "astropy/table/_np_utils.pyx":28
-- *     """
-- *     cdef int n_out = 0
-- *     cdef int max_key_idxs = 0             # <<<<<<<<<<<<<<
-- *     cdef DTYPE_t ii, key_idxs, n_left, n_right, idx0, idx1, idx, i
-- *     cdef DTYPE_t i_left, i_right, i_out
-- */
--  __pyx_v_max_key_idxs = 0;
--
--  /* "astropy/table/_np_utils.pyx":35
-- *     # First count the final number of rows and max number of indexes
-- *     # for a single key
-- *     masked = 0             # <<<<<<<<<<<<<<
-- *     for ii in range(idxs.shape[0] - 1):
-- *         idx0 = idxs[ii]
-- */
--  __pyx_v_masked = 0;
--
--  /* "astropy/table/_np_utils.pyx":36
-- *     # for a single key
-- *     masked = 0
-- *     for ii in range(idxs.shape[0] - 1):             # <<<<<<<<<<<<<<
-- *         idx0 = idxs[ii]
-- *         idx1 = idxs[ii + 1]
-- */
--  __pyx_t_1 = ((__pyx_v_idxs->dimensions[0]) - 1);
--  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
--    __pyx_v_ii = __pyx_t_2;
--
--    /* "astropy/table/_np_utils.pyx":37
-- *     masked = 0
-- *     for ii in range(idxs.shape[0] - 1):
-- *         idx0 = idxs[ii]             # <<<<<<<<<<<<<<
-- *         idx1 = idxs[ii + 1]
-- * 
-- */
--    __pyx_t_3 = __pyx_v_ii;
--    __pyx_v_idx0 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_idxs.diminfo[0].strides));
--
--    /* "astropy/table/_np_utils.pyx":38
-- *     for ii in range(idxs.shape[0] - 1):
-- *         idx0 = idxs[ii]
-- *         idx1 = idxs[ii + 1]             # <<<<<<<<<<<<<<
-- * 
-- *         # Number of indexes for this key
-- */
--    __pyx_t_4 = (__pyx_v_ii + 1);
--    __pyx_v_idx1 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_idxs.diminfo[0].strides));
--
--    /* "astropy/table/_np_utils.pyx":41
-- * 
-- *         # Number of indexes for this key
-- *         key_idxs = idx1 - idx0             # <<<<<<<<<<<<<<
-- *         if key_idxs > max_key_idxs:
-- *             max_key_idxs = key_idxs
-- */
--    __pyx_v_key_idxs = (__pyx_v_idx1 - __pyx_v_idx0);
--
--    /* "astropy/table/_np_utils.pyx":42
-- *         # Number of indexes for this key
-- *         key_idxs = idx1 - idx0
-- *         if key_idxs > max_key_idxs:             # <<<<<<<<<<<<<<
-- *             max_key_idxs = key_idxs
-- * 
-- */
--    __pyx_t_5 = (__pyx_v_key_idxs > __pyx_v_max_key_idxs);
--    if (__pyx_t_5) {
--
--      /* "astropy/table/_np_utils.pyx":43
-- *         key_idxs = idx1 - idx0
-- *         if key_idxs > max_key_idxs:
-- *             max_key_idxs = key_idxs             # <<<<<<<<<<<<<<
-- * 
-- *         # Number of rows for this key
-- */
--      __pyx_v_max_key_idxs = __pyx_v_key_idxs;
--      goto __pyx_L5;
--    }
--    __pyx_L5:;
--
--    /* "astropy/table/_np_utils.pyx":46
-- * 
-- *         # Number of rows for this key
-- *         n_left = 0             # <<<<<<<<<<<<<<
-- *         n_right = 0
-- *         for idx in range(idx0, idx1):
-- */
--    __pyx_v_n_left = 0;
--
--    /* "astropy/table/_np_utils.pyx":47
-- *         # Number of rows for this key
-- *         n_left = 0
-- *         n_right = 0             # <<<<<<<<<<<<<<
-- *         for idx in range(idx0, idx1):
-- *             i = idx_sort[idx]
-- */
--    __pyx_v_n_right = 0;
--
--    /* "astropy/table/_np_utils.pyx":48
-- *         n_left = 0
-- *         n_right = 0
-- *         for idx in range(idx0, idx1):             # <<<<<<<<<<<<<<
-- *             i = idx_sort[idx]
-- *             if i < len_left:
-- */
--    __pyx_t_6 = __pyx_v_idx1;
--    for (__pyx_t_7 = __pyx_v_idx0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
--      __pyx_v_idx = __pyx_t_7;
--
--      /* "astropy/table/_np_utils.pyx":49
-- *         n_right = 0
-- *         for idx in range(idx0, idx1):
-- *             i = idx_sort[idx]             # <<<<<<<<<<<<<<
-- *             if i < len_left:
-- *                 n_left += 1
-- */
--      __pyx_t_8 = __pyx_v_idx;
--      __pyx_v_i = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_idx_sort.diminfo[0].strides));
--
--      /* "astropy/table/_np_utils.pyx":50
-- *         for idx in range(idx0, idx1):
-- *             i = idx_sort[idx]
-- *             if i < len_left:             # <<<<<<<<<<<<<<
-- *                 n_left += 1
-- *             else:
-- */
--      __pyx_t_5 = (__pyx_v_i < __pyx_v_len_left);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":51
-- *             i = idx_sort[idx]
-- *             if i < len_left:
-- *                 n_left += 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 n_right += 1
-- */
--        __pyx_v_n_left = (__pyx_v_n_left + 1);
--        goto __pyx_L8;
--      }
--      /*else*/ {
--
--        /* "astropy/table/_np_utils.pyx":53
-- *                 n_left += 1
-- *             else:
-- *                 n_right += 1             # <<<<<<<<<<<<<<
-- * 
-- *         # Fix n_left and n_right for different join types
-- */
--        __pyx_v_n_right = (__pyx_v_n_right + 1);
--      }
--      __pyx_L8:;
--    }
--
--    /* "astropy/table/_np_utils.pyx":69
-- *                 masked = 1
-- *                 n_right = 1
-- *         elif jointype == 3:             # <<<<<<<<<<<<<<
-- *             if n_left == 0:
-- *                 masked = 1
-- */
--    switch (__pyx_v_jointype) {
--
--      /* "astropy/table/_np_utils.pyx":56
-- * 
-- *         # Fix n_left and n_right for different join types
-- *         if jointype == 0:             # <<<<<<<<<<<<<<
-- *             pass
-- *         elif jointype == 1:
-- */
--      case 0:
--      break;
--
--      /* "astropy/table/_np_utils.pyx":58
-- *         if jointype == 0:
-- *             pass
-- *         elif jointype == 1:             # <<<<<<<<<<<<<<
-- *             if n_left == 0:
-- *                 masked = 1
-- */
--      case 1:
--
--      /* "astropy/table/_np_utils.pyx":59
-- *             pass
-- *         elif jointype == 1:
-- *             if n_left == 0:             # <<<<<<<<<<<<<<
-- *                 masked = 1
-- *                 n_left = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_left == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":60
-- *         elif jointype == 1:
-- *             if n_left == 0:
-- *                 masked = 1             # <<<<<<<<<<<<<<
-- *                 n_left = 1
-- *             if n_right == 0:
-- */
--        __pyx_v_masked = 1;
--
--        /* "astropy/table/_np_utils.pyx":61
-- *             if n_left == 0:
-- *                 masked = 1
-- *                 n_left = 1             # <<<<<<<<<<<<<<
-- *             if n_right == 0:
-- *                 masked = 1
-- */
--        __pyx_v_n_left = 1;
--        goto __pyx_L9;
--      }
--      __pyx_L9:;
--
--      /* "astropy/table/_np_utils.pyx":62
-- *                 masked = 1
-- *                 n_left = 1
-- *             if n_right == 0:             # <<<<<<<<<<<<<<
-- *                 masked = 1
-- *                 n_right = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_right == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":63
-- *                 n_left = 1
-- *             if n_right == 0:
-- *                 masked = 1             # <<<<<<<<<<<<<<
-- *                 n_right = 1
-- *         elif jointype == 2:
-- */
--        __pyx_v_masked = 1;
--
--        /* "astropy/table/_np_utils.pyx":64
-- *             if n_right == 0:
-- *                 masked = 1
-- *                 n_right = 1             # <<<<<<<<<<<<<<
-- *         elif jointype == 2:
-- *             if n_right == 0:
-- */
--        __pyx_v_n_right = 1;
--        goto __pyx_L10;
--      }
--      __pyx_L10:;
--      break;
--
--      /* "astropy/table/_np_utils.pyx":65
-- *                 masked = 1
-- *                 n_right = 1
-- *         elif jointype == 2:             # <<<<<<<<<<<<<<
-- *             if n_right == 0:
-- *                 masked = 1
-- */
--      case 2:
--
--      /* "astropy/table/_np_utils.pyx":66
-- *                 n_right = 1
-- *         elif jointype == 2:
-- *             if n_right == 0:             # <<<<<<<<<<<<<<
-- *                 masked = 1
-- *                 n_right = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_right == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":67
-- *         elif jointype == 2:
-- *             if n_right == 0:
-- *                 masked = 1             # <<<<<<<<<<<<<<
-- *                 n_right = 1
-- *         elif jointype == 3:
-- */
--        __pyx_v_masked = 1;
--
--        /* "astropy/table/_np_utils.pyx":68
-- *             if n_right == 0:
-- *                 masked = 1
-- *                 n_right = 1             # <<<<<<<<<<<<<<
-- *         elif jointype == 3:
-- *             if n_left == 0:
-- */
--        __pyx_v_n_right = 1;
--        goto __pyx_L11;
--      }
--      __pyx_L11:;
--      break;
--
--      /* "astropy/table/_np_utils.pyx":69
-- *                 masked = 1
-- *                 n_right = 1
-- *         elif jointype == 3:             # <<<<<<<<<<<<<<
-- *             if n_left == 0:
-- *                 masked = 1
-- */
--      case 3:
--
--      /* "astropy/table/_np_utils.pyx":70
-- *                 n_right = 1
-- *         elif jointype == 3:
-- *             if n_left == 0:             # <<<<<<<<<<<<<<
-- *                 masked = 1
-- *                 n_left = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_left == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":71
-- *         elif jointype == 3:
-- *             if n_left == 0:
-- *                 masked = 1             # <<<<<<<<<<<<<<
-- *                 n_left = 1
-- * 
-- */
--        __pyx_v_masked = 1;
--
--        /* "astropy/table/_np_utils.pyx":72
-- *             if n_left == 0:
-- *                 masked = 1
-- *                 n_left = 1             # <<<<<<<<<<<<<<
-- * 
-- *         n_out += n_left * n_right
-- */
--        __pyx_v_n_left = 1;
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--      break;
--    }
--
--    /* "astropy/table/_np_utils.pyx":74
-- *                 n_left = 1
-- * 
-- *         n_out += n_left * n_right             # <<<<<<<<<<<<<<
-- * 
-- *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
-- */
--    __pyx_v_n_out = (__pyx_v_n_out + (__pyx_v_n_left * __pyx_v_n_right));
--  }
--
--  /* "astropy/table/_np_utils.pyx":76
-- *         n_out += n_left * n_right
-- * 
-- *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
-- *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
-- */
--  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __pyx_t_10 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__empty); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __pyx_t_9 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
--  __Pyx_GIVEREF(__pyx_t_9);
--  __pyx_t_9 = 0;
--  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
--  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_12);
--  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
--  __pyx_t_12 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_12);
--  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
--  if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_left_out = ((PyArrayObject *)__pyx_t_12);
--  __pyx_t_12 = 0;
--
--  /* "astropy/table/_np_utils.pyx":77
-- * 
-- *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
-- *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
-- *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
-- */
--  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_12);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
--  __pyx_t_12 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_12);
--  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);
--  __Pyx_GIVEREF(__pyx_t_12);
--  __pyx_t_12 = 0;
--  __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_12));
--  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
--  __pyx_t_10 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
--  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_right_out = ((PyArrayObject *)__pyx_t_10);
--  __pyx_t_10 = 0;
--
--  /* "astropy/table/_np_utils.pyx":78
-- *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
-- *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
-- *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
-- *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
-- */
--  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __pyx_t_12 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__zeros); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_12);
--  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
--  __pyx_t_10 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
--  __Pyx_GIVEREF(__pyx_t_10);
--  __pyx_t_10 = 0;
--  __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_10));
--  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __pyx_t_13 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__bool); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--  __pyx_t_13 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
--  if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_left_mask = ((PyArrayObject *)__pyx_t_13);
--  __pyx_t_13 = 0;
--
--  /* "astropy/table/_np_utils.pyx":79
-- *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
-- *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
-- *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
-- *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
-- */
--  __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __pyx_t_10 = PyObject_GetAttr(__pyx_t_13, __pyx_n_s__zeros); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--  __pyx_t_13 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13);
--  __Pyx_GIVEREF(__pyx_t_13);
--  __pyx_t_13 = 0;
--  __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_13));
--  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_12);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__bool); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
--  if (PyDict_SetItem(__pyx_t_13, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __pyx_t_9 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
--  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_right_mask = ((PyArrayObject *)__pyx_t_9);
--  __pyx_t_9 = 0;
--
--  /* "astropy/table/_np_utils.pyx":80
-- *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
-- *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
-- *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
-- * 
-- */
--  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __pyx_t_13 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__empty); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __pyx_t_9 = PyInt_FromLong(__pyx_v_max_key_idxs); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
--  __Pyx_GIVEREF(__pyx_t_9);
--  __pyx_t_9 = 0;
--  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
--  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
--  __pyx_t_10 = PyObject_Call(__pyx_t_13, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
--  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_left_idxs = ((PyArrayObject *)__pyx_t_10);
--  __pyx_t_10 = 0;
--
--  /* "astropy/table/_np_utils.pyx":81
-- *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
-- *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
-- *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)             # <<<<<<<<<<<<<<
-- * 
-- *     i_out = 0
-- */
--  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __pyx_t_9 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_9);
--  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
--  __pyx_t_10 = PyInt_FromLong(__pyx_v_max_key_idxs); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
--  __Pyx_GIVEREF(__pyx_t_10);
--  __pyx_t_10 = 0;
--  __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_10));
--  __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--  __pyx_t_13 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
--  if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_right_idxs = ((PyArrayObject *)__pyx_t_13);
--  __pyx_t_13 = 0;
--
--  /* "astropy/table/_np_utils.pyx":83
-- *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
-- * 
-- *     i_out = 0             # <<<<<<<<<<<<<<
-- *     for ii in range(idxs.shape[0] - 1):
-- *         idx0 = idxs[ii]
-- */
--  __pyx_v_i_out = 0;
--
--  /* "astropy/table/_np_utils.pyx":84
-- * 
-- *     i_out = 0
-- *     for ii in range(idxs.shape[0] - 1):             # <<<<<<<<<<<<<<
-- *         idx0 = idxs[ii]
-- *         idx1 = idxs[ii + 1]
-- */
--  __pyx_t_1 = ((__pyx_v_idxs->dimensions[0]) - 1);
--  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
--    __pyx_v_ii = __pyx_t_2;
--
--    /* "astropy/table/_np_utils.pyx":85
-- *     i_out = 0
-- *     for ii in range(idxs.shape[0] - 1):
-- *         idx0 = idxs[ii]             # <<<<<<<<<<<<<<
-- *         idx1 = idxs[ii + 1]
-- * 
-- */
--    __pyx_t_6 = __pyx_v_ii;
--    __pyx_v_idx0 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_idxs.diminfo[0].strides));
--
--    /* "astropy/table/_np_utils.pyx":86
-- *     for ii in range(idxs.shape[0] - 1):
-- *         idx0 = idxs[ii]
-- *         idx1 = idxs[ii + 1]             # <<<<<<<<<<<<<<
-- * 
-- *         # Number of rows for this key
-- */
--    __pyx_t_14 = (__pyx_v_ii + 1);
--    __pyx_v_idx1 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_idxs.diminfo[0].strides));
--
--    /* "astropy/table/_np_utils.pyx":89
-- * 
-- *         # Number of rows for this key
-- *         n_left = 0             # <<<<<<<<<<<<<<
-- *         n_right = 0
-- *         for idx in range(idx0, idx1):
-- */
--    __pyx_v_n_left = 0;
--
--    /* "astropy/table/_np_utils.pyx":90
-- *         # Number of rows for this key
-- *         n_left = 0
-- *         n_right = 0             # <<<<<<<<<<<<<<
-- *         for idx in range(idx0, idx1):
-- *             i = idx_sort[idx]
-- */
--    __pyx_v_n_right = 0;
--
--    /* "astropy/table/_np_utils.pyx":91
-- *         n_left = 0
-- *         n_right = 0
-- *         for idx in range(idx0, idx1):             # <<<<<<<<<<<<<<
-- *             i = idx_sort[idx]
-- *             if i < len_left:
-- */
--    __pyx_t_7 = __pyx_v_idx1;
--    for (__pyx_t_15 = __pyx_v_idx0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
--      __pyx_v_idx = __pyx_t_15;
--
--      /* "astropy/table/_np_utils.pyx":92
-- *         n_right = 0
-- *         for idx in range(idx0, idx1):
-- *             i = idx_sort[idx]             # <<<<<<<<<<<<<<
-- *             if i < len_left:
-- *                 left_idxs[n_left] = i
-- */
--      __pyx_t_16 = __pyx_v_idx;
--      __pyx_v_i = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_idx_sort.diminfo[0].strides));
--
--      /* "astropy/table/_np_utils.pyx":93
-- *         for idx in range(idx0, idx1):
-- *             i = idx_sort[idx]
-- *             if i < len_left:             # <<<<<<<<<<<<<<
-- *                 left_idxs[n_left] = i
-- *                 n_left += 1
-- */
--      __pyx_t_5 = (__pyx_v_i < __pyx_v_len_left);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":94
-- *             i = idx_sort[idx]
-- *             if i < len_left:
-- *                 left_idxs[n_left] = i             # <<<<<<<<<<<<<<
-- *                 n_left += 1
-- *             else:
-- */
--        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long(__pyx_v_i); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_13);
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_idxs), __pyx_v_n_left, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--
--        /* "astropy/table/_np_utils.pyx":95
-- *             if i < len_left:
-- *                 left_idxs[n_left] = i
-- *                 n_left += 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 right_idxs[n_right] = i - len_left
-- */
--        __pyx_v_n_left = (__pyx_v_n_left + 1);
--        goto __pyx_L17;
--      }
--      /*else*/ {
--
--        /* "astropy/table/_np_utils.pyx":97
-- *                 n_left += 1
-- *             else:
-- *                 right_idxs[n_right] = i - len_left             # <<<<<<<<<<<<<<
-- *                 n_right += 1
-- * 
-- */
--        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long((__pyx_v_i - __pyx_v_len_left)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_13);
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_idxs), __pyx_v_n_right, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--
--        /* "astropy/table/_np_utils.pyx":98
-- *             else:
-- *                 right_idxs[n_right] = i - len_left
-- *                 n_right += 1             # <<<<<<<<<<<<<<
-- * 
-- *         if jointype == 0:
-- */
--        __pyx_v_n_right = (__pyx_v_n_right + 1);
--      }
--      __pyx_L17:;
--    }
--
--    /* "astropy/table/_np_utils.pyx":113
-- *                 right_idxs[0] = -1
-- *                 n_right = 1
-- *         elif jointype == 3:             # <<<<<<<<<<<<<<
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1
-- */
--    switch (__pyx_v_jointype) {
--
--      /* "astropy/table/_np_utils.pyx":100
-- *                 n_right += 1
-- * 
-- *         if jointype == 0:             # <<<<<<<<<<<<<<
-- *             pass
-- *         elif jointype == 1:
-- */
--      case 0:
--      break;
--
--      /* "astropy/table/_np_utils.pyx":102
-- *         if jointype == 0:
-- *             pass
-- *         elif jointype == 1:             # <<<<<<<<<<<<<<
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1
-- */
--      case 1:
--
--      /* "astropy/table/_np_utils.pyx":103
-- *             pass
-- *         elif jointype == 1:
-- *             if n_left == 0:             # <<<<<<<<<<<<<<
-- *                 left_idxs[0] = -1
-- *                 n_left = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_left == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":104
-- *         elif jointype == 1:
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1             # <<<<<<<<<<<<<<
-- *                 n_left = 1
-- *             if n_right == 0:
-- */
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--        /* "astropy/table/_np_utils.pyx":105
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1
-- *                 n_left = 1             # <<<<<<<<<<<<<<
-- *             if n_right == 0:
-- *                 right_idxs[0] = -1
-- */
--        __pyx_v_n_left = 1;
--        goto __pyx_L18;
--      }
--      __pyx_L18:;
--
--      /* "astropy/table/_np_utils.pyx":106
-- *                 left_idxs[0] = -1
-- *                 n_left = 1
-- *             if n_right == 0:             # <<<<<<<<<<<<<<
-- *                 right_idxs[0] = -1
-- *                 n_right = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_right == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":107
-- *                 n_left = 1
-- *             if n_right == 0:
-- *                 right_idxs[0] = -1             # <<<<<<<<<<<<<<
-- *                 n_right = 1
-- *         elif jointype == 2:
-- */
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--        /* "astropy/table/_np_utils.pyx":108
-- *             if n_right == 0:
-- *                 right_idxs[0] = -1
-- *                 n_right = 1             # <<<<<<<<<<<<<<
-- *         elif jointype == 2:
-- *             if n_right == 0:
-- */
--        __pyx_v_n_right = 1;
--        goto __pyx_L19;
--      }
--      __pyx_L19:;
--      break;
--
--      /* "astropy/table/_np_utils.pyx":109
-- *                 right_idxs[0] = -1
-- *                 n_right = 1
-- *         elif jointype == 2:             # <<<<<<<<<<<<<<
-- *             if n_right == 0:
-- *                 right_idxs[0] = -1
-- */
--      case 2:
--
--      /* "astropy/table/_np_utils.pyx":110
-- *                 n_right = 1
-- *         elif jointype == 2:
-- *             if n_right == 0:             # <<<<<<<<<<<<<<
-- *                 right_idxs[0] = -1
-- *                 n_right = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_right == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":111
-- *         elif jointype == 2:
-- *             if n_right == 0:
-- *                 right_idxs[0] = -1             # <<<<<<<<<<<<<<
-- *                 n_right = 1
-- *         elif jointype == 3:
-- */
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--        /* "astropy/table/_np_utils.pyx":112
-- *             if n_right == 0:
-- *                 right_idxs[0] = -1
-- *                 n_right = 1             # <<<<<<<<<<<<<<
-- *         elif jointype == 3:
-- *             if n_left == 0:
-- */
--        __pyx_v_n_right = 1;
--        goto __pyx_L20;
--      }
--      __pyx_L20:;
--      break;
--
--      /* "astropy/table/_np_utils.pyx":113
-- *                 right_idxs[0] = -1
-- *                 n_right = 1
-- *         elif jointype == 3:             # <<<<<<<<<<<<<<
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1
-- */
--      case 3:
--
--      /* "astropy/table/_np_utils.pyx":114
-- *                 n_right = 1
-- *         elif jointype == 3:
-- *             if n_left == 0:             # <<<<<<<<<<<<<<
-- *                 left_idxs[0] = -1
-- *                 n_left = 1
-- */
--      __pyx_t_5 = (__pyx_v_n_left == 0);
--      if (__pyx_t_5) {
--
--        /* "astropy/table/_np_utils.pyx":115
-- *         elif jointype == 3:
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1             # <<<<<<<<<<<<<<
-- *                 n_left = 1
-- * 
-- */
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--        /* "astropy/table/_np_utils.pyx":116
-- *             if n_left == 0:
-- *                 left_idxs[0] = -1
-- *                 n_left = 1             # <<<<<<<<<<<<<<
-- * 
-- *         for i_left in range(n_left):
-- */
--        __pyx_v_n_left = 1;
--        goto __pyx_L21;
--      }
--      __pyx_L21:;
--      break;
--    }
--
--    /* "astropy/table/_np_utils.pyx":118
-- *                 n_left = 1
-- * 
-- *         for i_left in range(n_left):             # <<<<<<<<<<<<<<
-- *             for i_right in range(n_right):
-- *                 idx = left_idxs[i_left]
-- */
--    __pyx_t_7 = __pyx_v_n_left;
--    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
--      __pyx_v_i_left = __pyx_t_15;
--
--      /* "astropy/table/_np_utils.pyx":119
-- * 
-- *         for i_left in range(n_left):
-- *             for i_right in range(n_right):             # <<<<<<<<<<<<<<
-- *                 idx = left_idxs[i_left]
-- *                 if idx < 0:
-- */
--      __pyx_t_17 = __pyx_v_n_right;
--      for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
--        __pyx_v_i_right = __pyx_t_18;
--
--        /* "astropy/table/_np_utils.pyx":120
-- *         for i_left in range(n_left):
-- *             for i_right in range(n_right):
-- *                 idx = left_idxs[i_left]             # <<<<<<<<<<<<<<
-- *                 if idx < 0:
-- *                     idx = 0
-- */
--        __pyx_t_13 = __Pyx_GetItemInt(((PyObject *)__pyx_v_left_idxs), __pyx_v_i_left, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long); if (!__pyx_t_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_13);
--        __pyx_t_19 = __Pyx_PyInt_from_py_npy_long(__pyx_t_13); if (unlikely((__pyx_t_19 == (npy_long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--        __pyx_v_idx = __pyx_t_19;
--
--        /* "astropy/table/_np_utils.pyx":121
-- *             for i_right in range(n_right):
-- *                 idx = left_idxs[i_left]
-- *                 if idx < 0:             # <<<<<<<<<<<<<<
-- *                     idx = 0
-- *                     left_mask[i_out] = 1
-- */
--        __pyx_t_5 = (__pyx_v_idx < 0);
--        if (__pyx_t_5) {
--
--          /* "astropy/table/_np_utils.pyx":122
-- *                 idx = left_idxs[i_left]
-- *                 if idx < 0:
-- *                     idx = 0             # <<<<<<<<<<<<<<
-- *                     left_mask[i_out] = 1
-- *                 left_out[i_out] = idx
-- */
--          __pyx_v_idx = 0;
--
--          /* "astropy/table/_np_utils.pyx":123
-- *                 if idx < 0:
-- *                     idx = 0
-- *                     left_mask[i_out] = 1             # <<<<<<<<<<<<<<
-- *                 left_out[i_out] = idx
-- * 
-- */
--          if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_mask), __pyx_v_i_out, __pyx_int_1, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          goto __pyx_L26;
--        }
--        __pyx_L26:;
--
--        /* "astropy/table/_np_utils.pyx":124
-- *                     idx = 0
-- *                     left_mask[i_out] = 1
-- *                 left_out[i_out] = idx             # <<<<<<<<<<<<<<
-- * 
-- *                 idx = right_idxs[i_right]
-- */
--        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long(__pyx_v_idx); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_13);
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_out), __pyx_v_i_out, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--
--        /* "astropy/table/_np_utils.pyx":126
-- *                 left_out[i_out] = idx
-- * 
-- *                 idx = right_idxs[i_right]             # <<<<<<<<<<<<<<
-- *                 if idx < 0:
-- *                     idx = 0
-- */
--        __pyx_t_13 = __Pyx_GetItemInt(((PyObject *)__pyx_v_right_idxs), __pyx_v_i_right, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long); if (!__pyx_t_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_13);
--        __pyx_t_19 = __Pyx_PyInt_from_py_npy_long(__pyx_t_13); if (unlikely((__pyx_t_19 == (npy_long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--        __pyx_v_idx = __pyx_t_19;
--
--        /* "astropy/table/_np_utils.pyx":127
-- * 
-- *                 idx = right_idxs[i_right]
-- *                 if idx < 0:             # <<<<<<<<<<<<<<
-- *                     idx = 0
-- *                     right_mask[i_out] = 1
-- */
--        __pyx_t_5 = (__pyx_v_idx < 0);
--        if (__pyx_t_5) {
--
--          /* "astropy/table/_np_utils.pyx":128
-- *                 idx = right_idxs[i_right]
-- *                 if idx < 0:
-- *                     idx = 0             # <<<<<<<<<<<<<<
-- *                     right_mask[i_out] = 1
-- *                 right_out[i_out] = idx
-- */
--          __pyx_v_idx = 0;
--
--          /* "astropy/table/_np_utils.pyx":129
-- *                 if idx < 0:
-- *                     idx = 0
-- *                     right_mask[i_out] = 1             # <<<<<<<<<<<<<<
-- *                 right_out[i_out] = idx
-- * 
-- */
--          if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_mask), __pyx_v_i_out, __pyx_int_1, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--          goto __pyx_L27;
--        }
--        __pyx_L27:;
--
--        /* "astropy/table/_np_utils.pyx":130
-- *                     idx = 0
-- *                     right_mask[i_out] = 1
-- *                 right_out[i_out] = idx             # <<<<<<<<<<<<<<
-- * 
-- *                 i_out += 1
-- */
--        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long(__pyx_v_idx); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_13);
--        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_out), __pyx_v_i_out, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
--
--        /* "astropy/table/_np_utils.pyx":132
-- *                 right_out[i_out] = idx
-- * 
-- *                 i_out += 1             # <<<<<<<<<<<<<<
-- * 
-- *     return masked, n_out, left_out, left_mask, right_out, right_mask
-- */
--        __pyx_v_i_out = (__pyx_v_i_out + 1);
--      }
--    }
--  }
--
--  /* "astropy/table/_np_utils.pyx":134
-- *                 i_out += 1
-- * 
-- *     return masked, n_out, left_out, left_mask, right_out, right_mask             # <<<<<<<<<<<<<<
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_13 = PyInt_FromLong(__pyx_v_masked); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_13);
--  __pyx_t_10 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_10);
--  __pyx_t_11 = PyTuple_New(6); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_11);
--  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13);
--  __Pyx_GIVEREF(__pyx_t_13);
--  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10);
--  __Pyx_GIVEREF(__pyx_t_10);
--  __Pyx_INCREF(((PyObject *)__pyx_v_left_out));
--  PyTuple_SET_ITEM(__pyx_t_11, 2, ((PyObject *)__pyx_v_left_out));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_left_out));
--  __Pyx_INCREF(((PyObject *)__pyx_v_left_mask));
--  PyTuple_SET_ITEM(__pyx_t_11, 3, ((PyObject *)__pyx_v_left_mask));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_left_mask));
--  __Pyx_INCREF(((PyObject *)__pyx_v_right_out));
--  PyTuple_SET_ITEM(__pyx_t_11, 4, ((PyObject *)__pyx_v_right_out));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_right_out));
--  __Pyx_INCREF(((PyObject *)__pyx_v_right_mask));
--  PyTuple_SET_ITEM(__pyx_t_11, 5, ((PyObject *)__pyx_v_right_mask));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_right_mask));
--  __pyx_t_13 = 0;
--  __pyx_t_10 = 0;
--  __pyx_r = ((PyObject *)__pyx_t_11);
--  __pyx_t_11 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_9);
--  __Pyx_XDECREF(__pyx_t_10);
--  __Pyx_XDECREF(__pyx_t_11);
--  __Pyx_XDECREF(__pyx_t_12);
--  __Pyx_XDECREF(__pyx_t_13);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idx_sort.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idxs.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.table._np_utils.join_inner", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idx_sort.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idxs.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_left_out);
--  __Pyx_XDECREF((PyObject *)__pyx_v_right_out);
--  __Pyx_XDECREF((PyObject *)__pyx_v_left_mask);
--  __Pyx_XDECREF((PyObject *)__pyx_v_right_mask);
--  __Pyx_XDECREF((PyObject *)__pyx_v_left_idxs);
--  __Pyx_XDECREF((PyObject *)__pyx_v_right_idxs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
--  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":194
-- *         # experimental exception made for __getbuffer__ and __releasebuffer__
-- *         # -- the details of this may change.
-- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
-- *             # This implementation of getbuffer is geared towards Cython
-- *             # requirements, and does not yet fullfill the PEP.
-- */
--
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_v_copy_shape;
--  int __pyx_v_i;
--  int __pyx_v_ndim;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  int __pyx_v_t;
--  char *__pyx_v_f;
--  PyArray_Descr *__pyx_v_descr = 0;
--  int __pyx_v_offset;
--  int __pyx_v_hasfields;
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  int __pyx_t_7;
--  PyObject *__pyx_t_8 = NULL;
--  char *__pyx_t_9;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("__getbuffer__", 0);
--  if (__pyx_v_info != NULL) {
--    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(__pyx_v_info->obj);
--  }
--
--  /* "numpy.pxd":200
-- *             # of flags
-- * 
-- *             if info == NULL: return             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int copy_shape, i, ndim
-- */
--  __pyx_t_1 = (__pyx_v_info == NULL);
--  if (__pyx_t_1) {
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":203
-- * 
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":204
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- * 
-- *             ndim = PyArray_NDIM(self)
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":206
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
--
--  /* "numpy.pxd":208
-- *             ndim = PyArray_NDIM(self)
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 copy_shape = 1
-- *             else:
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":209
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 copy_shape = 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 copy_shape = 0
-- */
--    __pyx_v_copy_shape = 1;
--    goto __pyx_L4;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":211
-- *                 copy_shape = 1
-- *             else:
-- *                 copy_shape = 0             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- */
--    __pyx_v_copy_shape = 0;
--  }
--  __pyx_L4:;
--
--  /* "numpy.pxd":213
-- *                 copy_shape = 0
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- */
--  __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":214
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- */
--    __pyx_t_2 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS));
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L5;
--  }
--  __pyx_L5:;
--
--  /* "numpy.pxd":217
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- */
--  __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":218
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- */
--    __pyx_t_1 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS));
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (__pyx_t_2) {
--
--    /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L6;
--  }
--  __pyx_L6:;
--
--  /* "numpy.pxd":221
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
-- *             info.ndim = ndim
-- *             if copy_shape:
-- */
--  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
--
--  /* "numpy.pxd":222
-- * 
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim             # <<<<<<<<<<<<<<
-- *             if copy_shape:
-- *                 # Allocate new buffer for strides and shape info.
-- */
--  __pyx_v_info->ndim = __pyx_v_ndim;
--
--  /* "numpy.pxd":223
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim
-- *             if copy_shape:             # <<<<<<<<<<<<<<
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- */
--  if (__pyx_v_copy_shape) {
--
--    /* "numpy.pxd":226
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
--
--    /* "numpy.pxd":227
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- */
--    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
--
--    /* "numpy.pxd":228
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- */
--    __pyx_t_5 = __pyx_v_ndim;
--    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
--      __pyx_v_i = __pyx_t_6;
--
--      /* "numpy.pxd":229
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- */
--      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
--
--      /* "numpy.pxd":230
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- */
--      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
--    }
--    goto __pyx_L7;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":232
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
--
--    /* "numpy.pxd":233
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- */
--    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
--  }
--  __pyx_L7:;
--
--  /* "numpy.pxd":234
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- */
--  __pyx_v_info->suboffsets = NULL;
--
--  /* "numpy.pxd":235
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- * 
-- */
--  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
--
--  /* "numpy.pxd":236
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int t
-- */
--  __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(__pyx_v_self));
--
--  /* "numpy.pxd":239
-- * 
-- *             cdef int t
-- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
-- *             cdef dtype descr = self.descr
-- *             cdef list stack
-- */
--  __pyx_v_f = NULL;
--
--  /* "numpy.pxd":240
-- *             cdef int t
-- *             cdef char* f = NULL
-- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
-- *             cdef list stack
-- *             cdef int offset
-- */
--  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
--  __Pyx_INCREF(__pyx_t_4);
--  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "numpy.pxd":244
-- *             cdef int offset
-- * 
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields and not copy_shape:
-- */
--  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
--
--  /* "numpy.pxd":246
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
-- * 
-- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
-- *                 # do not call releasebuffer
-- *                 info.obj = None
-- */
--  __pyx_t_2 = (!__pyx_v_hasfields);
--  if (__pyx_t_2) {
--    __pyx_t_3 = (!__pyx_v_copy_shape);
--    __pyx_t_1 = __pyx_t_3;
--  } else {
--    __pyx_t_1 = __pyx_t_2;
--  }
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":248
-- *             if not hasfields and not copy_shape:
-- *                 # do not call releasebuffer
-- *                 info.obj = None             # <<<<<<<<<<<<<<
-- *             else:
-- *                 # need to call releasebuffer
-- */
--    __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(Py_None);
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = Py_None;
--    goto __pyx_L10;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":251
-- *             else:
-- *                 # need to call releasebuffer
-- *                 info.obj = self             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields:
-- */
--    __Pyx_INCREF(((PyObject *)__pyx_v_self));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
--  }
--  __pyx_L10:;
--
--  /* "numpy.pxd":253
-- *                 info.obj = self
-- * 
-- *             if not hasfields:             # <<<<<<<<<<<<<<
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- */
--  __pyx_t_1 = (!__pyx_v_hasfields);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":254
-- * 
-- *             if not hasfields:
-- *                 t = descr.type_num             # <<<<<<<<<<<<<<
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- */
--    __pyx_t_5 = __pyx_v_descr->type_num;
--    __pyx_v_t = __pyx_t_5;
--
--    /* "numpy.pxd":255
-- *             if not hasfields:
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_1 = (__pyx_v_descr->byteorder == '>');
--    if (__pyx_t_1) {
--      __pyx_t_2 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_2 = __pyx_t_1;
--    }
--    if (!__pyx_t_2) {
--
--      /* "numpy.pxd":256
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- */
--      __pyx_t_1 = (__pyx_v_descr->byteorder == '<');
--      if (__pyx_t_1) {
--        __pyx_t_3 = (!__pyx_v_little_endian);
--        __pyx_t_7 = __pyx_t_3;
--      } else {
--        __pyx_t_7 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_7;
--    } else {
--      __pyx_t_1 = __pyx_t_2;
--    }
--    if (__pyx_t_1) {
--
--      /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L12;
--    }
--    __pyx_L12:;
--
--    /* "numpy.pxd":258
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_BYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__b;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":259
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UBYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__B;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":260
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_SHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__h;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":261
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_USHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__H;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":262
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_INT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__i;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":263
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UINT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__I;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":264
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__l;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":265
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__L;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":266
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":267
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":268
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_FLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__f;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":269
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__d;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":270
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__g;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":271
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zf;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":272
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zd;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":273
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zg;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":274
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_OBJECT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__O;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":276
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *                 info.format = f
-- *                 return
-- */
--      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_7), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
--      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
--      __pyx_t_8 = 0;
--      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_8);
--      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--    __pyx_L13:;
--
--    /* "numpy.pxd":277
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f             # <<<<<<<<<<<<<<
-- *                 return
-- *             else:
-- */
--    __pyx_v_info->format = __pyx_v_f;
--
--    /* "numpy.pxd":278
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f
-- *                 return             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- */
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L11;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":280
-- *                 return
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0
-- */
--    __pyx_v_info->format = ((char *)malloc(255));
--
--    /* "numpy.pxd":281
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
-- *                 offset = 0
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- */
--    (__pyx_v_info->format[0]) = '^';
--
--    /* "numpy.pxd":282
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0             # <<<<<<<<<<<<<<
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- */
--    __pyx_v_offset = 0;
--
--    /* "numpy.pxd":285
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)             # <<<<<<<<<<<<<<
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- */
--    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_v_f = __pyx_t_9;
--
--    /* "numpy.pxd":286
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)
-- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- */
--    (__pyx_v_f[0]) = '\x00';
--  }
--  __pyx_L11:;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = -1;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
--  }
--  goto __pyx_L2;
--  __pyx_L0:;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
--    __Pyx_GOTREF(Py_None);
--    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
--  }
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
--  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":288
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- */
--
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
--
--  /* "numpy.pxd":289
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_t_1 = PyArray_HASFIELDS(__pyx_v_self);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":290
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)
-- */
--    free(__pyx_v_info->format);
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":291
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.strides)
-- *                 # info.shape was stored after info.strides in the same block
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":292
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
-- *                 # info.shape was stored after info.strides in the same block
-- * 
-- */
--    free(__pyx_v_info->strides);
--    goto __pyx_L4;
--  }
--  __pyx_L4:;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":768
-- * ctypedef npy_cdouble     complex_t
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
--
--  /* "numpy.pxd":769
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":771
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
--
--  /* "numpy.pxd":772
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":774
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
--
--  /* "numpy.pxd":775
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":777
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
--
--  /* "numpy.pxd":778
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":780
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
--
--  /* "numpy.pxd":781
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":783
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
-- *     # Recursive utility function used in __getbuffer__ to get format
-- *     # string. The new location in the format string is returned.
-- */
--
--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) {
--  PyArray_Descr *__pyx_v_child = 0;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  PyObject *__pyx_v_fields = 0;
--  PyObject *__pyx_v_childname = NULL;
--  PyObject *__pyx_v_new_offset = NULL;
--  PyObject *__pyx_v_t = NULL;
--  char *__pyx_r;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  Py_ssize_t __pyx_t_2;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *(*__pyx_t_6)(PyObject *);
--  int __pyx_t_7;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  long __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
--
--  /* "numpy.pxd":790
-- *     cdef int delta_offset
-- *     cdef tuple i
-- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- *     cdef tuple fields
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":791
-- *     cdef tuple i
-- *     cdef int endian_detector = 1
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- *     cdef tuple fields
-- * 
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":794
-- *     cdef tuple fields
-- * 
-- *     for childname in descr.names:             # <<<<<<<<<<<<<<
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields
-- */
--  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
--  for (;;) {
--    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
--    #if CYTHON_COMPILING_IN_CPYTHON
--    __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_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #else
--    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #endif
--    __Pyx_XDECREF(__pyx_v_childname);
--    __pyx_v_childname = __pyx_t_3;
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":795
-- * 
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
-- *         child, new_offset = fields
-- * 
-- */
--    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
--    __pyx_v_fields = ((PyObject*)__pyx_t_3);
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":796
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields             # <<<<<<<<<<<<<<
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- */
--    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
--      PyObject* sequence = ((PyObject *)__pyx_v_fields);
--      #if CYTHON_COMPILING_IN_CPYTHON
--      Py_ssize_t size = Py_SIZE(sequence);
--      #else
--      Py_ssize_t size = PySequence_Size(sequence);
--      #endif
--      if (unlikely(size != 2)) {
--        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
--        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      #if CYTHON_COMPILING_IN_CPYTHON
--      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
--      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
--      __Pyx_INCREF(__pyx_t_3);
--      __Pyx_INCREF(__pyx_t_4);
--      #else
--      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      #endif
--    } else if (1) {
--      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else
--    {
--      Py_ssize_t index = -1;
--      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
--      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_3);
--      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_4);
--      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_t_6 = NULL;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      goto __pyx_L6_unpacking_done;
--      __pyx_L5_unpacking_failed:;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_6 = NULL;
--      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_L6_unpacking_done:;
--    }
--    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
--    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
--    __pyx_t_3 = 0;
--    __Pyx_XDECREF(__pyx_v_new_offset);
--    __pyx_v_new_offset = __pyx_t_4;
--    __pyx_t_4 = 0;
--
--    /* "numpy.pxd":798
-- *         child, new_offset = fields
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- */
--    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L7;
--    }
--    __pyx_L7:;
--
--    /* "numpy.pxd":801
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_7 = (__pyx_v_child->byteorder == '>');
--    if (__pyx_t_7) {
--      __pyx_t_8 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_8 = __pyx_t_7;
--    }
--    if (!__pyx_t_8) {
--
--      /* "numpy.pxd":802
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *             raise ValueError(u"Non-native byte order not supported")
-- *             # One could encode it in the format string and have Cython
-- */
--      __pyx_t_7 = (__pyx_v_child->byteorder == '<');
--      if (__pyx_t_7) {
--        __pyx_t_9 = (!__pyx_v_little_endian);
--        __pyx_t_10 = __pyx_t_9;
--      } else {
--        __pyx_t_10 = __pyx_t_7;
--      }
--      __pyx_t_7 = __pyx_t_10;
--    } else {
--      __pyx_t_7 = __pyx_t_8;
--    }
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L8;
--    }
--    __pyx_L8:;
--
--    /* "numpy.pxd":813
-- * 
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- */
--    while (1) {
--      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (!__pyx_t_7) break;
--
--      /* "numpy.pxd":814
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
-- *             f += 1
-- *             offset[0] += 1
-- */
--      (__pyx_v_f[0]) = 120;
--
--      /* "numpy.pxd":815
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1             # <<<<<<<<<<<<<<
-- *             offset[0] += 1
-- * 
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--
--      /* "numpy.pxd":816
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- *             offset[0] += 1             # <<<<<<<<<<<<<<
-- * 
-- *         offset[0] += child.itemsize
-- */
--      __pyx_t_11 = 0;
--      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
--    }
--
--    /* "numpy.pxd":818
-- *             offset[0] += 1
-- * 
-- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- */
--    __pyx_t_11 = 0;
--    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
--
--    /* "numpy.pxd":820
-- *         offset[0] += child.itemsize
-- * 
-- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
-- *             t = child.type_num
-- *             if end - f < 5:
-- */
--    __pyx_t_7 = (!PyDataType_HASFIELDS(__pyx_v_child));
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":821
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num             # <<<<<<<<<<<<<<
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- */
--      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __Pyx_XDECREF(__pyx_v_t);
--      __pyx_v_t = __pyx_t_3;
--      __pyx_t_3 = 0;
--
--      /* "numpy.pxd":822
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num
-- *             if end - f < 5:             # <<<<<<<<<<<<<<
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- * 
-- */
--      __pyx_t_7 = ((__pyx_v_end - __pyx_v_f) < 5);
--      if (__pyx_t_7) {
--
--        /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--
--      /* "numpy.pxd":826
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 98;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":827
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 66;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":828
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 104;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":829
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 72;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":830
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 105;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":831
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 73;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":832
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 108;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":833
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 76;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":834
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 113;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":835
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 81;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":836
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 102;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":837
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 100;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":838
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 103;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":839
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 102;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":840
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 100;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":841
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 103;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":842
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 79;
--        goto __pyx_L13;
--      }
--      /*else*/ {
--
--        /* "numpy.pxd":844
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *             f += 1
-- *         else:
-- */
--        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_7), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
--        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--        __pyx_t_5 = 0;
--        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_5);
--        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      __pyx_L13:;
--
--      /* "numpy.pxd":845
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *             f += 1             # <<<<<<<<<<<<<<
-- *         else:
-- *             # Cython ignores struct boundary information ("T{...}"),
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--      goto __pyx_L11;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":849
-- *             # Cython ignores struct boundary information ("T{...}"),
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
-- *     return f
-- * 
-- */
--      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_v_f = __pyx_t_12;
--    }
--    __pyx_L11:;
--  }
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "numpy.pxd":850
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)
-- *     return f             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __pyx_r = __pyx_v_f;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_child);
--  __Pyx_XDECREF(__pyx_v_fields);
--  __Pyx_XDECREF(__pyx_v_childname);
--  __Pyx_XDECREF(__pyx_v_new_offset);
--  __Pyx_XDECREF(__pyx_v_t);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":965
-- * 
-- * 
-- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- */
--
--static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
--  PyObject *__pyx_v_baseptr;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("set_array_base", 0);
--
--  /* "numpy.pxd":967
-- * cdef inline void set_array_base(ndarray arr, object base):
-- *      cdef PyObject* baseptr
-- *      if base is None:             # <<<<<<<<<<<<<<
-- *          baseptr = NULL
-- *      else:
-- */
--  __pyx_t_1 = (__pyx_v_base == Py_None);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":968
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- *          baseptr = NULL             # <<<<<<<<<<<<<<
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- */
--    __pyx_v_baseptr = NULL;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":970
-- *          baseptr = NULL
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- */
--    Py_INCREF(__pyx_v_base);
--
--    /* "numpy.pxd":971
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr
-- */
--    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":972
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
-- *      arr.base = baseptr
-- * 
-- */
--  Py_XDECREF(__pyx_v_arr->base);
--
--  /* "numpy.pxd":973
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- */
--  __pyx_v_arr->base = __pyx_v_baseptr;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("get_array_base", 0);
--
--  /* "numpy.pxd":976
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
-- *         return None
-- *     else:
-- */
--  __pyx_t_1 = (__pyx_v_arr->base == NULL);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":977
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:
-- *         return None             # <<<<<<<<<<<<<<
-- *     else:
-- *         return <object>arr.base
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(Py_None);
--    __pyx_r = Py_None;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":979
-- *         return None
-- *     else:
-- *         return <object>arr.base             # <<<<<<<<<<<<<<
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
--    __pyx_r = ((PyObject *)__pyx_v_arr->base);
--    goto __pyx_L0;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--static PyMethodDef __pyx_methods[] = {
--  {0, 0, 0, 0}
--};
--
--#if PY_MAJOR_VERSION >= 3
--static struct PyModuleDef __pyx_moduledef = {
--  #if PY_VERSION_HEX < 0x03020000
--    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
--  #else
--    PyModuleDef_HEAD_INIT,
--  #endif
--    __Pyx_NAMESTR("_np_utils"),
--    __Pyx_DOCSTR(__pyx_k_13), /* m_doc */
--    -1, /* m_size */
--    __pyx_methods /* m_methods */,
--    NULL, /* m_reload */
--    NULL, /* m_traverse */
--    NULL, /* m_clear */
--    NULL /* m_free */
--};
--#endif
--
--static __Pyx_StringTabEntry __pyx_string_tab[] = {
--  {&__pyx_kp_u_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 1, 0, 0},
--  {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0},
--  {&__pyx_n_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 1},
--  {&__pyx_n_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 1},
--  {&__pyx_n_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 1},
--  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
--  {&__pyx_n_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 1},
--  {&__pyx_kp_u_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 1, 0, 0},
--  {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0},
--  {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0},
--  {&__pyx_kp_u_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 1, 0, 0},
--  {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1},
--  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
--  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
--  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
--  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
--  {&__pyx_n_s__bool, __pyx_k__bool, sizeof(__pyx_k__bool), 0, 0, 1, 1},
--  {&__pyx_n_s__drop_fields, __pyx_k__drop_fields, sizeof(__pyx_k__drop_fields), 0, 0, 1, 1},
--  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
--  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
--  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
--  {&__pyx_n_s__i_left, __pyx_k__i_left, sizeof(__pyx_k__i_left), 0, 0, 1, 1},
--  {&__pyx_n_s__i_out, __pyx_k__i_out, sizeof(__pyx_k__i_out), 0, 0, 1, 1},
--  {&__pyx_n_s__i_right, __pyx_k__i_right, sizeof(__pyx_k__i_right), 0, 0, 1, 1},
--  {&__pyx_n_s__idx, __pyx_k__idx, sizeof(__pyx_k__idx), 0, 0, 1, 1},
--  {&__pyx_n_s__idx0, __pyx_k__idx0, sizeof(__pyx_k__idx0), 0, 0, 1, 1},
--  {&__pyx_n_s__idx1, __pyx_k__idx1, sizeof(__pyx_k__idx1), 0, 0, 1, 1},
--  {&__pyx_n_s__idx_sort, __pyx_k__idx_sort, sizeof(__pyx_k__idx_sort), 0, 0, 1, 1},
--  {&__pyx_n_s__idxs, __pyx_k__idxs, sizeof(__pyx_k__idxs), 0, 0, 1, 1},
--  {&__pyx_n_s__ii, __pyx_k__ii, sizeof(__pyx_k__ii), 0, 0, 1, 1},
--  {&__pyx_n_s__int, __pyx_k__int, sizeof(__pyx_k__int), 0, 0, 1, 1},
--  {&__pyx_n_s__join_inner, __pyx_k__join_inner, sizeof(__pyx_k__join_inner), 0, 0, 1, 1},
--  {&__pyx_n_s__jointype, __pyx_k__jointype, sizeof(__pyx_k__jointype), 0, 0, 1, 1},
--  {&__pyx_n_s__key_idxs, __pyx_k__key_idxs, sizeof(__pyx_k__key_idxs), 0, 0, 1, 1},
--  {&__pyx_n_s__left_idxs, __pyx_k__left_idxs, sizeof(__pyx_k__left_idxs), 0, 0, 1, 1},
--  {&__pyx_n_s__left_mask, __pyx_k__left_mask, sizeof(__pyx_k__left_mask), 0, 0, 1, 1},
--  {&__pyx_n_s__left_out, __pyx_k__left_out, sizeof(__pyx_k__left_out), 0, 0, 1, 1},
--  {&__pyx_n_s__len_left, __pyx_k__len_left, sizeof(__pyx_k__len_left), 0, 0, 1, 1},
--  {&__pyx_n_s__ma, __pyx_k__ma, sizeof(__pyx_k__ma), 0, 0, 1, 1},
--  {&__pyx_n_s__masked, __pyx_k__masked, sizeof(__pyx_k__masked), 0, 0, 1, 1},
--  {&__pyx_n_s__max_key_idxs, __pyx_k__max_key_idxs, sizeof(__pyx_k__max_key_idxs), 0, 0, 1, 1},
--  {&__pyx_n_s__n_left, __pyx_k__n_left, sizeof(__pyx_k__n_left), 0, 0, 1, 1},
--  {&__pyx_n_s__n_out, __pyx_k__n_out, sizeof(__pyx_k__n_out), 0, 0, 1, 1},
--  {&__pyx_n_s__n_right, __pyx_k__n_right, sizeof(__pyx_k__n_right), 0, 0, 1, 1},
--  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
--  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
--  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
--  {&__pyx_n_s__right_idxs, __pyx_k__right_idxs, sizeof(__pyx_k__right_idxs), 0, 0, 1, 1},
--  {&__pyx_n_s__right_mask, __pyx_k__right_mask, sizeof(__pyx_k__right_mask), 0, 0, 1, 1},
--  {&__pyx_n_s__right_out, __pyx_k__right_out, sizeof(__pyx_k__right_out), 0, 0, 1, 1},
--  {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1},
--  {0, 0, 0, 0, 0, 0, 0}
--};
--static int __Pyx_InitCachedBuiltins(void) {
--  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--static int __Pyx_InitCachedConstants(void) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
--
--  /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_2);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
--
--  /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_3)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_4);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
--
--  /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_6);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
--
--  /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--  __pyx_k_tuple_9 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_8)); if (unlikely(!__pyx_k_tuple_9)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_9);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_9));
--
--  /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_10);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
--
--  /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--  __pyx_k_tuple_12 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_11)); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_12);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12));
--
--  /* "astropy/table/_np_utils.pyx":19
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,             # <<<<<<<<<<<<<<
-- *                np.ndarray[DTYPE_t, ndim=1] idx_sort,
-- *                int len_left,
-- */
--  __pyx_k_tuple_17 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__idxs), ((PyObject *)__pyx_n_s__idx_sort), ((PyObject *)__pyx_n_s__len_left), ((PyObject *)__pyx_n_s__jointype), ((PyObject *)__pyx_n_s__n_out), ((PyObject *)__pyx_n_s__max_key_idxs), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__key_idxs), ((PyObject *)__pyx_n_s__n_left), ((PyObject *)__pyx_n_s__n_right), ((PyObject *)__pyx_n_s__idx0), ((PyObject *)__pyx_n_s__idx1), ((PyObject *)__pyx_n_s__idx), ((PyObject *)__pyx_n_s_ [...]
--  __Pyx_GOTREF(__pyx_k_tuple_17);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
--  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(4, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_19, __pyx_n_s__join_inner, 19, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_RefNannyFinishContext();
--  return 0;
--  __pyx_L1_error:;
--  __Pyx_RefNannyFinishContext();
--  return -1;
--}
--
--static int __Pyx_InitGlobals(void) {
--  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--#if PY_MAJOR_VERSION < 3
--PyMODINIT_FUNC init_np_utils(void); /*proto*/
--PyMODINIT_FUNC init_np_utils(void)
--#else
--PyMODINIT_FUNC PyInit__np_utils(void); /*proto*/
--PyMODINIT_FUNC PyInit__np_utils(void)
--#endif
--{
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  __Pyx_RefNannyDeclarations
--  #if CYTHON_REFNANNY
--  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
--  if (!__Pyx_RefNanny) {
--      PyErr_Clear();
--      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
--      if (!__Pyx_RefNanny)
--          Py_FatalError("failed to import 'refnanny' module");
--  }
--  #endif
--  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__np_utils(void)", 0);
--  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #ifdef __Pyx_CyFunction_USED
--  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_FusedFunction_USED
--  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_Generator_USED
--  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  /*--- Library function declarations ---*/
--  /*--- Threads initialization code ---*/
--  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
--  #ifdef WITH_THREAD /* Python build with threading support? */
--  PyEval_InitThreads();
--  #endif
--  #endif
--  /*--- Module creation code ---*/
--  #if PY_MAJOR_VERSION < 3
--  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_np_utils"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_13), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
--  #else
--  __pyx_m = PyModule_Create(&__pyx_moduledef);
--  #endif
--  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if PY_MAJOR_VERSION >= 3
--  {
--    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    if (!PyDict_GetItemString(modules, "astropy.table._np_utils")) {
--      if (unlikely(PyDict_SetItemString(modules, "astropy.table._np_utils", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--  }
--  #endif
--  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if CYTHON_COMPILING_IN_PYPY
--  Py_INCREF(__pyx_b);
--  #endif
--  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  /*--- Initialize various global constants etc. ---*/
--  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_module_is_main_astropy__table___np_utils) {
--    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  }
--  /*--- Builtin init code ---*/
--  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Constants init code ---*/
--  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Global init code ---*/
--  /*--- Variable export code ---*/
--  /*--- Function export code ---*/
--  /*--- Type init code ---*/
--  /*--- Type import code ---*/
--  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
--  #if CYTHON_COMPILING_IN_PYPY
--  sizeof(PyTypeObject),
--  #else
--  sizeof(PyHeapTypeObject),
--  #endif
--  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Variable import code ---*/
--  /*--- Function import code ---*/
--  /*--- Execution code ---*/
--
--  /* "astropy/table/_np_utils.pyx":8
-- * """
-- * 
-- * import numpy as np             # <<<<<<<<<<<<<<
-- * import numpy.ma as ma
-- * from numpy.lib.recfunctions import drop_fields
-- */
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/table/_np_utils.pyx":9
-- * 
-- * import numpy as np
-- * import numpy.ma as ma             # <<<<<<<<<<<<<<
-- * from numpy.lib.recfunctions import drop_fields
-- * 
-- */
--  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_INCREF(((PyObject *)__pyx_n_s_15));
--  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_15));
--  __Pyx_GIVEREF(((PyObject *)__pyx_n_s_15));
--  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_14), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ma, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/table/_np_utils.pyx":10
-- * import numpy as np
-- * import numpy.ma as ma
-- * from numpy.lib.recfunctions import drop_fields             # <<<<<<<<<<<<<<
-- * 
-- * cimport cython
-- */
--  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_INCREF(((PyObject *)__pyx_n_s__drop_fields));
--  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__drop_fields));
--  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__drop_fields));
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s_16), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__drop_fields);
--  if (__pyx_t_2 == NULL) {
--    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__drop_fields);
--    if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__drop_fields, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/table/_np_utils.pyx":14
-- * cimport cython
-- * cimport numpy as np
-- * DTYPE = np.int             # <<<<<<<<<<<<<<
-- * ctypedef np.int_t DTYPE_t
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/table/_np_utils.pyx":19
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,             # <<<<<<<<<<<<<<
-- *                np.ndarray[DTYPE_t, ndim=1] idx_sort,
-- *                int len_left,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_5table_9_np_utils_1join_inner, NULL, __pyx_n_s_20); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__join_inner, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/table/_np_utils.pyx":1
-- * """             # <<<<<<<<<<<<<<
-- * Cython utilities for numpy structured arrays.
-- * 
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--
--  /* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  if (__pyx_m) {
--    __Pyx_AddTraceback("init astropy.table._np_utils", __pyx_clineno, __pyx_lineno, __pyx_filename);
--    Py_DECREF(__pyx_m); __pyx_m = 0;
--  } else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_ImportError, "init astropy.table._np_utils");
--  }
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  #if PY_MAJOR_VERSION < 3
--  return;
--  #else
--  return __pyx_m;
--  #endif
--}
--
--/* Runtime support code */
--#if CYTHON_REFNANNY
--static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
--    PyObject *m = NULL, *p = NULL;
--    void *r = NULL;
--    m = PyImport_ImportModule((char *)modname);
--    if (!m) goto end;
--    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
--    if (!p) goto end;
--    r = PyLong_AsVoidPtr(p);
--end:
--    Py_XDECREF(p);
--    Py_XDECREF(m);
--    return (__Pyx_RefNannyAPIStruct *)r;
--}
--#endif /* CYTHON_REFNANNY */
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
--    PyObject *result;
--    result = PyObject_GetAttr(dict, name);
--    if (!result) {
--        if (dict != __pyx_b) {
--            PyErr_Clear();
--            result = PyObject_GetAttr(__pyx_b, name);
--        }
--        if (!result) {
--            PyErr_SetObject(PyExc_NameError, name);
--        }
--    }
--    return result;
--}
--
--static void __Pyx_RaiseArgtupleInvalid(
--    const char* func_name,
--    int exact,
--    Py_ssize_t num_min,
--    Py_ssize_t num_max,
--    Py_ssize_t num_found)
--{
--    Py_ssize_t num_expected;
--    const char *more_or_less;
--    if (num_found < num_min) {
--        num_expected = num_min;
--        more_or_less = "at least";
--    } else {
--        num_expected = num_max;
--        more_or_less = "at most";
--    }
--    if (exact) {
--        more_or_less = "exactly";
--    }
--    PyErr_Format(PyExc_TypeError,
--                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
--                 func_name, more_or_less, num_expected,
--                 (num_expected == 1) ? "" : "s", num_found);
--}
--
--static void __Pyx_RaiseDoubleKeywordsError(
--    const char* func_name,
--    PyObject* kw_name)
--{
--    PyErr_Format(PyExc_TypeError,
--        #if PY_MAJOR_VERSION >= 3
--        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
--        #else
--        "%s() got multiple values for keyword argument '%s'", func_name,
--        PyString_AsString(kw_name));
--        #endif
--}
--
--static int __Pyx_ParseOptionalKeywords(
--    PyObject *kwds,
--    PyObject **argnames[],
--    PyObject *kwds2,
--    PyObject *values[],
--    Py_ssize_t num_pos_args,
--    const char* function_name)
--{
--    PyObject *key = 0, *value = 0;
--    Py_ssize_t pos = 0;
--    PyObject*** name;
--    PyObject*** first_kw_arg = argnames + num_pos_args;
--    while (PyDict_Next(kwds, &pos, &key, &value)) {
--        name = first_kw_arg;
--        while (*name && (**name != key)) name++;
--        if (*name) {
--            values[name-argnames] = value;
--            continue;
--        }
--        name = first_kw_arg;
--        #if PY_MAJOR_VERSION < 3
--        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
--            while (*name) {
--                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
--                        && _PyString_Eq(**name, key)) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    if ((**argname == key) || (
--                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
--                             && _PyString_Eq(**argname, key))) {
--                        goto arg_passed_twice;
--                    }
--                    argname++;
--                }
--            }
--        } else
--        #endif
--        if (likely(PyUnicode_Check(key))) {
--            while (*name) {
--                int cmp = (**name == key) ? 0 :
--                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
--                #endif
--                    PyUnicode_Compare(**name, key);
--                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                if (cmp == 0) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    int cmp = (**argname == key) ? 0 :
--                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
--                    #endif
--                        PyUnicode_Compare(**argname, key);
--                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                    if (cmp == 0) goto arg_passed_twice;
--                    argname++;
--                }
--            }
--        } else
--            goto invalid_keyword_type;
--        if (kwds2) {
--            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
--        } else {
--            goto invalid_keyword;
--        }
--    }
--    return 0;
--arg_passed_twice:
--    __Pyx_RaiseDoubleKeywordsError(function_name, key);
--    goto bad;
--invalid_keyword_type:
--    PyErr_Format(PyExc_TypeError,
--        "%s() keywords must be strings", function_name);
--    goto bad;
--invalid_keyword:
--    PyErr_Format(PyExc_TypeError,
--    #if PY_MAJOR_VERSION < 3
--        "%s() got an unexpected keyword argument '%s'",
--        function_name, PyString_AsString(key));
--    #else
--        "%s() got an unexpected keyword argument '%U'",
--        function_name, key);
--    #endif
--bad:
--    return -1;
--}
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact)
--{
--    if (!type) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (none_allowed && obj == Py_None) return 1;
--    else if (exact) {
--        if (Py_TYPE(obj) == type) return 1;
--    }
--    else {
--        if (PyObject_TypeCheck(obj, type)) return 1;
--    }
--    PyErr_Format(PyExc_TypeError,
--        "Argument '%s' has incorrect type (expected %s, got %s)",
--        name, type->tp_name, Py_TYPE(obj)->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_IsLittleEndian(void) {
--  unsigned int n = 1;
--  return *(unsigned char*)(&n) != 0;
--}
--static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
--                              __Pyx_BufFmt_StackElem* stack,
--                              __Pyx_TypeInfo* type) {
--  stack[0].field = &ctx->root;
--  stack[0].parent_offset = 0;
--  ctx->root.type = type;
--  ctx->root.name = "buffer dtype";
--  ctx->root.offset = 0;
--  ctx->head = stack;
--  ctx->head->field = &ctx->root;
--  ctx->fmt_offset = 0;
--  ctx->head->parent_offset = 0;
--  ctx->new_packmode = '@';
--  ctx->enc_packmode = '@';
--  ctx->new_count = 1;
--  ctx->enc_count = 0;
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  ctx->is_valid_array = 0;
--  ctx->struct_alignment = 0;
--  while (type->typegroup == 'S') {
--    ++ctx->head;
--    ctx->head->field = type->fields;
--    ctx->head->parent_offset = 0;
--    type = type->fields->type;
--  }
--}
--static int __Pyx_BufFmt_ParseNumber(const char** ts) {
--    int count;
--    const char* t = *ts;
--    if (*t < '0' || *t > '9') {
--      return -1;
--    } else {
--        count = *t++ - '0';
--        while (*t >= '0' && *t < '9') {
--            count *= 10;
--            count += *t++ - '0';
--        }
--    }
--    *ts = t;
--    return count;
--}
--static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
--    int number = __Pyx_BufFmt_ParseNumber(ts);
--    if (number == -1) /* First char was not a digit */
--        PyErr_Format(PyExc_ValueError,\
--                     "Does not understand character buffer dtype format string ('%c')", **ts);
--    return number;
--}
--static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
--  PyErr_Format(PyExc_ValueError,
--               "Unexpected format string character: '%c'", ch);
--}
--static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': return "'char'";
--    case 'b': return "'signed char'";
--    case 'B': return "'unsigned char'";
--    case 'h': return "'short'";
--    case 'H': return "'unsigned short'";
--    case 'i': return "'int'";
--    case 'I': return "'unsigned int'";
--    case 'l': return "'long'";
--    case 'L': return "'unsigned long'";
--    case 'q': return "'long long'";
--    case 'Q': return "'unsigned long long'";
--    case 'f': return (is_complex ? "'complex float'" : "'float'");
--    case 'd': return (is_complex ? "'complex double'" : "'double'");
--    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
--    case 'T': return "a struct";
--    case 'O': return "Python object";
--    case 'P': return "a pointer";
--    case 's': case 'p': return "a string";
--    case 0: return "end";
--    default: return "unparseable format string";
--  }
--}
--static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return 2;
--    case 'i': case 'I': case 'l': case 'L': return 4;
--    case 'q': case 'Q': return 8;
--    case 'f': return (is_complex ? 8 : 4);
--    case 'd': return (is_complex ? 16 : 8);
--    case 'g': {
--      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
--      return 0;
--    }
--    case 'O': case 'P': return sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(short);
--    case 'i': case 'I': return sizeof(int);
--    case 'l': case 'L': return sizeof(long);
--    #ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
--    #endif
--    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
--    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
--    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
--    case 'O': case 'P': return sizeof(void*);
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--typedef struct { char c; short x; } __Pyx_st_short;
--typedef struct { char c; int x; } __Pyx_st_int;
--typedef struct { char c; long x; } __Pyx_st_long;
--typedef struct { char c; float x; } __Pyx_st_float;
--typedef struct { char c; double x; } __Pyx_st_double;
--typedef struct { char c; long double x; } __Pyx_st_longdouble;
--typedef struct { char c; void *x; } __Pyx_st_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--/* These are for computing the padding at the end of the struct to align
--   on the first member of the struct. This will probably the same as above,
--   but we don't have any guarantees.
-- */
--typedef struct { short x; char c; } __Pyx_pad_short;
--typedef struct { int x; char c; } __Pyx_pad_int;
--typedef struct { long x; char c; } __Pyx_pad_long;
--typedef struct { float x; char c; } __Pyx_pad_float;
--typedef struct { double x; char c; } __Pyx_pad_double;
--typedef struct { long double x; char c; } __Pyx_pad_longdouble;
--typedef struct { void *x; char c; } __Pyx_pad_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
--  switch (ch) {
--    case 'c':
--        return 'H';
--    case 'b': case 'h': case 'i':
--    case 'l': case 'q': case 's': case 'p':
--        return 'I';
--    case 'B': case 'H': case 'I': case 'L': case 'Q':
--        return 'U';
--    case 'f': case 'd': case 'g':
--        return (is_complex ? 'C' : 'R');
--    case 'O':
--        return 'O';
--    case 'P':
--        return 'P';
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
--  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
--    const char* expected;
--    const char* quote;
--    if (ctx->head == NULL) {
--      expected = "end";
--      quote = "";
--    } else {
--      expected = ctx->head->field->type->name;
--      quote = "'";
--    }
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected %s%s%s but got %s",
--                 quote, expected, quote,
--                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
--  } else {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_StructField* parent = (ctx->head - 1)->field;
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
--                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
--                 parent->type->name, field->name);
--  }
--}
--static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
--  char group;
--  size_t size, offset, arraysize = 1;
--  if (ctx->enc_type == 0) return 0;
--  if (ctx->head->field->type->arraysize[0]) {
--    int i, ndim = 0;
--    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
--        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
--        ndim = 1;
--        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
--            PyErr_Format(PyExc_ValueError,
--                         "Expected a dimension of size %zu, got %zu",
--                         ctx->head->field->type->arraysize[0], ctx->enc_count);
--            return -1;
--        }
--    }
--    if (!ctx->is_valid_array) {
--      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
--                   ctx->head->field->type->ndim, ndim);
--      return -1;
--    }
--    for (i = 0; i < ctx->head->field->type->ndim; i++) {
--      arraysize *= ctx->head->field->type->arraysize[i];
--    }
--    ctx->is_valid_array = 0;
--    ctx->enc_count = 1;
--  }
--  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
--  do {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_TypeInfo* type = field->type;
--    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
--      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
--    } else {
--      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
--    }
--    if (ctx->enc_packmode == '@') {
--      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
--      size_t align_mod_offset;
--      if (align_at == 0) return -1;
--      align_mod_offset = ctx->fmt_offset % align_at;
--      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
--      if (ctx->struct_alignment == 0)
--          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
--                                                                 ctx->is_complex);
--    }
--    if (type->size != size || type->typegroup != group) {
--      if (type->typegroup == 'C' && type->fields != NULL) {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        ++ctx->head;
--        ctx->head->field = type->fields;
--        ctx->head->parent_offset = parent_offset;
--        continue;
--      }
--      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
--      } else {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--      }
--    }
--    offset = ctx->head->parent_offset + field->offset;
--    if (ctx->fmt_offset != offset) {
--      PyErr_Format(PyExc_ValueError,
--                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
--                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
--      return -1;
--    }
--    ctx->fmt_offset += size;
--    if (arraysize)
--      ctx->fmt_offset += (arraysize - 1) * size;
--    --ctx->enc_count; /* Consume from buffer string */
--    while (1) {
--      if (field == &ctx->root) {
--        ctx->head = NULL;
--        if (ctx->enc_count != 0) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--        }
--        break; /* breaks both loops as ctx->enc_count == 0 */
--      }
--      ctx->head->field = ++field;
--      if (field->type == NULL) {
--        --ctx->head;
--        field = ctx->head->field;
--        continue;
--      } else if (field->type->typegroup == 'S') {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        if (field->type->fields->type == NULL) continue; /* empty struct */
--        field = field->type->fields;
--        ++ctx->head;
--        ctx->head->field = field;
--        ctx->head->parent_offset = parent_offset;
--        break;
--      } else {
--        break;
--      }
--    }
--  } while (ctx->enc_count);
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  return 0;
--}
--static CYTHON_INLINE PyObject *
--__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
--{
--    const char *ts = *tsp;
--    int i = 0, number;
--    int ndim = ctx->head->field->type->ndim;
--;
--    ++ts;
--    if (ctx->new_count != 1) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Cannot handle repeated arrays in format string");
--        return NULL;
--    }
--    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--    while (*ts && *ts != ')') {
--        if (isspace(*ts))
--            continue;
--        number = __Pyx_BufFmt_ExpectNumber(&ts);
--        if (number == -1) return NULL;
--        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
--            return PyErr_Format(PyExc_ValueError,
--                        "Expected a dimension of size %zu, got %d",
--                        ctx->head->field->type->arraysize[i], number);
--        if (*ts != ',' && *ts != ')')
--            return PyErr_Format(PyExc_ValueError,
--                                "Expected a comma in format string, got '%c'", *ts);
--        if (*ts == ',') ts++;
--        i++;
--    }
--    if (i != ndim)
--        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
--                            ctx->head->field->type->ndim, i);
--    if (!*ts) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Unexpected end of format string, expected ')'");
--        return NULL;
--    }
--    ctx->is_valid_array = 1;
--    ctx->new_count = 1;
--    *tsp = ++ts;
--    return Py_None;
--}
--static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
--  int got_Z = 0;
--  while (1) {
--    switch(*ts) {
--      case 0:
--        if (ctx->enc_type != 0 && ctx->head == NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        if (ctx->head != NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--                return ts;
--      case ' ':
--      case 10:
--      case 13:
--        ++ts;
--        break;
--      case '<':
--        if (!__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '>':
--      case '!':
--        if (__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '=':
--      case '@':
--      case '^':
--        ctx->new_packmode = *ts++;
--        break;
--      case 'T': /* substruct */
--        {
--          const char* ts_after_sub;
--          size_t i, struct_count = ctx->new_count;
--          size_t struct_alignment = ctx->struct_alignment;
--          ctx->new_count = 1;
--          ++ts;
--          if (*ts != '{') {
--            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
--            return NULL;
--          }
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          ctx->enc_count = 0;
--          ctx->struct_alignment = 0;
--          ++ts;
--          ts_after_sub = ts;
--          for (i = 0; i != struct_count; ++i) {
--            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
--            if (!ts_after_sub) return NULL;
--          }
--          ts = ts_after_sub;
--          if (struct_alignment) ctx->struct_alignment = struct_alignment;
--        }
--        break;
--      case '}': /* end of substruct; either repeat or move on */
--        {
--          size_t alignment = ctx->struct_alignment;
--          ++ts;
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          if (alignment && ctx->fmt_offset % alignment) {
--            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
--          }
--        }
--        return ts;
--      case 'x':
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        ctx->fmt_offset += ctx->new_count;
--        ctx->new_count = 1;
--        ctx->enc_count = 0;
--        ctx->enc_type = 0;
--        ctx->enc_packmode = ctx->new_packmode;
--        ++ts;
--        break;
--      case 'Z':
--        got_Z = 1;
--        ++ts;
--        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
--          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
--          return NULL;
--        }        /* fall through */
--      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
--      case 'l': case 'L': case 'q': case 'Q':
--      case 'f': case 'd': case 'g':
--      case 'O': case 's': case 'p':
--        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
--            ctx->enc_packmode == ctx->new_packmode) {
--          ctx->enc_count += ctx->new_count;
--        } else {
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_count = ctx->new_count;
--          ctx->enc_packmode = ctx->new_packmode;
--          ctx->enc_type = *ts;
--          ctx->is_complex = got_Z;
--        }
--        ++ts;
--        ctx->new_count = 1;
--        got_Z = 0;
--        break;
--      case ':':
--        ++ts;
--        while(*ts != ':') ++ts;
--        ++ts;
--        break;
--      case '(':
--        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
--        break;
--      default:
--        {
--          int number = __Pyx_BufFmt_ExpectNumber(&ts);
--          if (number == -1) return NULL;
--          ctx->new_count = (size_t)number;
--        }
--    }
--  }
--}
--static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
--  buf->buf = NULL;
--  buf->obj = NULL;
--  buf->strides = __Pyx_zeros;
--  buf->shape = __Pyx_zeros;
--  buf->suboffsets = __Pyx_minusones;
--}
--static CYTHON_INLINE int __Pyx_GetBufferAndValidate(
--        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
--        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
--{
--  if (obj == Py_None || obj == NULL) {
--    __Pyx_ZeroBuffer(buf);
--    return 0;
--  }
--  buf->buf = NULL;
--  if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail;
--  if (buf->ndim != nd) {
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer has wrong number of dimensions (expected %d, got %d)",
--                 nd, buf->ndim);
--    goto fail;
--  }
--  if (!cast) {
--    __Pyx_BufFmt_Context ctx;
--    __Pyx_BufFmt_Init(&ctx, stack, dtype);
--    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
--  }
--  if ((unsigned)buf->itemsize != dtype->size) {
--    PyErr_Format(PyExc_ValueError,
--      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
--      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
--      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
--    goto fail;
--  }
--  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
--  return 0;
--fail:;
--  __Pyx_ZeroBuffer(buf);
--  return -1;
--}
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
--  if (info->buf == NULL) return;
--  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
--  __Pyx_ReleaseBuffer(info);
--}
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
--    if (unlikely(!type)) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (likely(PyObject_TypeCheck(obj, type)))
--        return 1;
--    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
--                 Py_TYPE(obj)->tp_name, type->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyObject *tmp_type, *tmp_value, *tmp_tb;
--    PyThreadState *tstate = PyThreadState_GET();
--    tmp_type = tstate->curexc_type;
--    tmp_value = tstate->curexc_value;
--    tmp_tb = tstate->curexc_traceback;
--    tstate->curexc_type = type;
--    tstate->curexc_value = value;
--    tstate->curexc_traceback = tb;
--    Py_XDECREF(tmp_type);
--    Py_XDECREF(tmp_value);
--    Py_XDECREF(tmp_tb);
--#else
--    PyErr_Restore(type, value, tb);
--#endif
--}
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    *type = tstate->curexc_type;
--    *value = tstate->curexc_value;
--    *tb = tstate->curexc_traceback;
--    tstate->curexc_type = 0;
--    tstate->curexc_value = 0;
--    tstate->curexc_traceback = 0;
--#else
--    PyErr_Fetch(type, value, tb);
--#endif
--}
--
--#if PY_MAJOR_VERSION < 3
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
--                        CYTHON_UNUSED PyObject *cause) {
--    Py_XINCREF(type);
--    if (!value || value == Py_None)
--        value = NULL;
--    else
--        Py_INCREF(value);
--    if (!tb || tb == Py_None)
--        tb = NULL;
--    else {
--        Py_INCREF(tb);
--        if (!PyTraceBack_Check(tb)) {
--            PyErr_SetString(PyExc_TypeError,
--                "raise: arg 3 must be a traceback or None");
--            goto raise_error;
--        }
--    }
--    #if PY_VERSION_HEX < 0x02050000
--    if (PyClass_Check(type)) {
--    #else
--    if (PyType_Check(type)) {
--    #endif
--#if CYTHON_COMPILING_IN_PYPY
--        if (!value) {
--            Py_INCREF(Py_None);
--            value = Py_None;
--        }
--#endif
--        PyErr_NormalizeException(&type, &value, &tb);
--    } else {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto raise_error;
--        }
--        value = type;
--        #if PY_VERSION_HEX < 0x02050000
--            if (PyInstance_Check(type)) {
--                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
--                Py_INCREF(type);
--            }
--            else {
--                type = 0;
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception must be an old-style class or instance");
--                goto raise_error;
--            }
--        #else
--            type = (PyObject*) Py_TYPE(type);
--            Py_INCREF(type);
--            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception class must be a subclass of BaseException");
--                goto raise_error;
--            }
--        #endif
--    }
--    __Pyx_ErrRestore(type, value, tb);
--    return;
--raise_error:
--    Py_XDECREF(value);
--    Py_XDECREF(type);
--    Py_XDECREF(tb);
--    return;
--}
--#else /* Python 3+ */
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
--    PyObject* owned_instance = NULL;
--    if (tb == Py_None) {
--        tb = 0;
--    } else if (tb && !PyTraceBack_Check(tb)) {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: arg 3 must be a traceback or None");
--        goto bad;
--    }
--    if (value == Py_None)
--        value = 0;
--    if (PyExceptionInstance_Check(type)) {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto bad;
--        }
--        value = type;
--        type = (PyObject*) Py_TYPE(value);
--    } else if (PyExceptionClass_Check(type)) {
--        PyObject *args;
--        if (!value)
--            args = PyTuple_New(0);
--        else if (PyTuple_Check(value)) {
--            Py_INCREF(value);
--            args = value;
--        }
--        else
--            args = PyTuple_Pack(1, value);
--        if (!args)
--            goto bad;
--        owned_instance = PyEval_CallObject(type, args);
--        Py_DECREF(args);
--        if (!owned_instance)
--            goto bad;
--        value = owned_instance;
--        if (!PyExceptionInstance_Check(value)) {
--            PyErr_Format(PyExc_TypeError,
--                         "calling %R should have returned an instance of "
--                         "BaseException, not %R",
--                         type, Py_TYPE(value));
--            goto bad;
--        }
--    } else {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: exception class must be a subclass of BaseException");
--        goto bad;
--    }
--    if (cause && cause != Py_None) {
--        PyObject *fixed_cause;
--        if (PyExceptionClass_Check(cause)) {
--            fixed_cause = PyObject_CallObject(cause, NULL);
--            if (fixed_cause == NULL)
--                goto bad;
--        }
--        else if (PyExceptionInstance_Check(cause)) {
--            fixed_cause = cause;
--            Py_INCREF(fixed_cause);
--        }
--        else {
--            PyErr_SetString(PyExc_TypeError,
--                            "exception causes must derive from "
--                            "BaseException");
--            goto bad;
--        }
--        PyException_SetCause(value, fixed_cause);
--    }
--    PyErr_SetObject(type, value);
--    if (tb) {
--        PyThreadState *tstate = PyThreadState_GET();
--        PyObject* tmp_tb = tstate->curexc_traceback;
--        if (tb != tmp_tb) {
--            Py_INCREF(tb);
--            tstate->curexc_traceback = tb;
--            Py_XDECREF(tmp_tb);
--        }
--    }
--bad:
--    Py_XDECREF(owned_instance);
--    return;
--}
--#endif
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
--    PyErr_Format(PyExc_ValueError,
--                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
--    PyErr_Format(PyExc_ValueError,
--                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
--                 index, (index == 1) ? "" : "s");
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--}
--
--static CYTHON_INLINE int __Pyx_IterFinish(void) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    PyObject* exc_type = tstate->curexc_type;
--    if (unlikely(exc_type)) {
--        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
--            PyObject *exc_value, *exc_tb;
--            exc_value = tstate->curexc_value;
--            exc_tb = tstate->curexc_traceback;
--            tstate->curexc_type = 0;
--            tstate->curexc_value = 0;
--            tstate->curexc_traceback = 0;
--            Py_DECREF(exc_type);
--            Py_XDECREF(exc_value);
--            Py_XDECREF(exc_tb);
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#else
--    if (unlikely(PyErr_Occurred())) {
--        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
--            PyErr_Clear();
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#endif
--}
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
--    if (unlikely(retval)) {
--        Py_DECREF(retval);
--        __Pyx_RaiseTooManyValuesError(expected);
--        return -1;
--    } else {
--        return __Pyx_IterFinish();
--    }
--    return 0;
--}
--
--#if PY_MAJOR_VERSION < 3
--static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
--    CYTHON_UNUSED PyObject *getbuffer_cobj;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (getbuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                             "__pyx_getbuffer"))) {
--        getbufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (getbufferproc) PyCapsule_GetPointer(getbuffer_cobj, "getbuffer(obj, view, flags)");
--      #else
--        func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj);
--      #endif
--        Py_DECREF(getbuffer_cobj);
--        if (!func)
--            goto fail;
--        return func(obj, view, flags);
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    return -1;
--}
--static void __Pyx_ReleaseBuffer(Py_buffer *view) {
--    PyObject *obj = view->obj;
--    CYTHON_UNUSED PyObject *releasebuffer_cobj;
--    if (!obj) return;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) {
--        PyBuffer_Release(view);
--        return;
--    }
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; }
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (releasebuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                                      "__pyx_releasebuffer"))) {
--        releasebufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (releasebufferproc) PyCapsule_GetPointer(releasebuffer_cobj, "releasebuffer(obj, view)");
--      #else
--        func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj);
--      #endif
--        Py_DECREF(releasebuffer_cobj);
--        if (!func)
--            goto fail;
--        func(obj, view);
--        return;
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    goto nofail;
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    PyErr_WriteUnraisable(obj);
--nofail:
--    Py_DECREF(obj);
--    view->obj = NULL;
--}
--#endif /*  PY_MAJOR_VERSION < 3 */
--
--
--    static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
--    PyObject *empty_list = 0;
--    PyObject *module = 0;
--    PyObject *global_dict = 0;
--    PyObject *empty_dict = 0;
--    PyObject *list;
--    #if PY_VERSION_HEX < 0x03030000
--    PyObject *py_import = 0;
--    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
--    if (!py_import)
--        goto bad;
--    #endif
--    if (from_list)
--        list = from_list;
--    else {
--        empty_list = PyList_New(0);
--        if (!empty_list)
--            goto bad;
--        list = empty_list;
--    }
--    global_dict = PyModule_GetDict(__pyx_m);
--    if (!global_dict)
--        goto bad;
--    empty_dict = PyDict_New();
--    if (!empty_dict)
--        goto bad;
--    #if PY_VERSION_HEX >= 0x02050000
--    {
--        #if PY_MAJOR_VERSION >= 3
--        if (level == -1) {
--            if (strchr(__Pyx_MODULE_NAME, '.')) {
--                #if PY_VERSION_HEX < 0x03030000
--                PyObject *py_level = PyInt_FromLong(1);
--                if (!py_level)
--                    goto bad;
--                module = PyObject_CallFunctionObjArgs(py_import,
--                    name, global_dict, empty_dict, list, py_level, NULL);
--                Py_DECREF(py_level);
--                #else
--                module = PyImport_ImportModuleLevelObject(
--                    name, global_dict, empty_dict, list, 1);
--                #endif
--                if (!module) {
--                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
--                        goto bad;
--                    PyErr_Clear();
--                }
--            }
--            level = 0; /* try absolute import on failure */
--        }
--        #endif
--        if (!module) {
--            #if PY_VERSION_HEX < 0x03030000
--            PyObject *py_level = PyInt_FromLong(level);
--            if (!py_level)
--                goto bad;
--            module = PyObject_CallFunctionObjArgs(py_import,
--                name, global_dict, empty_dict, list, py_level, NULL);
--            Py_DECREF(py_level);
--            #else
--            module = PyImport_ImportModuleLevelObject(
--                name, global_dict, empty_dict, list, level);
--            #endif
--        }
--    }
--    #else
--    if (level>0) {
--        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
--        goto bad;
--    }
--    module = PyObject_CallFunctionObjArgs(py_import,
--        name, global_dict, empty_dict, list, NULL);
--    #endif
--bad:
--    #if PY_VERSION_HEX < 0x03030000
--    Py_XDECREF(py_import);
--    #endif
--    Py_XDECREF(empty_list);
--    Py_XDECREF(empty_dict);
--    return module;
--}
--
--static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name) {
--#if PY_MAJOR_VERSION < 3
--    PyErr_Format(PyExc_ImportError, "cannot import name %.230s",
--                 PyString_AsString(name));
--#else
--    PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
--#endif
--}
--
--static CYTHON_INLINE npy_long __Pyx_PyInt_from_py_npy_long(PyObject* x) {
--    const npy_long neg_one = (npy_long)-1, const_zero = (npy_long)0;
--    const int is_unsigned = const_zero < neg_one;
--    if (sizeof(npy_long) == sizeof(char)) {
--        if (is_unsigned)
--            return (npy_long)__Pyx_PyInt_AsUnsignedChar(x);
--        else
--            return (npy_long)__Pyx_PyInt_AsSignedChar(x);
--    } else if (sizeof(npy_long) == sizeof(short)) {
--        if (is_unsigned)
--            return (npy_long)__Pyx_PyInt_AsUnsignedShort(x);
--        else
--            return (npy_long)__Pyx_PyInt_AsSignedShort(x);
--    } else if (sizeof(npy_long) == sizeof(int)) {
--        if (is_unsigned)
--            return (npy_long)__Pyx_PyInt_AsUnsignedInt(x);
--        else
--            return (npy_long)__Pyx_PyInt_AsSignedInt(x);
--    } else if (sizeof(npy_long) == sizeof(long)) {
--        if (is_unsigned)
--            return (npy_long)__Pyx_PyInt_AsUnsignedLong(x);
--        else
--            return (npy_long)__Pyx_PyInt_AsSignedLong(x);
--    } else if (sizeof(npy_long) == sizeof(PY_LONG_LONG)) {
--        if (is_unsigned)
--            return (npy_long)__Pyx_PyInt_AsUnsignedLongLong(x);
--        else
--            return (npy_long)__Pyx_PyInt_AsSignedLongLong(x);
--    }  else {
--        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
--        PyErr_SetString(PyExc_RuntimeError,
--                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
--        #else
--        npy_long val;
--        PyObject *v = __Pyx_PyNumber_Int(x);
--        #if PY_VERSION_HEX < 0x03000000
--        if (likely(v) && !PyLong_Check(v)) {
--            PyObject *tmp = v;
--            v = PyNumber_Long(tmp);
--            Py_DECREF(tmp);
--        }
--        #endif
--        if (likely(v)) {
--            int one = 1; int is_little = (int)*(unsigned char *)&one;
--            unsigned char *bytes = (unsigned char *)&val;
--            int ret = _PyLong_AsByteArray((PyLongObject *)v,
--                                          bytes, sizeof(val),
--                                          is_little, !is_unsigned);
--            Py_DECREF(v);
--            if (likely(!ret))
--                return val;
--        }
--        #endif
--        return (npy_long)-1;
--    }
--}
--
--static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_long(npy_long val) {
--    const npy_long neg_one = (npy_long)-1, const_zero = (npy_long)0;
--    const int is_unsigned = const_zero < neg_one;
--    if ((sizeof(npy_long) == sizeof(char))  ||
--        (sizeof(npy_long) == sizeof(short))) {
--        return PyInt_FromLong((long)val);
--    } else if ((sizeof(npy_long) == sizeof(int)) ||
--               (sizeof(npy_long) == sizeof(long))) {
--        if (is_unsigned)
--            return PyLong_FromUnsignedLong((unsigned long)val);
--        else
--            return PyInt_FromLong((long)val);
--    } else if (sizeof(npy_long) == sizeof(PY_LONG_LONG)) {
--        if (is_unsigned)
--            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
--        else
--            return PyLong_FromLongLong((PY_LONG_LONG)val);
--    } else {
--        int one = 1; int little = (int)*(unsigned char *)&one;
--        unsigned char *bytes = (unsigned char *)&val;
--        return _PyLong_FromByteArray(bytes, sizeof(npy_long),
--                                     little, !is_unsigned);
--    }
--}
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return ::std::complex< float >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return x + y*(__pyx_t_float_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      __pyx_t_float_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        float denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrtf(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypotf(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--            __pyx_t_float_complex z;
--            float r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    float denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(a, a);
--                    case 3:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, a);
--                    case 4:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_absf(a);
--                theta = atan2f(a.imag, a.real);
--            }
--            lnr = logf(r);
--            z_r = expf(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cosf(z_theta);
--            z.imag = z_r * sinf(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return ::std::complex< double >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return x + y*(__pyx_t_double_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      __pyx_t_double_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        double denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrt(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypot(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--            __pyx_t_double_complex z;
--            double r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    double denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(a, a);
--                    case 3:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, a);
--                    case 4:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_abs(a);
--                theta = atan2(a.imag, a.real);
--            }
--            lnr = log(r);
--            z_r = exp(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cos(z_theta);
--            z.imag = z_r * sin(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
--    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned char" :
--                    "value too large to convert to unsigned char");
--            }
--            return (unsigned char)-1;
--        }
--        return (unsigned char)val;
--    }
--    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
--    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned short" :
--                    "value too large to convert to unsigned short");
--            }
--            return (unsigned short)-1;
--        }
--        return (unsigned short)val;
--    }
--    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
--    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned int" :
--                    "value too large to convert to unsigned int");
--            }
--            return (unsigned int)-1;
--        }
--        return (unsigned int)val;
--    }
--    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
--    const char neg_one = (char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to char" :
--                    "value too large to convert to char");
--            }
--            return (char)-1;
--        }
--        return (char)val;
--    }
--    return (char)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
--    const short neg_one = (short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to short" :
--                    "value too large to convert to short");
--            }
--            return (short)-1;
--        }
--        return (short)val;
--    }
--    return (short)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
--    const signed char neg_one = (signed char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed char" :
--                    "value too large to convert to signed char");
--            }
--            return (signed char)-1;
--        }
--        return (signed char)val;
--    }
--    return (signed char)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
--    const signed short neg_one = (signed short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed short" :
--                    "value too large to convert to signed short");
--            }
--            return (signed short)-1;
--        }
--        return (signed short)val;
--    }
--    return (signed short)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
--    const signed int neg_one = (signed int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed int" :
--                    "value too large to convert to signed int");
--            }
--            return (signed int)-1;
--        }
--        return (signed int)val;
--    }
--    return (signed int)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
--    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned long");
--            return (unsigned long)-1;
--        }
--        return (unsigned long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned long");
--                return (unsigned long)-1;
--            }
--            return (unsigned long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (unsigned long)PyLong_AsLong(x);
--        }
--    } else {
--        unsigned long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned long)-1;
--        val = __Pyx_PyInt_AsUnsignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
--    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned PY_LONG_LONG");
--            return (unsigned PY_LONG_LONG)-1;
--        }
--        return (unsigned PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned PY_LONG_LONG");
--                return (unsigned PY_LONG_LONG)-1;
--            }
--            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        unsigned PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
--    const long neg_one = (long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to long");
--            return (long)-1;
--        }
--        return (long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to long");
--                return (long)-1;
--            }
--            return (long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (long)PyLong_AsLong(x);
--        }
--    } else {
--        long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (long)-1;
--        val = __Pyx_PyInt_AsLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
--    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to PY_LONG_LONG");
--            return (PY_LONG_LONG)-1;
--        }
--        return (PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to PY_LONG_LONG");
--                return (PY_LONG_LONG)-1;
--            }
--            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
--    const signed long neg_one = (signed long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed long");
--            return (signed long)-1;
--        }
--        return (signed long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed long");
--                return (signed long)-1;
--            }
--            return (signed long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (signed long)PyLong_AsLong(x);
--        }
--    } else {
--        signed long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed long)-1;
--        val = __Pyx_PyInt_AsSignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
--    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed PY_LONG_LONG");
--            return (signed PY_LONG_LONG)-1;
--        }
--        return (signed PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed PY_LONG_LONG");
--                return (signed PY_LONG_LONG)-1;
--            }
--            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        signed PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsSignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static int __Pyx_check_binary_version(void) {
--    char ctversion[4], rtversion[4];
--    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
--    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
--    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
--        char message[200];
--        PyOS_snprintf(message, sizeof(message),
--                      "compiletime version %s of module '%.100s' "
--                      "does not match runtime version %s",
--                      ctversion, __Pyx_MODULE_NAME, rtversion);
--        #if PY_VERSION_HEX < 0x02050000
--        return PyErr_Warn(NULL, message);
--        #else
--        return PyErr_WarnEx(NULL, message, 1);
--        #endif
--    }
--    return 0;
--}
--
--#ifndef __PYX_HAVE_RT_ImportModule
--#define __PYX_HAVE_RT_ImportModule
--static PyObject *__Pyx_ImportModule(const char *name) {
--    PyObject *py_name = 0;
--    PyObject *py_module = 0;
--    py_name = __Pyx_PyIdentifier_FromString(name);
--    if (!py_name)
--        goto bad;
--    py_module = PyImport_Import(py_name);
--    Py_DECREF(py_name);
--    return py_module;
--bad:
--    Py_XDECREF(py_name);
--    return 0;
--}
--#endif
--
--#ifndef __PYX_HAVE_RT_ImportType
--#define __PYX_HAVE_RT_ImportType
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
--    size_t size, int strict)
--{
--    PyObject *py_module = 0;
--    PyObject *result = 0;
--    PyObject *py_name = 0;
--    char warning[200];
--    Py_ssize_t basicsize;
--#ifdef Py_LIMITED_API
--    PyObject *py_basicsize;
--#endif
--    py_module = __Pyx_ImportModule(module_name);
--    if (!py_module)
--        goto bad;
--    py_name = __Pyx_PyIdentifier_FromString(class_name);
--    if (!py_name)
--        goto bad;
--    result = PyObject_GetAttr(py_module, py_name);
--    Py_DECREF(py_name);
--    py_name = 0;
--    Py_DECREF(py_module);
--    py_module = 0;
--    if (!result)
--        goto bad;
--    if (!PyType_Check(result)) {
--        PyErr_Format(PyExc_TypeError,
--            "%s.%s is not a type object",
--            module_name, class_name);
--        goto bad;
--    }
--#ifndef Py_LIMITED_API
--    basicsize = ((PyTypeObject *)result)->tp_basicsize;
--#else
--    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
--    if (!py_basicsize)
--        goto bad;
--    basicsize = PyLong_AsSsize_t(py_basicsize);
--    Py_DECREF(py_basicsize);
--    py_basicsize = 0;
--    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
--        goto bad;
--#endif
--    if (!strict && (size_t)basicsize > size) {
--        PyOS_snprintf(warning, sizeof(warning),
--            "%s.%s size changed, may indicate binary incompatibility",
--            module_name, class_name);
--        #if PY_VERSION_HEX < 0x02050000
--        if (PyErr_Warn(NULL, warning) < 0) goto bad;
--        #else
--        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
--        #endif
--    }
--    else if ((size_t)basicsize != size) {
--        PyErr_Format(PyExc_ValueError,
--            "%s.%s has the wrong size, try recompiling",
--            module_name, class_name);
--        goto bad;
--    }
--    return (PyTypeObject *)result;
--bad:
--    Py_XDECREF(py_module);
--    Py_XDECREF(result);
--    return NULL;
--}
--#endif
--
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
--    int start = 0, mid = 0, end = count - 1;
--    if (end >= 0 && code_line > entries[end].code_line) {
--        return count;
--    }
--    while (start < end) {
--        mid = (start + end) / 2;
--        if (code_line < entries[mid].code_line) {
--            end = mid;
--        } else if (code_line > entries[mid].code_line) {
--             start = mid + 1;
--        } else {
--            return mid;
--        }
--    }
--    if (code_line <= entries[mid].code_line) {
--        return mid;
--    } else {
--        return mid + 1;
--    }
--}
--static PyCodeObject *__pyx_find_code_object(int code_line) {
--    PyCodeObject* code_object;
--    int pos;
--    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
--        return NULL;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
--        return NULL;
--    }
--    code_object = __pyx_code_cache.entries[pos].code_object;
--    Py_INCREF(code_object);
--    return code_object;
--}
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
--    int pos, i;
--    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
--    if (unlikely(!code_line)) {
--        return;
--    }
--    if (unlikely(!entries)) {
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (likely(entries)) {
--            __pyx_code_cache.entries = entries;
--            __pyx_code_cache.max_count = 64;
--            __pyx_code_cache.count = 1;
--            entries[0].code_line = code_line;
--            entries[0].code_object = code_object;
--            Py_INCREF(code_object);
--        }
--        return;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
--        PyCodeObject* tmp = entries[pos].code_object;
--        entries[pos].code_object = code_object;
--        Py_DECREF(tmp);
--        return;
--    }
--    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
--        int new_max = __pyx_code_cache.max_count + 64;
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
--            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (unlikely(!entries)) {
--            return;
--        }
--        __pyx_code_cache.entries = entries;
--        __pyx_code_cache.max_count = new_max;
--    }
--    for (i=__pyx_code_cache.count; i>pos; i--) {
--        entries[i] = entries[i-1];
--    }
--    entries[pos].code_line = code_line;
--    entries[pos].code_object = code_object;
--    __pyx_code_cache.count++;
--    Py_INCREF(code_object);
--}
--
--#include "compile.h"
--#include "frameobject.h"
--#include "traceback.h"
--static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
--            const char *funcname, int c_line,
--            int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_srcfile = 0;
--    PyObject *py_funcname = 0;
--    #if PY_MAJOR_VERSION < 3
--    py_srcfile = PyString_FromString(filename);
--    #else
--    py_srcfile = PyUnicode_FromString(filename);
--    #endif
--    if (!py_srcfile) goto bad;
--    if (c_line) {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #else
--        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #endif
--    }
--    else {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromString(funcname);
--        #else
--        py_funcname = PyUnicode_FromString(funcname);
--        #endif
--    }
--    if (!py_funcname) goto bad;
--    py_code = __Pyx_PyCode_New(
--        0,            /*int argcount,*/
--        0,            /*int kwonlyargcount,*/
--        0,            /*int nlocals,*/
--        0,            /*int stacksize,*/
--        0,            /*int flags,*/
--        __pyx_empty_bytes, /*PyObject *code,*/
--        __pyx_empty_tuple, /*PyObject *consts,*/
--        __pyx_empty_tuple, /*PyObject *names,*/
--        __pyx_empty_tuple, /*PyObject *varnames,*/
--        __pyx_empty_tuple, /*PyObject *freevars,*/
--        __pyx_empty_tuple, /*PyObject *cellvars,*/
--        py_srcfile,   /*PyObject *filename,*/
--        py_funcname,  /*PyObject *name,*/
--        py_line,      /*int firstlineno,*/
--        __pyx_empty_bytes  /*PyObject *lnotab*/
--    );
--    Py_DECREF(py_srcfile);
--    Py_DECREF(py_funcname);
--    return py_code;
--bad:
--    Py_XDECREF(py_srcfile);
--    Py_XDECREF(py_funcname);
--    return NULL;
--}
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_globals = 0;
--    PyFrameObject *py_frame = 0;
--    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
--    if (!py_code) {
--        py_code = __Pyx_CreateCodeObjectForTraceback(
--            funcname, c_line, py_line, filename);
--        if (!py_code) goto bad;
--        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
--    }
--    py_globals = PyModule_GetDict(__pyx_m);
--    if (!py_globals) goto bad;
--    py_frame = PyFrame_New(
--        PyThreadState_GET(), /*PyThreadState *tstate,*/
--        py_code,             /*PyCodeObject *code,*/
--        py_globals,          /*PyObject *globals,*/
--        0                    /*PyObject *locals*/
--    );
--    if (!py_frame) goto bad;
--    py_frame->f_lineno = py_line;
--    PyTraceBack_Here(py_frame);
--bad:
--    Py_XDECREF(py_code);
--    Py_XDECREF(py_frame);
--}
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
--    while (t->p) {
--        #if PY_MAJOR_VERSION < 3
--        if (t->is_unicode) {
--            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
--        } else if (t->intern) {
--            *t->p = PyString_InternFromString(t->s);
--        } else {
--            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
--        }
--        #else  /* Python 3+ has unicode identifiers */
--        if (t->is_unicode | t->is_str) {
--            if (t->intern) {
--                *t->p = PyUnicode_InternFromString(t->s);
--            } else if (t->encoding) {
--                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
--            } else {
--                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
--            }
--        } else {
--            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
--        }
--        #endif
--        if (!*t->p)
--            return -1;
--        ++t;
--    }
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
--   int is_true = x == Py_True;
--   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
--   else return PyObject_IsTrue(x);
--}
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
--  PyNumberMethods *m;
--  const char *name = NULL;
--  PyObject *res = NULL;
--#if PY_VERSION_HEX < 0x03000000
--  if (PyInt_Check(x) || PyLong_Check(x))
--#else
--  if (PyLong_Check(x))
--#endif
--    return Py_INCREF(x), x;
--  m = Py_TYPE(x)->tp_as_number;
--#if PY_VERSION_HEX < 0x03000000
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Int(x);
--  }
--  else if (m && m->nb_long) {
--    name = "long";
--    res = PyNumber_Long(x);
--  }
--#else
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Long(x);
--  }
--#endif
--  if (res) {
--#if PY_VERSION_HEX < 0x03000000
--    if (!PyInt_Check(res) && !PyLong_Check(res)) {
--#else
--    if (!PyLong_Check(res)) {
--#endif
--      PyErr_Format(PyExc_TypeError,
--                   "__%s__ returned non-%s (type %.200s)",
--                   name, name, Py_TYPE(res)->tp_name);
--      Py_DECREF(res);
--      return NULL;
--    }
--  }
--  else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_TypeError,
--                    "an integer is required");
--  }
--  return res;
--}
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
--  Py_ssize_t ival;
--  PyObject* x = PyNumber_Index(b);
--  if (!x) return -1;
--  ival = PyInt_AsSsize_t(x);
--  Py_DECREF(x);
--  return ival;
--}
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
--#if PY_VERSION_HEX < 0x02050000
--   if (ival <= LONG_MAX)
--       return PyInt_FromLong((long)ival);
--   else {
--       unsigned char *bytes = (unsigned char *) &ival;
--       int one = 1; int little = (int)*(unsigned char*)&one;
--       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
--   }
--#else
--   return PyInt_FromSize_t(ival);
--#endif
--}
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
--   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
--   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
--       return (size_t)-1;
--   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
--       PyErr_SetString(PyExc_OverflowError,
--                       "value too large to convert to size_t");
--       return (size_t)-1;
--   }
--   return (size_t)val;
--}
--
--
--#endif /* Py_PYTHON_H */
diff --cc astropy/time/erfa_time.c
index 88d2d96,88d2d96..0000000
deleted file mode 100644,100644
--- a/astropy/time/erfa_time.c
+++ /dev/null
@@@ -1,16574 -1,16574 +1,0 @@@
--/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
--
--#define PY_SSIZE_T_CLEAN
--#include "Python.h"
--#ifndef Py_PYTHON_H
--    #error Python headers needed to compile C extensions, please install development version of Python.
--#elif PY_VERSION_HEX < 0x02040000
--    #error Cython requires Python 2.4+.
--#else
--#include <stddef.h> /* For offsetof */
--#ifndef offsetof
--#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
--#endif
--#if !defined(WIN32) && !defined(MS_WINDOWS)
--  #ifndef __stdcall
--    #define __stdcall
--  #endif
--  #ifndef __cdecl
--    #define __cdecl
--  #endif
--  #ifndef __fastcall
--    #define __fastcall
--  #endif
--#endif
--#ifndef DL_IMPORT
--  #define DL_IMPORT(t) t
--#endif
--#ifndef DL_EXPORT
--  #define DL_EXPORT(t) t
--#endif
--#ifndef PY_LONG_LONG
--  #define PY_LONG_LONG LONG_LONG
--#endif
--#ifndef Py_HUGE_VAL
--  #define Py_HUGE_VAL HUGE_VAL
--#endif
--#ifdef PYPY_VERSION
--#define CYTHON_COMPILING_IN_PYPY 1
--#define CYTHON_COMPILING_IN_CPYTHON 0
--#else
--#define CYTHON_COMPILING_IN_PYPY 0
--#define CYTHON_COMPILING_IN_CPYTHON 1
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  typedef int Py_ssize_t;
--  #define PY_SSIZE_T_MAX INT_MAX
--  #define PY_SSIZE_T_MIN INT_MIN
--  #define PY_FORMAT_SIZE_T ""
--  #define CYTHON_FORMAT_SSIZE_T ""
--  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
--  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
--  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
--                                (PyErr_Format(PyExc_TypeError, \
--                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
--                                 (PyObject*)0))
--  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
--                                  !PyComplex_Check(o))
--  #define PyIndex_Check __Pyx_PyIndex_Check
--  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
--  #define __PYX_BUILD_PY_SSIZE_T "i"
--#else
--  #define __PYX_BUILD_PY_SSIZE_T "n"
--  #define CYTHON_FORMAT_SSIZE_T "z"
--  #define __Pyx_PyIndex_Check PyIndex_Check
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
--  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
--  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
--  #define PyVarObject_HEAD_INIT(type, size) \
--          PyObject_HEAD_INIT(type) size,
--  #define PyType_Modified(t)
--  typedef struct {
--     void *buf;
--     PyObject *obj;
--     Py_ssize_t len;
--     Py_ssize_t itemsize;
--     int readonly;
--     int ndim;
--     char *format;
--     Py_ssize_t *shape;
--     Py_ssize_t *strides;
--     Py_ssize_t *suboffsets;
--     void *internal;
--  } Py_buffer;
--  #define PyBUF_SIMPLE 0
--  #define PyBUF_WRITABLE 0x0001
--  #define PyBUF_FORMAT 0x0004
--  #define PyBUF_ND 0x0008
--  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
--  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
--  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
--  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
--  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
--  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
--  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
--  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
--  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
--#endif
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#else
--  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
--  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
--          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
--#endif
--#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
--  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define Py_TPFLAGS_CHECKTYPES 0
--  #define Py_TPFLAGS_HAVE_INDEX 0
--#endif
--#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
--  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
--#endif
--#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
--  #define CYTHON_PEP393_ENABLED 1
--  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
--                                              0 : _PyUnicode_Ready((PyObject *)(op)))
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
--  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
--#else
--  #define CYTHON_PEP393_ENABLED 0
--  #define __Pyx_PyUnicode_READY(op)       (0)
--  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
--  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
--  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBaseString_Type            PyUnicode_Type
--  #define PyStringObject               PyUnicodeObject
--  #define PyString_Type                PyUnicode_Type
--  #define PyString_Check               PyUnicode_Check
--  #define PyString_CheckExact          PyUnicode_CheckExact
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PyBytesObject                PyStringObject
--  #define PyBytes_Type                 PyString_Type
--  #define PyBytes_Check                PyString_Check
--  #define PyBytes_CheckExact           PyString_CheckExact
--  #define PyBytes_FromString           PyString_FromString
--  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
--  #define PyBytes_FromFormat           PyString_FromFormat
--  #define PyBytes_DecodeEscape         PyString_DecodeEscape
--  #define PyBytes_AsString             PyString_AsString
--  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
--  #define PyBytes_Size                 PyString_Size
--  #define PyBytes_AS_STRING            PyString_AS_STRING
--  #define PyBytes_GET_SIZE             PyString_GET_SIZE
--  #define PyBytes_Repr                 PyString_Repr
--  #define PyBytes_Concat               PyString_Concat
--  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
--#endif
--#if PY_VERSION_HEX < 0x02060000
--  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
--  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
--#endif
--#ifndef PySet_CheckExact
--  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
--#endif
--#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
--#if PY_MAJOR_VERSION >= 3
--  #define PyIntObject                  PyLongObject
--  #define PyInt_Type                   PyLong_Type
--  #define PyInt_Check(op)              PyLong_Check(op)
--  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
--  #define PyInt_FromString             PyLong_FromString
--  #define PyInt_FromUnicode            PyLong_FromUnicode
--  #define PyInt_FromLong               PyLong_FromLong
--  #define PyInt_FromSize_t             PyLong_FromSize_t
--  #define PyInt_FromSsize_t            PyLong_FromSsize_t
--  #define PyInt_AsLong                 PyLong_AsLong
--  #define PyInt_AS_LONG                PyLong_AS_LONG
--  #define PyInt_AsSsize_t              PyLong_AsSsize_t
--  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
--  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyBoolObject                 PyLongObject
--#endif
--#if PY_VERSION_HEX < 0x03020000
--  typedef long Py_hash_t;
--  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
--#else
--  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
--  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
--#endif
--#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300)
--  #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b)
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value)
--  #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b)
--#else
--  #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0)))
--  #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1)))
--  #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \
--        (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \
--        (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \
--            (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1)))
--#endif
--#if PY_MAJOR_VERSION >= 3
--  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
--#else
--  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
--  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
--  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
--#endif
--#if PY_VERSION_HEX < 0x02050000
--  #define __Pyx_NAMESTR(n) ((char *)(n))
--  #define __Pyx_DOCSTR(n)  ((char *)(n))
--#else
--  #define __Pyx_NAMESTR(n) (n)
--  #define __Pyx_DOCSTR(n)  (n)
--#endif
--
--
--#if PY_MAJOR_VERSION >= 3
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
--#else
--  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
--  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
--#endif
--
--#ifndef __PYX_EXTERN_C
--  #ifdef __cplusplus
--    #define __PYX_EXTERN_C extern "C"
--  #else
--    #define __PYX_EXTERN_C extern
--  #endif
--#endif
--
--#if defined(WIN32) || defined(MS_WINDOWS)
--#define _USE_MATH_DEFINES
--#endif
--#include <math.h>
--#define __PYX_HAVE__astropy__time__erfa_time
--#define __PYX_HAVE_API__astropy__time__erfa_time
--#include "string.h"
--#include "stdio.h"
--#include "stdlib.h"
--#include "numpy/arrayobject.h"
--#include "numpy/ufuncobject.h"
--#include "erfa.h"
--#ifdef _OPENMP
--#include <omp.h>
--#endif /* _OPENMP */
--
--#ifdef PYREX_WITHOUT_ASSERTIONS
--#define CYTHON_WITHOUT_ASSERTIONS
--#endif
--
--#ifndef CYTHON_INLINE
--  #if defined(__GNUC__)
--    #define CYTHON_INLINE __inline__
--  #elif defined(_MSC_VER)
--    #define CYTHON_INLINE __inline
--  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
--    #define CYTHON_INLINE inline
--  #else
--    #define CYTHON_INLINE
--  #endif
--#endif
--#ifndef CYTHON_UNUSED
--# if defined(__GNUC__)
--#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
--#     define CYTHON_UNUSED __attribute__ ((__unused__))
--#   else
--#     define CYTHON_UNUSED
--#   endif
--# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
--#   define CYTHON_UNUSED __attribute__ ((__unused__))
--# else
--#   define CYTHON_UNUSED
--# endif
--#endif
--typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
--
--#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
--#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))
--#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
--#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
--#if CYTHON_COMPILING_IN_CPYTHON
--#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
--#else
--#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
--#endif
--#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
--
--
--#ifdef __GNUC__
--  /* Test for GCC > 2.95 */
--  #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))
--    #define likely(x)   __builtin_expect(!!(x), 1)
--    #define unlikely(x) __builtin_expect(!!(x), 0)
--  #else /* __GNUC__ > 2 ... */
--    #define likely(x)   (x)
--    #define unlikely(x) (x)
--  #endif /* __GNUC__ > 2 ... */
--#else /* __GNUC__ */
--  #define likely(x)   (x)
--  #define unlikely(x) (x)
--#endif /* __GNUC__ */
--    
--static PyObject *__pyx_m;
--static PyObject *__pyx_b;
--static PyObject *__pyx_empty_tuple;
--static PyObject *__pyx_empty_bytes;
--static int __pyx_lineno;
--static int __pyx_clineno = 0;
--static const char * __pyx_cfilenm= __FILE__;
--static const char *__pyx_filename;
--
--#if !defined(CYTHON_CCOMPLEX)
--  #if defined(__cplusplus)
--    #define CYTHON_CCOMPLEX 1
--  #elif defined(_Complex_I)
--    #define CYTHON_CCOMPLEX 1
--  #else
--    #define CYTHON_CCOMPLEX 0
--  #endif
--#endif
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #include <complex>
--  #else
--    #include <complex.h>
--  #endif
--#endif
--#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
--  #undef _Complex_I
--  #define _Complex_I 1.0fj
--#endif
--
--
--static const char *__pyx_f[] = {
--  "erfa_time.pyx",
--  "numpy.pxd",
--  "type.pxd",
--};
--#define IS_UNSIGNED(type) (((type) -1) > 0)
--struct __Pyx_StructField_;
--#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
--typedef struct {
--  const char* name; /* for error messages only */
--  struct __Pyx_StructField_* fields;
--  size_t size;     /* sizeof(type) */
--  size_t arraysize[8]; /* length of array in each dimension */
--  int ndim;
--  char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject, c_H_ar */
--  char is_unsigned;
--  int flags;
--} __Pyx_TypeInfo;
--typedef struct __Pyx_StructField_ {
--  __Pyx_TypeInfo* type;
--  const char* name;
--  size_t offset;
--} __Pyx_StructField;
--typedef struct {
--  __Pyx_StructField* field;
--  size_t parent_offset;
--} __Pyx_BufFmt_StackElem;
--typedef struct {
--  __Pyx_StructField root;
--  __Pyx_BufFmt_StackElem* head;
--  size_t fmt_offset;
--  size_t new_count, enc_count;
--  size_t struct_alignment;
--  int is_complex;
--  char enc_type;
--  char new_packmode;
--  char enc_packmode;
--  char is_valid_array;
--} __Pyx_BufFmt_Context;
--
--
--/* "numpy.pxd":723
-- * # in Cython to enable them only on the right systems.
-- * 
-- * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- */
--typedef npy_int8 __pyx_t_5numpy_int8_t;
--
--/* "numpy.pxd":724
-- * 
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t
-- */
--typedef npy_int16 __pyx_t_5numpy_int16_t;
--
--/* "numpy.pxd":725
-- * ctypedef npy_int8       int8_t
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_int64      int64_t
-- * #ctypedef npy_int96      int96_t
-- */
--typedef npy_int32 __pyx_t_5numpy_int32_t;
--
--/* "numpy.pxd":726
-- * ctypedef npy_int16      int16_t
-- * ctypedef npy_int32      int32_t
-- * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_int96      int96_t
-- * #ctypedef npy_int128     int128_t
-- */
--typedef npy_int64 __pyx_t_5numpy_int64_t;
--
--/* "numpy.pxd":730
-- * #ctypedef npy_int128     int128_t
-- * 
-- * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- */
--typedef npy_uint8 __pyx_t_5numpy_uint8_t;
--
--/* "numpy.pxd":731
-- * 
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t
-- */
--typedef npy_uint16 __pyx_t_5numpy_uint16_t;
--
--/* "numpy.pxd":732
-- * ctypedef npy_uint8      uint8_t
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uint64     uint64_t
-- * #ctypedef npy_uint96     uint96_t
-- */
--typedef npy_uint32 __pyx_t_5numpy_uint32_t;
--
--/* "numpy.pxd":733
-- * ctypedef npy_uint16     uint16_t
-- * ctypedef npy_uint32     uint32_t
-- * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_uint96     uint96_t
-- * #ctypedef npy_uint128    uint128_t
-- */
--typedef npy_uint64 __pyx_t_5numpy_uint64_t;
--
--/* "numpy.pxd":737
-- * #ctypedef npy_uint128    uint128_t
-- * 
-- * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_float64    float64_t
-- * #ctypedef npy_float80    float80_t
-- */
--typedef npy_float32 __pyx_t_5numpy_float32_t;
--
--/* "numpy.pxd":738
-- * 
-- * ctypedef npy_float32    float32_t
-- * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
-- * #ctypedef npy_float80    float80_t
-- * #ctypedef npy_float128   float128_t
-- */
--typedef npy_float64 __pyx_t_5numpy_float64_t;
--
--/* "numpy.pxd":747
-- * # The int types are mapped a bit surprising --
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t
-- */
--typedef npy_long __pyx_t_5numpy_int_t;
--
--/* "numpy.pxd":748
-- * # numpy.int corresponds to 'l' and numpy.long to 'q'
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longlong   longlong_t
-- * 
-- */
--typedef npy_longlong __pyx_t_5numpy_long_t;
--
--/* "numpy.pxd":749
-- * ctypedef npy_long       int_t
-- * ctypedef npy_longlong   long_t
-- * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_ulong      uint_t
-- */
--typedef npy_longlong __pyx_t_5numpy_longlong_t;
--
--/* "numpy.pxd":751
-- * ctypedef npy_longlong   longlong_t
-- * 
-- * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t
-- */
--typedef npy_ulong __pyx_t_5numpy_uint_t;
--
--/* "numpy.pxd":752
-- * 
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
--
--/* "numpy.pxd":753
-- * ctypedef npy_ulong      uint_t
-- * ctypedef npy_ulonglong  ulong_t
-- * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_intp       intp_t
-- */
--typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
--
--/* "numpy.pxd":755
-- * ctypedef npy_ulonglong  ulonglong_t
-- * 
-- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_uintp      uintp_t
-- * 
-- */
--typedef npy_intp __pyx_t_5numpy_intp_t;
--
--/* "numpy.pxd":756
-- * 
-- * ctypedef npy_intp       intp_t
-- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_double     float_t
-- */
--typedef npy_uintp __pyx_t_5numpy_uintp_t;
--
--/* "numpy.pxd":758
-- * ctypedef npy_uintp      uintp_t
-- * 
-- * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t
-- */
--typedef npy_double __pyx_t_5numpy_float_t;
--
--/* "numpy.pxd":759
-- * 
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- */
--typedef npy_double __pyx_t_5numpy_double_t;
--
--/* "numpy.pxd":760
-- * ctypedef npy_double     float_t
-- * ctypedef npy_double     double_t
-- * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- */
--typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
--
--/* "astropy/time/erfa_time.pyx":9
-- * import cython
-- * 
-- * ctypedef np.double_t DOUBLE_T             # <<<<<<<<<<<<<<
-- * 
-- * cdef extern from "erfa.h":
-- */
--typedef __pyx_t_5numpy_double_t __pyx_t_7astropy_4time_9erfa_time_DOUBLE_T;
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< float > __pyx_t_float_complex;
--  #else
--    typedef float _Complex __pyx_t_float_complex;
--  #endif
--#else
--    typedef struct { float real, imag; } __pyx_t_float_complex;
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    typedef ::std::complex< double > __pyx_t_double_complex;
--  #else
--    typedef double _Complex __pyx_t_double_complex;
--  #endif
--#else
--    typedef struct { double real, imag; } __pyx_t_double_complex;
--#endif
--
--
--/*--- Type declarations ---*/
--
--/* "numpy.pxd":762
-- * ctypedef npy_longdouble longdouble_t
-- * 
-- * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t
-- */
--typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
--
--/* "numpy.pxd":763
-- * 
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- */
--typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
--
--/* "numpy.pxd":764
-- * ctypedef npy_cfloat      cfloat_t
-- * ctypedef npy_cdouble     cdouble_t
-- * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
-- * 
-- * ctypedef npy_cdouble     complex_t
-- */
--typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
--
--/* "numpy.pxd":766
-- * ctypedef npy_clongdouble clongdouble_t
-- * 
-- * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- */
--typedef npy_cdouble __pyx_t_5numpy_complex_t;
--#ifndef CYTHON_REFNANNY
--  #define CYTHON_REFNANNY 0
--#endif
--#if CYTHON_REFNANNY
--  typedef struct {
--    void (*INCREF)(void*, PyObject*, int);
--    void (*DECREF)(void*, PyObject*, int);
--    void (*GOTREF)(void*, PyObject*, int);
--    void (*GIVEREF)(void*, PyObject*, int);
--    void* (*SetupContext)(const char*, int, const char*);
--    void (*FinishContext)(void**);
--  } __Pyx_RefNannyAPIStruct;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
--  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
--  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
--#ifdef WITH_THREAD
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          if (acquire_gil) { \
--              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--              PyGILState_Release(__pyx_gilstate_save); \
--          } else { \
--              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
--          }
--#else
--  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
--          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
--#endif
--  #define __Pyx_RefNannyFinishContext() \
--          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
--  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
--  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
--  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
--  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
--  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
--#else
--  #define __Pyx_RefNannyDeclarations
--  #define __Pyx_RefNannySetupContext(name, acquire_gil)
--  #define __Pyx_RefNannyFinishContext()
--  #define __Pyx_INCREF(r) Py_INCREF(r)
--  #define __Pyx_DECREF(r) Py_DECREF(r)
--  #define __Pyx_GOTREF(r)
--  #define __Pyx_GIVEREF(r)
--  #define __Pyx_XINCREF(r) Py_XINCREF(r)
--  #define __Pyx_XDECREF(r) Py_XDECREF(r)
--  #define __Pyx_XGOTREF(r)
--  #define __Pyx_XGIVEREF(r)
--#endif /* CYTHON_REFNANNY */
--#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
--#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
--
--static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
--    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
--
--static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/
--
--static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
--    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
--    const char* function_name); /*proto*/
--
--static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) {
--    int result = PySequence_Contains(seq, item);
--    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
--
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact); /*proto*/
--
--static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
--    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
--
--#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
--
--#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
--static void __Pyx_RaiseBufferIndexError(int axis); /*proto*/
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
--
--static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/
--
--typedef struct {
--  Py_ssize_t shape, strides, suboffsets;
--} __Pyx_Buf_DimInfo;
--typedef struct {
--  size_t refcount;
--  Py_buffer pybuffer;
--} __Pyx_Buffer;
--typedef struct {
--  __Pyx_Buffer *rcbuffer;
--  char *data;
--  __Pyx_Buf_DimInfo diminfo[8];
--} __Pyx_LocalBuf_ND;
--
--#if PY_MAJOR_VERSION < 3
--    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
--    static void __Pyx_ReleaseBuffer(Py_buffer *view);
--#else
--    #define __Pyx_GetBuffer PyObject_GetBuffer
--    #define __Pyx_ReleaseBuffer PyBuffer_Release
--#endif
--
--
--static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
--static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
--
--static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
--
--static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name);
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    #define __Pyx_CREAL(z) ((z).real())
--    #define __Pyx_CIMAG(z) ((z).imag())
--  #else
--    #define __Pyx_CREAL(z) (__real__(z))
--    #define __Pyx_CIMAG(z) (__imag__(z))
--  #endif
--#else
--    #define __Pyx_CREAL(z) ((z).real)
--    #define __Pyx_CIMAG(z) ((z).imag)
--#endif
--#if defined(_WIN32) && defined(__cplusplus) && CYTHON_CCOMPLEX
--    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
--    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
--#else
--    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
--    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
--#endif
--
--static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eqf(a, b)   ((a)==(b))
--    #define __Pyx_c_sumf(a, b)  ((a)+(b))
--    #define __Pyx_c_difff(a, b) ((a)-(b))
--    #define __Pyx_c_prodf(a, b) ((a)*(b))
--    #define __Pyx_c_quotf(a, b) ((a)/(b))
--    #define __Pyx_c_negf(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zerof(z) ((z)==(float)0)
--    #define __Pyx_c_conjf(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (::std::abs(z))
--        #define __Pyx_c_powf(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zerof(z) ((z)==0)
--    #define __Pyx_c_conjf(z)    (conjf(z))
--    #if 1
--        #define __Pyx_c_absf(z)     (cabsf(z))
--        #define __Pyx_c_powf(a, b)  (cpowf(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex);
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex);
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex);
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
--
--#if CYTHON_CCOMPLEX
--    #define __Pyx_c_eq(a, b)   ((a)==(b))
--    #define __Pyx_c_sum(a, b)  ((a)+(b))
--    #define __Pyx_c_diff(a, b) ((a)-(b))
--    #define __Pyx_c_prod(a, b) ((a)*(b))
--    #define __Pyx_c_quot(a, b) ((a)/(b))
--    #define __Pyx_c_neg(a)     (-(a))
--  #ifdef __cplusplus
--    #define __Pyx_c_is_zero(z) ((z)==(double)0)
--    #define __Pyx_c_conj(z)    (::std::conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (::std::abs(z))
--        #define __Pyx_c_pow(a, b)  (::std::pow(a, b))
--    #endif
--  #else
--    #define __Pyx_c_is_zero(z) ((z)==0)
--    #define __Pyx_c_conj(z)    (conj(z))
--    #if 1
--        #define __Pyx_c_abs(z)     (cabs(z))
--        #define __Pyx_c_pow(a, b)  (cpow(a, b))
--    #endif
-- #endif
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex);
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex);
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex);
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex);
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex);
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
--
--static int __Pyx_check_binary_version(void);
--
--#if !defined(__Pyx_PyIdentifier_FromString)
--#if PY_MAJOR_VERSION < 3
--  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
--#else
--  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
--#endif
--#endif
--
--static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
--
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);  /*proto*/
--
--typedef struct {
--    int code_line;
--    PyCodeObject* code_object;
--} __Pyx_CodeObjectCacheEntry;
--struct __Pyx_CodeObjectCache {
--    int count;
--    int max_count;
--    __Pyx_CodeObjectCacheEntry* entries;
--};
--static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
--static PyCodeObject *__pyx_find_code_object(int code_line);
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
--
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename); /*proto*/
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
--
--
--/* Module declarations from 'cpython.buffer' */
--
--/* Module declarations from 'cpython.ref' */
--
--/* Module declarations from 'libc.string' */
--
--/* Module declarations from 'libc.stdio' */
--
--/* Module declarations from 'cpython.object' */
--
--/* Module declarations from '__builtin__' */
--
--/* Module declarations from 'cpython.type' */
--static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
--
--/* Module declarations from 'libc.stdlib' */
--
--/* Module declarations from 'numpy' */
--
--/* Module declarations from 'numpy' */
--static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
--static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
--static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
--static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
--static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
--
--/* Module declarations from 'cython' */
--
--/* Module declarations from 'astropy.time.erfa_time' */
--static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 };
--static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 };
--#define __Pyx_MODULE_NAME "astropy.time.erfa_time"
--int __pyx_module_is_main_astropy__time__erfa_time = 0;
--
--/* Implementation of 'astropy.time.erfa_time' */
--static PyObject *__pyx_builtin_ValueError;
--static PyObject *__pyx_builtin_range;
--static PyObject *__pyx_builtin_ord;
--static PyObject *__pyx_builtin_RuntimeError;
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_check_return(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ret, PyObject *__pyx_v_func_name, PyObject *__pyx_v_warns, PyObject *__pyx_v_errors); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_2cal2jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_djm0, PyArrayObject *__pyx_v_djm); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_4d_tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_fd); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_6jd_dtf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_ndp, PyArrayObject *__pyx_v_d1, PyArrayObject *__pyx_v_d2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_8dtf_jd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_ihr, PyArrayObject *__pyx_v_imn, PyArrayObject *__pyx_v_sec); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_10tai_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_12tcb_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_14tcg_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_16tdb_tcb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_18tt_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_20tt_tcg(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_22utc_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_24tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_26tai_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_28ut1_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_30tt_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_32ut1_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_34tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_36tt_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_38ut1_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_40utc_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_42d_tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_ut, PyObject *__pyx_v_elong, PyObject *__pyx_v_u, PyObject *__pyx_v_v); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_44era_af2a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sign, PyObject *__pyx_v_ideg, PyObject *__pyx_v_iamin, PyObject *__pyx_v_asec); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_46era_gd2gc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_elong, PyObject *__pyx_v_phi, PyObject *__pyx_v_height); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_48jd_julian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_50julian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_52jd_besselian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2); /* proto */
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_54besselian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd); /* proto */
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
--static char __pyx_k_3[] = "{0}: {1}";
--static char __pyx_k_4[] = "Unexpected return code {0} from {1}";
--static char __pyx_k_5[] = "Bad input day (JD still computed)";
--static char __pyx_k_6[] = "Bad input year";
--static char __pyx_k_7[] = "Bad input month";
--static char __pyx_k_8[] = "bad year";
--static char __pyx_k_9[] = "bad month (must be 1 to 12)";
--static char __pyx_k_10[] = "bad day (must be within normal calendar date for a month)";
--static char __pyx_k_11[] = "bad fraction of day";
--static char __pyx_k_12[] = "unacceptable date";
--static char __pyx_k_13[] = "time is after end of day and ";
--static char __pyx_k_14[] = "time is after end of day";
--static char __pyx_k_15[] = "bad month";
--static char __pyx_k_16[] = "bad day";
--static char __pyx_k_17[] = "bad hour";
--static char __pyx_k_18[] = "bad minute";
--static char __pyx_k_19[] = "bad second (< 0)";
--static char __pyx_k_20[] = "ideg outside range 0-359";
--static char __pyx_k_21[] = "iamin outside range 0-59";
--static char __pyx_k_22[] = "asec outside range 0-59.999...";
--static char __pyx_k_24[] = "illegal identifier";
--static char __pyx_k_25[] = "illegal case";
--static char __pyx_k_26[] = "ndarray is not C contiguous";
--static char __pyx_k_28[] = "ndarray is not Fortran contiguous";
--static char __pyx_k_30[] = "Non-native byte order not supported";
--static char __pyx_k_32[] = "unknown dtype code in numpy.pxd (%d)";
--static char __pyx_k_33[] = "Format string allocated too short, see comment in numpy.pxd";
--static char __pyx_k_36[] = "Format string allocated too short.";
--static char __pyx_k_38[] = "utils.exceptions";
--static char __pyx_k_39[] = "dubious year for UTC (before 1960.0 or 5 years beyond last known leap second)";
--static char __pyx_k_42[] = "/internal/1/root/src/astropy/astropy-release/astropy/time/erfa_time.pyx";
--static char __pyx_k_43[] = "astropy.time.erfa_time";
--static char __pyx_k__B[] = "B";
--static char __pyx_k__H[] = "H";
--static char __pyx_k__I[] = "I";
--static char __pyx_k__L[] = "L";
--static char __pyx_k__O[] = "O";
--static char __pyx_k__Q[] = "Q";
--static char __pyx_k__b[] = "b";
--static char __pyx_k__d[] = "d";
--static char __pyx_k__f[] = "f";
--static char __pyx_k__g[] = "g";
--static char __pyx_k__h[] = "h";
--static char __pyx_k__i[] = "i";
--static char __pyx_k__l[] = "l";
--static char __pyx_k__n[] = "n";
--static char __pyx_k__q[] = "q";
--static char __pyx_k__s[] = "s";
--static char __pyx_k__u[] = "u";
--static char __pyx_k__v[] = "v";
--static char __pyx_k__Zd[] = "Zd";
--static char __pyx_k__Zf[] = "Zf";
--static char __pyx_k__Zg[] = "Zg";
--static char __pyx_k__d1[] = "d1";
--static char __pyx_k__d2[] = "d2";
--static char __pyx_k__dt[] = "dt";
--static char __pyx_k__fd[] = "fd";
--static char __pyx_k__id[] = "id";
--static char __pyx_k__im[] = "im";
--static char __pyx_k__iy[] = "iy";
--static char __pyx_k__np[] = "np";
--static char __pyx_k__ut[] = "ut";
--static char __pyx_k__c_u[] = "c_u";
--static char __pyx_k__c_v[] = "c_v";
--static char __pyx_k__djm[] = "djm";
--static char __pyx_k__epd[] = "epd";
--static char __pyx_k__ihr[] = "ihr";
--static char __pyx_k__imn[] = "imn";
--static char __pyx_k__in1[] = "in1";
--static char __pyx_k__in2[] = "in2";
--static char __pyx_k__jd1[] = "jd1";
--static char __pyx_k__jd2[] = "jd2";
--static char __pyx_k__ndp[] = "ndp";
--static char __pyx_k__ord[] = "ord";
--static char __pyx_k__out[] = "out";
--static char __pyx_k__phi[] = "phi";
--static char __pyx_k__rad[] = "rad";
--static char __pyx_k__ret[] = "ret";
--static char __pyx_k__sec[] = "sec";
--static char __pyx_k__xyz[] = "xyz";
--static char __pyx_k__asec[] = "asec";
--static char __pyx_k__djm0[] = "djm0";
--static char __pyx_k__errs[] = "errs";
--static char __pyx_k__ideg[] = "ideg";
--static char __pyx_k__intc[] = "intc";
--static char __pyx_k__out1[] = "out1";
--static char __pyx_k__out2[] = "out2";
--static char __pyx_k__sign[] = "sign";
--static char __pyx_k__warn[] = "warn";
--static char __pyx_k__dtype[] = "dtype";
--static char __pyx_k__elong[] = "elong";
--static char __pyx_k__empty[] = "empty";
--static char __pyx_k__iamin[] = "iamin";
--static char __pyx_k__ihmsf[] = "ihmsf";
--static char __pyx_k__numpy[] = "numpy";
--static char __pyx_k__range[] = "range";
--static char __pyx_k__scale[] = "scale";
--static char __pyx_k__warns[] = "warns";
--static char __pyx_k__cal2jd[] = "cal2jd";
--static char __pyx_k__double[] = "double";
--static char __pyx_k__dtf_jd[] = "dtf_jd";
--static char __pyx_k__eraDat[] = "eraDat";
--static char __pyx_k__errors[] = "errors";
--static char __pyx_k__format[] = "format";
--static char __pyx_k__height[] = "height";
--static char __pyx_k__jd_dtf[] = "jd_dtf";
--static char __pyx_k__tai_tt[] = "tai_tt";
--static char __pyx_k__tcg_tt[] = "tcg_tt";
--static char __pyx_k__tdb_tt[] = "tdb_tt";
--static char __pyx_k__tt_tai[] = "tt_tai";
--static char __pyx_k__tt_tcg[] = "tt_tcg";
--static char __pyx_k__tt_tdb[] = "tt_tdb";
--static char __pyx_k__tt_ut1[] = "tt_ut1";
--static char __pyx_k__ut1_tt[] = "ut1_tt";
--static char __pyx_k__DUBIOUS[] = "DUBIOUS";
--static char __pyx_k__c_elong[] = "c_elong";
--static char __pyx_k__eraAf2a[] = "eraAf2a";
--static char __pyx_k__tai_ut1[] = "tai_ut1";
--static char __pyx_k__tai_utc[] = "tai_utc";
--static char __pyx_k__tcb_tdb[] = "tcb_tdb";
--static char __pyx_k__tdb_tcb[] = "tdb_tcb";
--static char __pyx_k__ut1_tai[] = "ut1_tai";
--static char __pyx_k__ut1_utc[] = "ut1_utc";
--static char __pyx_k__utc_tai[] = "utc_tai";
--static char __pyx_k__utc_ut1[] = "utc_ut1";
--static char __pyx_k____main__[] = "__main__";
--static char __pyx_k____test__[] = "__test__";
--static char __pyx_k__d_tdb_tt[] = "d_tdb_tt";
--static char __pyx_k__eraD2dtf[] = "eraD2dtf";
--static char __pyx_k__eraDtf2d[] = "eraDtf2d";
--static char __pyx_k__eraGd2gc[] = "eraGd2gc";
--static char __pyx_k__eraTaitt[] = "eraTaitt";
--static char __pyx_k__eraTcgtt[] = "eraTcgtt";
--static char __pyx_k__eraTdbtt[] = "eraTdbtt";
--static char __pyx_k__eraTttai[] = "eraTttai";
--static char __pyx_k__eraTttcg[] = "eraTttcg";
--static char __pyx_k__eraTttdb[] = "eraTttdb";
--static char __pyx_k__eraTtut1[] = "eraTtut1";
--static char __pyx_k__eraUt1tt[] = "eraUt1tt";
--static char __pyx_k__era_af2a[] = "era_af2a";
--static char __pyx_k__warnings[] = "warnings";
--static char __pyx_k__d_tai_utc[] = "d_tai_utc";
--static char __pyx_k__eraCal2jd[] = "eraCal2jd";
--static char __pyx_k__eraTaiut1[] = "eraTaiut1";
--static char __pyx_k__eraTaiutc[] = "eraTaiutc";
--static char __pyx_k__eraTcbtdb[] = "eraTcbtdb";
--static char __pyx_k__eraTdbtcb[] = "eraTdbtcb";
--static char __pyx_k__eraUt1tai[] = "eraUt1tai";
--static char __pyx_k__eraUt1utc[] = "eraUt1utc";
--static char __pyx_k__eraUtctai[] = "eraUtctai";
--static char __pyx_k__eraUtcut1[] = "eraUtcut1";
--static char __pyx_k__era_gd2gc[] = "era_gd2gc";
--static char __pyx_k__func_name[] = "func_name";
--static char __pyx_k__ValueError[] = "ValueError";
--static char __pyx_k__RuntimeError[] = "RuntimeError";
--static char __pyx_k__check_return[] = "check_return";
--static char __pyx_k__jd_julian_epoch[] = "jd_julian_epoch";
--static char __pyx_k__julian_epoch_jd[] = "julian_epoch_jd";
--static char __pyx_k__AstropyUserWarning[] = "AstropyUserWarning";
--static char __pyx_k__besselian_epoch_jd[] = "besselian_epoch_jd";
--static char __pyx_k__jd_besselian_epoch[] = "jd_besselian_epoch";
--static PyObject *__pyx_kp_s_10;
--static PyObject *__pyx_kp_s_11;
--static PyObject *__pyx_kp_s_12;
--static PyObject *__pyx_kp_s_13;
--static PyObject *__pyx_kp_s_14;
--static PyObject *__pyx_kp_s_15;
--static PyObject *__pyx_kp_s_16;
--static PyObject *__pyx_kp_s_17;
--static PyObject *__pyx_kp_s_18;
--static PyObject *__pyx_kp_s_19;
--static PyObject *__pyx_kp_s_20;
--static PyObject *__pyx_kp_s_21;
--static PyObject *__pyx_kp_s_22;
--static PyObject *__pyx_kp_s_24;
--static PyObject *__pyx_kp_s_25;
--static PyObject *__pyx_kp_u_26;
--static PyObject *__pyx_kp_u_28;
--static PyObject *__pyx_kp_s_3;
--static PyObject *__pyx_kp_u_30;
--static PyObject *__pyx_kp_u_32;
--static PyObject *__pyx_kp_u_33;
--static PyObject *__pyx_kp_u_36;
--static PyObject *__pyx_n_s_38;
--static PyObject *__pyx_kp_s_39;
--static PyObject *__pyx_kp_s_4;
--static PyObject *__pyx_kp_s_42;
--static PyObject *__pyx_n_s_43;
--static PyObject *__pyx_kp_s_5;
--static PyObject *__pyx_kp_s_6;
--static PyObject *__pyx_kp_s_7;
--static PyObject *__pyx_kp_s_8;
--static PyObject *__pyx_kp_s_9;
--static PyObject *__pyx_n_s__AstropyUserWarning;
--static PyObject *__pyx_n_s__DUBIOUS;
--static PyObject *__pyx_n_s__RuntimeError;
--static PyObject *__pyx_n_s__ValueError;
--static PyObject *__pyx_n_s____main__;
--static PyObject *__pyx_n_s____test__;
--static PyObject *__pyx_n_s__asec;
--static PyObject *__pyx_n_s__besselian_epoch_jd;
--static PyObject *__pyx_n_s__c_elong;
--static PyObject *__pyx_n_s__c_u;
--static PyObject *__pyx_n_s__c_v;
--static PyObject *__pyx_n_s__cal2jd;
--static PyObject *__pyx_n_s__check_return;
--static PyObject *__pyx_n_s__d1;
--static PyObject *__pyx_n_s__d2;
--static PyObject *__pyx_n_s__d_tai_utc;
--static PyObject *__pyx_n_s__d_tdb_tt;
--static PyObject *__pyx_n_s__djm;
--static PyObject *__pyx_n_s__djm0;
--static PyObject *__pyx_n_s__double;
--static PyObject *__pyx_n_s__dt;
--static PyObject *__pyx_n_s__dtf_jd;
--static PyObject *__pyx_n_s__dtype;
--static PyObject *__pyx_n_s__elong;
--static PyObject *__pyx_n_s__empty;
--static PyObject *__pyx_n_s__epd;
--static PyObject *__pyx_n_s__eraAf2a;
--static PyObject *__pyx_n_s__eraCal2jd;
--static PyObject *__pyx_n_s__eraD2dtf;
--static PyObject *__pyx_n_s__eraDat;
--static PyObject *__pyx_n_s__eraDtf2d;
--static PyObject *__pyx_n_s__eraGd2gc;
--static PyObject *__pyx_n_s__eraTaitt;
--static PyObject *__pyx_n_s__eraTaiut1;
--static PyObject *__pyx_n_s__eraTaiutc;
--static PyObject *__pyx_n_s__eraTcbtdb;
--static PyObject *__pyx_n_s__eraTcgtt;
--static PyObject *__pyx_n_s__eraTdbtcb;
--static PyObject *__pyx_n_s__eraTdbtt;
--static PyObject *__pyx_n_s__eraTttai;
--static PyObject *__pyx_n_s__eraTttcg;
--static PyObject *__pyx_n_s__eraTttdb;
--static PyObject *__pyx_n_s__eraTtut1;
--static PyObject *__pyx_n_s__eraUt1tai;
--static PyObject *__pyx_n_s__eraUt1tt;
--static PyObject *__pyx_n_s__eraUt1utc;
--static PyObject *__pyx_n_s__eraUtctai;
--static PyObject *__pyx_n_s__eraUtcut1;
--static PyObject *__pyx_n_s__era_af2a;
--static PyObject *__pyx_n_s__era_gd2gc;
--static PyObject *__pyx_n_s__errors;
--static PyObject *__pyx_n_s__errs;
--static PyObject *__pyx_n_s__fd;
--static PyObject *__pyx_n_s__format;
--static PyObject *__pyx_n_s__func_name;
--static PyObject *__pyx_n_s__height;
--static PyObject *__pyx_n_s__i;
--static PyObject *__pyx_n_s__iamin;
--static PyObject *__pyx_n_s__id;
--static PyObject *__pyx_n_s__ideg;
--static PyObject *__pyx_n_s__ihmsf;
--static PyObject *__pyx_n_s__ihr;
--static PyObject *__pyx_n_s__im;
--static PyObject *__pyx_n_s__imn;
--static PyObject *__pyx_n_s__in1;
--static PyObject *__pyx_n_s__in2;
--static PyObject *__pyx_n_s__intc;
--static PyObject *__pyx_n_s__iy;
--static PyObject *__pyx_n_s__jd1;
--static PyObject *__pyx_n_s__jd2;
--static PyObject *__pyx_n_s__jd_besselian_epoch;
--static PyObject *__pyx_n_s__jd_dtf;
--static PyObject *__pyx_n_s__jd_julian_epoch;
--static PyObject *__pyx_n_s__julian_epoch_jd;
--static PyObject *__pyx_n_s__n;
--static PyObject *__pyx_n_s__ndp;
--static PyObject *__pyx_n_s__np;
--static PyObject *__pyx_n_s__numpy;
--static PyObject *__pyx_n_s__ord;
--static PyObject *__pyx_n_s__out;
--static PyObject *__pyx_n_s__out1;
--static PyObject *__pyx_n_s__out2;
--static PyObject *__pyx_n_s__phi;
--static PyObject *__pyx_n_s__rad;
--static PyObject *__pyx_n_s__range;
--static PyObject *__pyx_n_s__ret;
--static PyObject *__pyx_n_s__s;
--static PyObject *__pyx_n_s__scale;
--static PyObject *__pyx_n_s__sec;
--static PyObject *__pyx_n_s__sign;
--static PyObject *__pyx_n_s__tai_tt;
--static PyObject *__pyx_n_s__tai_ut1;
--static PyObject *__pyx_n_s__tai_utc;
--static PyObject *__pyx_n_s__tcb_tdb;
--static PyObject *__pyx_n_s__tcg_tt;
--static PyObject *__pyx_n_s__tdb_tcb;
--static PyObject *__pyx_n_s__tdb_tt;
--static PyObject *__pyx_n_s__tt_tai;
--static PyObject *__pyx_n_s__tt_tcg;
--static PyObject *__pyx_n_s__tt_tdb;
--static PyObject *__pyx_n_s__tt_ut1;
--static PyObject *__pyx_n_s__u;
--static PyObject *__pyx_n_s__ut;
--static PyObject *__pyx_n_s__ut1_tai;
--static PyObject *__pyx_n_s__ut1_tt;
--static PyObject *__pyx_n_s__ut1_utc;
--static PyObject *__pyx_n_s__utc_tai;
--static PyObject *__pyx_n_s__utc_ut1;
--static PyObject *__pyx_n_s__v;
--static PyObject *__pyx_n_s__warn;
--static PyObject *__pyx_n_s__warnings;
--static PyObject *__pyx_n_s__warns;
--static PyObject *__pyx_n_s__xyz;
--static PyObject *__pyx_int_0;
--static PyObject *__pyx_int_1;
--static PyObject *__pyx_int_2;
--static PyObject *__pyx_int_3;
--static PyObject *__pyx_int_4;
--static PyObject *__pyx_int_neg_1;
--static PyObject *__pyx_int_neg_2;
--static PyObject *__pyx_int_neg_3;
--static PyObject *__pyx_int_neg_4;
--static PyObject *__pyx_int_neg_5;
--static PyObject *__pyx_int_neg_6;
--static PyObject *__pyx_int_15;
--static PyObject *__pyx_k_1;
--static PyObject *__pyx_k_2;
--static PyObject *__pyx_k_tuple_23;
--static PyObject *__pyx_k_tuple_27;
--static PyObject *__pyx_k_tuple_29;
--static PyObject *__pyx_k_tuple_31;
--static PyObject *__pyx_k_tuple_34;
--static PyObject *__pyx_k_tuple_35;
--static PyObject *__pyx_k_tuple_37;
--static PyObject *__pyx_k_tuple_40;
--static PyObject *__pyx_k_tuple_44;
--static PyObject *__pyx_k_tuple_46;
--static PyObject *__pyx_k_tuple_48;
--static PyObject *__pyx_k_tuple_50;
--static PyObject *__pyx_k_tuple_52;
--static PyObject *__pyx_k_tuple_54;
--static PyObject *__pyx_k_tuple_56;
--static PyObject *__pyx_k_tuple_58;
--static PyObject *__pyx_k_tuple_60;
--static PyObject *__pyx_k_tuple_62;
--static PyObject *__pyx_k_tuple_64;
--static PyObject *__pyx_k_tuple_66;
--static PyObject *__pyx_k_tuple_68;
--static PyObject *__pyx_k_tuple_70;
--static PyObject *__pyx_k_tuple_72;
--static PyObject *__pyx_k_tuple_74;
--static PyObject *__pyx_k_tuple_76;
--static PyObject *__pyx_k_tuple_78;
--static PyObject *__pyx_k_tuple_80;
--static PyObject *__pyx_k_tuple_82;
--static PyObject *__pyx_k_tuple_84;
--static PyObject *__pyx_k_tuple_86;
--static PyObject *__pyx_k_tuple_88;
--static PyObject *__pyx_k_tuple_90;
--static PyObject *__pyx_k_tuple_92;
--static PyObject *__pyx_k_tuple_94;
--static PyObject *__pyx_k_tuple_96;
--static PyObject *__pyx_k_codeobj_41;
--static PyObject *__pyx_k_codeobj_45;
--static PyObject *__pyx_k_codeobj_47;
--static PyObject *__pyx_k_codeobj_49;
--static PyObject *__pyx_k_codeobj_51;
--static PyObject *__pyx_k_codeobj_53;
--static PyObject *__pyx_k_codeobj_55;
--static PyObject *__pyx_k_codeobj_57;
--static PyObject *__pyx_k_codeobj_59;
--static PyObject *__pyx_k_codeobj_61;
--static PyObject *__pyx_k_codeobj_63;
--static PyObject *__pyx_k_codeobj_65;
--static PyObject *__pyx_k_codeobj_67;
--static PyObject *__pyx_k_codeobj_69;
--static PyObject *__pyx_k_codeobj_71;
--static PyObject *__pyx_k_codeobj_73;
--static PyObject *__pyx_k_codeobj_75;
--static PyObject *__pyx_k_codeobj_77;
--static PyObject *__pyx_k_codeobj_79;
--static PyObject *__pyx_k_codeobj_81;
--static PyObject *__pyx_k_codeobj_83;
--static PyObject *__pyx_k_codeobj_85;
--static PyObject *__pyx_k_codeobj_87;
--static PyObject *__pyx_k_codeobj_89;
--static PyObject *__pyx_k_codeobj_91;
--static PyObject *__pyx_k_codeobj_93;
--static PyObject *__pyx_k_codeobj_95;
--static PyObject *__pyx_k_codeobj_97;
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_1check_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_check_return[] = "Check the return value from an era routine";
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_1check_return = {__Pyx_NAMESTR("check_return"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_1check_return, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_check_return)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_1check_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyObject *__pyx_v_ret = 0;
--  PyObject *__pyx_v_func_name = 0;
--  PyObject *__pyx_v_warns = 0;
--  PyObject *__pyx_v_errors = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("check_return (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__ret,&__pyx_n_s__func_name,&__pyx_n_s__warns,&__pyx_n_s__errors,0};
--    PyObject* values[4] = {0,0,0,0};
--    values[2] = __pyx_k_1;
--    values[3] = __pyx_k_2;
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ret)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func_name)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("check_return", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (kw_args > 0) {
--          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__warns);
--          if (value) { values[2] = value; kw_args--; }
--        }
--        case  3:
--        if (kw_args > 0) {
--          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__errors);
--          if (value) { values[3] = value; kw_args--; }
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "check_return") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else {
--      switch (PyTuple_GET_SIZE(__pyx_args)) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--    }
--    __pyx_v_ret = values[0];
--    __pyx_v_func_name = values[1];
--    __pyx_v_warns = values[2];
--    __pyx_v_errors = values[3];
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("check_return", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.check_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_check_return(__pyx_self, __pyx_v_ret, __pyx_v_func_name, __pyx_v_warns, __pyx_v_errors);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":54
-- *           'beyond last known leap second)'
-- * 
-- * def check_return(ret, func_name, warns={}, errors={}):             # <<<<<<<<<<<<<<
-- *     """Check the return value from an era routine"""
-- *     if ret in warns:
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_check_return(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ret, PyObject *__pyx_v_func_name, PyObject *__pyx_v_warns, PyObject *__pyx_v_errors) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("check_return", 0);
--
--  /* "astropy/time/erfa_time.pyx":56
-- * def check_return(ret, func_name, warns={}, errors={}):
-- *     """Check the return value from an era routine"""
-- *     if ret in warns:             # <<<<<<<<<<<<<<
-- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
-- *     elif ret in errors:
-- */
--  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_ret, __pyx_v_warns, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_t_1) {
--
--    /* "astropy/time/erfa_time.pyx":57
-- *     """Check the return value from an era routine"""
-- *     if ret in warns:
-- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)             # <<<<<<<<<<<<<<
-- *     elif ret in errors:
-- *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
-- */
--    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__warnings); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__warn); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_3), __pyx_n_s__format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __pyx_t_4 = PyObject_GetItem(__pyx_v_warns, __pyx_v_ret); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_INCREF(__pyx_v_func_name);
--    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_func_name);
--    __Pyx_GIVEREF(__pyx_v_func_name);
--    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
--    __Pyx_GIVEREF(__pyx_t_4);
--    __pyx_t_4 = 0;
--    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__AstropyUserWarning); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
--    __Pyx_GIVEREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __pyx_t_4 = 0;
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    goto __pyx_L3;
--  }
--
--  /* "astropy/time/erfa_time.pyx":58
-- *     if ret in warns:
-- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
-- *     elif ret in errors:             # <<<<<<<<<<<<<<
-- *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
-- *     elif ret != 0:
-- */
--  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_ret, __pyx_v_errors, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_t_1) {
--
--    /* "astropy/time/erfa_time.pyx":59
-- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
-- *     elif ret in errors:
-- *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))             # <<<<<<<<<<<<<<
-- *     elif ret != 0:
-- *         raise ValueError('Unexpected return code {0} from {1}'
-- */
--    __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_3), __pyx_n_s__format); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_2 = PyObject_GetItem(__pyx_v_errors, __pyx_v_ret); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_INCREF(__pyx_v_func_name);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_func_name);
--    __Pyx_GIVEREF(__pyx_v_func_name);
--    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
--    __Pyx_GIVEREF(__pyx_t_2);
--    __pyx_t_2 = 0;
--    __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
--    __Pyx_GIVEREF(__pyx_t_2);
--    __pyx_t_2 = 0;
--    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--
--  /* "astropy/time/erfa_time.pyx":60
-- *     elif ret in errors:
-- *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
-- *     elif ret != 0:             # <<<<<<<<<<<<<<
-- *         raise ValueError('Unexpected return code {0} from {1}'
-- *                          .format(repr(ret), func_name))
-- */
--  __pyx_t_2 = PyObject_RichCompare(__pyx_v_ret, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (__pyx_t_1) {
--
--    /* "astropy/time/erfa_time.pyx":62
-- *     elif ret != 0:
-- *         raise ValueError('Unexpected return code {0} from {1}'
-- *                          .format(repr(ret), func_name))             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--    __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_4), __pyx_n_s__format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __pyx_t_3 = PyObject_Repr(__pyx_v_ret); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
--    __Pyx_GIVEREF(__pyx_t_3);
--    __Pyx_INCREF(__pyx_v_func_name);
--    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_func_name);
--    __Pyx_GIVEREF(__pyx_v_func_name);
--    __pyx_t_3 = 0;
--    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
--    __Pyx_GIVEREF(__pyx_t_3);
--    __pyx_t_3 = 0;
--    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("astropy.time.erfa_time.check_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_3cal2jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_2cal2jd[] = "\n    int eraCal2jd(int iy, int im, int id, double *djm0, double *djm)\n    Calendar date to high-precision JD.\n\n    **  Given:\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 1)\n    **\n    **  Returned:\n    **     djm0      double  MJD zero-point: always 2400000.5\n    **     djm       double  Modified Julian Date for 0 hrs\n    **\n    **  Returned (function value):\n    **               int   [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_3cal2jd = {__Pyx_NAMESTR("cal2jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_3cal2jd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_2cal2jd)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_3cal2jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_iy = 0;
--  PyArrayObject *__pyx_v_im = 0;
--  PyArrayObject *__pyx_v_id = 0;
--  PyArrayObject *__pyx_v_djm0 = 0;
--  PyArrayObject *__pyx_v_djm = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("cal2jd (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__iy,&__pyx_n_s__im,&__pyx_n_s__id,&__pyx_n_s__djm0,&__pyx_n_s__djm,0};
--    PyObject* values[5] = {0,0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iy)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__im)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__id)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__djm0)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  4:
--        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__djm)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cal2jd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
--    }
--    __pyx_v_iy = ((PyArrayObject *)values[0]);
--    __pyx_v_im = ((PyArrayObject *)values[1]);
--    __pyx_v_id = ((PyArrayObject *)values[2]);
--    __pyx_v_djm0 = ((PyArrayObject *)values[3]);
--    __pyx_v_djm = ((PyArrayObject *)values[4]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.cal2jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_djm0), __pyx_ptype_5numpy_ndarray, 1, "djm0", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_djm), __pyx_ptype_5numpy_ndarray, 1, "djm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_2cal2jd(__pyx_self, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_djm0, __pyx_v_djm);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":67
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def cal2jd(             # <<<<<<<<<<<<<<
-- *     np.ndarray[int, ndim=1] iy,
-- *     np.ndarray[int, ndim=1] im,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_2cal2jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_djm0, PyArrayObject *__pyx_v_djm) {
--  unsigned int __pyx_v_i;
--  unsigned int __pyx_v_n;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_djm;
--  __Pyx_Buffer __pyx_pybuffer_djm;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_djm0;
--  __Pyx_Buffer __pyx_pybuffer_djm0;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_id;
--  __Pyx_Buffer __pyx_pybuffer_id;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_im;
--  __Pyx_Buffer __pyx_pybuffer_im;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_iy;
--  __Pyx_Buffer __pyx_pybuffer_iy;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  unsigned int __pyx_t_2;
--  unsigned int __pyx_t_3;
--  unsigned int __pyx_t_4;
--  unsigned int __pyx_t_5;
--  unsigned int __pyx_t_6;
--  unsigned int __pyx_t_7;
--  unsigned int __pyx_t_8;
--  PyObject *__pyx_t_9 = NULL;
--  PyObject *__pyx_t_10 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("cal2jd", 0);
--  __pyx_pybuffer_iy.pybuffer.buf = NULL;
--  __pyx_pybuffer_iy.refcount = 0;
--  __pyx_pybuffernd_iy.data = NULL;
--  __pyx_pybuffernd_iy.rcbuffer = &__pyx_pybuffer_iy;
--  __pyx_pybuffer_im.pybuffer.buf = NULL;
--  __pyx_pybuffer_im.refcount = 0;
--  __pyx_pybuffernd_im.data = NULL;
--  __pyx_pybuffernd_im.rcbuffer = &__pyx_pybuffer_im;
--  __pyx_pybuffer_id.pybuffer.buf = NULL;
--  __pyx_pybuffer_id.refcount = 0;
--  __pyx_pybuffernd_id.data = NULL;
--  __pyx_pybuffernd_id.rcbuffer = &__pyx_pybuffer_id;
--  __pyx_pybuffer_djm0.pybuffer.buf = NULL;
--  __pyx_pybuffer_djm0.refcount = 0;
--  __pyx_pybuffernd_djm0.data = NULL;
--  __pyx_pybuffernd_djm0.rcbuffer = &__pyx_pybuffer_djm0;
--  __pyx_pybuffer_djm.pybuffer.buf = NULL;
--  __pyx_pybuffer_djm.refcount = 0;
--  __pyx_pybuffernd_djm.data = NULL;
--  __pyx_pybuffernd_djm.rcbuffer = &__pyx_pybuffer_djm;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_djm0.rcbuffer->pybuffer, (PyObject*)__pyx_v_djm0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_djm0.diminfo[0].strides = __pyx_pybuffernd_djm0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_djm0.diminfo[0].shape = __pyx_pybuffernd_djm0.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_djm.rcbuffer->pybuffer, (PyObject*)__pyx_v_djm, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_djm.diminfo[0].strides = __pyx_pybuffernd_djm.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_djm.diminfo[0].shape = __pyx_pybuffernd_djm.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":107
-- *     """
-- *     cdef unsigned int i
-- *     cdef unsigned n = iy.shape[0]             # <<<<<<<<<<<<<<
-- *     warns = {-3: 'Bad input day (JD still computed)'}
-- *     errs = {-1: 'Bad input year',
-- */
--  __pyx_v_n = (__pyx_v_iy->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":108
-- *     cdef unsigned int i
-- *     cdef unsigned n = iy.shape[0]
-- *     warns = {-3: 'Bad input day (JD still computed)'}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'Bad input year',
-- *              -2: 'Bad input month'}
-- */
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_5)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_warns = ((PyObject*)__pyx_t_1);
--  __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":109
-- *     cdef unsigned n = iy.shape[0]
-- *     warns = {-3: 'Bad input day (JD still computed)'}
-- *     errs = {-1: 'Bad input year',             # <<<<<<<<<<<<<<
-- *              -2: 'Bad input month'}
-- *     for i in range(n):
-- */
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_6)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_7)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_1);
--  __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":111
-- *     errs = {-1: 'Bad input year',
-- *              -2: 'Bad input month'}
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
-- *         check_return(ret, 'eraCal2jd', warns, errs)
-- */
--  __pyx_t_2 = __pyx_v_n;
--  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
--    __pyx_v_i = __pyx_t_3;
--
--    /* "astropy/time/erfa_time.pyx":112
-- *              -2: 'Bad input month'}
-- *     for i in range(n):
-- *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraCal2jd', warns, errs)
-- *     return
-- */
--    __pyx_t_4 = __pyx_v_i;
--    __pyx_t_5 = __pyx_v_i;
--    __pyx_t_6 = __pyx_v_i;
--    __pyx_t_7 = __pyx_v_i;
--    __pyx_t_8 = __pyx_v_i;
--    __pyx_v_ret = eraCal2jd((*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_id.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_djm0.rcbuffer->pybuffer.bu [...]
--
--    /* "astropy/time/erfa_time.pyx":113
-- *     for i in range(n):
-- *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
-- *         check_return(ret, 'eraCal2jd', warns, errs)             # <<<<<<<<<<<<<<
-- *     return
-- * 
-- */
--    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_1);
--    __pyx_t_9 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_9);
--    __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_10);
--    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
--    __Pyx_GIVEREF(__pyx_t_9);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraCal2jd));
--    PyTuple_SET_ITEM(__pyx_t_10, 1, ((PyObject *)__pyx_n_s__eraCal2jd));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraCal2jd));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_10, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_10, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_9 = 0;
--    __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_9);
--    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
--    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":114
-- *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
-- *         check_return(ret, 'eraCal2jd', warns, errs)
-- *     return             # <<<<<<<<<<<<<<
-- * 
-- * @cython.wraparound(False)
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_9);
--  __Pyx_XDECREF(__pyx_t_10);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_djm.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_djm0.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.cal2jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_djm.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_djm0.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_5d_tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_4d_tai_utc[] = "\n    int eraDat(int iy, int im, int id, double fd, double *deltat)\n    For a given UTC date, calculate delta(AT) = TAI-UTC.\n\n    **  Given:\n    **     iy     int      UTC:  year (Notes 1 and 2)\n    **     im     int            month (Note 2)\n    **     id     int            day (Notes 2 and 3)\n    **     fd     double         fraction of day (Note 4)\n    **\n    **  Returned:\n    **     deltat double   TAI minus U [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_5d_tai_utc = {__Pyx_NAMESTR("d_tai_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_5d_tai_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_4d_tai_utc)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_5d_tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_iy = 0;
--  PyArrayObject *__pyx_v_im = 0;
--  PyArrayObject *__pyx_v_id = 0;
--  PyArrayObject *__pyx_v_fd = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("d_tai_utc (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__iy,&__pyx_n_s__im,&__pyx_n_s__id,&__pyx_n_s__fd,0};
--    PyObject* values[4] = {0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iy)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__im)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__id)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "d_tai_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--    }
--    __pyx_v_iy = ((PyArrayObject *)values[0]);
--    __pyx_v_im = ((PyArrayObject *)values[1]);
--    __pyx_v_id = ((PyArrayObject *)values[2]);
--    __pyx_v_fd = ((PyArrayObject *)values[3]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.d_tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fd), __pyx_ptype_5numpy_ndarray, 1, "fd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_4d_tai_utc(__pyx_self, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_fd);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":118
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def d_tai_utc(np.ndarray[int, ndim=1] iy,             # <<<<<<<<<<<<<<
-- *               np.ndarray[int, ndim=1] im,
-- *               np.ndarray[int, ndim=1] id,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_4d_tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_fd) {
--  int __pyx_v_i;
--  int __pyx_v_n;
--  PyArrayObject *__pyx_v_out = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_fd;
--  __Pyx_Buffer __pyx_pybuffer_fd;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_id;
--  __Pyx_Buffer __pyx_pybuffer_id;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_im;
--  __Pyx_Buffer __pyx_pybuffer_im;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_iy;
--  __Pyx_Buffer __pyx_pybuffer_iy;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out;
--  __Pyx_Buffer __pyx_pybuffer_out;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  int __pyx_t_11;
--  int __pyx_t_12;
--  int __pyx_t_13;
--  int __pyx_t_14;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("d_tai_utc", 0);
--  __pyx_pybuffer_out.pybuffer.buf = NULL;
--  __pyx_pybuffer_out.refcount = 0;
--  __pyx_pybuffernd_out.data = NULL;
--  __pyx_pybuffernd_out.rcbuffer = &__pyx_pybuffer_out;
--  __pyx_pybuffer_iy.pybuffer.buf = NULL;
--  __pyx_pybuffer_iy.refcount = 0;
--  __pyx_pybuffernd_iy.data = NULL;
--  __pyx_pybuffernd_iy.rcbuffer = &__pyx_pybuffer_iy;
--  __pyx_pybuffer_im.pybuffer.buf = NULL;
--  __pyx_pybuffer_im.refcount = 0;
--  __pyx_pybuffernd_im.data = NULL;
--  __pyx_pybuffernd_im.rcbuffer = &__pyx_pybuffer_im;
--  __pyx_pybuffer_id.pybuffer.buf = NULL;
--  __pyx_pybuffer_id.refcount = 0;
--  __pyx_pybuffernd_id.data = NULL;
--  __pyx_pybuffernd_id.rcbuffer = &__pyx_pybuffer_id;
--  __pyx_pybuffer_fd.pybuffer.buf = NULL;
--  __pyx_pybuffer_fd.refcount = 0;
--  __pyx_pybuffernd_fd.data = NULL;
--  __pyx_pybuffernd_fd.rcbuffer = &__pyx_pybuffer_fd;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fd.rcbuffer->pybuffer, (PyObject*)__pyx_v_fd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_fd.diminfo[0].strides = __pyx_pybuffernd_fd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fd.diminfo[0].shape = __pyx_pybuffernd_fd.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":196
-- *     """
-- *     cdef int i
-- *     cdef int n = iy.shape[0]             # <<<<<<<<<<<<<<
-- *     assert (iy.shape[0] == im.shape[0] == id.shape[0] == fd.shape[0])
-- * 
-- */
--  __pyx_v_n = (__pyx_v_iy->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":197
-- *     cdef int i
-- *     cdef int n = iy.shape[0]
-- *     assert (iy.shape[0] == im.shape[0] == id.shape[0] == fd.shape[0])             # <<<<<<<<<<<<<<
-- * 
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_iy->dimensions[0]) == (__pyx_v_im->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_im->dimensions[0]) == (__pyx_v_id->dimensions[0]));
--    if (__pyx_t_1) {
--      __pyx_t_1 = ((__pyx_v_id->dimensions[0]) == (__pyx_v_fd->dimensions[0]));
--    }
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":199
-- *     assert (iy.shape[0] == im.shape[0] == id.shape[0] == fd.shape[0])
-- * 
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: DUBIOUS}
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__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];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":201
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
-- * 
-- *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'bad year',
-- *              -2: 'bad month (must be 1 to 12)',
-- */
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyDict_SetItem(__pyx_t_6, __pyx_int_1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":202
-- * 
-- *     warns = {1: DUBIOUS}
-- *     errs = {-1: 'bad year',             # <<<<<<<<<<<<<<
-- *              -2: 'bad month (must be 1 to 12)',
-- *              -3: 'bad day (must be within normal calendar date for a month)',
-- */
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_9)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_10)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_4, ((PyObject *)__pyx_kp_s_11)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":206
-- *              -3: 'bad day (must be within normal calendar date for a month)',
-- *              -4: 'bad fraction of day'}
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraDat(iy[i], im[i], id[i], fd[i],
-- *                      &out[i])
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":207
-- *              -4: 'bad fraction of day'}
-- *     for i in range(n):
-- *         ret = eraDat(iy[i], im[i], id[i], fd[i],             # <<<<<<<<<<<<<<
-- *                      &out[i])
-- *         check_return(ret, 'eraDat', warns, errs)
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--
--    /* "astropy/time/erfa_time.pyx":208
-- *     for i in range(n):
-- *         ret = eraDat(iy[i], im[i], id[i], fd[i],
-- *                      &out[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraDat', warns, errs)
-- * 
-- */
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_v_ret = eraDat((*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_id.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_fd.rcbuffer->pybuffer.buf, _ [...]
--
--    /* "astropy/time/erfa_time.pyx":209
-- *         ret = eraDat(iy[i], im[i], id[i], fd[i],
-- *                      &out[i])
-- *         check_return(ret, 'eraDat', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return out
-- */
--    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_2 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--    __Pyx_GIVEREF(__pyx_t_2);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraDat));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraDat));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraDat));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_2 = 0;
--    __pyx_t_2 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":211
-- *         check_return(ret, 'eraDat', warns, errs)
-- * 
-- *     return out             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out));
--  __pyx_r = ((PyObject *)__pyx_v_out);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fd.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.d_tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fd.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_7jd_dtf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_6jd_dtf[] = "\n    int eraD2dtf(const char *scale, int ndp, double d1, double d2,\n             int *iy, int *im, int *id, int ihmsf[4])\n\n    **  Given:\n    **     scale     char[]  time scale ID (Note 1)\n    **     ndp       int     resolution (Note 2)\n    **     d1,d2     double  time as a 2-part Julian Date (Notes 3,4)\n    **\n    **  Returned:\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 5)\n    **   [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_7jd_dtf = {__Pyx_NAMESTR("jd_dtf"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_7jd_dtf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_6jd_dtf)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_7jd_dtf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyObject *__pyx_v_scale = 0;
--  PyObject *__pyx_v_ndp = 0;
--  PyArrayObject *__pyx_v_d1 = 0;
--  PyArrayObject *__pyx_v_d2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("jd_dtf (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scale,&__pyx_n_s__ndp,&__pyx_n_s__d1,&__pyx_n_s__d2,0};
--    PyObject* values[4] = {0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scale)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ndp)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__d1)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__d2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_dtf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--    }
--    __pyx_v_scale = values[0];
--    __pyx_v_ndp = values[1];
--    __pyx_v_d1 = ((PyArrayObject *)values[2]);
--    __pyx_v_d2 = ((PyArrayObject *)values[3]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.jd_dtf", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d1), __pyx_ptype_5numpy_ndarray, 1, "d1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d2), __pyx_ptype_5numpy_ndarray, 1, "d2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_6jd_dtf(__pyx_self, __pyx_v_scale, __pyx_v_ndp, __pyx_v_d1, __pyx_v_d2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":216
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_dtf(scale, ndp,             # <<<<<<<<<<<<<<
-- *               np.ndarray[double, ndim=1] d1,
-- *               np.ndarray[double, ndim=1] d2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_6jd_dtf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_ndp, PyArrayObject *__pyx_v_d1, PyArrayObject *__pyx_v_d2) {
--  int __pyx_v_i;
--  int __pyx_v_n;
--  PyArrayObject *__pyx_v_iy = 0;
--  PyArrayObject *__pyx_v_im = 0;
--  PyArrayObject *__pyx_v_id = 0;
--  PyArrayObject *__pyx_v_ihmsf = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_d1;
--  __Pyx_Buffer __pyx_pybuffer_d1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_d2;
--  __Pyx_Buffer __pyx_pybuffer_d2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_id;
--  __Pyx_Buffer __pyx_pybuffer_id;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_ihmsf;
--  __Pyx_Buffer __pyx_pybuffer_ihmsf;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_im;
--  __Pyx_Buffer __pyx_pybuffer_im;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_iy;
--  __Pyx_Buffer __pyx_pybuffer_iy;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  PyArrayObject *__pyx_t_9 = NULL;
--  int __pyx_t_10;
--  int __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_t_13;
--  int __pyx_t_14;
--  int __pyx_t_15;
--  int __pyx_t_16;
--  int __pyx_t_17;
--  int __pyx_t_18;
--  int __pyx_t_19;
--  long __pyx_t_20;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("jd_dtf", 0);
--  __pyx_pybuffer_iy.pybuffer.buf = NULL;
--  __pyx_pybuffer_iy.refcount = 0;
--  __pyx_pybuffernd_iy.data = NULL;
--  __pyx_pybuffernd_iy.rcbuffer = &__pyx_pybuffer_iy;
--  __pyx_pybuffer_im.pybuffer.buf = NULL;
--  __pyx_pybuffer_im.refcount = 0;
--  __pyx_pybuffernd_im.data = NULL;
--  __pyx_pybuffernd_im.rcbuffer = &__pyx_pybuffer_im;
--  __pyx_pybuffer_id.pybuffer.buf = NULL;
--  __pyx_pybuffer_id.refcount = 0;
--  __pyx_pybuffernd_id.data = NULL;
--  __pyx_pybuffernd_id.rcbuffer = &__pyx_pybuffer_id;
--  __pyx_pybuffer_ihmsf.pybuffer.buf = NULL;
--  __pyx_pybuffer_ihmsf.refcount = 0;
--  __pyx_pybuffernd_ihmsf.data = NULL;
--  __pyx_pybuffernd_ihmsf.rcbuffer = &__pyx_pybuffer_ihmsf;
--  __pyx_pybuffer_d1.pybuffer.buf = NULL;
--  __pyx_pybuffer_d1.refcount = 0;
--  __pyx_pybuffernd_d1.data = NULL;
--  __pyx_pybuffernd_d1.rcbuffer = &__pyx_pybuffer_d1;
--  __pyx_pybuffer_d2.pybuffer.buf = NULL;
--  __pyx_pybuffer_d2.refcount = 0;
--  __pyx_pybuffernd_d2.data = NULL;
--  __pyx_pybuffernd_d2.rcbuffer = &__pyx_pybuffer_d2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_d1.rcbuffer->pybuffer, (PyObject*)__pyx_v_d1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_d1.diminfo[0].strides = __pyx_pybuffernd_d1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_d1.diminfo[0].shape = __pyx_pybuffernd_d1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_d2.rcbuffer->pybuffer, (PyObject*)__pyx_v_d2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_d2.diminfo[0].strides = __pyx_pybuffernd_d2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_d2.diminfo[0].shape = __pyx_pybuffernd_d2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":276
-- *     """
-- *     cdef int i
-- *     cdef int n = d1.shape[0]             # <<<<<<<<<<<<<<
-- * 
-- *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)
-- */
--  __pyx_v_n = (__pyx_v_d1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":278
-- *     cdef int n = d1.shape[0]
-- * 
-- *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__intc); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_iy = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_iy = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":279
-- * 
-- *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__intc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_im = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_im.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_im = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":280
-- *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)
-- * 
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
--  __Pyx_GIVEREF(__pyx_t_4);
--  __pyx_t_4 = 0;
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__intc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_2);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_id = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_id.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_id = ((PyArrayObject *)__pyx_t_2);
--  __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":281
-- *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)
-- *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: DUBIOUS}
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __Pyx_INCREF(__pyx_int_4);
--  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4);
--  __Pyx_GIVEREF(__pyx_int_4);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
--  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
--  __pyx_t_3 = 0;
--  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__intc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = ((PyArrayObject *)__pyx_t_1);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ihmsf.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
--      __pyx_v_ihmsf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_ihmsf.diminfo[0].strides = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ihmsf.diminfo[0].shape = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ihmsf.diminfo[1].strides = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ihmsf.diminfo[1].shape = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.shape[1];
--    }
--  }
--  __pyx_t_9 = 0;
--  __pyx_v_ihmsf = ((PyArrayObject *)__pyx_t_1);
--  __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":283
-- *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)
-- * 
-- *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- */
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  if (PyDict_SetItem(__pyx_t_1, __pyx_int_1, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_1);
--  __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":284
-- * 
-- *     warns = {1: DUBIOUS}
-- *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_1);
--  __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":286
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],
-- *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
-- */
--  __pyx_t_10 = __pyx_v_n;
--  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
--    __pyx_v_i = __pyx_t_11;
--
--    /* "astropy/time/erfa_time.pyx":287
-- * 
-- *     for i in range(n):
-- *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],             # <<<<<<<<<<<<<<
-- *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
-- *         check_return(ret, 'eraD2dtf', warns, errs)
-- */
--    __pyx_t_12 = PyBytes_AsString(__pyx_v_scale); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_v_ndp); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--
--    /* "astropy/time/erfa_time.pyx":288
-- *     for i in range(n):
-- *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],
-- *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraD2dtf', warns, errs)
-- * 
-- */
--    __pyx_t_16 = __pyx_v_i;
--    __pyx_t_17 = __pyx_v_i;
--    __pyx_t_18 = __pyx_v_i;
--    __pyx_t_19 = __pyx_v_i;
--    __pyx_t_20 = 0;
--    __pyx_v_ret = eraD2dtf(__pyx_t_12, __pyx_t_13, (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_d1.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_d1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_d2.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_d2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_iy.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuf [...]
--
--    /* "astropy/time/erfa_time.pyx":289
-- *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],
-- *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
-- *         check_return(ret, 'eraD2dtf', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return iy, im, id, ihmsf
-- */
--    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_1);
--    __pyx_t_3 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_2);
--    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
--    __Pyx_GIVEREF(__pyx_t_3);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraD2dtf));
--    PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__eraD2dtf));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraD2dtf));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_2, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_3 = 0;
--    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":291
-- *         check_return(ret, 'eraD2dtf', warns, errs)
-- * 
-- *     return iy, im, id, ihmsf             # <<<<<<<<<<<<<<
-- * 
-- * @cython.wraparound(False)
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_INCREF(((PyObject *)__pyx_v_iy));
--  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_iy));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_iy));
--  __Pyx_INCREF(((PyObject *)__pyx_v_im));
--  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_im));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_im));
--  __Pyx_INCREF(((PyObject *)__pyx_v_id));
--  PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_id));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_id));
--  __Pyx_INCREF(((PyObject *)__pyx_v_ihmsf));
--  PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)__pyx_v_ihmsf));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_ihmsf));
--  __pyx_r = ((PyObject *)__pyx_t_3);
--  __pyx_t_3 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_d1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_d2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ihmsf.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.jd_dtf", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_d1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_d2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ihmsf.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_iy);
--  __Pyx_XDECREF((PyObject *)__pyx_v_im);
--  __Pyx_XDECREF((PyObject *)__pyx_v_id);
--  __Pyx_XDECREF((PyObject *)__pyx_v_ihmsf);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_9dtf_jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_8dtf_jd[] = "\n    int eraDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)\n\n    **  Given:\n    **     scale     char[]  time scale ID (Note 1)\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 2)\n    **     ihr,imn   int     hour, minute\n    **     sec       double  seconds\n    **\n    **  Returned:\n    **     d1,d2     double  2-part Julian Date (Notes 3,4)\n  [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_9dtf_jd = {__Pyx_NAMESTR("dtf_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_9dtf_jd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_8dtf_jd)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_9dtf_jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyObject *__pyx_v_scale = 0;
--  PyArrayObject *__pyx_v_iy = 0;
--  PyArrayObject *__pyx_v_im = 0;
--  PyArrayObject *__pyx_v_id = 0;
--  PyArrayObject *__pyx_v_ihr = 0;
--  PyArrayObject *__pyx_v_imn = 0;
--  PyArrayObject *__pyx_v_sec = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("dtf_jd (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__scale,&__pyx_n_s__iy,&__pyx_n_s__im,&__pyx_n_s__id,&__pyx_n_s__ihr,&__pyx_n_s__imn,&__pyx_n_s__sec,0};
--    PyObject* values[7] = {0,0,0,0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
--        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
--        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__scale)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iy)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__im)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__id)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  4:
--        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ihr)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  5:
--        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__imn)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  6:
--        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sec)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dtf_jd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
--      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
--      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
--    }
--    __pyx_v_scale = values[0];
--    __pyx_v_iy = ((PyArrayObject *)values[1]);
--    __pyx_v_im = ((PyArrayObject *)values[2]);
--    __pyx_v_id = ((PyArrayObject *)values[3]);
--    __pyx_v_ihr = ((PyArrayObject *)values[4]);
--    __pyx_v_imn = ((PyArrayObject *)values[5]);
--    __pyx_v_sec = ((PyArrayObject *)values[6]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.dtf_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ihr), __pyx_ptype_5numpy_ndarray, 1, "ihr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_imn), __pyx_ptype_5numpy_ndarray, 1, "imn", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_5numpy_ndarray, 1, "sec", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_8dtf_jd(__pyx_self, __pyx_v_scale, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_ihr, __pyx_v_imn, __pyx_v_sec);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":295
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def dtf_jd(scale,             # <<<<<<<<<<<<<<
-- *               np.ndarray[int, ndim=1] iy,
-- *               np.ndarray[int, ndim=1] im,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_8dtf_jd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_ihr, PyArrayObject *__pyx_v_imn, PyArrayObject *__pyx_v_sec) {
--  int __pyx_v_i;
--  int __pyx_v_n;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_id;
--  __Pyx_Buffer __pyx_pybuffer_id;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_ihr;
--  __Pyx_Buffer __pyx_pybuffer_ihr;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_im;
--  __Pyx_Buffer __pyx_pybuffer_im;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_imn;
--  __Pyx_Buffer __pyx_pybuffer_imn;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_iy;
--  __Pyx_Buffer __pyx_pybuffer_iy;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_sec;
--  __Pyx_Buffer __pyx_pybuffer_sec;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  char *__pyx_t_11;
--  int __pyx_t_12;
--  int __pyx_t_13;
--  int __pyx_t_14;
--  int __pyx_t_15;
--  int __pyx_t_16;
--  int __pyx_t_17;
--  int __pyx_t_18;
--  int __pyx_t_19;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("dtf_jd", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_iy.pybuffer.buf = NULL;
--  __pyx_pybuffer_iy.refcount = 0;
--  __pyx_pybuffernd_iy.data = NULL;
--  __pyx_pybuffernd_iy.rcbuffer = &__pyx_pybuffer_iy;
--  __pyx_pybuffer_im.pybuffer.buf = NULL;
--  __pyx_pybuffer_im.refcount = 0;
--  __pyx_pybuffernd_im.data = NULL;
--  __pyx_pybuffernd_im.rcbuffer = &__pyx_pybuffer_im;
--  __pyx_pybuffer_id.pybuffer.buf = NULL;
--  __pyx_pybuffer_id.refcount = 0;
--  __pyx_pybuffernd_id.data = NULL;
--  __pyx_pybuffernd_id.rcbuffer = &__pyx_pybuffer_id;
--  __pyx_pybuffer_ihr.pybuffer.buf = NULL;
--  __pyx_pybuffer_ihr.refcount = 0;
--  __pyx_pybuffernd_ihr.data = NULL;
--  __pyx_pybuffernd_ihr.rcbuffer = &__pyx_pybuffer_ihr;
--  __pyx_pybuffer_imn.pybuffer.buf = NULL;
--  __pyx_pybuffer_imn.refcount = 0;
--  __pyx_pybuffernd_imn.data = NULL;
--  __pyx_pybuffernd_imn.rcbuffer = &__pyx_pybuffer_imn;
--  __pyx_pybuffer_sec.pybuffer.buf = NULL;
--  __pyx_pybuffer_sec.refcount = 0;
--  __pyx_pybuffernd_sec.data = NULL;
--  __pyx_pybuffernd_sec.rcbuffer = &__pyx_pybuffer_sec;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ihr.rcbuffer->pybuffer, (PyObject*)__pyx_v_ihr, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_ihr.diminfo[0].strides = __pyx_pybuffernd_ihr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ihr.diminfo[0].shape = __pyx_pybuffernd_ihr.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_imn.rcbuffer->pybuffer, (PyObject*)__pyx_v_imn, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_imn.diminfo[0].strides = __pyx_pybuffernd_imn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_imn.diminfo[0].shape = __pyx_pybuffernd_imn.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sec.rcbuffer->pybuffer, (PyObject*)__pyx_v_sec, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_sec.diminfo[0].strides = __pyx_pybuffernd_sec.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sec.diminfo[0].shape = __pyx_pybuffernd_sec.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":362
-- *     """
-- *     cdef int i
-- *     cdef int n = iy.shape[0]             # <<<<<<<<<<<<<<
-- *     assert (iy.shape[0] == im.shape[0] == id.shape[0] ==
-- *             ihr.shape[0] == imn.shape[0] == sec.shape[0])
-- */
--  __pyx_v_n = (__pyx_v_iy->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":363
-- *     cdef int i
-- *     cdef int n = iy.shape[0]
-- *     assert (iy.shape[0] == im.shape[0] == id.shape[0] ==             # <<<<<<<<<<<<<<
-- *             ihr.shape[0] == imn.shape[0] == sec.shape[0])
-- * 
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_iy->dimensions[0]) == (__pyx_v_im->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_im->dimensions[0]) == (__pyx_v_id->dimensions[0]));
--    if (__pyx_t_1) {
--
--      /* "astropy/time/erfa_time.pyx":364
-- *     cdef int n = iy.shape[0]
-- *     assert (iy.shape[0] == im.shape[0] == id.shape[0] ==
-- *             ihr.shape[0] == imn.shape[0] == sec.shape[0])             # <<<<<<<<<<<<<<
-- * 
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--      __pyx_t_1 = ((__pyx_v_id->dimensions[0]) == (__pyx_v_ihr->dimensions[0]));
--      if (__pyx_t_1) {
--        __pyx_t_1 = ((__pyx_v_ihr->dimensions[0]) == (__pyx_v_imn->dimensions[0]));
--        if (__pyx_t_1) {
--          __pyx_t_1 = ((__pyx_v_imn->dimensions[0]) == (__pyx_v_sec->dimensions[0]));
--        }
--      }
--    }
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":366
-- *             ihr.shape[0] == imn.shape[0] == sec.shape[0])
-- * 
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":367
-- * 
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {3: 'time is after end of day and ' + DUBIOUS,
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":369
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     warns = {3: 'time is after end of day and ' + DUBIOUS,             # <<<<<<<<<<<<<<
-- *              2: 'time is after end of day',
-- *              1: DUBIOUS}
-- */
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_kp_s_13), __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_2, ((PyObject *)__pyx_kp_s_14)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":371
-- *     warns = {3: 'time is after end of day and ' + DUBIOUS,
-- *              2: 'time is after end of day',
-- *              1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'bad year',
-- *             -2: 'bad month',
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":372
-- *              2: 'time is after end of day',
-- *              1: DUBIOUS}
-- *     errs = {-1: 'bad year',             # <<<<<<<<<<<<<<
-- *             -2: 'bad month',
-- *             -3: 'bad day',
-- */
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_15)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_4, ((PyObject *)__pyx_kp_s_17)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_5, ((PyObject *)__pyx_kp_s_18)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_6, ((PyObject *)__pyx_kp_s_19)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":379
-- *             -6: 'bad second (< 0)'}
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
-- *                        &out1[i], &out2[i])
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":380
-- * 
-- *     for i in range(n):
-- *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],             # <<<<<<<<<<<<<<
-- *                        &out1[i], &out2[i])
-- *         check_return(ret, 'eraDtf2d', warns, errs)
-- */
--    __pyx_t_11 = PyBytes_AsString(__pyx_v_scale); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_t_16 = __pyx_v_i;
--    __pyx_t_17 = __pyx_v_i;
--
--    /* "astropy/time/erfa_time.pyx":381
-- *     for i in range(n):
-- *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
-- *                        &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraDtf2d', warns, errs)
-- * 
-- */
--    __pyx_t_18 = __pyx_v_i;
--    __pyx_t_19 = __pyx_v_i;
--    __pyx_v_ret = eraDtf2d(__pyx_t_11, (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_id.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_ihr.rcbuffer->pyb [...]
--
--    /* "astropy/time/erfa_time.pyx":382
-- *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
-- *                        &out1[i], &out2[i])
-- *         check_return(ret, 'eraDtf2d', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_4 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
--    __Pyx_GIVEREF(__pyx_t_4);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraDtf2d));
--    PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_n_s__eraDtf2d));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraDtf2d));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_6, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_6, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_4 = 0;
--    __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":384
-- *         check_return(ret, 'eraDtf2d', warns, errs)
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ihr.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_imn.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sec.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.dtf_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_id.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ihr.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_imn.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sec.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_11tai_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_10tai_tt[] = "\n    int eraTaitt(double tai1, double tai2, double *tt1, double *tt2)\n\n    **  Given:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Note:\n    **\n    **     tai1+tai2 is Julian Date, apportioned in any convenient  [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_11tai_tt = {__Pyx_NAMESTR("tai_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_11tai_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_10tai_tt)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_11tai_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tai_tt (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tai_tt", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tai_tt", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tai_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_10tai_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":389
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_10tai_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tai_tt", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":411
-- *     **     tt1,tt2 follow suit.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":412
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":414
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":415
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":417
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTaitt')
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":418
-- * 
-- *     for i in range(n):
-- *         ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTaitt')
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTaitt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
--
--    /* "astropy/time/erfa_time.pyx":419
-- *     for i in range(n):
-- *         ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTaitt')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTaitt));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTaitt));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTaitt));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":421
-- *         check_return(ret, 'eraTaitt')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tai_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_13tcb_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_12tcb_tdb[] = "\n    int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)\n\n    **  Given:\n    **     tcb1,tcb2  double    TCB as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    **  1) tcb1+tcb2 is Julian Date, apportioned in any conve [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_13tcb_tdb = {__Pyx_NAMESTR("tcb_tdb"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_13tcb_tdb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_12tcb_tdb)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_13tcb_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tcb_tdb (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tcb_tdb", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcb_tdb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tcb_tdb", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tcb_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_12tcb_tdb(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":426
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tcb_tdb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_12tcb_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tcb_tdb", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":467
-- *     """
-- * 
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":468
-- * 
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":470
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":471
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":473
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTcbtdb')
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":474
-- * 
-- *     for i in range(n):
-- *         ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTcbtdb')
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTcbtdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out [...]
--
--    /* "astropy/time/erfa_time.pyx":475
-- *     for i in range(n):
-- *         ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTcbtdb')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTcbtdb));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTcbtdb));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTcbtdb));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":477
-- *         check_return(ret, 'eraTcbtdb')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tcb_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_15tcg_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_14tcg_tt[] = "\n   int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)\n\n   **  Given:\n   **     tcg1,tcg2  double    TCG as a 2-part Julian Date\n   **\n   **  Returned:\n   **     tt1,tt2    double    TT as a 2-part Julian Date\n   **\n   **  Returned (function value):\n   **                int       status:  0 = OK\n    ";
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_15tcg_tt = {__Pyx_NAMESTR("tcg_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_15tcg_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_14tcg_tt)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_15tcg_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tcg_tt (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tcg_tt", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcg_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tcg_tt", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tcg_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_14tcg_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":482
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tcg_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_14tcg_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tcg_tt", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":498
-- *     """
-- * 
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":499
-- * 
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":501
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":502
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":504
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTcgtt')
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":505
-- * 
-- *     for i in range(n):
-- *         ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTcgtt')
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTcgtt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
--
--    /* "astropy/time/erfa_time.pyx":506
-- *     for i in range(n):
-- *         ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTcgtt')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTcgtt));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTcgtt));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTcgtt));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":508
-- *         check_return(ret, 'eraTcgtt')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tcg_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_17tdb_tcb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_16tdb_tcb[] = "\n    int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)\n\n    **  Given:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tcb1,tcb2  double    TCB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_17tdb_tcb = {__Pyx_NAMESTR("tdb_tcb"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_17tdb_tcb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_16tdb_tcb)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_17tdb_tcb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tdb_tcb (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tdb_tcb", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tdb_tcb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tdb_tcb", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tcb", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_16tdb_tcb(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":513
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tdb_tcb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_16tdb_tcb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tdb_tcb", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":528
-- *     **                int       status:  0 = OK
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":529
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":531
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":532
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":534
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTdbtcb')
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":535
-- * 
-- *     for i in range(n):
-- *         ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTdbtcb')
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTdbtcb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out [...]
--
--    /* "astropy/time/erfa_time.pyx":536
-- *     for i in range(n):
-- *         ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTdbtcb')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTdbtcb));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTdbtcb));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTdbtcb));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":538
-- *         check_return(ret, 'eraTdbtcb')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tcb", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_19tt_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_18tt_tai[] = "\n    int eraTttai(double tt1, double tt2, double *tai1, double *tai2)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_19tt_tai = {__Pyx_NAMESTR("tt_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_19tt_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_18tt_tai)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_19tt_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tt_tai (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tt_tai", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tt_tai", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_18tt_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":543
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_18tt_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tt_tai", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":558
-- *     **                int       status:  0 = OK
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":559
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":561
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":562
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":564
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTttai')
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":565
-- * 
-- *     for i in range(n):
-- *         ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTttai')
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTttai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
--
--    /* "astropy/time/erfa_time.pyx":566
-- *     for i in range(n):
-- *         ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTttai')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTttai));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTttai));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTttai));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":568
-- *         check_return(ret, 'eraTttai')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_21tt_tcg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_20tt_tcg[] = "\n    int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2)\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tcg1,tcg2  double    TCG as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_21tt_tcg = {__Pyx_NAMESTR("tt_tcg"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_21tt_tcg, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_20tt_tcg)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_21tt_tcg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tt_tcg (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tt_tcg", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tcg") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tt_tcg", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_20tt_tcg(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":573
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tcg(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_20tt_tcg(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tt_tcg", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":587
-- *     **                int       status:  0 = OK
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":588
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":590
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":591
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":593
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTttcg')
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":594
-- * 
-- *     for i in range(n):
-- *         ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTttcg')
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTttcg((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
--
--    /* "astropy/time/erfa_time.pyx":595
-- *     for i in range(n):
-- *         ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTttcg')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTttcg));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTttcg));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTttcg));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":597
-- *         check_return(ret, 'eraTttcg')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_23utc_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_22utc_tai[] = "\n    int eraUtctai(double utc1, double utc2, double *tai1, double *tai2)\n\n    **  Given:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)\n    **\n    **  Returned:\n    **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 5)\n    **\n    **  Returned (function value):\n    **                int      status: +1 = dubious year (Note 3)\n    **                                  0 = OK\n   [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_23utc_tai = {__Pyx_NAMESTR("utc_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_23utc_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_22utc_tai)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_23utc_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("utc_tai (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("utc_tai", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "utc_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("utc_tai", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.utc_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_22utc_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":602
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def utc_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_22utc_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("utc_tai", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":642
-- *     **
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":643
-- *     """
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":645
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":646
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: DUBIOUS}
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":648
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- */
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":649
-- * 
-- *     warns = {1: DUBIOUS}
-- *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":651
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUtctai', warns, errs)
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":652
-- * 
-- *     for i in range(n):
-- *         ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraUtctai', warns, errs)
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraUtctai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out [...]
--
--    /* "astropy/time/erfa_time.pyx":653
-- *     for i in range(n):
-- *         ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUtctai', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUtctai));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraUtctai));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUtctai));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":655
-- *         check_return(ret, 'eraUtctai', warns, errs)
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.utc_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_25tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_24tai_utc[] = "\n    int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2)\n\n    **  Given:\n    **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 1)\n    **\n    **  Returned:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-3)\n    **\n    **  Returned (function value):\n    **                int      status: +1 = dubious year (Note 4)\n    **                                  0 = OK\n   [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_25tai_utc = {__Pyx_NAMESTR("tai_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_25tai_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_24tai_utc)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_25tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tai_utc (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tai_utc", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tai_utc", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_24tai_utc(__pyx_self, __pyx_v_in1, __pyx_v_in2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":660
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_utc(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_24tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tai_utc", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":699
-- *     **     to be trusted.  See eraDat for further details.
-- *         """
-- *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":700
-- *         """
-- *     assert in1.shape[0] == in2.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":702
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":703
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: DUBIOUS}
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":705
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- */
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":706
-- * 
-- *     warns = {1: DUBIOUS}
-- *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":708
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTaiutc', warns, errs)
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":709
-- * 
-- *     for i in range(n):
-- *         ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTaiutc', warns, errs)
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_v_ret = eraTaiutc((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out [...]
--
--    /* "astropy/time/erfa_time.pyx":710
-- *     for i in range(n):
-- *         ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTaiutc', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--    __Pyx_GIVEREF(__pyx_t_5);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTaiutc));
--    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTaiutc));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTaiutc));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":712
-- *         check_return(ret, 'eraTaiutc', warns, errs)
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_27tai_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_26tai_ut1[] = "\n    int eraTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)\n\n    **  Given:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **     dta        double    UT1-TAI in seconds\n    **\n    **  Returned:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    * [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_27tai_ut1 = {__Pyx_NAMESTR("tai_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_27tai_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_26tai_ut1)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_27tai_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tai_ut1 (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tai_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_26tai_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":717
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_26tai_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tai_ut1", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":744
-- *     **     available from IERS tabulations.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":745
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":747
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":748
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":750
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTaiut1')
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":751
-- * 
-- *     for i in range(n):
-- *         ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTaiut1')
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraTaiut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuf [...]
--
--    /* "astropy/time/erfa_time.pyx":752
-- *     for i in range(n):
-- *         ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTaiut1')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTaiut1));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTaiut1));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTaiut1));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":754
-- *         check_return(ret, 'eraTaiut1')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tai_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_29ut1_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_28ut1_tai[] = "\n    int eraUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)\n\n    **  Given:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **     dta        double    UT1-TAI in seconds\n    **\n    **  Returned:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    * [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_29ut1_tai = {__Pyx_NAMESTR("ut1_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_29ut1_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_28ut1_tai)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_29ut1_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("ut1_tai (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_28ut1_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":759
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_28ut1_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("ut1_tai", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":786
-- *     **     available from IERS tabulations.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":787
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":789
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":790
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":792
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUt1tai')
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":793
-- * 
-- *     for i in range(n):
-- *         ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraUt1tai')
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraUt1tai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuf [...]
--
--    /* "astropy/time/erfa_time.pyx":794
-- *     for i in range(n):
-- *         ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUt1tai')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUt1tai));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUt1tai));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUt1tai));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":796
-- *         check_return(ret, 'eraUt1tai')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_31tt_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_30tt_ut1[] = "\n    int eraTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **     dt         double    TT-UT1 in seconds\n    **\n    **  Returned:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n     [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_31tt_ut1 = {__Pyx_NAMESTR("tt_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_31tt_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_30tt_ut1)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_31tt_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tt_ut1 (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_30tt_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":801
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_30tt_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tt_ut1", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":827
-- *     **  2) The argument dt is classical Delta T.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":828
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":830
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":831
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":833
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTtut1')
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":834
-- * 
-- *     for i in range(n):
-- *         ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTtut1')
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraTtut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
--
--    /* "astropy/time/erfa_time.pyx":835
-- *     for i in range(n):
-- *         ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTtut1')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTtut1));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTtut1));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTtut1));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":837
-- *         check_return(ret, 'eraTtut1')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_33ut1_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_32ut1_tt[] = "\n    int eraUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)\n\n    **  Given:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **     dt         double    TT-UT1 in seconds\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n     [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_33ut1_tt = {__Pyx_NAMESTR("ut1_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_33ut1_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_32ut1_tt)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_33ut1_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("ut1_tt (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_32ut1_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":842
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_32ut1_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("ut1_tt", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":868
-- *     **  2) The argument dt is classical Delta T.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":869
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":871
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":872
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":874
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUt1tt')
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":875
-- * 
-- *     for i in range(n):
-- *         ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraUt1tt')
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraUt1tt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
--
--    /* "astropy/time/erfa_time.pyx":876
-- *     for i in range(n):
-- *         ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUt1tt')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUt1tt));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUt1tt));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUt1tt));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":878
-- *         check_return(ret, 'eraUt1tt')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_35tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_34tdb_tt[] = "\n    int eraTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)\n\n    **  Given:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **     dtr        double    TDB-TT in seconds\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_35tdb_tt = {__Pyx_NAMESTR("tdb_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_35tdb_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_34tdb_tt)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_35tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tdb_tt (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tdb_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_34tdb_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":883
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tdb_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_34tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tdb_tt", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":918
-- *     **     JPL solar system ephemerides.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":919
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":921
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":922
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":924
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTdbtt')
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":925
-- * 
-- *     for i in range(n):
-- *         ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTdbtt')
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraTdbtt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
--
--    /* "astropy/time/erfa_time.pyx":926
-- *     for i in range(n):
-- *         ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTdbtt')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTdbtt));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTdbtt));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTdbtt));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":928
-- *         check_return(ret, 'eraTdbtt')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_37tt_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_36tt_tdb[] = "\n    int eraTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **     dtr        double    TDB-TT in seconds\n    **\n    **  Returned:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_37tt_tdb = {__Pyx_NAMESTR("tt_tdb"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_37tt_tdb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_36tt_tdb)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_37tt_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("tt_tdb (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tdb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 936; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_36tt_tdb(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":933
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tdb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_36tt_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("tt_tdb", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":968
-- *     **     solar system ephemerides.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":969
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":971
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":972
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":974
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTttdb')
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":975
-- * 
-- *     for i in range(n):
-- *         ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraTttdb')
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraTttdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
--
--    /* "astropy/time/erfa_time.pyx":976
-- *     for i in range(n):
-- *         ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraTttdb')             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTttdb));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTttdb));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTttdb));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":978
-- *         check_return(ret, 'eraTttdb')
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_39ut1_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_38ut1_utc[] = "\n    int eraUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)\n\n    **  Given:\n    **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 1)\n    **     dut1       double   Delta UT1: UT1-UTC in seconds (Note 2)\n    **\n    **  Returned:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 3,4)\n    **\n    **  Returned (function value):\n    **                int      st [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_39ut1_utc = {__Pyx_NAMESTR("ut1_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_39ut1_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_38ut1_utc)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_39ut1_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("ut1_utc (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 986; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_38ut1_utc(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":983
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_utc(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_38ut1_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("ut1_utc", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":1029
-- *     **     to be trusted.  See eraDat for further details.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":1030
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1032
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1033
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: DUBIOUS}
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1035
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- */
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1036
-- * 
-- *     warns = {1: DUBIOUS}
-- *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1038
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUt1utc', warns, errs)
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":1039
-- * 
-- *     for i in range(n):
-- *         ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraUt1utc', warns, errs)
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraUt1utc((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuf [...]
--
--    /* "astropy/time/erfa_time.pyx":1040
-- *     for i in range(n):
-- *         ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUt1utc', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUt1utc));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUt1utc));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUt1utc));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":1042
-- *         check_return(ret, 'eraUt1utc', warns, errs)
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_41utc_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_40utc_ut1[] = "\n    int eraUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)\n\n    **  Given:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)\n    **     dut1       double   Delta UT1 = UT1-UTC in seconds (Note 5)\n    **\n    **  Returned:\n    **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 6)\n    **\n    **  Returned (function value):\n    **                int      s [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_41utc_ut1 = {__Pyx_NAMESTR("utc_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_41utc_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_40utc_ut1)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_41utc_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_dt = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("utc_ut1 (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__dt,0};
--    PyObject* values[3] = {0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "utc_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_dt = ((PyArrayObject *)values[2]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.utc_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_40utc_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1047
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def utc_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_40utc_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out1 = 0;
--  PyArrayObject *__pyx_v_out2 = 0;
--  PyObject *__pyx_v_warns = NULL;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
--  __Pyx_Buffer __pyx_pybuffer_dt;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out1;
--  __Pyx_Buffer __pyx_pybuffer_out1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out2;
--  __Pyx_Buffer __pyx_pybuffer_out2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  PyArrayObject *__pyx_t_8 = NULL;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  unsigned int __pyx_t_15;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("utc_ut1", 0);
--  __pyx_pybuffer_out1.pybuffer.buf = NULL;
--  __pyx_pybuffer_out1.refcount = 0;
--  __pyx_pybuffernd_out1.data = NULL;
--  __pyx_pybuffernd_out1.rcbuffer = &__pyx_pybuffer_out1;
--  __pyx_pybuffer_out2.pybuffer.buf = NULL;
--  __pyx_pybuffer_out2.refcount = 0;
--  __pyx_pybuffernd_out2.data = NULL;
--  __pyx_pybuffernd_out2.rcbuffer = &__pyx_pybuffer_out2;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_dt.pybuffer.buf = NULL;
--  __pyx_pybuffer_dt.refcount = 0;
--  __pyx_pybuffernd_dt.data = NULL;
--  __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __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];
--
--  /* "astropy/time/erfa_time.pyx":1097
-- *     **     to be trusted.  See eraDat for further details.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_dt->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":1098
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1100
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1101
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: DUBIOUS}
-- */
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--  __Pyx_GIVEREF(__pyx_t_6);
--  __pyx_t_6 = 0;
--  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_8 = 0;
--  __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1103
-- *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
-- * 
-- *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- */
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_v_warns = ((PyObject*)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1104
-- * 
-- *     warns = {1: DUBIOUS}
-- *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1106
-- *     errs = {-1: 'unacceptable date'}
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUtcut1', warns, errs)
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":1107
-- * 
-- *     for i in range(n):
-- *         ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
-- *         check_return(ret, 'eraUtcut1', warns, errs)
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    __pyx_t_15 = __pyx_v_i;
--    __pyx_v_ret = eraUtcut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuf [...]
--
--    /* "astropy/time/erfa_time.pyx":1108
-- *     for i in range(n):
-- *         ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-- *         check_return(ret, 'eraUtcut1', warns, errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return out1, out2
-- */
--    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
--    __Pyx_GIVEREF(__pyx_t_6);
--    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUtcut1));
--    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUtcut1));
--    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUtcut1));
--    __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--    PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_warns));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--    __Pyx_INCREF(((PyObject *)__pyx_v_errs));
--    PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_errs));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
--    __pyx_t_6 = 0;
--    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_6);
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  }
--
--  /* "astropy/time/erfa_time.pyx":1110
-- *         check_return(ret, 'eraUtcut1', warns, errs)
-- * 
-- *     return out1, out2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out1));
--  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_out2));
--  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_out2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_out2));
--  __pyx_r = ((PyObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.utc_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_out2);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_43d_tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_42d_tdb_tt[] = "\n    compute DTR = TDB-TT\n    double eraDtdb(double date1, double date2, double ut,\n                   double elong, double u, double v)\n\n    **  Given:\n    **     date1,date2   double  date, TDB (Notes 1-3)\n    **     ut            double  universal time (UT1, fraction of one day)\n    **     elong         double  longitude (east positive, radians)\n    **     u             double  distance from Earth spin axis (km) [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_43d_tdb_tt = {__Pyx_NAMESTR("d_tdb_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_43d_tdb_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_42d_tdb_tt)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_43d_tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_in1 = 0;
--  PyArrayObject *__pyx_v_in2 = 0;
--  PyArrayObject *__pyx_v_ut = 0;
--  PyObject *__pyx_v_elong = 0;
--  PyObject *__pyx_v_u = 0;
--  PyObject *__pyx_v_v = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("d_tdb_tt (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__in1,&__pyx_n_s__in2,&__pyx_n_s__ut,&__pyx_n_s__elong,&__pyx_n_s__u,&__pyx_n_s__v,0};
--    PyObject* values[6] = {0,0,0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
--        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ut)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__elong)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  4:
--        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__u)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  5:
--        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "d_tdb_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
--      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
--    }
--    __pyx_v_in1 = ((PyArrayObject *)values[0]);
--    __pyx_v_in2 = ((PyArrayObject *)values[1]);
--    __pyx_v_ut = ((PyArrayObject *)values[2]);
--    __pyx_v_elong = values[3];
--    __pyx_v_u = values[4];
--    __pyx_v_v = values[5];
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.d_tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ut), __pyx_ptype_5numpy_ndarray, 1, "ut", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_42d_tdb_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_ut, __pyx_v_elong, __pyx_v_u, __pyx_v_v);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1115
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def d_tdb_tt(np.ndarray[double, ndim=1] in1,             # <<<<<<<<<<<<<<
-- *              np.ndarray[double, ndim=1] in2,
-- *              np.ndarray[double, ndim=1] ut,
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_42d_tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_ut, PyObject *__pyx_v_elong, PyObject *__pyx_v_u, PyObject *__pyx_v_v) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_out = 0;
--  double __pyx_v_c_elong;
--  double __pyx_v_c_u;
--  double __pyx_v_c_v;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in1;
--  __Pyx_Buffer __pyx_pybuffer_in1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_in2;
--  __Pyx_Buffer __pyx_pybuffer_in2;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_out;
--  __Pyx_Buffer __pyx_pybuffer_out;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_ut;
--  __Pyx_Buffer __pyx_pybuffer_ut;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  double __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  unsigned int __pyx_t_13;
--  unsigned int __pyx_t_14;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("d_tdb_tt", 0);
--  __pyx_pybuffer_out.pybuffer.buf = NULL;
--  __pyx_pybuffer_out.refcount = 0;
--  __pyx_pybuffernd_out.data = NULL;
--  __pyx_pybuffernd_out.rcbuffer = &__pyx_pybuffer_out;
--  __pyx_pybuffer_in1.pybuffer.buf = NULL;
--  __pyx_pybuffer_in1.refcount = 0;
--  __pyx_pybuffernd_in1.data = NULL;
--  __pyx_pybuffernd_in1.rcbuffer = &__pyx_pybuffer_in1;
--  __pyx_pybuffer_in2.pybuffer.buf = NULL;
--  __pyx_pybuffer_in2.refcount = 0;
--  __pyx_pybuffernd_in2.data = NULL;
--  __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
--  __pyx_pybuffer_ut.pybuffer.buf = NULL;
--  __pyx_pybuffer_ut.refcount = 0;
--  __pyx_pybuffernd_ut.data = NULL;
--  __pyx_pybuffernd_ut.rcbuffer = &__pyx_pybuffer_ut;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ut.rcbuffer->pybuffer, (PyObject*)__pyx_v_ut, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_ut.diminfo[0].strides = __pyx_pybuffernd_ut.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ut.diminfo[0].shape = __pyx_pybuffernd_ut.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":1221
-- *     **     TCB and hence between TT and TDB.
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == ut.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  __pyx_t_1 = ((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0]));
--  if (__pyx_t_1) {
--    __pyx_t_1 = ((__pyx_v_in2->dimensions[0]) == (__pyx_v_ut->dimensions[0]));
--  }
--  if (unlikely(!__pyx_t_1)) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":1222
-- *     """
-- *     assert in1.shape[0] == in2.shape[0] == ut.shape[0]
-- *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_in1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1224
-- *     cdef unsigned n = in1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef double c_elong = elong
-- *     cdef double c_u = u
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
--  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_6);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_out = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__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];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
--  __pyx_t_6 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1225
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
-- *     cdef double c_elong = elong             # <<<<<<<<<<<<<<
-- *     cdef double c_u = u
-- *     cdef double c_v = v
-- */
--  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_elong); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_c_elong = __pyx_t_8;
--
--  /* "astropy/time/erfa_time.pyx":1226
-- *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
-- *     cdef double c_elong = elong
-- *     cdef double c_u = u             # <<<<<<<<<<<<<<
-- *     cdef double c_v = v
-- * 
-- */
--  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_u); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_c_u = __pyx_t_8;
--
--  /* "astropy/time/erfa_time.pyx":1227
-- *     cdef double c_elong = elong
-- *     cdef double c_u = u
-- *     cdef double c_v = v             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_c_v = __pyx_t_8;
--
--  /* "astropy/time/erfa_time.pyx":1229
-- *     cdef double c_v = v
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
-- *     return out
-- */
--  __pyx_t_9 = __pyx_v_n;
--  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
--    __pyx_v_i = __pyx_t_10;
--
--    /* "astropy/time/erfa_time.pyx":1230
-- * 
-- *     for i in range(n):
-- *         out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)             # <<<<<<<<<<<<<<
-- *     return out
-- * 
-- */
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    __pyx_t_13 = __pyx_v_i;
--    __pyx_t_14 = __pyx_v_i;
--    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_out.diminfo[0].strides) = eraDtdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ut.rcbuffer->pybuffer.buf,  [...]
--  }
--
--  /* "astropy/time/erfa_time.pyx":1231
-- *     for i in range(n):
-- *         out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
-- *     return out             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_out));
--  __pyx_r = ((PyObject *)__pyx_v_out);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_XDECREF(__pyx_t_6);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ut.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.d_tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_in2.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ut.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_out);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_45era_af2a(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_44era_af2a[] = "\n    int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)\n\n    **  Given:\n    **     s         char    sign:  '-' = negative, otherwise positive\n    **     ideg      int     degrees\n    **     iamin     int     arcminutes\n    **     asec      double  arcseconds\n    **\n    **  Returned:\n    **     rad       double  angle in radians\n    **\n    **  Returned (function value):\n    **               int  [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_45era_af2a = {__Pyx_NAMESTR("era_af2a"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_45era_af2a, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_44era_af2a)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_45era_af2a(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyObject *__pyx_v_sign = 0;
--  PyObject *__pyx_v_ideg = 0;
--  PyObject *__pyx_v_iamin = 0;
--  PyObject *__pyx_v_asec = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("era_af2a (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sign,&__pyx_n_s__ideg,&__pyx_n_s__iamin,&__pyx_n_s__asec,0};
--    PyObject* values[4] = {0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sign)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ideg)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iamin)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__asec)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "era_af2a") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--    }
--    __pyx_v_sign = values[0];
--    __pyx_v_ideg = values[1];
--    __pyx_v_iamin = values[2];
--    __pyx_v_asec = values[3];
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.era_af2a", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_44era_af2a(__pyx_self, __pyx_v_sign, __pyx_v_ideg, __pyx_v_iamin, __pyx_v_asec);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1234
-- * 
-- * 
-- * def era_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
-- *     """
-- *     int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_44era_af2a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sign, PyObject *__pyx_v_ideg, PyObject *__pyx_v_iamin, PyObject *__pyx_v_asec) {
--  double __pyx_v_rad;
--  PyObject *__pyx_v_s = NULL;
--  PyObject *__pyx_v_warns = NULL;
--  int __pyx_v_ret;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  char __pyx_t_3;
--  int __pyx_t_4;
--  int __pyx_t_5;
--  double __pyx_t_6;
--  PyObject *__pyx_t_7 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("era_af2a", 0);
--
--  /* "astropy/time/erfa_time.pyx":1264
-- *     """
-- *     cdef double rad
-- *     s = ord(sign)             # <<<<<<<<<<<<<<
-- * 
-- *     warns = {1: 'ideg outside range 0-359',
-- */
--  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_INCREF(__pyx_v_sign);
--  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sign);
--  __Pyx_GIVEREF(__pyx_v_sign);
--  __pyx_t_2 = PyObject_Call(__pyx_builtin_ord, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  __pyx_v_s = __pyx_t_2;
--  __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1266
-- *     s = ord(sign)
-- * 
-- *     warns = {1: 'ideg outside range 0-359',             # <<<<<<<<<<<<<<
-- *              2: 'iamin outside range 0-59',
-- *              3: 'asec outside range 0-59.999...'}
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyDict_SetItem(__pyx_t_2, __pyx_int_1, ((PyObject *)__pyx_kp_s_20)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_2, __pyx_int_2, ((PyObject *)__pyx_kp_s_21)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_2, __pyx_int_3, ((PyObject *)__pyx_kp_s_22)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_warns = ((PyObject*)__pyx_t_2);
--  __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1270
-- *              3: 'asec outside range 0-59.999...'}
-- * 
-- *     ret = eraAf2a(s, ideg, iamin, asec, &rad)             # <<<<<<<<<<<<<<
-- *     check_return(ret, 'eraAf2a', warns)
-- * 
-- */
--  __pyx_t_3 = __Pyx_PyInt_AsChar(__pyx_v_s); if (unlikely((__pyx_t_3 == (char)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_v_ideg); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_v_iamin); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_asec); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_ret = eraAf2a(__pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, (&__pyx_v_rad));
--
--  /* "astropy/time/erfa_time.pyx":1271
-- * 
-- *     ret = eraAf2a(s, ideg, iamin, asec, &rad)
-- *     check_return(ret, 'eraAf2a', warns)             # <<<<<<<<<<<<<<
-- * 
-- *     return rad
-- */
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_1 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_7);
--  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __Pyx_INCREF(((PyObject *)__pyx_n_s__eraAf2a));
--  PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_n_s__eraAf2a));
--  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraAf2a));
--  __Pyx_INCREF(((PyObject *)__pyx_v_warns));
--  PyTuple_SET_ITEM(__pyx_t_7, 2, ((PyObject *)__pyx_v_warns));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1273
-- *     check_return(ret, 'eraAf2a', warns)
-- * 
-- *     return rad             # <<<<<<<<<<<<<<
-- * 
-- * def era_gd2gc(n, elong, phi, height):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_rad); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_7);
--  __Pyx_AddTraceback("astropy.time.erfa_time.era_af2a", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF(__pyx_v_s);
--  __Pyx_XDECREF(__pyx_v_warns);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_47era_gd2gc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_46era_gd2gc[] = "\n    Wrap\n    int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])\n\n    **  Given:\n    **     n       int        ellipsoid identifier (Note 1)\n    **     elong   double     longitude (radians, east +ve)\n    **     phi     double     latitude (geodetic, radians, Note 3)\n    **     height  double     height above ellipsoid (geodetic, Notes 2,3)\n    **\n    **  Returned:\n    **     xyz     dou [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_47era_gd2gc = {__Pyx_NAMESTR("era_gd2gc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_47era_gd2gc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_46era_gd2gc)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_47era_gd2gc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyObject *__pyx_v_n = 0;
--  PyObject *__pyx_v_elong = 0;
--  PyObject *__pyx_v_phi = 0;
--  PyObject *__pyx_v_height = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("era_gd2gc (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__elong,&__pyx_n_s__phi,&__pyx_n_s__height,0};
--    PyObject* values[4] = {0,0,0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__n)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__elong)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  2:
--        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__phi)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--        case  3:
--        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__height)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "era_gd2gc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
--      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
--    }
--    __pyx_v_n = values[0];
--    __pyx_v_elong = values[1];
--    __pyx_v_phi = values[2];
--    __pyx_v_height = values[3];
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.era_gd2gc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_46era_gd2gc(__pyx_self, __pyx_v_n, __pyx_v_elong, __pyx_v_phi, __pyx_v_height);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1275
-- *     return rad
-- * 
-- * def era_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
-- *     """
-- *     Wrap
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_46era_gd2gc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_elong, PyObject *__pyx_v_phi, PyObject *__pyx_v_height) {
--  PyArrayObject *__pyx_v_xyz = 0;
--  PyObject *__pyx_v_errs = NULL;
--  int __pyx_v_ret;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_xyz;
--  __Pyx_Buffer __pyx_pybuffer_xyz;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyArrayObject *__pyx_t_5 = NULL;
--  int __pyx_t_6;
--  double __pyx_t_7;
--  double __pyx_t_8;
--  double __pyx_t_9;
--  long __pyx_t_10;
--  int __pyx_t_11;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("era_gd2gc", 0);
--  __pyx_pybuffer_xyz.pybuffer.buf = NULL;
--  __pyx_pybuffer_xyz.refcount = 0;
--  __pyx_pybuffernd_xyz.data = NULL;
--  __pyx_pybuffernd_xyz.rcbuffer = &__pyx_pybuffer_xyz;
--
--  /* "astropy/time/erfa_time.pyx":1319
-- *     **  4) The inverse transformation is performed in the function eraGc2gd.
-- *     """
-- *     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     errs = {-1: 'illegal identifier',
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_23), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_xyz.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_xyz = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_xyz.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_xyz.diminfo[0].strides = __pyx_pybuffernd_xyz.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_xyz.diminfo[0].shape = __pyx_pybuffernd_xyz.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_5 = 0;
--  __pyx_v_xyz = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1321
-- *     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)
-- * 
-- *     errs = {-1: 'illegal identifier',             # <<<<<<<<<<<<<<
-- *              -2: 'illegal case'}
-- * 
-- */
--  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
--  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_24)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_25)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_v_errs = ((PyObject*)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1324
-- *              -2: 'illegal case'}
-- * 
-- *     ret = eraGd2gc(n, elong, phi, height, &xyz[0])             # <<<<<<<<<<<<<<
-- *     check_return(ret, 'eraGd2gc', errors=errs)
-- * 
-- */
--  __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_n); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_elong); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_phi); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_height); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_10 = 0;
--  __pyx_t_11 = -1;
--  if (__pyx_t_10 < 0) {
--    __pyx_t_10 += __pyx_pybuffernd_xyz.diminfo[0].shape;
--    if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0;
--  } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_xyz.diminfo[0].shape)) __pyx_t_11 = 0;
--  if (unlikely(__pyx_t_11 != -1)) {
--    __Pyx_RaiseBufferIndexError(__pyx_t_11);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_v_ret = eraGd2gc(__pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_xyz.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_xyz.diminfo[0].strides))));
--
--  /* "astropy/time/erfa_time.pyx":1325
-- * 
-- *     ret = eraGd2gc(n, elong, phi, height, &xyz[0])
-- *     check_return(ret, 'eraGd2gc', errors=errs)             # <<<<<<<<<<<<<<
-- * 
-- *     return xyz
-- */
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_1 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __Pyx_INCREF(((PyObject *)__pyx_n_s__eraGd2gc));
--  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__eraGd2gc));
--  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraGd2gc));
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__errors), ((PyObject *)__pyx_v_errs)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1327
-- *     check_return(ret, 'eraGd2gc', errors=errs)
-- * 
-- *     return xyz             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_xyz));
--  __pyx_r = ((PyObject *)__pyx_v_xyz);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xyz.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.era_gd2gc", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xyz.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_xyz);
--  __Pyx_XDECREF(__pyx_v_errs);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_49jd_julian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_48jd_julian_epoch[] = " Wrap double eraEpj(double dj1, double dj2)\n    **  Julian Date to Julian Epoch.\n\n    **  Given:\n    **     dj1,dj2    double     Julian Date (see note)\n    **\n    **  Returned (function value):\n    **                double     Julian Epoch\n    **\n    **  Note:\n    **\n    **     The Julian Date is supplied in two pieces, in the usual ERFA\n    **     manner, which is designed to preserve time resolution.   [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_49jd_julian_epoch = {__Pyx_NAMESTR("jd_julian_epoch"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_49jd_julian_epoch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_48jd_julian_epoch)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_49jd_julian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_jd1 = 0;
--  PyArrayObject *__pyx_v_jd2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("jd_julian_epoch (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__jd1,&__pyx_n_s__jd2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jd1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jd2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("jd_julian_epoch", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_julian_epoch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_jd1 = ((PyArrayObject *)values[0]);
--    __pyx_v_jd2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("jd_julian_epoch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.jd_julian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd1), __pyx_ptype_5numpy_ndarray, 1, "jd1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd2), __pyx_ptype_5numpy_ndarray, 1, "jd2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_48jd_julian_epoch(__pyx_self, __pyx_v_jd1, __pyx_v_jd2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1332
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
-- *                     np.ndarray[double, ndim=1] jd2):
-- *     """ Wrap double eraEpj(double dj1, double dj2)
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_48jd_julian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_epd = 0;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_epd;
--  __Pyx_Buffer __pyx_pybuffer_epd;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd1;
--  __Pyx_Buffer __pyx_pybuffer_jd1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd2;
--  __Pyx_Buffer __pyx_pybuffer_jd2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  unsigned int __pyx_t_7;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("jd_julian_epoch", 0);
--  __pyx_pybuffer_epd.pybuffer.buf = NULL;
--  __pyx_pybuffer_epd.refcount = 0;
--  __pyx_pybuffernd_epd.data = NULL;
--  __pyx_pybuffernd_epd.rcbuffer = &__pyx_pybuffer_epd;
--  __pyx_pybuffer_jd1.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd1.refcount = 0;
--  __pyx_pybuffernd_jd1.data = NULL;
--  __pyx_pybuffernd_jd1.rcbuffer = &__pyx_pybuffer_jd1;
--  __pyx_pybuffer_jd2.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd2.refcount = 0;
--  __pyx_pybuffernd_jd2.data = NULL;
--  __pyx_pybuffernd_jd2.rcbuffer = &__pyx_pybuffer_jd2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":1351
-- *     **     (J2000.0).
-- *     """
-- *     assert jd1.shape[0] == jd2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = jd1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_jd1->dimensions[0]) == (__pyx_v_jd2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":1352
-- *     """
-- *     assert jd1.shape[0] == jd2.shape[0]
-- *     cdef unsigned n = jd1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_jd1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1354
-- *     cdef unsigned n = jd1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_epd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_epd = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1356
-- *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         epd[i] = eraEpj(jd1[i], jd2[i])
-- *     return epd
-- */
--  __pyx_t_7 = __pyx_v_n;
--  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
--    __pyx_v_i = __pyx_t_8;
--
--    /* "astropy/time/erfa_time.pyx":1357
-- * 
-- *     for i in range(n):
-- *         epd[i] = eraEpj(jd1[i], jd2[i])             # <<<<<<<<<<<<<<
-- *     return epd
-- * 
-- */
--    __pyx_t_9 = __pyx_v_i;
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_epd.diminfo[0].strides) = eraEpj((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_jd1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_jd2.diminfo[0].strides)));
--  }
--
--  /* "astropy/time/erfa_time.pyx":1358
-- *     for i in range(n):
-- *         epd[i] = eraEpj(jd1[i], jd2[i])
-- *     return epd             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_epd));
--  __pyx_r = ((PyObject *)__pyx_v_epd);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.jd_julian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_epd);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_51julian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_50julian_epoch_jd[] = " Wrap void eraEpj2jd(double epj, double *djm0, double *djm)\n    **  Julian Epoch to Julian Date.\n    **  Given:\n    **     epj      double    Julian Epoch (e.g. 1996.8D0)\n    **\n    **  Returned:\n    **     djm0     double    MJD zero-point: always 2400000.5\n    **     djm      double    Modified Julian Date\n    ";
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_51julian_epoch_jd = {__Pyx_NAMESTR("julian_epoch_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_51julian_epoch_jd, METH_O, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_50julian_epoch_jd)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_51julian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd) {
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("julian_epoch_jd (wrapper)", 0);
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_epd), __pyx_ptype_5numpy_ndarray, 1, "epd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_50julian_epoch_jd(__pyx_self, ((PyArrayObject *)__pyx_v_epd));
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1363
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def julian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
-- *     """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
-- *     **  Julian Epoch to Julian Date.
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_50julian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_jd1 = 0;
--  PyArrayObject *__pyx_v_jd2 = 0;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_epd;
--  __Pyx_Buffer __pyx_pybuffer_epd;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd1;
--  __Pyx_Buffer __pyx_pybuffer_jd1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd2;
--  __Pyx_Buffer __pyx_pybuffer_jd2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("julian_epoch_jd", 0);
--  __pyx_pybuffer_jd1.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd1.refcount = 0;
--  __pyx_pybuffernd_jd1.data = NULL;
--  __pyx_pybuffernd_jd1.rcbuffer = &__pyx_pybuffer_jd1;
--  __pyx_pybuffer_jd2.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd2.refcount = 0;
--  __pyx_pybuffernd_jd2.data = NULL;
--  __pyx_pybuffernd_jd2.rcbuffer = &__pyx_pybuffer_jd2;
--  __pyx_pybuffer_epd.pybuffer.buf = NULL;
--  __pyx_pybuffer_epd.refcount = 0;
--  __pyx_pybuffernd_epd.data = NULL;
--  __pyx_pybuffernd_epd.rcbuffer = &__pyx_pybuffer_epd;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_v_epd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":1373
-- *     **     djm      double    Modified Julian Date
-- *     """
-- *     cdef unsigned n = epd.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_epd->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1375
-- *     cdef unsigned n = epd.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_jd1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_jd1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1376
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_jd2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_jd2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1378
-- *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         eraEpj2jd(epd[i], &jd1[i], &jd2[i])
-- *     return jd1, jd2
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":1379
-- * 
-- *     for i in range(n):
-- *         eraEpj2jd(epd[i], &jd1[i], &jd2[i])             # <<<<<<<<<<<<<<
-- *     return jd1, jd2
-- * 
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    eraEpj2jd((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_epd.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_jd1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_jd2.diminfo[0].strides))));
--  }
--
--  /* "astropy/time/erfa_time.pyx":1380
-- *     for i in range(n):
-- *         eraEpj2jd(epd[i], &jd1[i], &jd2[i])
-- *     return jd1, jd2             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_INCREF(((PyObject *)__pyx_v_jd1));
--  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_jd1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_jd1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_jd2));
--  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_jd2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_jd2));
--  __pyx_r = ((PyObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.julian_epoch_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_jd1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_jd2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_53jd_besselian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_52jd_besselian_epoch[] = " Wrap double eraEpb(double dj1, double dj2)\n    **  Julian Date to Besselian Epoch.\n\n    **  Given:\n    **     dj1,dj2    double     Julian Date (see note)\n    **\n    **  Returned (function value):\n    **                double     Besselian Epoch.\n    **\n    **  Note:\n    **\n    **     The Julian Date is supplied in two pieces, in the usual ERFA\n    **     manner, which is designed to preserve time res [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_53jd_besselian_epoch = {__Pyx_NAMESTR("jd_besselian_epoch"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_53jd_besselian_epoch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_52jd_besselian_epoch)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_53jd_besselian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
--  PyArrayObject *__pyx_v_jd1 = 0;
--  PyArrayObject *__pyx_v_jd2 = 0;
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("jd_besselian_epoch (wrapper)", 0);
--  {
--    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__jd1,&__pyx_n_s__jd2,0};
--    PyObject* values[2] = {0,0};
--    if (unlikely(__pyx_kwds)) {
--      Py_ssize_t kw_args;
--      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
--      switch (pos_args) {
--        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--        case  0: break;
--        default: goto __pyx_L5_argtuple_error;
--      }
--      kw_args = PyDict_Size(__pyx_kwds);
--      switch (pos_args) {
--        case  0:
--        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jd1)) != 0)) kw_args--;
--        else goto __pyx_L5_argtuple_error;
--        case  1:
--        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jd2)) != 0)) kw_args--;
--        else {
--          __Pyx_RaiseArgtupleInvalid("jd_besselian_epoch", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--        }
--      }
--      if (unlikely(kw_args > 0)) {
--        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_besselian_epoch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--      }
--    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
--      goto __pyx_L5_argtuple_error;
--    } else {
--      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
--      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
--    }
--    __pyx_v_jd1 = ((PyArrayObject *)values[0]);
--    __pyx_v_jd2 = ((PyArrayObject *)values[1]);
--  }
--  goto __pyx_L4_argument_unpacking_done;
--  __pyx_L5_argtuple_error:;
--  __Pyx_RaiseArgtupleInvalid("jd_besselian_epoch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
--  __pyx_L3_error:;
--  __Pyx_AddTraceback("astropy.time.erfa_time.jd_besselian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __Pyx_RefNannyFinishContext();
--  return NULL;
--  __pyx_L4_argument_unpacking_done:;
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd1), __pyx_ptype_5numpy_ndarray, 1, "jd1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd2), __pyx_ptype_5numpy_ndarray, 1, "jd2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_52jd_besselian_epoch(__pyx_self, __pyx_v_jd1, __pyx_v_jd2);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1385
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
-- *                        np.ndarray[double, ndim=1] jd2):
-- *     """ Wrap double eraEpb(double dj1, double dj2)
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_52jd_besselian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_epd = 0;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_epd;
--  __Pyx_Buffer __pyx_pybuffer_epd;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd1;
--  __Pyx_Buffer __pyx_pybuffer_jd1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd2;
--  __Pyx_Buffer __pyx_pybuffer_jd2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  unsigned int __pyx_t_7;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("jd_besselian_epoch", 0);
--  __pyx_pybuffer_epd.pybuffer.buf = NULL;
--  __pyx_pybuffer_epd.refcount = 0;
--  __pyx_pybuffernd_epd.data = NULL;
--  __pyx_pybuffernd_epd.rcbuffer = &__pyx_pybuffer_epd;
--  __pyx_pybuffer_jd1.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd1.refcount = 0;
--  __pyx_pybuffernd_jd1.data = NULL;
--  __pyx_pybuffernd_jd1.rcbuffer = &__pyx_pybuffer_jd1;
--  __pyx_pybuffer_jd2.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd2.refcount = 0;
--  __pyx_pybuffernd_jd2.data = NULL;
--  __pyx_pybuffernd_jd2.rcbuffer = &__pyx_pybuffer_jd2;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":1404
-- *     **     (J2000.0).
-- *     """
-- *     assert jd1.shape[0] == jd2.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned n = jd1.shape[0]
-- *     cdef unsigned int i
-- */
--  #ifndef CYTHON_WITHOUT_ASSERTIONS
--  if (unlikely(!((__pyx_v_jd1->dimensions[0]) == (__pyx_v_jd2->dimensions[0])))) {
--    PyErr_SetNone(PyExc_AssertionError);
--    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  #endif
--
--  /* "astropy/time/erfa_time.pyx":1405
-- *     """
-- *     assert jd1.shape[0] == jd2.shape[0]
-- *     cdef unsigned n = jd1.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_jd1->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1407
-- *     cdef unsigned n = jd1.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_epd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_epd = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1409
-- *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         epd[i] = eraEpb(jd1[i], jd2[i])
-- *     return epd
-- */
--  __pyx_t_7 = __pyx_v_n;
--  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
--    __pyx_v_i = __pyx_t_8;
--
--    /* "astropy/time/erfa_time.pyx":1410
-- * 
-- *     for i in range(n):
-- *         epd[i] = eraEpb(jd1[i], jd2[i])             # <<<<<<<<<<<<<<
-- *     return epd
-- * 
-- */
--    __pyx_t_9 = __pyx_v_i;
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_epd.diminfo[0].strides) = eraEpb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_jd1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_jd2.diminfo[0].strides)));
--  }
--
--  /* "astropy/time/erfa_time.pyx":1411
-- *     for i in range(n):
-- *         epd[i] = eraEpb(jd1[i], jd2[i])
-- *     return epd             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __Pyx_INCREF(((PyObject *)__pyx_v_epd));
--  __pyx_r = ((PyObject *)__pyx_v_epd);
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.jd_besselian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_epd);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_55besselian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd); /*proto*/
--static char __pyx_doc_7astropy_4time_9erfa_time_54besselian_epoch_jd[] = " Wrap void eraEpb2jd(double epj, double *djm0, double *djm)\n    **  Besselian Epoch to Julian Date.\n\n    **  Given:\n    **     epb      double    Besselian Epoch (e.g. 1957.3D0)\n    **\n    **  Returned:\n    **     djm0     double    MJD zero-point: always 2400000.5\n    **     djm      double    Modified Julian Date\n    **\n    **  Note:\n    **\n    **     The Julian Date is returned in two pieces, in the [...]
--static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_55besselian_epoch_jd = {__Pyx_NAMESTR("besselian_epoch_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_55besselian_epoch_jd, METH_O, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_54besselian_epoch_jd)};
--static PyObject *__pyx_pw_7astropy_4time_9erfa_time_55besselian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd) {
--  PyObject *__pyx_r = 0;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("besselian_epoch_jd (wrapper)", 0);
--  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_epd), __pyx_ptype_5numpy_ndarray, 1, "epd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_54besselian_epoch_jd(__pyx_self, ((PyArrayObject *)__pyx_v_epd));
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "astropy/time/erfa_time.pyx":1416
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
-- *     """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
-- *     **  Besselian Epoch to Julian Date.
-- */
--
--static PyObject *__pyx_pf_7astropy_4time_9erfa_time_54besselian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd) {
--  unsigned int __pyx_v_n;
--  unsigned int __pyx_v_i;
--  PyArrayObject *__pyx_v_jd1 = 0;
--  PyArrayObject *__pyx_v_jd2 = 0;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_epd;
--  __Pyx_Buffer __pyx_pybuffer_epd;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd1;
--  __Pyx_Buffer __pyx_pybuffer_jd1;
--  __Pyx_LocalBuf_ND __pyx_pybuffernd_jd2;
--  __Pyx_Buffer __pyx_pybuffer_jd2;
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyArrayObject *__pyx_t_6 = NULL;
--  PyArrayObject *__pyx_t_7 = NULL;
--  unsigned int __pyx_t_8;
--  unsigned int __pyx_t_9;
--  unsigned int __pyx_t_10;
--  unsigned int __pyx_t_11;
--  unsigned int __pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("besselian_epoch_jd", 0);
--  __pyx_pybuffer_jd1.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd1.refcount = 0;
--  __pyx_pybuffernd_jd1.data = NULL;
--  __pyx_pybuffernd_jd1.rcbuffer = &__pyx_pybuffer_jd1;
--  __pyx_pybuffer_jd2.pybuffer.buf = NULL;
--  __pyx_pybuffer_jd2.refcount = 0;
--  __pyx_pybuffernd_jd2.data = NULL;
--  __pyx_pybuffernd_jd2.rcbuffer = &__pyx_pybuffer_jd2;
--  __pyx_pybuffer_epd.pybuffer.buf = NULL;
--  __pyx_pybuffer_epd.refcount = 0;
--  __pyx_pybuffernd_epd.data = NULL;
--  __pyx_pybuffernd_epd.rcbuffer = &__pyx_pybuffer_epd;
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_v_epd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
--
--  /* "astropy/time/erfa_time.pyx":1434
-- *     **     djm.
-- *     """
-- *     cdef unsigned n = epd.shape[0]             # <<<<<<<<<<<<<<
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)
-- */
--  __pyx_v_n = (__pyx_v_epd->dimensions[0]);
--
--  /* "astropy/time/erfa_time.pyx":1436
-- *     cdef unsigned n = epd.shape[0]
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
-- * 
-- */
--  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
--  __Pyx_GIVEREF(__pyx_t_1);
--  __pyx_t_1 = 0;
--  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
--  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_jd1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_6 = 0;
--  __pyx_v_jd1 = ((PyArrayObject *)__pyx_t_5);
--  __pyx_t_5 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1437
-- *     cdef unsigned int i
-- *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)
-- *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     for i in range(n):
-- */
--  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_5);
--  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_3);
--  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
--  __Pyx_GIVEREF(__pyx_t_5);
--  __pyx_t_5 = 0;
--  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
--  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
--  {
--    __Pyx_BufFmt_StackElem __pyx_stack[1];
--    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
--      __pyx_v_jd2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf = NULL;
--      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else {__pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
--    }
--  }
--  __pyx_t_7 = 0;
--  __pyx_v_jd2 = ((PyArrayObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1439
-- *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
-- * 
-- *     for i in range(n):             # <<<<<<<<<<<<<<
-- *         eraEpb2jd(epd[i], &jd1[i], &jd2[i])
-- *     return jd1, jd2
-- */
--  __pyx_t_8 = __pyx_v_n;
--  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
--    __pyx_v_i = __pyx_t_9;
--
--    /* "astropy/time/erfa_time.pyx":1440
-- * 
-- *     for i in range(n):
-- *         eraEpb2jd(epd[i], &jd1[i], &jd2[i])             # <<<<<<<<<<<<<<
-- *     return jd1, jd2
-- */
--    __pyx_t_10 = __pyx_v_i;
--    __pyx_t_11 = __pyx_v_i;
--    __pyx_t_12 = __pyx_v_i;
--    eraEpb2jd((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_epd.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_jd1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_jd2.diminfo[0].strides))));
--  }
--
--  /* "astropy/time/erfa_time.pyx":1441
-- *     for i in range(n):
-- *         eraEpb2jd(epd[i], &jd1[i], &jd2[i])
-- *     return jd1, jd2             # <<<<<<<<<<<<<<
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_4);
--  __Pyx_INCREF(((PyObject *)__pyx_v_jd1));
--  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_jd1));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_jd1));
--  __Pyx_INCREF(((PyObject *)__pyx_v_jd2));
--  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_jd2));
--  __Pyx_GIVEREF(((PyObject *)__pyx_v_jd2));
--  __pyx_r = ((PyObject *)__pyx_t_4);
--  __pyx_t_4 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
--    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
--  __Pyx_AddTraceback("astropy.time.erfa_time.besselian_epoch_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  goto __pyx_L2;
--  __pyx_L0:;
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epd.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
--  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_jd1);
--  __Pyx_XDECREF((PyObject *)__pyx_v_jd2);
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
--static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
--  __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":194
-- *         # experimental exception made for __getbuffer__ and __releasebuffer__
-- *         # -- the details of this may change.
-- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
-- *             # This implementation of getbuffer is geared towards Cython
-- *             # requirements, and does not yet fullfill the PEP.
-- */
--
--static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
--  int __pyx_v_copy_shape;
--  int __pyx_v_i;
--  int __pyx_v_ndim;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  int __pyx_v_t;
--  char *__pyx_v_f;
--  PyArray_Descr *__pyx_v_descr = 0;
--  int __pyx_v_offset;
--  int __pyx_v_hasfields;
--  int __pyx_r;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  int __pyx_t_2;
--  int __pyx_t_3;
--  PyObject *__pyx_t_4 = NULL;
--  int __pyx_t_5;
--  int __pyx_t_6;
--  int __pyx_t_7;
--  PyObject *__pyx_t_8 = NULL;
--  char *__pyx_t_9;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("__getbuffer__", 0);
--  if (__pyx_v_info != NULL) {
--    __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(__pyx_v_info->obj);
--  }
--
--  /* "numpy.pxd":200
-- *             # of flags
-- * 
-- *             if info == NULL: return             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int copy_shape, i, ndim
-- */
--  __pyx_t_1 = (__pyx_v_info == NULL);
--  if (__pyx_t_1) {
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":203
-- * 
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":204
-- *             cdef int copy_shape, i, ndim
-- *             cdef int endian_detector = 1
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- * 
-- *             ndim = PyArray_NDIM(self)
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":206
-- *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- * 
-- *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
--
--  /* "numpy.pxd":208
-- *             ndim = PyArray_NDIM(self)
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 copy_shape = 1
-- *             else:
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":209
-- * 
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 copy_shape = 1             # <<<<<<<<<<<<<<
-- *             else:
-- *                 copy_shape = 0
-- */
--    __pyx_v_copy_shape = 1;
--    goto __pyx_L4;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":211
-- *                 copy_shape = 1
-- *             else:
-- *                 copy_shape = 0             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- */
--    __pyx_v_copy_shape = 0;
--  }
--  __pyx_L4:;
--
--  /* "numpy.pxd":213
-- *                 copy_shape = 0
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- */
--  __pyx_t_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":214
-- * 
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- */
--    __pyx_t_2 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS));
--    __pyx_t_3 = __pyx_t_2;
--  } else {
--    __pyx_t_3 = __pyx_t_1;
--  }
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_27), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L5;
--  }
--  __pyx_L5:;
--
--  /* "numpy.pxd":217
-- *                 raise ValueError(u"ndarray is not C contiguous")
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- */
--  __pyx_t_3 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
--  if (__pyx_t_3) {
--
--    /* "numpy.pxd":218
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- */
--    __pyx_t_1 = (!PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS));
--    __pyx_t_2 = __pyx_t_1;
--  } else {
--    __pyx_t_2 = __pyx_t_3;
--  }
--  if (__pyx_t_2) {
--
--    /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_29), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    goto __pyx_L6;
--  }
--  __pyx_L6:;
--
--  /* "numpy.pxd":221
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")
-- * 
-- *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
-- *             info.ndim = ndim
-- *             if copy_shape:
-- */
--  __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
--
--  /* "numpy.pxd":222
-- * 
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim             # <<<<<<<<<<<<<<
-- *             if copy_shape:
-- *                 # Allocate new buffer for strides and shape info.
-- */
--  __pyx_v_info->ndim = __pyx_v_ndim;
--
--  /* "numpy.pxd":223
-- *             info.buf = PyArray_DATA(self)
-- *             info.ndim = ndim
-- *             if copy_shape:             # <<<<<<<<<<<<<<
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- */
--  if (__pyx_v_copy_shape) {
--
--    /* "numpy.pxd":226
-- *                 # Allocate new buffer for strides and shape info.
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)             # <<<<<<<<<<<<<<
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2)));
--
--    /* "numpy.pxd":227
-- *                 # This is allocated as one block, strides first.
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- */
--    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
--
--    /* "numpy.pxd":228
-- *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * <size_t>ndim * 2)
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):             # <<<<<<<<<<<<<<
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- */
--    __pyx_t_5 = __pyx_v_ndim;
--    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
--      __pyx_v_i = __pyx_t_6;
--
--      /* "numpy.pxd":229
-- *                 info.shape = info.strides + ndim
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- */
--      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
--
--      /* "numpy.pxd":230
-- *                 for i in range(ndim):
-- *                     info.strides[i] = PyArray_STRIDES(self)[i]
-- *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- */
--      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
--    }
--    goto __pyx_L7;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":232
-- *                     info.shape[i] = PyArray_DIMS(self)[i]
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- */
--    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
--
--    /* "numpy.pxd":233
-- *             else:
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- */
--    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
--  }
--  __pyx_L7:;
--
--  /* "numpy.pxd":234
-- *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- */
--  __pyx_v_info->suboffsets = NULL;
--
--  /* "numpy.pxd":235
-- *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
-- *             info.readonly = not PyArray_ISWRITEABLE(self)
-- * 
-- */
--  __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
--
--  /* "numpy.pxd":236
-- *             info.suboffsets = NULL
-- *             info.itemsize = PyArray_ITEMSIZE(self)
-- *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
-- * 
-- *             cdef int t
-- */
--  __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(__pyx_v_self));
--
--  /* "numpy.pxd":239
-- * 
-- *             cdef int t
-- *             cdef char* f = NULL             # <<<<<<<<<<<<<<
-- *             cdef dtype descr = self.descr
-- *             cdef list stack
-- */
--  __pyx_v_f = NULL;
--
--  /* "numpy.pxd":240
-- *             cdef int t
-- *             cdef char* f = NULL
-- *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
-- *             cdef list stack
-- *             cdef int offset
-- */
--  __pyx_t_4 = ((PyObject *)__pyx_v_self->descr);
--  __Pyx_INCREF(__pyx_t_4);
--  __pyx_v_descr = ((PyArray_Descr *)__pyx_t_4);
--  __pyx_t_4 = 0;
--
--  /* "numpy.pxd":244
-- *             cdef int offset
-- * 
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields and not copy_shape:
-- */
--  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
--
--  /* "numpy.pxd":246
-- *             cdef bint hasfields = PyDataType_HASFIELDS(descr)
-- * 
-- *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
-- *                 # do not call releasebuffer
-- *                 info.obj = None
-- */
--  __pyx_t_2 = (!__pyx_v_hasfields);
--  if (__pyx_t_2) {
--    __pyx_t_3 = (!__pyx_v_copy_shape);
--    __pyx_t_1 = __pyx_t_3;
--  } else {
--    __pyx_t_1 = __pyx_t_2;
--  }
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":248
-- *             if not hasfields and not copy_shape:
-- *                 # do not call releasebuffer
-- *                 info.obj = None             # <<<<<<<<<<<<<<
-- *             else:
-- *                 # need to call releasebuffer
-- */
--    __Pyx_INCREF(Py_None);
--    __Pyx_GIVEREF(Py_None);
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = Py_None;
--    goto __pyx_L10;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":251
-- *             else:
-- *                 # need to call releasebuffer
-- *                 info.obj = self             # <<<<<<<<<<<<<<
-- * 
-- *             if not hasfields:
-- */
--    __Pyx_INCREF(((PyObject *)__pyx_v_self));
--    __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj);
--    __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
--  }
--  __pyx_L10:;
--
--  /* "numpy.pxd":253
-- *                 info.obj = self
-- * 
-- *             if not hasfields:             # <<<<<<<<<<<<<<
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- */
--  __pyx_t_1 = (!__pyx_v_hasfields);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":254
-- * 
-- *             if not hasfields:
-- *                 t = descr.type_num             # <<<<<<<<<<<<<<
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- */
--    __pyx_t_5 = __pyx_v_descr->type_num;
--    __pyx_v_t = __pyx_t_5;
--
--    /* "numpy.pxd":255
-- *             if not hasfields:
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_1 = (__pyx_v_descr->byteorder == '>');
--    if (__pyx_t_1) {
--      __pyx_t_2 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_2 = __pyx_t_1;
--    }
--    if (!__pyx_t_2) {
--
--      /* "numpy.pxd":256
-- *                 t = descr.type_num
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- */
--      __pyx_t_1 = (__pyx_v_descr->byteorder == '<');
--      if (__pyx_t_1) {
--        __pyx_t_3 = (!__pyx_v_little_endian);
--        __pyx_t_7 = __pyx_t_3;
--      } else {
--        __pyx_t_7 = __pyx_t_1;
--      }
--      __pyx_t_1 = __pyx_t_7;
--    } else {
--      __pyx_t_1 = __pyx_t_2;
--    }
--    if (__pyx_t_1) {
--
--      /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_31), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L12;
--    }
--    __pyx_L12:;
--
--    /* "numpy.pxd":258
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_BYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__b;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":259
-- *                     raise ValueError(u"Non-native byte order not supported")
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UBYTE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__B;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":260
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_SHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__h;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":261
-- *                 elif t == NPY_UBYTE:       f = "B"
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_USHORT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__H;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":262
-- *                 elif t == NPY_SHORT:       f = "h"
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_INT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__i;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":263
-- *                 elif t == NPY_USHORT:      f = "H"
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_UINT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__I;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":264
-- *                 elif t == NPY_INT:         f = "i"
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__l;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":265
-- *                 elif t == NPY_UINT:        f = "I"
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__L;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":266
-- *                 elif t == NPY_LONG:        f = "l"
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":267
-- *                 elif t == NPY_ULONG:       f = "L"
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_ULONGLONG);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Q;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":268
-- *                 elif t == NPY_LONGLONG:    f = "q"
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_FLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__f;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":269
-- *                 elif t == NPY_ULONGLONG:   f = "Q"
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_DOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__d;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":270
-- *                 elif t == NPY_FLOAT:       f = "f"
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_LONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__g;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":271
-- *                 elif t == NPY_DOUBLE:      f = "d"
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CFLOAT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zf;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":272
-- *                 elif t == NPY_LONGDOUBLE:  f = "g"
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zd;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":273
-- *                 elif t == NPY_CFLOAT:      f = "Zf"
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_CLONGDOUBLE);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__Zg;
--      goto __pyx_L13;
--    }
--
--    /* "numpy.pxd":274
-- *                 elif t == NPY_CDOUBLE:     f = "Zd"
-- *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
-- *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--    __pyx_t_1 = (__pyx_v_t == NPY_OBJECT);
--    if (__pyx_t_1) {
--      __pyx_v_f = __pyx_k__O;
--      goto __pyx_L13;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":276
-- *                 elif t == NPY_OBJECT:      f = "O"
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *                 info.format = f
-- *                 return
-- */
--      __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_32), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(((PyObject *)__pyx_t_8));
--      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_8));
--      __Pyx_GIVEREF(((PyObject *)__pyx_t_8));
--      __pyx_t_8 = 0;
--      __pyx_t_8 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_8);
--      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
--      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--    __pyx_L13:;
--
--    /* "numpy.pxd":277
-- *                 else:
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f             # <<<<<<<<<<<<<<
-- *                 return
-- *             else:
-- */
--    __pyx_v_info->format = __pyx_v_f;
--
--    /* "numpy.pxd":278
-- *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *                 info.format = f
-- *                 return             # <<<<<<<<<<<<<<
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- */
--    __pyx_r = 0;
--    goto __pyx_L0;
--    goto __pyx_L11;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":280
-- *                 return
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0
-- */
--    __pyx_v_info->format = ((char *)malloc(255));
--
--    /* "numpy.pxd":281
-- *             else:
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
-- *                 offset = 0
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- */
--    (__pyx_v_info->format[0]) = '^';
--
--    /* "numpy.pxd":282
-- *                 info.format = <char*>stdlib.malloc(_buffer_format_string_len)
-- *                 info.format[0] = c'^' # Native data types, manual alignment
-- *                 offset = 0             # <<<<<<<<<<<<<<
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- */
--    __pyx_v_offset = 0;
--
--    /* "numpy.pxd":285
-- *                 f = _util_dtypestring(descr, info.format + 1,
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)             # <<<<<<<<<<<<<<
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- */
--    __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __pyx_v_f = __pyx_t_9;
--
--    /* "numpy.pxd":286
-- *                                       info.format + _buffer_format_string_len,
-- *                                       &offset)
-- *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- */
--    (__pyx_v_f[0]) = '\x00';
--  }
--  __pyx_L11:;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_8);
--  __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = -1;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) {
--    __Pyx_GOTREF(__pyx_v_info->obj);
--    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
--  }
--  goto __pyx_L2;
--  __pyx_L0:;
--  if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) {
--    __Pyx_GOTREF(Py_None);
--    __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL;
--  }
--  __pyx_L2:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_descr);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* Python wrapper */
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
--static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
--  __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":288
-- *                 f[0] = c'\0' # Terminate format string
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- */
--
--static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("__releasebuffer__", 0);
--
--  /* "numpy.pxd":289
-- * 
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- */
--  __pyx_t_1 = PyArray_HASFIELDS(__pyx_v_self);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":290
-- *         def __releasebuffer__(ndarray self, Py_buffer* info):
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)
-- */
--    free(__pyx_v_info->format);
--    goto __pyx_L3;
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":291
-- *             if PyArray_HASFIELDS(self):
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
-- *                 stdlib.free(info.strides)
-- *                 # info.shape was stored after info.strides in the same block
-- */
--  __pyx_t_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":292
-- *                 stdlib.free(info.format)
-- *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
-- *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
-- *                 # info.shape was stored after info.strides in the same block
-- * 
-- */
--    free(__pyx_v_info->strides);
--    goto __pyx_L4;
--  }
--  __pyx_L4:;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":768
-- * ctypedef npy_cdouble     complex_t
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
--
--  /* "numpy.pxd":769
-- * 
-- * cdef inline object PyArray_MultiIterNew1(a):
-- *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":771
-- *     return PyArray_MultiIterNew(1, <void*>a)
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
--
--  /* "numpy.pxd":772
-- * 
-- * cdef inline object PyArray_MultiIterNew2(a, b):
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":774
-- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
--
--  /* "numpy.pxd":775
-- * 
-- * cdef inline object PyArray_MultiIterNew3(a, b, c):
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":777
-- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
--
--  /* "numpy.pxd":778
-- * 
-- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":780
-- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- */
--
--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) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
--
--  /* "numpy.pxd":781
-- * 
-- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
-- */
--  __Pyx_XDECREF(__pyx_r);
--  __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_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __pyx_r = __pyx_t_1;
--  __pyx_t_1 = 0;
--  goto __pyx_L0;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = 0;
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":783
-- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
-- * 
-- * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
-- *     # Recursive utility function used in __getbuffer__ to get format
-- *     # string. The new location in the format string is returned.
-- */
--
--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) {
--  PyArray_Descr *__pyx_v_child = 0;
--  int __pyx_v_endian_detector;
--  int __pyx_v_little_endian;
--  PyObject *__pyx_v_fields = 0;
--  PyObject *__pyx_v_childname = NULL;
--  PyObject *__pyx_v_new_offset = NULL;
--  PyObject *__pyx_v_t = NULL;
--  char *__pyx_r;
--  __Pyx_RefNannyDeclarations
--  PyObject *__pyx_t_1 = NULL;
--  Py_ssize_t __pyx_t_2;
--  PyObject *__pyx_t_3 = NULL;
--  PyObject *__pyx_t_4 = NULL;
--  PyObject *__pyx_t_5 = NULL;
--  PyObject *(*__pyx_t_6)(PyObject *);
--  int __pyx_t_7;
--  int __pyx_t_8;
--  int __pyx_t_9;
--  int __pyx_t_10;
--  long __pyx_t_11;
--  char *__pyx_t_12;
--  int __pyx_lineno = 0;
--  const char *__pyx_filename = NULL;
--  int __pyx_clineno = 0;
--  __Pyx_RefNannySetupContext("_util_dtypestring", 0);
--
--  /* "numpy.pxd":790
-- *     cdef int delta_offset
-- *     cdef tuple i
-- *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
-- *     cdef tuple fields
-- */
--  __pyx_v_endian_detector = 1;
--
--  /* "numpy.pxd":791
-- *     cdef tuple i
-- *     cdef int endian_detector = 1
-- *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
-- *     cdef tuple fields
-- * 
-- */
--  __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
--
--  /* "numpy.pxd":794
-- *     cdef tuple fields
-- * 
-- *     for childname in descr.names:             # <<<<<<<<<<<<<<
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields
-- */
--  if (unlikely(((PyObject *)__pyx_v_descr->names) == Py_None)) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __pyx_t_1 = ((PyObject *)__pyx_v_descr->names); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
--  for (;;) {
--    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
--    #if CYTHON_COMPILING_IN_CPYTHON
--    __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_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #else
--    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    #endif
--    __Pyx_XDECREF(__pyx_v_childname);
--    __pyx_v_childname = __pyx_t_3;
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":795
-- * 
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
-- *         child, new_offset = fields
-- * 
-- */
--    __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (!__pyx_t_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected tuple, got %.200s", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_fields));
--    __pyx_v_fields = ((PyObject*)__pyx_t_3);
--    __pyx_t_3 = 0;
--
--    /* "numpy.pxd":796
-- *     for childname in descr.names:
-- *         fields = descr.fields[childname]
-- *         child, new_offset = fields             # <<<<<<<<<<<<<<
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- */
--    if (likely(PyTuple_CheckExact(((PyObject *)__pyx_v_fields)))) {
--      PyObject* sequence = ((PyObject *)__pyx_v_fields);
--      #if CYTHON_COMPILING_IN_CPYTHON
--      Py_ssize_t size = Py_SIZE(sequence);
--      #else
--      Py_ssize_t size = PySequence_Size(sequence);
--      #endif
--      if (unlikely(size != 2)) {
--        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
--        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      #if CYTHON_COMPILING_IN_CPYTHON
--      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
--      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
--      __Pyx_INCREF(__pyx_t_3);
--      __Pyx_INCREF(__pyx_t_4);
--      #else
--      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_4);
--      #endif
--    } else if (1) {
--      __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    } else
--    {
--      Py_ssize_t index = -1;
--      __pyx_t_5 = PyObject_GetIter(((PyObject *)__pyx_v_fields)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
--      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_3);
--      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
--      __Pyx_GOTREF(__pyx_t_4);
--      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_t_6 = NULL;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      goto __pyx_L6_unpacking_done;
--      __pyx_L5_unpacking_failed:;
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_6 = NULL;
--      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_L6_unpacking_done:;
--    }
--    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_XDECREF(((PyObject *)__pyx_v_child));
--    __pyx_v_child = ((PyArray_Descr *)__pyx_t_3);
--    __pyx_t_3 = 0;
--    __Pyx_XDECREF(__pyx_v_new_offset);
--    __pyx_v_new_offset = __pyx_t_4;
--    __pyx_t_4 = 0;
--
--    /* "numpy.pxd":798
-- *         child, new_offset = fields
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- */
--    __pyx_t_4 = PyInt_FromLong((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_4);
--    __pyx_t_3 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_5);
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_GOTREF(__pyx_t_3);
--    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_34), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L7;
--    }
--    __pyx_L7:;
--
--    /* "numpy.pxd":801
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")
-- */
--    __pyx_t_7 = (__pyx_v_child->byteorder == '>');
--    if (__pyx_t_7) {
--      __pyx_t_8 = __pyx_v_little_endian;
--    } else {
--      __pyx_t_8 = __pyx_t_7;
--    }
--    if (!__pyx_t_8) {
--
--      /* "numpy.pxd":802
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
-- *             raise ValueError(u"Non-native byte order not supported")
-- *             # One could encode it in the format string and have Cython
-- */
--      __pyx_t_7 = (__pyx_v_child->byteorder == '<');
--      if (__pyx_t_7) {
--        __pyx_t_9 = (!__pyx_v_little_endian);
--        __pyx_t_10 = __pyx_t_9;
--      } else {
--        __pyx_t_10 = __pyx_t_7;
--      }
--      __pyx_t_7 = __pyx_t_10;
--    } else {
--      __pyx_t_7 = __pyx_t_8;
--    }
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_35), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      goto __pyx_L8;
--    }
--    __pyx_L8:;
--
--    /* "numpy.pxd":813
-- * 
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- */
--    while (1) {
--      __pyx_t_5 = PyInt_FromLong((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (!__pyx_t_7) break;
--
--      /* "numpy.pxd":814
-- *         # Output padding bytes
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
-- *             f += 1
-- *             offset[0] += 1
-- */
--      (__pyx_v_f[0]) = 120;
--
--      /* "numpy.pxd":815
-- *         while offset[0] < new_offset:
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1             # <<<<<<<<<<<<<<
-- *             offset[0] += 1
-- * 
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--
--      /* "numpy.pxd":816
-- *             f[0] = 120 # "x"; pad byte
-- *             f += 1
-- *             offset[0] += 1             # <<<<<<<<<<<<<<
-- * 
-- *         offset[0] += child.itemsize
-- */
--      __pyx_t_11 = 0;
--      (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + 1);
--    }
--
--    /* "numpy.pxd":818
-- *             offset[0] += 1
-- * 
-- *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- */
--    __pyx_t_11 = 0;
--    (__pyx_v_offset[__pyx_t_11]) = ((__pyx_v_offset[__pyx_t_11]) + __pyx_v_child->elsize);
--
--    /* "numpy.pxd":820
-- *         offset[0] += child.itemsize
-- * 
-- *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
-- *             t = child.type_num
-- *             if end - f < 5:
-- */
--    __pyx_t_7 = (!PyDataType_HASFIELDS(__pyx_v_child));
--    if (__pyx_t_7) {
--
--      /* "numpy.pxd":821
-- * 
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num             # <<<<<<<<<<<<<<
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- */
--      __pyx_t_3 = PyInt_FromLong(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __Pyx_XDECREF(__pyx_v_t);
--      __pyx_v_t = __pyx_t_3;
--      __pyx_t_3 = 0;
--
--      /* "numpy.pxd":822
-- *         if not PyDataType_HASFIELDS(child):
-- *             t = child.type_num
-- *             if end - f < 5:             # <<<<<<<<<<<<<<
-- *                 raise RuntimeError(u"Format string allocated too short.")
-- * 
-- */
--      __pyx_t_7 = ((__pyx_v_end - __pyx_v_f) < 5);
--      if (__pyx_t_7) {
--
--        /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_37), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        __Pyx_Raise(__pyx_t_3, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        goto __pyx_L12;
--      }
--      __pyx_L12:;
--
--      /* "numpy.pxd":826
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 98;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":827
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 66;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":828
-- *             if   t == NPY_BYTE:        f[0] =  98 #"b"
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 104;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":829
-- *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 72;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":830
-- *             elif t == NPY_SHORT:       f[0] = 104 #"h"
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 105;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":831
-- *             elif t == NPY_USHORT:      f[0] =  72 #"H"
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 73;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":832
-- *             elif t == NPY_INT:         f[0] = 105 #"i"
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 108;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":833
-- *             elif t == NPY_UINT:        f[0] =  73 #"I"
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 76;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":834
-- *             elif t == NPY_LONG:        f[0] = 108 #"l"
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 113;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":835
-- *             elif t == NPY_ULONG:       f[0] = 76  #"L"
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 81;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":836
-- *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 102;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":837
-- *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 100;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":838
-- *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 103;
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":839
-- *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 102;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":840
-- *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 100;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":841
-- *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- */
--      __pyx_t_5 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_5);
--      __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 90;
--        (__pyx_v_f[1]) = 103;
--        __pyx_v_f = (__pyx_v_f + 1);
--        goto __pyx_L13;
--      }
--
--      /* "numpy.pxd":842
-- *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
-- *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- */
--      __pyx_t_3 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_GOTREF(__pyx_t_3);
--      __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
--      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--      if (__pyx_t_7) {
--        (__pyx_v_f[0]) = 79;
--        goto __pyx_L13;
--      }
--      /*else*/ {
--
--        /* "numpy.pxd":844
-- *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
-- *             f += 1
-- *         else:
-- */
--        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_32), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(((PyObject *)__pyx_t_5));
--        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_3);
--        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5));
--        __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
--        __pyx_t_5 = 0;
--        __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--        __Pyx_GOTREF(__pyx_t_5);
--        __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
--        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
--        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
--        {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      }
--      __pyx_L13:;
--
--      /* "numpy.pxd":845
-- *             else:
-- *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
-- *             f += 1             # <<<<<<<<<<<<<<
-- *         else:
-- *             # Cython ignores struct boundary information ("T{...}"),
-- */
--      __pyx_v_f = (__pyx_v_f + 1);
--      goto __pyx_L11;
--    }
--    /*else*/ {
--
--      /* "numpy.pxd":849
-- *             # Cython ignores struct boundary information ("T{...}"),
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
-- *     return f
-- * 
-- */
--      __pyx_t_12 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_12 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--      __pyx_v_f = __pyx_t_12;
--    }
--    __pyx_L11:;
--  }
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "numpy.pxd":850
-- *             # so don't output it
-- *             f = _util_dtypestring(child, f, end, offset)
-- *     return f             # <<<<<<<<<<<<<<
-- * 
-- * 
-- */
--  __pyx_r = __pyx_v_f;
--  goto __pyx_L0;
--
--  __pyx_r = 0;
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_3);
--  __Pyx_XDECREF(__pyx_t_4);
--  __Pyx_XDECREF(__pyx_t_5);
--  __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
--  __pyx_r = NULL;
--  __pyx_L0:;
--  __Pyx_XDECREF((PyObject *)__pyx_v_child);
--  __Pyx_XDECREF(__pyx_v_fields);
--  __Pyx_XDECREF(__pyx_v_childname);
--  __Pyx_XDECREF(__pyx_v_new_offset);
--  __Pyx_XDECREF(__pyx_v_t);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--/* "numpy.pxd":965
-- * 
-- * 
-- * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- */
--
--static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
--  PyObject *__pyx_v_baseptr;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("set_array_base", 0);
--
--  /* "numpy.pxd":967
-- * cdef inline void set_array_base(ndarray arr, object base):
-- *      cdef PyObject* baseptr
-- *      if base is None:             # <<<<<<<<<<<<<<
-- *          baseptr = NULL
-- *      else:
-- */
--  __pyx_t_1 = (__pyx_v_base == Py_None);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":968
-- *      cdef PyObject* baseptr
-- *      if base is None:
-- *          baseptr = NULL             # <<<<<<<<<<<<<<
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- */
--    __pyx_v_baseptr = NULL;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":970
-- *          baseptr = NULL
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!             # <<<<<<<<<<<<<<
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- */
--    Py_INCREF(__pyx_v_base);
--
--    /* "numpy.pxd":971
-- *      else:
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base             # <<<<<<<<<<<<<<
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr
-- */
--    __pyx_v_baseptr = ((PyObject *)__pyx_v_base);
--  }
--  __pyx_L3:;
--
--  /* "numpy.pxd":972
-- *          Py_INCREF(base) # important to do this before decref below!
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)             # <<<<<<<<<<<<<<
-- *      arr.base = baseptr
-- * 
-- */
--  Py_XDECREF(__pyx_v_arr->base);
--
--  /* "numpy.pxd":973
-- *          baseptr = <PyObject*>base
-- *      Py_XDECREF(arr.base)
-- *      arr.base = baseptr             # <<<<<<<<<<<<<<
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- */
--  __pyx_v_arr->base = __pyx_v_baseptr;
--
--  __Pyx_RefNannyFinishContext();
--}
--
--/* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--
--static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
--  PyObject *__pyx_r = NULL;
--  __Pyx_RefNannyDeclarations
--  int __pyx_t_1;
--  __Pyx_RefNannySetupContext("get_array_base", 0);
--
--  /* "numpy.pxd":976
-- * 
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:             # <<<<<<<<<<<<<<
-- *         return None
-- *     else:
-- */
--  __pyx_t_1 = (__pyx_v_arr->base == NULL);
--  if (__pyx_t_1) {
--
--    /* "numpy.pxd":977
-- * cdef inline object get_array_base(ndarray arr):
-- *     if arr.base is NULL:
-- *         return None             # <<<<<<<<<<<<<<
-- *     else:
-- *         return <object>arr.base
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(Py_None);
--    __pyx_r = Py_None;
--    goto __pyx_L0;
--    goto __pyx_L3;
--  }
--  /*else*/ {
--
--    /* "numpy.pxd":979
-- *         return None
-- *     else:
-- *         return <object>arr.base             # <<<<<<<<<<<<<<
-- */
--    __Pyx_XDECREF(__pyx_r);
--    __Pyx_INCREF(((PyObject *)__pyx_v_arr->base));
--    __pyx_r = ((PyObject *)__pyx_v_arr->base);
--    goto __pyx_L0;
--  }
--  __pyx_L3:;
--
--  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
--  __pyx_L0:;
--  __Pyx_XGIVEREF(__pyx_r);
--  __Pyx_RefNannyFinishContext();
--  return __pyx_r;
--}
--
--static PyMethodDef __pyx_methods[] = {
--  {0, 0, 0, 0}
--};
--
--#if PY_MAJOR_VERSION >= 3
--static struct PyModuleDef __pyx_moduledef = {
--  #if PY_VERSION_HEX < 0x03020000
--    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
--  #else
--    PyModuleDef_HEAD_INIT,
--  #endif
--    __Pyx_NAMESTR("erfa_time"),
--    0, /* m_doc */
--    -1, /* m_size */
--    __pyx_methods /* m_methods */,
--    NULL, /* m_reload */
--    NULL, /* m_traverse */
--    NULL, /* m_clear */
--    NULL /* m_free */
--};
--#endif
--
--static __Pyx_StringTabEntry __pyx_string_tab[] = {
--  {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0},
--  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
--  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
--  {&__pyx_kp_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 0},
--  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
--  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
--  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
--  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
--  {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0},
--  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
--  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
--  {&__pyx_kp_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 0},
--  {&__pyx_kp_s_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 1, 0},
--  {&__pyx_kp_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 0},
--  {&__pyx_kp_s_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 0, 1, 0},
--  {&__pyx_kp_u_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 1, 0, 0},
--  {&__pyx_kp_u_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 1, 0, 0},
--  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
--  {&__pyx_kp_u_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 1, 0, 0},
--  {&__pyx_kp_u_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 1, 0, 0},
--  {&__pyx_kp_u_33, __pyx_k_33, sizeof(__pyx_k_33), 0, 1, 0, 0},
--  {&__pyx_kp_u_36, __pyx_k_36, sizeof(__pyx_k_36), 0, 1, 0, 0},
--  {&__pyx_n_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 1},
--  {&__pyx_kp_s_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 0, 1, 0},
--  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
--  {&__pyx_kp_s_42, __pyx_k_42, sizeof(__pyx_k_42), 0, 0, 1, 0},
--  {&__pyx_n_s_43, __pyx_k_43, sizeof(__pyx_k_43), 0, 0, 1, 1},
--  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
--  {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0},
--  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
--  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
--  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
--  {&__pyx_n_s__AstropyUserWarning, __pyx_k__AstropyUserWarning, sizeof(__pyx_k__AstropyUserWarning), 0, 0, 1, 1},
--  {&__pyx_n_s__DUBIOUS, __pyx_k__DUBIOUS, sizeof(__pyx_k__DUBIOUS), 0, 0, 1, 1},
--  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
--  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
--  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
--  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
--  {&__pyx_n_s__asec, __pyx_k__asec, sizeof(__pyx_k__asec), 0, 0, 1, 1},
--  {&__pyx_n_s__besselian_epoch_jd, __pyx_k__besselian_epoch_jd, sizeof(__pyx_k__besselian_epoch_jd), 0, 0, 1, 1},
--  {&__pyx_n_s__c_elong, __pyx_k__c_elong, sizeof(__pyx_k__c_elong), 0, 0, 1, 1},
--  {&__pyx_n_s__c_u, __pyx_k__c_u, sizeof(__pyx_k__c_u), 0, 0, 1, 1},
--  {&__pyx_n_s__c_v, __pyx_k__c_v, sizeof(__pyx_k__c_v), 0, 0, 1, 1},
--  {&__pyx_n_s__cal2jd, __pyx_k__cal2jd, sizeof(__pyx_k__cal2jd), 0, 0, 1, 1},
--  {&__pyx_n_s__check_return, __pyx_k__check_return, sizeof(__pyx_k__check_return), 0, 0, 1, 1},
--  {&__pyx_n_s__d1, __pyx_k__d1, sizeof(__pyx_k__d1), 0, 0, 1, 1},
--  {&__pyx_n_s__d2, __pyx_k__d2, sizeof(__pyx_k__d2), 0, 0, 1, 1},
--  {&__pyx_n_s__d_tai_utc, __pyx_k__d_tai_utc, sizeof(__pyx_k__d_tai_utc), 0, 0, 1, 1},
--  {&__pyx_n_s__d_tdb_tt, __pyx_k__d_tdb_tt, sizeof(__pyx_k__d_tdb_tt), 0, 0, 1, 1},
--  {&__pyx_n_s__djm, __pyx_k__djm, sizeof(__pyx_k__djm), 0, 0, 1, 1},
--  {&__pyx_n_s__djm0, __pyx_k__djm0, sizeof(__pyx_k__djm0), 0, 0, 1, 1},
--  {&__pyx_n_s__double, __pyx_k__double, sizeof(__pyx_k__double), 0, 0, 1, 1},
--  {&__pyx_n_s__dt, __pyx_k__dt, sizeof(__pyx_k__dt), 0, 0, 1, 1},
--  {&__pyx_n_s__dtf_jd, __pyx_k__dtf_jd, sizeof(__pyx_k__dtf_jd), 0, 0, 1, 1},
--  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
--  {&__pyx_n_s__elong, __pyx_k__elong, sizeof(__pyx_k__elong), 0, 0, 1, 1},
--  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
--  {&__pyx_n_s__epd, __pyx_k__epd, sizeof(__pyx_k__epd), 0, 0, 1, 1},
--  {&__pyx_n_s__eraAf2a, __pyx_k__eraAf2a, sizeof(__pyx_k__eraAf2a), 0, 0, 1, 1},
--  {&__pyx_n_s__eraCal2jd, __pyx_k__eraCal2jd, sizeof(__pyx_k__eraCal2jd), 0, 0, 1, 1},
--  {&__pyx_n_s__eraD2dtf, __pyx_k__eraD2dtf, sizeof(__pyx_k__eraD2dtf), 0, 0, 1, 1},
--  {&__pyx_n_s__eraDat, __pyx_k__eraDat, sizeof(__pyx_k__eraDat), 0, 0, 1, 1},
--  {&__pyx_n_s__eraDtf2d, __pyx_k__eraDtf2d, sizeof(__pyx_k__eraDtf2d), 0, 0, 1, 1},
--  {&__pyx_n_s__eraGd2gc, __pyx_k__eraGd2gc, sizeof(__pyx_k__eraGd2gc), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTaitt, __pyx_k__eraTaitt, sizeof(__pyx_k__eraTaitt), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTaiut1, __pyx_k__eraTaiut1, sizeof(__pyx_k__eraTaiut1), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTaiutc, __pyx_k__eraTaiutc, sizeof(__pyx_k__eraTaiutc), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTcbtdb, __pyx_k__eraTcbtdb, sizeof(__pyx_k__eraTcbtdb), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTcgtt, __pyx_k__eraTcgtt, sizeof(__pyx_k__eraTcgtt), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTdbtcb, __pyx_k__eraTdbtcb, sizeof(__pyx_k__eraTdbtcb), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTdbtt, __pyx_k__eraTdbtt, sizeof(__pyx_k__eraTdbtt), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTttai, __pyx_k__eraTttai, sizeof(__pyx_k__eraTttai), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTttcg, __pyx_k__eraTttcg, sizeof(__pyx_k__eraTttcg), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTttdb, __pyx_k__eraTttdb, sizeof(__pyx_k__eraTttdb), 0, 0, 1, 1},
--  {&__pyx_n_s__eraTtut1, __pyx_k__eraTtut1, sizeof(__pyx_k__eraTtut1), 0, 0, 1, 1},
--  {&__pyx_n_s__eraUt1tai, __pyx_k__eraUt1tai, sizeof(__pyx_k__eraUt1tai), 0, 0, 1, 1},
--  {&__pyx_n_s__eraUt1tt, __pyx_k__eraUt1tt, sizeof(__pyx_k__eraUt1tt), 0, 0, 1, 1},
--  {&__pyx_n_s__eraUt1utc, __pyx_k__eraUt1utc, sizeof(__pyx_k__eraUt1utc), 0, 0, 1, 1},
--  {&__pyx_n_s__eraUtctai, __pyx_k__eraUtctai, sizeof(__pyx_k__eraUtctai), 0, 0, 1, 1},
--  {&__pyx_n_s__eraUtcut1, __pyx_k__eraUtcut1, sizeof(__pyx_k__eraUtcut1), 0, 0, 1, 1},
--  {&__pyx_n_s__era_af2a, __pyx_k__era_af2a, sizeof(__pyx_k__era_af2a), 0, 0, 1, 1},
--  {&__pyx_n_s__era_gd2gc, __pyx_k__era_gd2gc, sizeof(__pyx_k__era_gd2gc), 0, 0, 1, 1},
--  {&__pyx_n_s__errors, __pyx_k__errors, sizeof(__pyx_k__errors), 0, 0, 1, 1},
--  {&__pyx_n_s__errs, __pyx_k__errs, sizeof(__pyx_k__errs), 0, 0, 1, 1},
--  {&__pyx_n_s__fd, __pyx_k__fd, sizeof(__pyx_k__fd), 0, 0, 1, 1},
--  {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1},
--  {&__pyx_n_s__func_name, __pyx_k__func_name, sizeof(__pyx_k__func_name), 0, 0, 1, 1},
--  {&__pyx_n_s__height, __pyx_k__height, sizeof(__pyx_k__height), 0, 0, 1, 1},
--  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
--  {&__pyx_n_s__iamin, __pyx_k__iamin, sizeof(__pyx_k__iamin), 0, 0, 1, 1},
--  {&__pyx_n_s__id, __pyx_k__id, sizeof(__pyx_k__id), 0, 0, 1, 1},
--  {&__pyx_n_s__ideg, __pyx_k__ideg, sizeof(__pyx_k__ideg), 0, 0, 1, 1},
--  {&__pyx_n_s__ihmsf, __pyx_k__ihmsf, sizeof(__pyx_k__ihmsf), 0, 0, 1, 1},
--  {&__pyx_n_s__ihr, __pyx_k__ihr, sizeof(__pyx_k__ihr), 0, 0, 1, 1},
--  {&__pyx_n_s__im, __pyx_k__im, sizeof(__pyx_k__im), 0, 0, 1, 1},
--  {&__pyx_n_s__imn, __pyx_k__imn, sizeof(__pyx_k__imn), 0, 0, 1, 1},
--  {&__pyx_n_s__in1, __pyx_k__in1, sizeof(__pyx_k__in1), 0, 0, 1, 1},
--  {&__pyx_n_s__in2, __pyx_k__in2, sizeof(__pyx_k__in2), 0, 0, 1, 1},
--  {&__pyx_n_s__intc, __pyx_k__intc, sizeof(__pyx_k__intc), 0, 0, 1, 1},
--  {&__pyx_n_s__iy, __pyx_k__iy, sizeof(__pyx_k__iy), 0, 0, 1, 1},
--  {&__pyx_n_s__jd1, __pyx_k__jd1, sizeof(__pyx_k__jd1), 0, 0, 1, 1},
--  {&__pyx_n_s__jd2, __pyx_k__jd2, sizeof(__pyx_k__jd2), 0, 0, 1, 1},
--  {&__pyx_n_s__jd_besselian_epoch, __pyx_k__jd_besselian_epoch, sizeof(__pyx_k__jd_besselian_epoch), 0, 0, 1, 1},
--  {&__pyx_n_s__jd_dtf, __pyx_k__jd_dtf, sizeof(__pyx_k__jd_dtf), 0, 0, 1, 1},
--  {&__pyx_n_s__jd_julian_epoch, __pyx_k__jd_julian_epoch, sizeof(__pyx_k__jd_julian_epoch), 0, 0, 1, 1},
--  {&__pyx_n_s__julian_epoch_jd, __pyx_k__julian_epoch_jd, sizeof(__pyx_k__julian_epoch_jd), 0, 0, 1, 1},
--  {&__pyx_n_s__n, __pyx_k__n, sizeof(__pyx_k__n), 0, 0, 1, 1},
--  {&__pyx_n_s__ndp, __pyx_k__ndp, sizeof(__pyx_k__ndp), 0, 0, 1, 1},
--  {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
--  {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
--  {&__pyx_n_s__ord, __pyx_k__ord, sizeof(__pyx_k__ord), 0, 0, 1, 1},
--  {&__pyx_n_s__out, __pyx_k__out, sizeof(__pyx_k__out), 0, 0, 1, 1},
--  {&__pyx_n_s__out1, __pyx_k__out1, sizeof(__pyx_k__out1), 0, 0, 1, 1},
--  {&__pyx_n_s__out2, __pyx_k__out2, sizeof(__pyx_k__out2), 0, 0, 1, 1},
--  {&__pyx_n_s__phi, __pyx_k__phi, sizeof(__pyx_k__phi), 0, 0, 1, 1},
--  {&__pyx_n_s__rad, __pyx_k__rad, sizeof(__pyx_k__rad), 0, 0, 1, 1},
--  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
--  {&__pyx_n_s__ret, __pyx_k__ret, sizeof(__pyx_k__ret), 0, 0, 1, 1},
--  {&__pyx_n_s__s, __pyx_k__s, sizeof(__pyx_k__s), 0, 0, 1, 1},
--  {&__pyx_n_s__scale, __pyx_k__scale, sizeof(__pyx_k__scale), 0, 0, 1, 1},
--  {&__pyx_n_s__sec, __pyx_k__sec, sizeof(__pyx_k__sec), 0, 0, 1, 1},
--  {&__pyx_n_s__sign, __pyx_k__sign, sizeof(__pyx_k__sign), 0, 0, 1, 1},
--  {&__pyx_n_s__tai_tt, __pyx_k__tai_tt, sizeof(__pyx_k__tai_tt), 0, 0, 1, 1},
--  {&__pyx_n_s__tai_ut1, __pyx_k__tai_ut1, sizeof(__pyx_k__tai_ut1), 0, 0, 1, 1},
--  {&__pyx_n_s__tai_utc, __pyx_k__tai_utc, sizeof(__pyx_k__tai_utc), 0, 0, 1, 1},
--  {&__pyx_n_s__tcb_tdb, __pyx_k__tcb_tdb, sizeof(__pyx_k__tcb_tdb), 0, 0, 1, 1},
--  {&__pyx_n_s__tcg_tt, __pyx_k__tcg_tt, sizeof(__pyx_k__tcg_tt), 0, 0, 1, 1},
--  {&__pyx_n_s__tdb_tcb, __pyx_k__tdb_tcb, sizeof(__pyx_k__tdb_tcb), 0, 0, 1, 1},
--  {&__pyx_n_s__tdb_tt, __pyx_k__tdb_tt, sizeof(__pyx_k__tdb_tt), 0, 0, 1, 1},
--  {&__pyx_n_s__tt_tai, __pyx_k__tt_tai, sizeof(__pyx_k__tt_tai), 0, 0, 1, 1},
--  {&__pyx_n_s__tt_tcg, __pyx_k__tt_tcg, sizeof(__pyx_k__tt_tcg), 0, 0, 1, 1},
--  {&__pyx_n_s__tt_tdb, __pyx_k__tt_tdb, sizeof(__pyx_k__tt_tdb), 0, 0, 1, 1},
--  {&__pyx_n_s__tt_ut1, __pyx_k__tt_ut1, sizeof(__pyx_k__tt_ut1), 0, 0, 1, 1},
--  {&__pyx_n_s__u, __pyx_k__u, sizeof(__pyx_k__u), 0, 0, 1, 1},
--  {&__pyx_n_s__ut, __pyx_k__ut, sizeof(__pyx_k__ut), 0, 0, 1, 1},
--  {&__pyx_n_s__ut1_tai, __pyx_k__ut1_tai, sizeof(__pyx_k__ut1_tai), 0, 0, 1, 1},
--  {&__pyx_n_s__ut1_tt, __pyx_k__ut1_tt, sizeof(__pyx_k__ut1_tt), 0, 0, 1, 1},
--  {&__pyx_n_s__ut1_utc, __pyx_k__ut1_utc, sizeof(__pyx_k__ut1_utc), 0, 0, 1, 1},
--  {&__pyx_n_s__utc_tai, __pyx_k__utc_tai, sizeof(__pyx_k__utc_tai), 0, 0, 1, 1},
--  {&__pyx_n_s__utc_ut1, __pyx_k__utc_ut1, sizeof(__pyx_k__utc_ut1), 0, 0, 1, 1},
--  {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1},
--  {&__pyx_n_s__warn, __pyx_k__warn, sizeof(__pyx_k__warn), 0, 0, 1, 1},
--  {&__pyx_n_s__warnings, __pyx_k__warnings, sizeof(__pyx_k__warnings), 0, 0, 1, 1},
--  {&__pyx_n_s__warns, __pyx_k__warns, sizeof(__pyx_k__warns), 0, 0, 1, 1},
--  {&__pyx_n_s__xyz, __pyx_k__xyz, sizeof(__pyx_k__xyz), 0, 0, 1, 1},
--  {0, 0, 0, 0, 0, 0, 0}
--};
--static int __Pyx_InitCachedBuiltins(void) {
--  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_ord = __Pyx_GetName(__pyx_b, __pyx_n_s__ord); if (!__pyx_builtin_ord) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--static int __Pyx_InitCachedConstants(void) {
--  __Pyx_RefNannyDeclarations
--  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
--
--  /* "astropy/time/erfa_time.pyx":1319
-- *     **  4) The inverse transformation is performed in the function eraGc2gd.
-- *     """
-- *     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)             # <<<<<<<<<<<<<<
-- * 
-- *     errs = {-1: 'illegal identifier',
-- */
--  __pyx_k_tuple_23 = PyTuple_Pack(1, __pyx_int_3); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_23);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_23));
--
--  /* "numpy.pxd":215
-- *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- */
--  __pyx_k_tuple_27 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_26)); if (unlikely(!__pyx_k_tuple_27)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_27);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_27));
--
--  /* "numpy.pxd":219
-- *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
-- *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
-- *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
-- * 
-- *             info.buf = PyArray_DATA(self)
-- */
--  __pyx_k_tuple_29 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_28)); if (unlikely(!__pyx_k_tuple_29)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_29);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_29));
--
--  /* "numpy.pxd":257
-- *                 if ((descr.byteorder == c'>' and little_endian) or
-- *                     (descr.byteorder == c'<' and not little_endian)):
-- *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *                 if   t == NPY_BYTE:        f = "b"
-- *                 elif t == NPY_UBYTE:       f = "B"
-- */
--  __pyx_k_tuple_31 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_30)); if (unlikely(!__pyx_k_tuple_31)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_31);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_31));
--
--  /* "numpy.pxd":799
-- * 
-- *         if (end - f) - (new_offset - offset[0]) < 15:
-- *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
-- * 
-- *         if ((child.byteorder == c'>' and little_endian) or
-- */
--  __pyx_k_tuple_34 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_33)); if (unlikely(!__pyx_k_tuple_34)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_34);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_34));
--
--  /* "numpy.pxd":803
-- *         if ((child.byteorder == c'>' and little_endian) or
-- *             (child.byteorder == c'<' and not little_endian)):
-- *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
-- *             # One could encode it in the format string and have Cython
-- *             # complain instead, BUT: < and > in format strings also imply
-- */
--  __pyx_k_tuple_35 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_30)); if (unlikely(!__pyx_k_tuple_35)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_35);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_35));
--
--  /* "numpy.pxd":823
-- *             t = child.type_num
-- *             if end - f < 5:
-- *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
-- * 
-- *             # Until ticket #99 is fixed, use integers to avoid warnings
-- */
--  __pyx_k_tuple_37 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_36)); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_37);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_37));
--
--  /* "astropy/time/erfa_time.pyx":54
-- *           'beyond last known leap second)'
-- * 
-- * def check_return(ret, func_name, warns={}, errors={}):             # <<<<<<<<<<<<<<
-- *     """Check the return value from an era routine"""
-- *     if ret in warns:
-- */
--  __pyx_k_tuple_40 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__ret), ((PyObject *)__pyx_n_s__func_name), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errors)); if (unlikely(!__pyx_k_tuple_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_40);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_40));
--  __pyx_k_codeobj_41 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__check_return, 54, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":67
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def cal2jd(             # <<<<<<<<<<<<<<
-- *     np.ndarray[int, ndim=1] iy,
-- *     np.ndarray[int, ndim=1] im,
-- */
--  __pyx_k_tuple_44 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__djm0), ((PyObject *)__pyx_n_s__djm), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_44);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_44));
--  __pyx_k_codeobj_45 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__cal2jd, 67, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":118
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def d_tai_utc(np.ndarray[int, ndim=1] iy,             # <<<<<<<<<<<<<<
-- *               np.ndarray[int, ndim=1] im,
-- *               np.ndarray[int, ndim=1] id,
-- */
--  __pyx_k_tuple_46 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__fd), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_46);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_46));
--  __pyx_k_codeobj_47 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__d_tai_utc, 118, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":216
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_dtf(scale, ndp,             # <<<<<<<<<<<<<<
-- *               np.ndarray[double, ndim=1] d1,
-- *               np.ndarray[double, ndim=1] d2):
-- */
--  __pyx_k_tuple_48 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__scale), ((PyObject *)__pyx_n_s__ndp), ((PyObject *)__pyx_n_s__d1), ((PyObject *)__pyx_n_s__d2), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__ihmsf), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_48)) {__pyx_filename = __pyx_f[0]; _ [...]
--  __Pyx_GOTREF(__pyx_k_tuple_48);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_48));
--  __pyx_k_codeobj_49 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__jd_dtf, 216, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":295
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def dtf_jd(scale,             # <<<<<<<<<<<<<<
-- *               np.ndarray[int, ndim=1] iy,
-- *               np.ndarray[int, ndim=1] im,
-- */
--  __pyx_k_tuple_50 = PyTuple_Pack(14, ((PyObject *)__pyx_n_s__scale), ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__ihr), ((PyObject *)__pyx_n_s__imn), ((PyObject *)__pyx_n_s__sec), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_50)) [...]
--  __Pyx_GOTREF(__pyx_k_tuple_50);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_50));
--  __pyx_k_codeobj_51 = (PyObject*)__Pyx_PyCode_New(7, 0, 14, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__dtf_jd, 295, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":389
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_52 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_52);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_52));
--  __pyx_k_codeobj_53 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tai_tt, 389, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":426
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tcb_tdb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_54 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_54);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_54));
--  __pyx_k_codeobj_55 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tcb_tdb, 426, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":482
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tcg_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_56 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_56);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_56));
--  __pyx_k_codeobj_57 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tcg_tt, 482, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":513
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tdb_tcb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_58 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_58);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_58));
--  __pyx_k_codeobj_59 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tdb_tcb, 513, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":543
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_60 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_60);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_60));
--  __pyx_k_codeobj_61 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_tai, 543, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":573
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tcg(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_62 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_62);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_62));
--  __pyx_k_codeobj_63 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_tcg, 573, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":602
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def utc_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_64 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_64);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_64));
--  __pyx_k_codeobj_65 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__utc_tai, 602, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":660
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_utc(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_k_tuple_66 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_66);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_66));
--  __pyx_k_codeobj_67 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tai_utc, 660, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":717
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_68 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_68);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_68));
--  __pyx_k_codeobj_69 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tai_ut1, 717, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":759
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_70 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_70);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_70));
--  __pyx_k_codeobj_71 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__ut1_tai, 759, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":801
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_72 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_72);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_72));
--  __pyx_k_codeobj_73 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_ut1, 801, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":842
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_74 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_74);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_74));
--  __pyx_k_codeobj_75 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__ut1_tt, 842, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":883
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tdb_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_76 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_76);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_76));
--  __pyx_k_codeobj_77 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tdb_tt, 883, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":933
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tdb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_78 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_78);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_78));
--  __pyx_k_codeobj_79 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_tdb, 933, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":983
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_utc(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_80 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_80);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_80));
--  __pyx_k_codeobj_81 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__ut1_utc, 983, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1047
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def utc_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_k_tuple_82 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_82);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82));
--  __pyx_k_codeobj_83 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__utc_ut1, 1047, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1115
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def d_tdb_tt(np.ndarray[double, ndim=1] in1,             # <<<<<<<<<<<<<<
-- *              np.ndarray[double, ndim=1] in2,
-- *              np.ndarray[double, ndim=1] ut,
-- */
--  __pyx_k_tuple_84 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__ut), ((PyObject *)__pyx_n_s__elong), ((PyObject *)__pyx_n_s__u), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__c_elong), ((PyObject *)__pyx_n_s__c_u), ((PyObject *)__pyx_n_s__c_v)); if (unlikely(!__pyx_k_tuple_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_cline [...]
--  __Pyx_GOTREF(__pyx_k_tuple_84);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_84));
--  __pyx_k_codeobj_85 = (PyObject*)__Pyx_PyCode_New(6, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__d_tdb_tt, 1115, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1234
-- * 
-- * 
-- * def era_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
-- *     """
-- *     int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
-- */
--  __pyx_k_tuple_86 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__sign), ((PyObject *)__pyx_n_s__ideg), ((PyObject *)__pyx_n_s__iamin), ((PyObject *)__pyx_n_s__asec), ((PyObject *)__pyx_n_s__rad), ((PyObject *)__pyx_n_s__s), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_86);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_86));
--  __pyx_k_codeobj_87 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__era_af2a, 1234, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1275
-- *     return rad
-- * 
-- * def era_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
-- *     """
-- *     Wrap
-- */
--  __pyx_k_tuple_88 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__elong), ((PyObject *)__pyx_n_s__phi), ((PyObject *)__pyx_n_s__height), ((PyObject *)__pyx_n_s__xyz), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_88);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_88));
--  __pyx_k_codeobj_89 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__era_gd2gc, 1275, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1332
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
-- *                     np.ndarray[double, ndim=1] jd2):
-- *     """ Wrap double eraEpj(double dj1, double dj2)
-- */
--  __pyx_k_tuple_90 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__epd)); if (unlikely(!__pyx_k_tuple_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_90);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_90));
--  __pyx_k_codeobj_91 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__jd_julian_epoch, 1332, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1363
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def julian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
-- *     """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
-- *     **  Julian Epoch to Julian Date.
-- */
--  __pyx_k_tuple_92 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__epd), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2)); if (unlikely(!__pyx_k_tuple_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_92);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_92));
--  __pyx_k_codeobj_93 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__julian_epoch_jd, 1363, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1385
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
-- *                        np.ndarray[double, ndim=1] jd2):
-- *     """ Wrap double eraEpb(double dj1, double dj2)
-- */
--  __pyx_k_tuple_94 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__epd)); if (unlikely(!__pyx_k_tuple_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_94);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_94));
--  __pyx_k_codeobj_95 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__jd_besselian_epoch, 1385, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":1416
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
-- *     """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
-- *     **  Besselian Epoch to Julian Date.
-- */
--  __pyx_k_tuple_96 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__epd), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2)); if (unlikely(!__pyx_k_tuple_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_k_tuple_96);
--  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_96));
--  __pyx_k_codeobj_97 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__besselian_epoch_jd, 1416, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_RefNannyFinishContext();
--  return 0;
--  __pyx_L1_error:;
--  __Pyx_RefNannyFinishContext();
--  return -1;
--}
--
--static int __Pyx_InitGlobals(void) {
--  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_2 = PyInt_FromLong(-2); if (unlikely(!__pyx_int_neg_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_3 = PyInt_FromLong(-3); if (unlikely(!__pyx_int_neg_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_4 = PyInt_FromLong(-4); if (unlikely(!__pyx_int_neg_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_5 = PyInt_FromLong(-5); if (unlikely(!__pyx_int_neg_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_neg_6 = PyInt_FromLong(-6); if (unlikely(!__pyx_int_neg_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  return 0;
--  __pyx_L1_error:;
--  return -1;
--}
--
--#if PY_MAJOR_VERSION < 3
--PyMODINIT_FUNC initerfa_time(void); /*proto*/
--PyMODINIT_FUNC initerfa_time(void)
--#else
--PyMODINIT_FUNC PyInit_erfa_time(void); /*proto*/
--PyMODINIT_FUNC PyInit_erfa_time(void)
--#endif
--{
--  PyObject *__pyx_t_1 = NULL;
--  PyObject *__pyx_t_2 = NULL;
--  __Pyx_RefNannyDeclarations
--  #if CYTHON_REFNANNY
--  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
--  if (!__Pyx_RefNanny) {
--      PyErr_Clear();
--      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
--      if (!__Pyx_RefNanny)
--          Py_FatalError("failed to import 'refnanny' module");
--  }
--  #endif
--  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_erfa_time(void)", 0);
--  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #ifdef __Pyx_CyFunction_USED
--  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_FusedFunction_USED
--  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  #ifdef __Pyx_Generator_USED
--  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #endif
--  /*--- Library function declarations ---*/
--  /*--- Threads initialization code ---*/
--  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
--  #ifdef WITH_THREAD /* Python build with threading support? */
--  PyEval_InitThreads();
--  #endif
--  #endif
--  /*--- Module creation code ---*/
--  #if PY_MAJOR_VERSION < 3
--  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("erfa_time"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
--  #else
--  __pyx_m = PyModule_Create(&__pyx_moduledef);
--  #endif
--  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if PY_MAJOR_VERSION >= 3
--  {
--    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    if (!PyDict_GetItemString(modules, "astropy.time.erfa_time")) {
--      if (unlikely(PyDict_SetItemString(modules, "astropy.time.erfa_time", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--    }
--  }
--  #endif
--  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  #if CYTHON_COMPILING_IN_PYPY
--  Py_INCREF(__pyx_b);
--  #endif
--  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  /*--- Initialize various global constants etc. ---*/
--  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  if (__pyx_module_is_main_astropy__time__erfa_time) {
--    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
--  }
--  /*--- Builtin init code ---*/
--  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Constants init code ---*/
--  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Global init code ---*/
--  /*--- Variable export code ---*/
--  /*--- Function export code ---*/
--  /*--- Type init code ---*/
--  /*--- Type import code ---*/
--  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
--  #if CYTHON_COMPILING_IN_PYPY
--  sizeof(PyTypeObject),
--  #else
--  sizeof(PyHeapTypeObject),
--  #endif
--  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  /*--- Variable import code ---*/
--  /*--- Function import code ---*/
--  /*--- Execution code ---*/
--
--  /* "astropy/time/erfa_time.pyx":1
-- * import warnings             # <<<<<<<<<<<<<<
-- * 
-- * from ..utils.exceptions import AstropyUserWarning
-- */
--  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__warnings), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__warnings, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--
--  /* "astropy/time/erfa_time.pyx":3
-- * import warnings
-- * 
-- * from ..utils.exceptions import AstropyUserWarning             # <<<<<<<<<<<<<<
-- * 
-- * import numpy as np
-- */
--  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_1);
--  __Pyx_INCREF(((PyObject *)__pyx_n_s__AstropyUserWarning));
--  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__AstropyUserWarning));
--  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__AstropyUserWarning));
--  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_38), ((PyObject *)__pyx_t_1), 2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
--  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__AstropyUserWarning);
--  if (__pyx_t_1 == NULL) {
--    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__AstropyUserWarning);
--    if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  }
--  __Pyx_GOTREF(__pyx_t_1);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__AstropyUserWarning, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":5
-- * from ..utils.exceptions import AstropyUserWarning
-- * 
-- * import numpy as np             # <<<<<<<<<<<<<<
-- * cimport numpy as np
-- * import cython
-- */
--  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":51
-- *     int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])
-- * 
-- * DUBIOUS = 'dubious year for UTC (before 1960.0 or 5 years ' \             # <<<<<<<<<<<<<<
-- *           'beyond last known leap second)'
-- * 
-- */
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DUBIOUS, ((PyObject *)__pyx_kp_s_39)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--
--  /* "astropy/time/erfa_time.pyx":54
-- *           'beyond last known leap second)'
-- * 
-- * def check_return(ret, func_name, warns={}, errors={}):             # <<<<<<<<<<<<<<
-- *     """Check the return value from an era routine"""
-- *     if ret in warns:
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_k_1 = ((PyObject *)__pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  __pyx_k_2 = ((PyObject *)__pyx_t_2);
--  __Pyx_GIVEREF(__pyx_t_2);
--  __pyx_t_2 = 0;
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_1check_return, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__check_return, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":67
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def cal2jd(             # <<<<<<<<<<<<<<
-- *     np.ndarray[int, ndim=1] iy,
-- *     np.ndarray[int, ndim=1] im,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_3cal2jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__cal2jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":118
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def d_tai_utc(np.ndarray[int, ndim=1] iy,             # <<<<<<<<<<<<<<
-- *               np.ndarray[int, ndim=1] im,
-- *               np.ndarray[int, ndim=1] id,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_5d_tai_utc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__d_tai_utc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":216
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_dtf(scale, ndp,             # <<<<<<<<<<<<<<
-- *               np.ndarray[double, ndim=1] d1,
-- *               np.ndarray[double, ndim=1] d2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_7jd_dtf, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_dtf, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":295
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def dtf_jd(scale,             # <<<<<<<<<<<<<<
-- *               np.ndarray[int, ndim=1] iy,
-- *               np.ndarray[int, ndim=1] im,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_9dtf_jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__dtf_jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":389
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_11tai_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":426
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tcb_tdb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_13tcb_tdb, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tcb_tdb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":482
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tcg_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_15tcg_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tcg_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":513
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tdb_tcb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_17tdb_tcb, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tdb_tcb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":543
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_19tt_tai, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tai, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":573
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tcg(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_21tt_tcg, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tcg, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":602
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def utc_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_23utc_tai, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__utc_tai, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":660
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_utc(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2):
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_25tai_utc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_utc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":717
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tai_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_27tai_ut1, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_ut1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":759
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_tai(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_29ut1_tai, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_tai, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":801
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_31tt_ut1, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_ut1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":842
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_33ut1_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":883
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tdb_tt(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_35tdb_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tdb_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":933
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def tt_tdb(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_37tt_tdb, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tdb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":983
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def ut1_utc(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_39ut1_utc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_utc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1047
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def utc_ut1(             # <<<<<<<<<<<<<<
-- *     np.ndarray[double, ndim=1] in1,
-- *     np.ndarray[double, ndim=1] in2,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_41utc_ut1, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__utc_ut1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1115
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def d_tdb_tt(np.ndarray[double, ndim=1] in1,             # <<<<<<<<<<<<<<
-- *              np.ndarray[double, ndim=1] in2,
-- *              np.ndarray[double, ndim=1] ut,
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_43d_tdb_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__d_tdb_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1234
-- * 
-- * 
-- * def era_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
-- *     """
-- *     int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_45era_af2a, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__era_af2a, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1275
-- *     return rad
-- * 
-- * def era_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
-- *     """
-- *     Wrap
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_47era_gd2gc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__era_gd2gc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1332
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
-- *                     np.ndarray[double, ndim=1] jd2):
-- *     """ Wrap double eraEpj(double dj1, double dj2)
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_49jd_julian_epoch, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_julian_epoch, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1363
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def julian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
-- *     """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
-- *     **  Julian Epoch to Julian Date.
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_51julian_epoch_jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__julian_epoch_jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1385
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
-- *                        np.ndarray[double, ndim=1] jd2):
-- *     """ Wrap double eraEpb(double dj1, double dj2)
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_53jd_besselian_epoch, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_besselian_epoch, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1416
-- * @cython.wraparound(False)
-- * @cython.boundscheck(False)
-- * def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
-- *     """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
-- *     **  Besselian Epoch to Julian Date.
-- */
--  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_55besselian_epoch_jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(__pyx_t_2);
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__besselian_epoch_jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
--
--  /* "astropy/time/erfa_time.pyx":1
-- * import warnings             # <<<<<<<<<<<<<<
-- * 
-- * from ..utils.exceptions import AstropyUserWarning
-- */
--  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
--  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
--  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
--
--  /* "numpy.pxd":975
-- *      arr.base = baseptr
-- * 
-- * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
-- *     if arr.base is NULL:
-- *         return None
-- */
--  goto __pyx_L0;
--  __pyx_L1_error:;
--  __Pyx_XDECREF(__pyx_t_1);
--  __Pyx_XDECREF(__pyx_t_2);
--  if (__pyx_m) {
--    __Pyx_AddTraceback("init astropy.time.erfa_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
--    Py_DECREF(__pyx_m); __pyx_m = 0;
--  } else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_ImportError, "init astropy.time.erfa_time");
--  }
--  __pyx_L0:;
--  __Pyx_RefNannyFinishContext();
--  #if PY_MAJOR_VERSION < 3
--  return;
--  #else
--  return __pyx_m;
--  #endif
--}
--
--/* Runtime support code */
--#if CYTHON_REFNANNY
--static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
--    PyObject *m = NULL, *p = NULL;
--    void *r = NULL;
--    m = PyImport_ImportModule((char *)modname);
--    if (!m) goto end;
--    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
--    if (!p) goto end;
--    r = PyLong_AsVoidPtr(p);
--end:
--    Py_XDECREF(p);
--    Py_XDECREF(m);
--    return (__Pyx_RefNannyAPIStruct *)r;
--}
--#endif /* CYTHON_REFNANNY */
--
--static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
--    PyObject *result;
--    result = PyObject_GetAttr(dict, name);
--    if (!result) {
--        if (dict != __pyx_b) {
--            PyErr_Clear();
--            result = PyObject_GetAttr(__pyx_b, name);
--        }
--        if (!result) {
--            PyErr_SetObject(PyExc_NameError, name);
--        }
--    }
--    return result;
--}
--
--static void __Pyx_RaiseArgtupleInvalid(
--    const char* func_name,
--    int exact,
--    Py_ssize_t num_min,
--    Py_ssize_t num_max,
--    Py_ssize_t num_found)
--{
--    Py_ssize_t num_expected;
--    const char *more_or_less;
--    if (num_found < num_min) {
--        num_expected = num_min;
--        more_or_less = "at least";
--    } else {
--        num_expected = num_max;
--        more_or_less = "at most";
--    }
--    if (exact) {
--        more_or_less = "exactly";
--    }
--    PyErr_Format(PyExc_TypeError,
--                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_T "d given)",
--                 func_name, more_or_less, num_expected,
--                 (num_expected == 1) ? "" : "s", num_found);
--}
--
--static void __Pyx_RaiseDoubleKeywordsError(
--    const char* func_name,
--    PyObject* kw_name)
--{
--    PyErr_Format(PyExc_TypeError,
--        #if PY_MAJOR_VERSION >= 3
--        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
--        #else
--        "%s() got multiple values for keyword argument '%s'", func_name,
--        PyString_AsString(kw_name));
--        #endif
--}
--
--static int __Pyx_ParseOptionalKeywords(
--    PyObject *kwds,
--    PyObject **argnames[],
--    PyObject *kwds2,
--    PyObject *values[],
--    Py_ssize_t num_pos_args,
--    const char* function_name)
--{
--    PyObject *key = 0, *value = 0;
--    Py_ssize_t pos = 0;
--    PyObject*** name;
--    PyObject*** first_kw_arg = argnames + num_pos_args;
--    while (PyDict_Next(kwds, &pos, &key, &value)) {
--        name = first_kw_arg;
--        while (*name && (**name != key)) name++;
--        if (*name) {
--            values[name-argnames] = value;
--            continue;
--        }
--        name = first_kw_arg;
--        #if PY_MAJOR_VERSION < 3
--        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
--            while (*name) {
--                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
--                        && _PyString_Eq(**name, key)) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    if ((**argname == key) || (
--                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
--                             && _PyString_Eq(**argname, key))) {
--                        goto arg_passed_twice;
--                    }
--                    argname++;
--                }
--            }
--        } else
--        #endif
--        if (likely(PyUnicode_Check(key))) {
--            while (*name) {
--                int cmp = (**name == key) ? 0 :
--                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
--                #endif
--                    PyUnicode_Compare(**name, key);
--                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                if (cmp == 0) {
--                    values[name-argnames] = value;
--                    break;
--                }
--                name++;
--            }
--            if (*name) continue;
--            else {
--                PyObject*** argname = argnames;
--                while (argname != first_kw_arg) {
--                    int cmp = (**argname == key) ? 0 :
--                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
--                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
--                    #endif
--                        PyUnicode_Compare(**argname, key);
--                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
--                    if (cmp == 0) goto arg_passed_twice;
--                    argname++;
--                }
--            }
--        } else
--            goto invalid_keyword_type;
--        if (kwds2) {
--            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
--        } else {
--            goto invalid_keyword;
--        }
--    }
--    return 0;
--arg_passed_twice:
--    __Pyx_RaiseDoubleKeywordsError(function_name, key);
--    goto bad;
--invalid_keyword_type:
--    PyErr_Format(PyExc_TypeError,
--        "%s() keywords must be strings", function_name);
--    goto bad;
--invalid_keyword:
--    PyErr_Format(PyExc_TypeError,
--    #if PY_MAJOR_VERSION < 3
--        "%s() got an unexpected keyword argument '%s'",
--        function_name, PyString_AsString(key));
--    #else
--        "%s() got an unexpected keyword argument '%U'",
--        function_name, key);
--    #endif
--bad:
--    return -1;
--}
--
--static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyObject *tmp_type, *tmp_value, *tmp_tb;
--    PyThreadState *tstate = PyThreadState_GET();
--    tmp_type = tstate->curexc_type;
--    tmp_value = tstate->curexc_value;
--    tmp_tb = tstate->curexc_traceback;
--    tstate->curexc_type = type;
--    tstate->curexc_value = value;
--    tstate->curexc_traceback = tb;
--    Py_XDECREF(tmp_type);
--    Py_XDECREF(tmp_value);
--    Py_XDECREF(tmp_tb);
--#else
--    PyErr_Restore(type, value, tb);
--#endif
--}
--static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    *type = tstate->curexc_type;
--    *value = tstate->curexc_value;
--    *tb = tstate->curexc_traceback;
--    tstate->curexc_type = 0;
--    tstate->curexc_value = 0;
--    tstate->curexc_traceback = 0;
--#else
--    PyErr_Fetch(type, value, tb);
--#endif
--}
--
--#if PY_MAJOR_VERSION < 3
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
--                        CYTHON_UNUSED PyObject *cause) {
--    Py_XINCREF(type);
--    if (!value || value == Py_None)
--        value = NULL;
--    else
--        Py_INCREF(value);
--    if (!tb || tb == Py_None)
--        tb = NULL;
--    else {
--        Py_INCREF(tb);
--        if (!PyTraceBack_Check(tb)) {
--            PyErr_SetString(PyExc_TypeError,
--                "raise: arg 3 must be a traceback or None");
--            goto raise_error;
--        }
--    }
--    #if PY_VERSION_HEX < 0x02050000
--    if (PyClass_Check(type)) {
--    #else
--    if (PyType_Check(type)) {
--    #endif
--#if CYTHON_COMPILING_IN_PYPY
--        if (!value) {
--            Py_INCREF(Py_None);
--            value = Py_None;
--        }
--#endif
--        PyErr_NormalizeException(&type, &value, &tb);
--    } else {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto raise_error;
--        }
--        value = type;
--        #if PY_VERSION_HEX < 0x02050000
--            if (PyInstance_Check(type)) {
--                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
--                Py_INCREF(type);
--            }
--            else {
--                type = 0;
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception must be an old-style class or instance");
--                goto raise_error;
--            }
--        #else
--            type = (PyObject*) Py_TYPE(type);
--            Py_INCREF(type);
--            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
--                PyErr_SetString(PyExc_TypeError,
--                    "raise: exception class must be a subclass of BaseException");
--                goto raise_error;
--            }
--        #endif
--    }
--    __Pyx_ErrRestore(type, value, tb);
--    return;
--raise_error:
--    Py_XDECREF(value);
--    Py_XDECREF(type);
--    Py_XDECREF(tb);
--    return;
--}
--#else /* Python 3+ */
--static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
--    PyObject* owned_instance = NULL;
--    if (tb == Py_None) {
--        tb = 0;
--    } else if (tb && !PyTraceBack_Check(tb)) {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: arg 3 must be a traceback or None");
--        goto bad;
--    }
--    if (value == Py_None)
--        value = 0;
--    if (PyExceptionInstance_Check(type)) {
--        if (value) {
--            PyErr_SetString(PyExc_TypeError,
--                "instance exception may not have a separate value");
--            goto bad;
--        }
--        value = type;
--        type = (PyObject*) Py_TYPE(value);
--    } else if (PyExceptionClass_Check(type)) {
--        PyObject *args;
--        if (!value)
--            args = PyTuple_New(0);
--        else if (PyTuple_Check(value)) {
--            Py_INCREF(value);
--            args = value;
--        }
--        else
--            args = PyTuple_Pack(1, value);
--        if (!args)
--            goto bad;
--        owned_instance = PyEval_CallObject(type, args);
--        Py_DECREF(args);
--        if (!owned_instance)
--            goto bad;
--        value = owned_instance;
--        if (!PyExceptionInstance_Check(value)) {
--            PyErr_Format(PyExc_TypeError,
--                         "calling %R should have returned an instance of "
--                         "BaseException, not %R",
--                         type, Py_TYPE(value));
--            goto bad;
--        }
--    } else {
--        PyErr_SetString(PyExc_TypeError,
--            "raise: exception class must be a subclass of BaseException");
--        goto bad;
--    }
--    if (cause && cause != Py_None) {
--        PyObject *fixed_cause;
--        if (PyExceptionClass_Check(cause)) {
--            fixed_cause = PyObject_CallObject(cause, NULL);
--            if (fixed_cause == NULL)
--                goto bad;
--        }
--        else if (PyExceptionInstance_Check(cause)) {
--            fixed_cause = cause;
--            Py_INCREF(fixed_cause);
--        }
--        else {
--            PyErr_SetString(PyExc_TypeError,
--                            "exception causes must derive from "
--                            "BaseException");
--            goto bad;
--        }
--        PyException_SetCause(value, fixed_cause);
--    }
--    PyErr_SetObject(type, value);
--    if (tb) {
--        PyThreadState *tstate = PyThreadState_GET();
--        PyObject* tmp_tb = tstate->curexc_traceback;
--        if (tb != tmp_tb) {
--            Py_INCREF(tb);
--            tstate->curexc_traceback = tb;
--            Py_XDECREF(tmp_tb);
--        }
--    }
--bad:
--    Py_XDECREF(owned_instance);
--    return;
--}
--#endif
--
--static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
--    const char *name, int exact)
--{
--    if (!type) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (none_allowed && obj == Py_None) return 1;
--    else if (exact) {
--        if (Py_TYPE(obj) == type) return 1;
--    }
--    else {
--        if (PyObject_TypeCheck(obj, type)) return 1;
--    }
--    PyErr_Format(PyExc_TypeError,
--        "Argument '%s' has incorrect type (expected %s, got %s)",
--        name, type->tp_name, Py_TYPE(obj)->tp_name);
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_IsLittleEndian(void) {
--  unsigned int n = 1;
--  return *(unsigned char*)(&n) != 0;
--}
--static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
--                              __Pyx_BufFmt_StackElem* stack,
--                              __Pyx_TypeInfo* type) {
--  stack[0].field = &ctx->root;
--  stack[0].parent_offset = 0;
--  ctx->root.type = type;
--  ctx->root.name = "buffer dtype";
--  ctx->root.offset = 0;
--  ctx->head = stack;
--  ctx->head->field = &ctx->root;
--  ctx->fmt_offset = 0;
--  ctx->head->parent_offset = 0;
--  ctx->new_packmode = '@';
--  ctx->enc_packmode = '@';
--  ctx->new_count = 1;
--  ctx->enc_count = 0;
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  ctx->is_valid_array = 0;
--  ctx->struct_alignment = 0;
--  while (type->typegroup == 'S') {
--    ++ctx->head;
--    ctx->head->field = type->fields;
--    ctx->head->parent_offset = 0;
--    type = type->fields->type;
--  }
--}
--static int __Pyx_BufFmt_ParseNumber(const char** ts) {
--    int count;
--    const char* t = *ts;
--    if (*t < '0' || *t > '9') {
--      return -1;
--    } else {
--        count = *t++ - '0';
--        while (*t >= '0' && *t < '9') {
--            count *= 10;
--            count += *t++ - '0';
--        }
--    }
--    *ts = t;
--    return count;
--}
--static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
--    int number = __Pyx_BufFmt_ParseNumber(ts);
--    if (number == -1) /* First char was not a digit */
--        PyErr_Format(PyExc_ValueError,\
--                     "Does not understand character buffer dtype format string ('%c')", **ts);
--    return number;
--}
--static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
--  PyErr_Format(PyExc_ValueError,
--               "Unexpected format string character: '%c'", ch);
--}
--static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': return "'char'";
--    case 'b': return "'signed char'";
--    case 'B': return "'unsigned char'";
--    case 'h': return "'short'";
--    case 'H': return "'unsigned short'";
--    case 'i': return "'int'";
--    case 'I': return "'unsigned int'";
--    case 'l': return "'long'";
--    case 'L': return "'unsigned long'";
--    case 'q': return "'long long'";
--    case 'Q': return "'unsigned long long'";
--    case 'f': return (is_complex ? "'complex float'" : "'float'");
--    case 'd': return (is_complex ? "'complex double'" : "'double'");
--    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
--    case 'T': return "a struct";
--    case 'O': return "Python object";
--    case 'P': return "a pointer";
--    case 's': case 'p': return "a string";
--    case 0: return "end";
--    default: return "unparseable format string";
--  }
--}
--static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return 2;
--    case 'i': case 'I': case 'l': case 'L': return 4;
--    case 'q': case 'Q': return 8;
--    case 'f': return (is_complex ? 8 : 4);
--    case 'd': return (is_complex ? 16 : 8);
--    case 'g': {
--      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
--      return 0;
--    }
--    case 'O': case 'P': return sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
--  switch (ch) {
--    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(short);
--    case 'i': case 'I': return sizeof(int);
--    case 'l': case 'L': return sizeof(long);
--    #ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
--    #endif
--    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
--    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
--    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
--    case 'O': case 'P': return sizeof(void*);
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--typedef struct { char c; short x; } __Pyx_st_short;
--typedef struct { char c; int x; } __Pyx_st_int;
--typedef struct { char c; long x; } __Pyx_st_long;
--typedef struct { char c; float x; } __Pyx_st_float;
--typedef struct { char c; double x; } __Pyx_st_double;
--typedef struct { char c; long double x; } __Pyx_st_longdouble;
--typedef struct { char c; void *x; } __Pyx_st_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--/* These are for computing the padding at the end of the struct to align
--   on the first member of the struct. This will probably the same as above,
--   but we don't have any guarantees.
-- */
--typedef struct { short x; char c; } __Pyx_pad_short;
--typedef struct { int x; char c; } __Pyx_pad_int;
--typedef struct { long x; char c; } __Pyx_pad_long;
--typedef struct { float x; char c; } __Pyx_pad_float;
--typedef struct { double x; char c; } __Pyx_pad_double;
--typedef struct { long double x; char c; } __Pyx_pad_longdouble;
--typedef struct { void *x; char c; } __Pyx_pad_void_p;
--#ifdef HAVE_LONG_LONG
--typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
--#endif
--static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
--  switch (ch) {
--    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
--    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
--    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
--    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
--#ifdef HAVE_LONG_LONG
--    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
--#endif
--    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
--    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
--    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
--    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
--    default:
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--}
--static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
--  switch (ch) {
--    case 'c':
--        return 'H';
--    case 'b': case 'h': case 'i':
--    case 'l': case 'q': case 's': case 'p':
--        return 'I';
--    case 'B': case 'H': case 'I': case 'L': case 'Q':
--        return 'U';
--    case 'f': case 'd': case 'g':
--        return (is_complex ? 'C' : 'R');
--    case 'O':
--        return 'O';
--    case 'P':
--        return 'P';
--    default: {
--      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
--      return 0;
--    }
--  }
--}
--static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
--  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
--    const char* expected;
--    const char* quote;
--    if (ctx->head == NULL) {
--      expected = "end";
--      quote = "";
--    } else {
--      expected = ctx->head->field->type->name;
--      quote = "'";
--    }
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected %s%s%s but got %s",
--                 quote, expected, quote,
--                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
--  } else {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_StructField* parent = (ctx->head - 1)->field;
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
--                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
--                 parent->type->name, field->name);
--  }
--}
--static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
--  char group;
--  size_t size, offset, arraysize = 1;
--  if (ctx->enc_type == 0) return 0;
--  if (ctx->head->field->type->arraysize[0]) {
--    int i, ndim = 0;
--    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
--        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
--        ndim = 1;
--        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
--            PyErr_Format(PyExc_ValueError,
--                         "Expected a dimension of size %zu, got %zu",
--                         ctx->head->field->type->arraysize[0], ctx->enc_count);
--            return -1;
--        }
--    }
--    if (!ctx->is_valid_array) {
--      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
--                   ctx->head->field->type->ndim, ndim);
--      return -1;
--    }
--    for (i = 0; i < ctx->head->field->type->ndim; i++) {
--      arraysize *= ctx->head->field->type->arraysize[i];
--    }
--    ctx->is_valid_array = 0;
--    ctx->enc_count = 1;
--  }
--  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
--  do {
--    __Pyx_StructField* field = ctx->head->field;
--    __Pyx_TypeInfo* type = field->type;
--    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
--      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
--    } else {
--      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
--    }
--    if (ctx->enc_packmode == '@') {
--      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
--      size_t align_mod_offset;
--      if (align_at == 0) return -1;
--      align_mod_offset = ctx->fmt_offset % align_at;
--      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
--      if (ctx->struct_alignment == 0)
--          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
--                                                                 ctx->is_complex);
--    }
--    if (type->size != size || type->typegroup != group) {
--      if (type->typegroup == 'C' && type->fields != NULL) {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        ++ctx->head;
--        ctx->head->field = type->fields;
--        ctx->head->parent_offset = parent_offset;
--        continue;
--      }
--      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
--      } else {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--      }
--    }
--    offset = ctx->head->parent_offset + field->offset;
--    if (ctx->fmt_offset != offset) {
--      PyErr_Format(PyExc_ValueError,
--                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
--                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
--      return -1;
--    }
--    ctx->fmt_offset += size;
--    if (arraysize)
--      ctx->fmt_offset += (arraysize - 1) * size;
--    --ctx->enc_count; /* Consume from buffer string */
--    while (1) {
--      if (field == &ctx->root) {
--        ctx->head = NULL;
--        if (ctx->enc_count != 0) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return -1;
--        }
--        break; /* breaks both loops as ctx->enc_count == 0 */
--      }
--      ctx->head->field = ++field;
--      if (field->type == NULL) {
--        --ctx->head;
--        field = ctx->head->field;
--        continue;
--      } else if (field->type->typegroup == 'S') {
--        size_t parent_offset = ctx->head->parent_offset + field->offset;
--        if (field->type->fields->type == NULL) continue; /* empty struct */
--        field = field->type->fields;
--        ++ctx->head;
--        ctx->head->field = field;
--        ctx->head->parent_offset = parent_offset;
--        break;
--      } else {
--        break;
--      }
--    }
--  } while (ctx->enc_count);
--  ctx->enc_type = 0;
--  ctx->is_complex = 0;
--  return 0;
--}
--static CYTHON_INLINE PyObject *
--__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
--{
--    const char *ts = *tsp;
--    int i = 0, number;
--    int ndim = ctx->head->field->type->ndim;
--;
--    ++ts;
--    if (ctx->new_count != 1) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Cannot handle repeated arrays in format string");
--        return NULL;
--    }
--    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--    while (*ts && *ts != ')') {
--        if (isspace(*ts))
--            continue;
--        number = __Pyx_BufFmt_ExpectNumber(&ts);
--        if (number == -1) return NULL;
--        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
--            return PyErr_Format(PyExc_ValueError,
--                        "Expected a dimension of size %zu, got %d",
--                        ctx->head->field->type->arraysize[i], number);
--        if (*ts != ',' && *ts != ')')
--            return PyErr_Format(PyExc_ValueError,
--                                "Expected a comma in format string, got '%c'", *ts);
--        if (*ts == ',') ts++;
--        i++;
--    }
--    if (i != ndim)
--        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
--                            ctx->head->field->type->ndim, i);
--    if (!*ts) {
--        PyErr_SetString(PyExc_ValueError,
--                        "Unexpected end of format string, expected ')'");
--        return NULL;
--    }
--    ctx->is_valid_array = 1;
--    ctx->new_count = 1;
--    *tsp = ++ts;
--    return Py_None;
--}
--static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
--  int got_Z = 0;
--  while (1) {
--    switch(*ts) {
--      case 0:
--        if (ctx->enc_type != 0 && ctx->head == NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        if (ctx->head != NULL) {
--          __Pyx_BufFmt_RaiseExpected(ctx);
--          return NULL;
--        }
--                return ts;
--      case ' ':
--      case 10:
--      case 13:
--        ++ts;
--        break;
--      case '<':
--        if (!__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '>':
--      case '!':
--        if (__Pyx_IsLittleEndian()) {
--          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
--          return NULL;
--        }
--        ctx->new_packmode = '=';
--        ++ts;
--        break;
--      case '=':
--      case '@':
--      case '^':
--        ctx->new_packmode = *ts++;
--        break;
--      case 'T': /* substruct */
--        {
--          const char* ts_after_sub;
--          size_t i, struct_count = ctx->new_count;
--          size_t struct_alignment = ctx->struct_alignment;
--          ctx->new_count = 1;
--          ++ts;
--          if (*ts != '{') {
--            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
--            return NULL;
--          }
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          ctx->enc_count = 0;
--          ctx->struct_alignment = 0;
--          ++ts;
--          ts_after_sub = ts;
--          for (i = 0; i != struct_count; ++i) {
--            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
--            if (!ts_after_sub) return NULL;
--          }
--          ts = ts_after_sub;
--          if (struct_alignment) ctx->struct_alignment = struct_alignment;
--        }
--        break;
--      case '}': /* end of substruct; either repeat or move on */
--        {
--          size_t alignment = ctx->struct_alignment;
--          ++ts;
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_type = 0; /* Erase processed last struct element */
--          if (alignment && ctx->fmt_offset % alignment) {
--            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
--          }
--        }
--        return ts;
--      case 'x':
--        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--        ctx->fmt_offset += ctx->new_count;
--        ctx->new_count = 1;
--        ctx->enc_count = 0;
--        ctx->enc_type = 0;
--        ctx->enc_packmode = ctx->new_packmode;
--        ++ts;
--        break;
--      case 'Z':
--        got_Z = 1;
--        ++ts;
--        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
--          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
--          return NULL;
--        }        /* fall through */
--      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
--      case 'l': case 'L': case 'q': case 'Q':
--      case 'f': case 'd': case 'g':
--      case 'O': case 's': case 'p':
--        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
--            ctx->enc_packmode == ctx->new_packmode) {
--          ctx->enc_count += ctx->new_count;
--        } else {
--          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
--          ctx->enc_count = ctx->new_count;
--          ctx->enc_packmode = ctx->new_packmode;
--          ctx->enc_type = *ts;
--          ctx->is_complex = got_Z;
--        }
--        ++ts;
--        ctx->new_count = 1;
--        got_Z = 0;
--        break;
--      case ':':
--        ++ts;
--        while(*ts != ':') ++ts;
--        ++ts;
--        break;
--      case '(':
--        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
--        break;
--      default:
--        {
--          int number = __Pyx_BufFmt_ExpectNumber(&ts);
--          if (number == -1) return NULL;
--          ctx->new_count = (size_t)number;
--        }
--    }
--  }
--}
--static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
--  buf->buf = NULL;
--  buf->obj = NULL;
--  buf->strides = __Pyx_zeros;
--  buf->shape = __Pyx_zeros;
--  buf->suboffsets = __Pyx_minusones;
--}
--static CYTHON_INLINE int __Pyx_GetBufferAndValidate(
--        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
--        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
--{
--  if (obj == Py_None || obj == NULL) {
--    __Pyx_ZeroBuffer(buf);
--    return 0;
--  }
--  buf->buf = NULL;
--  if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail;
--  if (buf->ndim != nd) {
--    PyErr_Format(PyExc_ValueError,
--                 "Buffer has wrong number of dimensions (expected %d, got %d)",
--                 nd, buf->ndim);
--    goto fail;
--  }
--  if (!cast) {
--    __Pyx_BufFmt_Context ctx;
--    __Pyx_BufFmt_Init(&ctx, stack, dtype);
--    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
--  }
--  if ((unsigned)buf->itemsize != dtype->size) {
--    PyErr_Format(PyExc_ValueError,
--      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
--      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
--      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
--    goto fail;
--  }
--  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
--  return 0;
--fail:;
--  __Pyx_ZeroBuffer(buf);
--  return -1;
--}
--static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
--  if (info->buf == NULL) return;
--  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
--  __Pyx_ReleaseBuffer(info);
--}
--
--static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
--    if (unlikely(!type)) {
--        PyErr_Format(PyExc_SystemError, "Missing type object");
--        return 0;
--    }
--    if (likely(PyObject_TypeCheck(obj, type)))
--        return 1;
--    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
--                 Py_TYPE(obj)->tp_name, type->tp_name);
--    return 0;
--}
--
--static void __Pyx_RaiseBufferIndexError(int axis) {
--  PyErr_Format(PyExc_IndexError,
--     "Out of bounds on buffer access (axis %d)", axis);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
--    PyErr_Format(PyExc_ValueError,
--                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
--    PyErr_Format(PyExc_ValueError,
--                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%s to unpack",
--                 index, (index == 1) ? "" : "s");
--}
--
--static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
--    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
--}
--
--static CYTHON_INLINE int __Pyx_IterFinish(void) {
--#if CYTHON_COMPILING_IN_CPYTHON
--    PyThreadState *tstate = PyThreadState_GET();
--    PyObject* exc_type = tstate->curexc_type;
--    if (unlikely(exc_type)) {
--        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
--            PyObject *exc_value, *exc_tb;
--            exc_value = tstate->curexc_value;
--            exc_tb = tstate->curexc_traceback;
--            tstate->curexc_type = 0;
--            tstate->curexc_value = 0;
--            tstate->curexc_traceback = 0;
--            Py_DECREF(exc_type);
--            Py_XDECREF(exc_value);
--            Py_XDECREF(exc_tb);
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#else
--    if (unlikely(PyErr_Occurred())) {
--        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
--            PyErr_Clear();
--            return 0;
--        } else {
--            return -1;
--        }
--    }
--    return 0;
--#endif
--}
--
--static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
--    if (unlikely(retval)) {
--        Py_DECREF(retval);
--        __Pyx_RaiseTooManyValuesError(expected);
--        return -1;
--    } else {
--        return __Pyx_IterFinish();
--    }
--    return 0;
--}
--
--#if PY_MAJOR_VERSION < 3
--static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
--    CYTHON_UNUSED PyObject *getbuffer_cobj;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (getbuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                             "__pyx_getbuffer"))) {
--        getbufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (getbufferproc) PyCapsule_GetPointer(getbuffer_cobj, "getbuffer(obj, view, flags)");
--      #else
--        func = (getbufferproc) PyCObject_AsVoidPtr(getbuffer_cobj);
--      #endif
--        Py_DECREF(getbuffer_cobj);
--        if (!func)
--            goto fail;
--        return func(obj, view, flags);
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    return -1;
--}
--static void __Pyx_ReleaseBuffer(Py_buffer *view) {
--    PyObject *obj = view->obj;
--    CYTHON_UNUSED PyObject *releasebuffer_cobj;
--    if (!obj) return;
--  #if PY_VERSION_HEX >= 0x02060000
--    if (PyObject_CheckBuffer(obj)) {
--        PyBuffer_Release(view);
--        return;
--    }
--  #endif
--        if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; }
--  #if PY_VERSION_HEX < 0x02060000
--    if (obj->ob_type->tp_dict &&
--        (releasebuffer_cobj = PyMapping_GetItemString(obj->ob_type->tp_dict,
--                                                      "__pyx_releasebuffer"))) {
--        releasebufferproc func;
--      #if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 0)
--        func = (releasebufferproc) PyCapsule_GetPointer(releasebuffer_cobj, "releasebuffer(obj, view)");
--      #else
--        func = (releasebufferproc) PyCObject_AsVoidPtr(releasebuffer_cobj);
--      #endif
--        Py_DECREF(releasebuffer_cobj);
--        if (!func)
--            goto fail;
--        func(obj, view);
--        return;
--    } else {
--        PyErr_Clear();
--    }
--  #endif
--    goto nofail;
--#if PY_VERSION_HEX < 0x02060000
--fail:
--#endif
--    PyErr_WriteUnraisable(obj);
--nofail:
--    Py_DECREF(obj);
--    view->obj = NULL;
--}
--#endif /*  PY_MAJOR_VERSION < 3 */
--
--
--    static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
--    PyObject *empty_list = 0;
--    PyObject *module = 0;
--    PyObject *global_dict = 0;
--    PyObject *empty_dict = 0;
--    PyObject *list;
--    #if PY_VERSION_HEX < 0x03030000
--    PyObject *py_import = 0;
--    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
--    if (!py_import)
--        goto bad;
--    #endif
--    if (from_list)
--        list = from_list;
--    else {
--        empty_list = PyList_New(0);
--        if (!empty_list)
--            goto bad;
--        list = empty_list;
--    }
--    global_dict = PyModule_GetDict(__pyx_m);
--    if (!global_dict)
--        goto bad;
--    empty_dict = PyDict_New();
--    if (!empty_dict)
--        goto bad;
--    #if PY_VERSION_HEX >= 0x02050000
--    {
--        #if PY_MAJOR_VERSION >= 3
--        if (level == -1) {
--            if (strchr(__Pyx_MODULE_NAME, '.')) {
--                #if PY_VERSION_HEX < 0x03030000
--                PyObject *py_level = PyInt_FromLong(1);
--                if (!py_level)
--                    goto bad;
--                module = PyObject_CallFunctionObjArgs(py_import,
--                    name, global_dict, empty_dict, list, py_level, NULL);
--                Py_DECREF(py_level);
--                #else
--                module = PyImport_ImportModuleLevelObject(
--                    name, global_dict, empty_dict, list, 1);
--                #endif
--                if (!module) {
--                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
--                        goto bad;
--                    PyErr_Clear();
--                }
--            }
--            level = 0; /* try absolute import on failure */
--        }
--        #endif
--        if (!module) {
--            #if PY_VERSION_HEX < 0x03030000
--            PyObject *py_level = PyInt_FromLong(level);
--            if (!py_level)
--                goto bad;
--            module = PyObject_CallFunctionObjArgs(py_import,
--                name, global_dict, empty_dict, list, py_level, NULL);
--            Py_DECREF(py_level);
--            #else
--            module = PyImport_ImportModuleLevelObject(
--                name, global_dict, empty_dict, list, level);
--            #endif
--        }
--    }
--    #else
--    if (level>0) {
--        PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4.");
--        goto bad;
--    }
--    module = PyObject_CallFunctionObjArgs(py_import,
--        name, global_dict, empty_dict, list, NULL);
--    #endif
--bad:
--    #if PY_VERSION_HEX < 0x03030000
--    Py_XDECREF(py_import);
--    #endif
--    Py_XDECREF(empty_list);
--    Py_XDECREF(empty_dict);
--    return module;
--}
--
--static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name) {
--#if PY_MAJOR_VERSION < 3
--    PyErr_Format(PyExc_ImportError, "cannot import name %.230s",
--                 PyString_AsString(name));
--#else
--    PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
--#endif
--}
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return ::std::complex< float >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      return x + y*(__pyx_t_float_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
--      __pyx_t_float_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--        __pyx_t_float_complex z;
--        float denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) {
--        __pyx_t_float_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrtf(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypotf(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) {
--            __pyx_t_float_complex z;
--            float r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    float denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(a, a);
--                    case 3:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, a);
--                    case 4:
--                        z = __Pyx_c_prodf(a, a);
--                        return __Pyx_c_prodf(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_absf(a);
--                theta = atan2f(a.imag, a.real);
--            }
--            lnr = logf(r);
--            z_r = expf(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cosf(z_theta);
--            z.imag = z_r * sinf(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--#if CYTHON_CCOMPLEX
--  #ifdef __cplusplus
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return ::std::complex< double >(x, y);
--    }
--  #else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      return x + y*(__pyx_t_double_complex)_Complex_I;
--    }
--  #endif
--#else
--    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
--      __pyx_t_double_complex z;
--      z.real = x;
--      z.imag = y;
--      return z;
--    }
--#endif
--
--#if CYTHON_CCOMPLEX
--#else
--    static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--       return (a.real == b.real) && (a.imag == b.imag);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real + b.real;
--        z.imag = a.imag + b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real - b.real;
--        z.imag = a.imag - b.imag;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        z.real = a.real * b.real - a.imag * b.imag;
--        z.imag = a.real * b.imag + a.imag * b.real;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--        __pyx_t_double_complex z;
--        double denom = b.real * b.real + b.imag * b.imag;
--        z.real = (a.real * b.real + a.imag * b.imag) / denom;
--        z.imag = (a.imag * b.real - a.real * b.imag) / denom;
--        return z;
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real = -a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) {
--       return (a.real == 0) && (a.imag == 0);
--    }
--    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) {
--        __pyx_t_double_complex z;
--        z.real =  a.real;
--        z.imag = -a.imag;
--        return z;
--    }
--    #if 1
--        static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) {
--          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
--            return sqrt(z.real*z.real + z.imag*z.imag);
--          #else
--            return hypot(z.real, z.imag);
--          #endif
--        }
--        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) {
--            __pyx_t_double_complex z;
--            double r, lnr, theta, z_r, z_theta;
--            if (b.imag == 0 && b.real == (int)b.real) {
--                if (b.real < 0) {
--                    double denom = a.real * a.real + a.imag * a.imag;
--                    a.real = a.real / denom;
--                    a.imag = -a.imag / denom;
--                    b.real = -b.real;
--                }
--                switch ((int)b.real) {
--                    case 0:
--                        z.real = 1;
--                        z.imag = 0;
--                        return z;
--                    case 1:
--                        return a;
--                    case 2:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(a, a);
--                    case 3:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, a);
--                    case 4:
--                        z = __Pyx_c_prod(a, a);
--                        return __Pyx_c_prod(z, z);
--                }
--            }
--            if (a.imag == 0) {
--                if (a.real == 0) {
--                    return a;
--                }
--                r = a.real;
--                theta = 0;
--            } else {
--                r = __Pyx_c_abs(a);
--                theta = atan2(a.imag, a.real);
--            }
--            lnr = log(r);
--            z_r = exp(lnr * b.real - theta * b.imag);
--            z_theta = theta * b.real + lnr * b.imag;
--            z.real = z_r * cos(z_theta);
--            z.imag = z_r * sin(z_theta);
--            return z;
--        }
--    #endif
--#endif
--
--static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
--    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned char" :
--                    "value too large to convert to unsigned char");
--            }
--            return (unsigned char)-1;
--        }
--        return (unsigned char)val;
--    }
--    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
--    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned short" :
--                    "value too large to convert to unsigned short");
--            }
--            return (unsigned short)-1;
--        }
--        return (unsigned short)val;
--    }
--    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
--    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(unsigned int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(unsigned int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to unsigned int" :
--                    "value too large to convert to unsigned int");
--            }
--            return (unsigned int)-1;
--        }
--        return (unsigned int)val;
--    }
--    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
--}
--
--static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
--    const char neg_one = (char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to char" :
--                    "value too large to convert to char");
--            }
--            return (char)-1;
--        }
--        return (char)val;
--    }
--    return (char)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
--    const short neg_one = (short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to short" :
--                    "value too large to convert to short");
--            }
--            return (short)-1;
--        }
--        return (short)val;
--    }
--    return (short)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
--    const signed char neg_one = (signed char)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed char) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed char)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed char" :
--                    "value too large to convert to signed char");
--            }
--            return (signed char)-1;
--        }
--        return (signed char)val;
--    }
--    return (signed char)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
--    const signed short neg_one = (signed short)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed short) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed short)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed short" :
--                    "value too large to convert to signed short");
--            }
--            return (signed short)-1;
--        }
--        return (signed short)val;
--    }
--    return (signed short)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
--    const signed int neg_one = (signed int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(signed int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(signed int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to signed int" :
--                    "value too large to convert to signed int");
--            }
--            return (signed int)-1;
--        }
--        return (signed int)val;
--    }
--    return (signed int)__Pyx_PyInt_AsSignedLong(x);
--}
--
--static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
--    const int neg_one = (int)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--    if (sizeof(int) < sizeof(long)) {
--        long val = __Pyx_PyInt_AsLong(x);
--        if (unlikely(val != (long)(int)val)) {
--            if (!unlikely(val == -1 && PyErr_Occurred())) {
--                PyErr_SetString(PyExc_OverflowError,
--                    (is_unsigned && unlikely(val < 0)) ?
--                    "can't convert negative value to int" :
--                    "value too large to convert to int");
--            }
--            return (int)-1;
--        }
--        return (int)val;
--    }
--    return (int)__Pyx_PyInt_AsLong(x);
--}
--
--static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
--    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned long");
--            return (unsigned long)-1;
--        }
--        return (unsigned long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned long");
--                return (unsigned long)-1;
--            }
--            return (unsigned long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (unsigned long)PyLong_AsLong(x);
--        }
--    } else {
--        unsigned long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned long)-1;
--        val = __Pyx_PyInt_AsUnsignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
--    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to unsigned PY_LONG_LONG");
--            return (unsigned PY_LONG_LONG)-1;
--        }
--        return (unsigned PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to unsigned PY_LONG_LONG");
--                return (unsigned PY_LONG_LONG)-1;
--            }
--            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        unsigned PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (unsigned PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
--    const long neg_one = (long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to long");
--            return (long)-1;
--        }
--        return (long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to long");
--                return (long)-1;
--            }
--            return (long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (long)PyLong_AsLong(x);
--        }
--    } else {
--        long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (long)-1;
--        val = __Pyx_PyInt_AsLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
--    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to PY_LONG_LONG");
--            return (PY_LONG_LONG)-1;
--        }
--        return (PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to PY_LONG_LONG");
--                return (PY_LONG_LONG)-1;
--            }
--            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
--    const signed long neg_one = (signed long)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed long");
--            return (signed long)-1;
--        }
--        return (signed long)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed long");
--                return (signed long)-1;
--            }
--            return (signed long)PyLong_AsUnsignedLong(x);
--        } else {
--            return (signed long)PyLong_AsLong(x);
--        }
--    } else {
--        signed long val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed long)-1;
--        val = __Pyx_PyInt_AsSignedLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
--    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
--    const int is_unsigned = neg_one > const_zero;
--#if PY_VERSION_HEX < 0x03000000
--    if (likely(PyInt_Check(x))) {
--        long val = PyInt_AS_LONG(x);
--        if (is_unsigned && unlikely(val < 0)) {
--            PyErr_SetString(PyExc_OverflowError,
--                            "can't convert negative value to signed PY_LONG_LONG");
--            return (signed PY_LONG_LONG)-1;
--        }
--        return (signed PY_LONG_LONG)val;
--    } else
--#endif
--    if (likely(PyLong_Check(x))) {
--        if (is_unsigned) {
--            if (unlikely(Py_SIZE(x) < 0)) {
--                PyErr_SetString(PyExc_OverflowError,
--                                "can't convert negative value to signed PY_LONG_LONG");
--                return (signed PY_LONG_LONG)-1;
--            }
--            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
--        } else {
--            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
--        }
--    } else {
--        signed PY_LONG_LONG val;
--        PyObject *tmp = __Pyx_PyNumber_Int(x);
--        if (!tmp) return (signed PY_LONG_LONG)-1;
--        val = __Pyx_PyInt_AsSignedLongLong(tmp);
--        Py_DECREF(tmp);
--        return val;
--    }
--}
--
--static int __Pyx_check_binary_version(void) {
--    char ctversion[4], rtversion[4];
--    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
--    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
--    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
--        char message[200];
--        PyOS_snprintf(message, sizeof(message),
--                      "compiletime version %s of module '%.100s' "
--                      "does not match runtime version %s",
--                      ctversion, __Pyx_MODULE_NAME, rtversion);
--        #if PY_VERSION_HEX < 0x02050000
--        return PyErr_Warn(NULL, message);
--        #else
--        return PyErr_WarnEx(NULL, message, 1);
--        #endif
--    }
--    return 0;
--}
--
--#ifndef __PYX_HAVE_RT_ImportModule
--#define __PYX_HAVE_RT_ImportModule
--static PyObject *__Pyx_ImportModule(const char *name) {
--    PyObject *py_name = 0;
--    PyObject *py_module = 0;
--    py_name = __Pyx_PyIdentifier_FromString(name);
--    if (!py_name)
--        goto bad;
--    py_module = PyImport_Import(py_name);
--    Py_DECREF(py_name);
--    return py_module;
--bad:
--    Py_XDECREF(py_name);
--    return 0;
--}
--#endif
--
--#ifndef __PYX_HAVE_RT_ImportType
--#define __PYX_HAVE_RT_ImportType
--static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
--    size_t size, int strict)
--{
--    PyObject *py_module = 0;
--    PyObject *result = 0;
--    PyObject *py_name = 0;
--    char warning[200];
--    Py_ssize_t basicsize;
--#ifdef Py_LIMITED_API
--    PyObject *py_basicsize;
--#endif
--    py_module = __Pyx_ImportModule(module_name);
--    if (!py_module)
--        goto bad;
--    py_name = __Pyx_PyIdentifier_FromString(class_name);
--    if (!py_name)
--        goto bad;
--    result = PyObject_GetAttr(py_module, py_name);
--    Py_DECREF(py_name);
--    py_name = 0;
--    Py_DECREF(py_module);
--    py_module = 0;
--    if (!result)
--        goto bad;
--    if (!PyType_Check(result)) {
--        PyErr_Format(PyExc_TypeError,
--            "%s.%s is not a type object",
--            module_name, class_name);
--        goto bad;
--    }
--#ifndef Py_LIMITED_API
--    basicsize = ((PyTypeObject *)result)->tp_basicsize;
--#else
--    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
--    if (!py_basicsize)
--        goto bad;
--    basicsize = PyLong_AsSsize_t(py_basicsize);
--    Py_DECREF(py_basicsize);
--    py_basicsize = 0;
--    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
--        goto bad;
--#endif
--    if (!strict && (size_t)basicsize > size) {
--        PyOS_snprintf(warning, sizeof(warning),
--            "%s.%s size changed, may indicate binary incompatibility",
--            module_name, class_name);
--        #if PY_VERSION_HEX < 0x02050000
--        if (PyErr_Warn(NULL, warning) < 0) goto bad;
--        #else
--        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
--        #endif
--    }
--    else if ((size_t)basicsize != size) {
--        PyErr_Format(PyExc_ValueError,
--            "%s.%s has the wrong size, try recompiling",
--            module_name, class_name);
--        goto bad;
--    }
--    return (PyTypeObject *)result;
--bad:
--    Py_XDECREF(py_module);
--    Py_XDECREF(result);
--    return NULL;
--}
--#endif
--
--static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
--    int start = 0, mid = 0, end = count - 1;
--    if (end >= 0 && code_line > entries[end].code_line) {
--        return count;
--    }
--    while (start < end) {
--        mid = (start + end) / 2;
--        if (code_line < entries[mid].code_line) {
--            end = mid;
--        } else if (code_line > entries[mid].code_line) {
--             start = mid + 1;
--        } else {
--            return mid;
--        }
--    }
--    if (code_line <= entries[mid].code_line) {
--        return mid;
--    } else {
--        return mid + 1;
--    }
--}
--static PyCodeObject *__pyx_find_code_object(int code_line) {
--    PyCodeObject* code_object;
--    int pos;
--    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
--        return NULL;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
--        return NULL;
--    }
--    code_object = __pyx_code_cache.entries[pos].code_object;
--    Py_INCREF(code_object);
--    return code_object;
--}
--static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
--    int pos, i;
--    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
--    if (unlikely(!code_line)) {
--        return;
--    }
--    if (unlikely(!entries)) {
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (likely(entries)) {
--            __pyx_code_cache.entries = entries;
--            __pyx_code_cache.max_count = 64;
--            __pyx_code_cache.count = 1;
--            entries[0].code_line = code_line;
--            entries[0].code_object = code_object;
--            Py_INCREF(code_object);
--        }
--        return;
--    }
--    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
--    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
--        PyCodeObject* tmp = entries[pos].code_object;
--        entries[pos].code_object = code_object;
--        Py_DECREF(tmp);
--        return;
--    }
--    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
--        int new_max = __pyx_code_cache.max_count + 64;
--        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
--            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
--        if (unlikely(!entries)) {
--            return;
--        }
--        __pyx_code_cache.entries = entries;
--        __pyx_code_cache.max_count = new_max;
--    }
--    for (i=__pyx_code_cache.count; i>pos; i--) {
--        entries[i] = entries[i-1];
--    }
--    entries[pos].code_line = code_line;
--    entries[pos].code_object = code_object;
--    __pyx_code_cache.count++;
--    Py_INCREF(code_object);
--}
--
--#include "compile.h"
--#include "frameobject.h"
--#include "traceback.h"
--static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
--            const char *funcname, int c_line,
--            int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_srcfile = 0;
--    PyObject *py_funcname = 0;
--    #if PY_MAJOR_VERSION < 3
--    py_srcfile = PyString_FromString(filename);
--    #else
--    py_srcfile = PyUnicode_FromString(filename);
--    #endif
--    if (!py_srcfile) goto bad;
--    if (c_line) {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #else
--        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
--        #endif
--    }
--    else {
--        #if PY_MAJOR_VERSION < 3
--        py_funcname = PyString_FromString(funcname);
--        #else
--        py_funcname = PyUnicode_FromString(funcname);
--        #endif
--    }
--    if (!py_funcname) goto bad;
--    py_code = __Pyx_PyCode_New(
--        0,            /*int argcount,*/
--        0,            /*int kwonlyargcount,*/
--        0,            /*int nlocals,*/
--        0,            /*int stacksize,*/
--        0,            /*int flags,*/
--        __pyx_empty_bytes, /*PyObject *code,*/
--        __pyx_empty_tuple, /*PyObject *consts,*/
--        __pyx_empty_tuple, /*PyObject *names,*/
--        __pyx_empty_tuple, /*PyObject *varnames,*/
--        __pyx_empty_tuple, /*PyObject *freevars,*/
--        __pyx_empty_tuple, /*PyObject *cellvars,*/
--        py_srcfile,   /*PyObject *filename,*/
--        py_funcname,  /*PyObject *name,*/
--        py_line,      /*int firstlineno,*/
--        __pyx_empty_bytes  /*PyObject *lnotab*/
--    );
--    Py_DECREF(py_srcfile);
--    Py_DECREF(py_funcname);
--    return py_code;
--bad:
--    Py_XDECREF(py_srcfile);
--    Py_XDECREF(py_funcname);
--    return NULL;
--}
--static void __Pyx_AddTraceback(const char *funcname, int c_line,
--                               int py_line, const char *filename) {
--    PyCodeObject *py_code = 0;
--    PyObject *py_globals = 0;
--    PyFrameObject *py_frame = 0;
--    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
--    if (!py_code) {
--        py_code = __Pyx_CreateCodeObjectForTraceback(
--            funcname, c_line, py_line, filename);
--        if (!py_code) goto bad;
--        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
--    }
--    py_globals = PyModule_GetDict(__pyx_m);
--    if (!py_globals) goto bad;
--    py_frame = PyFrame_New(
--        PyThreadState_GET(), /*PyThreadState *tstate,*/
--        py_code,             /*PyCodeObject *code,*/
--        py_globals,          /*PyObject *globals,*/
--        0                    /*PyObject *locals*/
--    );
--    if (!py_frame) goto bad;
--    py_frame->f_lineno = py_line;
--    PyTraceBack_Here(py_frame);
--bad:
--    Py_XDECREF(py_code);
--    Py_XDECREF(py_frame);
--}
--
--static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
--    while (t->p) {
--        #if PY_MAJOR_VERSION < 3
--        if (t->is_unicode) {
--            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
--        } else if (t->intern) {
--            *t->p = PyString_InternFromString(t->s);
--        } else {
--            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
--        }
--        #else  /* Python 3+ has unicode identifiers */
--        if (t->is_unicode | t->is_str) {
--            if (t->intern) {
--                *t->p = PyUnicode_InternFromString(t->s);
--            } else if (t->encoding) {
--                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
--            } else {
--                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
--            }
--        } else {
--            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
--        }
--        #endif
--        if (!*t->p)
--            return -1;
--        ++t;
--    }
--    return 0;
--}
--
--static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
--   int is_true = x == Py_True;
--   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
--   else return PyObject_IsTrue(x);
--}
--static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
--  PyNumberMethods *m;
--  const char *name = NULL;
--  PyObject *res = NULL;
--#if PY_VERSION_HEX < 0x03000000
--  if (PyInt_Check(x) || PyLong_Check(x))
--#else
--  if (PyLong_Check(x))
--#endif
--    return Py_INCREF(x), x;
--  m = Py_TYPE(x)->tp_as_number;
--#if PY_VERSION_HEX < 0x03000000
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Int(x);
--  }
--  else if (m && m->nb_long) {
--    name = "long";
--    res = PyNumber_Long(x);
--  }
--#else
--  if (m && m->nb_int) {
--    name = "int";
--    res = PyNumber_Long(x);
--  }
--#endif
--  if (res) {
--#if PY_VERSION_HEX < 0x03000000
--    if (!PyInt_Check(res) && !PyLong_Check(res)) {
--#else
--    if (!PyLong_Check(res)) {
--#endif
--      PyErr_Format(PyExc_TypeError,
--                   "__%s__ returned non-%s (type %.200s)",
--                   name, name, Py_TYPE(res)->tp_name);
--      Py_DECREF(res);
--      return NULL;
--    }
--  }
--  else if (!PyErr_Occurred()) {
--    PyErr_SetString(PyExc_TypeError,
--                    "an integer is required");
--  }
--  return res;
--}
--static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
--  Py_ssize_t ival;
--  PyObject* x = PyNumber_Index(b);
--  if (!x) return -1;
--  ival = PyInt_AsSsize_t(x);
--  Py_DECREF(x);
--  return ival;
--}
--static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
--#if PY_VERSION_HEX < 0x02050000
--   if (ival <= LONG_MAX)
--       return PyInt_FromLong((long)ival);
--   else {
--       unsigned char *bytes = (unsigned char *) &ival;
--       int one = 1; int little = (int)*(unsigned char*)&one;
--       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
--   }
--#else
--   return PyInt_FromSize_t(ival);
--#endif
--}
--static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
--   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
--   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
--       return (size_t)-1;
--   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
--       PyErr_SetString(PyExc_OverflowError,
--                       "value too large to convert to size_t");
--       return (size_t)-1;
--   }
--   return (size_t)val;
--}
--
--
--#endif /* Py_PYTHON_H */
diff --cc astropy/version.py
index a0db764,a0db764..0000000
deleted file mode 100644,100644
--- a/astropy/version.py
+++ /dev/null
@@@ -1,25 -1,25 +1,0 @@@
--# Autogenerated by Astropy's setup.py on 2013-11-20 20:09:10.840506
--
--from astropy.version_helpers import update_git_devstr, get_git_devstr
--
--_last_generated_version = '0.3'
--
--version = update_git_devstr(_last_generated_version)
--githash = get_git_devstr(sha=True, show_warning=False)
--
--major = 0
--minor = 3
--bugfix = 0
--
--release = True
--debug = False
--
--try:
--    from .utils._compiler import compiler
--except ImportError:
--    compiler = "unknown"
--
--try:
--    from .cython_version import cython_version
--except ImportError:
--    cython_version = "unknown"
diff --cc astropy/wcs/include/wcsconfig.h
index 490efd4,490efd4..0000000
deleted file mode 100644,100644
--- a/astropy/wcs/include/wcsconfig.h
+++ /dev/null
@@@ -1,35 -1,35 +1,0 @@@
--
--    /* WCSLIB library version number. */
--    #define WCSLIB_VERSION 4.10
--
--    /* 64-bit integer data type. */
--    #define WCSLIB_INT64 long long int
--
--    /* Windows needs some other defines to prevent inclusion of wcsset()
--       which conflicts with wcslib's wcsset().  These need to be set
--       on code that *uses* astropy.wcs, in addition to astropy.wcs itself.
--       */
--    #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__)
--
--    #ifndef YY_NO_UNISTD_H
--    #define YY_NO_UNISTD_H
--    #endif
--
--    #ifndef _CRT_SECURE_NO_WARNINGS
--    #define _CRT_SECURE_NO_WARNINGS
--    #endif
--
--    #ifndef _NO_OLDNAMES
--    #define _NO_OLDNAMES
--    #endif
--
--    #ifndef NO_OLDNAMES
--    #define NO_OLDNAMES
--    #endif
--
--    #ifndef __STDC__
--    #define __STDC__ 1
--    #endif
--
--    #endif
--    
diff --cc astropy/wcs/src/docstrings.c
index 8f4ff7a,8f4ff7a..0000000
deleted file mode 100644,100644
--- a/astropy/wcs/src/docstrings.c
+++ /dev/null
@@@ -1,910 -1,910 +1,0 @@@
--/*
--DO NOT EDIT!
--
--This file is autogenerated by astropy/wcs/setup_package.py.  To edit
--its contents, edit astropy/wcs/docstrings.py
--
--The weirdness here with strncpy is because some C compilers, notably
--MSVC, do not support string literals greater than 256 characters.
--*/
--
--#include <string.h>
--#include "astropy_wcs/docstrings.h"
--
--#if defined(_MSC_VER)
--char doc_DistortionLookupTable[374];
--char doc_InconsistentAxisTypes[100];
--char doc_InvalidCoordinate[76];
--char doc_InvalidSubimageSpecification[77];
--char doc_InvalidTabularParameters[76];
--char doc_InvalidTransform[107];
--char doc_K[202];
--char doc_M[56];
--char doc_NoSolution[68];
--char doc_NoWcsKeywordsFound[76];
--char doc_NonseparableSubimageCoordinateSystem[88];
--char doc_SingularMatrix[70];
--char doc_Sip[1040];
--char doc_Tabprm[234];
--char doc_UnitConverter[2349];
--char doc_Wcs[513];
--char doc_WcsError[39];
--char doc_Wcsprm[2088];
--char doc_Wtbarr[202];
--char doc_a[264];
--char doc_a_order[60];
--char doc_all_pix2world[1268];
--char doc_alt[236];
--char doc_ap[276];
--char doc_ap_order[61];
--char doc_axis_types[916];
--char doc_b[273];
--char doc_b_order[60];
--char doc_bp[276];
--char doc_bp_order[61];
--char doc_cd[1058];
--char doc_cdelt[308];
--char doc_cdfix[480];
--char doc_cel_offset[176];
--char doc_celfix[171];
--char doc_cname[76];
--char doc_colax[91];
--char doc_colnum[290];
--char doc_convert[121];
--char doc_coord[290];
--char doc_copy[40];
--char doc_cpdis1[106];
--char doc_cpdis2[106];
--char doc_crder[123];
--char doc_crota[1054];
--char doc_crpix[88];
--char doc_crval[93];
--char doc_crval_tabprm[94];
--char doc_csyer[132];
--char doc_ctype[228];
--char doc_cubeface[1236];
--char doc_cunit[1319];
--char doc_cylfix[162];
--char doc_data[78];
--char doc_data_wtbarr[52];
--char doc_dateavg[152];
--char doc_dateobs[133];
--char doc_datfix[512];
--char doc_delta[251];
--char doc_det2im[58];
--char doc_det2im1[103];
--char doc_det2im2[103];
--char doc_dims[111];
--char doc_equinox[243];
--char doc_extlev[73];
--char doc_extnam[74];
--char doc_extrema[452];
--char doc_extver[73];
--char doc_find_all_wcs[879];
--char doc_fix[1613];
--char doc_get_cdelt[453];
--char doc_get_offset[206];
--char doc_get_pc[392];
--char doc_get_ps[433];
--char doc_get_pv[716];
--char doc_has_cd[911];
--char doc_has_cdi_ja[103];
--char doc_has_crota[652];
--char doc_has_crotaia[107];
--char doc_has_pc[213];
--char doc_has_pci_ja[103];
--char doc_have[175];
--char doc_i[41];
--char doc_imgpix_matrix[173];
--char doc_is_unity[109];
--char doc_kind[130];
--char doc_lat[86];
--char doc_latpole[75];
--char doc_lattyp[236];
--char doc_lng[87];
--char doc_lngtyp[237];
--char doc_lonpole[77];
--char doc_m[59];
--char doc_map[980];
--char doc_mix[4806];
--char doc_mjdavg[181];
--char doc_mjdobs[181];
--char doc_name[74];
--char doc_naxis[761];
--char doc_nc[172];
--char doc_ndim[67];
--char doc_obsgeo[187];
--char doc_offset[47];
--char doc_p0[257];
--char doc_p2s[2005];
--char doc_p4_pix2foc[652];
--char doc_pc[1125];
--char doc_phi0[289];
--char doc_pix2foc[636];
--char doc_piximg_matrix[128];
--char doc_power[49];
--char doc_print_contents[210];
--char doc_print_contents_tabprm[224];
--char doc_radesys[77];
--char doc_restfrq[94];
--char doc_restwav[94];
--char doc_row[40];
--char doc_s2p[1910];
--char doc_scale[56];
--char doc_sense[245];
--char doc_set[1206];
--char doc_set_ps[414];
--char doc_set_pv[409];
--char doc_set_tabprm[325];
--char doc_sip[84];
--char doc_sip_foc2pix[649];
--char doc_sip_pix2foc[649];
--char doc_spcfix[272];
--char doc_spec[68];
--char doc_specsys[145];
--char doc_sptr[1370];
--char doc_ssysobs[253];
--char doc_ssyssrc[150];
--char doc_sub[3436];
--char doc_tab[112];
--char doc_theta0[289];
--char doc_to_header[2229];
--char doc_ttype[108];
--char doc_unitfix[1047];
--char doc_velangl[186];
--char doc_velosys[316];
--char doc_want[173];
--char doc_wcs[83];
--char doc_zsource[98];
--
--void fill_docstrings(void)
--{
--   strncpy(doc_DistortionLookupTable + 0, "DistortionLookupTable(*table*, *crpix*, *crval*, *cdelt*)\n\nRepresents a single lookup table for a `Paper IV`_ distortion\ntransformation.\n\nParameters\n----------\ntable : 2-dimensional array\n    The distortion lookup table.\n\ncrpix : 2-tuple\n    The distortion", 256);
--   strncpy(doc_DistortionLookupTable + 256, " array reference pixel\n\ncrval : 2-tuple\n    The image array pixel coordinate\n\ncdelt : 2-tuple\n    The grid step size\n\0", 118);
--
--   strncpy(doc_InconsistentAxisTypes + 0, "InconsistentAxisTypesError()\n\nThe WCS header inconsistent or unrecognized coordinate axis type(s).\n\0", 100);
--
--   strncpy(doc_InvalidCoordinate + 0, "InvalidCoordinateError()\n\nOne or more of the world coordinates is invalid.\n\0", 76);
--
--   strncpy(doc_InvalidSubimageSpecification + 0, "InvalidSubimageSpecificationError()\n\nThe subimage specification is invalid.\n\0", 77);
--
--   strncpy(doc_InvalidTabularParameters + 0, "InvalidTabularParametersError()\n\nThe given tabular parameters are invalid.\n\0", 76);
--
--   strncpy(doc_InvalidTransform + 0, "InvalidTransformError()\n\nThe WCS transformation is invalid, or the transformation parameters\nare invalid.\n\0", 107);
--
--   strncpy(doc_K + 0, "``int array[M]`` (read-only) The lengths of the axes of the coordinate\narray.\n\nAn array of length `M` whose elements record the lengths of the axes of\nthe coordinate array and of each indexing vector.\n\0", 202);
--
--   strncpy(doc_M + 0, "``int`` (read-only) Number of tabular coordinate axes.\n\0", 56);
--
--   strncpy(doc_NoSolution + 0, "NoSolutionError()\n\nNo solution can be found in the given interval.\n\0", 68);
--
--   strncpy(doc_NoWcsKeywordsFound + 0, "NoWcsKeywordsFoundError()\n\nNo WCS keywords were found in the given header.\n\0", 76);
--
--   strncpy(doc_NonseparableSubimageCoordinateSystem + 0, "NonseparableSubimageCoordinateSystemError()\n\nNon-separable subimage coordinate system.\n\0", 88);
--
--   strncpy(doc_SingularMatrix + 0, "SingularMatrixError()\n\nThe linear transformation matrix is singular.\n\0", 70);
--
--   strncpy(doc_Sip + 0, "Sip(*a, b, ap, bp, crpix*)\n\nThe `~astropy.wcs.Sip` class performs polynomial distortion correction\nusing the `SIP`_ convention in both directions.\n\nParameters\n----------\na : double array[m+1][m+1]\n    The ``A_i_j`` polynomial for pixel to focal plane trans", 256);
--   strncpy(doc_Sip + 256, "formation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``A_ORDER``.\n\nb : double array[m+1][m+1]\n    The ``B_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``B_ORDER``.\n\nap : double arra", 256);
--   strncpy(doc_Sip + 512, "y[m+1][m+1]\n    The ``AP_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``AP_ORDER``.\n\nbp : double array[m+1][m+1]\n    The ``BP_i_j`` polynomial for pixel to focal plane transformation.\n    Its", 256);
--   strncpy(doc_Sip + 768, " size must be (*m* + 1, *m* + 1) where *m* = ``BP_ORDER``.\n\ncrpix : double array[2]\n    The reference pixel.\n\nNotes\n-----\nShupe, D. L., M. Moshir, J. Li, D. Makovoz and R. Narron.  2005.\n\"The SIP Convention for Representing Distortion in FITS Image\nHeaders", 256);
--   strncpy(doc_Sip + 1024, ".\"  ADASS XIV.\n\0", 16);
--
--   strncpy(doc_Tabprm + 0, "A class to store the information related to tabular coordinates,\ni.e., coordinates that are defined via a lookup table.\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.tab`.\n\0", 234);
--
--   strncpy(doc_UnitConverter + 0, "UnitConverter(have, want, translate_units='')\n\nAn object for converting from one system of units to another.\n\nUse the returned object's `~astropy.wcs.UnitConverter.convert` method\nto convert values from *have* to *want*.\n\nThis function is permissive in acc", 256);
--   strncpy(doc_UnitConverter + 256, "epting whitespace in all contexts in\na units specification where it does not create ambiguity (e.g. not\nbetween a metric prefix and a basic unit string), including in strings\nlike ``\"log (m ** 2)\"`` which is formally disallowed.\n\n.. note:: Deprecated in As", 256);
--   strncpy(doc_UnitConverter + 512, "tropy 0.2\n\n   `UnitConverter` will be removed in a future version of astropy.\n   The `astropy.units` package should be used instead.\n\nParameters\n----------\n\nhave : str\n    FITS unit string to convert from, with or without surrounding\n    square brackets (f", 256);
--   strncpy(doc_UnitConverter + 768, "or inline specifications); text following the\n    closing bracket is ignored.\n\nwant : str\n    FITS unit string to convert to, with or without surrounding square\n    brackets (for inline specifications); text following the closing\n    bracket is ignored.\n\nc", 256);
--   strncpy(doc_UnitConverter + 1024, "trl : str, optional\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is p", 256);
--   strncpy(doc_UnitConverter + 1280, "otentially unsafe since the\n    standard used.  The same applies to ``\"H\"`` for hours (Henry),\n    and ``\"D\"`` for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    - If the string contains ``\"s\"``, transla", 256);
--   strncpy(doc_UnitConverter + 1536, "te ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'``\n    does all of them.\n\nR", 256);
--   strncpy(doc_UnitConverter + 1792, "aises\n------\nValueError\n    Invalid numeric multiplier.\n\nSyntaxError\n    Dangling binary operator.\n\nSyntaxError\n    Invalid symbol in INITIAL context.\n\nSyntaxError\n    Function in invalid context.\n\nSyntaxError\n    Invalid symbol in EXPON context.\n\nSyntaxEr", 256);
--   strncpy(doc_UnitConverter + 2048, "ror\n    Unbalanced bracket.\n\nSyntaxError\n    Unbalanced parenthesis.\n\nSyntaxError\n    Consecutive binary operators.\n\nSyntaxError\n    Internal parser error.\n\nSyntaxError\n    Non-conformant unit specifications.\n\nSyntaxError\n    Non-conformant functions.\n\nVal", 256);
--   strncpy(doc_UnitConverter + 2304, "ueError\n    Potentially unsafe translation.\n\0", 45);
--
--   strncpy(doc_Wcs + 0, "Wcs(*sip, cpdis, wcsprm, det2im*)\n\nWcs objects amalgamate basic WCS (as provided by `wcslib`_), with\n`SIP`_ and `Paper IV`_ distortion operations.\n\nTo perform all distortion corrections and WCS tranformation, use\n`all_pix2world`.\n\nParameters\n----------\nsip", 256);
--   strncpy(doc_Wcs + 256, " : `~astropy.wcs.Sip` object or `None`\n\ncpdis : A pair of `~astropy.wcs.DistortionLookupTable` objects, or\n  ``(None, None)``.\n\nwcsprm : `~astropy.wcs.Wcsprm` object\n\ndet2im : A pair of `~astropy.wcs.DistortionLookupTable` objects, or\n   ``(None, None)``.\n", 256);
--   strncpy(doc_Wcs + 512, "\0", 1);
--
--   strncpy(doc_WcsError + 0, "Base class of all invalid WCS errors.\n\0", 39);
--
--   strncpy(doc_Wcsprm + 0, "Wcsprm(header=None, key=' ', relax=False, naxis=2, keysel=0, colsel=None)\n\n`~astropy.wcs.Wcsprm` is a direct wrapper around `wcslib`_.  It\nprovides access to the core WCS transformations that it supports.\n\nThe FITS header parsing enforces correct FITS \"key", 256);
--   strncpy(doc_Wcsprm + 256, "word = value\" syntax\nwith regard to the equals sign occurring in columns 9 and 10.\nHowever, it does recognize free-format character (NOST 100-2.0,\nSect. 5.2.1), integer (Sect. 5.2.3), and floating-point values\n(Sect. 5.2.4) for all keywords.\n\nParameters\n--", 256);
--   strncpy(doc_Wcsprm + 512, "--------\nheader : An `astropy.io.fits.Header`, string, or `None`.\n  If ``None``, the object will be initialized to default values.\n\nkey : str, optional\n    The key referring to a particular WCS transform in the header.\n    This may be either ``' '`` or ``'", 256);
--   strncpy(doc_Wcsprm + 768, "A'``-``'Z'`` and corresponds to\n    the ``\"a\"`` part of ``\"CTYPEia\"``.  (*key* may only be\n    provided if *header* is also provided.)\n\nrelax : bool or int, optional\n\n    Degree of permissiveness:\n\n    - `False`: Recognize only FITS keywords defined by the", 256);
--   strncpy(doc_Wcsprm + 1024, " published\n      WCS standard.\n\n    - `True`: Admit all recognized informal extensions of the WCS\n      standard.\n\n    - `int`: a bit field selecting specific extensions to accept.  See\n      :ref:`relaxread` for details.\n\nnaxis : int, optional\n    The num", 256);
--   strncpy(doc_Wcsprm + 1280, "ber of world coordinates axes for the object.  (*naxis* may\n    only be provided if *header* is `None`.)\n\nkeysel : sequence of flag bits, optional\n    Vector of flag bits that may be used to restrict the keyword types\n    considered:\n\n        - ``WCSHDR_IM", 256);
--   strncpy(doc_Wcsprm + 1536, "GHEAD``: Image header keywords.\n\n        - ``WCSHDR_BIMGARR``: Binary table image array.\n\n        - ``WCSHDR_PIXLIST``: Pixel list keywords.\n\n    If zero, there is no restriction.  If -1, the underlying wcslib\n    function ``wcspih()`` is called, rather th", 256);
--   strncpy(doc_Wcsprm + 1792, "an ``wcstbh()``.\n\ncolsel : sequence of int\n    A sequence of table column numbers used to restrict the keywords\n    considered.  `None` indicates no restriction.\n\nRaises\n------\nMemoryError\n     Memory allocation failed.\n\nValueError\n     Invalid key.\n\nKeyEr", 256);
--   strncpy(doc_Wcsprm + 2048, "ror\n     Key not found in FITS header.\n\0", 40);
--
--   strncpy(doc_Wtbarr + 0, "Classes to construct coordinate lookup tables from a binary table\nextension (BINTABLE).\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.wtb`.\n\0", 202);
--
--   strncpy(doc_a + 0, "``double array[a_order+1][a_order+1]`` Focal plane transformation\nmatrix.\n\nThe `SIP`_ ``A_i_j`` matrix used for pixel to focal plane\ntransformation.\n\nIts values may be changed in place, but it may not be resized, without\ncreating a new `~astropy.wcs.Sip` o", 256);
--   strncpy(doc_a + 256, "bject.\n\0", 8);
--
--   strncpy(doc_a_order + 0, "``int`` (read-only) Order of the polynomial (``A_ORDER``).\n\0", 60);
--
--   strncpy(doc_all_pix2world + 0, "all_pix2world(pixcrd, origin) -> ``double array[ncoord][nelem]``\n\nTransforms pixel coordinates to world coordinates.\n\nDoes the following:\n\n    - Detector to image plane correction (optionally)\n\n    - SIP distortion correction (optionally)\n\n    - Paper IV d", 256);
--   strncpy(doc_all_pix2world + 256, "istortion correction (optionally)\n\n    - wcslib WCS transformation\n\nThe first three (the distortion corrections) are done in parallel.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates.\n\n\norigin : int\n    Specifies ", 256);
--   strncpy(doc_all_pix2world + 512, "the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nworld : double array[ncoord][nelem]\n    Returns an array of world coordinates.\n\nRaises\n------\nMemory", 256);
--   strncpy(doc_all_pix2world + 768, "Error\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisTypesError\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nValueError\n    Invalid coor", 256);
--   strncpy(doc_all_pix2world + 1024, "dinate transformation parameters.\n\nValueError\n    x- and y-coordinate arrays are not the same size.\n\nInvalidTransformError\n    Invalid coordinate transformation.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.\n\0", 244);
--
--   strncpy(doc_alt + 0, "``str`` Character code for alternate coordinate descriptions.\n\nFor example, the ``\"a\"`` in keyword names such as ``CTYPEia``.  This\nis a space character for the primary coordinate description, or one of\nthe 26 upper-case letters, A-Z.\n\0", 236);
--
--   strncpy(doc_ap + 0, "``double array[ap_order+1][ap_order+1]`` Focal plane to pixel\ntransformation matrix.\n\nThe `SIP`_ ``AP_i_j`` matrix used for focal plane to pixel\ntransformation.  Its values may be changed in place, but it may not be\nresized, without creating a new `~astrop", 256);
--   strncpy(doc_ap + 256, "y.wcs.Sip` object.\n\0", 20);
--
--   strncpy(doc_ap_order + 0, "``int`` (read-only) Order of the polynomial (``AP_ORDER``).\n\0", 61);
--
--   strncpy(doc_axis_types + 0, "``int array[naxis]`` An array of four-digit type codes for each axis.\n\n- First digit (i.e. 1000s):\n\n  - 0: Non-specific coordinate type.\n\n  - 1: Stokes coordinate.\n\n  - 2: Celestial coordinate (including ``CUBEFACE``).\n\n  - 3: Spectral coordinate.\n\n- Secon", 256);
--   strncpy(doc_axis_types + 256, "d digit (i.e. 100s):\n\n  - 0: Linear axis.\n\n  - 1: Quantized axis (``STOKES``, ``CUBEFACE``).\n\n  - 2: Non-linear celestial axis.\n\n  - 3: Non-linear spectral axis.\n\n  - 4: Logarithmic axis.\n\n  - 5: Tabular axis.\n\n- Third digit (i.e. 10s):\n\n  - 0: Group numbe", 256);
--   strncpy(doc_axis_types + 512, "r, e.g. lookup table number\n\n- The fourth digit is used as a qualifier depending on the axis type.\n\n  - For celestial axes:\n\n    - 0: Longitude coordinate.\n\n    - 1: Latitude coordinate.\n\n    - 2: ``CUBEFACE`` number.\n\n  - For lookup tables: the axis numbe", 256);
--   strncpy(doc_axis_types + 768, "r in a multidimensional table.\n\n``CTYPEia`` in ``\"4-3\"`` form with unrecognized algorithm code will\nhave its type set to -1 and generate an error.\n\0", 148);
--
--   strncpy(doc_b + 0, "``double array[b_order+1][b_order+1]`` Pixel to focal plane\ntransformation matrix.\n\nThe `SIP`_ ``B_i_j`` matrix used for pixel to focal plane\ntransformation.  Its values may be changed in place, but it may not be\nresized, without creating a new `~astropy.w", 256);
--   strncpy(doc_b + 256, "cs.Sip` object.\n\0", 17);
--
--   strncpy(doc_b_order + 0, "``int`` (read-only) Order of the polynomial (``B_ORDER``).\n\0", 60);
--
--   strncpy(doc_bp + 0, "``double array[bp_order+1][bp_order+1]`` Focal plane to pixel\ntransformation matrix.\n\nThe `SIP`_ ``BP_i_j`` matrix used for focal plane to pixel\ntransformation.  Its values may be changed in place, but it may not be\nresized, without creating a new `~astrop", 256);
--   strncpy(doc_bp + 256, "y.wcs.Sip` object.\n\0", 20);
--
--   strncpy(doc_bp_order + 0, "``int`` (read-only) Order of the polynomial (``BP_ORDER``).\n\0", 61);
--
--   strncpy(doc_cd + 0, "``double array[naxis][naxis]`` The ``CDi_ja`` linear transformation\nmatrix.\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib.  The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the ", 256);
--   strncpy(doc_cd + 256, "deprecated\n``CROTAia`` keywords.  Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~astropy.wcs.Wcsprm.has_pc`, `~astropy.wcs.Wcsprm.has_cd` and\n`~astropy.w", 256);
--   strncpy(doc_cd + 512, "cs.Wcsprm.has_crota` can be used to determine which of\nthese alternatives are present in the header.\n\nThese alternate specifications of the linear transformation matrix are\ntranslated immediately to ``PCi_ja`` by `~astropy.wcs.Wcsprm.set` and\nare nowhere v", 256);
--   strncpy(doc_cd + 768, "isible to the lower-level routines.  In particular,\n`~astropy.wcs.Wcsprm.set` resets `~astropy.wcs.Wcsprm.cdelt` to unity\nif ``CDi_ja`` is present (and no ``PCi_ja``).  If no ``CROTAia`` is\nassociated with the latitude axis, `~astropy.wcs.Wcsprm.set` rever", 256);
--   strncpy(doc_cd + 1024, "ts\nto a unity ``PCi_ja`` matrix.\n\0", 34);
--
--   strncpy(doc_cdelt + 0, "``double array[naxis]`` Coordinate increments (``CDELTia``) for each\ncoord axis.\n\nIf a ``CDi_ja`` linear transformation matrix is present, a warning is\nraised and `~astropy.wcs.Wcsprm.cdelt` is ignored.  The ``CDi_ja``\nmatrix may be deleted by::\n\n  del wcs", 256);
--   strncpy(doc_cdelt + 256, ".wcs.cd\n\nAn undefined value is represented by NaN.\n\0", 52);
--
--   strncpy(doc_cdfix + 0, "cdfix()\n\nFix erroneously omitted ``CDi_ja`` keywords.\n\nSets the diagonal element of the ``CDi_ja`` matrix to unity if all\n``CDi_ja`` keywords associated with a given axis were omitted.\nAccording to Paper I, if any ``CDi_ja`` keywords at all are given in a\n", 256);
--   strncpy(doc_cdfix + 256, "FITS header then those not given default to zero.  This results in a\nsingular matrix with an intersecting row and column of zeros.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0", 224);
--
--   strncpy(doc_cel_offset + 0, "``boolean`` Is there an offset?\n\nIf `True`, an offset will be applied to ``(x, y)`` to force ``(x, y) =\n(0, 0)`` at the fiducial point, (phi_0, theta_0).  Default is `False`.\n\0", 176);
--
--   strncpy(doc_celfix + 0, "Translates AIPS-convention celestial projection types, ``-NCP`` and\n``-GLS``.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0", 171);
--
--   strncpy(doc_cname + 0, "``list of strings`` A list of the coordinate axis names, from\n``CNAMEia``.\n\0", 76);
--
--   strncpy(doc_colax + 0, "``int array[naxis]`` An array recording the column numbers for each\naxis in a pixel list.\n\0", 91);
--
--   strncpy(doc_colnum + 0, "``int`` Column of FITS binary table associated with this WCS.\n\nWhere the coordinate representation is associated with an image-array\ncolumn in a FITS binary table, this property may be used to record the\nrelevant column number.\n\nIt should be set to zero fo", 256);
--   strncpy(doc_colnum + 256, "r an image header or pixel list.\n\0", 34);
--
--   strncpy(doc_convert + 0, "convert(array)\n\nPerform the unit conversion on the elements of the given *array*,\nreturning an array of the same shape.\n\0", 121);
--
--   strncpy(doc_coord + 0, "``double array[K_M]...[K_2][K_1][M]`` The tabular coordinate array.\n\nHas the dimensions::\n\n    (K_M, ... K_2, K_1, M)\n\n(see `~astropy.wcs._astropy.wcs.Tabprm.K`) i.e. with the `M` dimension\nvarying fastest so that the `M` elements of a coordinate vector ar", 256);
--   strncpy(doc_coord + 256, "e\nstored contiguously in memory.\n\0", 34);
--
--   strncpy(doc_copy + 0, "Creates a deep copy of the WCS object.\n\0", 40);
--
--   strncpy(doc_cpdis1 + 0, "`~astropy.wcs.DistortionLookupTable`\n\nThe pre-linear transformation distortion lookup table, ``CPDIS1``.\n\0", 106);
--
--   strncpy(doc_cpdis2 + 0, "`~astropy.wcs.DistortionLookupTable`\n\nThe pre-linear transformation distortion lookup table, ``CPDIS2``.\n\0", 106);
--
--   strncpy(doc_crder + 0, "``double array[naxis]`` The random error in each coordinate axis,\n``CRDERia``.\n\nAn undefined value is represented by NaN.\n\0", 123);
--
--   strncpy(doc_crota + 0, "``double array[naxis]`` ``CROTAia`` keyvalues for each coordinate\naxis.\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib.  The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the depr", 256);
--   strncpy(doc_crota + 256, "ecated\n``CROTAia`` keywords.  Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~astropy.wcs.Wcsprm.has_pc`, `~astropy.wcs.Wcsprm.has_cd` and\n`~astropy.wcs.W", 256);
--   strncpy(doc_crota + 512, "csprm.has_crota` can be used to determine which of\nthese alternatives are present in the header.\n\nThese alternate specifications of the linear transformation matrix are\ntranslated immediately to ``PCi_ja`` by `~astropy.wcs.Wcsprm.set` and\nare nowhere visib", 256);
--   strncpy(doc_crota + 768, "le to the lower-level routines.  In particular,\n`~astropy.wcs.Wcsprm.set` resets `~astropy.wcs.Wcsprm.cdelt` to unity\nif ``CDi_ja`` is present (and no ``PCi_ja``).  If no ``CROTAia`` is\nassociated with the latitude axis, `~astropy.wcs.Wcsprm.set` reverts\nt", 256);
--   strncpy(doc_crota + 1024, "o a unity ``PCi_ja`` matrix.\n\0", 30);
--
--   strncpy(doc_crpix + 0, "``double array[naxis]`` Coordinate reference pixels (``CRPIXja``) for\neach pixel axis.\n\0", 88);
--
--   strncpy(doc_crval + 0, "``double array[naxis]`` Coordinate reference values (``CRVALia``) for\neach coordinate axis.\n\0", 93);
--
--   strncpy(doc_crval_tabprm + 0, "``double array[M]`` Index values for the reference pixel for each of\nthe tabular coord axes.\n\0", 94);
--
--   strncpy(doc_csyer + 0, "``double array[naxis]`` The systematic error in the coordinate value\naxes, ``CSYERia``.\n\nAn undefined value is represented by NaN.\n\0", 132);
--
--   strncpy(doc_ctype + 0, "``list of strings[naxis]`` List of ``CTYPEia`` keyvalues.\n\nThe `~astropy.wcs.Wcsprm.ctype` keyword values must be in upper case\nand there must be zero or one pair of matched celestial axis types,\nand zero or one spectral axis.\n\0", 228);
--
--   strncpy(doc_cubeface + 0, "``int`` Index into the ``pixcrd`` (pixel coordinate) array for the\n``CUBEFACE`` axis.\n\nThis is used for quadcube projections where the cube faces are stored\non a separate axis.\n\nThe quadcube projections (``TSC``, ``CSC``, ``QSC``) may be\nrepresented in FIT", 256);
--   strncpy(doc_cubeface + 256, "S in either of two ways:\n\n    - The six faces may be laid out in one plane and numbered as\n      follows::\n\n\n                                       0\n\n                              4  3  2  1  4  3  2\n\n                                       5\n\n      Faces ", 256);
--   strncpy(doc_cubeface + 512, "2, 3 and 4 may appear on one side or the other (or both).\n      The world-to-pixel routines map faces 2, 3 and 4 to the left but\n      the pixel-to-world routines accept them on either side.\n\n    - The ``COBE`` convention in which the six faces are stored ", 256);
--   strncpy(doc_cubeface + 768, "in a\n      three-dimensional structure using a ``CUBEFACE`` axis indexed\n      from 0 to 5 as above.\n\nThese routines support both methods; `~astropy.wcs.Wcsprm.set`\ndetermines which is being used by the presence or absence of a\n``CUBEFACE`` axis in `~astro", 256);
--   strncpy(doc_cubeface + 1024, "py.wcs.Wcsprm.ctype`.\n`~astropy.wcs.Wcsprm.p2s` and `~astropy.wcs.Wcsprm.s2p` translate the\n``CUBEFACE`` axis representation to the single plane representation\nunderstood by the lower-level projection routines.\n\0", 212);
--
--   strncpy(doc_cunit + 0, "``list of astropy.UnitBase[naxis]`` List of ``CUNITia`` keyvalues as\n`astropy.units.UnitBase` instances.\n\nThese define the units of measurement of the ``CRVALia``, ``CDELTia``\nand ``CDi_ja`` keywords.\n\nAs ``CUNITia`` is an optional header keyword,\n`~astrop", 256);
--   strncpy(doc_cunit + 256, "y.wcs.Wcsprm.cunit` may be left blank but otherwise is\nexpected to contain a standard units specification as defined by WCS\nPaper I.  `~astropy.wcs.Wcsprm.unitfix` is available to translate\ncommonly used non-standard units specifications but this must be d", 256);
--   strncpy(doc_cunit + 512, "one\nas a separate step before invoking `~astropy.wcs.Wcsprm.set`.\n\nFor celestial axes, if `~astropy.wcs.Wcsprm.cunit` is not blank,\n`~astropy.wcs.Wcsprm.set` uses `wcsunits` to parse it and scale\n`~astropy.wcs.Wcsprm.cdelt`, `~astropy.wcs.Wcsprm.crval`, an", 256);
--   strncpy(doc_cunit + 768, "d\n`~astropy.wcs.Wcsprm.cd` to decimal degrees.  It then resets\n`~astropy.wcs.Wcsprm.cunit` to ``\"deg\"``.\n\nFor spectral axes, if `~astropy.wcs.Wcsprm.cunit` is not blank,\n`~astropy.wcs.Wcsprm.set` uses `wcsunits` to parse it and scale\n`~astropy.wcs.Wcsprm.c", 256);
--   strncpy(doc_cunit + 1024, "delt`, `~astropy.wcs.Wcsprm.crval`, and\n`~astropy.wcs.Wcsprm.cd` to SI units.  It then resets\n`~astropy.wcs.Wcsprm.cunit` accordingly.\n\n`~astropy.wcs.Wcsprm.set` ignores `~astropy.wcs.Wcsprm.cunit` for\nother coordinate types; `~astropy.wcs.Wcsprm.cunit` ma", 256);
--   strncpy(doc_cunit + 1280, "y be used to\nlabel coordinate values.\n\0", 39);
--
--   strncpy(doc_cylfix + 0, "cylfix()\n\nFixes WCS keyvalues for malformed cylindrical projections.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0", 162);
--
--   strncpy(doc_data + 0, "``float array`` The array data for the\n`~astropy.wcs.DistortionLookupTable`.\n\0", 78);
--
--   strncpy(doc_data_wtbarr + 0, "``double array``\n\nThe array data for the BINTABLE.\n\0", 52);
--
--   strncpy(doc_dateavg + 0, "``string`` Representative mid-point of the date of observation.\n\nIn ISO format, ``yyyy-mm-ddThh:mm:ss``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.dateobs\n\0", 152);
--
--   strncpy(doc_dateobs + 0, "``string`` Start of the date of observation.\n\nIn ISO format, ``yyyy-mm-ddThh:mm:ss``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.dateavg\n\0", 133);
--
--   strncpy(doc_datfix + 0, "datfix()\n\nTranslates the old ``DATE-OBS`` date format to year-2000 standard form\n``(yyyy-mm-ddThh:mm:ss)`` and derives ``MJD-OBS`` from it if not\nalready set.\n\nAlternatively, if `~astropy.wcs.Wcsprm.mjdobs` is set and\n`~astropy.wcs.Wcsprm.dateobs` isn't, t", 256);
--   strncpy(doc_datfix + 256, "hen `~astropy.wcs.Wcsprm.datfix`\nderives `~astropy.wcs.Wcsprm.dateobs` from it.  If both are set but\ndisagree by more than half a day then `ValueError` is raised.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0", 256);
--
--   strncpy(doc_delta + 0, "``double array[M]`` (read-only) Interpolated indices into the coord\narray.\n\nArray of interpolated indices into the coordinate array such that\nUpsilon_m, as defined in Paper III, is equal to\n(`~astropy.wcs._astropy.wcs.Tabprm.p0` [m] + 1) + delta[m].\n\0", 251);
--
--   strncpy(doc_det2im + 0, "Convert detector coordinates to image plane coordinates.\n\0", 58);
--
--   strncpy(doc_det2im1 + 0, "A `~astropy.wcs.DistortionLookupTable` object for detector to image plane\ncorrection in the *x*-axis.\n\0", 103);
--
--   strncpy(doc_det2im2 + 0, "A `~astropy.wcs.DistortionLookupTable` object for detector to image plane\ncorrection in the *y*-axis.\n\0", 103);
--
--   strncpy(doc_dims + 0, "``int array[ndim]`` (read-only)\n\nThe dimensions of the tabular array\n`~astropy.wcs._astropy.wcs.Wtbarr.data`.\n\0", 111);
--
--   strncpy(doc_equinox + 0, "``double`` The equinox associated with dynamical equatorial or\necliptic coordinate systems.\n\n``EQUINOXa`` (or ``EPOCH`` in older headers).  Not applicable to ICRS\nequatorial or ecliptic coordinates.\n\nAn undefined value is represented by NaN.\n\0", 243);
--
--   strncpy(doc_extlev + 0, "``int`` (read-only)\n\n``EXTLEV`` identifying the binary table extension.\n\0", 73);
--
--   strncpy(doc_extnam + 0, "``str`` (read-only)\n\n``EXTNAME`` identifying the binary table extension.\n\0", 74);
--
--   strncpy(doc_extrema + 0, "``double array[K_M]...[K_2][2][M]`` (read-only)\n\nAn array recording the minimum and maximum value of each element of\nthe coordinate vector in each row of the coordinate array, with the\ndimensions::\n\n    (K_M, ... K_2, 2, M)\n\n(see `~astropy.wcs._astropy.wcs", 256);
--   strncpy(doc_extrema + 256, ".Tabprm.K`).  The minimum is recorded\nin the first element of the compressed K_1 dimension, then the\nmaximum.  This array is used by the inverse table lookup function to\nspeed up table searches.\n\0", 196);
--
--   strncpy(doc_extver + 0, "``int`` (read-only)\n\n``EXTVER`` identifying the binary table extension.\n\0", 73);
--
--   strncpy(doc_find_all_wcs + 0, "find_all_wcs(relax=0, keysel=0)\n\nFind all WCS transformations in the header.\n\nParameters\n----------\n\nheader : str\n    The raw FITS header data.\n\nrelax : bool or int\n    Degree of permissiveness:\n\n    - `False`: Recognize only FITS keywords defined by the p", 256);
--   strncpy(doc_find_all_wcs + 256, "ublished\n      WCS standard.\n\n    - `True`: Admit all recognized informal extensions of the WCS\n      standard.\n\n    - `int`: a bit field selecting specific extensions to accept.  See\n      :ref:`relaxread` for details.\n\nkeysel : sequence of flags\n    Used", 256);
--   strncpy(doc_find_all_wcs + 512, " to restrict the keyword types considered:\n\n    - ``WCSHDR_IMGHEAD``: Image header keywords.\n\n    - ``WCSHDR_BIMGARR``: Binary table image array.\n\n    - ``WCSHDR_PIXLIST``: Pixel list keywords.\n\n    If zero, there is no restriction.  If -1, `wcspih` is cal", 256);
--   strncpy(doc_find_all_wcs + 768, "led,\n    rather than `wcstbh`.\n\nReturns\n-------\nwcs_list : list of `~astropy.wcs._astropy.wcs.Wcsprm` objects\n\0", 111);
--
--   strncpy(doc_fix + 0, "fix(translate_units='', naxis=0)\n\nApplies all of the corrections handled separately by\n`~astropy.wcs.Wcsprm.datfix`, `~astropy.wcs.Wcsprm.unitfix`,\n`~astropy.wcs.Wcsprm.celfix`, `~astropy.wcs.Wcsprm.spcfix`,\n`~astropy.wcs.Wcsprm.cylfix` and `~astropy.wcs.W", 256);
--   strncpy(doc_fix + 256, "csprm.cdfix`.\n\nParameters\n----------\n\ntranslate_units : str\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    translation to ``\"s\"`` is potentially unsafe since the sta", 256);
--   strncpy(doc_fix + 512, "ndard\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may be\n    used.  The same applies to ``\"H\"`` for hours (Henry), and ``\"D\"``\n    for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    -", 256);
--   strncpy(doc_fix + 768, " If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, wh", 256);
--   strncpy(doc_fix + 1024, "ereas ``'shd'``\n    does all of them.\n\nnaxis : int array[naxis]\n    Image axis lengths.  If this array is set to zero or ``None``,\n    then `~astropy.wcs.Wcsprm.cylfix` will not be invoked.\n\nReturns\n-------\nstatus : dict\n\n    Returns a dictionary containin", 256);
--   strncpy(doc_fix + 1280, "g the following keys, each referring\n    to a status string for each of the sub-fix functions that were\n    called:\n\n    - `~astropy.wcs.Wcsprm.cdfix`\n\n    - `~astropy.wcs.Wcsprm.datfix`\n\n    - `~astropy.wcs.Wcsprm.unitfix`\n\n    - `~astropy.wcs.Wcsprm.celf", 256);
--   strncpy(doc_fix + 1536, "ix`\n\n    - `~astropy.wcs.Wcsprm.spcfix`\n\n    - `~astropy.wcs.Wcsprm.cylfix`\n\0", 77);
--
--   strncpy(doc_get_cdelt + 0, "get_cdelt() -> double array[naxis]\n\nCoordinate increments (``CDELTia``) for each coord axis.\n\nReturns the ``CDELT`` offsets in read-only form.  Unlike the\n`~astropy.wcs.Wcsprm.cdelt` property, this works even when the header\nspecifies the linear transforma", 256);
--   strncpy(doc_get_cdelt + 256, "tion matrix in one of the alternative\n``CDi_ja`` or ``CROTAia`` forms.  This is useful when you want access\nto the linear transformation matrix, but don't care how it was\nspecified in the header.\n\0", 197);
--
--   strncpy(doc_get_offset + 0, "get_offset(x, y) -> (x, y)\n\nReturns the offset as defined in the distortion lookup table.\n\nReturns\n-------\ncoordinate : coordinate pair\n    The offset from the distortion table for pixel point (*x*, *y*).\n\0", 206);
--
--   strncpy(doc_get_pc + 0, "get_pc() -> double array[naxis][naxis]\n\nReturns the ``PC`` matrix in read-only form.  Unlike the\n`~astropy.wcs.Wcsprm.pc` property, this works even when the header\nspecifies the linear transformation matrix in one of the alternative\n``CDi_ja`` or ``CROTAia", 256);
--   strncpy(doc_get_pc + 256, "`` forms.  This is useful when you want access\nto the linear transformation matrix, but don't care how it was\nspecified in the header.\n\0", 136);
--
--   strncpy(doc_get_ps + 0, "get_ps() -> list of tuples\n\nReturns ``PSi_ma`` keywords for each *i* and *m*.\n\nReturns\n-------\nps : list of tuples\n\n    Returned as a list of tuples of the form (*i*, *m*, *value*):\n\n    - *i*: int.  Axis number, as in ``PSi_ma``, (i.e. 1-relative)\n\n    - ", 256);
--   strncpy(doc_get_ps + 256, "*m*: int.  Parameter number, as in ``PSi_ma``, (i.e. 0-relative)\n\n    - *value*: string.  Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.set_ps : Set ``PSi_ma`` values\n\0", 177);
--
--   strncpy(doc_get_pv + 0, "get_pv() -> list of tuples\n\nReturns ``PVi_ma`` keywords for each *i* and *m*.\n\nReturns\n-------\n\n    Returned as a list of tuples of the form (*i*, *m*, *value*):\n\n    - *i*: int.  Axis number, as in ``PVi_ma``, (i.e. 1-relative)\n\n    - *m*: int.  Parameter", 256);
--   strncpy(doc_get_pv + 256, " number, as in ``PVi_ma``, (i.e. 0-relative)\n\n    - *value*: string. Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.set_pv : Set ``PVi_ma`` values\n\nNotes\n-----\n\nNote that, if they were not given, `~astropy.wcs.Wcsprm.set` resets\nthe entries for ``P", 256);
--   strncpy(doc_get_pv + 512, "Vi_1a``, ``PVi_2a``, ``PVi_3a``, and ``PVi_4a`` for\nlongitude axis *i* to match (``phi_0``, ``theta_0``), the native\nlongitude and latitude of the reference point given by ``LONPOLEa``\nand ``LATPOLEa``.\n\0", 204);
--
--   strncpy(doc_has_cd + 0, "has_cd() -> bool\n\nReturns `True` if ``CDi_ja`` is present.\n\n``CDi_ja`` is an alternate specification of the linear transformation\nmatrix, maintained for historical compatibility.\n\nMatrix elements in the IRAF convention are equivalent to the product\n``CDi_j", 256);
--   strncpy(doc_has_cd + 256, "a = CDELTia * PCi_ja``, but the defaults differ from that of\nthe ``PCi_ja`` matrix.  If one or more ``CDi_ja`` keywords are present\nthen all unspecified ``CDi_ja`` default to zero.  If no ``CDi_ja`` (or\n``CROTAia``) keywords are present, then the header is", 256);
--   strncpy(doc_has_cd + 512, " assumed to be in\n``PCi_ja`` form whether or not any ``PCi_ja`` keywords are present\nsince this results in an interpretation of ``CDELTia`` consistent with\nthe original FITS specification.\n\nWhile ``CDi_ja`` may not formally co-exist with ``PCi_ja``, it may", 256);
--   strncpy(doc_has_cd + 768, "\nco-exist with ``CDELTia`` and ``CROTAia`` which are to be ignored.\n\nSee also\n--------\nastropy.wcs.Wcsprm.cd : Get the raw ``CDi_ja`` values.\n\0", 143);
--
--   strncpy(doc_has_cdi_ja + 0, "has_cdi_ja() -> bool\n\nAlias for `~astropy.wcs.Wcsprm.has_cd`.  Maintained for backward\ncompatibility.\n\0", 103);
--
--   strncpy(doc_has_crota + 0, "has_crota() -> bool\n\nReturns `True` if ``CROTAia`` is present.\n\n``CROTAia`` is an alternate specification of the linear transformation\nmatrix, maintained for historical compatibility.\n\nIn the AIPS convention, ``CROTAia`` may only be associated with the\nlat", 256);
--   strncpy(doc_has_crota + 256, "itude axis of a celestial axis pair.  It specifies a rotation in\nthe image plane that is applied *after* the ``CDELTia``; any other\n``CROTAia`` keywords are ignored.\n\n``CROTAia`` may not formally co-exist with ``PCi_ja``.  ``CROTAia`` and\n``CDELTia`` may f", 256);
--   strncpy(doc_has_crota + 512, "ormally co-exist with ``CDi_ja`` but if so are to be\nignored.\n\nSee also\n--------\nastropy.wcs.Wcsprm.crota : Get the raw ``CROTAia`` values\n\0", 140);
--
--   strncpy(doc_has_crotaia + 0, "has_crotaia() -> bool\n\nAlias for `~astropy.wcs.Wcsprm.has_crota`.  Maintained for backward\ncompatibility.\n\0", 107);
--
--   strncpy(doc_has_pc + 0, "has_pc() -> bool\n\nReturns `True` if ``PCi_ja`` is present.  ``PCi_ja`` is the\nrecommended way to specify the linear transformation matrix.\n\nSee also\n--------\nastropy.wcs.Wcsprm.pc : Get the raw ``PCi_ja`` values\n\0", 213);
--
--   strncpy(doc_has_pci_ja + 0, "has_pci_ja() -> bool\n\nAlias for `~astropy.wcs.Wcsprm.has_pc`.  Maintained for backward\ncompatibility.\n\0", 103);
--
--   strncpy(doc_have + 0, "``string`` The name of the unit being converted from.\n\nThis value always uses standard unit names, even if the\n`UnitConverter` was initialized with a non-standard unit name.\n\0", 175);
--
--   strncpy(doc_i + 0, "``int`` (read-only)\n\nImage axis number.\n\0", 41);
--
--   strncpy(doc_imgpix_matrix + 0, "``double array[2][2]`` (read-only) Inverse of the ``CDELT`` or ``PC``\nmatrix.\n\nInverse containing the product of the ``CDELTia`` diagonal matrix and\nthe ``PCi_ja`` matrix.\n\0", 173);
--
--   strncpy(doc_is_unity + 0, "is_unity() -> bool\n\nReturns `True` if the linear transformation matrix\n(`~astropy.wcs.Wcsprm.cd`) is unity.\n\0", 109);
--
--   strncpy(doc_kind + 0, "``str`` (read-only)\n\nCharacter identifying the wcstab array type:\n\n    - ``'c'``: coordinate array,\n    - ``'i'``: index vector.\n\0", 130);
--
--   strncpy(doc_lat + 0, "``int`` (read-only) The index into the world coord array containing\nlatitude values.\n\0", 86);
--
--   strncpy(doc_latpole + 0, "``double`` The native latitude of the celestial pole, ``LATPOLEa`` (deg).\n\0", 75);
--
--   strncpy(doc_lattyp + 0, "``string`` (read-only) Celestial axis type for latitude.\n\nFor example, \"RA\", \"DEC\", \"GLON\", \"GLAT\", etc. extracted from \"RA--\",\n\"DEC-\", \"GLON\", \"GLAT\", etc. in the first four characters of\n``CTYPEia`` but with trailing dashes removed.\n\0", 236);
--
--   strncpy(doc_lng + 0, "``int`` (read-only) The index into the world coord array containing\nlongitude values.\n\0", 87);
--
--   strncpy(doc_lngtyp + 0, "``string`` (read-only) Celestial axis type for longitude.\n\nFor example, \"RA\", \"DEC\", \"GLON\", \"GLAT\", etc. extracted from \"RA--\",\n\"DEC-\", \"GLON\", \"GLAT\", etc. in the first four characters of\n``CTYPEia`` but with trailing dashes removed.\n\0", 237);
--
--   strncpy(doc_lonpole + 0, "``double`` The native longitude of the celestial pole.\n\n``LONPOLEa`` (deg).\n\0", 77);
--
--   strncpy(doc_m + 0, "``int`` (read-only)\n\nArray axis number for index vectors.\n\0", 59);
--
--   strncpy(doc_map + 0, "``int array[M]`` Association between axes.\n\nA vector of length `~astropy.wcs._astropy.wcs.Tabprm.M` that defines\nthe association between axis *m* in the *M*-dimensional coordinate\narray (1 <= *m* <= *M*) and the indices of the intermediate world\ncoordinate", 256);
--   strncpy(doc_map + 256, " and world coordinate arrays.\n\nWhen the intermediate and world coordinate arrays contain the full\ncomplement of coordinate elements in image-order, as will usually be\nthe case, then ``map[m-1] == i-1`` for axis *i* in the *N*-dimensional\nimage (1 <= *i* <=", 256);
--   strncpy(doc_map + 512, " *N*).  In terms of the FITS keywords::\n\n    map[PVi_3a - 1] == i - 1.\n\nHowever, a different association may result if the intermediate\ncoordinates, for example, only contains a (relevant) subset of\nintermediate world coordinate elements.  For example, if ", 256);
--   strncpy(doc_map + 768, "*M* == 1 for\nan image with *N* > 1, it is possible to fill the intermediate\ncoordinates with the relevant coordinate element with ``nelem`` set to\n1.  In this case ``map[0] = 0`` regardless of the value of *i*.\n\0", 212);
--
--   strncpy(doc_mix + 0, "mix(mixpix, mixcel, vspan, vstep, viter, world, pixcrd, origin)\n\nGiven either the celestial longitude or latitude plus an element of\nthe pixel coordinate, solves for the remaining elements by iterating\non the unknown celestial coordinate element using\n`~as", 256);
--   strncpy(doc_mix + 256, "tropy.wcs.Wcsprm.s2p`.\n\nParameters\n----------\nmixpix : int\n    Which element on the pixel coordinate is given.\n\nmixcel : int\n    Which element of the celestial coordinate is given. If *mixcel* =\n    ``1``, celestial longitude is given in ``world[self.lng]`", 256);
--   strncpy(doc_mix + 512, "`,\n    latitude returned in ``world[self.lat]``.  If *mixcel* = ``2``,\n    celestial latitude is given in ``world[self.lat]``, longitude\n    returned in ``world[self.lng]``.\n\nvspan : pair of floats\n    Solution interval for the celestial coordinate, in deg", 256);
--   strncpy(doc_mix + 768, "rees.  The\n    ordering of the two limits is irrelevant.  Longitude ranges may be\n    specified with any convenient normalization, for example\n    ``(-120,+120)`` is the same as ``(240,480)``, except that the\n    solution will be returned with the same nor", 256);
--   strncpy(doc_mix + 1024, "malization, i.e. lie\n    within the interval specified.\n\nvstep : float\n    Step size for solution search, in degrees.  If ``0``, a sensible,\n    although perhaps non-optimal default will be used.\n\nviter : int\n    If a solution is not found then the step si", 256);
--   strncpy(doc_mix + 1280, "ze will be halved and\n    the search recommenced.  *viter* controls how many times the step\n    size is halved.  The allowed range is 5 - 10.\n\nworld : double array[naxis]\n    World coordinate elements.  ``world[self.lng]`` and\n    ``world[self.lat]`` are t", 256);
--   strncpy(doc_mix + 1536, "he celestial longitude and latitude, in\n    degrees.  Which is given and which returned depends on the value\n    of *mixcel*.  All other elements are given.  The results will be\n    written to this array in-place.\n\npixcrd : double array[naxis].\n    Pixel c", 256);
--   strncpy(doc_mix + 1792, "oordinates.  The element indicated by *mixpix* is given and\n    the remaining elements will be written in-place.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexin", 256);
--   strncpy(doc_mix + 2048, "g with\n    origin at 0.\n\n\nReturns\n-------\nresult : dict\n\n    Returns a dictionary with the following keys:\n\n    - *phi* (double array[naxis])\n\n    - *theta* (double array[naxis])\n\n        - Longitude and latitude in the native coordinate system of\n        ", 256);
--   strncpy(doc_mix + 2304, "  the projection, in degrees.\n\n    - *imgcrd* (double array[naxis])\n\n        - Image coordinate elements.  ``imgcrd[self.lng]`` and\n          ``imgcrd[self.lat]`` are the projected *x*- and\n          *y*-coordinates, in decimal degrees.\n\n    - *world* (dou", 256);
--   strncpy(doc_mix + 2560, "ble array[naxis])\n\n        - Another reference to the *world* argument passed in.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisTypesError\n    Inconsistent or un", 256);
--   strncpy(doc_mix + 2816, "recognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nInvalidTransformError\n    Invalid coordinate transformation parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.\n\nInvalidCoordinateError\n   ", 256);
--   strncpy(doc_mix + 3072, " Invalid world coordinate.\n\nNoSolutionError\n    No solution found in the specified interval.\n\nSee also\n--------\nastropy.wcs.Wcsprm.lat, astropy.wcs.Wcsprm.lng\n    Get the axes numbers for latitude and longitude\n\nNotes\n-----\n\nInitially, the specified soluti", 256);
--   strncpy(doc_mix + 3328, "on interval is checked to see if it's a\n\"crossing\" interval.  If it isn't, a search is made for a crossing\nsolution by iterating on the unknown celestial coordinate starting at\nthe upper limit of the solution interval and decrementing by the\nspecified step", 256);
--   strncpy(doc_mix + 3584, " size.  A crossing is indicated if the trial value of\nthe pixel coordinate steps through the value specified.  If a crossing\ninterval is found then the solution is determined by a modified form\nof \"regula falsi\" division of the crossing interval.  If no cr", 256);
--   strncpy(doc_mix + 3840, "ossing\ninterval was found within the specified solution interval then a\nsearch is made for a \"non-crossing\" solution as may arise from a\npoint of tangency.  The process is complicated by having to make\nallowance for the discontinuities that occur in all ma", 256);
--   strncpy(doc_mix + 4096, "p projections.\n\nOnce one solution has been determined others may be found by\nsubsequent invocations of `~astropy.wcs.Wcsprm.mix` with suitably\nrestricted solution intervals.\n\nNote the circumstance that arises when the solution point lies at a\nnative pole o", 256);
--   strncpy(doc_mix + 4352, "f a projection in which the pole is represented as a\nfinite curve, for example the zenithals and conics.  In such cases two\nor more valid solutions may exist but `~astropy.wcs.Wcsprm.mix` only\never returns one.\n\nBecause of its generality, `~astropy.wcs.Wcs", 256);
--   strncpy(doc_mix + 4608, "prm.mix` is very\ncompute-intensive.  For compute-limited applications, more efficient\nspecial-case solvers could be written for simple projections, for\nexample non-oblique cylindrical projections.\n\0", 198);
--
--   strncpy(doc_mjdavg + 0, "``double`` Modified Julian Date corresponding to ``DATE-AVG``.\n\n``(MJD = JD - 2400000.5)``.\n\nAn undefined value is represented by NaN.\n\nSee also\n--------\nastropy.wcs.Wcsprm.mjdobs\n\0", 181);
--
--   strncpy(doc_mjdobs + 0, "``double`` Modified Julian Date corresponding to ``DATE-OBS``.\n\n``(MJD = JD - 2400000.5)``.\n\nAn undefined value is represented by NaN.\n\nSee also\n--------\nastropy.wcs.Wcsprm.mjdavg\n\0", 181);
--
--   strncpy(doc_name + 0, "``string`` The name given to the coordinate representation\n``WCSNAMEa``.\n\0", 74);
--
--   strncpy(doc_naxis + 0, "``int`` (read-only) The number of axes (pixel and coordinate).\n\nGiven by the ``NAXIS`` or ``WCSAXESa`` keyvalues.\n\nThe number of coordinate axes is determined at parsing time, and can\nnot be subsequently changed.\n\nIt is determined from the highest of the f", 256);
--   strncpy(doc_naxis + 256, "ollowing:\n\n  1. ``NAXIS``\n\n  2. ``WCSAXESa``\n\n  3. The highest axis number in any parameterized WCS keyword.  The\n     keyvalue, as well as the keyword, must be syntactically valid\n     otherwise it will not be considered.\n\nIf none of these keyword types i", 256);
--   strncpy(doc_naxis + 512, "s present, i.e. if the header only\ncontains auxiliary WCS keywords for a particular coordinate\nrepresentation, then no coordinate description is constructed for it.\n\nThis value may differ for different coordinate representations of the\nsame image.\n\0", 249);
--
--   strncpy(doc_nc + 0, "``int`` (read-only) Total number of coord vectors in the coord array.\n\nTotal number of coordinate vectors in the coordinate array being the\nproduct K_1 * K_2 * ... * K_M.\n\0", 172);
--
--   strncpy(doc_ndim + 0, "``int`` (read-only)\n\nExpected dimensionality of the wcstab array.\n\0", 67);
--
--   strncpy(doc_obsgeo + 0, "``double array[3]`` Location of the observer in a standard terrestrial\nreference frame.\n\n``OBSGEO-X``, ``OBSGEO-Y``, ``OBSGEO-Z`` (in meters).\n\nAn undefined value is represented by NaN.\n\0", 187);
--
--   strncpy(doc_offset + 0, "``double`` The offset of the unit conversion.\n\0", 47);
--
--   strncpy(doc_p0 + 0, "``int array[M]`` Interpolated indices into the coordinate array.\n\nVector of length `~astropy.wcs._astropy.wcs.Tabprm.M` of interpolated\nindices into the coordinate array such that Upsilon_m, as defined in\nPaper III, is equal to ``(p0[m] + 1) + delta[m]``.\n", 256);
--   strncpy(doc_p0 + 256, "\0", 1);
--
--   strncpy(doc_p2s + 0, "p2s(pixcrd, origin)\n\nConverts pixel to world coordinates.\n\nParameters\n----------\n\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origi", 256);
--   strncpy(doc_p2s + 256, "n of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nresult : dict\n    Returns a dictionary with the following keys:\n\n    - *imgcrd*: double array[ncoord][nelem]\n\n      - Array of intermediate world coordinates.  For celestial ax", 256);
--   strncpy(doc_p2s + 512, "es,\n        ``imgcrd[][self.lng]`` and ``imgcrd[][self.lat]`` are the\n        projected *x*-, and *y*-coordinates, in pseudo degrees.  For\n        spectral axes, ``imgcrd[][self.spec]`` is the intermediate\n        spectral coordinate, in SI units.\n\n    - *", 256);
--   strncpy(doc_p2s + 768, "phi*: double array[ncoord]\n\n    - *theta*: double array[ncoord]\n\n      - Longitude and latitude in the native coordinate system of the\n        projection, in degrees.\n\n    - *world*: double array[ncoord][nelem]\n\n      - Array of world coordinates.  For cel", 256);
--   strncpy(doc_p2s + 1024, "estial axes,\n        ``world[][self.lng]`` and ``world[][self.lat]`` are the\n        celestial longitude and latitude, in degrees.  For spectral\n        axes, ``world[][self.spec]`` is the intermediate spectral\n        coordinate, in SI units.\n\n    - *stat", 256);
--   strncpy(doc_p2s + 1280, "*: int array[ncoord]\n\n      - Status return value for each coordinate. ``0`` for success,\n        ``1+`` for invalid pixel coordinate.\n\nRaises\n------\n\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singul", 256);
--   strncpy(doc_p2s + 1536, "ar.\n\nInconsistentAxisTypesError\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nValueError\n    *x*- and *y*-coordinate arrays are not the same size.\n\nInvalidTransformError\n    Invalid coordinate transformat", 256);
--   strncpy(doc_p2s + 1792, "ion parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.\n\nSee also\n--------\nastropy.wcs.Wcsprm.lat, astropy.wcs.Wcsprm.lng\n    Definition of the latitude andlongitude axes\n\0", 213);
--
--   strncpy(doc_p4_pix2foc + 0, "p4_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nConvert pixel coordinates to focal plane coordinates using `Paper IV`_\nlookup-table distortion correction.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem].\n    Array of pixel coordina", 256);
--   strncpy(doc_p4_pix2foc + 256, "tes.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nfoccrd : double array[ncoord][nelem]\n    Returns an array of focal", 256);
--   strncpy(doc_p4_pix2foc + 512, " plane coordinates.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nValueError\n    Invalid coordinate transformation parameters.\n\0", 140);
--
--   strncpy(doc_pc + 0, "``double array[naxis][naxis]`` The ``PCi_ja`` (pixel coordinate)\ntransformation matrix.\n\nThe order is::\n\n  [[PC1_1, PC1_2],\n   [PC2_1, PC2_2]]\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcsli", 256);
--   strncpy(doc_pc + 256, "b.  The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated\n``CROTAia`` keywords.  Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~astro", 256);
--   strncpy(doc_pc + 512, "py.wcs.Wcsprm.has_pc`, `~astropy.wcs.Wcsprm.has_cd` and\n`~astropy.wcs.Wcsprm.has_crota` can be used to determine which of\nthese alternatives are present in the header.\n\nThese alternate specifications of the linear transformation matrix are\ntranslated immed", 256);
--   strncpy(doc_pc + 768, "iately to ``PCi_ja`` by `~astropy.wcs.Wcsprm.set` and\nare nowhere visible to the lower-level routines.  In particular,\n`~astropy.wcs.Wcsprm.set` resets `~astropy.wcs.Wcsprm.cdelt` to unity\nif ``CDi_ja`` is present (and no ``PCi_ja``).  If no ``CROTAia`` is", 256);
--   strncpy(doc_pc + 1024, "\nassociated with the latitude axis, `~astropy.wcs.Wcsprm.set` reverts\nto a unity ``PCi_ja`` matrix.\n\0", 101);
--
--   strncpy(doc_phi0 + 0, "``double`` The native latitude of the fiducial point.\n\nThe point whose celestial coordinates are given in ``ref[1:2]``.  If\nundefined (NaN) the initialization routine, `~astropy.wcs.Wcsprm.set`,\nwill set this to a projection-specific default.\n\nSee also\n---", 256);
--   strncpy(doc_phi0 + 256, "-----\nastropy.wcs.Wcsprm.theta0\n\0", 33);
--
--   strncpy(doc_pix2foc + 0, "pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nPerform both `SIP`_ polynomial and `Paper IV`_ lookup-table distortion\ncorrection in parallel.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates.\n\n\norigin : ", 256);
--   strncpy(doc_pix2foc + 256, "int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nfoccrd : double array[ncoord][nelem]\n    Returns an array of focal plane coordinat", 256);
--   strncpy(doc_pix2foc + 512, "es.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nValueError\n    Invalid coordinate transformation parameters.\n\0", 124);
--
--   strncpy(doc_piximg_matrix + 0, "``double array[2][2]`` (read-only) Matrix containing the product of\nthe ``CDELTia`` diagonal matrix and the ``PCi_ja`` matrix.\n\0", 128);
--
--   strncpy(doc_power + 0, "``double`` The exponent of the unit conversion.\n\0", 49);
--
--   strncpy(doc_print_contents + 0, "print_contents()\n\nPrint the contents of the `~astropy.wcs.Wcsprm` object to stdout.\nProbably only useful for debugging purposes, and may be removed in the\nfuture.\n\nTo get a string of the contents, use `repr`.\n\0", 210);
--
--   strncpy(doc_print_contents_tabprm + 0, "print_contents()\n\nPrint the contents of the `~astropy.wcs._astropy.wcs.Tabprm` object to\nstdout.  Probably only useful for debugging purposes, and may be\nremoved in the future.\n\nTo get a string of the contents, use `repr`.\n\0", 224);
--
--   strncpy(doc_radesys + 0, "``string`` The equatorial or ecliptic coordinate system type,\n``RADESYSa``.\n\0", 77);
--
--   strncpy(doc_restfrq + 0, "``double`` Rest frequency (Hz) from ``RESTFRQa``.\n\nAn undefined value is represented by NaN.\n\0", 94);
--
--   strncpy(doc_restwav + 0, "``double`` Rest wavelength (m) from ``RESTWAVa``.\n\nAn undefined value is represented by NaN.\n\0", 94);
--
--   strncpy(doc_row + 0, "``int`` (read-only)\n\nTable row number.\n\0", 40);
--
--   strncpy(doc_s2p + 0, "s2p(world, origin)\n\nTransforms world coordinates to pixel coordinates.\n\nParameters\n----------\nworld : double array[ncoord][nelem]\n    Array of world coordinates, in decimal degrees.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and ", 256);
--   strncpy(doc_s2p + 256, "FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nresult : dict\n    Returns a dictionary with the following keys:\n\n    - *phi*: double array[ncoord]\n\n    - *theta*: double array[ncoord]\n\n        ", 256);
--   strncpy(doc_s2p + 512, "- Longitude and latitude in the native coordinate system of\n          the projection, in degrees.\n\n    - *imgcrd*: double array[ncoord][nelem]\n\n       - Array of intermediate world coordinates.  For celestial axes,\n         ``imgcrd[][self.lng]`` and ``img", 256);
--   strncpy(doc_s2p + 768, "crd[][self.lat]`` are the\n         projected *x*-, and *y*-coordinates, in pseudo \"degrees\".\n         For quadcube projections with a ``CUBEFACE`` axis, the face\n         number is also returned in ``imgcrd[][self.cubeface]``.  For\n         spectral axes, ", 256);
--   strncpy(doc_s2p + 1024, "``imgcrd[][self.spec]`` is the intermediate\n         spectral coordinate, in SI units.\n\n    - *pixcrd*: double array[ncoord][nelem]\n\n        - Array of pixel coordinates.  Pixel coordinates are\n          zero-based.\n\n    - *stat*: int array[ncoord]\n\n      ", 256);
--   strncpy(doc_s2p + 1280, "  - Status return value for each coordinate. ``0`` for success,\n          ``1+`` for invalid pixel coordinate.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisType", 256);
--   strncpy(doc_s2p + 1536, "sError\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nInvalidTransformError\n   Invalid coordinate transformation parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.", 256);
--   strncpy(doc_s2p + 1792, "\n\nSee also\n--------\nastropy.wcs.Wcsprm.lat, astropy.wcs.Wcsprm.lng\n    Definition of the latitude and longitude axes\n\0", 118);
--
--   strncpy(doc_scale + 0, "``double`` The scaling factor for the unit conversion.\n\0", 56);
--
--   strncpy(doc_sense + 0, "``int array[M]`` +1 if monotonically increasing, -1 if decreasing.\n\nA vector of length `~astropy.wcs._astropy.wcs.Tabprm.M` whose elements\nindicate whether the corresponding indexing vector is monotonically\nincreasing (+1), or decreasing (-1).\n\0", 245);
--
--   strncpy(doc_set + 0, "set()\n\nSets up a WCS object for use according to information supplied within\nit.\n\nNote that this routine need not be called directly; it will be invoked\nby `~astropy.wcs.Wcsprm.p2s` and `~astropy.wcs.Wcsprm.s2p` if\nnecessary.\n\nSome attributes that are base", 256);
--   strncpy(doc_set + 256, "d on other attributes (such as\n`~astropy.wcs.Wcsprm.lattyp` on `~astropy.wcs.Wcsprm.ctype`) may not\nbe correct until after `~astropy.wcs.Wcsprm.set` is called.\n\n`~astropy.wcs.Wcsprm.set` strips off trailing blanks in all string\nmembers.\n\n`~astropy.wcs.Wcsp", 256);
--   strncpy(doc_set + 512, "rm.set` recognizes the ``NCP`` projection and\nconverts it to the equivalent ``SIN`` projection and it also\nrecognizes ``GLS`` as a synonym for ``SFL``.  It does alias\ntranslation for the AIPS spectral types (``FREQ-LSR``, ``FELO-HEL``,\netc.) but without ch", 256);
--   strncpy(doc_set + 768, "anging the input header keywords.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisTypesError\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n  ", 256);
--   strncpy(doc_set + 1024, "  Invalid parameter value.\n\nInvalidTransformError\n    Invalid coordinate transformation parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.\n\0", 182);
--
--   strncpy(doc_set_ps + 0, "set_ps(list)\n\nSets `PSi_ma` keywords for each *i* and *m*.\n\nParameters\n----------\nps : sequence of tuples\n\n    The input must be a sequence of tuples of the form (*i*, *m*,\n    *value*):\n\n    - *i*: int.  Axis number, as in ``PSi_ma``, (i.e. 1-relative)\n\n ", 256);
--   strncpy(doc_set_ps + 256, "   - *m*: int.  Parameter number, as in ``PSi_ma``, (i.e. 0-relative)\n\n    - *value*: string.  Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.get_ps\n\0", 158);
--
--   strncpy(doc_set_pv + 0, "set_pv(list)\n\nSets `PVi_ma` keywords for each *i* and *m*.\n\nParameters\n----------\npv : list of tuples\n\n    The input must be a sequence of tuples of the form (*i*, *m*,\n    *value*):\n\n    - *i*: int.  Axis number, as in ``PVi_ma``, (i.e. 1-relative)\n\n    -", 256);
--   strncpy(doc_set_pv + 256, " *m*: int.  Parameter number, as in ``PVi_ma``, (i.e. 0-relative)\n\n    - *value*: float.  Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.get_pv\n\0", 153);
--
--   strncpy(doc_set_tabprm + 0, "set()\n\nAllocates memory for work arrays.\n\nAlso sets up the class according to information supplied within it.\n\nNote that this routine need not be called directly; it will be invoked\nby functions that need it.\n\nRaises\n------\nMemoryError\n    Memory allocatio", 256);
--   strncpy(doc_set_tabprm + 256, "n failed.\n\nInvalidTabularParameters\n    Invalid tabular parameters.\n\0", 69);
--
--   strncpy(doc_sip + 0, "Get/set the `~astropy.wcs.Sip` object for performing `SIP`_ distortion\ncorrection.\n\0", 84);
--
--   strncpy(doc_sip_foc2pix + 0, "sip_foc2pix(*foccrd, origin*) -> double array[ncoord][nelem]\n\nConvert focal plane coordinates to pixel coordinates using the `SIP`_\npolynomial distortion convention.\n\nParameters\n----------\nfoccrd : double array[ncoord][nelem]\n    Array of focal plane coord", 256);
--   strncpy(doc_sip_foc2pix + 256, "inates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\npixcrd : double array[ncoord][nelem]\n    Returns an array of pi", 256);
--   strncpy(doc_sip_foc2pix + 512, "xel coordinates.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nValueError\n    Invalid coordinate transformation parameters.\n\0", 137);
--
--   strncpy(doc_sip_pix2foc + 0, "sip_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nConvert pixel coordinates to focal plane coordinates using the `SIP`_\npolynomial distortion convention.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates", 256);
--   strncpy(doc_sip_pix2foc + 256, ".\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nfoccrd : double array[ncoord][nelem]\n    Returns an array of focal pl", 256);
--   strncpy(doc_sip_pix2foc + 512, "ane coordinates.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nValueError\n    Invalid coordinate transformation parameters.\n\0", 137);
--
--   strncpy(doc_spcfix + 0, "spcfix() -> int\n\nTranslates AIPS-convention spectral coordinate types.  {``FREQ``,\n``VELO``, ``FELO``}-{``OBS``, ``HEL``, ``LSR``} (e.g. ``FREQ-LSR``,\n``VELO-OBS``, ``FELO-HEL``)\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no ch", 256);
--   strncpy(doc_spcfix + 256, "ange required.\n\0", 16);
--
--   strncpy(doc_spec + 0, "``int`` (read-only) The index containing the spectral axis values.\n\0", 68);
--
--   strncpy(doc_specsys + 0, "``string`` Spectral reference frame (standard of rest), ``SPECSYSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.ssysobs, astropy.wcs.Wcsprm.velosys\n\0", 145);
--
--   strncpy(doc_sptr + 0, "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object.\n\nFor example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and\nvice versa.\n\nParameters\n----------\nctype : str\n    Required spectral ``CTYPEia``, maximum of 8 characters.  The first\n   ", 256);
--   strncpy(doc_sptr + 256, " four characters are required to be given and are never modified.\n    The remaining four, the algorithm code, are completely determined\n    by, and must be consistent with, the first four characters.\n    Wildcarding may be used, i.e.  if the final three ch", 256);
--   strncpy(doc_sptr + 512, "aracters are\n    specified as ``\"???\"``, or if just the eighth character is\n    specified as ``\"?\"``, the correct algorithm code will be\n    substituted and returned.\n\ni : int\n    Index of the spectral axis (0-relative).  If ``i < 0`` (or not\n    provided)", 256);
--   strncpy(doc_sptr + 768, ", it will be set to the first spectral axis identified\n    from the ``CTYPE`` keyvalues in the FITS header.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisTypesEr", 256);
--   strncpy(doc_sptr + 1024, "ror\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nInvalidTransformError\n    Invalid coordinate transformation parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.\n\n", 256);
--   strncpy(doc_sptr + 1280, "InvalidSubimageSpecificationError\n    Invalid subimage specification (no spectral axis).\n\0", 90);
--
--   strncpy(doc_ssysobs + 0, "``string`` Spectral reference frame.\n\nThe spectral reference frame in which there is no differential\nvariation in the spectral coordinate across the field-of-view,\n``SSYSOBSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.specsys, astropy.wcs.Wcsprm.velosys\n\0", 253);
--
--   strncpy(doc_ssyssrc + 0, "``string`` Spectral reference frame for redshift.\n\nThe spectral reference frame (standard of rest) in which the redshift\nwas measured, ``SSYSSRCa``.\n\0", 150);
--
--   strncpy(doc_sub + 0, "sub(axes)\n\nExtracts the coordinate description for a subimage from a\n`~astropy.wcs.WCS` object.\n\nThe world coordinate system of the subimage must be separable in the\nsense that the world coordinates at any point in the subimage must\ndepend only on the pixe", 256);
--   strncpy(doc_sub + 256, "l coordinates of the axes extracted.  In\npractice, this means that the ``PCi_ja`` matrix of the original image\nmust not contain non-zero off-diagonal terms that associate any of the\nsubimage axes with any of the non-subimage axes.\n\n`sub` can also add axes ", 256);
--   strncpy(doc_sub + 512, "to a wcsprm object.  The new axes will be\ncreated using the defaults set by the Wcsprm constructor which produce\na simple, unnamed, linear axis with world coordinates equal to the\npixel coordinate.  These default values can be changed before\ninvoking `set`", 256);
--   strncpy(doc_sub + 768, ".\n\nParameters\n----------\naxes : int or a sequence.\n\n    - If an int, include the first *N* axes in their original order.\n\n    - If a sequence, may contain a combination of image axis numbers\n      (1-relative) or special axis identifiers (see below).  Orde", 256);
--   strncpy(doc_sub + 1024, "r is\n      significant; ``axes[0]`` is the axis number of the input image\n      that corresponds to the first axis in the subimage, etc.  Use an\n      axis number of 0 to create a new axis using the defaults.\n\n    - If ``0``, ``[]`` or ``None``, do a deep ", 256);
--   strncpy(doc_sub + 1280, "copy.\n\n    Coordinate axes types may be specified using either strings or\n    special integer constants.  The available types are:\n\n    - ``'longitude'`` / ``WCSSUB_LONGITUDE``: Celestial longitude\n\n    - ``'latitude'`` / ``WCSSUB_LATITUDE``: Celestial lat", 256);
--   strncpy(doc_sub + 1536, "itude\n\n    - ``'cubeface'`` / ``WCSSUB_CUBEFACE``: Quadcube ``CUBEFACE`` axis\n\n    - ``'spectral'`` / ``WCSSUB_SPECTRAL``: Spectral axis\n\n    - ``'stokes'`` / ``WCSSUB_STOKES``: Stokes axis\n\n    - ``'celestial'`` / ``WCSSUB_CELESTIAL``: An alias for the\n  ", 256);
--   strncpy(doc_sub + 1792, "    combination of ``'longitude'``, ``'latitude'`` and ``'cubeface'``.\n\nReturns\n-------\nnew_wcs : `~astropy.wcs.WCS` object\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nInvalidSubimageSpecificationError\n    Invalid subimage specification (no s", 256);
--   strncpy(doc_sub + 2048, "pectral axis).\n\nNonseparableSubimageCoordinateSystem\n    Non-separable subimage coordinate system.\n\nNotes\n-----\nCombinations of subimage axes of particular types may be extracted in\nthe same order as they occur in the input image by combining the\ninteger c", 256);
--   strncpy(doc_sub + 2304, "onstants with the 'binary or' (``|``) operator.  For\nexample::\n\n    wcs.sub([WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_SPECTRAL])\n\nwould extract the longitude, latitude, and spectral axes in the same\norder as the input image.  If one of each were present", 256);
--   strncpy(doc_sub + 2560, ", the resulting\nobject would have three dimensions.\n\nFor convenience, ``WCSSUB_CELESTIAL`` is defined as the combination\n``WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_CUBEFACE``.\n\nThe codes may also be negated to extract all but the types specified,\nfor ex", 256);
--   strncpy(doc_sub + 2816, "ample::\n\n    wcs.sub([\n      WCSSUB_LONGITUDE,\n      WCSSUB_LATITUDE,\n      WCSSUB_CUBEFACE,\n      -(WCSSUB_SPECTRAL | WCSSUB_STOKES)])\n\nThe last of these specifies all axis types other than spectral or\nStokes.  Extraction is done in the order specified by", 256);
--   strncpy(doc_sub + 3072, " `axes`, i.e. a\nlongitude axis (if present) would be extracted first (via ``axes[0]``)\nand not subsequently (via ``axes[3]``).  Likewise for the latitude and\ncubeface axes in this example.\n\nThe number of dimensions in the returned object may be less than o", 256);
--   strncpy(doc_sub + 3328, "r\ngreater than the length of `axes`.  However, it will never exceed the\nnumber of axes in the input image.\n\0", 108);
--
--   strncpy(doc_tab + 0, "``list of Tabprm`` Tabular coordinate objects.\n\nA list of tabular coordinate objects associated with this WCS.\n\0", 112);
--
--   strncpy(doc_theta0 + 0, "``double``  The native longitude of the fiducial point.\n\nThe point whose celestial coordinates are given in ``ref[1:2]``.  If\nundefined (NaN) the initialization routine, `~astropy.wcs.Wcsprm.set`,\nwill set this to a projection-specific default.\n\nSee also\n-", 256);
--   strncpy(doc_theta0 + 256, "-------\nastropy.wcs.Wcsprm.phi0\n\0", 33);
--
--   strncpy(doc_to_header + 0, "to_header(relax=False)\n\n`to_header` translates a WCS object into a FITS header.\n\nThe details of the header depends on context:\n\n    - If the `~astropy.wcs.Wcsprm.colnum` member is non-zero then a\n      binary table image array header will be produced.\n\n   ", 256);
--   strncpy(doc_to_header + 256, " - Otherwise, if the `~astropy.wcs.Wcsprm.colax` member is set\n      non-zero then a pixel list header will be produced.\n\n    - Otherwise, a primary image or image extension header will be\n      produced.\n\nThe output header will almost certainly differ fro", 256);
--   strncpy(doc_to_header + 512, "m the input in a\nnumber of respects:\n\n    1. The output header only contains WCS-related keywords.  In\n       particular, it does not contain syntactically-required keywords\n       such as ``SIMPLE``, ``NAXIS``, ``BITPIX``, or ``END``.\n\n    2. Deprecated (", 256);
--   strncpy(doc_to_header + 768, "e.g. ``CROTAn``) or non-standard usage will be\n       translated to standard (this is partially dependent on whether\n       `fix` was applied).\n\n    3. Quantities will be converted to the units used internally,\n       basically SI with the addition of degr", 256);
--   strncpy(doc_to_header + 1024, "ees.\n\n    4. Floating-point quantities may be given to a different decimal\n       precision.\n\n    5. Elements of the ``PCi_j`` matrix will be written if and only if\n       they differ from the unit matrix.  Thus, if the matrix is unity\n       then no eleme", 256);
--   strncpy(doc_to_header + 1280, "nts will be written.\n\n    6. Additional keywords such as ``WCSAXES``, ``CUNITia``,\n       ``LONPOLEa`` and ``LATPOLEa`` may appear.\n\n    7. The original keycomments will be lost, although\n       `~astropy.wcs.Wcsprm.to_header` tries hard to write meaningfu", 256);
--   strncpy(doc_to_header + 1536, "l\n       comments.\n\n    8. Keyword order may be changed.\n\nKeywords can be translated between the image array, binary table, and\npixel lists forms by manipulating the `~astropy.wcs.Wcsprm.colnum` or\n`~astropy.wcs.Wcsprm.colax` members of the `~astropy.wcs.W", 256);
--   strncpy(doc_to_header + 1792, "csprm.WCS`\nobject.\n\nParameters\n----------\n\nrelax : bool or int\n    Degree of permissiveness:\n\n    - `False`: Recognize only FITS keywords defined by the published\n      WCS standard.\n\n    - `True`: Admit all recognized informal extensions of the WCS\n      ", 256);
--   strncpy(doc_to_header + 2048, "standard.\n\n    - `int`: a bit field selecting specific extensions to write.\n      See :ref:`relaxwrite` for details.\n\nReturns\n-------\nheader : str\n    Raw FITS header as a string.\n\0", 181);
--
--   strncpy(doc_ttype + 0, "``str`` (read-only)\n\n``TTYPEn`` identifying the column of the binary table that contains\nthe wcstab array.\n\0", 108);
--
--   strncpy(doc_unitfix + 0, "unitfix(translate_units='')\n\nTranslates non-standard ``CUNITia`` keyvalues.\n\nFor example, ``DEG`` -> ``deg``, also stripping off unnecessary\nwhitespace.\n\nParameters\n----------\ntranslate_units : str, optional\n    Do potentially unsafe translations of non-st", 256);
--   strncpy(doc_unitfix + 256, "andard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is potentially unsafe since the\n    standard used.  The same applies to ", 256);
--   strncpy(doc_unitfix + 512, "``\"H\"`` for hours (Henry),\n    and ``\"D\"`` for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    - If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, transl", 256);
--   strncpy(doc_unitfix + 768, "ate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'``\n    does all of them.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` i", 256);
--   strncpy(doc_unitfix + 1024, "f no change required.\n\0", 23);
--
--   strncpy(doc_velangl + 0, "``double`` Velocity angle.\n\nThe angle in degrees that should be used to decompose an observed\nvelocity into radial and transverse components.\n\nAn undefined value is represented by NaN.\n\0", 186);
--
--   strncpy(doc_velosys + 0, "``double`` Relative radial velocity.\n\nThe relative radial velocity (m/s) between the observer and the\nselected standard of rest in the direction of the celestial reference\ncoordinate, ``VELOSYSa``.\n\nAn undefined value is represented by NaN.\n\nSee also\n-----", 256);
--   strncpy(doc_velosys + 256, "---\nastropy.wcs.Wcsprm.specsys, astropy.wcs.Wcsprm.ssysobs\n\0", 60);
--
--   strncpy(doc_want + 0, "``string`` The name of the unit being converted to.\n\nThis value always uses standard unit names, even if the\n`UnitConverter` was initialized with a non-standard unit name.\n\0", 173);
--
--   strncpy(doc_wcs + 0, "A `~astropy.wcs.Wcsprm` object to perform the basic `wcslib`_ WCS\ntransformation.\n\0", 83);
--
--   strncpy(doc_zsource + 0, "``double`` The redshift, ``ZSOURCEa``, of the source.\n\nAn undefined value is represented by NaN.\n\0", 98);
--
--
--}
--
--#else /* UNIX */
--char doc_DistortionLookupTable[374] = "DistortionLookupTable(*table*, *crpix*, *crval*, *cdelt*)\n\nRepresents a single lookup table for a `Paper IV`_ distortion\ntransformation.\n\nParameters\n----------\ntable : 2-dimensional array\n    The distortion lookup table.\n\ncrpix : 2-tuple\n    The distortion array reference pixel\n\ncrval : 2-tuple\n    The image array pixel coordinate\n\ncdelt : 2-tuple\n    The grid step size\n\0";
--
--char doc_InconsistentAxisTypes[100] = "InconsistentAxisTypesError()\n\nThe WCS header inconsistent or unrecognized coordinate axis type(s).\n\0";
--
--char doc_InvalidCoordinate[76] = "InvalidCoordinateError()\n\nOne or more of the world coordinates is invalid.\n\0";
--
--char doc_InvalidSubimageSpecification[77] = "InvalidSubimageSpecificationError()\n\nThe subimage specification is invalid.\n\0";
--
--char doc_InvalidTabularParameters[76] = "InvalidTabularParametersError()\n\nThe given tabular parameters are invalid.\n\0";
--
--char doc_InvalidTransform[107] = "InvalidTransformError()\n\nThe WCS transformation is invalid, or the transformation parameters\nare invalid.\n\0";
--
--char doc_K[202] = "``int array[M]`` (read-only) The lengths of the axes of the coordinate\narray.\n\nAn array of length `M` whose elements record the lengths of the axes of\nthe coordinate array and of each indexing vector.\n\0";
--
--char doc_M[56] = "``int`` (read-only) Number of tabular coordinate axes.\n\0";
--
--char doc_NoSolution[68] = "NoSolutionError()\n\nNo solution can be found in the given interval.\n\0";
--
--char doc_NoWcsKeywordsFound[76] = "NoWcsKeywordsFoundError()\n\nNo WCS keywords were found in the given header.\n\0";
--
--char doc_NonseparableSubimageCoordinateSystem[88] = "NonseparableSubimageCoordinateSystemError()\n\nNon-separable subimage coordinate system.\n\0";
--
--char doc_SingularMatrix[70] = "SingularMatrixError()\n\nThe linear transformation matrix is singular.\n\0";
--
--char doc_Sip[1040] = "Sip(*a, b, ap, bp, crpix*)\n\nThe `~astropy.wcs.Sip` class performs polynomial distortion correction\nusing the `SIP`_ convention in both directions.\n\nParameters\n----------\na : double array[m+1][m+1]\n    The ``A_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``A_ORDER``.\n\nb : double array[m+1][m+1]\n    The ``B_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m*  [...]
--
--char doc_Tabprm[234] = "A class to store the information related to tabular coordinates,\ni.e., coordinates that are defined via a lookup table.\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.tab`.\n\0";
--
--char doc_UnitConverter[2349] = "UnitConverter(have, want, translate_units='')\n\nAn object for converting from one system of units to another.\n\nUse the returned object's `~astropy.wcs.UnitConverter.convert` method\nto convert values from *have* to *want*.\n\nThis function is permissive in accepting whitespace in all contexts in\na units specification where it does not create ambiguity (e.g. not\nbetween a metric prefix and a basic unit string), including in strings\nlike ``\"log (m ** [...]
--
--char doc_Wcs[513] = "Wcs(*sip, cpdis, wcsprm, det2im*)\n\nWcs objects amalgamate basic WCS (as provided by `wcslib`_), with\n`SIP`_ and `Paper IV`_ distortion operations.\n\nTo perform all distortion corrections and WCS tranformation, use\n`all_pix2world`.\n\nParameters\n----------\nsip : `~astropy.wcs.Sip` object or `None`\n\ncpdis : A pair of `~astropy.wcs.DistortionLookupTable` objects, or\n  ``(None, None)``.\n\nwcsprm : `~astropy.wcs.Wcsprm` object\n\ndet2im : A pair of `~astropy.w [...]
--
--char doc_WcsError[39] = "Base class of all invalid WCS errors.\n\0";
--
--char doc_Wcsprm[2088] = "Wcsprm(header=None, key=' ', relax=False, naxis=2, keysel=0, colsel=None)\n\n`~astropy.wcs.Wcsprm` is a direct wrapper around `wcslib`_.  It\nprovides access to the core WCS transformations that it supports.\n\nThe FITS header parsing enforces correct FITS \"keyword = value\" syntax\nwith regard to the equals sign occurring in columns 9 and 10.\nHowever, it does recognize free-format character (NOST 100-2.0,\nSect. 5.2.1), integer (Sect. 5.2.3), and floating-poi [...]
--
--char doc_Wtbarr[202] = "Classes to construct coordinate lookup tables from a binary table\nextension (BINTABLE).\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.wtb`.\n\0";
--
--char doc_a[264] = "``double array[a_order+1][a_order+1]`` Focal plane transformation\nmatrix.\n\nThe `SIP`_ ``A_i_j`` matrix used for pixel to focal plane\ntransformation.\n\nIts values may be changed in place, but it may not be resized, without\ncreating a new `~astropy.wcs.Sip` object.\n\0";
--
--char doc_a_order[60] = "``int`` (read-only) Order of the polynomial (``A_ORDER``).\n\0";
--
--char doc_all_pix2world[1268] = "all_pix2world(pixcrd, origin) -> ``double array[ncoord][nelem]``\n\nTransforms pixel coordinates to world coordinates.\n\nDoes the following:\n\n    - Detector to image plane correction (optionally)\n\n    - SIP distortion correction (optionally)\n\n    - Paper IV distortion correction (optionally)\n\n    - wcslib WCS transformation\n\nThe first three (the distortion corrections) are done in parallel.\n\nParameters\n----------\npixcrd : double array[ncoor [...]
--
--char doc_alt[236] = "``str`` Character code for alternate coordinate descriptions.\n\nFor example, the ``\"a\"`` in keyword names such as ``CTYPEia``.  This\nis a space character for the primary coordinate description, or one of\nthe 26 upper-case letters, A-Z.\n\0";
--
--char doc_ap[276] = "``double array[ap_order+1][ap_order+1]`` Focal plane to pixel\ntransformation matrix.\n\nThe `SIP`_ ``AP_i_j`` matrix used for focal plane to pixel\ntransformation.  Its values may be changed in place, but it may not be\nresized, without creating a new `~astropy.wcs.Sip` object.\n\0";
--
--char doc_ap_order[61] = "``int`` (read-only) Order of the polynomial (``AP_ORDER``).\n\0";
--
--char doc_axis_types[916] = "``int array[naxis]`` An array of four-digit type codes for each axis.\n\n- First digit (i.e. 1000s):\n\n  - 0: Non-specific coordinate type.\n\n  - 1: Stokes coordinate.\n\n  - 2: Celestial coordinate (including ``CUBEFACE``).\n\n  - 3: Spectral coordinate.\n\n- Second digit (i.e. 100s):\n\n  - 0: Linear axis.\n\n  - 1: Quantized axis (``STOKES``, ``CUBEFACE``).\n\n  - 2: Non-linear celestial axis.\n\n  - 3: Non-linear spectral axis.\n\n  - 4: Logarithmic axi [...]
--
--char doc_b[273] = "``double array[b_order+1][b_order+1]`` Pixel to focal plane\ntransformation matrix.\n\nThe `SIP`_ ``B_i_j`` matrix used for pixel to focal plane\ntransformation.  Its values may be changed in place, but it may not be\nresized, without creating a new `~astropy.wcs.Sip` object.\n\0";
--
--char doc_b_order[60] = "``int`` (read-only) Order of the polynomial (``B_ORDER``).\n\0";
--
--char doc_bp[276] = "``double array[bp_order+1][bp_order+1]`` Focal plane to pixel\ntransformation matrix.\n\nThe `SIP`_ ``BP_i_j`` matrix used for focal plane to pixel\ntransformation.  Its values may be changed in place, but it may not be\nresized, without creating a new `~astropy.wcs.Sip` object.\n\0";
--
--char doc_bp_order[61] = "``int`` (read-only) Order of the polynomial (``BP_ORDER``).\n\0";
--
--char doc_cd[1058] = "``double array[naxis][naxis]`` The ``CDi_ja`` linear transformation\nmatrix.\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib.  The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated\n``CROTAia`` keywords.  Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~astropy.wcs.Wcsprm.h [...]
--
--char doc_cdelt[308] = "``double array[naxis]`` Coordinate increments (``CDELTia``) for each\ncoord axis.\n\nIf a ``CDi_ja`` linear transformation matrix is present, a warning is\nraised and `~astropy.wcs.Wcsprm.cdelt` is ignored.  The ``CDi_ja``\nmatrix may be deleted by::\n\n  del wcs.wcs.cd\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_cdfix[480] = "cdfix()\n\nFix erroneously omitted ``CDi_ja`` keywords.\n\nSets the diagonal element of the ``CDi_ja`` matrix to unity if all\n``CDi_ja`` keywords associated with a given axis were omitted.\nAccording to Paper I, if any ``CDi_ja`` keywords at all are given in a\nFITS header then those not given default to zero.  This results in a\nsingular matrix with an intersecting row and column of zeros.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` [...]
--
--char doc_cel_offset[176] = "``boolean`` Is there an offset?\n\nIf `True`, an offset will be applied to ``(x, y)`` to force ``(x, y) =\n(0, 0)`` at the fiducial point, (phi_0, theta_0).  Default is `False`.\n\0";
--
--char doc_celfix[171] = "Translates AIPS-convention celestial projection types, ``-NCP`` and\n``-GLS``.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0";
--
--char doc_cname[76] = "``list of strings`` A list of the coordinate axis names, from\n``CNAMEia``.\n\0";
--
--char doc_colax[91] = "``int array[naxis]`` An array recording the column numbers for each\naxis in a pixel list.\n\0";
--
--char doc_colnum[290] = "``int`` Column of FITS binary table associated with this WCS.\n\nWhere the coordinate representation is associated with an image-array\ncolumn in a FITS binary table, this property may be used to record the\nrelevant column number.\n\nIt should be set to zero for an image header or pixel list.\n\0";
--
--char doc_convert[121] = "convert(array)\n\nPerform the unit conversion on the elements of the given *array*,\nreturning an array of the same shape.\n\0";
--
--char doc_coord[290] = "``double array[K_M]...[K_2][K_1][M]`` The tabular coordinate array.\n\nHas the dimensions::\n\n    (K_M, ... K_2, K_1, M)\n\n(see `~astropy.wcs._astropy.wcs.Tabprm.K`) i.e. with the `M` dimension\nvarying fastest so that the `M` elements of a coordinate vector are\nstored contiguously in memory.\n\0";
--
--char doc_copy[40] = "Creates a deep copy of the WCS object.\n\0";
--
--char doc_cpdis1[106] = "`~astropy.wcs.DistortionLookupTable`\n\nThe pre-linear transformation distortion lookup table, ``CPDIS1``.\n\0";
--
--char doc_cpdis2[106] = "`~astropy.wcs.DistortionLookupTable`\n\nThe pre-linear transformation distortion lookup table, ``CPDIS2``.\n\0";
--
--char doc_crder[123] = "``double array[naxis]`` The random error in each coordinate axis,\n``CRDERia``.\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_crota[1054] = "``double array[naxis]`` ``CROTAia`` keyvalues for each coordinate\naxis.\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib.  The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated\n``CROTAia`` keywords.  Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore them if given\nin conjunction with ``PCi_ja``.\n\n`~astropy.wcs.Wcsprm.ha [...]
--
--char doc_crpix[88] = "``double array[naxis]`` Coordinate reference pixels (``CRPIXja``) for\neach pixel axis.\n\0";
--
--char doc_crval[93] = "``double array[naxis]`` Coordinate reference values (``CRVALia``) for\neach coordinate axis.\n\0";
--
--char doc_crval_tabprm[94] = "``double array[M]`` Index values for the reference pixel for each of\nthe tabular coord axes.\n\0";
--
--char doc_csyer[132] = "``double array[naxis]`` The systematic error in the coordinate value\naxes, ``CSYERia``.\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_ctype[228] = "``list of strings[naxis]`` List of ``CTYPEia`` keyvalues.\n\nThe `~astropy.wcs.Wcsprm.ctype` keyword values must be in upper case\nand there must be zero or one pair of matched celestial axis types,\nand zero or one spectral axis.\n\0";
--
--char doc_cubeface[1236] = "``int`` Index into the ``pixcrd`` (pixel coordinate) array for the\n``CUBEFACE`` axis.\n\nThis is used for quadcube projections where the cube faces are stored\non a separate axis.\n\nThe quadcube projections (``TSC``, ``CSC``, ``QSC``) may be\nrepresented in FITS in either of two ways:\n\n    - The six faces may be laid out in one plane and numbered as\n      follows::\n\n\n                                       0\n\n                              4  3  2  1   [...]
--
--char doc_cunit[1319] = "``list of astropy.UnitBase[naxis]`` List of ``CUNITia`` keyvalues as\n`astropy.units.UnitBase` instances.\n\nThese define the units of measurement of the ``CRVALia``, ``CDELTia``\nand ``CDi_ja`` keywords.\n\nAs ``CUNITia`` is an optional header keyword,\n`~astropy.wcs.Wcsprm.cunit` may be left blank but otherwise is\nexpected to contain a standard units specification as defined by WCS\nPaper I.  `~astropy.wcs.Wcsprm.unitfix` is available to translate\ncommonly us [...]
--
--char doc_cylfix[162] = "cylfix()\n\nFixes WCS keyvalues for malformed cylindrical projections.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0";
--
--char doc_data[78] = "``float array`` The array data for the\n`~astropy.wcs.DistortionLookupTable`.\n\0";
--
--char doc_data_wtbarr[52] = "``double array``\n\nThe array data for the BINTABLE.\n\0";
--
--char doc_dateavg[152] = "``string`` Representative mid-point of the date of observation.\n\nIn ISO format, ``yyyy-mm-ddThh:mm:ss``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.dateobs\n\0";
--
--char doc_dateobs[133] = "``string`` Start of the date of observation.\n\nIn ISO format, ``yyyy-mm-ddThh:mm:ss``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.dateavg\n\0";
--
--char doc_datfix[512] = "datfix()\n\nTranslates the old ``DATE-OBS`` date format to year-2000 standard form\n``(yyyy-mm-ddThh:mm:ss)`` and derives ``MJD-OBS`` from it if not\nalready set.\n\nAlternatively, if `~astropy.wcs.Wcsprm.mjdobs` is set and\n`~astropy.wcs.Wcsprm.dateobs` isn't, then `~astropy.wcs.Wcsprm.datfix`\nderives `~astropy.wcs.Wcsprm.dateobs` from it.  If both are set but\ndisagree by more than half a day then `ValueError` is raised.\n\nReturns\n-------\nsuccess : int\n    [...]
--
--char doc_delta[251] = "``double array[M]`` (read-only) Interpolated indices into the coord\narray.\n\nArray of interpolated indices into the coordinate array such that\nUpsilon_m, as defined in Paper III, is equal to\n(`~astropy.wcs._astropy.wcs.Tabprm.p0` [m] + 1) + delta[m].\n\0";
--
--char doc_det2im[58] = "Convert detector coordinates to image plane coordinates.\n\0";
--
--char doc_det2im1[103] = "A `~astropy.wcs.DistortionLookupTable` object for detector to image plane\ncorrection in the *x*-axis.\n\0";
--
--char doc_det2im2[103] = "A `~astropy.wcs.DistortionLookupTable` object for detector to image plane\ncorrection in the *y*-axis.\n\0";
--
--char doc_dims[111] = "``int array[ndim]`` (read-only)\n\nThe dimensions of the tabular array\n`~astropy.wcs._astropy.wcs.Wtbarr.data`.\n\0";
--
--char doc_equinox[243] = "``double`` The equinox associated with dynamical equatorial or\necliptic coordinate systems.\n\n``EQUINOXa`` (or ``EPOCH`` in older headers).  Not applicable to ICRS\nequatorial or ecliptic coordinates.\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_extlev[73] = "``int`` (read-only)\n\n``EXTLEV`` identifying the binary table extension.\n\0";
--
--char doc_extnam[74] = "``str`` (read-only)\n\n``EXTNAME`` identifying the binary table extension.\n\0";
--
--char doc_extrema[452] = "``double array[K_M]...[K_2][2][M]`` (read-only)\n\nAn array recording the minimum and maximum value of each element of\nthe coordinate vector in each row of the coordinate array, with the\ndimensions::\n\n    (K_M, ... K_2, 2, M)\n\n(see `~astropy.wcs._astropy.wcs.Tabprm.K`).  The minimum is recorded\nin the first element of the compressed K_1 dimension, then the\nmaximum.  This array is used by the inverse table lookup function to\nspeed up table searches.\n\0";
--
--char doc_extver[73] = "``int`` (read-only)\n\n``EXTVER`` identifying the binary table extension.\n\0";
--
--char doc_find_all_wcs[879] = "find_all_wcs(relax=0, keysel=0)\n\nFind all WCS transformations in the header.\n\nParameters\n----------\n\nheader : str\n    The raw FITS header data.\n\nrelax : bool or int\n    Degree of permissiveness:\n\n    - `False`: Recognize only FITS keywords defined by the published\n      WCS standard.\n\n    - `True`: Admit all recognized informal extensions of the WCS\n      standard.\n\n    - `int`: a bit field selecting specific extensions to accept.  See\n  [...]
--
--char doc_fix[1613] = "fix(translate_units='', naxis=0)\n\nApplies all of the corrections handled separately by\n`~astropy.wcs.Wcsprm.datfix`, `~astropy.wcs.Wcsprm.unitfix`,\n`~astropy.wcs.Wcsprm.celfix`, `~astropy.wcs.Wcsprm.spcfix`,\n`~astropy.wcs.Wcsprm.cylfix` and `~astropy.wcs.Wcsprm.cdfix`.\n\nParameters\n----------\n\ntranslate_units : str\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    [...]
--
--char doc_get_cdelt[453] = "get_cdelt() -> double array[naxis]\n\nCoordinate increments (``CDELTia``) for each coord axis.\n\nReturns the ``CDELT`` offsets in read-only form.  Unlike the\n`~astropy.wcs.Wcsprm.cdelt` property, this works even when the header\nspecifies the linear transformation matrix in one of the alternative\n``CDi_ja`` or ``CROTAia`` forms.  This is useful when you want access\nto the linear transformation matrix, but don't care how it was\nspecified in the header.\n\0";
--
--char doc_get_offset[206] = "get_offset(x, y) -> (x, y)\n\nReturns the offset as defined in the distortion lookup table.\n\nReturns\n-------\ncoordinate : coordinate pair\n    The offset from the distortion table for pixel point (*x*, *y*).\n\0";
--
--char doc_get_pc[392] = "get_pc() -> double array[naxis][naxis]\n\nReturns the ``PC`` matrix in read-only form.  Unlike the\n`~astropy.wcs.Wcsprm.pc` property, this works even when the header\nspecifies the linear transformation matrix in one of the alternative\n``CDi_ja`` or ``CROTAia`` forms.  This is useful when you want access\nto the linear transformation matrix, but don't care how it was\nspecified in the header.\n\0";
--
--char doc_get_ps[433] = "get_ps() -> list of tuples\n\nReturns ``PSi_ma`` keywords for each *i* and *m*.\n\nReturns\n-------\nps : list of tuples\n\n    Returned as a list of tuples of the form (*i*, *m*, *value*):\n\n    - *i*: int.  Axis number, as in ``PSi_ma``, (i.e. 1-relative)\n\n    - *m*: int.  Parameter number, as in ``PSi_ma``, (i.e. 0-relative)\n\n    - *value*: string.  Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.set_ps : Set ``PSi_ma`` values\n\0";
--
--char doc_get_pv[716] = "get_pv() -> list of tuples\n\nReturns ``PVi_ma`` keywords for each *i* and *m*.\n\nReturns\n-------\n\n    Returned as a list of tuples of the form (*i*, *m*, *value*):\n\n    - *i*: int.  Axis number, as in ``PVi_ma``, (i.e. 1-relative)\n\n    - *m*: int.  Parameter number, as in ``PVi_ma``, (i.e. 0-relative)\n\n    - *value*: string. Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.set_pv : Set ``PVi_ma`` values\n\nNotes\n-----\n\nNote that, if they w [...]
--
--char doc_has_cd[911] = "has_cd() -> bool\n\nReturns `True` if ``CDi_ja`` is present.\n\n``CDi_ja`` is an alternate specification of the linear transformation\nmatrix, maintained for historical compatibility.\n\nMatrix elements in the IRAF convention are equivalent to the product\n``CDi_ja = CDELTia * PCi_ja``, but the defaults differ from that of\nthe ``PCi_ja`` matrix.  If one or more ``CDi_ja`` keywords are present\nthen all unspecified ``CDi_ja`` default to zero.  If no ``CDi_ja`` (o [...]
--
--char doc_has_cdi_ja[103] = "has_cdi_ja() -> bool\n\nAlias for `~astropy.wcs.Wcsprm.has_cd`.  Maintained for backward\ncompatibility.\n\0";
--
--char doc_has_crota[652] = "has_crota() -> bool\n\nReturns `True` if ``CROTAia`` is present.\n\n``CROTAia`` is an alternate specification of the linear transformation\nmatrix, maintained for historical compatibility.\n\nIn the AIPS convention, ``CROTAia`` may only be associated with the\nlatitude axis of a celestial axis pair.  It specifies a rotation in\nthe image plane that is applied *after* the ``CDELTia``; any other\n``CROTAia`` keywords are ignored.\n\n``CROTAia`` may not formally  [...]
--
--char doc_has_crotaia[107] = "has_crotaia() -> bool\n\nAlias for `~astropy.wcs.Wcsprm.has_crota`.  Maintained for backward\ncompatibility.\n\0";
--
--char doc_has_pc[213] = "has_pc() -> bool\n\nReturns `True` if ``PCi_ja`` is present.  ``PCi_ja`` is the\nrecommended way to specify the linear transformation matrix.\n\nSee also\n--------\nastropy.wcs.Wcsprm.pc : Get the raw ``PCi_ja`` values\n\0";
--
--char doc_has_pci_ja[103] = "has_pci_ja() -> bool\n\nAlias for `~astropy.wcs.Wcsprm.has_pc`.  Maintained for backward\ncompatibility.\n\0";
--
--char doc_have[175] = "``string`` The name of the unit being converted from.\n\nThis value always uses standard unit names, even if the\n`UnitConverter` was initialized with a non-standard unit name.\n\0";
--
--char doc_i[41] = "``int`` (read-only)\n\nImage axis number.\n\0";
--
--char doc_imgpix_matrix[173] = "``double array[2][2]`` (read-only) Inverse of the ``CDELT`` or ``PC``\nmatrix.\n\nInverse containing the product of the ``CDELTia`` diagonal matrix and\nthe ``PCi_ja`` matrix.\n\0";
--
--char doc_is_unity[109] = "is_unity() -> bool\n\nReturns `True` if the linear transformation matrix\n(`~astropy.wcs.Wcsprm.cd`) is unity.\n\0";
--
--char doc_kind[130] = "``str`` (read-only)\n\nCharacter identifying the wcstab array type:\n\n    - ``'c'``: coordinate array,\n    - ``'i'``: index vector.\n\0";
--
--char doc_lat[86] = "``int`` (read-only) The index into the world coord array containing\nlatitude values.\n\0";
--
--char doc_latpole[75] = "``double`` The native latitude of the celestial pole, ``LATPOLEa`` (deg).\n\0";
--
--char doc_lattyp[236] = "``string`` (read-only) Celestial axis type for latitude.\n\nFor example, \"RA\", \"DEC\", \"GLON\", \"GLAT\", etc. extracted from \"RA--\",\n\"DEC-\", \"GLON\", \"GLAT\", etc. in the first four characters of\n``CTYPEia`` but with trailing dashes removed.\n\0";
--
--char doc_lng[87] = "``int`` (read-only) The index into the world coord array containing\nlongitude values.\n\0";
--
--char doc_lngtyp[237] = "``string`` (read-only) Celestial axis type for longitude.\n\nFor example, \"RA\", \"DEC\", \"GLON\", \"GLAT\", etc. extracted from \"RA--\",\n\"DEC-\", \"GLON\", \"GLAT\", etc. in the first four characters of\n``CTYPEia`` but with trailing dashes removed.\n\0";
--
--char doc_lonpole[77] = "``double`` The native longitude of the celestial pole.\n\n``LONPOLEa`` (deg).\n\0";
--
--char doc_m[59] = "``int`` (read-only)\n\nArray axis number for index vectors.\n\0";
--
--char doc_map[980] = "``int array[M]`` Association between axes.\n\nA vector of length `~astropy.wcs._astropy.wcs.Tabprm.M` that defines\nthe association between axis *m* in the *M*-dimensional coordinate\narray (1 <= *m* <= *M*) and the indices of the intermediate world\ncoordinate and world coordinate arrays.\n\nWhen the intermediate and world coordinate arrays contain the full\ncomplement of coordinate elements in image-order, as will usually be\nthe case, then ``map[m-1] == i-1`` for [...]
--
--char doc_mix[4806] = "mix(mixpix, mixcel, vspan, vstep, viter, world, pixcrd, origin)\n\nGiven either the celestial longitude or latitude plus an element of\nthe pixel coordinate, solves for the remaining elements by iterating\non the unknown celestial coordinate element using\n`~astropy.wcs.Wcsprm.s2p`.\n\nParameters\n----------\nmixpix : int\n    Which element on the pixel coordinate is given.\n\nmixcel : int\n    Which element of the celestial coordinate is given. If *mixcel* =\n     [...]
--
--char doc_mjdavg[181] = "``double`` Modified Julian Date corresponding to ``DATE-AVG``.\n\n``(MJD = JD - 2400000.5)``.\n\nAn undefined value is represented by NaN.\n\nSee also\n--------\nastropy.wcs.Wcsprm.mjdobs\n\0";
--
--char doc_mjdobs[181] = "``double`` Modified Julian Date corresponding to ``DATE-OBS``.\n\n``(MJD = JD - 2400000.5)``.\n\nAn undefined value is represented by NaN.\n\nSee also\n--------\nastropy.wcs.Wcsprm.mjdavg\n\0";
--
--char doc_name[74] = "``string`` The name given to the coordinate representation\n``WCSNAMEa``.\n\0";
--
--char doc_naxis[761] = "``int`` (read-only) The number of axes (pixel and coordinate).\n\nGiven by the ``NAXIS`` or ``WCSAXESa`` keyvalues.\n\nThe number of coordinate axes is determined at parsing time, and can\nnot be subsequently changed.\n\nIt is determined from the highest of the following:\n\n  1. ``NAXIS``\n\n  2. ``WCSAXESa``\n\n  3. The highest axis number in any parameterized WCS keyword.  The\n     keyvalue, as well as the keyword, must be syntactically valid\n     otherwise i [...]
--
--char doc_nc[172] = "``int`` (read-only) Total number of coord vectors in the coord array.\n\nTotal number of coordinate vectors in the coordinate array being the\nproduct K_1 * K_2 * ... * K_M.\n\0";
--
--char doc_ndim[67] = "``int`` (read-only)\n\nExpected dimensionality of the wcstab array.\n\0";
--
--char doc_obsgeo[187] = "``double array[3]`` Location of the observer in a standard terrestrial\nreference frame.\n\n``OBSGEO-X``, ``OBSGEO-Y``, ``OBSGEO-Z`` (in meters).\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_offset[47] = "``double`` The offset of the unit conversion.\n\0";
--
--char doc_p0[257] = "``int array[M]`` Interpolated indices into the coordinate array.\n\nVector of length `~astropy.wcs._astropy.wcs.Tabprm.M` of interpolated\nindices into the coordinate array such that Upsilon_m, as defined in\nPaper III, is equal to ``(p0[m] + 1) + delta[m]``.\n\0";
--
--char doc_p2s[2005] = "p2s(pixcrd, origin)\n\nConverts pixel to world coordinates.\n\nParameters\n----------\n\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nresult : dict\n    Returns a dictionary with the following keys:\n\n    - *imgcrd*: double array[ncoord][nelem]\n\ [...]
--
--char doc_p4_pix2foc[652] = "p4_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nConvert pixel coordinates to focal plane coordinates using `Paper IV`_\nlookup-table distortion correction.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem].\n    Array of pixel coordinates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n------- [...]
--
--char doc_pc[1125] = "``double array[naxis][naxis]`` The ``PCi_ja`` (pixel coordinate)\ntransformation matrix.\n\nThe order is::\n\n  [[PC1_1, PC1_2],\n   [PC2_1, PC2_2]]\n\nFor historical compatibility, three alternate specifications of the\nlinear transforations are available in wcslib.  The canonical\n``PCi_ja`` with ``CDELTia``, ``CDi_ja``, and the deprecated\n``CROTAia`` keywords.  Although the latter may not formally co-exist\nwith ``PCi_ja``, the approach here is simply to ignore  [...]
--
--char doc_phi0[289] = "``double`` The native latitude of the fiducial point.\n\nThe point whose celestial coordinates are given in ``ref[1:2]``.  If\nundefined (NaN) the initialization routine, `~astropy.wcs.Wcsprm.set`,\nwill set this to a projection-specific default.\n\nSee also\n--------\nastropy.wcs.Wcsprm.theta0\n\0";
--
--char doc_pix2foc[636] = "pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nPerform both `SIP`_ polynomial and `Paper IV`_ lookup-table distortion\ncorrection in parallel.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nfoccrd : double a [...]
--
--char doc_piximg_matrix[128] = "``double array[2][2]`` (read-only) Matrix containing the product of\nthe ``CDELTia`` diagonal matrix and the ``PCi_ja`` matrix.\n\0";
--
--char doc_power[49] = "``double`` The exponent of the unit conversion.\n\0";
--
--char doc_print_contents[210] = "print_contents()\n\nPrint the contents of the `~astropy.wcs.Wcsprm` object to stdout.\nProbably only useful for debugging purposes, and may be removed in the\nfuture.\n\nTo get a string of the contents, use `repr`.\n\0";
--
--char doc_print_contents_tabprm[224] = "print_contents()\n\nPrint the contents of the `~astropy.wcs._astropy.wcs.Tabprm` object to\nstdout.  Probably only useful for debugging purposes, and may be\nremoved in the future.\n\nTo get a string of the contents, use `repr`.\n\0";
--
--char doc_radesys[77] = "``string`` The equatorial or ecliptic coordinate system type,\n``RADESYSa``.\n\0";
--
--char doc_restfrq[94] = "``double`` Rest frequency (Hz) from ``RESTFRQa``.\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_restwav[94] = "``double`` Rest wavelength (m) from ``RESTWAVa``.\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_row[40] = "``int`` (read-only)\n\nTable row number.\n\0";
--
--char doc_s2p[1910] = "s2p(world, origin)\n\nTransforms world coordinates to pixel coordinates.\n\nParameters\n----------\nworld : double array[ncoord][nelem]\n    Array of world coordinates, in decimal degrees.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\nresult : dict\n    Returns a dictionary with the following keys:\n\n    - *phi*: dou [...]
--
--char doc_scale[56] = "``double`` The scaling factor for the unit conversion.\n\0";
--
--char doc_sense[245] = "``int array[M]`` +1 if monotonically increasing, -1 if decreasing.\n\nA vector of length `~astropy.wcs._astropy.wcs.Tabprm.M` whose elements\nindicate whether the corresponding indexing vector is monotonically\nincreasing (+1), or decreasing (-1).\n\0";
--
--char doc_set[1206] = "set()\n\nSets up a WCS object for use according to information supplied within\nit.\n\nNote that this routine need not be called directly; it will be invoked\nby `~astropy.wcs.Wcsprm.p2s` and `~astropy.wcs.Wcsprm.s2p` if\nnecessary.\n\nSome attributes that are based on other attributes (such as\n`~astropy.wcs.Wcsprm.lattyp` on `~astropy.wcs.Wcsprm.ctype`) may not\nbe correct until after `~astropy.wcs.Wcsprm.set` is called.\n\n`~astropy.wcs.Wcsprm.set` strips off tr [...]
--
--char doc_set_ps[414] = "set_ps(list)\n\nSets `PSi_ma` keywords for each *i* and *m*.\n\nParameters\n----------\nps : sequence of tuples\n\n    The input must be a sequence of tuples of the form (*i*, *m*,\n    *value*):\n\n    - *i*: int.  Axis number, as in ``PSi_ma``, (i.e. 1-relative)\n\n    - *m*: int.  Parameter number, as in ``PSi_ma``, (i.e. 0-relative)\n\n    - *value*: string.  Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.get_ps\n\0";
--
--char doc_set_pv[409] = "set_pv(list)\n\nSets `PVi_ma` keywords for each *i* and *m*.\n\nParameters\n----------\npv : list of tuples\n\n    The input must be a sequence of tuples of the form (*i*, *m*,\n    *value*):\n\n    - *i*: int.  Axis number, as in ``PVi_ma``, (i.e. 1-relative)\n\n    - *m*: int.  Parameter number, as in ``PVi_ma``, (i.e. 0-relative)\n\n    - *value*: float.  Parameter value.\n\nSee also\n--------\nastropy.wcs.Wcsprm.get_pv\n\0";
--
--char doc_set_tabprm[325] = "set()\n\nAllocates memory for work arrays.\n\nAlso sets up the class according to information supplied within it.\n\nNote that this routine need not be called directly; it will be invoked\nby functions that need it.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nInvalidTabularParameters\n    Invalid tabular parameters.\n\0";
--
--char doc_sip[84] = "Get/set the `~astropy.wcs.Sip` object for performing `SIP`_ distortion\ncorrection.\n\0";
--
--char doc_sip_foc2pix[649] = "sip_foc2pix(*foccrd, origin*) -> double array[ncoord][nelem]\n\nConvert focal plane coordinates to pixel coordinates using the `SIP`_\npolynomial distortion convention.\n\nParameters\n----------\nfoccrd : double array[ncoord][nelem]\n    Array of focal plane coordinates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n--- [...]
--
--char doc_sip_pix2foc[649] = "sip_pix2foc(*pixcrd, origin*) -> double array[ncoord][nelem]\n\nConvert pixel coordinates to focal plane coordinates using the `SIP`_\npolynomial distortion convention.\n\nParameters\n----------\npixcrd : double array[ncoord][nelem]\n    Array of pixel coordinates.\n\n\norigin : int\n    Specifies the origin of pixel values.  The Fortran and FITS\n    standards use an origin of 1.  Numpy and C use array indexing with\n    origin at 0.\n\n\nReturns\n-------\n [...]
--
--char doc_spcfix[272] = "spcfix() -> int\n\nTranslates AIPS-convention spectral coordinate types.  {``FREQ``,\n``VELO``, ``FELO``}-{``OBS``, ``HEL``, ``LSR``} (e.g. ``FREQ-LSR``,\n``VELO-OBS``, ``FELO-HEL``)\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` if no change required.\n\0";
--
--char doc_spec[68] = "``int`` (read-only) The index containing the spectral axis values.\n\0";
--
--char doc_specsys[145] = "``string`` Spectral reference frame (standard of rest), ``SPECSYSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.ssysobs, astropy.wcs.Wcsprm.velosys\n\0";
--
--char doc_sptr[1370] = "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object.\n\nFor example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and\nvice versa.\n\nParameters\n----------\nctype : str\n    Required spectral ``CTYPEia``, maximum of 8 characters.  The first\n    four characters are required to be given and are never modified.\n    The remaining four, the algorithm code, are completely determined\n    by, and must be consistent with, the first four characters. [...]
--
--char doc_ssysobs[253] = "``string`` Spectral reference frame.\n\nThe spectral reference frame in which there is no differential\nvariation in the spectral coordinate across the field-of-view,\n``SSYSOBSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.specsys, astropy.wcs.Wcsprm.velosys\n\0";
--
--char doc_ssyssrc[150] = "``string`` Spectral reference frame for redshift.\n\nThe spectral reference frame (standard of rest) in which the redshift\nwas measured, ``SSYSSRCa``.\n\0";
--
--char doc_sub[3436] = "sub(axes)\n\nExtracts the coordinate description for a subimage from a\n`~astropy.wcs.WCS` object.\n\nThe world coordinate system of the subimage must be separable in the\nsense that the world coordinates at any point in the subimage must\ndepend only on the pixel coordinates of the axes extracted.  In\npractice, this means that the ``PCi_ja`` matrix of the original image\nmust not contain non-zero off-diagonal terms that associate any of the\nsubimage axes with an [...]
--
--char doc_tab[112] = "``list of Tabprm`` Tabular coordinate objects.\n\nA list of tabular coordinate objects associated with this WCS.\n\0";
--
--char doc_theta0[289] = "``double``  The native longitude of the fiducial point.\n\nThe point whose celestial coordinates are given in ``ref[1:2]``.  If\nundefined (NaN) the initialization routine, `~astropy.wcs.Wcsprm.set`,\nwill set this to a projection-specific default.\n\nSee also\n--------\nastropy.wcs.Wcsprm.phi0\n\0";
--
--char doc_to_header[2229] = "to_header(relax=False)\n\n`to_header` translates a WCS object into a FITS header.\n\nThe details of the header depends on context:\n\n    - If the `~astropy.wcs.Wcsprm.colnum` member is non-zero then a\n      binary table image array header will be produced.\n\n    - Otherwise, if the `~astropy.wcs.Wcsprm.colax` member is set\n      non-zero then a pixel list header will be produced.\n\n    - Otherwise, a primary image or image extension header will be\n      [...]
--
--char doc_ttype[108] = "``str`` (read-only)\n\n``TTYPEn`` identifying the column of the binary table that contains\nthe wcstab array.\n\0";
--
--char doc_unitfix[1047] = "unitfix(translate_units='')\n\nTranslates non-standard ``CUNITia`` keyvalues.\n\nFor example, ``DEG`` -> ``deg``, also stripping off unnecessary\nwhitespace.\n\nParameters\n----------\ntranslate_units : str, optional\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is po [...]
--
--char doc_velangl[186] = "``double`` Velocity angle.\n\nThe angle in degrees that should be used to decompose an observed\nvelocity into radial and transverse components.\n\nAn undefined value is represented by NaN.\n\0";
--
--char doc_velosys[316] = "``double`` Relative radial velocity.\n\nThe relative radial velocity (m/s) between the observer and the\nselected standard of rest in the direction of the celestial reference\ncoordinate, ``VELOSYSa``.\n\nAn undefined value is represented by NaN.\n\nSee also\n--------\nastropy.wcs.Wcsprm.specsys, astropy.wcs.Wcsprm.ssysobs\n\0";
--
--char doc_want[173] = "``string`` The name of the unit being converted to.\n\nThis value always uses standard unit names, even if the\n`UnitConverter` was initialized with a non-standard unit name.\n\0";
--
--char doc_wcs[83] = "A `~astropy.wcs.Wcsprm` object to perform the basic `wcslib`_ WCS\ntransformation.\n\0";
--
--char doc_zsource[98] = "``double`` The redshift, ``ZSOURCEa``, of the source.\n\nAn undefined value is represented by NaN.\n\0";
--
--#endif
diff --cc debian/changelog
index cc3361e,c47c309..723f06a
--- a/debian/changelog
+++ b/debian/changelog
@@@ -1,15 -1,9 +1,27 @@@
++python-astropy (0.3+dfsg-3) unstable; urgency=low
++
++  * Re-integrate 0.3-6 fixes which were left out by another mistake :-)
++
++ -- Ole Streicher <debian at liska.ath.cx>  Fri, 24 Jan 2014 11:31:26 +0100
++
 +python-astropy (0.3+dfsg-2) unstable; urgency=low
 +
 +  * Re-integrate 0.3-5 fixes which were left out by mistake
 +
 + -- Ole Streicher <debian at liska.ath.cx>  Fri, 24 Jan 2014 11:11:46 +0100
 +
 +python-astropy (0.3+dfsg-1) unstable; urgency=low
 +
 +  * Remove sourceless files jqery*.js. Closes: #735770
 +
 + -- Ole Streicher <debian at liska.ath.cx>  Fri, 24 Jan 2014 09:43:27 +0100
 +
+ python-astropy (0.3-6) unstable; urgency=low
+ 
+   * Fix another FTBS causes on python-3.4.
+ 
+  -- Ole Streicher <debian at liska.ath.cx>  Thu, 16 Jan 2014 16:27:55 +0100
+ 
  python-astropy (0.3-5) unstable; urgency=low
  
    * Include upstream fixes to build on python-3.4. Closes: #734293

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/python-astropy.git



More information about the debian-science-commits mailing list