Generated by Cython 0.29.30
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: sparse_matrix_ext.c
+001: #cython: wraparound=False, boundscheck=False, cdivision=True, profile=False, nonecheck=False, overflowcheck=False, cdivision_warnings=False, unraisable_tracebacks=False
__pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
002: import cython
003: from libc.stdlib cimport malloc, free
004: from cpython.pycapsule cimport *
005: # import both numpy and the Cython declarations for numpy
+006: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
007: cimport numpy as np
008: # declare the interface to the C code
009: cdef extern from "sparse_dok.c":
010: ctypedef struct UT_hash_handle:
011: UT_hash_handle* tbl
012: void* prev
013: void* next
014: UT_hash_handle* hh_prev
015: UT_hash_handle* hh_next
016: void* key
017: unsigned keylen
018: unsigned hashv
019: ctypedef struct edge_key_t:
020: int i
021: int j
022: ctypedef struct edge_t:
023: edge_key_t key
024: double entry
025: UT_hash_handle hh
026: ctypedef struct sparse_dok:
027: edge_t* edgetable
028: int num_entries
029: int num_rows
030: void delete_dok_matrix(sparse_dok* mat)
031: void sort_by_key(sparse_dok* hashtable)
032: void add_dok_entry(sparse_dok* edgetable, edge_key_t key, double value)
033: sparse_dok* make_dok()
034:
+035: cdef delete_dok_cap(object cap):
static PyObject *__pyx_f_5anuga_9utilities_17sparse_matrix_ext_delete_dok_cap(PyObject *__pyx_v_cap) { sparse_dok *__pyx_v_kill; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("delete_dok_cap", 0); /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("anuga.utilities.sparse_matrix_ext.delete_dok_cap", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; }
+036: kill = <sparse_dok* > PyCapsule_GetPointer(cap, "sparse dok")
__pyx_t_1 = PyCapsule_GetPointer(__pyx_v_cap, ((char const *)"sparse dok")); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error) __pyx_v_kill = ((sparse_dok *)__pyx_t_1);
+037: if kill != NULL:
__pyx_t_2 = ((__pyx_v_kill != NULL) != 0); if (__pyx_t_2) { /* … */ }
+038: delete_dok_matrix(kill)
delete_dok_matrix(__pyx_v_kill);
039:
+040: cdef int _serialise(sparse_dok* dok, dict serial_dok):
static int __pyx_f_5anuga_9utilities_17sparse_matrix_ext__serialise(sparse_dok *__pyx_v_dok, PyObject *__pyx_v_serial_dok) { int __pyx_v_num_entries; CYTHON_UNUSED int __pyx_v_k; int __pyx_v_i; int __pyx_v_j; double __pyx_v_val; edge_t *__pyx_v_edge; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_serialise", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_WriteUnraisable("anuga.utilities.sparse_matrix_ext._serialise", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0); __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
041:
+042: sort_by_key(dok)
sort_by_key(__pyx_v_dok);
043: cdef int num_entries
044: cdef int k,i,j
045: cdef double val
046: cdef edge_t* edge
047:
+048: num_entries = dok.num_entries
__pyx_t_1 = __pyx_v_dok->num_entries; __pyx_v_num_entries = __pyx_t_1;
+049: edge = dok.edgetable
__pyx_t_2 = __pyx_v_dok->edgetable; __pyx_v_edge = __pyx_t_2;
050:
+051: for k in xrange(num_entries):
__pyx_t_1 = __pyx_v_num_entries; __pyx_t_3 = __pyx_t_1; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_k = __pyx_t_4;
052:
+053: i = edge.key.i
__pyx_t_5 = __pyx_v_edge->key.i; __pyx_v_i = __pyx_t_5;
+054: j = edge.key.j
__pyx_t_5 = __pyx_v_edge->key.j; __pyx_v_j = __pyx_t_5;
+055: val = edge.entry
__pyx_t_6 = __pyx_v_edge->entry; __pyx_v_val = __pyx_t_6;
056:
+057: serial_dok[(i,j)] = val
__pyx_t_7 = PyFloat_FromDouble(__pyx_v_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (unlikely(__pyx_v_serial_dok == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_j); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9); __pyx_t_8 = 0; __pyx_t_9 = 0; if (unlikely(PyDict_SetItem(__pyx_v_serial_dok, __pyx_t_10, __pyx_t_7) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
058:
+059: edge = <edge_t* > edge.hh.next
__pyx_v_edge = ((edge_t *)__pyx_v_edge->hh.next); }
060:
+061: return 0
__pyx_r = 0; goto __pyx_L0;
062:
+063: cdef int _deserialise(sparse_dok* dok, dict serial_dok):
static int __pyx_f_5anuga_9utilities_17sparse_matrix_ext__deserialise(sparse_dok *__pyx_v_dok, PyObject *__pyx_v_serial_dok) { int __pyx_v_num_entries; int __pyx_v_k; int __pyx_v_i; int __pyx_v_j; double __pyx_v_val; CYTHON_UNUSED PyObject *__pyx_v_items = 0; PyObject *__pyx_v_keys = 0; edge_key_t __pyx_v_key; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_deserialise", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_WriteUnraisable("anuga.utilities.sparse_matrix_ext._deserialise", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_items); __Pyx_XDECREF(__pyx_v_keys); __Pyx_RefNannyFinishContext(); return __pyx_r; }
064:
065: cdef int num_entries, k, i, j
066: cdef double val
067: cdef list items
068: cdef list keys
069: cdef edge_key_t key
070:
+071: items = serial_dok.items()
if (unlikely(__pyx_v_serial_dok == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); __PYX_ERR(0, 71, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyDict_Items(__pyx_v_serial_dok); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 71, __pyx_L1_error) __pyx_v_items = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+072: keys = serial_dok.keys()
if (unlikely(__pyx_v_serial_dok == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); __PYX_ERR(0, 72, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyDict_Keys(__pyx_v_serial_dok); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 72, __pyx_L1_error) __pyx_v_keys = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+073: num_entries = len(serial_dok)
if (unlikely(__pyx_v_serial_dok == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 73, __pyx_L1_error) } __pyx_t_2 = PyDict_Size(__pyx_v_serial_dok); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 73, __pyx_L1_error) __pyx_v_num_entries = __pyx_t_2;
074:
+075: for k in xrange(num_entries):
__pyx_t_3 = __pyx_v_num_entries; __pyx_t_4 = __pyx_t_3; for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { __pyx_v_k = __pyx_t_5;
076:
+077: val = serial_dok[keys[k]]
if (unlikely(__pyx_v_serial_dok == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 77, __pyx_L1_error) } if (unlikely(__pyx_v_keys == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 77, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_serial_dok, PyList_GET_ITEM(__pyx_v_keys, __pyx_v_k)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_val = __pyx_t_6;
078:
+079: i = keys[k][0]
if (unlikely(__pyx_v_keys == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 79, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_keys, __pyx_v_k), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_i = __pyx_t_7;
+080: j = keys[k][1]
if (unlikely(__pyx_v_keys == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 80, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_keys, __pyx_v_k), 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_j = __pyx_t_7;
081:
+082: key.i = i
__pyx_v_key.i = __pyx_v_i;
+083: key.j = j
__pyx_v_key.j = __pyx_v_j;
084:
+085: add_dok_entry(dok, key, val)
add_dok_entry(__pyx_v_dok, __pyx_v_key, __pyx_v_val); }
086:
+087: return 0
__pyx_r = 0; goto __pyx_L0;
088:
+089: def serialise_dok(object sparse_dok_cap):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_9utilities_17sparse_matrix_ext_1serialise_dok(PyObject *__pyx_self, PyObject *__pyx_v_sparse_dok_cap); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_9utilities_17sparse_matrix_ext_1serialise_dok = {"serialise_dok", (PyCFunction)__pyx_pw_5anuga_9utilities_17sparse_matrix_ext_1serialise_dok, METH_O, 0}; static PyObject *__pyx_pw_5anuga_9utilities_17sparse_matrix_ext_1serialise_dok(PyObject *__pyx_self, PyObject *__pyx_v_sparse_dok_cap) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("serialise_dok (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_9utilities_17sparse_matrix_ext_serialise_dok(__pyx_self, ((PyObject *)__pyx_v_sparse_dok_cap)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_9utilities_17sparse_matrix_ext_serialise_dok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sparse_dok_cap) { int __pyx_v_err; sparse_dok *__pyx_v_dok; PyObject *__pyx_v_serial_sparse_dok = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("serialise_dok", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("anuga.utilities.sparse_matrix_ext.serialise_dok", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_serial_sparse_dok); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__3 = PyTuple_Pack(4, __pyx_n_s_sparse_dok_cap, __pyx_n_s_err, __pyx_n_s_dok, __pyx_n_s_serial_sparse_dok); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_9utilities_17sparse_matrix_ext_1serialise_dok, NULL, __pyx_n_s_anuga_utilities_sparse_matrix_ex_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_serialise_dok, __pyx_t_1) < 0) __PYX_ERR(0, 89, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_utilities_sparse_matrix_ex, __pyx_n_s_serialise_dok, 89, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 89, __pyx_L1_error)
090:
091: cdef int err
092: cdef sparse_dok* dok
093: cdef dict serial_sparse_dok
094:
+095: dok = <sparse_dok* > PyCapsule_GetPointer(sparse_dok_cap, "sparse dok")
__pyx_t_1 = PyCapsule_GetPointer(__pyx_v_sparse_dok_cap, ((char const *)"sparse dok")); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L1_error) __pyx_v_dok = ((sparse_dok *)__pyx_t_1);
+096: serial_sparse_dok = {}
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_serial_sparse_dok = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
097:
+098: err = _serialise(dok, serial_sparse_dok)
__pyx_v_err = __pyx_f_5anuga_9utilities_17sparse_matrix_ext__serialise(__pyx_v_dok, __pyx_v_serial_sparse_dok);
099:
+100: assert err == 0, "sparse_matrix.serialise_dok: error in serialising sparse_dok"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_sparse_matrix_serialise_dok_erro); __PYX_ERR(0, 100, __pyx_L1_error) } } #endif
101:
+102: return serial_sparse_dok
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_serial_sparse_dok); __pyx_r = __pyx_v_serial_sparse_dok; goto __pyx_L0;
103:
+104: def deserialise_dok(dict serial_sparse_dok):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_9utilities_17sparse_matrix_ext_3deserialise_dok(PyObject *__pyx_self, PyObject *__pyx_v_serial_sparse_dok); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_9utilities_17sparse_matrix_ext_3deserialise_dok = {"deserialise_dok", (PyCFunction)__pyx_pw_5anuga_9utilities_17sparse_matrix_ext_3deserialise_dok, METH_O, 0}; static PyObject *__pyx_pw_5anuga_9utilities_17sparse_matrix_ext_3deserialise_dok(PyObject *__pyx_self, PyObject *__pyx_v_serial_sparse_dok) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("deserialise_dok (wrapper)", 0); if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_serial_sparse_dok), (&PyDict_Type), 1, "serial_sparse_dok", 1))) __PYX_ERR(0, 104, __pyx_L1_error) __pyx_r = __pyx_pf_5anuga_9utilities_17sparse_matrix_ext_2deserialise_dok(__pyx_self, ((PyObject*)__pyx_v_serial_sparse_dok)); 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; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_9utilities_17sparse_matrix_ext_2deserialise_dok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_serial_sparse_dok) { CYTHON_UNUSED int __pyx_v_err; sparse_dok *__pyx_v_dok; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("deserialise_dok", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("anuga.utilities.sparse_matrix_ext.deserialise_dok", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__5 = PyTuple_Pack(4, __pyx_n_s_serial_sparse_dok, __pyx_n_s_err, __pyx_n_s_sparse_dok_cap, __pyx_n_s_dok); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 104, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_9utilities_17sparse_matrix_ext_3deserialise_dok, NULL, __pyx_n_s_anuga_utilities_sparse_matrix_ex_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_deserialise_dok, __pyx_t_1) < 0) __PYX_ERR(0, 104, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
105:
106: cdef int err
107: cdef object sparse_dok_cap
108: cdef sparse_dok* dok
109:
+110: dok = make_dok()
__pyx_v_dok = make_dok();
111:
+112: err = _deserialise(dok, serial_sparse_dok)
__pyx_v_err = __pyx_f_5anuga_9utilities_17sparse_matrix_ext__deserialise(__pyx_v_dok, __pyx_v_serial_sparse_dok);
113:
+114: return PyCapsule_New(<void* > dok, "sparse dok", <PyCapsule_Destructor> delete_dok_cap)
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyCapsule_New(((void *)__pyx_v_dok), ((char const *)"sparse dok"), ((PyCapsule_Destructor)__pyx_f_5anuga_9utilities_17sparse_matrix_ext_delete_dok_cap)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;