Generated by Cython 3.1.2
Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.
Raw output: dtypes.c
+001: # cython: language_level=3, cdivision=True
__pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_DDTypeClass_line_66, __pyx_mstate_global->__pyx_kp_u_DDTypeClass_type_Create_a_dtype) < 0) __PYX_ERR(0, 1, __pyx_L1_error) if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_DDTypeStruct_line_122, __pyx_mstate_global->__pyx_kp_u_DDTypeStruct_struct_create_a_dt) < 0) __PYX_ERR(0, 1, __pyx_L1_error) if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
002:
003: '''
004: The *dtype* is the type of the elements in a buffer. Thanks to the ddtype system, it is very easy to create new dtypes on top of pretty much everything.
005:
006: Definitions:
007:
008: :type: a python type object (typically a class or a builtin type)
009: :dtype: data dtype, meaning the type of the elements in an array, it can be a type, but more generally anything that define a data format.
010: :ddtype: declaration of data type, meaning a packet of things decribing how to pack/unpack that dtype from/to an array
011:
012: a ddtype always inherits from base class `DDType` which content is implemented at C level.
013: '''
014:
015: cimport cython
016: from cpython cimport PyObject, PyTypeObject
017: from libc.string cimport memcpy
018:
+019: import struct, ctypes
__pyx_t_2 = __Pyx_ImportDottedModule(__pyx_mstate_global->__pyx_n_u_struct, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_struct, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_mstate_global->__pyx_n_u_ctypes, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ctypes, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
020:
021: cdef extern from "Python.h":
022: object PyBytes_FromStringAndSize(const char *v, Py_ssize_t len)
023: object PyByteArray_FromStringAndSize(const char *v, Py_ssize_t len)
024: char *PyBytes_AsString(object)
025:
026:
027:
028:
029: cdef class DDType:
030: ''' base class for a declaration of data type (ddtype)
031: DO NOT INSTANTIATE THIS CLASS FROM PYTHON, use on of its specialization instead
032:
033: Attributes:
034:
035: dsize (int): byte size of the dtype when packed
036: layout (bytes): layout of the packed data such as defined in module `struct`, or `None` if not defined
037: key: the python dtype itself if this DDType is declared, `None` if not declared
038: '''
039:
+040: def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_6DDType_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5arrex_6dtypes_6DDType_1__repr__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_6DDType___repr__(((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_6DDType___repr__(struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_v_self) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("arrex.dtypes.DDType.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+041: if isinstance(self.key, type):
__pyx_t_1 = __pyx_v_self->key; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyType_Check(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+042: return '<dtype {}>'.format(self.key.__name__)
__Pyx_XDECREF(__pyx_r); __pyx_t_3 = __pyx_mstate_global->__pyx_kp_u_dtype; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->key, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
+043: elif isinstance(self.key, str):
__pyx_t_1 = __pyx_v_self->key; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyUnicode_Check(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { /* … */ }
+044: return '<dtype {}>'.format(repr(self.key))
__Pyx_XDECREF(__pyx_r); __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_dtype; __Pyx_INCREF(__pyx_t_4); __pyx_t_3 = __pyx_v_self->key; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = PyObject_Repr(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
045: else:
+046: return '<dtype at {}>'.format(id(self))
/*else*/ {
__Pyx_XDECREF(__pyx_r);
__pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_dtype_at;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_builtin_id);
__pyx_t_7 = __pyx_builtin_id;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self)};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_5 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
__pyx_t_1 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
}
047:
+048: def __reduce_ex__(self, protocol):
/* Python wrapper */ static PyObject *__pyx_pw_5arrex_6dtypes_6DDType_3__reduce_ex__(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_6DDType_2__reduce_ex__, " allow serialization of the dtype with the array (particularly useful for anonymous dtypes) "); static PyMethodDef __pyx_mdef_5arrex_6dtypes_6DDType_3__reduce_ex__ = {"__reduce_ex__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_6DDType_3__reduce_ex__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_6DDType_2__reduce_ex__}; static PyObject *__pyx_pw_5arrex_6dtypes_6DDType_3__reduce_ex__(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { CYTHON_UNUSED PyObject *__pyx_v_protocol = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_ex__ (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_protocol,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 48, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 48, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__reduce_ex__", 0) < 0) __PYX_ERR(0, 48, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 1, 1, 1, i); __PYX_ERR(0, 48, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 48, __pyx_L3_error) } __pyx_v_protocol = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 48, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("arrex.dtypes.DDType.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5arrex_6dtypes_6DDType_2__reduce_ex__(((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_v_self), __pyx_v_protocol); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5arrex_6dtypes_6DDType_2__reduce_ex__(struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_protocol) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("arrex.dtypes.DDType.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_6DDType_3__reduce_ex__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DDType___reduce_ex, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType, __pyx_mstate_global->__pyx_n_u_reduce_ex, __pyx_t_2) < 0) __PYX_ERR(0, 48, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
049: ''' allow serialization of the dtype with the array (particularly useful for anonymous dtypes) '''
+050: if self.key is None:
__pyx_t_1 = (__pyx_v_self->key == Py_None);
if (unlikely(__pyx_t_1)) {
/* … */
}
+051: raise TypeError('a dtype must be declared in order to be pickleable')
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_4 = __pyx_builtin_TypeError;
__pyx_t_5 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_a_dtype_must_be_declared_in_orde};
__pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 51, __pyx_L1_error)
+052: return self._rebuild, (self.key, self.dsize, self.layout)
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_rebuild); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_self->dsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_self->key); __Pyx_GIVEREF(__pyx_v_self->key); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->key) != (0)) __PYX_ERR(0, 52, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4) != (0)) __PYX_ERR(0, 52, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->layout); __Pyx_GIVEREF(__pyx_v_self->layout); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->layout) != (0)) __PYX_ERR(0, 52, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 52, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 52, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0;
053:
+054: @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_6DDType_5_rebuild(PyObject *__pyx_v_cls,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5arrex_6dtypes_6DDType_5_rebuild = {"_rebuild", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_6DDType_5_rebuild, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5arrex_6dtypes_6DDType_5_rebuild(PyObject *__pyx_v_cls,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_key = 0;
size_t __pyx_v_dsize;
PyObject *__pyx_v_layout = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_rebuild (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_key,&__pyx_mstate_global->__pyx_n_u_dsize,&__pyx_mstate_global->__pyx_n_u_layout,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 54, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 54, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 54, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 54, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_rebuild", 0) < 0) __PYX_ERR(0, 54, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_rebuild", 1, 3, 3, i); __PYX_ERR(0, 54, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 3)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 54, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 54, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 54, __pyx_L3_error)
}
__pyx_v_key = values[0];
__pyx_v_dsize = __Pyx_PyLong_As_size_t(values[1]); if (unlikely((__pyx_v_dsize == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error)
__pyx_v_layout = ((PyObject*)values[2]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_rebuild", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 54, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.DDType._rebuild", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_layout), (&PyBytes_Type), 1, "layout", 1))) __PYX_ERR(0, 55, __pyx_L1_error)
__pyx_r = __pyx_pf_5arrex_6dtypes_6DDType_4_rebuild(((PyTypeObject*)__pyx_v_cls), __pyx_v_key, __pyx_v_dsize, __pyx_v_layout);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_6DDType_4_rebuild(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_key, size_t __pyx_v_dsize, PyObject *__pyx_v_layout) {
struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_v_candidate = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__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);
__Pyx_AddTraceback("arrex.dtypes.DDType._rebuild", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_candidate);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_6DDType_5_rebuild, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DDType__rebuild, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType, __pyx_mstate_global->__pyx_n_u_rebuild, __pyx_t_2) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_GetNameInClass(__pyx_t_2, (PyObject*)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType, __pyx_mstate_global->__pyx_n_u_rebuild); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType, __pyx_mstate_global->__pyx_n_u_rebuild, __pyx_t_3) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
055: def _rebuild(cls, key, size_t dsize, bytes layout):
+056: candidate = declared(key)
__pyx_t_1 = ((PyObject *)__pyx_f_5arrex_6dtypes_declared(__pyx_v_key, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_candidate = ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_t_1); __pyx_t_1 = 0;
+057: if dsize != candidate.dsize:
__pyx_t_2 = (__pyx_v_dsize != __pyx_v_candidate->dsize);
if (unlikely(__pyx_t_2)) {
/* … */
}
+058: raise ValueError('the pickled dtype {} has a different size here than in dump, unpickled {} expected {}'
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_4 = __pyx_builtin_ValueError;
+059: .format(repr(key), dsize, candidate.dsize))
__pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_the_pickled_dtype_has_a_differen;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = PyObject_Repr(__pyx_v_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 59, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_dsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 59, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyLong_FromSize_t(__pyx_v_candidate->dsize); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 59, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (4-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_10 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 58, __pyx_L1_error)
+060: if candidate.layout and layout != candidate.layout:
__pyx_t_11 = (__pyx_v_candidate->layout != Py_None)&&(__Pyx_PyBytes_GET_SIZE(__pyx_v_candidate->layout) != 0); if (unlikely(((!CYTHON_ASSUME_SAFE_MACROS) && __pyx_t_11 < 0))) __PYX_ERR(0, 60, __pyx_L1_error) if (__pyx_t_11) { } else { __pyx_t_2 = __pyx_t_11; goto __pyx_L5_bool_binop_done; } __pyx_t_11 = (__Pyx_PyBytes_Equals(__pyx_v_layout, __pyx_v_candidate->layout, Py_NE)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 60, __pyx_L1_error) __pyx_t_2 = __pyx_t_11; __pyx_L5_bool_binop_done:; if (unlikely(__pyx_t_2)) { /* … */ }
+061: raise ValueError('the pickled dtype {} has a different memory layout here than in dump, unpickled {} expected {}'
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_5 = __pyx_builtin_ValueError;
+062: .format(repr(key), layout, candidate.layout))
__pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_the_pickled_dtype_has_a_differen_2;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_8 = PyObject_Repr(__pyx_v_key); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[4] = {__pyx_t_9, __pyx_t_8, __pyx_v_layout, __pyx_v_candidate->layout};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (4-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_10 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 61, __pyx_L1_error)
+063: return candidate
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_candidate); __pyx_r = ((PyObject *)__pyx_v_candidate); goto __pyx_L0;
064:
065:
+066: def DDTypeClass(type):
/* Python wrapper */ static PyObject *__pyx_pw_5arrex_6dtypes_1DDTypeClass(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_DDTypeClass, " DDTypeClass(type)\n\t\n\t\tCreate a dtype from a python class (can be a pure python class) \n\t\t\n\t\tthe given type must have the following attributes:\n\t\t\n\t\t\t- `frombytes` or `from_bytes` or `from_buffer`\n\t\t\t\n\t\t\t\tstatic method that initialize the type from bytes\n\t\t\t\t\n\t\t\t- `__bytes__` or `tobytes` or `to_bytes`\n\t\t\t\t\n\t\t\t\tmethod that converts to bytes, the returned byte must always be of the same size\n\t\t\t\n\t\t\t- `__packlayout__` (optional) string or bytes giving binary format returned by `__bytes__`, it must follow the specifications of module `struct`\n\t\t\t- `__packsize__` (optional) defines the byte size returned by `__bytes__`, optional if `__packlayout__` is provided\n\t\t\t\n\t\tExample:\n\t\t\n\t\t\t>>> class test_class:\n\t\t\t... \t__packlayout__ = 'ff'\n\t\t\t... \t_struct = struct.Struct(__packlayout__)\n\t\t\t... \t\n\t\t\t... \tdef __init__(self, x, y):\n\t\t\t... \t\tself.x = x\n\t\t\t... \t\tself.y = y\n\t\t\t... \t\n\t\t\t... \tdef __bytes__(self):\n\t\t\t... \t\treturn self._struct.pack(self.x, self.y)\n\t\t\t... \t@classmethod\n\t\t\t... \tdef frombytes(cls, b):\n\t\t\t... \t\treturn cls(*cls._struct.unpack(b))\n\t\t\t... \t\t\n\t\t\t... \tdef __repr__(self):\n\t\t\t... \t\treturn '(x={}, y={})'.format(self.x, self.y)\n\t\t\t... \n\t\t\t>>> a = typedlist(dtype=test_class) # no declaration needed\n\t"); static PyMethodDef __pyx_mdef_5arrex_6dtypes_1DDTypeClass = {"DDTypeClass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_1DDTypeClass, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_DDTypeClass}; static PyObject *__pyx_pw_5arrex_6dtypes_1DDTypeClass(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_type = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("DDTypeClass (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_type,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 66, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 66, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "DDTypeClass", 0) < 0) __PYX_ERR(0, 66, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("DDTypeClass", 1, 1, 1, i); __PYX_ERR(0, 66, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 66, __pyx_L3_error) } __pyx_v_type = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("DDTypeClass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 66, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("arrex.dtypes.DDTypeClass", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5arrex_6dtypes_DDTypeClass(__pyx_self, __pyx_v_type); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5arrex_6dtypes_DDTypeClass(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_type) { PyObject *__pyx_v_layout = NULL; PyObject *__pyx_v_dsize = NULL; PyObject *__pyx_v_pack = NULL; PyObject *__pyx_v_unpack = NULL; PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("arrex.dtypes.DDTypeClass", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_layout); __Pyx_XDECREF(__pyx_v_dsize); __Pyx_XDECREF(__pyx_v_pack); __Pyx_XDECREF(__pyx_v_unpack); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_1DDTypeClass, 0, __pyx_mstate_global->__pyx_n_u_DDTypeClass, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_DDTypeClass, __pyx_t_3) < 0) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
067: ''' DDTypeClass(type)
068:
069: Create a dtype from a python class (can be a pure python class)
070:
071: the given type must have the following attributes:
072:
073: - `frombytes` or `from_bytes` or `from_buffer`
074:
075: static method that initialize the type from bytes
076:
077: - `__bytes__` or `tobytes` or `to_bytes`
078:
079: method that converts to bytes, the returned byte must always be of the same size
080:
081: - `__packlayout__` (optional) string or bytes giving binary format returned by `__bytes__`, it must follow the specifications of module `struct`
082: - `__packsize__` (optional) defines the byte size returned by `__bytes__`, optional if `__packlayout__` is provided
083:
084: Example:
085:
086: >>> class test_class:
087: ... __packlayout__ = 'ff'
088: ... _struct = struct.Struct(__packlayout__)
089: ...
090: ... def __init__(self, x, y):
091: ... self.x = x
092: ... self.y = y
093: ...
094: ... def __bytes__(self):
095: ... return self._struct.pack(self.x, self.y)
096: ... @classmethod
097: ... def frombytes(cls, b):
098: ... return cls(*cls._struct.unpack(b))
099: ...
100: ... def __repr__(self):
101: ... return '(x={}, y={})'.format(self.x, self.y)
102: ...
103: >>> a = typedlist(dtype=test_class) # no declaration needed
104: '''
+105: layout = getattr(type, '__packlayout__', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_packlayout, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_layout = __pyx_t_1; __pyx_t_1 = 0;
+106: dsize = getattr(type, '__packsize__', None)
__pyx_t_1 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_packsize, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_dsize = __pyx_t_1; __pyx_t_1 = 0;
+107: if not dsize:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_dsize); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 107, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+108: dsize = struct.calcsize(layout or b'')
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_struct); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_calcsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_layout); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 108, __pyx_L1_error)
if (!__pyx_t_3) {
} else {
__Pyx_INCREF(__pyx_v_layout);
__pyx_t_5 = __pyx_v_layout;
goto __pyx_L4_bool_binop_done;
}
__Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b_);
__pyx_t_5 = __pyx_mstate_global->__pyx_kp_b_;
__pyx_L4_bool_binop_done:;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_6))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_dsize, __pyx_t_1);
__pyx_t_1 = 0;
+109: if not dsize:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_dsize); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_3); if (unlikely(__pyx_t_2)) { /* … */ }
+110: raise ValueError('dsize must not be null, __packlayout__ or __packsize__ must be correctly defined in the given type')
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_5 = __pyx_builtin_ValueError;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_dsize_must_not_be_null___packlay};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 110, __pyx_L1_error)
111:
+112: pack = getattr(type, '__bytes__', None) or getattr(type, 'tobytes', None) or getattr(type, 'to_bytes', None)
__pyx_t_5 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_bytes, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 112, __pyx_L1_error) if (!__pyx_t_2) { __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { __Pyx_INCREF(__pyx_t_5); __pyx_t_1 = __pyx_t_5; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_bool_binop_done; } __pyx_t_5 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_tobytes, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 112, __pyx_L1_error) if (!__pyx_t_2) { __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { __Pyx_INCREF(__pyx_t_5); __pyx_t_1 = __pyx_t_5; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_bool_binop_done; } __pyx_t_5 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_to_bytes, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_5); __pyx_t_1 = __pyx_t_5; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_L7_bool_binop_done:; __pyx_v_pack = __pyx_t_1; __pyx_t_1 = 0;
+113: if not pack:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_pack); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 113, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (unlikely(__pyx_t_3)) { /* … */ }
+114: raise TypeError("the given type must have a method '__bytes__', 'tobytes', or 'to_bytes'")
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_6 = __pyx_builtin_TypeError;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_the_given_type_must_have_a_metho};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 114, __pyx_L1_error)
115:
+116: unpack = getattr(type, 'frombytes', None) or getattr(type, 'from_bytes', None) or getattr(type, 'from_buffer', None)
__pyx_t_6 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_frombytes, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 116, __pyx_L1_error) if (!__pyx_t_3) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L11_bool_binop_done; } __pyx_t_6 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_from_bytes, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 116, __pyx_L1_error) if (!__pyx_t_3) { __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else { __Pyx_INCREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L11_bool_binop_done; } __pyx_t_6 = __Pyx_GetAttr3(__pyx_v_type, __pyx_mstate_global->__pyx_n_u_from_buffer, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_L11_bool_binop_done:; __pyx_v_unpack = __pyx_t_1; __pyx_t_1 = 0;
+117: if not unpack:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_unpack); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 117, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_3); if (unlikely(__pyx_t_2)) { /* … */ }
+118: raise TypeError("the given type must have a method 'frombytes', 'from_bytes', or 'from_buffer'")
__pyx_t_6 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_5 = __pyx_builtin_TypeError;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_the_given_type_must_have_a_metho_2};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 118, __pyx_L1_error)
119:
+120: return DDTypeFunctions(dsize, pack, unpack, layout)
__Pyx_XDECREF(__pyx_r); __pyx_t_5 = NULL; __Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeFunctions); __pyx_t_6 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeFunctions); __pyx_t_7 = 1; { PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_dsize, __pyx_v_pack, __pyx_v_unpack, __pyx_v_layout}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+__pyx_t_7, (5-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF((PyObject *)__pyx_t_1); } __pyx_r = ((PyObject *)__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L0;
121:
+122: def DDTypeStruct(definition):
/* Python wrapper */ static PyObject *__pyx_pw_5arrex_6dtypes_3DDTypeStruct(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_2DDTypeStruct, " DDTypeStruct(struct)\n\t\n\t\tcreate a dtype from a Struct object from module `struct` \n\t\n\t\tExample:\n\t\t\t\n\t\t\t>>> a = typedlist(dtype='fxBh') # no declaration needed\n\t"); static PyMethodDef __pyx_mdef_5arrex_6dtypes_3DDTypeStruct = {"DDTypeStruct", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_3DDTypeStruct, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_2DDTypeStruct}; static PyObject *__pyx_pw_5arrex_6dtypes_3DDTypeStruct(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { PyObject *__pyx_v_definition = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("DDTypeStruct (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_definition,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 122, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 122, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "DDTypeStruct", 0) < 0) __PYX_ERR(0, 122, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("DDTypeStruct", 1, 1, 1, i); __PYX_ERR(0, 122, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 122, __pyx_L3_error) } __pyx_v_definition = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("DDTypeStruct", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 122, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("arrex.dtypes.DDTypeStruct", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5arrex_6dtypes_2DDTypeStruct(__pyx_self, __pyx_v_definition); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ static PyObject *__pyx_pf_5arrex_6dtypes_2DDTypeStruct(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_definition) { struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct *__pyx_cur_scope; PyObject *__pyx_r = NULL; __pyx_cur_scope = (struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct *)__pyx_tp_new_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct, __pyx_mstate_global->__pyx_empty_tuple, NULL); if (unlikely(!__pyx_cur_scope)) { __pyx_cur_scope = ((struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct *)Py_None); __Pyx_INCREF(Py_None); __PYX_ERR(0, 122, __pyx_L1_error) } else { __Pyx_GOTREF((PyObject *)__pyx_cur_scope); } __pyx_cur_scope->__pyx_v_definition = __pyx_v_definition; __Pyx_INCREF(__pyx_cur_scope->__pyx_v_definition); __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_definition); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("arrex.dtypes.DDTypeStruct", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_DECREF((PyObject *)__pyx_cur_scope); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_3DDTypeStruct, 0, __pyx_mstate_global->__pyx_n_u_DDTypeStruct, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_DDTypeStruct, __pyx_t_3) < 0) __PYX_ERR(0, 122, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct { PyObject_HEAD PyObject *__pyx_v_definition; };
123: ''' DDTypeStruct(struct)
124:
125: create a dtype from a Struct object from module `struct`
126:
127: Example:
128:
129: >>> a = typedlist(dtype='fxBh') # no declaration needed
130: '''
+131: if not isinstance(definition, struct.Struct):
__pyx_t_1 = __pyx_cur_scope->__pyx_v_definition; __Pyx_INCREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_struct); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Struct); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = PyObject_IsInstance(__pyx_t_1, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = (!__pyx_t_4); if (unlikely(__pyx_t_5)) { /* … */ }
+132: raise TypeError('structure must be struct.Struct')
__pyx_t_1 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_2 = __pyx_builtin_TypeError;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_structure_must_be_struct_Struct};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 132, __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_ERR(0, 132, __pyx_L1_error)
+133: return DDTypeFunctions(definition.size, lambda o: definition.pack(*o), definition.unpack, definition.format)
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_12DDTypeStruct_lambda(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5arrex_6dtypes_12DDTypeStruct_lambda = {"lambda", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_12DDTypeStruct_lambda, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5arrex_6dtypes_12DDTypeStruct_lambda(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_o = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_o,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 133, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 133, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "lambda", 0) < 0) __PYX_ERR(0, 133, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("lambda", 1, 1, 1, i); __PYX_ERR(0, 133, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 133, __pyx_L3_error)
}
__pyx_v_o = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("lambda", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 133, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.DDTypeStruct.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_lambda_funcdef_lambda(__pyx_self, __pyx_v_o);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_lambda_funcdef_lambda(PyObject *__pyx_self, PyObject *__pyx_v_o) {
struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct *__pyx_cur_scope;
struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct *__pyx_outer_scope;
PyObject *__pyx_r = NULL;
__pyx_outer_scope = (struct __pyx_obj_5arrex_6dtypes___pyx_scope_struct__DDTypeStruct *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
__Pyx_XDECREF(__pyx_r);
if (unlikely(!__pyx_cur_scope->__pyx_v_definition)) { __Pyx_RaiseClosureNameError("definition"); __PYX_ERR(0, 133, __pyx_L1_error) }
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_definition, __pyx_mstate_global->__pyx_n_u_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_o); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_3;
__pyx_t_3 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("arrex.dtypes.DDTypeStruct.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__Pyx_XDECREF(__pyx_r);
__pyx_t_2 = NULL;
__Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeFunctions);
__pyx_t_1 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeFunctions);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_definition, __pyx_mstate_global->__pyx_n_u_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_12DDTypeStruct_lambda, 0, __pyx_mstate_global->__pyx_n_u_DDTypeStruct_locals_lambda, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_definition, __pyx_mstate_global->__pyx_n_u_unpack); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_definition, __pyx_mstate_global->__pyx_n_u_format); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+__pyx_t_6, (5-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_3);
}
__pyx_r = ((PyObject *)__pyx_t_3);
__pyx_t_3 = 0;
goto __pyx_L0;
134:
+135: cdef class DDTypeFunctions(DDType):
struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions {
struct __pyx_obj_5arrex_6dtypes_DDType __pyx_base;
struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeFunctions *__pyx_vtab;
PyObject *pack;
PyObject *unpack;
};
/* … */
struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeFunctions {
int (*_func_pack)(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *, void *, PyObject *);
PyObject *(*_func_unpack)(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *, void *);
};
static struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeFunctions *__pyx_vtabptr_5arrex_6dtypes_DDTypeFunctions;
136: ''' DDTypeFunctions(dsize, pack, unpack, layout=None)
137:
138: create a dtype from pure python pack and unpack functions
139:
140: Example:
141:
142: >>> enum_pack = {'apple':b'a', 'orange':b'o', 'cake':b'c'}
143: >>> enum_unpack = {v:k for k,v in enum_direct.items()}
144: >>> enum_dtype = DDTypeFunctions(
145: ... dsize=1, # 1 byte storage
146: ... pack=enum_pack.__getitem__, # this takes the python object and gives a bytes to dump
147: ... unpack=enum_unpack.__getitem__, # this takes the bytes and return a python object
148: ... )
149: ...
150: >>> a = typedlist(dtype=enum_dtype) # declaration is not necessary
151: '''
+152: cdef public object pack
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_4pack_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_4pack_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_4pack___get__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeFunctions_4pack___get__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->pack);
__pyx_r = __pyx_v_self->pack;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_4pack_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_4pack_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_4pack_2__set__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_4pack_2__set__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_value);
__Pyx_GIVEREF(__pyx_v_value);
__Pyx_GOTREF(__pyx_v_self->pack);
__Pyx_DECREF(__pyx_v_self->pack);
__pyx_v_self->pack = __pyx_v_value;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_4pack_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_4pack_5__del__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_4pack_4__del__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_4pack_4__del__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self) {
int __pyx_r;
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->pack);
__Pyx_DECREF(__pyx_v_self->pack);
__pyx_v_self->pack = Py_None;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+153: cdef public object unpack
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_6unpack_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_6unpack_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_6unpack___get__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeFunctions_6unpack___get__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->unpack);
__pyx_r = __pyx_v_self->unpack;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_6unpack_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_6unpack_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_6unpack_2__set__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_6unpack_2__set__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_value);
__Pyx_GIVEREF(__pyx_v_value);
__Pyx_GOTREF(__pyx_v_self->unpack);
__Pyx_DECREF(__pyx_v_self->unpack);
__pyx_v_self->unpack = __pyx_v_value;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_6unpack_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_6unpack_5__del__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_6unpack_4__del__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_6unpack_4__del__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self) {
int __pyx_r;
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->unpack);
__Pyx_DECREF(__pyx_v_self->unpack);
__pyx_v_self->unpack = Py_None;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
154:
+155: def __init__(self, dsize, pack, unpack, layout=None):
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeFunctions_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_dsize = 0;
PyObject *__pyx_v_pack = 0;
PyObject *__pyx_v_unpack = 0;
PyObject *__pyx_v_layout = 0;
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_dsize,&__pyx_mstate_global->__pyx_n_u_pack,&__pyx_mstate_global->__pyx_n_u_unpack,&__pyx_mstate_global->__pyx_n_u_layout,0};
PyObject* values[4] = {0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 155, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 155, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 155, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 155, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 155, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < 0) __PYX_ERR(0, 155, __pyx_L3_error)
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, i); __PYX_ERR(0, 155, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_VARARGS(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 155, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 155, __pyx_L3_error)
values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 155, __pyx_L3_error)
values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 155, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
}
__pyx_v_dsize = values[0];
__pyx_v_pack = values[1];
__pyx_v_unpack = values[2];
__pyx_v_layout = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 155, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.DDTypeFunctions.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions___init__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self), __pyx_v_dsize, __pyx_v_pack, __pyx_v_unpack, __pyx_v_layout);
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeFunctions___init__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self, PyObject *__pyx_v_dsize, PyObject *__pyx_v_pack, PyObject *__pyx_v_unpack, PyObject *__pyx_v_layout) {
PyObject *__pyx_v_fmtsize = NULL;
int __pyx_r;
__Pyx_INCREF(__pyx_v_layout);
/* … */
/* function exit code */
__pyx_r = 0;
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_8);
__Pyx_AddTraceback("arrex.dtypes.DDTypeFunctions.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_fmtsize);
__Pyx_XDECREF(__pyx_v_layout);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+156: if not callable(pack) or not callable(unpack):
__pyx_t_2 = __Pyx_PyCallable_Check(__pyx_v_pack); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 156, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_PyCallable_Check(__pyx_v_unpack); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 156, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_3); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* … */ }
+157: raise TypeError('pack and unpack must be callables')
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_6 = __pyx_builtin_TypeError;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_pack_and_unpack_must_be_callable};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 157, __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_ERR(0, 157, __pyx_L1_error)
158:
+159: if layout is not None:
__pyx_t_1 = (__pyx_v_layout != Py_None);
if (__pyx_t_1) {
/* … */
goto __pyx_L6;
}
+160: if isinstance(layout, str):
__pyx_t_1 = PyUnicode_Check(__pyx_v_layout);
if (__pyx_t_1) {
/* … */
goto __pyx_L7;
}
+161: layout = layout.encode()
__pyx_t_6 = __pyx_v_layout;
__Pyx_INCREF(__pyx_t_6);
__pyx_t_7 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF_SET(__pyx_v_layout, __pyx_t_4);
__pyx_t_4 = 0;
+162: elif not isinstance(layout, bytes):
__pyx_t_1 = PyBytes_Check(__pyx_v_layout);
__pyx_t_2 = (!__pyx_t_1);
if (__pyx_t_2) {
/* … */
}
__pyx_L7:;
+163: layout = bytes(layout)
__pyx_t_6 = NULL;
__Pyx_INCREF((PyObject *)(&PyBytes_Type));
__pyx_t_5 = ((PyObject *)(&PyBytes_Type));
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_layout};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__Pyx_DECREF_SET(__pyx_v_layout, __pyx_t_4);
__pyx_t_4 = 0;
164:
+165: fmtsize = struct.calcsize(layout)
__pyx_t_5 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_struct); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 165, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_calcsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 165, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_7 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_8))) {
__pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8);
assert(__pyx_t_5);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
__pyx_t_7 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_layout};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 165, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_v_fmtsize = __pyx_t_4;
__pyx_t_4 = 0;
+166: if dsize is not None and dsize != fmtsize:
__pyx_t_1 = (__pyx_v_dsize != Py_None);
if (__pyx_t_1) {
} else {
__pyx_t_2 = __pyx_t_1;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_4 = PyObject_RichCompare(__pyx_v_dsize, __pyx_v_fmtsize, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error)
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 166, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_2 = __pyx_t_1;
__pyx_L9_bool_binop_done:;
if (unlikely(__pyx_t_2)) {
/* … */
}
+167: raise ValueError('dsize must match layout size')
__pyx_t_8 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_5 = __pyx_builtin_ValueError;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_dsize_must_match_layout_size};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __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_ERR(0, 167, __pyx_L1_error)
+168: elif not dsize:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_dsize); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 168, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (unlikely(__pyx_t_1)) { /* … */ } __pyx_L6:;
+169: raise ValueError('dsize must be provided or deduced from a given layout')
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_8 = __pyx_builtin_ValueError;
__pyx_t_7 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_dsize_must_be_provided_or_deduce};
__pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 169, __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_ERR(0, 169, __pyx_L1_error)
170:
+171: self.dsize = dsize
__pyx_t_7 = __Pyx_PyLong_As_size_t(__pyx_v_dsize); if (unlikely((__pyx_t_7 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error) __pyx_v_self->__pyx_base.dsize = __pyx_t_7;
+172: self.c_pack = <c_pack_t> self._func_pack
__pyx_v_self->__pyx_base.c_pack = ((__pyx_t_5arrex_6dtypes_c_pack_t)((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self->__pyx_vtab)->_func_pack);
+173: self.c_unpack = <c_unpack_t> self._func_unpack
__pyx_v_self->__pyx_base.c_unpack = ((__pyx_t_5arrex_6dtypes_c_unpack_t)((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self->__pyx_vtab)->_func_unpack);
+174: self.layout = layout
__pyx_t_4 = __pyx_v_layout; __Pyx_INCREF(__pyx_t_4); if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_4))) __PYX_ERR(0, 174, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_4); __Pyx_GOTREF(__pyx_v_self->__pyx_base.layout); __Pyx_DECREF(__pyx_v_self->__pyx_base.layout); __pyx_v_self->__pyx_base.layout = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0;
+175: self.pack = pack
__Pyx_INCREF(__pyx_v_pack); __Pyx_GIVEREF(__pyx_v_pack); __Pyx_GOTREF(__pyx_v_self->pack); __Pyx_DECREF(__pyx_v_self->pack); __pyx_v_self->pack = __pyx_v_pack;
+176: self.unpack = unpack
__Pyx_INCREF(__pyx_v_unpack); __Pyx_GIVEREF(__pyx_v_unpack); __Pyx_GOTREF(__pyx_v_self->unpack); __Pyx_DECREF(__pyx_v_self->unpack); __pyx_v_self->unpack = __pyx_v_unpack;
177:
+178: cdef int _func_pack(self, void* place, object obj) except -1:
static int __pyx_f_5arrex_6dtypes_15DDTypeFunctions__func_pack(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self, void *__pyx_v_place, PyObject *__pyx_v_obj) {
PyObject *__pyx_v_packed = NULL;
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
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_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_12);
__Pyx_AddTraceback("arrex.dtypes.DDTypeFunctions._func_pack", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_packed);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+179: packed = self.pack(obj)
__pyx_t_2 = NULL; __Pyx_INCREF(__pyx_v_self->pack); __pyx_t_3 = __pyx_v_self->pack; __pyx_t_4 = 1; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_4 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_obj}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_v_packed = __pyx_t_1; __pyx_t_1 = 0;
+180: if not isinstance(packed, bytes):
__pyx_t_5 = PyBytes_Check(__pyx_v_packed);
__pyx_t_6 = (!__pyx_t_5);
if (unlikely(__pyx_t_6)) {
/* … */
}
+181: raise TypeError('pack must provide a bytes object')
__pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_2 = __pyx_builtin_TypeError;
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_pack_must_provide_a_bytes_object};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 181, __pyx_L1_error)
+182: if len(packed) < <ssize_t> self.dsize:
__pyx_t_7 = PyObject_Length(__pyx_v_packed); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 182, __pyx_L1_error) __pyx_t_6 = (__pyx_t_7 < ((Py_ssize_t)__pyx_v_self->__pyx_base.dsize)); if (unlikely(__pyx_t_6)) { /* … */ }
+183: raise ValueError('the dumped bytes length {} does not match dsize {}'.format(len(packed), self.dtype.dsize))
__pyx_t_2 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_3 = __pyx_builtin_ValueError;
__pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_the_dumped_bytes_length_does_not;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_7 = PyObject_Length(__pyx_v_packed); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 183, __pyx_L1_error)
__pyx_t_10 = PyLong_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_dtype_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_dsize); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_12);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__pyx_t_4 = 0;
{
PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_10, __pyx_t_12};
__pyx_t_8 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
}
__pyx_t_4 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_8};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 183, __pyx_L1_error)
184:
+185: memcpy(place, PyBytes_AsString(packed), self.dsize)
(void)(memcpy(__pyx_v_place, PyBytes_AsString(__pyx_v_packed), __pyx_v_self->__pyx_base.dsize));
186:
+187: cdef object _func_unpack(self, void* place):
static PyObject *__pyx_f_5arrex_6dtypes_15DDTypeFunctions__func_unpack(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self, void *__pyx_v_place) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("arrex.dtypes.DDTypeFunctions._func_unpack", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+188: return self.unpack(PyBytes_FromStringAndSize(<char*>place, self.dsize))
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = NULL; __Pyx_INCREF(__pyx_v_self->unpack); __pyx_t_3 = __pyx_v_self->unpack; __pyx_t_4 = PyBytes_FromStringAndSize(((char *)__pyx_v_place), __pyx_v_self->__pyx_base.dsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = 1; #if CYTHON_UNPACK_METHODS if (likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); assert(__pyx_t_2); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_3, __pyx__function); __pyx_t_5 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
189:
190:
+191: def __reduce_ex__(self, protocol):
/* Python wrapper */ static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_3__reduce_ex__(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_15DDTypeFunctions_2__reduce_ex__, " allow serialization of the dtype with the array (particularly useful for anonymous dtypes) "); static PyMethodDef __pyx_mdef_5arrex_6dtypes_15DDTypeFunctions_3__reduce_ex__ = {"__reduce_ex__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_3__reduce_ex__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_15DDTypeFunctions_2__reduce_ex__}; static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeFunctions_3__reduce_ex__(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { CYTHON_UNUSED PyObject *__pyx_v_protocol = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_ex__ (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_protocol,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 191, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 191, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__reduce_ex__", 0) < 0) __PYX_ERR(0, 191, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 1, 1, 1, i); __PYX_ERR(0, 191, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 191, __pyx_L3_error) } __pyx_v_protocol = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 191, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("arrex.dtypes.DDTypeFunctions.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeFunctions_2__reduce_ex__(((struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *)__pyx_v_self), __pyx_v_protocol); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeFunctions_2__reduce_ex__(struct __pyx_obj_5arrex_6dtypes_DDTypeFunctions *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_protocol) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("arrex.dtypes.DDTypeFunctions.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_15DDTypeFunctions_3__reduce_ex__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DDTypeFunctions___reduce_ex, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeFunctions, __pyx_mstate_global->__pyx_n_u_reduce_ex, __pyx_t_3) < 0) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
192: ''' allow serialization of the dtype with the array (particularly useful for anonymous dtypes) '''
+193: return type(self), (self.dsize, self.pack, self.unpack, self.layout, self.constructor)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->__pyx_base.dsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_constructor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pack); __Pyx_GIVEREF(__pyx_v_self->pack); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->pack) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->unpack); __Pyx_GIVEREF(__pyx_v_self->unpack); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->unpack) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->__pyx_base.layout); __Pyx_GIVEREF(__pyx_v_self->__pyx_base.layout); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_self->__pyx_base.layout) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_2) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 193, __pyx_L1_error); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
194:
+195: cdef class DDTypeCType(DDType):
struct __pyx_obj_5arrex_6dtypes_DDTypeCType {
struct __pyx_obj_5arrex_6dtypes_DDType __pyx_base;
struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeCType *__pyx_vtab;
PyObject *type;
};
/* … */
struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeCType {
int (*_ctype_pack)(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *, void *, PyObject *);
PyObject *(*_ctype_unpack)(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *, void *);
};
static struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeCType *__pyx_vtabptr_5arrex_6dtypes_DDTypeCType;
196: ''' DDTypeCType(type)
197:
198: Create a dtype from a ctype
199:
200: Example:
201:
202: >>> class test_structure(ctypes.Structure):
203: ... _fields_ = [
204: ... ('x', ctypes.c_int),
205: ... ('y', ctypes.c_float),
206: ... ]
207: ... def __repr__(self):
208: ... return '(x={}, y={})'.format(self.x, self.y)
209: ...
210: >>> a = typedlist(dtype=test_structure)
211: '''
+212: cdef public object type
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_11DDTypeCType_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5arrex_6dtypes_11DDTypeCType_4type_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_11DDTypeCType_4type___get__(((struct __pyx_obj_5arrex_6dtypes_DDTypeCType *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_11DDTypeCType_4type___get__(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->type);
__pyx_r = __pyx_v_self->type;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_11DDTypeCType_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5arrex_6dtypes_11DDTypeCType_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_11DDTypeCType_4type_2__set__(((struct __pyx_obj_5arrex_6dtypes_DDTypeCType *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_11DDTypeCType_4type_2__set__(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_value);
__Pyx_GIVEREF(__pyx_v_value);
__Pyx_GOTREF(__pyx_v_self->type);
__Pyx_DECREF(__pyx_v_self->type);
__pyx_v_self->type = __pyx_v_value;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_11DDTypeCType_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5arrex_6dtypes_11DDTypeCType_4type_5__del__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_11DDTypeCType_4type_4__del__(((struct __pyx_obj_5arrex_6dtypes_DDTypeCType *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_11DDTypeCType_4type_4__del__(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *__pyx_v_self) {
int __pyx_r;
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->type);
__Pyx_DECREF(__pyx_v_self->type);
__pyx_v_self->type = Py_None;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
213:
+214: def __init__(self, type):
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_11DDTypeCType_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_5arrex_6dtypes_11DDTypeCType_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_type = 0;
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_type,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 214, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 214, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < 0) __PYX_ERR(0, 214, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, i); __PYX_ERR(0, 214, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 214, __pyx_L3_error)
}
__pyx_v_type = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 214, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.DDTypeCType.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5arrex_6dtypes_11DDTypeCType___init__(((struct __pyx_obj_5arrex_6dtypes_DDTypeCType *)__pyx_v_self), __pyx_v_type);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_11DDTypeCType___init__(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *__pyx_v_self, PyObject *__pyx_v_type) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("arrex.dtypes.DDTypeCType.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+215: if not isctype(type):
__pyx_t_1 = __pyx_f_5arrex_6dtypes_isctype(__pyx_v_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 215, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (unlikely(__pyx_t_3)) { /* … */ }
+216: raise TypeError('type must be a ctype')
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_5 = __pyx_builtin_TypeError;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_type_must_be_a_ctype};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 216, __pyx_L1_error)
+217: self.type = type
__Pyx_INCREF(__pyx_v_type); __Pyx_GIVEREF(__pyx_v_type); __Pyx_GOTREF(__pyx_v_self->type); __Pyx_DECREF(__pyx_v_self->type); __pyx_v_self->type = __pyx_v_type;
+218: self.dsize = ctypes.sizeof(type)
__pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ctypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sizeof); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_type}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 218, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->__pyx_base.dsize = __pyx_t_6;
+219: self.c_pack = <c_pack_t> self._ctype_pack
__pyx_v_self->__pyx_base.c_pack = ((__pyx_t_5arrex_6dtypes_c_pack_t)((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeCType *)__pyx_v_self->__pyx_vtab)->_ctype_pack);
+220: self.c_unpack = <c_unpack_t> self._ctype_unpack
__pyx_v_self->__pyx_base.c_unpack = ((__pyx_t_5arrex_6dtypes_c_unpack_t)((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeCType *)__pyx_v_self->__pyx_vtab)->_ctype_unpack);
+221: self.layout = None
__Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->__pyx_base.layout); __Pyx_DECREF(__pyx_v_self->__pyx_base.layout); __pyx_v_self->__pyx_base.layout = ((PyObject*)Py_None);
222:
+223: cdef int _ctype_pack(self, void* place, object obj) except -1:
static int __pyx_f_5arrex_6dtypes_11DDTypeCType__ctype_pack(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *__pyx_v_self, void *__pyx_v_place, PyObject *__pyx_v_obj) {
int __pyx_r;
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("arrex.dtypes.DDTypeCType._ctype_pack", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+224: if not isinstance(obj, self.type):
__pyx_t_1 = __pyx_v_self->type; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (unlikely(__pyx_t_3)) { /* … */ }
+225: raise TypeError('cannot store an object of a different type')
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_5 = __pyx_builtin_TypeError;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_cannot_store_an_object_of_a_diff};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_Raise(__pyx_t_1, 0, 0, 0);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__PYX_ERR(0, 225, __pyx_L1_error)
+226: memcpy(place, <void*><size_t> ctypes.addressof(obj), self.dsize)
__pyx_t_5 = NULL; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ctypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_addressof); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = 1; #if CYTHON_UNPACK_METHODS if (unlikely(PyMethod_Check(__pyx_t_7))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); assert(__pyx_t_5); PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx__function); __Pyx_DECREF_SET(__pyx_t_7, __pyx__function); __pyx_t_6 = 0; } #endif { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_obj}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_t_6 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 226, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; (void)(memcpy(__pyx_v_place, ((void *)((size_t)__pyx_t_6)), __pyx_v_self->__pyx_base.dsize));
227:
+228: cdef object _ctype_unpack(self, void* place):
static PyObject *__pyx_f_5arrex_6dtypes_11DDTypeCType__ctype_unpack(struct __pyx_obj_5arrex_6dtypes_DDTypeCType *__pyx_v_self, void *__pyx_v_place) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("arrex.dtypes.DDTypeCType._ctype_unpack", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+229: return self.type.from_buffer(PyByteArray_FromStringAndSize(<char*> place, self.dsize))
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = __pyx_v_self->type; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = PyByteArray_FromStringAndSize(((char *)__pyx_v_place), __pyx_v_self->__pyx_base.dsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = 0; { PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3}; __pyx_t_1 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_from_buffer, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
230:
231:
+232: cdef class DDTypeExtension(DDType):
struct __pyx_obj_5arrex_6dtypes_DDTypeExtension {
struct __pyx_obj_5arrex_6dtypes_DDType __pyx_base;
struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension *__pyx_vtab;
PyTypeObject *type;
PyObject *constructor;
};
/* … */
struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension {
void *(*_raw)(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *, PyObject *);
int (*_ext_pack)(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *, void *, PyObject *);
PyObject *(*_ext_unpack)(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *, void *);
};
static struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension *__pyx_vtabptr_5arrex_6dtypes_DDTypeExtension;
233: ''' DDTypeTypeExtension(type, layout=None, constructor=None)
234:
235: Create a dtype for a C extension type.
236:
237: This is the most efficient kind of dtype in term of access/assignation time.
238:
239: In order to put an extension object into an array, it satisfy the following conditions:
240:
241: - have fixed size known at the time of dtype creation (so any array element has the same)
242: - contain only byte copiable data (so nothing particular is done when copying/destroying the objects)
243:
244: WARNING:
245:
246: These conditions MUST be ensured by the user when declaring an extension type as a dtype, or it will result in memory corruption and crash of the program
247:
248:
249: Example:
250:
251: >>> arrex.declare(vec3, DDTypeExtension(vec3, 'fff', vec3))
252: '''
+253: cdef public type type
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_4type_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_4type___get__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeExtension_4type___get__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF((PyObject *)__pyx_v_self->type);
__pyx_r = ((PyObject *)__pyx_v_self->type);
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_4type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_4type_2__set__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeExtension_4type_2__set__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("type", __pyx_t_1))) __PYX_ERR(0, 253, __pyx_L1_error)
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF((PyObject *)__pyx_v_self->type);
__Pyx_DECREF((PyObject *)__pyx_v_self->type);
__pyx_v_self->type = ((PyTypeObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension.type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_4type_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_4type_5__del__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_4type_4__del__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeExtension_4type_4__del__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self) {
int __pyx_r;
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF((PyObject *)__pyx_v_self->type);
__Pyx_DECREF((PyObject *)__pyx_v_self->type);
__pyx_v_self->type = ((PyTypeObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+254: cdef public object constructor
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_11constructor_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_11constructor_1__get__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_11constructor___get__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeExtension_11constructor___get__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->constructor);
__pyx_r = __pyx_v_self->constructor;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_11constructor_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_11constructor_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_11constructor_2__set__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeExtension_11constructor_2__set__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_value);
__Pyx_GIVEREF(__pyx_v_value);
__Pyx_GOTREF(__pyx_v_self->constructor);
__Pyx_DECREF(__pyx_v_self->constructor);
__pyx_v_self->constructor = __pyx_v_value;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_11constructor_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_11constructor_5__del__(PyObject *__pyx_v_self) {
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_11constructor_4__del__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeExtension_11constructor_4__del__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self) {
int __pyx_r;
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->constructor);
__Pyx_DECREF(__pyx_v_self->constructor);
__pyx_v_self->constructor = Py_None;
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
255:
+256: def __init__(self, type ext, layout=None, constructor=None):
/* Python wrapper */
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_5arrex_6dtypes_15DDTypeExtension_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyTypeObject *__pyx_v_ext = 0;
PyObject *__pyx_v_layout = 0;
PyObject *__pyx_v_constructor = 0;
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
#endif
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_ext,&__pyx_mstate_global->__pyx_n_u_layout,&__pyx_mstate_global->__pyx_n_u_constructor,0};
PyObject* values[3] = {0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 256, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 256, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 256, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 256, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < 0) __PYX_ERR(0, 256, __pyx_L3_error)
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, i); __PYX_ERR(0, 256, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 3:
values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 256, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 256, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 256, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
}
__pyx_v_ext = ((PyTypeObject*)values[0]);
__pyx_v_layout = values[1];
__pyx_v_constructor = values[2];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 256, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ext), (&PyType_Type), 1, "ext", 1))) __PYX_ERR(0, 256, __pyx_L1_error)
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension___init__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self), __pyx_v_ext, __pyx_v_layout, __pyx_v_constructor);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_5arrex_6dtypes_15DDTypeExtension___init__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, PyTypeObject *__pyx_v_ext, PyObject *__pyx_v_layout, PyObject *__pyx_v_constructor) {
Py_ssize_t __pyx_v_fmtsize;
Py_ssize_t __pyx_v_packsize;
int __pyx_r;
__Pyx_INCREF(__pyx_v_layout);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_layout);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
257: cdef ssize_t fmtsize, packsize
258:
+259: if not isinstance(ext, type):
__pyx_t_1 = PyType_Check(((PyObject *)__pyx_v_ext));
__pyx_t_2 = (!__pyx_t_1);
if (unlikely(__pyx_t_2)) {
/* … */
}
+260: raise TypeError('dtype must be a type')
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_5 = __pyx_builtin_TypeError;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dtype_must_be_a_type};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __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_ERR(0, 260, __pyx_L1_error)
261:
+262: packsize = (<PyTypeObject*> ext).tp_basicsize - sizeof(_head)
__pyx_v_packsize = (((PyTypeObject *)__pyx_v_ext)->tp_basicsize - (sizeof(struct __pyx_obj_5arrex_6dtypes__head)));
+263: if layout is not None:
__pyx_t_2 = (__pyx_v_layout != Py_None);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
+264: if isinstance(layout, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_layout);
if (__pyx_t_2) {
/* … */
goto __pyx_L5;
}
+265: layout = layout.encode()
__pyx_t_5 = __pyx_v_layout;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
__pyx_t_3 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF_SET(__pyx_v_layout, __pyx_t_3);
__pyx_t_3 = 0;
+266: elif not isinstance(layout, bytes):
__pyx_t_2 = PyBytes_Check(__pyx_v_layout);
__pyx_t_1 = (!__pyx_t_2);
if (__pyx_t_1) {
/* … */
}
__pyx_L5:;
+267: layout = bytes(layout)
__pyx_t_5 = NULL;
__Pyx_INCREF((PyObject *)(&PyBytes_Type));
__pyx_t_4 = ((PyObject *)(&PyBytes_Type));
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_layout};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 267, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__Pyx_DECREF_SET(__pyx_v_layout, __pyx_t_3);
__pyx_t_3 = 0;
268:
+269: fmtsize = struct.calcsize(layout)
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_struct); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 269, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_calcsize); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_7))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_layout};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
__pyx_t_8 = PyLong_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 269, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_v_fmtsize = __pyx_t_8;
+270: if packsize < fmtsize:
__pyx_t_1 = (__pyx_v_packsize < __pyx_v_fmtsize);
if (unlikely(__pyx_t_1)) {
/* … */
}
+271: raise ValueError('format describes a too big structure for the given dtype')
__pyx_t_7 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_4 = __pyx_builtin_ValueError;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_format_describes_a_too_big_struc};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __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_ERR(0, 271, __pyx_L1_error)
272: else:
+273: fmtsize = 0
/*else*/ {
__pyx_v_fmtsize = 0;
}
__pyx_L4:;
274:
+275: self.dsize = fmtsize or packsize
if (!__pyx_v_fmtsize) {
} else {
__pyx_t_6 = __pyx_v_fmtsize;
goto __pyx_L7_bool_binop_done;
}
__pyx_t_6 = __pyx_v_packsize;
__pyx_L7_bool_binop_done:;
__pyx_v_self->__pyx_base.dsize = __pyx_t_6;
+276: if not self.dsize:
__pyx_t_1 = (!(__pyx_v_self->__pyx_base.dsize != 0));
if (unlikely(__pyx_t_1)) {
/* … */
}
+277: raise TypeError('dsize cannot be 0')
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_7 = __pyx_builtin_TypeError;
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dsize_cannot_be_0};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 277, __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_ERR(0, 277, __pyx_L1_error)
278:
+279: self.c_pack = <c_pack_t> self._ext_pack
__pyx_v_self->__pyx_base.c_pack = ((__pyx_t_5arrex_6dtypes_c_pack_t)((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self->__pyx_vtab)->_ext_pack);
+280: self.c_unpack = <c_unpack_t> self._ext_unpack
__pyx_v_self->__pyx_base.c_unpack = ((__pyx_t_5arrex_6dtypes_c_unpack_t)((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self->__pyx_vtab)->_ext_unpack);
+281: self.layout = layout
__pyx_t_3 = __pyx_v_layout; __Pyx_INCREF(__pyx_t_3); if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF(__pyx_v_self->__pyx_base.layout); __Pyx_DECREF(__pyx_v_self->__pyx_base.layout); __pyx_v_self->__pyx_base.layout = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+282: self.type = ext
__Pyx_INCREF((PyObject *)__pyx_v_ext); __Pyx_GIVEREF((PyObject *)__pyx_v_ext); __Pyx_GOTREF((PyObject *)__pyx_v_self->type); __Pyx_DECREF((PyObject *)__pyx_v_self->type); __pyx_v_self->type = __pyx_v_ext;
+283: self.constructor = constructor
__Pyx_INCREF(__pyx_v_constructor); __Pyx_GIVEREF(__pyx_v_constructor); __Pyx_GOTREF(__pyx_v_self->constructor); __Pyx_DECREF(__pyx_v_self->constructor); __pyx_v_self->constructor = __pyx_v_constructor;
284:
+285: cdef void * _raw(self, obj):
static void *__pyx_f_5arrex_6dtypes_15DDTypeExtension__raw(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, PyObject *__pyx_v_obj) {
void *__pyx_r;
/* … */
/* function exit code */
__pyx_L0:;
return __pyx_r;
}
+286: return (<char*><PyObject*> obj) + (<PyTypeObject*>self.type).tp_basicsize - self.dsize
__pyx_r = ((((char *)((PyObject *)__pyx_v_obj)) + ((PyTypeObject *)__pyx_v_self->type)->tp_basicsize) - __pyx_v_self->__pyx_base.dsize); goto __pyx_L0;
287:
+288: cdef int _ext_pack(self, void* place, object obj) except -1:
static int __pyx_f_5arrex_6dtypes_15DDTypeExtension__ext_pack(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, void *__pyx_v_place, PyObject *__pyx_v_obj) {
int __pyx_r;
__Pyx_INCREF(__pyx_v_obj);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension._ext_pack", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_obj);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+289: if not isinstance(obj, self.type):
__pyx_t_1 = ((PyObject *)__pyx_v_self->type); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { /* … */ }
+290: if self.constructor is not None:
__pyx_t_3 = (__pyx_v_self->constructor != Py_None);
if (likely(__pyx_t_3)) {
/* … */
goto __pyx_L4;
}
+291: obj = self.constructor(obj)
__pyx_t_4 = NULL;
__Pyx_INCREF(__pyx_v_self->constructor);
__pyx_t_5 = __pyx_v_self->constructor;
__pyx_t_6 = 1;
#if CYTHON_UNPACK_METHODS
if (likely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_6 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_obj};
__pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
}
__Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_1);
__pyx_t_1 = 0;
292: else:
+293: raise TypeError('cannot implicitely convert {} into {}'.format(
/*else*/ {
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_4 = __pyx_builtin_TypeError;
__pyx_t_8 = __pyx_mstate_global->__pyx_kp_u_cannot_implicitely_convert_into;
__Pyx_INCREF(__pyx_t_8);
+294: type(obj).__name__,
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9);
+295: repr(self),
__pyx_t_10 = PyObject_Repr(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 295, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_6 = 0; { PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_10}; __pyx_t_7 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); } __pyx_t_6 = 1; { PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(0, 293, __pyx_L1_error) } __pyx_L4:;
296: ))
+297: memcpy(place, self._raw(obj), self.dsize)
__pyx_t_11 = ((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self->__pyx_vtab)->_raw(__pyx_v_self, __pyx_v_obj); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 297, __pyx_L1_error)
(void)(memcpy(__pyx_v_place, __pyx_t_11, __pyx_v_self->__pyx_base.dsize));
298:
+299: cdef object _ext_unpack(self, void* place):
static PyObject *__pyx_f_5arrex_6dtypes_15DDTypeExtension__ext_unpack(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, void *__pyx_v_place) {
PyObject *__pyx_v_new = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension._ext_unpack", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_new);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+300: new = (<PyTypeObject*>self.type).tp_new(self.type, <PyObject*>_empty, <PyObject*>None)
__pyx_t_1 = ((PyObject *)__pyx_v_self->type); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = ((PyTypeObject *)__pyx_v_self->type)->tp_new(((PyTypeObject *)__pyx_t_1), ((PyObject *)__pyx_v_5arrex_6dtypes__empty), ((PyObject *)Py_None)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_new = __pyx_t_2; __pyx_t_2 = 0;
+301: memcpy(self._raw(new), place, self.dsize)
__pyx_t_3 = ((struct __pyx_vtabstruct_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self->__pyx_vtab)->_raw(__pyx_v_self, __pyx_v_new); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 301, __pyx_L1_error)
(void)(memcpy(__pyx_t_3, __pyx_v_place, __pyx_v_self->__pyx_base.dsize));
+302: return new
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_new); __pyx_r = __pyx_v_new; goto __pyx_L0;
303:
+304: def __reduce_ex__(self, protocol):
/* Python wrapper */ static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_3__reduce_ex__(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_15DDTypeExtension_2__reduce_ex__, " that overload allows for automatic declaration of the dtype fron the pickled informations, as long as they are consistent with the given type size "); static PyMethodDef __pyx_mdef_5arrex_6dtypes_15DDTypeExtension_3__reduce_ex__ = {"__reduce_ex__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_15DDTypeExtension_3__reduce_ex__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_15DDTypeExtension_2__reduce_ex__}; static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_3__reduce_ex__(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { CYTHON_UNUSED PyObject *__pyx_v_protocol = 0; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_ex__ (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_SIZE __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_protocol,0}; PyObject* values[1] = {0}; const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0; if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 304, __pyx_L3_error) if (__pyx_kwds_len > 0) { switch (__pyx_nargs) { case 1: values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 304, __pyx_L3_error) CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } const Py_ssize_t kwd_pos_args = __pyx_nargs; if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__reduce_ex__", 0) < 0) __PYX_ERR(0, 304, __pyx_L3_error) for (Py_ssize_t i = __pyx_nargs; i < 1; i++) { if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 1, 1, 1, i); __PYX_ERR(0, 304, __pyx_L3_error) } } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0); if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 304, __pyx_L3_error) } __pyx_v_protocol = values[0]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__reduce_ex__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 304, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_AddTraceback("arrex.dtypes.DDTypeExtension.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_2__reduce_ex__(((struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *)__pyx_v_self), __pyx_v_protocol); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { Py_XDECREF(values[__pyx_temp]); } __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeExtension_2__reduce_ex__(struct __pyx_obj_5arrex_6dtypes_DDTypeExtension *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_protocol) { PyObject *__pyx_r = NULL; /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("arrex.dtypes.DDTypeExtension.__reduce_ex__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_15DDTypeExtension_3__reduce_ex__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DDTypeExtension___reduce_ex, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeExtension, __pyx_mstate_global->__pyx_n_u_reduce_ex, __pyx_t_3) < 0) __PYX_ERR(0, 304, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
305: ''' that overload allows for automatic declaration of the dtype fron the pickled informations, as long as they are consistent with the given type size '''
+306: return self._rebuild, (self.type, self.dsize, self.layout, self.constructor)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_rebuild); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_self->__pyx_base.dsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF((PyObject *)__pyx_v_self->type); __Pyx_GIVEREF((PyObject *)__pyx_v_self->type); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self->type)) != (0)) __PYX_ERR(0, 306, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 306, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->__pyx_base.layout); __Pyx_GIVEREF(__pyx_v_self->__pyx_base.layout); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->__pyx_base.layout) != (0)) __PYX_ERR(0, 306, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->constructor); __Pyx_GIVEREF(__pyx_v_self->constructor); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_self->constructor) != (0)) __PYX_ERR(0, 306, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 306, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 306, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
307:
+308: @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_5_rebuild(PyObject *__pyx_v_cls,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_5arrex_6dtypes_15DDTypeExtension_5_rebuild = {"_rebuild", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_15DDTypeExtension_5_rebuild, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5arrex_6dtypes_15DDTypeExtension_5_rebuild(PyObject *__pyx_v_cls,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_type = 0;
size_t __pyx_v_dsize;
PyObject *__pyx_v_layout = 0;
PyObject *__pyx_v_constructor = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_rebuild (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_type,&__pyx_mstate_global->__pyx_n_u_dsize,&__pyx_mstate_global->__pyx_n_u_layout,&__pyx_mstate_global->__pyx_n_u_constructor,0};
PyObject* values[4] = {0,0,0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 308, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 4:
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 308, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 3:
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 308, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 308, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 308, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_rebuild", 0) < 0) __PYX_ERR(0, 308, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_rebuild", 1, 4, 4, i); __PYX_ERR(0, 308, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 4)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 308, __pyx_L3_error)
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 308, __pyx_L3_error)
values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 308, __pyx_L3_error)
values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 308, __pyx_L3_error)
}
__pyx_v_type = values[0];
__pyx_v_dsize = __Pyx_PyLong_As_size_t(values[1]); if (unlikely((__pyx_v_dsize == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 309, __pyx_L3_error)
__pyx_v_layout = ((PyObject*)values[2]);
__pyx_v_constructor = values[3];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_rebuild", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 308, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension._rebuild", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_layout), (&PyBytes_Type), 1, "layout", 1))) __PYX_ERR(0, 309, __pyx_L1_error)
__pyx_r = __pyx_pf_5arrex_6dtypes_15DDTypeExtension_4_rebuild(((PyTypeObject*)__pyx_v_cls), __pyx_v_type, __pyx_v_dsize, __pyx_v_layout, __pyx_v_constructor);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_15DDTypeExtension_4_rebuild(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_type, size_t __pyx_v_dsize, PyObject *__pyx_v_layout, PyObject *__pyx_v_constructor) {
PyObject *__pyx_v_candidate = NULL;
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("arrex.dtypes.DDTypeExtension._rebuild", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_candidate);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_15DDTypeExtension_5_rebuild, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DDTypeExtension__rebuild, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeExtension, __pyx_mstate_global->__pyx_n_u_rebuild, __pyx_t_3) < 0) __PYX_ERR(0, 308, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_GetNameInClass(__pyx_t_3, (PyObject*)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeExtension, __pyx_mstate_global->__pyx_n_u_rebuild); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 308, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeExtension, __pyx_mstate_global->__pyx_n_u_rebuild, __pyx_t_2) < 0) __PYX_ERR(0, 308, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
309: def _rebuild(cls, type, size_t dsize, bytes layout, constructor):
+310: candidate = _declared.get(type) or declare(type, DDTypeExtension(type, layout, constructor))
if (unlikely(__pyx_v_5arrex_6dtypes__declared == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
__PYX_ERR(0, 310, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_5arrex_6dtypes__declared, __pyx_v_type, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 310, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 310, __pyx_L1_error)
if (!__pyx_t_3) {
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
} else {
__Pyx_INCREF(__pyx_t_2);
__pyx_t_1 = __pyx_t_2;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
goto __pyx_L3_bool_binop_done;
}
__pyx_t_4 = NULL;
__Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeExtension);
__pyx_t_5 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeExtension);
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_type, __pyx_v_layout, __pyx_v_constructor};
__pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 310, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_2);
}
__pyx_t_7.__pyx_n = 1;
__pyx_t_7.dtype = ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_t_2);
__pyx_t_5 = ((PyObject *)__pyx_f_5arrex_6dtypes_declare(__pyx_v_type, 0, &__pyx_t_7)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 310, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF((PyObject *)__pyx_t_2); __pyx_t_2 = 0;
__Pyx_INCREF(__pyx_t_5);
__pyx_t_1 = __pyx_t_5;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_L3_bool_binop_done:;
__pyx_v_candidate = __pyx_t_1;
__pyx_t_1 = 0;
+311: if dsize != candidate.dsize:
__pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_dsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_candidate, __pyx_mstate_global->__pyx_n_u_dsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (unlikely(__pyx_t_3)) { /* … */ }
+312: raise ValueError('the pickled dtype {} has a different size here than in dump, unpickled {} expected {}'
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_1 = __pyx_builtin_ValueError;
+313: .format(repr(type), dsize, candidate.dsize))
__pyx_t_8 = __pyx_mstate_global->__pyx_kp_u_the_pickled_dtype_has_a_differen;
__Pyx_INCREF(__pyx_t_8);
__pyx_t_9 = PyObject_Repr(__pyx_v_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_10 = __Pyx_PyLong_FromSize_t(__pyx_v_dsize); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 313, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_candidate, __pyx_mstate_global->__pyx_n_u_dsize); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 313, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_11};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
__pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 312, __pyx_L1_error)
+314: if candidate.layout and layout != candidate.layout:
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_candidate, __pyx_mstate_global->__pyx_n_u_layout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_12) { } else { __pyx_t_3 = __pyx_t_12; goto __pyx_L7_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_candidate, __pyx_mstate_global->__pyx_n_u_layout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_12 = (__Pyx_PyBytes_Equals(__pyx_v_layout, __pyx_t_2, Py_NE)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __pyx_t_12; __pyx_L7_bool_binop_done:; if (unlikely(__pyx_t_3)) { /* … */ }
+315: raise ValueError('the pickled dtype {} has a different memory layout here than in dump, unpickled {} expected {}'
__pyx_t_1 = NULL;
__Pyx_INCREF(__pyx_builtin_ValueError);
__pyx_t_4 = __pyx_builtin_ValueError;
+316: .format(repr(type), layout, candidate.layout))
__pyx_t_11 = __pyx_mstate_global->__pyx_kp_u_the_pickled_dtype_has_a_differen_2;
__Pyx_INCREF(__pyx_t_11);
__pyx_t_10 = PyObject_Repr(__pyx_v_type); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 316, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_10);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_candidate, __pyx_mstate_global->__pyx_n_u_layout); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 316, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_6 = 0;
{
PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_t_10, __pyx_v_layout, __pyx_t_9};
__pyx_t_5 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
}
__pyx_t_6 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_5};
__pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
}
__Pyx_Raise(__pyx_t_2, 0, 0, 0);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__PYX_ERR(0, 315, __pyx_L1_error)
+317: return candidate
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_candidate); __pyx_r = __pyx_v_candidate; goto __pyx_L0;
318:
319:
320:
321:
322: # dictionnary of compatible packed types
+323: cdef dict _declared = {} # {python type: dtype}
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_v_5arrex_6dtypes__declared); __Pyx_DECREF_SET(__pyx_v_5arrex_6dtypes__declared, ((PyObject*)__pyx_t_2)); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
324:
+325: cpdef DDType declare(key, DDType dtype=None):
static PyObject *__pyx_pw_5arrex_6dtypes_5declare(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_f_5arrex_6dtypes_declare(PyObject *__pyx_v_key, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_5arrex_6dtypes_declare *__pyx_optional_args) {
struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_v_dtype = ((struct __pyx_obj_5arrex_6dtypes_DDType *)Py_None);
struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_r = NULL;
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_dtype = __pyx_optional_args->dtype;
}
}
__Pyx_INCREF((PyObject *)__pyx_v_dtype);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__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);
__Pyx_AddTraceback("arrex.dtypes.declare", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_dtype);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_5declare(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_4declare, " declare(dtype, ddtype)\n\t\n\t\tdeclare a new dtype \n\t");
static PyMethodDef __pyx_mdef_5arrex_6dtypes_5declare = {"declare", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_5declare, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_4declare};
static PyObject *__pyx_pw_5arrex_6dtypes_5declare(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_key = 0;
struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_v_dtype = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("declare (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_key,&__pyx_mstate_global->__pyx_n_u_dtype_2,0};
PyObject* values[2] = {0,0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 325, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 325, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 325, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "declare", 0) < 0) __PYX_ERR(0, 325, __pyx_L3_error)
if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_5arrex_6dtypes_DDType *)Py_None));
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("declare", 0, 1, 2, i); __PYX_ERR(0, 325, __pyx_L3_error) }
}
} else {
switch (__pyx_nargs) {
case 2:
values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 325, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 325, __pyx_L3_error)
break;
default: goto __pyx_L5_argtuple_error;
}
if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_5arrex_6dtypes_DDType *)Py_None));
}
__pyx_v_key = values[0];
__pyx_v_dtype = ((struct __pyx_obj_5arrex_6dtypes_DDType *)values[1]);
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("declare", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 325, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.declare", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dtype), __pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType, 1, "dtype", 0))) __PYX_ERR(0, 325, __pyx_L1_error)
__pyx_r = __pyx_pf_5arrex_6dtypes_4declare(__pyx_self, __pyx_v_key, __pyx_v_dtype);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
goto __pyx_L7_cleaned_up;
__pyx_L0:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__pyx_L7_cleaned_up:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_4declare(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_key, struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_v_dtype) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__pyx_t_2.__pyx_n = 1;
__pyx_t_2.dtype = __pyx_v_dtype;
__pyx_t_1 = ((PyObject *)__pyx_f_5arrex_6dtypes_declare(__pyx_v_key, 1, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 325, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("arrex.dtypes.declare", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_5declare, 0, __pyx_mstate_global->__pyx_n_u_declare, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[1]);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_declare, __pyx_t_2) < 0) __PYX_ERR(0, 325, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
326: ''' declare(dtype, ddtype)
327:
328: declare a new dtype
329: '''
+330: if not dtype:
__pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_dtype)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 330, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+331: if isinstance(key, str):
__pyx_t_2 = PyUnicode_Check(__pyx_v_key);
if (__pyx_t_2) {
/* … */
goto __pyx_L4;
}
332: # create a struct dtype
+333: dtype = DDTypeStruct(struct.Struct(key))
__pyx_t_4 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_DDTypeStruct); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 333, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_struct); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 333, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_Struct); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 333, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_key};
__pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 333, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
}
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_4);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_4);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
}
if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType))))) __PYX_ERR(0, 333, __pyx_L1_error)
__Pyx_DECREF_SET(__pyx_v_dtype, ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_t_3));
__pyx_t_3 = 0;
+334: elif isctype(key):
__pyx_t_3 = __pyx_f_5arrex_6dtypes_isctype(__pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 334, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 334, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { /* … */ goto __pyx_L4; }
335: # create a ctype dtype
+336: dtype = DDTypeCType(key)
__pyx_t_5 = NULL;
__Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeCType);
__pyx_t_6 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDTypeCType);
__pyx_t_10 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_key};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
__Pyx_GOTREF((PyObject *)__pyx_t_3);
}
__Pyx_DECREF_SET(__pyx_v_dtype, ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_t_3));
__pyx_t_3 = 0;
+337: elif isinstance(key, type):
__pyx_t_2 = PyType_Check(__pyx_v_key);
if (__pyx_t_2) {
/* … */
}
__pyx_L4:;
338: # create a dtype from a pure python class
+339: try: dtype = DDTypeClass(key)
{
/*try:*/ {
__pyx_t_6 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_DDTypeClass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 339, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_5))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
assert(__pyx_t_6);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_key};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 339, __pyx_L5_error)
__Pyx_GOTREF(__pyx_t_3);
}
if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType))))) __PYX_ERR(0, 339, __pyx_L5_error)
__Pyx_DECREF_SET(__pyx_v_dtype, ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_t_3));
__pyx_t_3 = 0;
}
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
__Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
goto __pyx_L10_try_end;
__pyx_L5_error:;
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L7_except_error:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
goto __pyx_L1_error;
__pyx_L6_exception_handled:;
__Pyx_XGIVEREF(__pyx_t_11);
__Pyx_XGIVEREF(__pyx_t_12);
__Pyx_XGIVEREF(__pyx_t_13);
__Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
__pyx_L10_try_end:;
}
+340: except TypeError: pass
__pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); if (__pyx_t_14) { __Pyx_ErrRestore(0,0,0); goto __pyx_L6_exception_handled; } goto __pyx_L7_except_error;
+341: if not dtype:
__pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_dtype)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 341, __pyx_L1_error) __pyx_t_1 = (!__pyx_t_2); if (unlikely(__pyx_t_1)) { /* … */ }
+342: raise TypeError('dtype {} is not declared, and cannot be guessed'.format(key))
__pyx_t_5 = NULL;
__Pyx_INCREF(__pyx_builtin_TypeError);
__pyx_t_6 = __pyx_builtin_TypeError;
__pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_dtype_is_not_declared_and_cannot;
__Pyx_INCREF(__pyx_t_9);
__pyx_t_10 = 0;
{
PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_key};
__pyx_t_4 = __Pyx_PyObject_FastCallMethod(__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 342, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
}
__pyx_t_10 = 1;
{
PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
__pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __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_ERR(0, 342, __pyx_L1_error)
+343: if not dtype.key:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dtype->key); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 343, __pyx_L1_error) __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { /* … */ }
+344: dtype.key = key
__Pyx_INCREF(__pyx_v_key); __Pyx_GIVEREF(__pyx_v_key); __Pyx_GOTREF(__pyx_v_dtype->key); __Pyx_DECREF(__pyx_v_dtype->key); __pyx_v_dtype->key = __pyx_v_key;
+345: _declared[key] = dtype
if (unlikely(__pyx_v_5arrex_6dtypes__declared == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 345, __pyx_L1_error)
}
if (unlikely((PyDict_SetItem(__pyx_v_5arrex_6dtypes__declared, __pyx_v_key, ((PyObject *)__pyx_v_dtype)) < 0))) __PYX_ERR(0, 345, __pyx_L1_error)
+346: return dtype
__Pyx_XDECREF((PyObject *)__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_dtype); __pyx_r = __pyx_v_dtype; goto __pyx_L0;
347:
+348: cpdef DDType declared(key):
static PyObject *__pyx_pw_5arrex_6dtypes_7declared(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_f_5arrex_6dtypes_declared(PyObject *__pyx_v_key, CYTHON_UNUSED int __pyx_skip_dispatch) {
PyObject *__pyx_v_dtype = NULL;
struct __pyx_obj_5arrex_6dtypes_DDType *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("arrex.dtypes.declared", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_dtype);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_5arrex_6dtypes_7declared(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_5arrex_6dtypes_6declared, " declared(key)\n\t\t\n\t\treturn the content of the declaration for the givne dtype \n\t");
static PyMethodDef __pyx_mdef_5arrex_6dtypes_7declared = {"declared", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_5arrex_6dtypes_7declared, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_5arrex_6dtypes_6declared};
static PyObject *__pyx_pw_5arrex_6dtypes_7declared(PyObject *__pyx_self,
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
PyObject *__pyx_v_key = 0;
#if !CYTHON_METH_FASTCALL
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
#endif
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("declared (wrapper)", 0);
#if !CYTHON_METH_FASTCALL
#if CYTHON_ASSUME_SAFE_SIZE
__pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
#else
__pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
#endif
#endif
__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
{
PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_key,0};
PyObject* values[1] = {0};
const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 348, __pyx_L3_error)
if (__pyx_kwds_len > 0) {
switch (__pyx_nargs) {
case 1:
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 348, __pyx_L3_error)
CYTHON_FALLTHROUGH;
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "declared", 0) < 0) __PYX_ERR(0, 348, __pyx_L3_error)
for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("declared", 1, 1, 1, i); __PYX_ERR(0, 348, __pyx_L3_error) }
}
} else if (unlikely(__pyx_nargs != 1)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 348, __pyx_L3_error)
}
__pyx_v_key = values[0];
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("declared", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 348, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_AddTraceback("arrex.dtypes.declared", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_5arrex_6dtypes_6declared(__pyx_self, __pyx_v_key);
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
/* function exit code */
for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
Py_XDECREF(values[__pyx_temp]);
}
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_5arrex_6dtypes_6declared(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_key) {
PyObject *__pyx_r = NULL;
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = ((PyObject *)__pyx_f_5arrex_6dtypes_declared(__pyx_v_key, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("arrex.dtypes.declared", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_5arrex_6dtypes_7declared, 0, __pyx_mstate_global->__pyx_n_u_declared, NULL, __pyx_mstate_global->__pyx_n_u_arrex_dtypes, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_declared, __pyx_t_2) < 0) __PYX_ERR(0, 348, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
349: ''' declared(key)
350:
351: return the content of the declaration for the givne dtype
352: '''
+353: if isinstance(key, DDType):
__pyx_t_1 = __Pyx_TypeCheck(__pyx_v_key, __pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType);
if (__pyx_t_1) {
/* … */
}
+354: return key
__Pyx_XDECREF((PyObject *)__pyx_r); if (!(likely(((__pyx_v_key) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_key, __pyx_mstate_global->__pyx_ptype_5arrex_6dtypes_DDType))))) __PYX_ERR(0, 354, __pyx_L1_error) __Pyx_INCREF(__pyx_v_key); __pyx_r = ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_v_key); goto __pyx_L0;
355: else:
356: # try an automated declaration
+357: dtype = _declared.get(key) or declare(key)
/*else*/ {
if (unlikely(__pyx_v_5arrex_6dtypes__declared == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
__PYX_ERR(0, 357, __pyx_L1_error)
}
__pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_5arrex_6dtypes__declared, __pyx_v_key, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 357, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 357, __pyx_L1_error)
if (!__pyx_t_1) {
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
} else {
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = __pyx_t_3;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_3 = ((PyObject *)__pyx_f_5arrex_6dtypes_declare(__pyx_v_key, 0, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 357, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_INCREF(__pyx_t_3);
__pyx_t_2 = __pyx_t_3;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_L4_bool_binop_done:;
__pyx_v_dtype = __pyx_t_2;
__pyx_t_2 = 0;
358: # raise an error when not declared
359: #raise TypeError('dtype {} is not declared'.format(key))
+360: return <DDType> dtype
__Pyx_XDECREF((PyObject *)__pyx_r); __Pyx_INCREF((PyObject *)((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_v_dtype)); __pyx_r = ((struct __pyx_obj_5arrex_6dtypes_DDType *)__pyx_v_dtype); goto __pyx_L0; }
361:
+362: cdef isctype(obj):
static PyObject *__pyx_f_5arrex_6dtypes_isctype(PyObject *__pyx_v_obj) {
PyObject *__pyx_r = NULL;
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("arrex.dtypes.isctype", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
363: ''' isctype(obj)
364:
365: return True if obj is a ctype type or one of its derivatives, and False otherwise
366: '''
367: # there is currently no other way to check this than to try a ctype-only function and detect errors
368: # this is an ungly way but better would require changes in ctypes ...
+369: if not isinstance(obj, type): return False
__pyx_t_1 = PyType_Check(__pyx_v_obj); __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; goto __pyx_L0; }
+370: try: ctypes.sizeof(obj)
{
/*try:*/ {
__pyx_t_7 = NULL;
__Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ctypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_sizeof); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 370, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_10 = 1;
#if CYTHON_UNPACK_METHODS
if (unlikely(PyMethod_Check(__pyx_t_9))) {
__pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
assert(__pyx_t_7);
PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
__Pyx_INCREF(__pyx_t_7);
__Pyx_INCREF(__pyx__function);
__Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
__pyx_t_10 = 0;
}
#endif
{
PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_obj};
__pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 370, __pyx_L4_error)
__Pyx_GOTREF(__pyx_t_6);
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
}
__Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L9_try_end;
__pyx_L4_error:;
__Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
__pyx_L6_except_error:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L1_error;
__pyx_L7_except_return:;
__Pyx_XGIVEREF(__pyx_t_3);
__Pyx_XGIVEREF(__pyx_t_4);
__Pyx_XGIVEREF(__pyx_t_5);
__Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
goto __pyx_L0;
__pyx_L9_try_end:;
}
+371: except TypeError: return False
__pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); if (__pyx_t_11) { __Pyx_ErrRestore(0,0,0); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_False); __pyx_r = Py_False; goto __pyx_L7_except_return; } goto __pyx_L6_except_error;
+372: return True
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(Py_True); __pyx_r = Py_True; goto __pyx_L0;
373:
374:
375: # create an empty object to easily get the PyObject head size
+376: cdef class _head:
struct __pyx_obj_5arrex_6dtypes__head {
PyObject_HEAD
};
377: ''' implementation purpose only '''
378: pass
379:
380: # empty tuple, reused to fasten some calls
+381: cdef tuple _empty = ()
__Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple); __Pyx_XGOTREF(__pyx_v_5arrex_6dtypes__empty); __Pyx_DECREF_SET(__pyx_v_5arrex_6dtypes__empty, __pyx_mstate_global->__pyx_empty_tuple); __Pyx_GIVEREF(__pyx_mstate_global->__pyx_empty_tuple);
382: