added todo for ints > int32

This commit is contained in:
Daniel Tsvetkov 2019-12-05 11:59:56 +01:00
parent c2ee459ec7
commit 1b7abb604e
7 changed files with 117 additions and 78 deletions

Binary file not shown.

View File

@ -590,8 +590,8 @@ static CYTHON_INLINE float __PYX_NAN() {
#endif #endif
#endif #endif
#define __PYX_HAVE__cythkrn #define __PYX_HAVE__ckron__cythkrn
#define __PYX_HAVE_API__cythkrn #define __PYX_HAVE_API__ckron__cythkrn
/* Early includes */ /* Early includes */
#include "pythread.h" #include "pythread.h"
#include <string.h> #include <string.h>
@ -957,6 +957,15 @@ typedef float __pyx_t_5scipy_6linalg_11cython_blas_s;
* ctypedef double complex z * ctypedef double complex z
*/ */
typedef double __pyx_t_5scipy_6linalg_11cython_blas_d; typedef double __pyx_t_5scipy_6linalg_11cython_blas_d;
/* "ckron/cythkrn.pyx":17
* unsigned long 8 bytes 0 to 18446744073709551615
* """
* ctypedef unsigned long ULong # <<<<<<<<<<<<<<
*
* @cython.boundscheck(False)
*/
typedef unsigned long __pyx_t_5ckron_7cythkrn_ULong;
/* Declarations.proto */ /* Declarations.proto */
#if CYTHON_CCOMPLEX #if CYTHON_CCOMPLEX
#ifdef __cplusplus #ifdef __cplusplus
@ -1834,7 +1843,7 @@ static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memo
/* Module declarations from 'scipy.linalg.cython_blas' */ /* Module declarations from 'scipy.linalg.cython_blas' */
static void (*__pyx_f_5scipy_6linalg_11cython_blas_dger)(int *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *); /*proto*/ static void (*__pyx_f_5scipy_6linalg_11cython_blas_dger)(int *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *, __pyx_t_5scipy_6linalg_11cython_blas_d *, int *); /*proto*/
/* Module declarations from 'cythkrn' */ /* Module declarations from 'ckron.cythkrn' */
static PyTypeObject *__pyx_array_type = 0; static PyTypeObject *__pyx_array_type = 0;
static PyTypeObject *__pyx_MemviewEnum_type = 0; static PyTypeObject *__pyx_MemviewEnum_type = 0;
static PyTypeObject *__pyx_memoryview_type = 0; static PyTypeObject *__pyx_memoryview_type = 0;
@ -1880,11 +1889,11 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size
static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/
static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/
static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 };
#define __Pyx_MODULE_NAME "cythkrn" #define __Pyx_MODULE_NAME "ckron.cythkrn"
extern int __pyx_module_is_main_cythkrn; extern int __pyx_module_is_main_ckron__cythkrn;
int __pyx_module_is_main_cythkrn = 0; int __pyx_module_is_main_ckron__cythkrn = 0;
/* Implementation of 'cythkrn' */ /* Implementation of 'ckron.cythkrn' */
static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_MemoryError; static PyObject *__pyx_builtin_MemoryError;
@ -1940,7 +1949,6 @@ static const char __pyx_k_result[] = "result";
static const char __pyx_k_struct[] = "struct"; static const char __pyx_k_struct[] = "struct";
static const char __pyx_k_unpack[] = "unpack"; static const char __pyx_k_unpack[] = "unpack";
static const char __pyx_k_update[] = "update"; static const char __pyx_k_update[] = "update";
static const char __pyx_k_cythkrn[] = "cythkrn";
static const char __pyx_k_fortran[] = "fortran"; static const char __pyx_k_fortran[] = "fortran";
static const char __pyx_k_memview[] = "memview"; static const char __pyx_k_memview[] = "memview";
static const char __pyx_k_Ellipsis[] = "Ellipsis"; static const char __pyx_k_Ellipsis[] = "Ellipsis";
@ -1962,6 +1970,7 @@ static const char __pyx_k_PickleError[] = "PickleError";
static const char __pyx_k_cythkrn_pyx[] = "cythkrn.pyx"; static const char __pyx_k_cythkrn_pyx[] = "cythkrn.pyx";
static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
static const char __pyx_k_stringsource[] = "stringsource"; static const char __pyx_k_stringsource[] = "stringsource";
static const char __pyx_k_ckron_cythkrn[] = "ckron.cythkrn";
static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
@ -2024,11 +2033,11 @@ static PyObject *__pyx_n_s_b;
static PyObject *__pyx_n_s_base; static PyObject *__pyx_n_s_base;
static PyObject *__pyx_n_s_c; static PyObject *__pyx_n_s_c;
static PyObject *__pyx_n_u_c; static PyObject *__pyx_n_u_c;
static PyObject *__pyx_n_s_ckron_cythkrn;
static PyObject *__pyx_n_s_class; static PyObject *__pyx_n_s_class;
static PyObject *__pyx_n_s_cline_in_traceback; static PyObject *__pyx_n_s_cline_in_traceback;
static PyObject *__pyx_kp_s_contiguous_and_direct; static PyObject *__pyx_kp_s_contiguous_and_direct;
static PyObject *__pyx_kp_s_contiguous_and_indirect; static PyObject *__pyx_kp_s_contiguous_and_indirect;
static PyObject *__pyx_n_s_cythkrn;
static PyObject *__pyx_kp_s_cythkrn_pyx; static PyObject *__pyx_kp_s_cythkrn_pyx;
static PyObject *__pyx_n_s_dict; static PyObject *__pyx_n_s_dict;
static PyObject *__pyx_n_s_dtype_is_object; static PyObject *__pyx_n_s_dtype_is_object;
@ -2099,7 +2108,7 @@ static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
static PyObject *__pyx_n_s_unpack; static PyObject *__pyx_n_s_unpack;
static PyObject *__pyx_n_s_update; static PyObject *__pyx_n_s_update;
static PyObject *__pyx_n_s_zeros; static PyObject *__pyx_n_s_zeros;
static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_b); /* proto */ static PyObject *__pyx_pf_5ckron_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_b); /* proto */
static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
@ -2179,18 +2188,19 @@ static PyObject *__pyx_codeobj__20;
static PyObject *__pyx_codeobj__27; static PyObject *__pyx_codeobj__27;
/* Late includes */ /* Late includes */
/* "cythkrn.pyx":7 /* "ckron/cythkrn.pyx":21
* @cython.boundscheck(False) * @cython.boundscheck(False)
* @cython.wraparound(False) * @cython.wraparound(False)
* def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<< * def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<<
* cdef int i = a.shape[0] * """
* cdef int j = a.shape[1] * Calculates a Kronicker product using C.
*/ */
/* Python wrapper */ /* Python wrapper */
static PyObject *__pyx_pw_7cythkrn_1kron(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pw_5ckron_7cythkrn_1kron(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_7cythkrn_1kron = {"kron", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7cythkrn_1kron, METH_VARARGS|METH_KEYWORDS, 0}; static char __pyx_doc_5ckron_7cythkrn_kron[] = "\n Calculates a Kronicker product using C.\n TODO: Crashes on 31 qubits since it overflows the int";
static PyObject *__pyx_pw_7cythkrn_1kron(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { static PyMethodDef __pyx_mdef_5ckron_7cythkrn_1kron = {"kron", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5ckron_7cythkrn_1kron, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5ckron_7cythkrn_kron};
static PyObject *__pyx_pw_5ckron_7cythkrn_1kron(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
__Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } };
__Pyx_memviewslice __pyx_v_b = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_memviewslice __pyx_v_b = { 0, 0, { 0 }, { 0 }, { 0 } };
PyObject *__pyx_r = 0; PyObject *__pyx_r = 0;
@ -2219,11 +2229,11 @@ static PyObject *__pyx_pw_7cythkrn_1kron(PyObject *__pyx_self, PyObject *__pyx_a
case 1: case 1:
if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--; if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
else { else {
__Pyx_RaiseArgtupleInvalid("kron", 1, 2, 2, 1); __PYX_ERR(0, 7, __pyx_L3_error) __Pyx_RaiseArgtupleInvalid("kron", 1, 2, 2, 1); __PYX_ERR(0, 21, __pyx_L3_error)
} }
} }
if (unlikely(kw_args > 0)) { if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "kron") < 0)) __PYX_ERR(0, 7, __pyx_L3_error) if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "kron") < 0)) __PYX_ERR(0, 21, __pyx_L3_error)
} }
} else if (PyTuple_GET_SIZE(__pyx_args) != 2) { } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
goto __pyx_L5_argtuple_error; goto __pyx_L5_argtuple_error;
@ -2231,25 +2241,25 @@ static PyObject *__pyx_pw_7cythkrn_1kron(PyObject *__pyx_self, PyObject *__pyx_a
values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
} }
__pyx_v_a = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a.memview)) __PYX_ERR(0, 7, __pyx_L3_error) __pyx_v_a = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a.memview)) __PYX_ERR(0, 21, __pyx_L3_error)
__pyx_v_b = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b.memview)) __PYX_ERR(0, 7, __pyx_L3_error) __pyx_v_b = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b.memview)) __PYX_ERR(0, 21, __pyx_L3_error)
} }
goto __pyx_L4_argument_unpacking_done; goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:; __pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("kron", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7, __pyx_L3_error) __Pyx_RaiseArgtupleInvalid("kron", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 21, __pyx_L3_error)
__pyx_L3_error:; __pyx_L3_error:;
__Pyx_AddTraceback("cythkrn.kron", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_AddTraceback("ckron.cythkrn.kron", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext(); __Pyx_RefNannyFinishContext();
return NULL; return NULL;
__pyx_L4_argument_unpacking_done:; __pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_7cythkrn_kron(__pyx_self, __pyx_v_a, __pyx_v_b); __pyx_r = __pyx_pf_5ckron_7cythkrn_kron(__pyx_self, __pyx_v_a, __pyx_v_b);
/* function exit code */ /* function exit code */
__Pyx_RefNannyFinishContext(); __Pyx_RefNannyFinishContext();
return __pyx_r; return __pyx_r;
} }
static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_b) { static PyObject *__pyx_pf_5ckron_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_a, __Pyx_memviewslice __pyx_v_b) {
int __pyx_v_i; int __pyx_v_i;
int __pyx_v_j; int __pyx_v_j;
int __pyx_v_k; int __pyx_v_k;
@ -2282,17 +2292,17 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
Py_ssize_t __pyx_t_18; Py_ssize_t __pyx_t_18;
__Pyx_RefNannySetupContext("kron", 0); __Pyx_RefNannySetupContext("kron", 0);
/* "cythkrn.pyx":8 /* "ckron/cythkrn.pyx":25
* @cython.wraparound(False) * Calculates a Kronicker product using C.
* def kron(double[:, ::1] a, double[:, ::1] b): * TODO: Crashes on 31 qubits since it overflows the int"""
* cdef int i = a.shape[0] # <<<<<<<<<<<<<< * cdef int i = a.shape[0] # <<<<<<<<<<<<<<
* cdef int j = a.shape[1] * cdef int j = a.shape[1]
* cdef int k = b.shape[0] * cdef int k = b.shape[0]
*/ */
__pyx_v_i = (__pyx_v_a.shape[0]); __pyx_v_i = (__pyx_v_a.shape[0]);
/* "cythkrn.pyx":9 /* "ckron/cythkrn.pyx":26
* def kron(double[:, ::1] a, double[:, ::1] b): * TODO: Crashes on 31 qubits since it overflows the int"""
* cdef int i = a.shape[0] * cdef int i = a.shape[0]
* cdef int j = a.shape[1] # <<<<<<<<<<<<<< * cdef int j = a.shape[1] # <<<<<<<<<<<<<<
* cdef int k = b.shape[0] * cdef int k = b.shape[0]
@ -2300,7 +2310,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
*/ */
__pyx_v_j = (__pyx_v_a.shape[1]); __pyx_v_j = (__pyx_v_a.shape[1]);
/* "cythkrn.pyx":10 /* "ckron/cythkrn.pyx":27
* cdef int i = a.shape[0] * cdef int i = a.shape[0]
* cdef int j = a.shape[1] * cdef int j = a.shape[1]
* cdef int k = b.shape[0] # <<<<<<<<<<<<<< * cdef int k = b.shape[0] # <<<<<<<<<<<<<<
@ -2309,7 +2319,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
*/ */
__pyx_v_k = (__pyx_v_b.shape[0]); __pyx_v_k = (__pyx_v_b.shape[0]);
/* "cythkrn.pyx":11 /* "ckron/cythkrn.pyx":28
* cdef int j = a.shape[1] * cdef int j = a.shape[1]
* cdef int k = b.shape[0] * cdef int k = b.shape[0]
* cdef int l = b.shape[1] # <<<<<<<<<<<<<< * cdef int l = b.shape[1] # <<<<<<<<<<<<<<
@ -2318,7 +2328,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
*/ */
__pyx_v_l = (__pyx_v_b.shape[1]); __pyx_v_l = (__pyx_v_b.shape[1]);
/* "cythkrn.pyx":12 /* "ckron/cythkrn.pyx":29
* cdef int k = b.shape[0] * cdef int k = b.shape[0]
* cdef int l = b.shape[1] * cdef int l = b.shape[1]
* cdef int onei = 1 # <<<<<<<<<<<<<< * cdef int onei = 1 # <<<<<<<<<<<<<<
@ -2327,7 +2337,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
*/ */
__pyx_v_onei = 1; __pyx_v_onei = 1;
/* "cythkrn.pyx":13 /* "ckron/cythkrn.pyx":30
* cdef int l = b.shape[1] * cdef int l = b.shape[1]
* cdef int onei = 1 * cdef int onei = 1
* cdef double oned = 1 # <<<<<<<<<<<<<< * cdef double oned = 1 # <<<<<<<<<<<<<<
@ -2336,23 +2346,23 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
*/ */
__pyx_v_oned = 1.0; __pyx_v_oned = 1.0;
/* "cythkrn.pyx":15 /* "ckron/cythkrn.pyx":32
* cdef double oned = 1 * cdef double oned = 1
* cdef int m, n * cdef int m, n
* result = np.zeros((i*k, j*l), float) # <<<<<<<<<<<<<< * result = np.zeros((i*k, j*l), float) # <<<<<<<<<<<<<<
* cdef double[:, ::1] result_v = result * cdef double[:, ::1] result_v = result
* for n in range(i): * for n in range(i):
*/ */
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3); __Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyInt_From_int((__pyx_v_i * __pyx_v_k)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_2 = __Pyx_PyInt_From_int((__pyx_v_i * __pyx_v_k)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_2);
__pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_j * __pyx_v_l)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_j * __pyx_v_l)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4); __Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@ -2375,7 +2385,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
#if CYTHON_FAST_PYCALL #if CYTHON_FAST_PYCALL
if (PyFunction_Check(__pyx_t_3)) { if (PyFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, ((PyObject *)(&PyFloat_Type))}; PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, ((PyObject *)(&PyFloat_Type))};
__pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@ -2384,14 +2394,14 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
#if CYTHON_FAST_PYCCALL #if CYTHON_FAST_PYCCALL
if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, ((PyObject *)(&PyFloat_Type))}; PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_5, ((PyObject *)(&PyFloat_Type))};
__pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
} else } else
#endif #endif
{ {
__pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_2 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2); __Pyx_GOTREF(__pyx_t_2);
if (__pyx_t_4) { if (__pyx_t_4) {
__Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __pyx_t_4 = NULL; __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __pyx_t_4 = NULL;
@ -2402,7 +2412,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
__Pyx_GIVEREF(((PyObject *)(&PyFloat_Type))); __Pyx_GIVEREF(((PyObject *)(&PyFloat_Type)));
PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, ((PyObject *)(&PyFloat_Type))); PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_6, ((PyObject *)(&PyFloat_Type)));
__pyx_t_5 = 0; __pyx_t_5 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
} }
@ -2410,19 +2420,19 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
__pyx_v_result = __pyx_t_1; __pyx_v_result = __pyx_t_1;
__pyx_t_1 = 0; __pyx_t_1 = 0;
/* "cythkrn.pyx":16 /* "ckron/cythkrn.pyx":33
* cdef int m, n * cdef int m, n
* result = np.zeros((i*k, j*l), float) * result = np.zeros((i*k, j*l), float)
* cdef double[:, ::1] result_v = result # <<<<<<<<<<<<<< * cdef double[:, ::1] result_v = result # <<<<<<<<<<<<<<
* for n in range(i): * for n in range(i):
* for m in range(k): * for m in range(k):
*/ */
__pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 16, __pyx_L1_error) __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 33, __pyx_L1_error)
__pyx_v_result_v = __pyx_t_7; __pyx_v_result_v = __pyx_t_7;
__pyx_t_7.memview = NULL; __pyx_t_7.memview = NULL;
__pyx_t_7.data = NULL; __pyx_t_7.data = NULL;
/* "cythkrn.pyx":17 /* "ckron/cythkrn.pyx":34
* result = np.zeros((i*k, j*l), float) * result = np.zeros((i*k, j*l), float)
* cdef double[:, ::1] result_v = result * cdef double[:, ::1] result_v = result
* for n in range(i): # <<<<<<<<<<<<<< * for n in range(i): # <<<<<<<<<<<<<<
@ -2434,7 +2444,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_n = __pyx_t_9; __pyx_v_n = __pyx_t_9;
/* "cythkrn.pyx":18 /* "ckron/cythkrn.pyx":35
* cdef double[:, ::1] result_v = result * cdef double[:, ::1] result_v = result
* for n in range(i): * for n in range(i):
* for m in range(k): # <<<<<<<<<<<<<< * for m in range(k): # <<<<<<<<<<<<<<
@ -2446,7 +2456,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
__pyx_v_m = __pyx_t_12; __pyx_v_m = __pyx_t_12;
/* "cythkrn.pyx":19 /* "ckron/cythkrn.pyx":36
* for n in range(i): * for n in range(i):
* for m in range(k): * for m in range(k):
* blas.dger(&l, &j, &oned, &b[m, 0], &onei, &a[n, 0], &onei, &result_v[m+k*n, 0], &l) # <<<<<<<<<<<<<< * blas.dger(&l, &j, &oned, &b[m, 0], &onei, &a[n, 0], &onei, &result_v[m+k*n, 0], &l) # <<<<<<<<<<<<<<
@ -2462,7 +2472,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
} }
} }
/* "cythkrn.pyx":20 /* "ckron/cythkrn.pyx":37
* for m in range(k): * for m in range(k):
* blas.dger(&l, &j, &oned, &b[m, 0], &onei, &a[n, 0], &onei, &result_v[m+k*n, 0], &l) * blas.dger(&l, &j, &oned, &b[m, 0], &onei, &a[n, 0], &onei, &result_v[m+k*n, 0], &l)
* return result # <<<<<<<<<<<<<< * return result # <<<<<<<<<<<<<<
@ -2472,12 +2482,12 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
__pyx_r = __pyx_v_result; __pyx_r = __pyx_v_result;
goto __pyx_L0; goto __pyx_L0;
/* "cythkrn.pyx":7 /* "ckron/cythkrn.pyx":21
* @cython.boundscheck(False) * @cython.boundscheck(False)
* @cython.wraparound(False) * @cython.wraparound(False)
* def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<< * def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<<
* cdef int i = a.shape[0] * """
* cdef int j = a.shape[1] * Calculates a Kronicker product using C.
*/ */
/* function exit code */ /* function exit code */
@ -2488,7 +2498,7 @@ static PyObject *__pyx_pf_7cythkrn_kron(CYTHON_UNUSED PyObject *__pyx_self, __Py
__Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_5);
__PYX_XDEC_MEMVIEW(&__pyx_t_7, 1); __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
__Pyx_AddTraceback("cythkrn.kron", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_AddTraceback("ckron.cythkrn.kron", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL; __pyx_r = NULL;
__pyx_L0:; __pyx_L0:;
__Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_result);
@ -15445,7 +15455,7 @@ static PyBufferProcs __pyx_tp_as_buffer_array = {
static PyTypeObject __pyx_type___pyx_array = { static PyTypeObject __pyx_type___pyx_array = {
PyVarObject_HEAD_INIT(0, 0) PyVarObject_HEAD_INIT(0, 0)
"cythkrn.array", /*tp_name*/ "ckron.cythkrn.array", /*tp_name*/
sizeof(struct __pyx_array_obj), /*tp_basicsize*/ sizeof(struct __pyx_array_obj), /*tp_basicsize*/
0, /*tp_itemsize*/ 0, /*tp_itemsize*/
__pyx_tp_dealloc_array, /*tp_dealloc*/ __pyx_tp_dealloc_array, /*tp_dealloc*/
@ -15564,7 +15574,7 @@ static PyMethodDef __pyx_methods_Enum[] = {
static PyTypeObject __pyx_type___pyx_MemviewEnum = { static PyTypeObject __pyx_type___pyx_MemviewEnum = {
PyVarObject_HEAD_INIT(0, 0) PyVarObject_HEAD_INIT(0, 0)
"cythkrn.Enum", /*tp_name*/ "ckron.cythkrn.Enum", /*tp_name*/
sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
0, /*tp_itemsize*/ 0, /*tp_itemsize*/
__pyx_tp_dealloc_Enum, /*tp_dealloc*/ __pyx_tp_dealloc_Enum, /*tp_dealloc*/
@ -15825,7 +15835,7 @@ static PyBufferProcs __pyx_tp_as_buffer_memoryview = {
static PyTypeObject __pyx_type___pyx_memoryview = { static PyTypeObject __pyx_type___pyx_memoryview = {
PyVarObject_HEAD_INIT(0, 0) PyVarObject_HEAD_INIT(0, 0)
"cythkrn.memoryview", /*tp_name*/ "ckron.cythkrn.memoryview", /*tp_name*/
sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
0, /*tp_itemsize*/ 0, /*tp_itemsize*/
__pyx_tp_dealloc_memoryview, /*tp_dealloc*/ __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
@ -15963,7 +15973,7 @@ static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = {
static PyTypeObject __pyx_type___pyx_memoryviewslice = { static PyTypeObject __pyx_type___pyx_memoryviewslice = {
PyVarObject_HEAD_INIT(0, 0) PyVarObject_HEAD_INIT(0, 0)
"cythkrn._memoryviewslice", /*tp_name*/ "ckron.cythkrn._memoryviewslice", /*tp_name*/
sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
0, /*tp_itemsize*/ 0, /*tp_itemsize*/
__pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/ __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
@ -16113,11 +16123,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
{&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
{&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
{&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1},
{&__pyx_n_s_ckron_cythkrn, __pyx_k_ckron_cythkrn, sizeof(__pyx_k_ckron_cythkrn), 0, 0, 1, 1},
{&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1},
{&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
{&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0},
{&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0},
{&__pyx_n_s_cythkrn, __pyx_k_cythkrn, sizeof(__pyx_k_cythkrn), 0, 0, 1, 1},
{&__pyx_kp_s_cythkrn_pyx, __pyx_k_cythkrn_pyx, sizeof(__pyx_k_cythkrn_pyx), 0, 0, 1, 0}, {&__pyx_kp_s_cythkrn_pyx, __pyx_k_cythkrn_pyx, sizeof(__pyx_k_cythkrn_pyx), 0, 0, 1, 0},
{&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
{&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1},
@ -16191,7 +16201,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
{0, 0, 0, 0, 0, 0, 0} {0, 0, 0, 0, 0, 0, 0}
}; };
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
__pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 17, __pyx_L1_error) __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 34, __pyx_L1_error)
__pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error) __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error)
__pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error) __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error)
__pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error) __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error)
@ -16400,17 +16410,17 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
__Pyx_GOTREF(__pyx_tuple__18); __Pyx_GOTREF(__pyx_tuple__18);
__Pyx_GIVEREF(__pyx_tuple__18); __Pyx_GIVEREF(__pyx_tuple__18);
/* "cythkrn.pyx":7 /* "ckron/cythkrn.pyx":21
* @cython.boundscheck(False) * @cython.boundscheck(False)
* @cython.wraparound(False) * @cython.wraparound(False)
* def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<< * def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<<
* cdef int i = a.shape[0] * """
* cdef int j = a.shape[1] * Calculates a Kronicker product using C.
*/ */
__pyx_tuple__19 = PyTuple_Pack(12, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_l, __pyx_n_s_onei, __pyx_n_s_oned, __pyx_n_s_m, __pyx_n_s_n, __pyx_n_s_result, __pyx_n_s_result_v); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 7, __pyx_L1_error) __pyx_tuple__19 = PyTuple_Pack(12, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_l, __pyx_n_s_onei, __pyx_n_s_oned, __pyx_n_s_m, __pyx_n_s_n, __pyx_n_s_result, __pyx_n_s_result_v); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__19); __Pyx_GOTREF(__pyx_tuple__19);
__Pyx_GIVEREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19);
__pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cythkrn_pyx, __pyx_n_s_kron, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 7, __pyx_L1_error) __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_cythkrn_pyx, __pyx_n_s_kron, 21, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 21, __pyx_L1_error)
/* "View.MemoryView":286 /* "View.MemoryView":286
* return self.name * return self.name
@ -16795,14 +16805,14 @@ if (!__Pyx_RefNanny) {
#if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
#endif #endif
if (__pyx_module_is_main_cythkrn) { if (__pyx_module_is_main_ckron__cythkrn) {
if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
} }
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
{ {
PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
if (!PyDict_GetItemString(modules, "cythkrn")) { if (!PyDict_GetItemString(modules, "ckron.cythkrn")) {
if (unlikely(PyDict_SetItemString(modules, "cythkrn", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) if (unlikely(PyDict_SetItemString(modules, "ckron.cythkrn", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
} }
} }
#endif #endif
@ -16823,31 +16833,31 @@ if (!__Pyx_RefNanny) {
if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
#endif #endif
/* "cythkrn.pyx":3 /* "ckron/cythkrn.pyx":3
* import cython * import cython
* cimport scipy.linalg.cython_blas as blas * cimport scipy.linalg.cython_blas as blas
* import numpy as np # <<<<<<<<<<<<<< * import numpy as np # <<<<<<<<<<<<<<
* *
* @cython.boundscheck(False) * """
*/ */
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error) __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error) if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* "cythkrn.pyx":7 /* "ckron/cythkrn.pyx":21
* @cython.boundscheck(False) * @cython.boundscheck(False)
* @cython.wraparound(False) * @cython.wraparound(False)
* def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<< * def kron(double[:, ::1] a, double[:, ::1] b): # <<<<<<<<<<<<<<
* cdef int i = a.shape[0] * """
* cdef int j = a.shape[1] * Calculates a Kronicker product using C.
*/ */
__pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7cythkrn_1kron, NULL, __pyx_n_s_cythkrn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5ckron_7cythkrn_1kron, NULL, __pyx_n_s_ckron_cythkrn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1); __Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_kron, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) if (PyDict_SetItem(__pyx_d, __pyx_n_s_kron, __pyx_t_1) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* "cythkrn.pyx":1 /* "ckron/cythkrn.pyx":1
* import cython # <<<<<<<<<<<<<< * import cython # <<<<<<<<<<<<<<
* cimport scipy.linalg.cython_blas as blas * cimport scipy.linalg.cython_blas as blas
* import numpy as np * import numpy as np
@ -17017,11 +17027,11 @@ if (!__Pyx_RefNanny) {
__Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_1);
if (__pyx_m) { if (__pyx_m) {
if (__pyx_d) { if (__pyx_d) {
__Pyx_AddTraceback("init cythkrn", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_AddTraceback("init ckron.cythkrn", __pyx_clineno, __pyx_lineno, __pyx_filename);
} }
Py_CLEAR(__pyx_m); Py_CLEAR(__pyx_m);
} else if (!PyErr_Occurred()) { } else if (!PyErr_Occurred()) {
PyErr_SetString(PyExc_ImportError, "init cythkrn"); PyErr_SetString(PyExc_ImportError, "init ckron.cythkrn");
} }
__pyx_L0:; __pyx_L0:;
__Pyx_RefNannyFinishContext(); __Pyx_RefNannyFinishContext();

View File

@ -2,9 +2,39 @@ import cython
cimport scipy.linalg.cython_blas as blas cimport scipy.linalg.cython_blas as blas
import numpy as np import numpy as np
"""
Type Storage size Value range
char 1 byte -128 to 127 or 0 to 255
unsigned char 1 byte 0 to 255
signed char 1 byte -128 to 127
int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647
unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295
short 2 bytes -32,768 to 32,767
unsigned short 2 bytes 0 to 65,535
long 8 bytes -9223372036854775808 to 9223372036854775807
unsigned long 8 bytes 0 to 18446744073709551615
"""
ctypedef unsigned long ULong
@cython.boundscheck(False) @cython.boundscheck(False)
@cython.wraparound(False) @cython.wraparound(False)
def kron(double[:, ::1] a, double[:, ::1] b): def kron(double[:, ::1] a, double[:, ::1] b):
"""
Calculates a Kronicker product using C.
TODO: Crashes on 31 qubits since it overflows the int
While calculating 31 qbits, get "negative dimensions" - hint towards "Int overflow":::
Traceback (most recent call last):
File "/usr/local/google/home/pisquared/workspace/quantum/load_test.py", line 127, in <module>
run_load_test(32)
File "/usr/local/google/home/pisquared/workspace/quantum/load_test.py", line 108, in run_load_test
m = kron(qbits)
File "ckron/cythkrn.pyx", line 15, in ckron.cythkrn.kron
result = np.zeros((i*k, j*l), float)
ValueError: negative dimensions are not allowed
"""
cdef int i = a.shape[0] cdef int i = a.shape[0]
cdef int j = a.shape[1] cdef int j = a.shape[1]
cdef int k = b.shape[0] cdef int k = b.shape[0]

View File

@ -83,7 +83,6 @@ def run_load_test(N=20):
28 268435456 2.0GiB 8.2B 2.0GiB 8.0B 2.0GiB 8.0B 9.52 28 268435456 2.0GiB 8.2B 2.0GiB 8.0B 2.0GiB 8.0B 9.52
29 536870912 4.0GiB 8.1B 4.0GiB 8.0B 4.0GiB 8.0B 19.32 29 536870912 4.0GiB 8.1B 4.0GiB 8.0B 4.0GiB 8.0B 19.32
30 1073741824 8.0GiB 8.0B 8.0GiB 8.0B 8.0GiB 8.0B 37.76 30 1073741824 8.0GiB 8.0B 8.0GiB 8.0B 8.0GiB 8.0B 37.76
""" """
_0 = Qubit(__0) _0 = Qubit(__0)
import os import os