Generated by Cython 0.29.28
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: metis_ext.c
+01: #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;
02: import cython
03: from libc.stdlib cimport malloc, free
04: # import both numpy and the Cython declarations for numpy
+05: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
06: cimport numpy as np
07:
+08: np.import_array()
__pyx_t_2 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8, __pyx_L1_error)
09:
10: ctypedef int idxtype
11:
12: cdef extern from 'metis_bridge.c':
13: void bridge_partMeshNodal(int* ne, int* nn, idxtype* elmnts, int* etype, int* numflag, int* nparts, int* edgecut, idxtype* epart, idxtype* npart)
14:
+15: def partMeshNodal(int ne, int nn, object elements, int etype, int nparts):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_9pymetis_4_9metis_ext_1partMeshNodal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_9pymetis_4_9metis_ext_1partMeshNodal = {"partMeshNodal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_9pymetis_4_9metis_ext_1partMeshNodal, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_9pymetis_4_9metis_ext_1partMeshNodal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_v_ne; int __pyx_v_nn; PyObject *__pyx_v_elements = 0; int __pyx_v_etype; int __pyx_v_nparts; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("partMeshNodal (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ne,&__pyx_n_s_nn,&__pyx_n_s_elements,&__pyx_n_s_etype,&__pyx_n_s_nparts,0}; PyObject* values[5] = {0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ne)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nn)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("partMeshNodal", 1, 5, 5, 1); __PYX_ERR(0, 15, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_elements)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("partMeshNodal", 1, 5, 5, 2); __PYX_ERR(0, 15, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_etype)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("partMeshNodal", 1, 5, 5, 3); __PYX_ERR(0, 15, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nparts)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("partMeshNodal", 1, 5, 5, 4); __PYX_ERR(0, 15, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "partMeshNodal") < 0)) __PYX_ERR(0, 15, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); } __pyx_v_ne = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_ne == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 15, __pyx_L3_error) __pyx_v_nn = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nn == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 15, __pyx_L3_error) __pyx_v_elements = values[2]; __pyx_v_etype = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_etype == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 15, __pyx_L3_error) __pyx_v_nparts = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_nparts == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 15, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("partMeshNodal", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 15, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.pymetis_4.metis_ext.partMeshNodal", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5anuga_9pymetis_4_9metis_ext_partMeshNodal(__pyx_self, __pyx_v_ne, __pyx_v_nn, __pyx_v_elements, __pyx_v_etype, __pyx_v_nparts); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_9pymetis_4_9metis_ext_partMeshNodal(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_ne, int __pyx_v_nn, PyObject *__pyx_v_elements, int __pyx_v_etype, int __pyx_v_nparts) { int __pyx_v_i; int __pyx_v_edgecut; int __pyx_v_numflag; int __pyx_v_malloc_elem_c_arr; PyArrayObject *__pyx_v_elem_arr = 0; PyArrayObject *__pyx_v_epart_pyarr = 0; PyArrayObject *__pyx_v_npart_pyarr = 0; npy_intp *__pyx_v_dims; __pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *__pyx_v_elem_c_arr; __pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *__pyx_v_epart; __pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *__pyx_v_npart; __Pyx_LocalBuf_ND __pyx_pybuffernd_epart_pyarr; __Pyx_Buffer __pyx_pybuffer_epart_pyarr; __Pyx_LocalBuf_ND __pyx_pybuffernd_npart_pyarr; __Pyx_Buffer __pyx_pybuffer_npart_pyarr; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("partMeshNodal", 0); __pyx_pybuffer_epart_pyarr.pybuffer.buf = NULL; __pyx_pybuffer_epart_pyarr.refcount = 0; __pyx_pybuffernd_epart_pyarr.data = NULL; __pyx_pybuffernd_epart_pyarr.rcbuffer = &__pyx_pybuffer_epart_pyarr; __pyx_pybuffer_npart_pyarr.pybuffer.buf = NULL; __pyx_pybuffer_npart_pyarr.refcount = 0; __pyx_pybuffernd_npart_pyarr.data = NULL; __pyx_pybuffernd_npart_pyarr.rcbuffer = &__pyx_pybuffer_npart_pyarr; /* … */ /* function exit code */ __pyx_L1_error:; __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); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.pymetis_4.metis_ext.partMeshNodal", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_elem_arr); __Pyx_XDECREF((PyObject *)__pyx_v_epart_pyarr); __Pyx_XDECREF((PyObject *)__pyx_v_npart_pyarr); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__3 = PyTuple_Pack(16, __pyx_n_s_ne, __pyx_n_s_nn, __pyx_n_s_elements, __pyx_n_s_etype, __pyx_n_s_nparts, __pyx_n_s_i, __pyx_n_s_edgecut, __pyx_n_s_numflag, __pyx_n_s_malloc_elem_c_arr, __pyx_n_s_elem_arr, __pyx_n_s_epart_pyarr, __pyx_n_s_npart_pyarr, __pyx_n_s_dims, __pyx_n_s_elem_c_arr, __pyx_n_s_epart, __pyx_n_s_npart); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_9pymetis_4_9metis_ext_1partMeshNodal, NULL, __pyx_n_s_anuga_pymetis_4_metis_ext); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_partMeshNodal, __pyx_t_1) < 0) __PYX_ERR(0, 15, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
16:
17: cdef int i
18: cdef int edgecut
+19: cdef int numflag = 0
__pyx_v_numflag = 0;
+20: cdef int malloc_elem_c_arr = 0
__pyx_v_malloc_elem_c_arr = 0;
21: cdef np.ndarray elem_arr
22: cdef np.ndarray[int, ndim=1, mode="c"] epart_pyarr
23: cdef np.ndarray[int, ndim=1, mode="c"] npart_pyarr
24: cdef np.npy_intp* dims
25:
26: cdef idxtype* elem_c_arr
27: cdef idxtype* epart
28: cdef idxtype* npart
29:
+30: assert isinstance(elements,list) or isinstance(elements,np.ndarray), "elements must be a list or an array"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { __pyx_t_2 = PyList_Check(__pyx_v_elements); __pyx_t_3 = (__pyx_t_2 != 0); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L3_bool_binop_done; } __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_elements, __pyx_ptype_5numpy_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); __pyx_t_1 = __pyx_t_2; __pyx_L3_bool_binop_done:; if (unlikely(!__pyx_t_1)) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_elements_must_be_a_list_or_an_ar); __PYX_ERR(0, 30, __pyx_L1_error) } } #endif
31:
+32: elem_arr = np.ascontiguousarray(np.array(elements, dtype=int))
__Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_elements); __Pyx_GIVEREF(__pyx_v_elements); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_elements); __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 32, __pyx_L1_error) __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_8 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_8)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_9); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 32, __pyx_L1_error) __pyx_v_elem_arr = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0;
33:
+34: if elem_arr.dtype == 'int64':
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_elem_arr), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_int64, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 34, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L5; }
+35: elem_c_arr = <idxtype* > malloc(elem_arr.shape[0] * sizeof(idxtype))
__pyx_v_elem_c_arr = ((__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *)malloc(((__pyx_v_elem_arr->dimensions[0]) * (sizeof(__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype)))));
+36: malloc_elem_c_arr = 1
__pyx_v_malloc_elem_c_arr = 1;
+37: if not(elem_c_arr):
__pyx_t_1 = ((!(__pyx_v_elem_c_arr != 0)) != 0); if (__pyx_t_1) { /* … */ }
+38: return None
__Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0;
+39: for i in xrange(elem_arr.shape[0]):
__pyx_t_10 = (__pyx_v_elem_arr->dimensions[0]); __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_i = __pyx_t_12;
+40: elem_c_arr[i] = <idxtype> elem_arr[i]
__pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_elem_arr), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 40, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; (__pyx_v_elem_c_arr[__pyx_v_i]) = ((__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype)__pyx_t_13);
+41: if elem_c_arr[i] != elem_arr[i]:
__pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_elem_c_arr[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 41, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_elem_arr), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 41, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 41, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 41, __pyx_L1_error) __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if (__pyx_t_1) { /* … */ } }
+42: free(elem_c_arr)
free(__pyx_v_elem_c_arr);
+43: return None
__Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0;
44: else:
+45: elem_c_arr = <idxtype* > elem_arr.data
/*else*/ { __pyx_v_elem_c_arr = ((__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *)__pyx_v_elem_arr->data); } __pyx_L5:;
46:
+47: epart = <idxtype* > malloc(ne * sizeof(idxtype))
__pyx_v_epart = ((__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *)malloc((__pyx_v_ne * (sizeof(__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype)))));
+48: if epart == NULL:
__pyx_t_1 = ((__pyx_v_epart == NULL) != 0); if (__pyx_t_1) { /* … */ }
+49: if malloc_elem_c_arr:
__pyx_t_1 = (__pyx_v_malloc_elem_c_arr != 0); if (__pyx_t_1) { /* … */ }
+50: free(elem_c_arr)
free(__pyx_v_elem_c_arr);
+51: return None
__Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0;
52:
+53: npart = <idxtype* > malloc(nn * sizeof(idxtype))
__pyx_v_npart = ((__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype *)malloc((__pyx_v_nn * (sizeof(__pyx_t_5anuga_9pymetis_4_9metis_ext_idxtype)))));
+54: if npart == NULL:
__pyx_t_1 = ((__pyx_v_npart == NULL) != 0); if (__pyx_t_1) { /* … */ }
+55: if malloc_elem_c_arr:
__pyx_t_1 = (__pyx_v_malloc_elem_c_arr != 0); if (__pyx_t_1) { /* … */ }
+56: free(elem_c_arr)
free(__pyx_v_elem_c_arr);
+57: free(epart)
free(__pyx_v_epart);
+58: return None
__Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0;
59:
+60: bridge_partMeshNodal(&ne, &nn, elem_c_arr, &etype, &numflag, &nparts, &edgecut, epart, npart)
bridge_partMeshNodal((&__pyx_v_ne), (&__pyx_v_nn), __pyx_v_elem_c_arr, (&__pyx_v_etype), (&__pyx_v_numflag), (&__pyx_v_nparts), (&__pyx_v_edgecut), __pyx_v_epart, __pyx_v_npart);
61:
+62: dims = <np.npy_intp* > malloc(2 * sizeof(np.npy_intp))
__pyx_v_dims = ((npy_intp *)malloc((2 * (sizeof(npy_intp)))));
63:
+64: dims[0] = ne
(__pyx_v_dims[0]) = __pyx_v_ne;
+65: epart_pyarr = np.PyArray_SimpleNewFromData(1, dims, np.NPY_INT32, epart)
__pyx_t_9 = PyArray_SimpleNewFromData(1, __pyx_v_dims, NPY_INT32, __pyx_v_epart); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 65, __pyx_L1_error) __pyx_t_14 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer, (PyObject*)__pyx_v_epart_pyarr, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17); } __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0; } __pyx_pybuffernd_epart_pyarr.diminfo[0].strides = __pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epart_pyarr.diminfo[0].shape = __pyx_pybuffernd_epart_pyarr.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 65, __pyx_L1_error) } __pyx_t_14 = 0; __pyx_v_epart_pyarr = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0;
66:
+67: dims[0] = nn
(__pyx_v_dims[0]) = __pyx_v_nn;
+68: npart_pyarr = np.PyArray_SimpleNewFromData(1, dims, np.NPY_INT32, npart)
__pyx_t_9 = PyArray_SimpleNewFromData(1, __pyx_v_dims, NPY_INT32, __pyx_v_npart); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 68, __pyx_L1_error) __pyx_t_18 = ((PyArrayObject *)__pyx_t_9); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer); __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_12 < 0)) { PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer, (PyObject*)__pyx_v_npart_pyarr, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15); } __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0; } __pyx_pybuffernd_npart_pyarr.diminfo[0].strides = __pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_npart_pyarr.diminfo[0].shape = __pyx_pybuffernd_npart_pyarr.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 68, __pyx_L1_error) } __pyx_t_18 = 0; __pyx_v_npart_pyarr = ((PyArrayObject *)__pyx_t_9); __pyx_t_9 = 0;
69:
+70: if malloc_elem_c_arr:
__pyx_t_1 = (__pyx_v_malloc_elem_c_arr != 0); if (__pyx_t_1) { /* … */ }
+71: free(elem_c_arr)
free(__pyx_v_elem_c_arr);
72:
+73: free(dims)
free(__pyx_v_dims);
74:
+75: return edgecut, np.ascontiguousarray(epart_pyarr), np.ascontiguousarray(npart_pyarr)
__Pyx_XDECREF(__pyx_r); __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_edgecut); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_8, function); } } __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_4, ((PyObject *)__pyx_v_epart_pyarr)) : __Pyx_PyObject_CallOneArg(__pyx_t_8, ((PyObject *)__pyx_v_epart_pyarr)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } __pyx_t_8 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, ((PyObject *)__pyx_v_npart_pyarr)) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_npart_pyarr)); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_8); __pyx_t_9 = 0; __pyx_t_6 = 0; __pyx_t_8 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0;
76: