{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Making Python faster\n", "====\n", "\n", "The Julia website has a set of benchmarks to show how fast it is. These are for toy functions, but serve as a nice set of examples for the basics of using `cython` and `numba` in Python.\n", "\n", "These examples are adapted from [here](https://www.ibm.com/developerworks/community/blogs/jfp/entry/python_meets_julia_micro_performance?lang=en)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", " | \n", " | Fortran | \n", "Julia | \n", "Python | \n", "R | \n", "Matlab | \n", "
---|---|---|---|---|---|---|
1 | \n", "fib | \n", "0.70 | \n", "2.11 | \n", "77.76 | \n", "533.52 | \n", "26.89 | \n", "
2 | \n", "parse_int | \n", "5.05 | \n", "1.45 | \n", "17.02 | \n", "45.73 | \n", "802.52 | \n", "
3 | \n", "quicksort | \n", "1.31 | \n", "1.15 | \n", "32.89 | \n", "264.54 | \n", "4.92 | \n", "
4 | \n", "mandel | \n", "0.81 | \n", "0.79 | \n", "15.32 | \n", "53.16 | \n", "7.58 | \n", "
5 | \n", "pi_sum | \n", "1.00 | \n", "1.00 | \n", "21.99 | \n", "9.56 | \n", "1.00 | \n", "
6 | \n", "rand_mat_stat | \n", "1.45 | \n", "1.66 | \n", "17.93 | \n", "14.56 | \n", "14.52 | \n", "
7 | \n", "rand_mat_mul | \n", "3.48 | \n", "1.02 | \n", "1.14 | \n", "1.57 | \n", "1.12 | \n", "
Generated by Cython 0.23.4
\n", "\n",
" Yellow lines hint at Python interaction.
\n",
" Click on a line that starts with a \"+
\" to see the C code that Cython generated for it.\n",
"
1:
\n",
"+2: cpdef long fib_cython(int n):\n", "
static PyObject *__pyx_pw_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_1fib_cython(PyObject *__pyx_self, PyObject *__pyx_arg_n); /*proto*/\n", "static long __pyx_f_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_fib_cython(int __pyx_v_n, CYTHON_UNUSED int __pyx_skip_dispatch) {\n", " long __pyx_r;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"fib_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_L0:;\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "/* Python wrapper */\n", "static PyObject *__pyx_pw_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_1fib_cython(PyObject *__pyx_self, PyObject *__pyx_arg_n); /*proto*/\n", "static PyObject *__pyx_pw_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_1fib_cython(PyObject *__pyx_self, PyObject *__pyx_arg_n) {\n", " int __pyx_v_n;\n", " PyObject *__pyx_r = 0;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"fib_cython (wrapper)\", 0);\n", " assert(__pyx_arg_n); {\n", " __pyx_v_n = __Pyx_PyInt_As_int(__pyx_arg_n); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;}\n", " }\n", " goto __pyx_L4_argument_unpacking_done;\n", " __pyx_L3_error:;\n", " __Pyx_AddTraceback(\"_cython_magic_a7383439b4d9daca4b8a6d569c53a027.fib_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __Pyx_RefNannyFinishContext();\n", " return NULL;\n", " __pyx_L4_argument_unpacking_done:;\n", " __pyx_r = __pyx_pf_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_fib_cython(__pyx_self, ((int)__pyx_v_n));\n", " int __pyx_lineno = 0;\n", " const char *__pyx_filename = NULL;\n", " int __pyx_clineno = 0;\n", "\n", " /* function exit code */\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "static PyObject *__pyx_pf_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_fib_cython(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_n) {\n", " PyObject *__pyx_r = NULL;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"fib_cython\", 0);\n", " __Pyx_XDECREF(__pyx_r);\n", " __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_f_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_fib_cython(__pyx_v_n, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __pyx_r = __pyx_t_1;\n", " __pyx_t_1 = 0;\n", " goto __pyx_L0;\n", "\n", " /* function exit code */\n", " __pyx_L1_error:;\n", " __Pyx_XDECREF(__pyx_t_1);\n", " __Pyx_AddTraceback(\"_cython_magic_a7383439b4d9daca4b8a6d569c53a027.fib_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __pyx_r = NULL;\n", " __pyx_L0:;\n", " __Pyx_XGIVEREF(__pyx_r);\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "
+3: if n<2:\n", "
__pyx_t_1 = ((__pyx_v_n < 2) != 0);\n", " if (__pyx_t_1) {\n", "/* … */\n", " }\n", "
+4: return n\n", "
__pyx_r = __pyx_v_n;\n", " goto __pyx_L0;\n", "
+5: return fib_cython(n-1) + fib_cython(n-2)\n", "
__pyx_r = (__pyx_f_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_fib_cython((__pyx_v_n - 1), 0) + __pyx_f_46_cython_magic_a7383439b4d9daca4b8a6d569c53a027_fib_cython((__pyx_v_n - 2), 0));\n", " goto __pyx_L0;\n", "
Generated by Cython 0.23.4
\n", "\n",
" Yellow lines hint at Python interaction.
\n",
" Click on a line that starts with a \"+
\" to see the C code that Cython generated for it.\n",
"
01:
\n",
"+02: def fib_cython_seq(int n):\n", "
/* Python wrapper */\n", "static PyObject *__pyx_pw_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_1fib_cython_seq(PyObject *__pyx_self, PyObject *__pyx_arg_n); /*proto*/\n", "static PyMethodDef __pyx_mdef_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_1fib_cython_seq = {\"fib_cython_seq\", (PyCFunction)__pyx_pw_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_1fib_cython_seq, METH_O, 0};\n", "static PyObject *__pyx_pw_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_1fib_cython_seq(PyObject *__pyx_self, PyObject *__pyx_arg_n) {\n", " int __pyx_v_n;\n", " PyObject *__pyx_r = 0;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"fib_cython_seq (wrapper)\", 0);\n", " assert(__pyx_arg_n); {\n", " __pyx_v_n = __Pyx_PyInt_As_int(__pyx_arg_n); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L3_error;}\n", " }\n", " goto __pyx_L4_argument_unpacking_done;\n", " __pyx_L3_error:;\n", " __Pyx_AddTraceback(\"_cython_magic_106e06d591bbaf06dba1a9e2a3411245.fib_cython_seq\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __Pyx_RefNannyFinishContext();\n", " return NULL;\n", " __pyx_L4_argument_unpacking_done:;\n", " __pyx_r = __pyx_pf_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_fib_cython_seq(__pyx_self, ((int)__pyx_v_n));\n", " int __pyx_lineno = 0;\n", " const char *__pyx_filename = NULL;\n", " int __pyx_clineno = 0;\n", "\n", " /* function exit code */\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "static PyObject *__pyx_pf_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_fib_cython_seq(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_n) {\n", " CYTHON_UNUSED int __pyx_v_i;\n", " long __pyx_v_a;\n", " long __pyx_v_b;\n", " long __pyx_v_tmp;\n", " PyObject *__pyx_r = NULL;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"fib_cython_seq\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_L1_error:;\n", " __Pyx_XDECREF(__pyx_t_3);\n", " __Pyx_AddTraceback(\"_cython_magic_106e06d591bbaf06dba1a9e2a3411245.fib_cython_seq\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __pyx_r = NULL;\n", " __pyx_L0:;\n", " __Pyx_XGIVEREF(__pyx_r);\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "/* … */\n", " __pyx_tuple_ = PyTuple_Pack(6, __pyx_n_s_n, __pyx_n_s_n, __pyx_n_s_i, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple_);\n", " __Pyx_GIVEREF(__pyx_tuple_);\n", "/* … */\n", " __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_106e06d591bbaf06dba1a9e2a3411245_1fib_cython_seq, NULL, __pyx_n_s_cython_magic_106e06d591bbaf06db); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_fib_cython_seq, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
03: cdef int i\n", "
04: cdef long a, b, tmp\n", "
+05: a = 0\n", "
__pyx_v_a = 0;\n", "
+06: b = 1\n", "
__pyx_v_b = 1;\n", "
+07: for i in range(n-1):\n", "
__pyx_t_1 = (__pyx_v_n - 1);\n", " for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {\n", " __pyx_v_i = __pyx_t_2;\n", "
+08: tmp = a\n", "
__pyx_v_tmp = __pyx_v_a;\n", "
+09: a = b\n", "
__pyx_v_a = __pyx_v_b;\n", "
+10: b += tmp\n", "
__pyx_v_b = (__pyx_v_b + __pyx_v_tmp);\n", " }\n", "
+11: return b\n", "
__Pyx_XDECREF(__pyx_r);\n", " __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_b); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_3);\n", " __pyx_r = __pyx_t_3;\n", " __pyx_t_3 = 0;\n", " goto __pyx_L0;\n", "
Generated by Cython 0.23.4
\n", "\n",
" Yellow lines hint at Python interaction.
\n",
" Click on a line that starts with a \"+
\" to see the C code that Cython generated for it.\n",
"
01:
\n",
"+02: import cython\n", "
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
+03: import numpy as np\n", "
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
04: cimport numpy as np\n", "
05:
\n",
"+06: def parse_int_cython():\n", "
/* Python wrapper */\n", "static PyObject *__pyx_pw_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_1parse_int_cython(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/\n", "static PyMethodDef __pyx_mdef_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_1parse_int_cython = {\"parse_int_cython\", (PyCFunction)__pyx_pw_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_1parse_int_cython, METH_NOARGS, 0};\n", "static PyObject *__pyx_pw_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_1parse_int_cython(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {\n", " PyObject *__pyx_r = 0;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"parse_int_cython (wrapper)\", 0);\n", " __pyx_r = __pyx_pf_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_parse_int_cython(__pyx_self);\n", "\n", " /* function exit code */\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "static PyObject *__pyx_pf_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_parse_int_cython(CYTHON_UNUSED PyObject *__pyx_self) {\n", " CYTHON_UNUSED int __pyx_v_i;\n", " int __pyx_v_n;\n", " int __pyx_v_m;\n", " PyObject *__pyx_r = NULL;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"parse_int_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_r = Py_None; __Pyx_INCREF(Py_None);\n", " goto __pyx_L0;\n", " __pyx_L1_error:;\n", " __Pyx_XDECREF(__pyx_t_2);\n", " __Pyx_XDECREF(__pyx_t_3);\n", " __Pyx_AddTraceback(\"_cython_magic_2d3f37e15c7a44b97af38354a036490d.parse_int_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __pyx_r = NULL;\n", " __pyx_L0:;\n", " __Pyx_XGIVEREF(__pyx_r);\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "/* … */\n", " __pyx_tuple__8 = PyTuple_Pack(3, __pyx_n_s_i, __pyx_n_s_n, __pyx_n_s_m); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple__8);\n", " __Pyx_GIVEREF(__pyx_tuple__8);\n", "/* … */\n", " __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_2d3f37e15c7a44b97af38354a036490d_1parse_int_cython, NULL, __pyx_n_s_cython_magic_2d3f37e15c7a44b97a); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_int_cython, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
07: cdef int i, n, m\n", "
+08: for i in range(1,1000):\n", "
for (__pyx_t_1 = 1; __pyx_t_1 < 0x3E8; __pyx_t_1+=1) {\n", " __pyx_v_i = __pyx_t_1;\n", "
+09: n = np.random.randint(0,2**31-1)\n", "
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_3);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_randint); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n", " __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_3);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n", " __pyx_v_n = __pyx_t_4;\n", "/* … */\n", " __pyx_tuple_ = PyTuple_Pack(2, __pyx_int_0, __pyx_int_2147483647); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple_);\n", " __Pyx_GIVEREF(__pyx_tuple_);\n", "
+10: m = int(hex(n),16)\n", "
__pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_3);\n", " __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_GIVEREF(__pyx_t_3);\n", " PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);\n", " __pyx_t_3 = 0;\n", " __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_hex, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_3);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_GIVEREF(__pyx_t_3);\n", " PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);\n", " __Pyx_INCREF(__pyx_int_16);\n", " __Pyx_GIVEREF(__pyx_int_16);\n", " PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_16);\n", " __pyx_t_3 = 0;\n", " __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyInt_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_3);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n", " __pyx_v_m = __pyx_t_4;\n", "
+11: assert m == n\n", "
#ifndef CYTHON_WITHOUT_ASSERTIONS\n", " if (unlikely(!Py_OptimizeFlag)) {\n", " if (unlikely(!((__pyx_v_m == __pyx_v_n) != 0))) {\n", " PyErr_SetNone(PyExc_AssertionError);\n", " {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " }\n", " }\n", " #endif\n", " }\n", "
Generated by Cython 0.23.4
\n", "\n",
" Yellow lines hint at Python interaction.
\n",
" Click on a line that starts with a \"+
\" to see the C code that Cython generated for it.\n",
"
01:
\n",
"+02: import cython\n", "
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
+03: import numpy as np\n", "
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
04:
\n",
"05: @cython.boundscheck(False)\n", "
06: @cython.wraparound(False)\n", "
+07: cdef double[:] qsort_kernel_cython(double[:] a, int lo, int hi):\n", "
static __Pyx_memviewslice __pyx_f_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_qsort_kernel_cython(__Pyx_memviewslice __pyx_v_a, int __pyx_v_lo, int __pyx_v_hi) {\n", " int __pyx_v_i;\n", " int __pyx_v_j;\n", " double __pyx_v_pivot;\n", " __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } };\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"qsort_kernel_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_L1_error:;\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);\n", " __pyx_r.data = NULL;\n", " __pyx_r.memview = NULL;\n", " __Pyx_AddTraceback(\"_cython_magic_2e0923d1649b2de5c2ff7f8deca79258.qsort_kernel_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", "\n", " goto __pyx_L2;\n", " __pyx_L0:;\n", " if (unlikely(!__pyx_r.memview)) {\n", " PyErr_SetString(PyExc_TypeError,\"Memoryview return value is not initialized\");\n", " }\n", " __pyx_L2:;\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "
08: cdef int i, j\n", "
09: cdef double pivot\n", "
10:
\n",
"+11: i = lo\n", "
__pyx_v_i = __pyx_v_lo;\n", "
+12: j = hi\n", "
__pyx_v_j = __pyx_v_hi;\n", "
+13: while i < hi:\n", "
while (1) {\n", " __pyx_t_1 = ((__pyx_v_i < __pyx_v_hi) != 0);\n", " if (!__pyx_t_1) break;\n", "
+14: pivot = a[(lo+hi) // 2]\n", "
__pyx_t_2 = __Pyx_div_long((__pyx_v_lo + __pyx_v_hi), 2);\n", " __pyx_v_pivot = (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_2 * __pyx_v_a.strides[0]) )));\n", "
+15: while i <= j:\n", "
while (1) {\n", " __pyx_t_1 = ((__pyx_v_i <= __pyx_v_j) != 0);\n", " if (!__pyx_t_1) break;\n", "
+16: while a[i] < pivot:\n", "
while (1) {\n", " __pyx_t_3 = __pyx_v_i;\n", " __pyx_t_1 = (((*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_3 * __pyx_v_a.strides[0]) ))) < __pyx_v_pivot) != 0);\n", " if (!__pyx_t_1) break;\n", "
+17: i += 1\n", "
__pyx_v_i = (__pyx_v_i + 1);\n", " }\n", "
+18: while a[j] > pivot:\n", "
while (1) {\n", " __pyx_t_4 = __pyx_v_j;\n", " __pyx_t_1 = (((*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_4 * __pyx_v_a.strides[0]) ))) > __pyx_v_pivot) != 0);\n", " if (!__pyx_t_1) break;\n", "
+19: j -= 1\n", "
__pyx_v_j = (__pyx_v_j - 1);\n", " }\n", "
+20: if i <= j:\n", "
__pyx_t_1 = ((__pyx_v_i <= __pyx_v_j) != 0);\n", " if (__pyx_t_1) {\n", "/* … */\n", " }\n", " }\n", "
+21: a[i], a[j] = a[j], a[i]\n", "
__pyx_t_5 = __pyx_v_j;\n", " __pyx_t_6 = (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_5 * __pyx_v_a.strides[0]) )));\n", " __pyx_t_7 = __pyx_v_i;\n", " __pyx_t_8 = (*((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_7 * __pyx_v_a.strides[0]) )));\n", " __pyx_t_9 = __pyx_v_i;\n", " *((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_9 * __pyx_v_a.strides[0]) )) = __pyx_t_6;\n", " __pyx_t_10 = __pyx_v_j;\n", " *((double *) ( /* dim=0 */ (__pyx_v_a.data + __pyx_t_10 * __pyx_v_a.strides[0]) )) = __pyx_t_8;\n", "
+22: i += 1\n", "
__pyx_v_i = (__pyx_v_i + 1);\n", "
+23: j -= 1\n", "
__pyx_v_j = (__pyx_v_j - 1);\n", "
+24: if lo < j:\n", "
__pyx_t_1 = ((__pyx_v_lo < __pyx_v_j) != 0);\n", " if (__pyx_t_1) {\n", "/* … */\n", " }\n", "
+25: qsort_kernel_cython(a, lo, j)\n", "
__pyx_t_11 = __pyx_f_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_qsort_kernel_cython(__pyx_v_a, __pyx_v_lo, __pyx_v_j); if (unlikely(!__pyx_t_11.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n",
" __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);\n",
"
+26: lo = i\n", "
__pyx_v_lo = __pyx_v_i;\n", "
+27: j = hi\n", "
__pyx_v_j = __pyx_v_hi;\n", " }\n", "
+28: return a\n", "
__PYX_INC_MEMVIEW(&__pyx_v_a, 0);\n", " __pyx_r = __pyx_v_a;\n", " goto __pyx_L0;\n", "
29:
\n",
"+30: def benchmark_qsort_cython():\n", "
/* Python wrapper */\n", "static PyObject *__pyx_pw_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_1benchmark_qsort_cython(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/\n", "static PyMethodDef __pyx_mdef_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_1benchmark_qsort_cython = {\"benchmark_qsort_cython\", (PyCFunction)__pyx_pw_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_1benchmark_qsort_cython, METH_NOARGS, 0};\n", "static PyObject *__pyx_pw_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_1benchmark_qsort_cython(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {\n", " PyObject *__pyx_r = 0;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"benchmark_qsort_cython (wrapper)\", 0);\n", " __pyx_r = __pyx_pf_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_benchmark_qsort_cython(__pyx_self);\n", "\n", " /* function exit code */\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "static PyObject *__pyx_pf_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_benchmark_qsort_cython(CYTHON_UNUSED PyObject *__pyx_self) {\n", " PyObject *__pyx_v_lst = NULL;\n", " PyObject *__pyx_r = NULL;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"benchmark_qsort_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_r = Py_None; __Pyx_INCREF(Py_None);\n", " goto __pyx_L0;\n", " __pyx_L1_error:;\n", " __Pyx_XDECREF(__pyx_t_1);\n", " __Pyx_XDECREF(__pyx_t_2);\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);\n", " __Pyx_AddTraceback(\"_cython_magic_2e0923d1649b2de5c2ff7f8deca79258.benchmark_qsort_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __pyx_r = NULL;\n", " __pyx_L0:;\n", " __Pyx_XDECREF(__pyx_v_lst);\n", " __Pyx_XGIVEREF(__pyx_r);\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "/* … */\n", " __pyx_tuple__15 = PyTuple_Pack(1, __pyx_n_s_lst); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple__15);\n", " __Pyx_GIVEREF(__pyx_tuple__15);\n", "/* … */\n", " __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_1benchmark_qsort_cython, NULL, __pyx_n_s_cython_magic_2e0923d1649b2de5c2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_benchmark_qsort_cython, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_cliburn_ipython_cython__c, __pyx_n_s_benchmark_qsort_cython, 30, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", "
+31: lst = np.random.random(5000)\n", "
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_random); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_random); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_v_lst = __pyx_t_2;\n", " __pyx_t_2 = 0;\n", "/* … */\n", " __pyx_tuple_ = PyTuple_Pack(1, __pyx_int_5000); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple_);\n", " __Pyx_GIVEREF(__pyx_tuple_);\n", "
+32: qsort_kernel_cython(lst, 0, len(lst)-1)\n", "
__pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_lst);\n", " if (unlikely(!__pyx_t_3.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __pyx_t_4 = PyObject_Length(__pyx_v_lst); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __pyx_t_5 = __pyx_f_46_cython_magic_2e0923d1649b2de5c2ff7f8deca79258_qsort_kernel_cython(__pyx_t_3, 0, (__pyx_t_4 - 1)); if (unlikely(!__pyx_t_5.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);\n", "
Generated by Cython 0.23.4
\n", "\n",
" Yellow lines hint at Python interaction.
\n",
" Click on a line that starts with a \"+
\" to see the C code that Cython generated for it.\n",
"
01:
\n",
"+02: cimport cython\n", "
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
+03: import numpy as np\n", "
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
04: cimport numpy as np\n", "
05:
\n",
"06: cdef extern from "complex.h":\n", "
07: double cabs(double complex)\n", "
08:
\n",
"+09: cdef int mandel_cython(double complex z):\n", "
static int __pyx_f_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_mandel_cython(__pyx_t_double_complex __pyx_v_z) {\n", " int __pyx_v_n;\n", " __pyx_t_double_complex __pyx_v_c;\n", " long __pyx_v_maxiter;\n", " int __pyx_r;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"mandel_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_L0:;\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "
10: cdef int n\n", "
11: cdef int max_iter\n", "
12: cdef double complex c\n", "
+13: maxiter = 80\n", "
__pyx_v_maxiter = 80;\n", "
+14: c = z\n", "
__pyx_v_c = __pyx_v_z;\n", "
+15: for n in range(maxiter):\n", "
__pyx_t_1 = __pyx_v_maxiter;\n", " for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {\n", " __pyx_v_n = __pyx_t_2;\n", "
+16: if cabs(z) > 2:\n", "
__pyx_t_3 = ((cabs(__pyx_v_z) > 2.0) != 0);\n", " if (__pyx_t_3) {\n", "/* … */\n", " }\n", "
+17: return n\n", "
__pyx_r = __pyx_v_n;\n", " goto __pyx_L0;\n", "
+18: z = z*z + c\n", "
__pyx_v_z = __Pyx_c_sum(__Pyx_c_prod(__pyx_v_z, __pyx_v_z), __pyx_v_c);\n", " }\n", "
+19: return maxiter\n", "
__pyx_r = __pyx_v_maxiter;\n", " goto __pyx_L0;\n", "
20:
\n",
"21: @cython.boundscheck(False)\n", "
22: @cython.wraparound(False)\n", "
+23: def mandelperf_cython():\n", "
/* Python wrapper */\n", "static PyObject *__pyx_pw_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_1mandelperf_cython(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/\n", "static PyMethodDef __pyx_mdef_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_1mandelperf_cython = {\"mandelperf_cython\", (PyCFunction)__pyx_pw_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_1mandelperf_cython, METH_NOARGS, 0};\n", "static PyObject *__pyx_pw_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_1mandelperf_cython(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {\n", " PyObject *__pyx_r = 0;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"mandelperf_cython (wrapper)\", 0);\n", " __pyx_r = __pyx_pf_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_mandelperf_cython(__pyx_self);\n", "\n", " /* function exit code */\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "static PyObject *__pyx_pf_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_mandelperf_cython(CYTHON_UNUSED PyObject *__pyx_self) {\n", " int __pyx_v_i;\n", " int __pyx_v_j;\n", " __Pyx_memviewslice __pyx_v_r1 = { 0, 0, { 0 }, { 0 }, { 0 } };\n", " __Pyx_memviewslice __pyx_v_r2 = { 0, 0, { 0 }, { 0 }, { 0 } };\n", " __Pyx_memviewslice __pyx_v_res = { 0, 0, { 0 }, { 0 }, { 0 } };\n", " PyObject *__pyx_r = NULL;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"mandelperf_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_L1_error:;\n", " __Pyx_XDECREF(__pyx_t_1);\n", " __Pyx_XDECREF(__pyx_t_2);\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);\n", " __Pyx_XDECREF(__pyx_t_4);\n", " __Pyx_XDECREF(__pyx_t_5);\n", " __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);\n", " __Pyx_AddTraceback(\"_cython_magic_49b54927ec0b1cfc50dc062249bda68a.mandelperf_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __pyx_r = NULL;\n", " __pyx_L0:;\n", " __PYX_XDEC_MEMVIEW(&__pyx_v_r1, 1);\n", " __PYX_XDEC_MEMVIEW(&__pyx_v_r2, 1);\n", " __PYX_XDEC_MEMVIEW(&__pyx_v_res, 1);\n", " __Pyx_XGIVEREF(__pyx_r);\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "/* … */\n", " __pyx_tuple__24 = PyTuple_Pack(5, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_r1, __pyx_n_s_r2, __pyx_n_s_res); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple__24);\n", " __Pyx_GIVEREF(__pyx_tuple__24);\n", "/* … */\n", " __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_1mandelperf_cython, NULL, __pyx_n_s_cython_magic_49b54927ec0b1cfc50); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_mandelperf_cython, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(0, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_cliburn_ipython_cython__c, __pyx_n_s_mandelperf_cython, 23, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", "
24: cdef int i, j\n", "
25:
\n",
"+26: cdef double[:] r1 = np.linspace(-2.0, 0.5, 26)\n", "
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_linspace); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1);\n", " if (unlikely(!__pyx_t_3.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_v_r1 = __pyx_t_3;\n", " __pyx_t_3.memview = NULL;\n", " __pyx_t_3.data = NULL;\n", "/* … */\n", " __pyx_tuple_ = PyTuple_Pack(3, __pyx_float_neg_2_0, __pyx_float_0_5, __pyx_int_26); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple_);\n", " __Pyx_GIVEREF(__pyx_tuple_);\n", "
+27: cdef double[:] r2 = np.linspace(-1.0, 1.0, 21)\n", "
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_linspace); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_1);\n", " if (unlikely(!__pyx_t_3.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_v_r2 = __pyx_t_3;\n", " __pyx_t_3.memview = NULL;\n", " __pyx_t_3.data = NULL;\n", "/* … */\n", " __pyx_tuple__2 = PyTuple_Pack(3, __pyx_float_neg_1_0, __pyx_float_1_0, __pyx_int_21); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple__2);\n", " __Pyx_GIVEREF(__pyx_tuple__2);\n", "
+28: cdef int[:,:] res = np.empty((26,21), dtype=np.int32)\n", "
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_2);\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "/* … */\n", " __pyx_tuple__3 = PyTuple_Pack(2, __pyx_int_26, __pyx_int_21); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple__3);\n", " __Pyx_GIVEREF(__pyx_tuple__3);\n", " __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_4);\n", " __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int32); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_5);\n", " __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n", " if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n", " __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__4, __pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_5);\n", " __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", " __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_t_5);\n", " if (unlikely(!__pyx_t_6.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n", " __pyx_v_res = __pyx_t_6;\n", " __pyx_t_6.memview = NULL;\n", " __pyx_t_6.data = NULL;\n", " __pyx_tuple__4 = PyTuple_Pack(1, __pyx_tuple__3); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple__4);\n", " __Pyx_GIVEREF(__pyx_tuple__4);\n", "
29:
\n",
"+30: for i in range(26):\n", "
for (__pyx_t_7 = 0; __pyx_t_7 < 26; __pyx_t_7+=1) {\n", " __pyx_v_i = __pyx_t_7;\n", "
+31: for j in range(21):\n", "
for (__pyx_t_8 = 0; __pyx_t_8 < 21; __pyx_t_8+=1) {\n", " __pyx_v_j = __pyx_t_8;\n", "
+32: res[i,j] = mandel_cython(r1[i] + r2[j]*1j)\n", "
__pyx_t_9 = __pyx_v_i;\n", " __pyx_t_10 = __pyx_v_j;\n", " __pyx_t_11 = __pyx_v_i;\n", " __pyx_t_12 = __pyx_v_j;\n", " *((int *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_res.data + __pyx_t_11 * __pyx_v_res.strides[0]) ) + __pyx_t_12 * __pyx_v_res.strides[1]) )) = __pyx_f_46_cython_magic_49b54927ec0b1cfc50dc062249bda68a_mandel_cython(__Pyx_c_sum(__pyx_t_double_complex_from_parts((*((double *) ( /* dim=0 */ (__pyx_v_r1.data + __pyx_t_9 * __pyx_v_r1.strides[0]) ))), 0), __Pyx_c_prod(__pyx_t_double_complex_from_parts((*((double *) ( /* dim=0 */ (__pyx_v_r2.data + __pyx_t_10 * __pyx_v_r2.strides[0]) ))), 0), __pyx_t_double_complex_from_parts(0, 1.0))));\n", " }\n", " }\n", "
+33: return res\n", "
__Pyx_XDECREF(__pyx_r);\n", " __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_res, 2, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_5);\n", " __pyx_r = __pyx_t_5;\n", " __pyx_t_5 = 0;\n", " goto __pyx_L0;\n", "
Generated by Cython 0.23.4
\n", "\n",
" Yellow lines hint at Python interaction.
\n",
" Click on a line that starts with a \"+
\" to see the C code that Cython generated for it.\n",
"
01:
\n",
"02: cimport cython\n", "
03:
\n",
"04: @cython.cdivision(True)\n", "
+05: def pisum_cython(int t):\n", "
/* Python wrapper */\n", "static PyObject *__pyx_pw_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_1pisum_cython(PyObject *__pyx_self, PyObject *__pyx_arg_t); /*proto*/\n", "static PyMethodDef __pyx_mdef_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_1pisum_cython = {\"pisum_cython\", (PyCFunction)__pyx_pw_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_1pisum_cython, METH_O, 0};\n", "static PyObject *__pyx_pw_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_1pisum_cython(PyObject *__pyx_self, PyObject *__pyx_arg_t) {\n", " int __pyx_v_t;\n", " PyObject *__pyx_r = 0;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"pisum_cython (wrapper)\", 0);\n", " assert(__pyx_arg_t); {\n", " __pyx_v_t = __Pyx_PyInt_As_int(__pyx_arg_t); if (unlikely((__pyx_v_t == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L3_error;}\n", " }\n", " goto __pyx_L4_argument_unpacking_done;\n", " __pyx_L3_error:;\n", " __Pyx_AddTraceback(\"_cython_magic_39bd6be55fc470028b8a8a158c919aa6.pisum_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __Pyx_RefNannyFinishContext();\n", " return NULL;\n", " __pyx_L4_argument_unpacking_done:;\n", " __pyx_r = __pyx_pf_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_pisum_cython(__pyx_self, ((int)__pyx_v_t));\n", " int __pyx_lineno = 0;\n", " const char *__pyx_filename = NULL;\n", " int __pyx_clineno = 0;\n", "\n", " /* function exit code */\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "\n", "static PyObject *__pyx_pf_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_pisum_cython(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_t) {\n", " double __pyx_v_sum;\n", " CYTHON_UNUSED int __pyx_v_j;\n", " int __pyx_v_k;\n", " PyObject *__pyx_r = NULL;\n", " __Pyx_RefNannyDeclarations\n", " __Pyx_RefNannySetupContext(\"pisum_cython\", 0);\n", "/* … */\n", " /* function exit code */\n", " __pyx_L1_error:;\n", " __Pyx_XDECREF(__pyx_t_4);\n", " __Pyx_AddTraceback(\"_cython_magic_39bd6be55fc470028b8a8a158c919aa6.pisum_cython\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n", " __pyx_r = NULL;\n", " __pyx_L0:;\n", " __Pyx_XGIVEREF(__pyx_r);\n", " __Pyx_RefNannyFinishContext();\n", " return __pyx_r;\n", "}\n", "/* … */\n", " __pyx_tuple_ = PyTuple_Pack(5, __pyx_n_s_t, __pyx_n_s_t, __pyx_n_s_sum, __pyx_n_s_j, __pyx_n_s_k); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_tuple_);\n", " __Pyx_GIVEREF(__pyx_tuple_);\n", "/* … */\n", " __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_39bd6be55fc470028b8a8a158c919aa6_1pisum_cython, NULL, __pyx_n_s_cython_magic_39bd6be55fc470028b); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_1);\n", " if (PyDict_SetItem(__pyx_d, __pyx_n_s_pisum_cython, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n", "
06: cdef double sum\n", "
07: cdef int j, k\n", "
08:
\n",
"+09: for j in range(1, 501):\n", "
for (__pyx_t_1 = 1; __pyx_t_1 < 0x1F5; __pyx_t_1+=1) {\n", " __pyx_v_j = __pyx_t_1;\n", "
+10: sum = 0.0\n", "
__pyx_v_sum = 0.0;\n", "
+11: for k in range(1, t+1):\n", "
__pyx_t_2 = (__pyx_v_t + 1);\n", " for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {\n", " __pyx_v_k = __pyx_t_3;\n", "
+12: sum += 1.0/(k*k)\n", "
__pyx_v_sum = (__pyx_v_sum + (1.0 / (__pyx_v_k * __pyx_v_k)));\n", " }\n", " }\n", "
+13: return sum\n", "
__Pyx_XDECREF(__pyx_r);\n", " __pyx_t_4 = PyFloat_FromDouble(__pyx_v_sum); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}\n", " __Pyx_GOTREF(__pyx_t_4);\n", " __pyx_r = __pyx_t_4;\n", " __pyx_t_4 = 0;\n", " goto __pyx_L0;\n", "
\n", " | \n", " | Julia | \n", "Python | \n", "P2J | \n", "SU | \n", "
---|---|---|---|---|---|
1 | \n", "fib | \n", "2.11 | \n", "77.76 | \n", "36.85 | \n", "1919.00 | \n", "
2 | \n", "parse_int | \n", "1.45 | \n", "17.02 | \n", "11.74 | \n", "3.20 | \n", "
3 | \n", "quicksort | \n", "1.15 | \n", "32.89 | \n", "28.60 | \n", "25.60 | \n", "
4 | \n", "mandel | \n", "0.79 | \n", "15.32 | \n", "19.39 | \n", "19.70 | \n", "
5 | \n", "pi_sum | \n", "1.00 | \n", "21.99 | \n", "21.99 | \n", "35.60 | \n", "
6 | \n", "rand_mat_stat | \n", "1.66 | \n", "17.93 | \n", "10.80 | \n", "2.10 | \n", "
7 | \n", "rand_mat_mul | \n", "1.02 | \n", "1.14 | \n", "1.12 | \n", "1.00 | \n", "