From fa5623b196dd8fd0ca74c38b22dfdf9efe134d46 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Thu, 17 Aug 2023 17:44:10 -0400 Subject: [PATCH 01/29] improved docs and fixed seg fault --- CHANGES.md | 8 + CyRK/cy/cysolver.pyx | 49 +- Tests/Cython Class Experiments.ipynb | 7549 ++++++++++++++------------ 3 files changed, 4265 insertions(+), 3341 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 436093a..db3ec4b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,14 @@ ## 2023 +### v0.7.0 + +Other Changes +- Improved documentation for `CySolver`'s `diffeq` method template. + +Bug Fixes: +- Fixed potential seg fault when accessing `CySolver`'s arg_array_view. + #### v0.6.2 New Features - Added `auto_solve` key word to `CySolver` class. This flag defaults to True. If True, then the solver will automatically call `self.solve()` after initialization. diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index bfa5752..3e8b323 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -114,6 +114,9 @@ cdef class CySolver: cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array if args is None: self.num_args = 0 + # Even though there are no args, initialize the array to something to avoid seg faults + arg_array = np.empty(0, dype=np.float64, order='C') + self.arg_array_view = arg_array else: self.num_args = len(args) arg_array = np.empty(self.num_args, dtype=np.float64, order='C') @@ -1094,22 +1097,42 @@ cdef class CySolver: cdef void diffeq(self): # This is a template function that should be overriden by the user's subclass. - # The diffeq can use live variables: - # self.t_new - # self.y_new_view[:] - # (size of array is self.y_size) + # The diffeq can use live variables which are automatically updated before each call. + # self.t_new: The current "time" (of course, depending on your problem, it may not actually be _time_ per se). + # self.y_new_view[:]: The current y value(s) stored as an array. + # For example... + # ```python + # cdef double t_sin + # # You will want to import the c version of sin "from libc.math cimport sin" at the top of your file. + # t_sin = sin(self.t_new) + # y0 = self.y_new_view[0] + # y1 = self.y_new_view[1] + # ``` # Can also use other optional global attributes like... - # self.args (size of args is self.num_args) + # self.arg_array_view (size of self.arg_array_view is self.num_args). For example... + # ```python + # cdef double a, b + # a = self.arg_array_view[0] + # b = self.arg_array_view[1] + # ``` + # Currently, these args must be doubles (floats). - # This function must set the dy_new variables - # self.dy_new_view[:] = ... (size of array is self.y_size) - - # It can also set additional outputs that the user may want to capture - # self.extra_output_view[:] = ... - # Currently, these additional outputs must be stored as floats. - # Note that if extra output is used then the variables `capture_extra` and `num_extra` - # must be set during solver __init__. + # This function *must* set new values to the dy_new_view variable (size of array is self.y_size). For example... + # ```python + # self.dy_new_view[0] = b * t_sin - y1 + # self.dy_new_view[1] = a * sin(y0) + # ``` + + # CySolver can also set additional outputs that the user may want to capture without having to make new calls + # to the differential equation or its sub-methods. For example... + # ```python + # self.extra_output_view[0] = t_sin + # self.extra_output_view[1] = b * t_sin + # ``` + # Currently, these additional outputs must be stored as doubles (floats). + # Note that if extra output is used then the variables `capture_extra` and `num_extra` must be set in CySolver's + # `__init__` method. # The default template simply sets all dy to 0. cdef Py_ssize_t i diff --git a/Tests/Cython Class Experiments.ipynb b/Tests/Cython Class Experiments.ipynb index 4f34228..fe4789e 100644 --- a/Tests/Cython Class Experiments.ipynb +++ b/Tests/Cython Class Experiments.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "968743f3", "metadata": {}, "outputs": [], @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 188, + "execution_count": 2, "id": "5c7be204", "metadata": {}, "outputs": [], @@ -48,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 163, + "execution_count": 3, "id": "59a5b145", "metadata": {}, "outputs": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "8c5e71aa", "metadata": {}, "outputs": [ @@ -86,27 +86,29 @@ "text": [ "Performance\n", "Cython (function)\n", - "1.2 ms ± 7.68 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", + "1.02 ms ± 5.82 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", "\n", "Numba\n", - "200 µs ± 1.94 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" + "188 µs ± 251 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" ] } ], "source": [ "print('Performance')\n", "print('Cython (function)')\n", - "# CyRK v0.5.3: 1.19ms, 1.2ms, 1.2ms\n", + "# v0.5.3: 1.19ms, 1.2ms, 1.2ms\n", + "# v0.6.2: 1.02ms, 1.02ms\n", "%timeit cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", "\n", "print('\\nNumba')\n", - "# CyRK v0.5.3: 199us, 201us, 200us\n", + "# v0.5.3: 199us, 201us, 200us\n", + "# v0.6.2: 187us, 188us\n", "%timeit nbrk_ode(pendulum_nb, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "id": "f1f28e08", "metadata": {}, "outputs": [ @@ -145,17 +147,26 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "id": "aa05194e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Cython extension is already loaded. To reload it, use:\n", + " %reload_ext Cython\n" + ] + } + ], "source": [ "%load_ext Cython" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 17, "id": "c7158ab3", "metadata": { "scrolled": false @@ -166,15 +177,10 @@ "output_type": "stream", "text": [ "Content of stdout:\n", - "_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp\r\n", + "_cython_magic_54957687d7b31b7fcb35acaa89dacbdc26e7d25c.cpp\r\n", "C:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp(20495): warning C4244: '=': conversion from 'Py_ssize_t' to 'unsigned short', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp(20777): warning C4244: '=': conversion from 'Py_ssize_t' to 'unsigned short', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp(21507): warning C4244: '=': conversion from 'Py_ssize_t' to 'unsigned int', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp(29992): warning C4244: '=': conversion from 'Py_ssize_t' to 'unsigned short', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp(30409): warning C4244: '=': conversion from 'Py_ssize_t' to 'unsigned int', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cpp(40927): warning C4551: function call missing argument list\r\n", - " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.cp311-win_amd64.exp\r\n", + "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_54957687d7b31b7fcb35acaa89dacbdc26e7d25c.cpp(44015): warning C4551: function call missing argument list\r\n", + " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_54957687d7b31b7fcb35acaa89dacbdc26e7d25c.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_54957687d7b31b7fcb35acaa89dacbdc26e7d25c.cp311-win_amd64.exp\r\n", "Generating code\r\n", "Finished generating code" ] @@ -187,7 +193,7 @@ "\n", "\n", " \n", - " Cython: _cython_magic_90f340f14cd99173572133223977b2c9f77a0b88.pyx\n", + " Cython: _cython_magic_54957687d7b31b7fcb35acaa89dacbdc26e7d25c.pyx\n", " \n", + "\n", + "\n", + "

Generated by Cython 3.0.0

\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", + "

\n", + "
+001: # cython: linetrace=True
\n", + "
  __Pyx_TraceLine(1,0,__PYX_ERR(0, 1, __pyx_L1_error))\n",
+       "  __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_5) < 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "
 002: # cython: binding=True
\n", + "
 003: # distutils: language=c++
\n", + "
 004: # distutils: define_macros=CYTHON_TRACE_NOGIL=1
\n", + "
 005: 
\n", + "
 006: import cython
\n", + "
+007: import numpy as np
\n", + "
  __Pyx_TraceLine(7,0,__PYX_ERR(0, 7, __pyx_L1_error))\n",
+       "  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 7, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 008: cimport numpy as np
\n", + "
+009: np.import_array()
\n", + "
  __Pyx_TraceLine(9,0,__PYX_ERR(0, 9, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 9, __pyx_L1_error)\n",
+       "
 010: from libcpp cimport bool as bool_cpp_t
\n", + "
 011: from libc.math cimport sqrt, fabs, nextafter, fmax, fmin
\n", + "
 012: 
\n", + "
 013: from CyRK.array.interp cimport interp_array, interp_complex_array
\n", + "
 014: from CyRK.rk.rk cimport (
\n", + "
 015:     RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,
\n", + "
 016:     RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,
\n", + "
 017:     RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,
\n", + "
 018:     RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,
\n", + "
 019:     DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,
\n", + "
 020:     DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)
\n", + "
 021: 
\n", + "
 022: # # Integration Constants
\n", + "
 023: # Multiply steps computed from asymptotic behaviour of errors by this.
\n", + "
+024: cdef double SAFETY = 0.9
\n", + "
  __Pyx_TraceLine(24,0,__PYX_ERR(0, 24, __pyx_L1_error))\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_SAFETY = 0.9;\n",
+       "
+025: cdef double MIN_FACTOR = 0.2  # Minimum allowed decrease in a step size.
\n", + "
  __Pyx_TraceLine(25,0,__PYX_ERR(0, 25, __pyx_L1_error))\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MIN_FACTOR = 0.2;\n",
+       "
+026: cdef double MAX_FACTOR = 10.  # Maximum allowed increase in a step size.
\n", + "
  __Pyx_TraceLine(26,0,__PYX_ERR(0, 26, __pyx_L1_error))\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MAX_FACTOR = 10.;\n",
+       "
+027: cdef double MAX_STEP = np.inf
\n", + "
  __Pyx_TraceLine(27,0,__PYX_ERR(0, 27, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_inf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MAX_STEP = __pyx_t_10;\n",
+       "
+028: cdef double INF = np.inf
\n", + "
  __Pyx_TraceLine(28,0,__PYX_ERR(0, 28, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_inf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 28, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_INF = __pyx_t_10;\n",
+       "
+029: cdef double EPS = np.finfo(np.float64).eps
\n", + "
  __Pyx_TraceLine(29,0,__PYX_ERR(0, 29, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_finfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_eps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 29, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS = __pyx_t_10;\n",
+       "
+030: cdef double EPS_10 = EPS * 10.
\n", + "
  __Pyx_TraceLine(30,0,__PYX_ERR(0, 30, __pyx_L1_error))\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS_10 = (__pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS * 10.);\n",
+       "
+031: cdef double EPS_100 = EPS * 100.
\n", + "
  __Pyx_TraceLine(31,0,__PYX_ERR(0, 31, __pyx_L1_error))\n",
+       "  __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS_100 = (__pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS * 100.);\n",
+       "
 032: 
\n", + "
 033: 
\n", + "
+034: cdef double cabs(double complex value) nogil:
\n", + "
static double __pyx_f_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_cabs(__pyx_t_double_complex __pyx_v_value) {\n",
+       "  double __pyx_v_v_real;\n",
+       "  double __pyx_v_v_imag;\n",
+       "  double __pyx_r;\n",
+       "  __Pyx_TraceDeclarations\n",
+       "  __Pyx_TraceCall(\"cabs\", __pyx_f[0], 34, 1, __PYX_ERR(0, 34, __pyx_L1_error));\n",
+       "/* … */\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  #ifdef WITH_THREAD\n",
+       "  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();\n",
+       "  #endif\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.cabs\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_r = -1;\n",
+       "  #ifdef WITH_THREAD\n",
+       "  __Pyx_PyGILState_Release(__pyx_gilstate_save);\n",
+       "  #endif\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_TraceReturn(Py_None, 1);\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "/* … */\n",
+       "  __Pyx_TraceLine(34,0,__PYX_ERR(0, 34, __pyx_L1_error))\n",
+       "\n",
+       "
 035:     """ Absolute value function for complex-valued inputs.
\n", + "
 036:     
\n", + "
 037:     Parameters
\n", + "
 038:     ----------
\n", + "
 039:     value : float (double complex)
\n", + "
 040:         Complex-valued number.
\n", + "
 041:          
\n", + "
 042:     Returns
\n", + "
 043:     -------
\n", + "
 044:     value_abs : float (double)
\n", + "
 045:         Absolute value of `value`.
\n", + "
 046:     """
\n", + "
 047: 
\n", + "
 048:     cdef double v_real
\n", + "
 049:     cdef double v_imag
\n", + "
+050:     v_real = value.real
\n", + "
  __Pyx_TraceLine(50,1,__PYX_ERR(0, 50, __pyx_L1_error))\n",
+       "  __pyx_t_1 = __Pyx_CREAL(__pyx_v_value);\n",
+       "  __pyx_v_v_real = __pyx_t_1;\n",
+       "
+051:     v_imag = value.imag
\n", + "
  __Pyx_TraceLine(51,1,__PYX_ERR(0, 51, __pyx_L1_error))\n",
+       "  __pyx_t_1 = __Pyx_CIMAG(__pyx_v_value);\n",
+       "  __pyx_v_v_imag = __pyx_t_1;\n",
+       "
 052: 
\n", + "
+053:     return sqrt(v_real * v_real + v_imag * v_imag)
\n", + "
  __Pyx_TraceLine(53,1,__PYX_ERR(0, 53, __pyx_L1_error))\n",
+       "  __pyx_r = sqrt(((__pyx_v_v_real * __pyx_v_v_real) + (__pyx_v_v_imag * __pyx_v_v_imag)));\n",
+       "  goto __pyx_L0;\n",
+       "
 054: 
\n", + "
 055: # Define fused type to handle both float and complex-valued versions of y and dydt.
\n", + "
 056: 
\n", + "
 057: 
\n", + "
+058: def cyrk_ode_2(
\n", + "
static PyObject *__pyx_pf_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_TraceDeclarations\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__defaults__\", 0);\n",
+       "  __Pyx_TraceCall(\"__defaults__\", __pyx_f[0], 58, 0, __PYX_ERR(0, 58, __pyx_L1_error));\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "/* … */\n",
+       "  __Pyx_TraceLine(58,0,__PYX_ERR(0, 58, __pyx_L1_error))\n",
+       "  __pyx_t_3 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_max_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "/* … */\n",
+       "  __Pyx_TraceLine(58,0,__PYX_ERR(0, 58, __pyx_L1_error))\n",
+       "  __pyx_t_6 = __pyx_memoryview_fromslice(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "/* … */\n",
+       "  __Pyx_TraceLine(58,0,__PYX_ERR(0, 58, __pyx_L1_error))\n",
+       "  __pyx_t_11 = PyTuple_New(11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_11);\n",
+       "  __Pyx_INCREF(((PyObject *)Py_None));\n",
+       "  __Pyx_GIVEREF(((PyObject *)Py_None));\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 0, ((PyObject *)Py_None));\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_3);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_3);\n",
+       "  __Pyx_GIVEREF(__pyx_t_4);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_t_4);\n",
+       "  __Pyx_GIVEREF(__pyx_t_5);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_5);\n",
+       "  __Pyx_GIVEREF(__pyx_t_6);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 6, __pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 7, __pyx_t_7);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 8, __pyx_t_8);\n",
+       "  __Pyx_GIVEREF(__pyx_t_9);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 9, __pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_10);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_11, 10, __pyx_t_10);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_3 = 0;\n",
+       "  __pyx_t_4 = 0;\n",
+       "  __pyx_t_5 = 0;\n",
+       "  __pyx_t_6 = 0;\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_9 = 0;\n",
+       "  __pyx_t_10 = 0;\n",
+       "  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_10);\n",
+       "  __Pyx_GIVEREF(__pyx_t_11);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);\n",
+       "  __Pyx_INCREF(Py_None);\n",
+       "  __Pyx_GIVEREF(Py_None);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_10, 1, Py_None);\n",
+       "  __pyx_t_11 = 0;\n",
+       "  __pyx_r = __pyx_t_10;\n",
+       "  __pyx_t_10 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_XDECREF(__pyx_t_7);\n",
+       "  __Pyx_XDECREF(__pyx_t_8);\n",
+       "  __Pyx_XDECREF(__pyx_t_9);\n",
+       "  __Pyx_XDECREF(__pyx_t_10);\n",
+       "  __Pyx_XDECREF(__pyx_t_11);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.__defaults__\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_r = NULL;\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_XGIVEREF(__pyx_r);\n",
+       "  __Pyx_TraceReturn(__pyx_r, 0);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_1cyrk_ode_2(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "PyDoc_STRVAR(__pyx_doc_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_cyrk_ode_2, \" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\\n\\n    Parameters\\n    ----------\\n    diffeq : callable\\n        An njit-compiled function that defines the derivatives of the problem.\\n    t_span : Tuple[float, float]\\n        A tuple of the beginning and end of the integration domain's dependent variables.\\n    y0 : np.ndarray\\n        1D array of the initial values of the problem at t_span[0]\\n    args : tuple = tuple()\\n        Any additional arguments that are passed to dffeq.\\n    rtol : float = 1.e-6\\n        Integration relative tolerance used to determine optimal step size.\\n    atol : float = 1.e-8\\n        Integration absolute tolerance used to determine optimal step size.\\n    max_step : float = np.inf\\n        Maximum allowed step size.\\n    first_step : float = None\\n        Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\\n    rk_method : int = 1\\n        The type of RK method used for integration\\n            0 = RK23\\n            1 = RK45\\n            2 = DOP853\\n    t_eval : np.ndarray = None\\n        If provided, then the function will interpolate the integration results to provide them at the\\n            requested t-steps.\\n    capture_extra : bool = False\\n        If True, then additional output from the differential equation will be collected (but not used to determine\\n         integration error).\\n         Example:\\n            ```\\n            def diffeq(t, y, dy):\\n                a = ... some function of y and t.\\n                dy[0] = a**2 * sin(t) - y[1]\\n                dy[1] = a**3 * cos(t) + y[0]\\n\\n                # Storing extra output in dy even though it is not part of the diffeq.\\n                dy[2] = a\\n            ```\\n    num_extra : int = 0\\n        The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\\n    interpolate_extra : bool = False\\n        If True, and if `t_eval` was provi\"\"ded, then the integrator will interpolate the extra output values at each\\n         step in `t_eval`.\\n    expected_size : int = 0\\n        The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\\n        If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\\n        It is better to overshoot than undershoot this guess.\\n\\n    Returns\\n    -------\\n    time_domain : np.ndarray\\n        The final time domain. This is equal to t_eval if it was provided.\\n    y_results : np.ndarray\\n        The solution of the differential equation provided for each time_result.\\n    success : bool\\n        Final integration success flag.\\n    message : str\\n        Any integration messages, useful if success=False.\\n\\n    \");\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_1cyrk_ode_2 = {\"cyrk_ode_2\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_1cyrk_ode_2, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_cyrk_ode_2};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_1cyrk_ode_2(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  PyObject *__pyx_v_diffeq = 0;\n",
+       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
+       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  PyObject *__pyx_v_args = 0;\n",
+       "  double __pyx_v_rtol;\n",
+       "  double __pyx_v_atol;\n",
+       "  double __pyx_v_max_step;\n",
+       "  double __pyx_v_first_step;\n",
+       "  unsigned char __pyx_v_rk_method;\n",
+       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  bool __pyx_v_capture_extra;\n",
+       "  Py_ssize_t __pyx_v_num_extra;\n",
+       "  bool __pyx_v_interpolate_extra;\n",
+       "  unsigned int __pyx_v_expected_size;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"cyrk_ode_2 (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_diffeq,&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step,&__pyx_n_s_first_step,&__pyx_n_s_rk_method,&__pyx_n_s_t_eval,&__pyx_n_s_capture_extra,&__pyx_n_s_num_extra,&__pyx_n_s_interpolate_extra,&__pyx_n_s_expected_size,0};\n",
+       "    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};\n",
+       "    __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self);\n",
+       "    values[3] = ((PyObject*)((PyObject *)Py_None));\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
+       "      }\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_diffeq)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        else {\n",
+       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 14, 1); __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2:\n",
+       "        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        else {\n",
+       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 14, 2); __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  3:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
+       "          if (value) { values[3] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  4:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
+       "          if (value) { values[4] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  5:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
+       "          if (value) { values[5] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  6:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step);\n",
+       "          if (value) { values[6] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  7:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
+       "          if (value) { values[7] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  8:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rk_method);\n",
+       "          if (value) { values[8] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  9:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
+       "          if (value) { values[9] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 10:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_capture_extra);\n",
+       "          if (value) { values[10] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 11:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_extra);\n",
+       "          if (value) { values[11] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 12:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interpolate_extra);\n",
+       "          if (value) { values[12] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 13:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expected_size);\n",
+       "          if (value) { values[13] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "        }\n",
+       "      }\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"cyrk_ode_2\") < 0)) __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "      }\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case 14: values[13] = __Pyx_Arg_FASTCALL(__pyx_args, 13);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 13: values[12] = __Pyx_Arg_FASTCALL(__pyx_args, 12);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 12: values[11] = __Pyx_Arg_FASTCALL(__pyx_args, 11);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 11: values[10] = __Pyx_Arg_FASTCALL(__pyx_args, 10);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
+       "        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
+       "      }\n",
+       "    }\n",
+       "    __pyx_v_diffeq = values[0];\n",
+       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L3_error)\n",
+       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(values[2], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 61, __pyx_L3_error)\n",
+       "    __pyx_v_args = ((PyObject*)values[3]);\n",
+       "    if (values[4]) {\n",
+       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_rtol = ((double)((double)1.e-6));\n",
+       "    }\n",
+       "    if (values[5]) {\n",
+       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_atol = ((double)((double)1.e-8));\n",
+       "    }\n",
+       "    if (values[6]) {\n",
+       "      __pyx_v_max_step = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_max_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_max_step = __pyx_dynamic_args->__pyx_arg_max_step;\n",
+       "    }\n",
+       "    if (values[7]) {\n",
+       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_first_step = ((double)((double)0.));\n",
+       "    }\n",
+       "    if (values[8]) {\n",
+       "      __pyx_v_rk_method = __Pyx_PyInt_As_unsigned_char(values[8]); if (unlikely((__pyx_v_rk_method == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_rk_method = ((unsigned char)((unsigned char)1));\n",
+       "    }\n",
+       "    if (values[9]) {\n",
+       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 68, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_t_eval = __pyx_dynamic_args->__pyx_arg_t_eval;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "    }\n",
+       "    if (values[10]) {\n",
+       "      __pyx_v_capture_extra = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_capture_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 69, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_capture_extra = ((bool)((int)0));\n",
+       "    }\n",
+       "    if (values[11]) {\n",
+       "      __pyx_v_num_extra = __Pyx_PyIndex_AsSsize_t(values[11]); if (unlikely((__pyx_v_num_extra == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 70, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_num_extra = ((Py_ssize_t)((Py_ssize_t)0));\n",
+       "    }\n",
+       "    if (values[12]) {\n",
+       "      __pyx_v_interpolate_extra = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_interpolate_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 71, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_interpolate_extra = ((bool)((int)0));\n",
+       "    }\n",
+       "    if (values[13]) {\n",
+       "      __pyx_v_expected_size = __Pyx_PyInt_As_unsigned_int(values[13]); if (unlikely((__pyx_v_expected_size == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_expected_size = ((unsigned int)((unsigned int)0));\n",
+       "    }\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 14, __pyx_nargs); __PYX_ERR(0, 58, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.cyrk_ode_2\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 62, __pyx_L1_error)\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_cyrk_ode_2(__pyx_self, __pyx_v_diffeq, __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step, __pyx_v_first_step, __pyx_v_rk_method, __pyx_v_t_eval, __pyx_v_capture_extra, __pyx_v_num_extra, __pyx_v_interpolate_extra, __pyx_v_expected_size);\n",
+       "  int __pyx_lineno = 0;\n",
+       "  const char *__pyx_filename = NULL;\n",
+       "  int __pyx_clineno = 0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __pyx_r = NULL;\n",
+       "  __pyx_L0:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_cyrk_ode_2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_diffeq, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step, double __pyx_v_first_step, unsigned char __pyx_v_rk_method, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_capture_extra, Py_ssize_t __pyx_v_num_extra, bool __pyx_v_interpolate_extra, unsigned int __pyx_v_expected_size) {\n",
+       "  Py_ssize_t __pyx_v_s;\n",
+       "  Py_ssize_t __pyx_v_i;\n",
+       "  Py_ssize_t __pyx_v_j;\n",
+       "  Py_ssize_t __pyx_v_y_size;\n",
+       "  double __pyx_v_y_size_dbl;\n",
+       "  double __pyx_v_y_size_sqrt;\n",
+       "  CYTHON_UNUSED int __pyx_v_y_is_complex;\n",
+       "  double __pyx_v_t_start;\n",
+       "  double __pyx_v_t_end;\n",
+       "  double __pyx_v_t_delta;\n",
+       "  double __pyx_v_t_delta_abs;\n",
+       "  double __pyx_v_direction;\n",
+       "  double __pyx_v_direction_inf;\n",
+       "  double __pyx_v_t_old;\n",
+       "  double __pyx_v_t_new;\n",
+       "  double __pyx_v_time_;\n",
+       "  Py_ssize_t __pyx_v_len_teval;\n",
+       "  bool __pyx_v_use_args;\n",
+       "  bool __pyx_v_success;\n",
+       "  bool __pyx_v_step_accepted;\n",
+       "  bool __pyx_v_step_rejected;\n",
+       "  bool __pyx_v_step_error;\n",
+       "  bool __pyx_v_run_interpolation;\n",
+       "  bool __pyx_v_store_extras_during_integration;\n",
+       "  double __pyx_v_temp_expected_size;\n",
+       "  unsigned int __pyx_v_expected_size_to_use;\n",
+       "  unsigned int __pyx_v_num_concats;\n",
+       "  PyObject *__pyx_v_y_new = NULL;\n",
+       "  PyObject *__pyx_v_y_old = NULL;\n",
+       "  PyObject *__pyx_v_dydt_new = NULL;\n",
+       "  PyObject *__pyx_v_dydt_old = NULL;\n",
+       "  __Pyx_memviewslice __pyx_v_y_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_y_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_dydt_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_dydt_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  double __pyx_v_y_value;\n",
+       "  Py_ssize_t __pyx_v_extra_start;\n",
+       "  Py_ssize_t __pyx_v_total_size;\n",
+       "  Py_ssize_t __pyx_v_store_loop_size;\n",
+       "  PyObject *__pyx_v_diffeq_out = NULL;\n",
+       "  PyObject *__pyx_v_y0_plus_extra = NULL;\n",
+       "  PyObject *__pyx_v_extra_result = NULL;\n",
+       "  __Pyx_memviewslice __pyx_v_diffeq_out_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_y0_plus_extra_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_extra_result_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  PyObject *__pyx_v_y0_to_store = NULL;\n",
+       "  __Pyx_memviewslice __pyx_v_y0_to_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  CYTHON_UNUSED unsigned char __pyx_v_rk_order;\n",
+       "  unsigned char __pyx_v_error_order;\n",
+       "  Py_ssize_t __pyx_v_rk_n_stages;\n",
+       "  Py_ssize_t __pyx_v_rk_n_stages_plus1;\n",
+       "  CYTHON_UNUSED Py_ssize_t __pyx_v_rk_n_stages_extended;\n",
+       "  Py_ssize_t __pyx_v_len_C;\n",
+       "  Py_ssize_t __pyx_v_len_B;\n",
+       "  Py_ssize_t __pyx_v_len_E;\n",
+       "  Py_ssize_t __pyx_v_len_E3;\n",
+       "  Py_ssize_t __pyx_v_len_E5;\n",
+       "  Py_ssize_t __pyx_v_len_A0;\n",
+       "  Py_ssize_t __pyx_v_len_A1;\n",
+       "  double __pyx_v_error_pow;\n",
+       "  double __pyx_v_error_expo;\n",
+       "  double __pyx_v_error_norm5;\n",
+       "  double __pyx_v_error_norm3;\n",
+       "  double __pyx_v_error_norm;\n",
+       "  double __pyx_v_error_norm_abs;\n",
+       "  double __pyx_v_error_norm3_abs;\n",
+       "  double __pyx_v_error_norm5_abs;\n",
+       "  double __pyx_v_error_denom;\n",
+       "  PyObject *__pyx_v_A = NULL;\n",
+       "  PyObject *__pyx_v_B = NULL;\n",
+       "  PyObject *__pyx_v_C = NULL;\n",
+       "  PyObject *__pyx_v_E = NULL;\n",
+       "  PyObject *__pyx_v_E3 = NULL;\n",
+       "  PyObject *__pyx_v_E5 = NULL;\n",
+       "  PyObject *__pyx_v_E_tmp = NULL;\n",
+       "  PyObject *__pyx_v_E3_tmp = NULL;\n",
+       "  PyObject *__pyx_v_E5_tmp = NULL;\n",
+       "  PyObject *__pyx_v_K = NULL;\n",
+       "  __Pyx_memviewslice __pyx_v_B_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_E_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_E3_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_E5_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_E_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_E3_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_E5_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_A_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_K_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_C_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_y_results_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_y_results_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_solution_y_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_time_domain_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_time_domain_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_solution_t_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  PyObject *__pyx_v_y_results_array = NULL;\n",
+       "  PyObject *__pyx_v_time_domain_array = NULL;\n",
+       "  double __pyx_v_step_size;\n",
+       "  double __pyx_v_d0;\n",
+       "  double __pyx_v_d1;\n",
+       "  double __pyx_v_d2;\n",
+       "  double __pyx_v_d0_abs;\n",
+       "  double __pyx_v_d1_abs;\n",
+       "  double __pyx_v_d2_abs;\n",
+       "  double __pyx_v_h0;\n",
+       "  double __pyx_v_h1;\n",
+       "  double __pyx_v_scale;\n",
+       "  double __pyx_v_h0_direction;\n",
+       "  double __pyx_v_min_step;\n",
+       "  double __pyx_v_step_factor;\n",
+       "  double __pyx_v_step;\n",
+       "  double __pyx_v_c;\n",
+       "  double __pyx_v_K_scale;\n",
+       "  char __pyx_v_status;\n",
+       "  Py_ssize_t __pyx_v_len_t;\n",
+       "  unsigned int __pyx_v_new_size;\n",
+       "  PyObject *__pyx_v_time_domain_array_new = NULL;\n",
+       "  PyObject *__pyx_v_y_results_array_new = NULL;\n",
+       "  PyObject *__pyx_v_message = 0;\n",
+       "  PyObject *__pyx_v_solution_y = NULL;\n",
+       "  PyObject *__pyx_v_solution_t = NULL;\n",
+       "  __Pyx_memviewslice __pyx_v_y_results_reduced_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_y_result_timeslice_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_y_result_temp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  PyObject *__pyx_v_y_results_reduced = NULL;\n",
+       "  PyObject *__pyx_v_y_result_timeslice = NULL;\n",
+       "  PyObject *__pyx_v_y_result_temp = NULL;\n",
+       "  PyObject *__pyx_v_y_interp = NULL;\n",
+       "  PyObject *__pyx_v_y_interp_view = NULL;\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_TraceDeclarations\n",
+       "  __Pyx_TraceFrameInit(__pyx_codeobj__11)\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"cyrk_ode_2\", 0);\n",
+       "  __Pyx_TraceCall(\"cyrk_ode_2\", __pyx_f[0], 58, 0, __PYX_ERR(0, 58, __pyx_L1_error));\n",
+       "/* … */\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_XDECREF(__pyx_t_7);\n",
+       "  __Pyx_XDECREF(__pyx_t_8);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 1);\n",
+       "  __Pyx_XDECREF(__pyx_t_29);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.cyrk_ode_2\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_r = NULL;\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_XDECREF(__pyx_v_y_new);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_old);\n",
+       "  __Pyx_XDECREF(__pyx_v_dydt_new);\n",
+       "  __Pyx_XDECREF(__pyx_v_dydt_old);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_new_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_old_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_new_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_old_view, 1);\n",
+       "  __Pyx_XDECREF(__pyx_v_diffeq_out);\n",
+       "  __Pyx_XDECREF(__pyx_v_y0_plus_extra);\n",
+       "  __Pyx_XDECREF(__pyx_v_extra_result);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_diffeq_out_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_plus_extra_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_result_view, 1);\n",
+       "  __Pyx_XDECREF(__pyx_v_y0_to_store);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_to_store_view, 1);\n",
+       "  __Pyx_XDECREF(__pyx_v_A);\n",
+       "  __Pyx_XDECREF(__pyx_v_B);\n",
+       "  __Pyx_XDECREF(__pyx_v_C);\n",
+       "  __Pyx_XDECREF(__pyx_v_E);\n",
+       "  __Pyx_XDECREF(__pyx_v_E3);\n",
+       "  __Pyx_XDECREF(__pyx_v_E5);\n",
+       "  __Pyx_XDECREF(__pyx_v_E_tmp);\n",
+       "  __Pyx_XDECREF(__pyx_v_E3_tmp);\n",
+       "  __Pyx_XDECREF(__pyx_v_E5_tmp);\n",
+       "  __Pyx_XDECREF(__pyx_v_K);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_B_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_tmp_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_tmp_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_tmp_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_K_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_C_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_results_array);\n",
+       "  __Pyx_XDECREF(__pyx_v_time_domain_array);\n",
+       "  __Pyx_XDECREF(__pyx_v_time_domain_array_new);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_results_array_new);\n",
+       "  __Pyx_XDECREF(__pyx_v_message);\n",
+       "  __Pyx_XDECREF(__pyx_v_solution_y);\n",
+       "  __Pyx_XDECREF(__pyx_v_solution_t);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_reduced_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_timeslice_view, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_temp_view, 1);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_results_reduced);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_result_temp);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_interp);\n",
+       "  __Pyx_XDECREF(__pyx_v_y_interp_view);\n",
+       "  __Pyx_XGIVEREF(__pyx_r);\n",
+       "  __Pyx_TraceReturn(__pyx_r, 0);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "/* … */\n",
+       "  __pyx_tuple__27 = PyTuple_Pack(142, __pyx_n_s_diffeq, __pyx_n_s_t_span, __pyx_n_s_y0, __pyx_n_s_args, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_max_step, __pyx_n_s_first_step, __pyx_n_s_rk_method, __pyx_n_s_t_eval, __pyx_n_s_capture_extra, __pyx_n_s_num_extra, __pyx_n_s_interpolate_extra, __pyx_n_s_expected_size, __pyx_n_s_s, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_y_size, __pyx_n_s_y_size_dbl, __pyx_n_s_y_size_sqrt, __pyx_n_s_y_is_complex, __pyx_n_s_t_start, __pyx_n_s_t_end, __pyx_n_s_t_delta, __pyx_n_s_t_delta_abs, __pyx_n_s_direction, __pyx_n_s_direction_inf, __pyx_n_s_t_old, __pyx_n_s_t_new, __pyx_n_s_time, __pyx_n_s_len_teval, __pyx_n_s_use_args, __pyx_n_s_success, __pyx_n_s_step_accepted, __pyx_n_s_step_rejected, __pyx_n_s_step_error, __pyx_n_s_run_interpolation, __pyx_n_s_store_extras_during_integration, __pyx_n_s_temp_expected_size, __pyx_n_s_expected_size_to_use, __pyx_n_s_num_concats, __pyx_n_s_y_new, __pyx_n_s_y_old, __pyx_n_s_dydt_new, __pyx_n_s_dydt_old, __pyx_n_s_y_new_view, __pyx_n_s_y_old_view, __pyx_n_s_dydt_new_view, __pyx_n_s_dydt_old_view, __pyx_n_s_y_value, __pyx_n_s_extra_start, __pyx_n_s_total_size, __pyx_n_s_store_loop_size, __pyx_n_s_diffeq_out, __pyx_n_s_y0_plus_extra, __pyx_n_s_extra_result, __pyx_n_s_diffeq_out_view, __pyx_n_s_y0_plus_extra_view, __pyx_n_s_extra_result_view, __pyx_n_s_y0_to_store, __pyx_n_s_y0_to_store_view, __pyx_n_s_rk_order, __pyx_n_s_error_order, __pyx_n_s_rk_n_stages, __pyx_n_s_rk_n_stages_plus1, __pyx_n_s_rk_n_stages_extended, __pyx_n_s_len_C, __pyx_n_s_len_B, __pyx_n_s_len_E, __pyx_n_s_len_E3, __pyx_n_s_len_E5, __pyx_n_s_len_A0, __pyx_n_s_len_A1, __pyx_n_s_error_pow, __pyx_n_s_error_expo, __pyx_n_s_error_norm5, __pyx_n_s_error_norm3, __pyx_n_s_error_norm, __pyx_n_s_error_norm_abs, __pyx_n_s_error_norm3_abs, __pyx_n_s_error_norm5_abs, __pyx_n_s_error_denom, __pyx_n_s_A, __pyx_n_s_B, __pyx_n_s_C, __pyx_n_s_E, __pyx_n_s_E3, __pyx_n_s_E5, __pyx_n_s_E_tmp, __pyx_n_s_E3_tmp, __pyx_n_s_E5_tmp, __pyx_n_s_K, __pyx_n_s_B_view, __pyx_n_s_E_view, __pyx_n_s_E3_view, __pyx_n_s_E5_view, __pyx_n_s_E_tmp_view, __pyx_n_s_E3_tmp_view, __pyx_n_s_E5_tmp_view, __pyx_n_s_A_view, __pyx_n_s_K_view, __pyx_n_s_C_view, __pyx_n_s_y_results_array_view, __pyx_n_s_y_results_array_new_view, __pyx_n_s_solution_y_view, __pyx_n_s_time_domain_array_view, __pyx_n_s_time_domain_array_new_view, __pyx_n_s_solution_t_view, __pyx_n_s_y_results_array, __pyx_n_s_time_domain_array, __pyx_n_s_step_size, __pyx_n_s_d0, __pyx_n_s_d1, __pyx_n_s_d2, __pyx_n_s_d0_abs, __pyx_n_s_d1_abs, __pyx_n_s_d2_abs, __pyx_n_s_h0, __pyx_n_s_h1, __pyx_n_s_scale, __pyx_n_s_h0_direction, __pyx_n_s_min_step, __pyx_n_s_step_factor, __pyx_n_s_step, __pyx_n_s_c, __pyx_n_s_K_scale, __pyx_n_s_status, __pyx_n_s_len_t, __pyx_n_s_new_size, __pyx_n_s_time_domain_array_new, __pyx_n_s_y_results_array_new, __pyx_n_s_message, __pyx_n_s_solution_y, __pyx_n_s_solution_t, __pyx_n_s_y_results_reduced_view, __pyx_n_s_y_result_timeslice_view, __pyx_n_s_y_result_temp_view, __pyx_n_s_y_results_reduced, __pyx_n_s_y_result_timeslice, __pyx_n_s_y_result_temp, __pyx_n_s_y_interp, __pyx_n_s_y_interp_view); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__27);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__27);\n",
+       "/* … */\n",
+       "  __Pyx_TraceLine(58,0,__PYX_ERR(0, 58, __pyx_L1_error))\n",
+       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_1cyrk_ode_2, 0, __pyx_n_s_cyrk_ode_2, NULL, __pyx_n_s_cython_magic_fb91430ef808a13818, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_5, sizeof(__pyx_defaults), 0)) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "
 059:     diffeq,
\n", + "
+060:     (double, double) t_span,
\n", + "
struct __pyx_ctuple_double__and_double {\n",
+       "  double f0;\n",
+       "  double f1;\n",
+       "};\n",
+       "
 061:     const double[:] y0,
\n", + "
 062:     tuple args = None,
\n", + "
+063:     double rtol = 1.e-6,
\n", + "
  __Pyx_TraceLine(63,0,__PYX_ERR(0, 63, __pyx_L1_error))\n",
+       "  __pyx_t_1 = PyFloat_FromDouble(((double)1.e-6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "
+064:     double atol = 1.e-8,
\n", + "
  __Pyx_TraceLine(64,0,__PYX_ERR(0, 64, __pyx_L1_error))\n",
+       "  __pyx_t_2 = PyFloat_FromDouble(((double)1.e-8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "
+065:     double max_step = MAX_STEP,
\n", + "
  __Pyx_TraceLine(65,0,__PYX_ERR(0, 65, __pyx_L1_error))\n",
+       "  __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_5)->__pyx_arg_max_step = __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MAX_STEP;\n",
+       "
+066:     double first_step = 0.,
\n", + "
  __Pyx_TraceLine(66,0,__PYX_ERR(0, 66, __pyx_L1_error))\n",
+       "  __pyx_t_4 = PyFloat_FromDouble(((double)0.)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "
+067:     unsigned char rk_method = 1,
\n", + "
  __Pyx_TraceLine(67,0,__PYX_ERR(0, 67, __pyx_L1_error))\n",
+       "  __pyx_t_5 = __Pyx_PyInt_From_unsigned_char(((unsigned char)1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 67, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "
+068:     double[:] t_eval = None,
\n", + "
  __Pyx_TraceLine(68,0,__PYX_ERR(0, 68, __pyx_L1_error))\n",
+       "  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 68, __pyx_L1_error)\n",
+       "  __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_5)->__pyx_arg_t_eval = __pyx_t_11;\n",
+       "  __pyx_t_11.memview = NULL;\n",
+       "  __pyx_t_11.data = NULL;\n",
+       "  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_5, __pyx_pf_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_2__defaults__);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cyrk_ode_2, __pyx_t_5) < 0) __PYX_ERR(0, 58, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "
+069:     bool_cpp_t capture_extra = False,
\n", + "
  __Pyx_TraceLine(69,0,__PYX_ERR(0, 69, __pyx_L1_error))\n",
+       "  __pyx_t_7 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 69, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "
+070:     Py_ssize_t num_extra = 0,
\n", + "
  __Pyx_TraceLine(70,0,__PYX_ERR(0, 70, __pyx_L1_error))\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(((Py_ssize_t)0)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 70, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "
+071:     bool_cpp_t interpolate_extra = False,
\n", + "
  __Pyx_TraceLine(71,0,__PYX_ERR(0, 71, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 71, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "
+072:     unsigned int expected_size = 0
\n", + "
  __Pyx_TraceLine(72,0,__PYX_ERR(0, 72, __pyx_L1_error))\n",
+       "  __pyx_t_10 = __Pyx_PyInt_From_unsigned_int(((unsigned int)0)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 72, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_10);\n",
+       "
 073:     ):
\n", + "
 074:     """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.
\n", + "
 075: 
\n", + "
 076:     Parameters
\n", + "
 077:     ----------
\n", + "
 078:     diffeq : callable
\n", + "
 079:         An njit-compiled function that defines the derivatives of the problem.
\n", + "
 080:     t_span : Tuple[float, float]
\n", + "
 081:         A tuple of the beginning and end of the integration domain's dependent variables.
\n", + "
 082:     y0 : np.ndarray
\n", + "
 083:         1D array of the initial values of the problem at t_span[0]
\n", + "
 084:     args : tuple = tuple()
\n", + "
 085:         Any additional arguments that are passed to dffeq.
\n", + "
 086:     rtol : float = 1.e-6
\n", + "
 087:         Integration relative tolerance used to determine optimal step size.
\n", + "
 088:     atol : float = 1.e-8
\n", + "
 089:         Integration absolute tolerance used to determine optimal step size.
\n", + "
 090:     max_step : float = np.inf
\n", + "
 091:         Maximum allowed step size.
\n", + "
 092:     first_step : float = None
\n", + "
 093:         Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.
\n", + "
 094:     rk_method : int = 1
\n", + "
 095:         The type of RK method used for integration
\n", + "
 096:             0 = RK23
\n", + "
 097:             1 = RK45
\n", + "
 098:             2 = DOP853
\n", + "
 099:     t_eval : np.ndarray = None
\n", + "
 100:         If provided, then the function will interpolate the integration results to provide them at the
\n", + "
 101:             requested t-steps.
\n", + "
 102:     capture_extra : bool = False
\n", + "
 103:         If True, then additional output from the differential equation will be collected (but not used to determine
\n", + "
 104:          integration error).
\n", + "
 105:          Example:
\n", + "
 106:             ```
\n", + "
 107:             def diffeq(t, y, dy):
\n", + "
 108:                 a = ... some function of y and t.
\n", + "
 109:                 dy[0] = a**2 * sin(t) - y[1]
\n", + "
 110:                 dy[1] = a**3 * cos(t) + y[0]
\n", + "
 111: 
\n", + "
 112:                 # Storing extra output in dy even though it is not part of the diffeq.
\n", + "
 113:                 dy[2] = a
\n", + "
 114:             ```
\n", + "
 115:     num_extra : int = 0
\n", + "
 116:         The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.
\n", + "
 117:     interpolate_extra : bool = False
\n", + "
 118:         If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each
\n", + "
 119:          step in `t_eval`.
\n", + "
 120:     expected_size : int = 0
\n", + "
 121:         The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.
\n", + "
 122:         If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.
\n", + "
 123:         It is better to overshoot than undershoot this guess.
\n", + "
 124: 
\n", + "
 125:     Returns
\n", + "
 126:     -------
\n", + "
 127:     time_domain : np.ndarray
\n", + "
 128:         The final time domain. This is equal to t_eval if it was provided.
\n", + "
 129:     y_results : np.ndarray
\n", + "
 130:         The solution of the differential equation provided for each time_result.
\n", + "
 131:     success : bool
\n", + "
 132:         Final integration success flag.
\n", + "
 133:     message : str
\n", + "
 134:         Any integration messages, useful if success=False.
\n", + "
 135: 
\n", + "
 136:     """
\n", + "
 137:     # Setup loop variables
\n", + "
 138:     cdef Py_ssize_t s, i, j
\n", + "
 139: 
\n", + "
 140:     # Determine information about the differential equation based on its initial conditions
\n", + "
 141:     cdef Py_ssize_t y_size
\n", + "
 142:     cdef double y_size_dbl, y_size_sqrt
\n", + "
+143:     y_size = y0.size
\n", + "
  __Pyx_TraceLine(143,0,__PYX_ERR(0, 143, __pyx_L1_error))\n",
+       "  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_y_size = __pyx_t_3;\n",
+       "
+144:     y_is_complex = False
\n", + "
  __Pyx_TraceLine(144,0,__PYX_ERR(0, 144, __pyx_L1_error))\n",
+       "  __pyx_v_y_is_complex = 0;\n",
+       "
+145:     y_size_dbl = <double>y_size
\n", + "
  __Pyx_TraceLine(145,0,__PYX_ERR(0, 145, __pyx_L1_error))\n",
+       "  __pyx_v_y_size_dbl = ((double)__pyx_v_y_size);\n",
+       "
+146:     y_size_sqrt = sqrt(y_size_dbl)
\n", + "
  __Pyx_TraceLine(146,0,__PYX_ERR(0, 146, __pyx_L1_error))\n",
+       "  __pyx_v_y_size_sqrt = sqrt(__pyx_v_y_size_dbl);\n",
+       "
 147: 
\n", + "
 148:     # Build time domain
\n", + "
 149:     cdef double t_start, t_end, t_delta, t_delta_abs, direction, direction_inf, t_old, t_new, time_
\n", + "
+150:     t_start = t_span[0]
\n", + "
  __Pyx_TraceLine(150,0,__PYX_ERR(0, 150, __pyx_L1_error))\n",
+       "  __pyx_v_t_start = __pyx_v_t_span.f0;\n",
+       "
+151:     t_end   = t_span[1]
\n", + "
  __Pyx_TraceLine(151,0,__PYX_ERR(0, 151, __pyx_L1_error))\n",
+       "  __pyx_v_t_end = __pyx_v_t_span.f1;\n",
+       "
+152:     t_delta = t_end - t_start
\n", + "
  __Pyx_TraceLine(152,0,__PYX_ERR(0, 152, __pyx_L1_error))\n",
+       "  __pyx_v_t_delta = (__pyx_v_t_end - __pyx_v_t_start);\n",
+       "
+153:     t_delta_abs = fabs(t_delta)
\n", + "
  __Pyx_TraceLine(153,0,__PYX_ERR(0, 153, __pyx_L1_error))\n",
+       "  __pyx_v_t_delta_abs = fabs(__pyx_v_t_delta);\n",
+       "
+154:     if t_delta >= 0.:
\n", + "
  __Pyx_TraceLine(154,0,__PYX_ERR(0, 154, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_t_delta >= 0.);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L3;\n",
+       "  }\n",
+       "
+155:         direction = 1.
\n", + "
    __Pyx_TraceLine(155,0,__PYX_ERR(0, 155, __pyx_L1_error))\n",
+       "    __pyx_v_direction = 1.;\n",
+       "
 156:     else:
\n", + "
+157:         direction = -1.
\n", + "
  __Pyx_TraceLine(157,0,__PYX_ERR(0, 157, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __pyx_v_direction = -1.;\n",
+       "  }\n",
+       "  __pyx_L3:;\n",
+       "
+158:     direction_inf = direction * INF
\n", + "
  __Pyx_TraceLine(158,0,__PYX_ERR(0, 158, __pyx_L1_error))\n",
+       "  __pyx_v_direction_inf = (__pyx_v_direction * __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_INF);\n",
+       "
 159: 
\n", + "
 160:     # Pull out information on t-eval
\n", + "
 161:     cdef Py_ssize_t len_teval
\n", + "
+162:     if t_eval is None:
\n", + "
  __Pyx_TraceLine(162,0,__PYX_ERR(0, 162, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (((PyObject *) __pyx_v_t_eval.memview) == Py_None);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L4;\n",
+       "  }\n",
+       "
+163:         len_teval = 0
\n", + "
    __Pyx_TraceLine(163,0,__PYX_ERR(0, 163, __pyx_L1_error))\n",
+       "    __pyx_v_len_teval = 0;\n",
+       "
 164:     else:
\n", + "
+165:         len_teval = t_eval.size
\n", + "
  __Pyx_TraceLine(165,0,__PYX_ERR(0, 165, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 165, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __pyx_v_len_teval = __pyx_t_3;\n",
+       "  }\n",
+       "  __pyx_L4:;\n",
+       "
 166: 
\n", + "
 167:     # Pull out information on args
\n", + "
 168:     cdef bool_cpp_t use_args
\n", + "
+169:     if args is None:
\n", + "
  __Pyx_TraceLine(169,0,__PYX_ERR(0, 169, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_args == ((PyObject*)Py_None));\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L5;\n",
+       "  }\n",
+       "
+170:         use_args = False
\n", + "
    __Pyx_TraceLine(170,0,__PYX_ERR(0, 170, __pyx_L1_error))\n",
+       "    __pyx_v_use_args = 0;\n",
+       "
 171:     else:
\n", + "
+172:         use_args = True
\n", + "
  __Pyx_TraceLine(172,0,__PYX_ERR(0, 172, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __pyx_v_use_args = 1;\n",
+       "  }\n",
+       "  __pyx_L5:;\n",
+       "
 173: 
\n", + "
 174:     # Set integration flags
\n", + "
 175:     cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\
\n", + "
 176:         store_extras_during_integration
\n", + "
+177:     success           = False
\n", + "
  __Pyx_TraceLine(177,0,__PYX_ERR(0, 177, __pyx_L1_error))\n",
+       "  __pyx_v_success = 0;\n",
+       "
+178:     step_accepted     = False
\n", + "
  __Pyx_TraceLine(178,0,__PYX_ERR(0, 178, __pyx_L1_error))\n",
+       "  __pyx_v_step_accepted = 0;\n",
+       "
+179:     step_rejected     = False
\n", + "
  __Pyx_TraceLine(179,0,__PYX_ERR(0, 179, __pyx_L1_error))\n",
+       "  __pyx_v_step_rejected = 0;\n",
+       "
+180:     step_error        = False
\n", + "
  __Pyx_TraceLine(180,0,__PYX_ERR(0, 180, __pyx_L1_error))\n",
+       "  __pyx_v_step_error = 0;\n",
+       "
+181:     run_interpolation = False
\n", + "
  __Pyx_TraceLine(181,0,__PYX_ERR(0, 181, __pyx_L1_error))\n",
+       "  __pyx_v_run_interpolation = 0;\n",
+       "
+182:     store_extras_during_integration = capture_extra
\n", + "
  __Pyx_TraceLine(182,0,__PYX_ERR(0, 182, __pyx_L1_error))\n",
+       "  __pyx_v_store_extras_during_integration = __pyx_v_capture_extra;\n",
+       "
+183:     if len_teval > 0:
\n", + "
  __Pyx_TraceLine(183,0,__PYX_ERR(0, 183, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_len_teval > 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+184:         run_interpolation = True
\n", + "
    __Pyx_TraceLine(184,0,__PYX_ERR(0, 184, __pyx_L1_error))\n",
+       "    __pyx_v_run_interpolation = 1;\n",
+       "
+185:     if run_interpolation and not interpolate_extra:
\n", + "
  __Pyx_TraceLine(185,0,__PYX_ERR(0, 185, __pyx_L1_error))\n",
+       "  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
+       "  if (__pyx_t_5) {\n",
+       "  } else {\n",
+       "    __pyx_t_4 = __pyx_t_5;\n",
+       "    goto __pyx_L8_bool_binop_done;\n",
+       "  }\n",
+       "  __pyx_t_5 = (!(__pyx_v_interpolate_extra != 0));\n",
+       "  __pyx_t_4 = __pyx_t_5;\n",
+       "  __pyx_L8_bool_binop_done:;\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
 186:         # If y is eventually interpolated but the extra outputs are not being interpolated, then there is
\n", + "
 187:         #  no point in storing the values during the integration. Turn off this functionality to save
\n", + "
 188:         #  on computation.
\n", + "
+189:         store_extras_during_integration = False
\n", + "
    __Pyx_TraceLine(189,0,__PYX_ERR(0, 189, __pyx_L1_error))\n",
+       "    __pyx_v_store_extras_during_integration = 0;\n",
+       "
 190: 
\n", + "
 191:     # # Determine integration parameters
\n", + "
 192:     # Check tolerances
\n", + "
+193:     if rtol < EPS_100:
\n", + "
  __Pyx_TraceLine(193,0,__PYX_ERR(0, 193, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_rtol < __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS_100);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+194:         rtol = EPS_100
\n", + "
    __Pyx_TraceLine(194,0,__PYX_ERR(0, 194, __pyx_L1_error))\n",
+       "    __pyx_v_rtol = __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_EPS_100;\n",
+       "
 195: 
\n", + "
 196:     #     atol_arr = np.asarray(atol, dtype=np.complex128)
\n", + "
 197:     #     if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:
\n", + "
 198:     #         # atol must be either the same for all y or must be provided as an array, one for each y.
\n", + "
 199:     #         raise Exception
\n", + "
 200: 
\n", + "
 201:     # Expected size of output arrays.
\n", + "
 202:     cdef double temp_expected_size
\n", + "
 203:     cdef unsigned int expected_size_to_use, num_concats
\n", + "
+204:     if expected_size == 0:
\n", + "
  __Pyx_TraceLine(204,0,__PYX_ERR(0, 204, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_expected_size == 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L11;\n",
+       "  }\n",
+       "
 205:         # CySolver will attempt to guess on a best size for the arrays.
\n", + "
+206:         temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol))
\n", + "
    __Pyx_TraceLine(206,0,__PYX_ERR(0, 206, __pyx_L1_error))\n",
+       "    if (unlikely(__pyx_v_rtol == 0)) {\n",
+       "      PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "      __PYX_ERR(0, 206, __pyx_L1_error)\n",
+       "    }\n",
+       "    __pyx_v_temp_expected_size = ((100. * __pyx_v_t_delta_abs) * fmax(1., (1.e-6 / __pyx_v_rtol)));\n",
+       "
+207:         temp_expected_size = fmax(temp_expected_size, 100.)
\n", + "
    __Pyx_TraceLine(207,0,__PYX_ERR(0, 207, __pyx_L1_error))\n",
+       "    __pyx_v_temp_expected_size = fmax(__pyx_v_temp_expected_size, 100.);\n",
+       "
+208:         temp_expected_size = fmin(temp_expected_size, 10_000_000.)
\n", + "
    __Pyx_TraceLine(208,0,__PYX_ERR(0, 208, __pyx_L1_error))\n",
+       "    __pyx_v_temp_expected_size = fmin(__pyx_v_temp_expected_size, 10000000.);\n",
+       "
+209:         expected_size_to_use = <unsigned int>temp_expected_size
\n", + "
    __Pyx_TraceLine(209,0,__PYX_ERR(0, 209, __pyx_L1_error))\n",
+       "    __pyx_v_expected_size_to_use = ((unsigned int)__pyx_v_temp_expected_size);\n",
+       "
 210:     else:
\n", + "
+211:         expected_size_to_use = expected_size
\n", + "
  __Pyx_TraceLine(211,0,__PYX_ERR(0, 211, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __pyx_v_expected_size_to_use = __pyx_v_expected_size;\n",
+       "  }\n",
+       "  __pyx_L11:;\n",
+       "
 212:     # This variable tracks how many times the storage arrays have been appended.
\n", + "
 213:     # It starts at 1 since there is at least one storage array present.
\n", + "
+214:     num_concats = 1
\n", + "
  __Pyx_TraceLine(214,0,__PYX_ERR(0, 214, __pyx_L1_error))\n",
+       "  __pyx_v_num_concats = 1;\n",
+       "
 215: 
\n", + "
 216:     # Initialize arrays that are based on y's size and type.
\n", + "
+217:     y_new    = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(217,0,__PYX_ERR(0, 217, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __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_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 217, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_y_new = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+218:     y_old    = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(218,0,__PYX_ERR(0, 218, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_y_old = __pyx_t_7;\n",
+       "  __pyx_t_7 = 0;\n",
+       "
+219:     dydt_new = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(219,0,__PYX_ERR(0, 219, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_dydt_new = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "
+220:     dydt_old = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(220,0,__PYX_ERR(0, 220, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_dydt_old = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
 221: 
\n", + "
 222:     # Setup memory views for these arrays
\n", + "
 223:     cdef double[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view
\n", + "
+224:     y_new_view    = y_new
\n", + "
  __Pyx_TraceLine(224,0,__PYX_ERR(0, 224, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 224, __pyx_L1_error)\n",
+       "  __pyx_v_y_new_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+225:     y_old_view    = y_old
\n", + "
  __Pyx_TraceLine(225,0,__PYX_ERR(0, 225, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 225, __pyx_L1_error)\n",
+       "  __pyx_v_y_old_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+226:     dydt_new_view = dydt_new
\n", + "
  __Pyx_TraceLine(226,0,__PYX_ERR(0, 226, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dydt_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 226, __pyx_L1_error)\n",
+       "  __pyx_v_dydt_new_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+227:     dydt_old_view = dydt_old
\n", + "
  __Pyx_TraceLine(227,0,__PYX_ERR(0, 227, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dydt_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 227, __pyx_L1_error)\n",
+       "  __pyx_v_dydt_old_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
 228: 
\n", + "
 229:     # Store y0 into the y arrays
\n", + "
 230:     cdef double y_value
\n", + "
+231:     for i in range(y_size):
\n", + "
  __Pyx_TraceLine(231,0,__PYX_ERR(0, 231, __pyx_L1_error))\n",
+       "  __pyx_t_3 = __pyx_v_y_size;\n",
+       "  __pyx_t_10 = __pyx_t_3;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "
+232:         y_value = y0[i]
\n", + "
    __Pyx_TraceLine(232,0,__PYX_ERR(0, 232, __pyx_L1_error))\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_12 < 0) {\n",
+       "      __pyx_t_12 += __pyx_v_y0.shape[0];\n",
+       "      if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_12 >= __pyx_v_y0.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 232, __pyx_L1_error)\n",
+       "    }\n",
+       "    __pyx_v_y_value = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
+       "
+233:         y_new_view[i] = y_value
\n", + "
    __Pyx_TraceLine(233,0,__PYX_ERR(0, 233, __pyx_L1_error))\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_12 < 0) {\n",
+       "      __pyx_t_12 += __pyx_v_y_new_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_12 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 233, __pyx_L1_error)\n",
+       "    }\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = __pyx_v_y_value;\n",
+       "
+234:         y_old_view[i] = y_value
\n", + "
    __Pyx_TraceLine(234,0,__PYX_ERR(0, 234, __pyx_L1_error))\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_12 < 0) {\n",
+       "      __pyx_t_12 += __pyx_v_y_old_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_12 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 234, __pyx_L1_error)\n",
+       "    }\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = __pyx_v_y_value;\n",
+       "  }\n",
+       "
 235: 
\n", + "
 236:     # If extra output is true then the output of the diffeq will be larger than the size of y0.
\n", + "
 237:     # Determine that extra size by calling the diffeq and checking its size.
\n", + "
 238:     cdef Py_ssize_t extra_start, total_size, store_loop_size
\n", + "
+239:     extra_start = y_size
\n", + "
  __Pyx_TraceLine(239,0,__PYX_ERR(0, 239, __pyx_L1_error))\n",
+       "  __pyx_v_extra_start = __pyx_v_y_size;\n",
+       "
+240:     total_size  = y_size + num_extra
\n", + "
  __Pyx_TraceLine(240,0,__PYX_ERR(0, 240, __pyx_L1_error))\n",
+       "  __pyx_v_total_size = (__pyx_v_y_size + __pyx_v_num_extra);\n",
+       "
 241:     # Create arrays based on this total size
\n", + "
+242:     diffeq_out     = np.empty(total_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(242,0,__PYX_ERR(0, 242, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __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_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_diffeq_out = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+243:     y0_plus_extra  = np.empty(total_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(243,0,__PYX_ERR(0, 243, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_y0_plus_extra = __pyx_t_7;\n",
+       "  __pyx_t_7 = 0;\n",
+       "
+244:     extra_result   = np.empty(num_extra, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(244,0,__PYX_ERR(0, 244, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_num_extra); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_extra_result = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "
 245: 
\n", + "
 246:     # Setup memory views
\n", + "
 247:     cdef double[:] diffeq_out_view, y0_plus_extra_view, extra_result_view
\n", + "
+248:     diffeq_out_view     = diffeq_out
\n", + "
  __Pyx_TraceLine(248,0,__PYX_ERR(0, 248, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_diffeq_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 248, __pyx_L1_error)\n",
+       "  __pyx_v_diffeq_out_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+249:     y0_plus_extra_view  = y0_plus_extra
\n", + "
  __Pyx_TraceLine(249,0,__PYX_ERR(0, 249, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y0_plus_extra, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 249, __pyx_L1_error)\n",
+       "  __pyx_v_y0_plus_extra_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+250:     extra_result_view   = extra_result
\n", + "
  __Pyx_TraceLine(250,0,__PYX_ERR(0, 250, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_extra_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 250, __pyx_L1_error)\n",
+       "  __pyx_v_extra_result_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
 251: 
\n", + "
 252:     # Capture the extra output for the initial condition.
\n", + "
+253:     if capture_extra:
\n", + "
  __Pyx_TraceLine(253,0,__PYX_ERR(0, 253, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L14;\n",
+       "  }\n",
+       "
+254:         if use_args:
\n", + "
    __Pyx_TraceLine(254,0,__PYX_ERR(0, 254, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L15;\n",
+       "    }\n",
+       "
+255:             diffeq(t_start, y_new, diffeq_out, *args)
\n", + "
      __Pyx_TraceLine(255,0,__PYX_ERR(0, 255, __pyx_L1_error))\n",
+       "      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __Pyx_GIVEREF(__pyx_t_2);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
+       "      __Pyx_INCREF(__pyx_v_y_new);\n",
+       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_y_new);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_diffeq_out);\n",
+       "      __pyx_t_2 = 0;\n",
+       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "        __PYX_ERR(0, 255, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_2 = PyNumber_Add(__pyx_t_7, __pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 255, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 255, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 256:         else:
\n", + "
+257:             diffeq(t_start, y_new, diffeq_out)
\n", + "
    __Pyx_TraceLine(257,0,__PYX_ERR(0, 257, __pyx_L1_error))\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "      __pyx_t_6 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
+       "      __pyx_t_13 = 0;\n",
+       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {\n",
+       "        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);\n",
+       "        if (likely(__pyx_t_8)) {\n",
+       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);\n",
+       "          __Pyx_INCREF(__pyx_t_8);\n",
+       "          __Pyx_INCREF(function);\n",
+       "          __Pyx_DECREF_SET(__pyx_t_6, function);\n",
+       "          __pyx_t_13 = 1;\n",
+       "        }\n",
+       "      }\n",
+       "      {\n",
+       "        PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_2, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "        __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 257, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "      }\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    }\n",
+       "    __pyx_L15:;\n",
+       "
 258: 
\n", + "
 259:         # Extract the extra output from the function output.
\n", + "
+260:         for i in range(total_size):
\n", + "
    __Pyx_TraceLine(260,0,__PYX_ERR(0, 260, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_total_size;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+261:             if i < extra_start:
\n", + "
      __Pyx_TraceLine(261,0,__PYX_ERR(0, 261, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L18;\n",
+       "      }\n",
+       "
 262:                 # Pull from y0
\n", + "
+263:                 y0_plus_extra_view[i] = y0[i]
\n", + "
        __Pyx_TraceLine(263,0,__PYX_ERR(0, 263, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y0.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y0.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 263, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_y0_plus_extra_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_y0_plus_extra_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 263, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
+       "
 264:             else:
\n", + "
 265:                 # Pull from extra output
\n", + "
+266:                 y0_plus_extra_view[i] = diffeq_out_view[i]
\n", + "
      __Pyx_TraceLine(266,0,__PYX_ERR(0, 266, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 266, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_y0_plus_extra_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_y0_plus_extra_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 266, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "      }\n",
+       "      __pyx_L18:;\n",
+       "    }\n",
+       "
+267:         if store_extras_during_integration:
\n", + "
    __Pyx_TraceLine(267,0,__PYX_ERR(0, 267, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L19;\n",
+       "    }\n",
+       "
+268:             store_loop_size = total_size
\n", + "
      __Pyx_TraceLine(268,0,__PYX_ERR(0, 268, __pyx_L1_error))\n",
+       "      __pyx_v_store_loop_size = __pyx_v_total_size;\n",
+       "
 269:         else:
\n", + "
+270:             store_loop_size = y_size
\n", + "
    __Pyx_TraceLine(270,0,__PYX_ERR(0, 270, __pyx_L1_error))\n",
+       "    /*else*/ {\n",
+       "      __pyx_v_store_loop_size = __pyx_v_y_size;\n",
+       "    }\n",
+       "    __pyx_L19:;\n",
+       "
 271:     else:
\n", + "
 272:         # No extra output
\n", + "
+273:         store_loop_size = y_size
\n", + "
  __Pyx_TraceLine(273,0,__PYX_ERR(0, 273, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __pyx_v_store_loop_size = __pyx_v_y_size;\n",
+       "  }\n",
+       "  __pyx_L14:;\n",
+       "
 274: 
\n", + "
+275:     y0_to_store = np.empty(store_loop_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(275,0,__PYX_ERR(0, 275, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_y0_to_store = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
 276:     cdef double[:] y0_to_store_view
\n", + "
+277:     y0_to_store_view = y0_to_store
\n", + "
  __Pyx_TraceLine(277,0,__PYX_ERR(0, 277, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y0_to_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 277, __pyx_L1_error)\n",
+       "  __pyx_v_y0_to_store_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+278:     for i in range(store_loop_size):
\n", + "
  __Pyx_TraceLine(278,0,__PYX_ERR(0, 278, __pyx_L1_error))\n",
+       "  __pyx_t_3 = __pyx_v_store_loop_size;\n",
+       "  __pyx_t_10 = __pyx_t_3;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "
+279:         if store_extras_during_integration:
\n", + "
    __Pyx_TraceLine(279,0,__PYX_ERR(0, 279, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L22;\n",
+       "    }\n",
+       "
+280:             y0_to_store_view[i] = y0_plus_extra_view[i]
\n", + "
      __Pyx_TraceLine(280,0,__PYX_ERR(0, 280, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_y0_plus_extra_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_y0_plus_extra_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 280, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_y0_to_store_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_y0_to_store_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 280, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
+       "
 281:         else:
\n", + "
+282:             y0_to_store_view[i] = y0[i]
\n", + "
    __Pyx_TraceLine(282,0,__PYX_ERR(0, 282, __pyx_L1_error))\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_y0.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_y0.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 282, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_y0_to_store_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_y0_to_store_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 282, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
+       "    }\n",
+       "    __pyx_L22:;\n",
+       "  }\n",
+       "
 283: 
\n", + "
 284:     # # Determine RK scheme
\n", + "
 285:     cdef unsigned char rk_order, error_order
\n", + "
 286:     cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended
\n", + "
 287:     cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1
\n", + "
 288:     cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom
\n", + "
 289: 
\n", + "
+290:     if rk_method == 0:
\n", + "
  __Pyx_TraceLine(290,0,__PYX_ERR(0, 290, __pyx_L1_error))\n",
+       "  switch (__pyx_v_rk_method) {\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 1:\n",
+       "
 291:         # RK23 Method
\n", + "
+292:         rk_order    = RK23_order
\n", + "
    __Pyx_TraceLine(292,0,__PYX_ERR(0, 292, __pyx_L1_error))\n",
+       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
+       "
+293:         error_order = RK23_error_order
\n", + "
    __Pyx_TraceLine(293,0,__PYX_ERR(0, 293, __pyx_L1_error))\n",
+       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
+       "
+294:         rk_n_stages = RK23_n_stages
\n", + "
    __Pyx_TraceLine(294,0,__PYX_ERR(0, 294, __pyx_L1_error))\n",
+       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
+       "
+295:         len_C       = RK23_LEN_C
\n", + "
    __Pyx_TraceLine(295,0,__PYX_ERR(0, 295, __pyx_L1_error))\n",
+       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
+       "
+296:         len_B       = RK23_LEN_B
\n", + "
    __Pyx_TraceLine(296,0,__PYX_ERR(0, 296, __pyx_L1_error))\n",
+       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
+       "
+297:         len_E       = RK23_LEN_E
\n", + "
    __Pyx_TraceLine(297,0,__PYX_ERR(0, 297, __pyx_L1_error))\n",
+       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
+       "
+298:         len_E3      = RK23_LEN_E3
\n", + "
    __Pyx_TraceLine(298,0,__PYX_ERR(0, 298, __pyx_L1_error))\n",
+       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
+       "
+299:         len_E5      = RK23_LEN_E5
\n", + "
    __Pyx_TraceLine(299,0,__PYX_ERR(0, 299, __pyx_L1_error))\n",
+       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
+       "
+300:         len_A0      = RK23_LEN_A0
\n", + "
    __Pyx_TraceLine(300,0,__PYX_ERR(0, 300, __pyx_L1_error))\n",
+       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
+       "
+301:         len_A1      = RK23_LEN_A1
\n", + "
    __Pyx_TraceLine(301,0,__PYX_ERR(0, 301, __pyx_L1_error))\n",
+       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
+       "
+302:     elif rk_method == 1:
\n", + "
    break;\n",
+       "    case 2:\n",
+       "
 303:         # RK45 Method
\n", + "
+304:         rk_order    = RK45_order
\n", + "
    __Pyx_TraceLine(304,0,__PYX_ERR(0, 304, __pyx_L1_error))\n",
+       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
+       "
+305:         error_order = RK45_error_order
\n", + "
    __Pyx_TraceLine(305,0,__PYX_ERR(0, 305, __pyx_L1_error))\n",
+       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
+       "
+306:         rk_n_stages = RK45_n_stages
\n", + "
    __Pyx_TraceLine(306,0,__PYX_ERR(0, 306, __pyx_L1_error))\n",
+       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
+       "
+307:         len_C       = RK45_LEN_C
\n", + "
    __Pyx_TraceLine(307,0,__PYX_ERR(0, 307, __pyx_L1_error))\n",
+       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
+       "
+308:         len_B       = RK45_LEN_B
\n", + "
    __Pyx_TraceLine(308,0,__PYX_ERR(0, 308, __pyx_L1_error))\n",
+       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
+       "
+309:         len_E       = RK45_LEN_E
\n", + "
    __Pyx_TraceLine(309,0,__PYX_ERR(0, 309, __pyx_L1_error))\n",
+       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
+       "
+310:         len_E3      = RK45_LEN_E3
\n", + "
    __Pyx_TraceLine(310,0,__PYX_ERR(0, 310, __pyx_L1_error))\n",
+       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
+       "
+311:         len_E5      = RK45_LEN_E5
\n", + "
    __Pyx_TraceLine(311,0,__PYX_ERR(0, 311, __pyx_L1_error))\n",
+       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
+       "
+312:         len_A0      = RK45_LEN_A0
\n", + "
    __Pyx_TraceLine(312,0,__PYX_ERR(0, 312, __pyx_L1_error))\n",
+       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
+       "
+313:         len_A1      = RK45_LEN_A1
\n", + "
    __Pyx_TraceLine(313,0,__PYX_ERR(0, 313, __pyx_L1_error))\n",
+       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
+       "
+314:     elif rk_method == 2:
\n", + "
    break;\n",
+       "    default:\n",
+       "
 315:         # DOP853 Method
\n", + "
+316:         rk_order    = DOP_order
\n", + "
    __Pyx_TraceLine(316,0,__PYX_ERR(0, 316, __pyx_L1_error))\n",
+       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
+       "
+317:         error_order = DOP_error_order
\n", + "
    __Pyx_TraceLine(317,0,__PYX_ERR(0, 317, __pyx_L1_error))\n",
+       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
+       "
+318:         rk_n_stages = DOP_n_stages
\n", + "
    __Pyx_TraceLine(318,0,__PYX_ERR(0, 318, __pyx_L1_error))\n",
+       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
+       "
+319:         len_C       = DOP_LEN_C
\n", + "
    __Pyx_TraceLine(319,0,__PYX_ERR(0, 319, __pyx_L1_error))\n",
+       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
+       "
+320:         len_B       = DOP_LEN_B
\n", + "
    __Pyx_TraceLine(320,0,__PYX_ERR(0, 320, __pyx_L1_error))\n",
+       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
+       "
+321:         len_E       = DOP_LEN_E
\n", + "
    __Pyx_TraceLine(321,0,__PYX_ERR(0, 321, __pyx_L1_error))\n",
+       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
+       "
+322:         len_E3      = DOP_LEN_E3
\n", + "
    __Pyx_TraceLine(322,0,__PYX_ERR(0, 322, __pyx_L1_error))\n",
+       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
+       "
+323:         len_E5      = DOP_LEN_E5
\n", + "
    __Pyx_TraceLine(323,0,__PYX_ERR(0, 323, __pyx_L1_error))\n",
+       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
+       "
+324:         len_A0      = DOP_LEN_A0
\n", + "
    __Pyx_TraceLine(324,0,__PYX_ERR(0, 324, __pyx_L1_error))\n",
+       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
+       "
+325:         len_A1      = DOP_LEN_A1
\n", + "
    __Pyx_TraceLine(325,0,__PYX_ERR(0, 325, __pyx_L1_error))\n",
+       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
+       "
 326: 
\n", + "
+327:         rk_n_stages_extended = DOP_n_stages_extended
\n", + "
    __Pyx_TraceLine(327,0,__PYX_ERR(0, 327, __pyx_L1_error))\n",
+       "    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
+       "
 328:     else:
\n", + "
+329:         raise Exception(
\n", + "
    __Pyx_TraceLine(329,0,__PYX_ERR(0, 329, __pyx_L1_error))\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __PYX_ERR(0, 329, __pyx_L1_error)\n",
+       "    break;\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_Unexpected_rk_method_provided_Cu); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 329, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__12);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__12);\n",
+       "
 330:             'Unexpected rk_method provided. Currently supported versions are:\\n'
\n", + "
 331:             '\\t0 = RK23\\n'
\n", + "
 332:             '\\t1 = RK34\\n'
\n", + "
 333:             '\\t2 = DOP853')
\n", + "
 334: 
\n", + "
+335:     rk_n_stages_plus1 = rk_n_stages + 1
\n", + "
  __Pyx_TraceLine(335,0,__PYX_ERR(0, 335, __pyx_L1_error))\n",
+       "  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
+       "
+336:     error_expo = 1. / (<double>error_order + 1.)
\n", + "
  __Pyx_TraceLine(336,0,__PYX_ERR(0, 336, __pyx_L1_error))\n",
+       "  __pyx_t_15 = (((double)__pyx_v_error_order) + 1.);\n",
+       "  if (unlikely(__pyx_t_15 == 0)) {\n",
+       "    PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "    __PYX_ERR(0, 336, __pyx_L1_error)\n",
+       "  }\n",
+       "  __pyx_v_error_expo = (1. / __pyx_t_15);\n",
+       "
 337: 
\n", + "
 338:     # Build RK Arrays. Note that all are 1D except for A and K.
\n", + "
+339:     A      = np.empty((len_A0, len_A1), dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(339,0,__PYX_ERR(0, 339, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_A0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_A1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_6);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);\n",
+       "  __pyx_t_6 = 0;\n",
+       "  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 339, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __pyx_v_A = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+340:     B      = np.empty(len_B, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(340,0,__PYX_ERR(0, 340, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_len_B); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 340, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_B = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
+341:     C      = np.empty(len_C, dtype=np.float64, order='C')  # C is always float no matter what y0 is.
\n", + "
  __Pyx_TraceLine(341,0,__PYX_ERR(0, 341, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 341, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_C = __pyx_t_7;\n",
+       "  __pyx_t_7 = 0;\n",
+       "
+342:     E      = np.empty(len_E, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(342,0,__PYX_ERR(0, 342, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_len_E); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_E = __pyx_t_6;\n",
+       "  __pyx_t_6 = 0;\n",
+       "
+343:     E3     = np.empty(len_E3, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(343,0,__PYX_ERR(0, 343, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_len_E3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_6);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);\n",
+       "  __pyx_t_6 = 0;\n",
+       "  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 343, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __pyx_v_E3 = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+344:     E5     = np.empty(len_E5, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(344,0,__PYX_ERR(0, 344, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_len_E5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_E5 = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
+345:     E_tmp  = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(345,0,__PYX_ERR(0, 345, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_E_tmp = __pyx_t_7;\n",
+       "  __pyx_t_7 = 0;\n",
+       "
+346:     E3_tmp = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(346,0,__PYX_ERR(0, 346, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_E3_tmp = __pyx_t_6;\n",
+       "  __pyx_t_6 = 0;\n",
+       "
+347:     E5_tmp = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(347,0,__PYX_ERR(0, 347, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_6);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);\n",
+       "  __pyx_t_6 = 0;\n",
+       "  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 347, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __pyx_v_E5_tmp = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+348:     K      = np.zeros((rk_n_stages_plus1, y_size), dtype=np.float64, order='C')  # It is important K be initialized with 0s
\n", + "
  __Pyx_TraceLine(348,0,__PYX_ERR(0, 348, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_v_K = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
 349: 
\n", + "
 350:     # Setup memory views.
\n", + "
 351:     cdef double[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view
\n", + "
 352:     cdef double[:, :] A_view, K_view
\n", + "
 353:     cdef double[:] C_view
\n", + "
+354:     A_view      = A
\n", + "
  __Pyx_TraceLine(354,0,__PYX_ERR(0, 354, __pyx_L1_error))\n",
+       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 354, __pyx_L1_error)\n",
+       "  __pyx_v_A_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "
+355:     B_view      = B
\n", + "
  __Pyx_TraceLine(355,0,__PYX_ERR(0, 355, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 355, __pyx_L1_error)\n",
+       "  __pyx_v_B_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+356:     C_view      = C
\n", + "
  __Pyx_TraceLine(356,0,__PYX_ERR(0, 356, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 356, __pyx_L1_error)\n",
+       "  __pyx_v_C_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+357:     E_view      = E
\n", + "
  __Pyx_TraceLine(357,0,__PYX_ERR(0, 357, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 357, __pyx_L1_error)\n",
+       "  __pyx_v_E_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+358:     E3_view     = E3
\n", + "
  __Pyx_TraceLine(358,0,__PYX_ERR(0, 358, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 358, __pyx_L1_error)\n",
+       "  __pyx_v_E3_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+359:     E5_view     = E5
\n", + "
  __Pyx_TraceLine(359,0,__PYX_ERR(0, 359, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 359, __pyx_L1_error)\n",
+       "  __pyx_v_E5_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+360:     E_tmp_view  = E_tmp
\n", + "
  __Pyx_TraceLine(360,0,__PYX_ERR(0, 360, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 360, __pyx_L1_error)\n",
+       "  __pyx_v_E_tmp_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+361:     E3_tmp_view = E3_tmp
\n", + "
  __Pyx_TraceLine(361,0,__PYX_ERR(0, 361, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E3_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 361, __pyx_L1_error)\n",
+       "  __pyx_v_E3_tmp_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+362:     E5_tmp_view = E5_tmp
\n", + "
  __Pyx_TraceLine(362,0,__PYX_ERR(0, 362, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E5_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 362, __pyx_L1_error)\n",
+       "  __pyx_v_E5_tmp_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
+363:     K_view      = K
\n", + "
  __Pyx_TraceLine(363,0,__PYX_ERR(0, 363, __pyx_L1_error))\n",
+       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 363, __pyx_L1_error)\n",
+       "  __pyx_v_K_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "
 364: 
\n", + "
 365:     # Populate values based on externally defined constants.
\n", + "
+366:     if rk_method == 0:
\n", + "
  __Pyx_TraceLine(366,0,__PYX_ERR(0, 366, __pyx_L1_error))\n",
+       "  switch (__pyx_v_rk_method) {\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 1:\n",
+       "
 367:         # RK23 Method
\n", + "
+368:         for i in range(len_A0):
\n", + "
    __Pyx_TraceLine(368,0,__PYX_ERR(0, 368, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_A0;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+369:             for j in range(len_A1):
\n", + "
      __Pyx_TraceLine(369,0,__PYX_ERR(0, 369, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_len_A1;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "
+370:                 A_view[i, j] = RK23_A[i][j]
\n", + "
        __Pyx_TraceLine(370,0,__PYX_ERR(0, 370, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_j;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_A_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_A_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_A_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_A_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 370, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]);\n",
+       "      }\n",
+       "    }\n",
+       "
+371:         for i in range(len_B):
\n", + "
    __Pyx_TraceLine(371,0,__PYX_ERR(0, 371, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_B;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+372:             B_view[i] = RK23_B[i]
\n", + "
      __Pyx_TraceLine(372,0,__PYX_ERR(0, 372, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_B_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_B_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 372, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]);\n",
+       "    }\n",
+       "
+373:         for i in range(len_C):
\n", + "
    __Pyx_TraceLine(373,0,__PYX_ERR(0, 373, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_C;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+374:             C_view[i] = RK23_C[i]
\n", + "
      __Pyx_TraceLine(374,0,__PYX_ERR(0, 374, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_C_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_C_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 374, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
+       "    }\n",
+       "
+375:         for i in range(len_E):
\n", + "
    __Pyx_TraceLine(375,0,__PYX_ERR(0, 375, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_E;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+376:             E_view[i] = RK23_E[i]
\n", + "
      __Pyx_TraceLine(376,0,__PYX_ERR(0, 376, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 376, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
+       "
 377:             # Dummy Variables, set equal to E
\n", + "
+378:             E3_view[i] = RK23_E[i]
\n", + "
      __Pyx_TraceLine(378,0,__PYX_ERR(0, 378, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E3_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E3_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 378, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
+       "
+379:             E5_view[i] = RK23_E[i]
\n", + "
      __Pyx_TraceLine(379,0,__PYX_ERR(0, 379, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E5_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E5_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 379, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
+       "    }\n",
+       "
+380:     elif rk_method == 1:
\n", + "
    break;\n",
+       "    default:\n",
+       "
 381:         # RK45 Method
\n", + "
+382:         for i in range(len_A0):
\n", + "
    __Pyx_TraceLine(382,0,__PYX_ERR(0, 382, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_A0;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+383:             for j in range(len_A1):
\n", + "
      __Pyx_TraceLine(383,0,__PYX_ERR(0, 383, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_len_A1;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "
+384:                 A_view[i, j] = RK45_A[i][j]
\n", + "
        __Pyx_TraceLine(384,0,__PYX_ERR(0, 384, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_A_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_A_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_A_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_A_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 384, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]);\n",
+       "      }\n",
+       "    }\n",
+       "
+385:         for i in range(len_B):
\n", + "
    __Pyx_TraceLine(385,0,__PYX_ERR(0, 385, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_B;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+386:             B_view[i] = RK45_B[i]
\n", + "
      __Pyx_TraceLine(386,0,__PYX_ERR(0, 386, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_B_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_B_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 386, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]);\n",
+       "    }\n",
+       "
+387:         for i in range(len_C):
\n", + "
    __Pyx_TraceLine(387,0,__PYX_ERR(0, 387, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_C;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+388:             C_view[i] = RK45_C[i]
\n", + "
      __Pyx_TraceLine(388,0,__PYX_ERR(0, 388, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_C_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_C_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 388, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
+       "    }\n",
+       "
+389:         for i in range(len_E):
\n", + "
    __Pyx_TraceLine(389,0,__PYX_ERR(0, 389, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_E;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+390:             E_view[i] = RK45_E[i]
\n", + "
      __Pyx_TraceLine(390,0,__PYX_ERR(0, 390, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_E_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_E_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 390, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
+       "
 391:             # Dummy Variables, set equal to E
\n", + "
+392:             E3_view[i] = RK45_E[i]
\n", + "
      __Pyx_TraceLine(392,0,__PYX_ERR(0, 392, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_E3_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_E3_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 392, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
+       "
+393:             E5_view[i] = RK45_E[i]
\n", + "
      __Pyx_TraceLine(393,0,__PYX_ERR(0, 393, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_E5_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_E5_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 393, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
+       "    }\n",
+       "
 394:     else:
\n", + "
 395:         # DOP853 Method
\n", + "
+396:         for i in range(len_A0):
\n", + "
    __Pyx_TraceLine(396,0,__PYX_ERR(0, 396, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_A0;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+397:             for j in range(len_A1):
\n", + "
      __Pyx_TraceLine(397,0,__PYX_ERR(0, 397, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_len_A1;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "
+398:                 A_view[i, j] = DOP_A_REDUCED[i][j]
\n", + "
        __Pyx_TraceLine(398,0,__PYX_ERR(0, 398, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_j;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_A_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_A_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_A_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_A_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 398, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]);\n",
+       "      }\n",
+       "    }\n",
+       "
+399:         for i in range(len_B):
\n", + "
    __Pyx_TraceLine(399,0,__PYX_ERR(0, 399, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_B;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+400:             B_view[i] = DOP_B[i]
\n", + "
      __Pyx_TraceLine(400,0,__PYX_ERR(0, 400, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_B_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_B_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 400, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]);\n",
+       "    }\n",
+       "
+401:         for i in range(len_C):
\n", + "
    __Pyx_TraceLine(401,0,__PYX_ERR(0, 401, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_C;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+402:             C_view[i] = DOP_C_REDUCED[i]
\n", + "
      __Pyx_TraceLine(402,0,__PYX_ERR(0, 402, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_C_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_C_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 402, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
+       "    }\n",
+       "
+403:         for i in range(len_E):
\n", + "
    __Pyx_TraceLine(403,0,__PYX_ERR(0, 403, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_E;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+404:             E3_view[i] = DOP_E3[i]
\n", + "
      __Pyx_TraceLine(404,0,__PYX_ERR(0, 404, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E3_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E3_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 404, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
+       "
+405:             E5_view[i] = DOP_E5[i]
\n", + "
      __Pyx_TraceLine(405,0,__PYX_ERR(0, 405, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E5_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E5_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 405, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
+       "
+406:             E_view[i] = DOP_E5[i]
\n", + "
      __Pyx_TraceLine(406,0,__PYX_ERR(0, 406, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 406, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
+       "
 407:             # Dummy Variables, set equal to E3
\n", + "
+408:             E_view[i] = DOP_E3[i]
\n", + "
      __Pyx_TraceLine(408,0,__PYX_ERR(0, 408, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_E_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_E_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 408, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
+       "    }\n",
+       "    break;\n",
+       "  }\n",
+       "
 409: 
\n", + "
 410:     # Initialize variables for start of integration
\n", + "
+411:     if not capture_extra:
\n", + "
  __Pyx_TraceLine(411,0,__PYX_ERR(0, 411, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
 412:         # If `capture_extra` is True then this step was already performed.
\n", + "
+413:         if use_args:
\n", + "
    __Pyx_TraceLine(413,0,__PYX_ERR(0, 413, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L54;\n",
+       "    }\n",
+       "
+414:             diffeq(t_start, y_new, diffeq_out, *args)
\n", + "
      __Pyx_TraceLine(414,0,__PYX_ERR(0, 414, __pyx_L1_error))\n",
+       "      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __Pyx_GIVEREF(__pyx_t_1);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
+       "      __Pyx_INCREF(__pyx_v_y_new);\n",
+       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_y_new);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_diffeq_out);\n",
+       "      __pyx_t_1 = 0;\n",
+       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "        __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_1 = PyNumber_Add(__pyx_t_7, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 415:         else:
\n", + "
+416:             diffeq(t_start, y_new, diffeq_out)
\n", + "
    __Pyx_TraceLine(416,0,__PYX_ERR(0, 416, __pyx_L1_error))\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "      __pyx_t_2 = __pyx_v_diffeq; __pyx_t_6 = NULL;\n",
+       "      __pyx_t_13 = 0;\n",
+       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {\n",
+       "        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);\n",
+       "        if (likely(__pyx_t_6)) {\n",
+       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);\n",
+       "          __Pyx_INCREF(__pyx_t_6);\n",
+       "          __Pyx_INCREF(function);\n",
+       "          __Pyx_DECREF_SET(__pyx_t_2, function);\n",
+       "          __pyx_t_13 = 1;\n",
+       "        }\n",
+       "      }\n",
+       "      {\n",
+       "        PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_1, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "        __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      }\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    }\n",
+       "    __pyx_L54:;\n",
+       "
 417: 
\n", + "
+418:     t_old = t_start
\n", + "
  __Pyx_TraceLine(418,0,__PYX_ERR(0, 418, __pyx_L1_error))\n",
+       "  __pyx_v_t_old = __pyx_v_t_start;\n",
+       "
+419:     t_new = t_start
\n", + "
  __Pyx_TraceLine(419,0,__PYX_ERR(0, 419, __pyx_L1_error))\n",
+       "  __pyx_v_t_new = __pyx_v_t_start;\n",
+       "
 420:     # Initialize dydt arrays.
\n", + "
+421:     for i in range(y_size):
\n", + "
  __Pyx_TraceLine(421,0,__PYX_ERR(0, 421, __pyx_L1_error))\n",
+       "  __pyx_t_3 = __pyx_v_y_size;\n",
+       "  __pyx_t_10 = __pyx_t_3;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "
+422:         dydt_new_view[i] = diffeq_out_view[i]
\n", + "
    __Pyx_TraceLine(422,0,__PYX_ERR(0, 422, __pyx_L1_error))\n",
+       "    __pyx_t_14 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_14 < 0) {\n",
+       "      __pyx_t_14 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_14 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 422, __pyx_L1_error)\n",
+       "    }\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_12 < 0) {\n",
+       "      __pyx_t_12 += __pyx_v_dydt_new_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_12 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 422, __pyx_L1_error)\n",
+       "    }\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "
+423:         dydt_old_view[i] = dydt_new_view[i]
\n", + "
    __Pyx_TraceLine(423,0,__PYX_ERR(0, 423, __pyx_L1_error))\n",
+       "    __pyx_t_14 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_14 < 0) {\n",
+       "      __pyx_t_14 += __pyx_v_dydt_new_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_14 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 423, __pyx_L1_error)\n",
+       "    }\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_12 < 0) {\n",
+       "      __pyx_t_12 += __pyx_v_dydt_old_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_12 >= __pyx_v_dydt_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 423, __pyx_L1_error)\n",
+       "    }\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "  }\n",
+       "
 424: 
\n", + "
 425:     # Setup storage arrays
\n", + "
 426:     # These arrays are built to fit a number of points equal to `expected_size_to_use`
\n", + "
 427:     # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.
\n", + "
 428:     cdef double[:, :] y_results_array_view, y_results_array_new_view, solution_y_view
\n", + "
 429:     cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view
\n", + "
+430:     y_results_array        = np.empty((store_loop_size, expected_size_to_use), dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(430,0,__PYX_ERR(0, 430, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_6);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);\n",
+       "  __pyx_t_6 = 0;\n",
+       "  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __pyx_v_y_results_array = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+431:     time_domain_array      = np.empty(expected_size_to_use, dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(431,0,__PYX_ERR(0, 431, __pyx_L1_error))\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_int(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 431, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_time_domain_array = __pyx_t_7;\n",
+       "  __pyx_t_7 = 0;\n",
+       "
+432:     y_results_array_view   = y_results_array
\n", + "
  __Pyx_TraceLine(432,0,__PYX_ERR(0, 432, __pyx_L1_error))\n",
+       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 432, __pyx_L1_error)\n",
+       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "
+433:     time_domain_array_view = time_domain_array
\n", + "
  __Pyx_TraceLine(433,0,__PYX_ERR(0, 433, __pyx_L1_error))\n",
+       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 433, __pyx_L1_error)\n",
+       "  __pyx_v_time_domain_array_view = __pyx_t_9;\n",
+       "  __pyx_t_9.memview = NULL;\n",
+       "  __pyx_t_9.data = NULL;\n",
+       "
 434: 
\n", + "
 435:     # Load initial conditions into output arrays
\n", + "
+436:     time_domain_array_view[0] = t_start
\n", + "
  __Pyx_TraceLine(436,0,__PYX_ERR(0, 436, __pyx_L1_error))\n",
+       "  __pyx_t_14 = 0;\n",
+       "  __pyx_t_13 = -1;\n",
+       "  if (__pyx_t_14 < 0) {\n",
+       "    __pyx_t_14 += __pyx_v_time_domain_array_view.shape[0];\n",
+       "    if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "  } else if (unlikely(__pyx_t_14 >= __pyx_v_time_domain_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "  if (unlikely(__pyx_t_13 != -1)) {\n",
+       "    __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "    __PYX_ERR(0, 436, __pyx_L1_error)\n",
+       "  }\n",
+       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
+       "
+437:     for i in range(store_loop_size):
\n", + "
  __Pyx_TraceLine(437,0,__PYX_ERR(0, 437, __pyx_L1_error))\n",
+       "  __pyx_t_3 = __pyx_v_store_loop_size;\n",
+       "  __pyx_t_10 = __pyx_t_3;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "
+438:         if store_extras_during_integration:
\n", + "
    __Pyx_TraceLine(438,0,__PYX_ERR(0, 438, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L59;\n",
+       "    }\n",
+       "
+439:             y_results_array_view[i] = y0_plus_extra_view[i]
\n", + "
      __Pyx_TraceLine(439,0,__PYX_ERR(0, 439, __pyx_L1_error))\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_y0_plus_extra_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_y0_plus_extra_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 439, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_9.data = __pyx_v_y_results_array_view.data;\n",
+       "      __pyx_t_9.memview = __pyx_v_y_results_array_view.memview;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_t_9, 1);\n",
+       "      {\n",
+       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
+       "        Py_ssize_t __pyx_tmp_shape = __pyx_v_y_results_array_view.shape[0];\n",
+       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
+       "        if (__pyx_tmp_idx < 0)\n",
+       "            __pyx_tmp_idx += __pyx_tmp_shape;\n",
+       "        if (unlikely(!__Pyx_is_valid_index(__pyx_tmp_idx, __pyx_tmp_shape))) {\n",
+       "            PyErr_SetString(PyExc_IndexError,\n",
+       "                            \"Index out of bounds (axis 0)\");\n",
+       "            __PYX_ERR(0, 439, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
+       "}\n",
+       "\n",
+       "__pyx_t_9.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
+       "__pyx_t_9.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
+       "    __pyx_t_9.suboffsets[0] = -1;\n",
+       "\n",
+       "{\n",
+       "          double __pyx_temp_scalar = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
+       "          {\n",
+       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_9.shape[0];\n",
+       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_9.strides[0];\n",
+       "              char *__pyx_temp_pointer_0;\n",
+       "              Py_ssize_t __pyx_temp_idx_0;\n",
+       "              __pyx_temp_pointer_0 = __pyx_t_9.data;\n",
+       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
+       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
+       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
+       "              }\n",
+       "          }\n",
+       "      }\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
+       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
+       "
 440:         else:
\n", + "
+441:             y_results_array_view[i] = y0[i]
\n", + "
    __Pyx_TraceLine(441,0,__PYX_ERR(0, 441, __pyx_L1_error))\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_14 < 0) {\n",
+       "        __pyx_t_14 += __pyx_v_y0.shape[0];\n",
+       "        if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_14 >= __pyx_v_y0.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 441, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_9.data = __pyx_v_y_results_array_view.data;\n",
+       "      __pyx_t_9.memview = __pyx_v_y_results_array_view.memview;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_t_9, 1);\n",
+       "      {\n",
+       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
+       "        Py_ssize_t __pyx_tmp_shape = __pyx_v_y_results_array_view.shape[0];\n",
+       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
+       "        if (__pyx_tmp_idx < 0)\n",
+       "            __pyx_tmp_idx += __pyx_tmp_shape;\n",
+       "        if (unlikely(!__Pyx_is_valid_index(__pyx_tmp_idx, __pyx_tmp_shape))) {\n",
+       "            PyErr_SetString(PyExc_IndexError,\n",
+       "                            \"Index out of bounds (axis 0)\");\n",
+       "            __PYX_ERR(0, 441, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
+       "}\n",
+       "\n",
+       "__pyx_t_9.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
+       "__pyx_t_9.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
+       "    __pyx_t_9.suboffsets[0] = -1;\n",
+       "\n",
+       "{\n",
+       "          double __pyx_temp_scalar = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
+       "          {\n",
+       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_9.shape[0];\n",
+       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_9.strides[0];\n",
+       "              char *__pyx_temp_pointer_0;\n",
+       "              Py_ssize_t __pyx_temp_idx_0;\n",
+       "              __pyx_temp_pointer_0 = __pyx_t_9.data;\n",
+       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
+       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
+       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
+       "              }\n",
+       "          }\n",
+       "      }\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
+       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
+       "    }\n",
+       "    __pyx_L59:;\n",
+       "  }\n",
+       "
 442: 
\n", + "
 443:     # # Determine size of first step.
\n", + "
 444:     cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale
\n", + "
+445:     if first_step == 0.:
\n", + "
  __Pyx_TraceLine(445,0,__PYX_ERR(0, 445, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L60;\n",
+       "  }\n",
+       "
 446:         # Select an initial step size based on the differential equation.
\n", + "
 447:         # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
\n", + "
 448:         #        Equations I: Nonstiff Problems", Sec. II.4.
\n", + "
+449:         if y_size == 0:
\n", + "
    __Pyx_TraceLine(449,0,__PYX_ERR(0, 449, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L61;\n",
+       "    }\n",
+       "
+450:             step_size = INF
\n", + "
      __Pyx_TraceLine(450,0,__PYX_ERR(0, 450, __pyx_L1_error))\n",
+       "      __pyx_v_step_size = __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_INF;\n",
+       "
 451:         else:
\n", + "
 452:             # Find the norm for d0 and d1
\n", + "
+453:             d0 = 0.
\n", + "
    __Pyx_TraceLine(453,0,__PYX_ERR(0, 453, __pyx_L1_error))\n",
+       "    /*else*/ {\n",
+       "      __pyx_v_d0 = 0.;\n",
+       "
+454:             d1 = 0.
\n", + "
      __Pyx_TraceLine(454,0,__PYX_ERR(0, 454, __pyx_L1_error))\n",
+       "      __pyx_v_d1 = 0.;\n",
+       "
+455:             for i in range(y_size):
\n", + "
      __Pyx_TraceLine(455,0,__PYX_ERR(0, 455, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_y_size;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+456:                 scale = atol + fabs(y_old_view[i]) * rtol
\n", + "
        __Pyx_TraceLine(456,0,__PYX_ERR(0, 456, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_y_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 456, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_scale = (__pyx_v_atol + (fabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
+       "
 457: 
\n", + "
+458:                 d0_abs = fabs(y_old_view[i] / scale)
\n", + "
        __Pyx_TraceLine(458,0,__PYX_ERR(0, 458, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_y_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 458, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_15 = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "        if (unlikely(__pyx_v_scale == 0)) {\n",
+       "          PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "          __PYX_ERR(0, 458, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_d0_abs = fabs((__pyx_t_15 / __pyx_v_scale));\n",
+       "
+459:                 d1_abs = fabs(dydt_old_view[i] / scale)
\n", + "
        __Pyx_TraceLine(459,0,__PYX_ERR(0, 459, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_dydt_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_dydt_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 459, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_15 = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
+       "        if (unlikely(__pyx_v_scale == 0)) {\n",
+       "          PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "          __PYX_ERR(0, 459, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_d1_abs = fabs((__pyx_t_15 / __pyx_v_scale));\n",
+       "
+460:                 d0 += (d0_abs * d0_abs)
\n", + "
        __Pyx_TraceLine(460,0,__PYX_ERR(0, 460, __pyx_L1_error))\n",
+       "        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
+       "
+461:                 d1 += (d1_abs * d1_abs)
\n", + "
        __Pyx_TraceLine(461,0,__PYX_ERR(0, 461, __pyx_L1_error))\n",
+       "        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
+       "      }\n",
+       "
 462: 
\n", + "
+463:             d0 = sqrt(d0) / y_size_sqrt
\n", + "
      __Pyx_TraceLine(463,0,__PYX_ERR(0, 463, __pyx_L1_error))\n",
+       "      __pyx_t_15 = sqrt(__pyx_v_d0);\n",
+       "      if (unlikely(__pyx_v_y_size_sqrt == 0)) {\n",
+       "        PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "        __PYX_ERR(0, 463, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_v_d0 = (__pyx_t_15 / __pyx_v_y_size_sqrt);\n",
+       "
+464:             d1 = sqrt(d1) / y_size_sqrt
\n", + "
      __Pyx_TraceLine(464,0,__PYX_ERR(0, 464, __pyx_L1_error))\n",
+       "      __pyx_t_15 = sqrt(__pyx_v_d1);\n",
+       "      if (unlikely(__pyx_v_y_size_sqrt == 0)) {\n",
+       "        PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "        __PYX_ERR(0, 464, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_v_d1 = (__pyx_t_15 / __pyx_v_y_size_sqrt);\n",
+       "
 465: 
\n", + "
+466:             if d0 < 1.e-5 or d1 < 1.e-5:
\n", + "
      __Pyx_TraceLine(466,0,__PYX_ERR(0, 466, __pyx_L1_error))\n",
+       "      __pyx_t_5 = (__pyx_v_d0 < 1.e-5);\n",
+       "      if (!__pyx_t_5) {\n",
+       "      } else {\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        goto __pyx_L65_bool_binop_done;\n",
+       "      }\n",
+       "      __pyx_t_5 = (__pyx_v_d1 < 1.e-5);\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      __pyx_L65_bool_binop_done:;\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L64;\n",
+       "      }\n",
+       "
+467:                 h0 = 1.e-6
\n", + "
        __Pyx_TraceLine(467,0,__PYX_ERR(0, 467, __pyx_L1_error))\n",
+       "        __pyx_v_h0 = 1.e-6;\n",
+       "
 468:             else:
\n", + "
+469:                 h0 = 0.01 * d0 / d1
\n", + "
      __Pyx_TraceLine(469,0,__PYX_ERR(0, 469, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_15 = (0.01 * __pyx_v_d0);\n",
+       "        if (unlikely(__pyx_v_d1 == 0)) {\n",
+       "          PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "          __PYX_ERR(0, 469, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_h0 = (__pyx_t_15 / __pyx_v_d1);\n",
+       "      }\n",
+       "      __pyx_L64:;\n",
+       "
 470: 
\n", + "
+471:             h0_direction = h0 * direction
\n", + "
      __Pyx_TraceLine(471,0,__PYX_ERR(0, 471, __pyx_L1_error))\n",
+       "      __pyx_v_h0_direction = (__pyx_v_h0 * __pyx_v_direction);\n",
+       "
+472:             t_new = t_old + h0_direction
\n", + "
      __Pyx_TraceLine(472,0,__PYX_ERR(0, 472, __pyx_L1_error))\n",
+       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
+       "
+473:             for i in range(y_size):
\n", + "
      __Pyx_TraceLine(473,0,__PYX_ERR(0, 473, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_y_size;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+474:                 y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]
\n", + "
        __Pyx_TraceLine(474,0,__PYX_ERR(0, 474, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_y_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 474, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_dydt_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_dydt_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 474, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_20 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_20 < 0) {\n",
+       "          __pyx_t_20 += __pyx_v_y_new_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_20 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 474, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_20 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) + (__pyx_v_h0_direction * (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
+       "      }\n",
+       "
 475: 
\n", + "
+476:             if use_args:
\n", + "
      __Pyx_TraceLine(476,0,__PYX_ERR(0, 476, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L69;\n",
+       "      }\n",
+       "
+477:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", + "
        __Pyx_TraceLine(477,0,__PYX_ERR(0, 477, __pyx_L1_error))\n",
+       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 477, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 477, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_GIVEREF(__pyx_t_7);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);\n",
+       "        __Pyx_INCREF(__pyx_v_y_new);\n",
+       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
+       "        __pyx_t_7 = 0;\n",
+       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "          __PYX_ERR(0, 477, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_7 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 477, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 477, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "
 478:             else:
\n", + "
+479:                 diffeq(t_new, y_new, diffeq_out)
\n", + "
      __Pyx_TraceLine(479,0,__PYX_ERR(0, 479, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 479, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "        __pyx_t_1 = __pyx_v_diffeq; __pyx_t_6 = NULL;\n",
+       "        __pyx_t_13 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {\n",
+       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);\n",
+       "          if (likely(__pyx_t_6)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);\n",
+       "            __Pyx_INCREF(__pyx_t_6);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_1, function);\n",
+       "            __pyx_t_13 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_7, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 479, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      }\n",
+       "      __pyx_L69:;\n",
+       "
 480: 
\n", + "
 481:             # Find the norm for d2
\n", + "
+482:             d2 = 0.
\n", + "
      __Pyx_TraceLine(482,0,__PYX_ERR(0, 482, __pyx_L1_error))\n",
+       "      __pyx_v_d2 = 0.;\n",
+       "
+483:             for i in range(y_size):
\n", + "
      __Pyx_TraceLine(483,0,__PYX_ERR(0, 483, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_y_size;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+484:                 dydt_new_view[i] = diffeq_out_view[i]
\n", + "
        __Pyx_TraceLine(484,0,__PYX_ERR(0, 484, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 484, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_dydt_new_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 484, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "
+485:                 scale = atol + fabs(y_old_view[i]) * rtol
\n", + "
        __Pyx_TraceLine(485,0,__PYX_ERR(0, 485, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 485, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_scale = (__pyx_v_atol + (fabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
+       "
+486:                 d2_abs = fabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)
\n", + "
        __Pyx_TraceLine(486,0,__PYX_ERR(0, 486, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_dydt_new_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 486, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_dydt_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_dydt_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 486, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_15 = ((*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))));\n",
+       "        if (unlikely(__pyx_v_scale == 0)) {\n",
+       "          PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "          __PYX_ERR(0, 486, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_d2_abs = fabs((__pyx_t_15 / __pyx_v_scale));\n",
+       "
+487:                 d2 += (d2_abs * d2_abs)
\n", + "
        __Pyx_TraceLine(487,0,__PYX_ERR(0, 487, __pyx_L1_error))\n",
+       "        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
+       "      }\n",
+       "
 488: 
\n", + "
+489:             d2 = sqrt(d2) / (h0 * y_size_sqrt)
\n", + "
      __Pyx_TraceLine(489,0,__PYX_ERR(0, 489, __pyx_L1_error))\n",
+       "      __pyx_t_15 = sqrt(__pyx_v_d2);\n",
+       "      __pyx_t_21 = (__pyx_v_h0 * __pyx_v_y_size_sqrt);\n",
+       "      if (unlikely(__pyx_t_21 == 0)) {\n",
+       "        PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "        __PYX_ERR(0, 489, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_v_d2 = (__pyx_t_15 / __pyx_t_21);\n",
+       "
 490: 
\n", + "
+491:             if d1 <= 1.e-15 and d2 <= 1.e-15:
\n", + "
      __Pyx_TraceLine(491,0,__PYX_ERR(0, 491, __pyx_L1_error))\n",
+       "      __pyx_t_5 = (__pyx_v_d1 <= 1.e-15);\n",
+       "      if (__pyx_t_5) {\n",
+       "      } else {\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        goto __pyx_L73_bool_binop_done;\n",
+       "      }\n",
+       "      __pyx_t_5 = (__pyx_v_d2 <= 1.e-15);\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      __pyx_L73_bool_binop_done:;\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L72;\n",
+       "      }\n",
+       "
+492:                 h1 = max(1.e-6, h0 * 1.e-3)
\n", + "
        __Pyx_TraceLine(492,0,__PYX_ERR(0, 492, __pyx_L1_error))\n",
+       "        __pyx_t_21 = (__pyx_v_h0 * 1.e-3);\n",
+       "        __pyx_t_15 = 1.e-6;\n",
+       "        if ((__pyx_t_21 > __pyx_t_15)) {\n",
+       "          __pyx_t_22 = __pyx_t_21;\n",
+       "        } else {\n",
+       "          __pyx_t_22 = __pyx_t_15;\n",
+       "        }\n",
+       "        __pyx_v_h1 = __pyx_t_22;\n",
+       "
 493:             else:
\n", + "
+494:                 h1 = (0.01 / max(d1, d2))**error_expo
\n", + "
      __Pyx_TraceLine(494,0,__PYX_ERR(0, 494, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_22 = __pyx_v_d2;\n",
+       "        __pyx_t_21 = __pyx_v_d1;\n",
+       "        if ((__pyx_t_22 > __pyx_t_21)) {\n",
+       "          __pyx_t_15 = __pyx_t_22;\n",
+       "        } else {\n",
+       "          __pyx_t_15 = __pyx_t_21;\n",
+       "        }\n",
+       "        __pyx_t_22 = __pyx_t_15;\n",
+       "        if (unlikely(__pyx_t_22 == 0)) {\n",
+       "          PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "          __PYX_ERR(0, 494, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_h1 = pow((0.01 / __pyx_t_22), __pyx_v_error_expo);\n",
+       "      }\n",
+       "      __pyx_L72:;\n",
+       "
 495: 
\n", + "
+496:             step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))
\n", + "
      __Pyx_TraceLine(496,0,__PYX_ERR(0, 496, __pyx_L1_error))\n",
+       "      __pyx_t_22 = __pyx_v_h1;\n",
+       "      __pyx_t_15 = (100. * __pyx_v_h0);\n",
+       "      if ((__pyx_t_22 < __pyx_t_15)) {\n",
+       "        __pyx_t_21 = __pyx_t_22;\n",
+       "      } else {\n",
+       "        __pyx_t_21 = __pyx_t_15;\n",
+       "      }\n",
+       "      __pyx_t_22 = __pyx_t_21;\n",
+       "      __pyx_t_21 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
+       "      if ((__pyx_t_22 > __pyx_t_21)) {\n",
+       "        __pyx_t_15 = __pyx_t_22;\n",
+       "      } else {\n",
+       "        __pyx_t_15 = __pyx_t_21;\n",
+       "      }\n",
+       "      __pyx_v_step_size = __pyx_t_15;\n",
+       "    }\n",
+       "    __pyx_L61:;\n",
+       "
 497:     else:
\n", + "
+498:         if first_step <= 0.:
\n", + "
  __Pyx_TraceLine(498,0,__PYX_ERR(0, 498, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
+       "    if (unlikely(__pyx_t_4)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+499:             raise Exception('Error in user-provided step size: Step size must be a positive number.')
\n", + "
      __Pyx_TraceLine(499,0,__PYX_ERR(0, 499, __pyx_L1_error))\n",
+       "      __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 499, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __PYX_ERR(0, 499, __pyx_L1_error)\n",
+       "/* … */\n",
+       "  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 499, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__13);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__13);\n",
+       "
+500:         elif first_step > t_delta_abs:
\n", + "
    __Pyx_TraceLine(500,0,__PYX_ERR(0, 500, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
+       "    if (unlikely(__pyx_t_4)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+501:             raise Exception('Error in user-provided step size: Step size can not exceed bounds.')
\n", + "
      __Pyx_TraceLine(501,0,__PYX_ERR(0, 501, __pyx_L1_error))\n",
+       "      __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 501, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __PYX_ERR(0, 501, __pyx_L1_error)\n",
+       "/* … */\n",
+       "  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size_2); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 501, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__14);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__14);\n",
+       "
+502:         step_size = first_step
\n", + "
    __Pyx_TraceLine(502,0,__PYX_ERR(0, 502, __pyx_L1_error))\n",
+       "    __pyx_v_step_size = __pyx_v_first_step;\n",
+       "  }\n",
+       "  __pyx_L60:;\n",
+       "
 503: 
\n", + "
 504:     # # Main integration loop
\n", + "
 505:     cdef double min_step, step_factor, step
\n", + "
 506:     cdef double c
\n", + "
 507:     cdef double K_scale
\n", + "
 508:     # Integrator Status Codes
\n", + "
 509:     #   0  = Running
\n", + "
 510:     #   -1 = Failed
\n", + "
 511:     #   1  = Finished with no obvious issues
\n", + "
 512:     cdef char status
\n", + "
 513:     cdef Py_ssize_t len_t
\n", + "
+514:     status = 0
\n", + "
  __Pyx_TraceLine(514,0,__PYX_ERR(0, 514, __pyx_L1_error))\n",
+       "  __pyx_v_status = 0;\n",
+       "
+515:     len_t  = 1  # There is an initial condition provided so the time length is already 1
\n", + "
  __Pyx_TraceLine(515,0,__PYX_ERR(0, 515, __pyx_L1_error))\n",
+       "  __pyx_v_len_t = 1;\n",
+       "
+516:     while status == 0:
\n", + "
  __Pyx_TraceLine(516,0,__PYX_ERR(0, 516, __pyx_L1_error))\n",
+       "  while (1) {\n",
+       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
+       "    if (!__pyx_t_4) break;\n",
+       "
+517:         if t_new == t_end or y_size == 0:
\n", + "
    __Pyx_TraceLine(517,0,__PYX_ERR(0, 517, __pyx_L1_error))\n",
+       "    __pyx_t_5 = (__pyx_v_t_new == __pyx_v_t_end);\n",
+       "    if (!__pyx_t_5) {\n",
+       "    } else {\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      goto __pyx_L79_bool_binop_done;\n",
+       "    }\n",
+       "    __pyx_t_5 = (__pyx_v_y_size == 0);\n",
+       "    __pyx_t_4 = __pyx_t_5;\n",
+       "    __pyx_L79_bool_binop_done:;\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+518:             t_old = t_end
\n", + "
      __Pyx_TraceLine(518,0,__PYX_ERR(0, 518, __pyx_L1_error))\n",
+       "      __pyx_v_t_old = __pyx_v_t_end;\n",
+       "
+519:             t_new = t_end
\n", + "
      __Pyx_TraceLine(519,0,__PYX_ERR(0, 519, __pyx_L1_error))\n",
+       "      __pyx_v_t_new = __pyx_v_t_end;\n",
+       "
+520:             status = 1
\n", + "
      __Pyx_TraceLine(520,0,__PYX_ERR(0, 520, __pyx_L1_error))\n",
+       "      __pyx_v_status = 1;\n",
+       "
+521:             break
\n", + "
      __Pyx_TraceLine(521,0,__PYX_ERR(0, 521, __pyx_L1_error))\n",
+       "      goto __pyx_L77_break;\n",
+       "
 522: 
\n", + "
 523:         # Run RK integration step
\n", + "
 524:         # Determine step size based on previous loop
\n", + "
 525:         # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)
\n", + "
+526:         min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)
\n", + "
    __Pyx_TraceLine(526,0,__PYX_ERR(0, 526, __pyx_L1_error))\n",
+       "    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
+       "
 527:         # Look for over/undershoots in previous step size
\n", + "
+528:         if step_size > max_step:
\n", + "
    __Pyx_TraceLine(528,0,__PYX_ERR(0, 528, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L81;\n",
+       "    }\n",
+       "
+529:             step_size = max_step
\n", + "
      __Pyx_TraceLine(529,0,__PYX_ERR(0, 529, __pyx_L1_error))\n",
+       "      __pyx_v_step_size = __pyx_v_max_step;\n",
+       "
+530:         elif step_size < min_step:
\n", + "
    __Pyx_TraceLine(530,0,__PYX_ERR(0, 530, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "    __pyx_L81:;\n",
+       "
+531:             step_size = min_step
\n", + "
      __Pyx_TraceLine(531,0,__PYX_ERR(0, 531, __pyx_L1_error))\n",
+       "      __pyx_v_step_size = __pyx_v_min_step;\n",
+       "
 532: 
\n", + "
 533:         # Determine new step size
\n", + "
+534:         step_accepted = False
\n", + "
    __Pyx_TraceLine(534,0,__PYX_ERR(0, 534, __pyx_L1_error))\n",
+       "    __pyx_v_step_accepted = 0;\n",
+       "
+535:         step_rejected = False
\n", + "
    __Pyx_TraceLine(535,0,__PYX_ERR(0, 535, __pyx_L1_error))\n",
+       "    __pyx_v_step_rejected = 0;\n",
+       "
+536:         step_error    = False
\n", + "
    __Pyx_TraceLine(536,0,__PYX_ERR(0, 536, __pyx_L1_error))\n",
+       "    __pyx_v_step_error = 0;\n",
+       "
 537: 
\n", + "
 538:         # # Step Loop
\n", + "
+539:         while not step_accepted:
\n", + "
    __Pyx_TraceLine(539,0,__PYX_ERR(0, 539, __pyx_L1_error))\n",
+       "    while (1) {\n",
+       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
+       "      if (!__pyx_t_4) break;\n",
+       "
 540: 
\n", + "
+541:             if step_size < min_step:
\n", + "
      __Pyx_TraceLine(541,0,__PYX_ERR(0, 541, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "
+542:                 step_error = True
\n", + "
        __Pyx_TraceLine(542,0,__PYX_ERR(0, 542, __pyx_L1_error))\n",
+       "        __pyx_v_step_error = 1;\n",
+       "
+543:                 status     = -1
\n", + "
        __Pyx_TraceLine(543,0,__PYX_ERR(0, 543, __pyx_L1_error))\n",
+       "        __pyx_v_status = -1;\n",
+       "
+544:                 break
\n", + "
        __Pyx_TraceLine(544,0,__PYX_ERR(0, 544, __pyx_L1_error))\n",
+       "        goto __pyx_L83_break;\n",
+       "
 545: 
\n", + "
 546:             # Move time forward for this particular step size
\n", + "
+547:             step = step_size * direction
\n", + "
      __Pyx_TraceLine(547,0,__PYX_ERR(0, 547, __pyx_L1_error))\n",
+       "      __pyx_v_step = (__pyx_v_step_size * __pyx_v_direction);\n",
+       "
+548:             t_new = t_old + step
\n", + "
      __Pyx_TraceLine(548,0,__PYX_ERR(0, 548, __pyx_L1_error))\n",
+       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
+       "
 549: 
\n", + "
 550:             # Check that we are not at the end of integration with that move
\n", + "
+551:             if direction * (t_new - t_end) > 0.:
\n", + "
      __Pyx_TraceLine(551,0,__PYX_ERR(0, 551, __pyx_L1_error))\n",
+       "      __pyx_t_4 = ((__pyx_v_direction * (__pyx_v_t_new - __pyx_v_t_end)) > 0.);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "
+552:                 t_new = t_end
\n", + "
        __Pyx_TraceLine(552,0,__PYX_ERR(0, 552, __pyx_L1_error))\n",
+       "        __pyx_v_t_new = __pyx_v_t_end;\n",
+       "
 553: 
\n", + "
 554:                 # Correct the step if we were at the end of integration
\n", + "
+555:                 step = t_new - t_old
\n", + "
        __Pyx_TraceLine(555,0,__PYX_ERR(0, 555, __pyx_L1_error))\n",
+       "        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
+       "
+556:                 step_size = fabs(step)
\n", + "
        __Pyx_TraceLine(556,0,__PYX_ERR(0, 556, __pyx_L1_error))\n",
+       "        __pyx_v_step_size = fabs(__pyx_v_step);\n",
+       "
 557: 
\n", + "
 558:             # Calculate derivative using RK method
\n", + "
+559:             for i in range(y_size):
\n", + "
      __Pyx_TraceLine(559,0,__PYX_ERR(0, 559, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_y_size;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+560:                 K_view[0, i] = dydt_old_view[i]
\n", + "
        __Pyx_TraceLine(560,0,__PYX_ERR(0, 560, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_dydt_old_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_dydt_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 560, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_12 = 0;\n",
+       "        __pyx_t_20 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_K_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_20 < 0) {\n",
+       "          __pyx_t_20 += __pyx_v_K_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_20 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 560, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_20 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
+       "      }\n",
+       "
 561: 
\n", + "
+562:             for s in range(1, len_C):
\n", + "
      __Pyx_TraceLine(562,0,__PYX_ERR(0, 562, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_len_C;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_s = __pyx_t_11;\n",
+       "
+563:                 c = C_view[s]
\n", + "
        __Pyx_TraceLine(563,0,__PYX_ERR(0, 563, __pyx_L1_error))\n",
+       "        __pyx_t_14 = __pyx_v_s;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_14 < 0) {\n",
+       "          __pyx_t_14 += __pyx_v_C_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_14 >= __pyx_v_C_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 563, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
+       "
+564:                 time_ = t_old + c * step
\n", + "
        __Pyx_TraceLine(564,0,__PYX_ERR(0, 564, __pyx_L1_error))\n",
+       "        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
+       "
 565: 
\n", + "
 566:                 # Dot Product (K, a) * step
\n", + "
+567:                 for j in range(s):
\n", + "
        __Pyx_TraceLine(567,0,__PYX_ERR(0, 567, __pyx_L1_error))\n",
+       "        __pyx_t_17 = __pyx_v_s;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_j = __pyx_t_19;\n",
+       "
+568:                     for i in range(y_size):
\n", + "
          __Pyx_TraceLine(568,0,__PYX_ERR(0, 568, __pyx_L1_error))\n",
+       "          __pyx_t_23 = __pyx_v_y_size;\n",
+       "          __pyx_t_24 = __pyx_t_23;\n",
+       "          for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_24; __pyx_t_25+=1) {\n",
+       "            __pyx_v_i = __pyx_t_25;\n",
+       "
+569:                         if j == 0:
\n", + "
            __Pyx_TraceLine(569,0,__PYX_ERR(0, 569, __pyx_L1_error))\n",
+       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "
 570:                             # Initialize
\n", + "
+571:                             y_new_view[i] = y_old_view[i]
\n", + "
              __Pyx_TraceLine(571,0,__PYX_ERR(0, 571, __pyx_L1_error))\n",
+       "              __pyx_t_14 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_14 < 0) {\n",
+       "                __pyx_t_14 += __pyx_v_y_old_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_14 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 571, __pyx_L1_error)\n",
+       "              }\n",
+       "              __pyx_t_20 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_20 < 0) {\n",
+       "                __pyx_t_20 += __pyx_v_y_new_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_20 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 571, __pyx_L1_error)\n",
+       "              }\n",
+       "              *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_20 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "
 572: 
\n", + "
+573:                         y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)
\n", + "
            __Pyx_TraceLine(573,0,__PYX_ERR(0, 573, __pyx_L1_error))\n",
+       "            __pyx_t_14 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_14 < 0) {\n",
+       "              __pyx_t_14 += __pyx_v_y_new_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_14 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 573, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_20 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_K_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_K_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 573, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_26 = __pyx_v_s;\n",
+       "            __pyx_t_27 = __pyx_v_j;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_A_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_A_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_27 < 0) {\n",
+       "              __pyx_t_27 += __pyx_v_A_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_27 >= __pyx_v_A_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 573, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_28 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_28 < 0) {\n",
+       "              __pyx_t_28 += __pyx_v_y_new_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_28 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_28 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 573, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_28 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_20 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_26 * __pyx_v_A_view.strides[0]) ) + __pyx_t_27 * __pyx_v_A_view.strides[1]) )))) * __pyx_v_step));\n",
+       "          }\n",
+       "        }\n",
+       "
 574: 
\n", + "
+575:                 if use_args:
\n", + "
        __Pyx_TraceLine(575,0,__PYX_ERR(0, 575, __pyx_L1_error))\n",
+       "        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L95;\n",
+       "        }\n",
+       "
+576:                     diffeq(time_, y_new, diffeq_out, *args)
\n", + "
          __Pyx_TraceLine(576,0,__PYX_ERR(0, 576, __pyx_L1_error))\n",
+       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 576, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_1);\n",
+       "          __Pyx_GIVEREF(__pyx_t_8);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
+       "          __Pyx_INCREF(__pyx_v_y_new);\n",
+       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y_new);\n",
+       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_diffeq_out);\n",
+       "          __pyx_t_8 = 0;\n",
+       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "            __PYX_ERR(0, 576, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 576, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_1);\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "
 577:                 else:
\n", + "
+578:                     diffeq(time_, y_new, diffeq_out)
\n", + "
        __Pyx_TraceLine(578,0,__PYX_ERR(0, 578, __pyx_L1_error))\n",
+       "        /*else*/ {\n",
+       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "          __pyx_t_7 = __pyx_v_diffeq; __pyx_t_6 = NULL;\n",
+       "          __pyx_t_13 = 0;\n",
+       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
+       "            __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);\n",
+       "            if (likely(__pyx_t_6)) {\n",
+       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
+       "              __Pyx_INCREF(__pyx_t_6);\n",
+       "              __Pyx_INCREF(function);\n",
+       "              __Pyx_DECREF_SET(__pyx_t_7, function);\n",
+       "              __pyx_t_13 = 1;\n",
+       "            }\n",
+       "          }\n",
+       "          {\n",
+       "            PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_8, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "            __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_1);\n",
+       "            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "          }\n",
+       "          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        }\n",
+       "        __pyx_L95:;\n",
+       "
 579: 
\n", + "
+580:                 for i in range(y_size):
\n", + "
        __Pyx_TraceLine(580,0,__PYX_ERR(0, 580, __pyx_L1_error))\n",
+       "        __pyx_t_17 = __pyx_v_y_size;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_i = __pyx_t_19;\n",
+       "
+581:                     K_view[s, i] = diffeq_out_view[i]
\n", + "
          __Pyx_TraceLine(581,0,__PYX_ERR(0, 581, __pyx_L1_error))\n",
+       "          __pyx_t_27 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_27 < 0) {\n",
+       "            __pyx_t_27 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_27 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_26 = __pyx_v_s;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_26 < 0) {\n",
+       "            __pyx_t_26 += __pyx_v_K_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_26 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_K_view.shape[1];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "          }\n",
+       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_26 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_27 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "        }\n",
+       "      }\n",
+       "
 582: 
\n", + "
 583:             # Dot Product (K, B) * step
\n", + "
+584:             for j in range(rk_n_stages):
\n", + "
      __Pyx_TraceLine(584,0,__PYX_ERR(0, 584, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_rk_n_stages;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_j = __pyx_t_11;\n",
+       "
 585:                 # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match
\n", + "
 586:                 #  the shape of B.
\n", + "
+587:                 for i in range(y_size):
\n", + "
        __Pyx_TraceLine(587,0,__PYX_ERR(0, 587, __pyx_L1_error))\n",
+       "        __pyx_t_17 = __pyx_v_y_size;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_i = __pyx_t_19;\n",
+       "
+588:                     if j == 0:
\n", + "
          __Pyx_TraceLine(588,0,__PYX_ERR(0, 588, __pyx_L1_error))\n",
+       "          __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "          if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          }\n",
+       "
 589:                         # Initialize
\n", + "
+590:                         y_new_view[i] = y_old_view[i]
\n", + "
            __Pyx_TraceLine(590,0,__PYX_ERR(0, 590, __pyx_L1_error))\n",
+       "            __pyx_t_27 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_27 < 0) {\n",
+       "              __pyx_t_27 += __pyx_v_y_old_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_27 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 590, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_y_new_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 590, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_27 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "
+591:                     y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)
\n", + "
          __Pyx_TraceLine(591,0,__PYX_ERR(0, 591, __pyx_L1_error))\n",
+       "          __pyx_t_27 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_27 < 0) {\n",
+       "            __pyx_t_27 += __pyx_v_y_new_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_27 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 591, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_12 = __pyx_v_j;\n",
+       "          __pyx_t_26 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_K_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (__pyx_t_26 < 0) {\n",
+       "            __pyx_t_26 += __pyx_v_K_view.shape[1];\n",
+       "            if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "          } else if (unlikely(__pyx_t_26 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 591, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_20 = __pyx_v_j;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_B_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_B_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 591, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_14 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_14 < 0) {\n",
+       "            __pyx_t_14 += __pyx_v_y_new_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_14 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_14 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 591, __pyx_L1_error)\n",
+       "          }\n",
+       "          *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_27 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_26 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_20 * __pyx_v_B_view.strides[0]) )))) * __pyx_v_step));\n",
+       "        }\n",
+       "      }\n",
+       "
 592: 
\n", + "
+593:             if use_args:
\n", + "
      __Pyx_TraceLine(593,0,__PYX_ERR(0, 593, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L103;\n",
+       "      }\n",
+       "
+594:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", + "
        __Pyx_TraceLine(594,0,__PYX_ERR(0, 594, __pyx_L1_error))\n",
+       "        __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 594, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_GIVEREF(__pyx_t_1);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
+       "        __Pyx_INCREF(__pyx_v_y_new);\n",
+       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_y_new);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_diffeq_out);\n",
+       "        __pyx_t_1 = 0;\n",
+       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "          __PYX_ERR(0, 594, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_1 = PyNumber_Add(__pyx_t_7, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 594, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 595:             else:
\n", + "
+596:                 diffeq(t_new, y_new, diffeq_out)
\n", + "
      __Pyx_TraceLine(596,0,__PYX_ERR(0, 596, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "        __pyx_t_8 = __pyx_v_diffeq; __pyx_t_6 = NULL;\n",
+       "        __pyx_t_13 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
+       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);\n",
+       "          if (likely(__pyx_t_6)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
+       "            __Pyx_INCREF(__pyx_t_6);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_8, function);\n",
+       "            __pyx_t_13 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_1, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 596, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_7);\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "      }\n",
+       "      __pyx_L103:;\n",
+       "
 597: 
\n", + "
+598:             for i in range(store_loop_size):
\n", + "
      __Pyx_TraceLine(598,0,__PYX_ERR(0, 598, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_store_loop_size;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+599:                 if i < extra_start:
\n", + "
        __Pyx_TraceLine(599,0,__PYX_ERR(0, 599, __pyx_L1_error))\n",
+       "        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L106;\n",
+       "        }\n",
+       "
 600:                     # Set diffeq results
\n", + "
+601:                     dydt_new_view[i] = diffeq_out_view[i]
\n", + "
          __Pyx_TraceLine(601,0,__PYX_ERR(0, 601, __pyx_L1_error))\n",
+       "          __pyx_t_20 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 601, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_26 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_26 < 0) {\n",
+       "            __pyx_t_26 += __pyx_v_dydt_new_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_26 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 601, __pyx_L1_error)\n",
+       "          }\n",
+       "          *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_26 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_20 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "
 602:                 else:
\n", + "
 603:                     # Set extra results
\n", + "
+604:                     extra_result_view[i - extra_start] = diffeq_out_view[i]
\n", + "
        __Pyx_TraceLine(604,0,__PYX_ERR(0, 604, __pyx_L1_error))\n",
+       "        /*else*/ {\n",
+       "          __pyx_t_20 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 604, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_26 = (__pyx_v_i - __pyx_v_extra_start);\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_26 < 0) {\n",
+       "            __pyx_t_26 += __pyx_v_extra_result_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_26 >= __pyx_v_extra_result_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 604, __pyx_L1_error)\n",
+       "          }\n",
+       "          *((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_26 * __pyx_v_extra_result_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_20 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "        }\n",
+       "        __pyx_L106:;\n",
+       "      }\n",
+       "
 605: 
\n", + "
+606:             if rk_method == 2:
\n", + "
      __Pyx_TraceLine(606,0,__PYX_ERR(0, 606, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L107;\n",
+       "      }\n",
+       "
 607:                 # Calculate Error for DOP853
\n", + "
 608: 
\n", + "
 609:                 # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale
\n", + "
+610:                 for i in range(y_size):
\n", + "
        __Pyx_TraceLine(610,0,__PYX_ERR(0, 610, __pyx_L1_error))\n",
+       "        __pyx_t_3 = __pyx_v_y_size;\n",
+       "        __pyx_t_10 = __pyx_t_3;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
 611:                     # Check how well this step performed.
\n", + "
+612:                     scale = atol + max(fabs(y_old_view[i]), fabs(y_new_view[i])) * rtol
\n", + "
          __Pyx_TraceLine(612,0,__PYX_ERR(0, 612, __pyx_L1_error))\n",
+       "          __pyx_t_20 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_y_new_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 612, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_15 = fabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_20 * __pyx_v_y_new_view.strides[0]) ))));\n",
+       "          __pyx_t_20 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_y_old_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 612, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_22 = fabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_20 * __pyx_v_y_old_view.strides[0]) ))));\n",
+       "          if ((__pyx_t_15 > __pyx_t_22)) {\n",
+       "            __pyx_t_21 = __pyx_t_15;\n",
+       "          } else {\n",
+       "            __pyx_t_21 = __pyx_t_22;\n",
+       "          }\n",
+       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_21 * __pyx_v_rtol));\n",
+       "
 613: 
\n", + "
+614:                     for j in range(rk_n_stages_plus1):
\n", + "
          __Pyx_TraceLine(614,0,__PYX_ERR(0, 614, __pyx_L1_error))\n",
+       "          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "
+615:                         if j == 0:
\n", + "
            __Pyx_TraceLine(615,0,__PYX_ERR(0, 615, __pyx_L1_error))\n",
+       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "              goto __pyx_L112;\n",
+       "            }\n",
+       "
 616:                             # Initialize
\n", + "
+617:                             E5_tmp_view[i] = 0.
\n", + "
              __Pyx_TraceLine(617,0,__PYX_ERR(0, 617, __pyx_L1_error))\n",
+       "              __pyx_t_20 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_20 < 0) {\n",
+       "                __pyx_t_20 += __pyx_v_E5_tmp_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_20 >= __pyx_v_E5_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 617, __pyx_L1_error)\n",
+       "              }\n",
+       "              *((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_20 * __pyx_v_E5_tmp_view.strides[0]) )) = 0.;\n",
+       "
+618:                             E3_tmp_view[i] = 0.
\n", + "
              __Pyx_TraceLine(618,0,__PYX_ERR(0, 618, __pyx_L1_error))\n",
+       "              __pyx_t_20 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_20 < 0) {\n",
+       "                __pyx_t_20 += __pyx_v_E3_tmp_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_20 >= __pyx_v_E3_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 618, __pyx_L1_error)\n",
+       "              }\n",
+       "              *((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_20 * __pyx_v_E3_tmp_view.strides[0]) )) = 0.;\n",
+       "
 619: 
\n", + "
+620:                         elif j == rk_n_stages:
\n", + "
            __Pyx_TraceLine(620,0,__PYX_ERR(0, 620, __pyx_L1_error))\n",
+       "            __pyx_t_4 = (__pyx_v_j == __pyx_v_rk_n_stages);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "            __pyx_L112:;\n",
+       "
 621:                             # Set last array of the K array.
\n", + "
+622:                             K_view[j, i] = dydt_new_view[i]
\n", + "
              __Pyx_TraceLine(622,0,__PYX_ERR(0, 622, __pyx_L1_error))\n",
+       "              __pyx_t_20 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_20 < 0) {\n",
+       "                __pyx_t_20 += __pyx_v_dydt_new_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_20 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 622, __pyx_L1_error)\n",
+       "              }\n",
+       "              __pyx_t_26 = __pyx_v_j;\n",
+       "              __pyx_t_12 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_26 < 0) {\n",
+       "                __pyx_t_26 += __pyx_v_K_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_26 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (__pyx_t_12 < 0) {\n",
+       "                __pyx_t_12 += __pyx_v_K_view.shape[1];\n",
+       "                if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "              } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 622, __pyx_L1_error)\n",
+       "              }\n",
+       "              *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_26 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_20 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "
 623: 
\n", + "
+624:                         K_scale = K_view[j, i] / scale
\n", + "
            __Pyx_TraceLine(624,0,__PYX_ERR(0, 624, __pyx_L1_error))\n",
+       "            __pyx_t_20 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_K_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_K_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 624, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_21 = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_20 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )));\n",
+       "            if (unlikely(__pyx_v_scale == 0)) {\n",
+       "              PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "              __PYX_ERR(0, 624, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_v_K_scale = (__pyx_t_21 / __pyx_v_scale);\n",
+       "
+625:                         E5_tmp_view[i] = E5_tmp_view[i] + (K_scale * E5_view[j])
\n", + "
            __Pyx_TraceLine(625,0,__PYX_ERR(0, 625, __pyx_L1_error))\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_E5_tmp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_E5_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 625, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_20 = __pyx_v_j;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_E5_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_E5_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 625, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_26 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_E5_tmp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_E5_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 625, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_26 * __pyx_v_E5_tmp_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_12 * __pyx_v_E5_tmp_view.strides[0]) ))) + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_20 * __pyx_v_E5_view.strides[0]) )))));\n",
+       "
+626:                         E3_tmp_view[i] = E3_tmp_view[i] + (K_scale * E3_view[j])
\n", + "
            __Pyx_TraceLine(626,0,__PYX_ERR(0, 626, __pyx_L1_error))\n",
+       "            __pyx_t_20 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_E3_tmp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_E3_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 626, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_E3_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_E3_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 626, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_26 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_E3_tmp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_E3_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 626, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_26 * __pyx_v_E3_tmp_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_20 * __pyx_v_E3_tmp_view.strides[0]) ))) + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
+       "          }\n",
+       "        }\n",
+       "
 627: 
\n", + "
 628:                 # Find norms for each error
\n", + "
+629:                 error_norm5 = 0.
\n", + "
        __Pyx_TraceLine(629,0,__PYX_ERR(0, 629, __pyx_L1_error))\n",
+       "        __pyx_v_error_norm5 = 0.;\n",
+       "
+630:                 error_norm3 = 0.
\n", + "
        __Pyx_TraceLine(630,0,__PYX_ERR(0, 630, __pyx_L1_error))\n",
+       "        __pyx_v_error_norm3 = 0.;\n",
+       "
 631: 
\n", + "
 632:                 # Perform summation
\n", + "
+633:                 for i in range(y_size):
\n", + "
        __Pyx_TraceLine(633,0,__PYX_ERR(0, 633, __pyx_L1_error))\n",
+       "        __pyx_t_3 = __pyx_v_y_size;\n",
+       "        __pyx_t_10 = __pyx_t_3;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
+634:                     error_norm5_abs = fabs(E5_tmp_view[i])
\n", + "
          __Pyx_TraceLine(634,0,__PYX_ERR(0, 634, __pyx_L1_error))\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_E5_tmp_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_E5_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 634, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_v_error_norm5_abs = fabs((*((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_12 * __pyx_v_E5_tmp_view.strides[0]) ))));\n",
+       "
+635:                     error_norm3_abs = fabs(E3_tmp_view[i])
\n", + "
          __Pyx_TraceLine(635,0,__PYX_ERR(0, 635, __pyx_L1_error))\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_E3_tmp_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_E3_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 635, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_v_error_norm3_abs = fabs((*((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_12 * __pyx_v_E3_tmp_view.strides[0]) ))));\n",
+       "
 636: 
\n", + "
+637:                     error_norm5 += (error_norm5_abs * error_norm5_abs)
\n", + "
          __Pyx_TraceLine(637,0,__PYX_ERR(0, 637, __pyx_L1_error))\n",
+       "          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
+       "
+638:                     error_norm3 += (error_norm3_abs * error_norm3_abs)
\n", + "
          __Pyx_TraceLine(638,0,__PYX_ERR(0, 638, __pyx_L1_error))\n",
+       "          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
+       "        }\n",
+       "
 639: 
\n", + "
 640:                 # Check if errors are zero
\n", + "
+641:                 if (error_norm5 == 0.) and (error_norm3 == 0.):
\n", + "
        __Pyx_TraceLine(641,0,__PYX_ERR(0, 641, __pyx_L1_error))\n",
+       "        __pyx_t_5 = (__pyx_v_error_norm5 == 0.);\n",
+       "        if (__pyx_t_5) {\n",
+       "        } else {\n",
+       "          __pyx_t_4 = __pyx_t_5;\n",
+       "          goto __pyx_L116_bool_binop_done;\n",
+       "        }\n",
+       "        __pyx_t_5 = (__pyx_v_error_norm3 == 0.);\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        __pyx_L116_bool_binop_done:;\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L115;\n",
+       "        }\n",
+       "
+642:                     error_norm = 0.
\n", + "
          __Pyx_TraceLine(642,0,__PYX_ERR(0, 642, __pyx_L1_error))\n",
+       "          __pyx_v_error_norm = 0.;\n",
+       "
 643:                 else:
\n", + "
+644:                     error_denom = error_norm5 + 0.01 * error_norm3
\n", + "
        __Pyx_TraceLine(644,0,__PYX_ERR(0, 644, __pyx_L1_error))\n",
+       "        /*else*/ {\n",
+       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
+       "
+645:                     error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)
\n", + "
          __Pyx_TraceLine(645,0,__PYX_ERR(0, 645, __pyx_L1_error))\n",
+       "          __pyx_t_21 = (__pyx_v_step_size * __pyx_v_error_norm5);\n",
+       "          __pyx_t_15 = sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl));\n",
+       "          if (unlikely(__pyx_t_15 == 0)) {\n",
+       "            PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "            __PYX_ERR(0, 645, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_v_error_norm = (__pyx_t_21 / __pyx_t_15);\n",
+       "        }\n",
+       "        __pyx_L115:;\n",
+       "
 646: 
\n", + "
 647:             else:
\n", + "
 648:                 # Calculate Error for RK23 and RK45
\n", + "
+649:                 error_norm = 0.
\n", + "
      __Pyx_TraceLine(649,0,__PYX_ERR(0, 649, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_error_norm = 0.;\n",
+       "
 650:                 # Dot Product (K, E) * step / scale
\n", + "
+651:                 for i in range(y_size):
\n", + "
        __Pyx_TraceLine(651,0,__PYX_ERR(0, 651, __pyx_L1_error))\n",
+       "        __pyx_t_3 = __pyx_v_y_size;\n",
+       "        __pyx_t_10 = __pyx_t_3;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
 652: 
\n", + "
 653:                     # Check how well this step performed.
\n", + "
+654:                     scale = atol + max(fabs(y_old_view[i]), fabs(y_new_view[i])) * rtol
\n", + "
          __Pyx_TraceLine(654,0,__PYX_ERR(0, 654, __pyx_L1_error))\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_y_new_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 654, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_15 = fabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) ))));\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_y_old_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 654, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_21 = fabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) ))));\n",
+       "          if ((__pyx_t_15 > __pyx_t_21)) {\n",
+       "            __pyx_t_22 = __pyx_t_15;\n",
+       "          } else {\n",
+       "            __pyx_t_22 = __pyx_t_21;\n",
+       "          }\n",
+       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_22 * __pyx_v_rtol));\n",
+       "
 655: 
\n", + "
+656:                     for j in range(rk_n_stages_plus1):
\n", + "
          __Pyx_TraceLine(656,0,__PYX_ERR(0, 656, __pyx_L1_error))\n",
+       "          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "
+657:                         if j == 0:
\n", + "
            __Pyx_TraceLine(657,0,__PYX_ERR(0, 657, __pyx_L1_error))\n",
+       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "              goto __pyx_L122;\n",
+       "            }\n",
+       "
 658:                             # Initialize
\n", + "
+659:                             E_tmp_view[i] = 0.
\n", + "
              __Pyx_TraceLine(659,0,__PYX_ERR(0, 659, __pyx_L1_error))\n",
+       "              __pyx_t_12 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_12 < 0) {\n",
+       "                __pyx_t_12 += __pyx_v_E_tmp_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_12 >= __pyx_v_E_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 659, __pyx_L1_error)\n",
+       "              }\n",
+       "              *((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_12 * __pyx_v_E_tmp_view.strides[0]) )) = 0.;\n",
+       "
+660:                         elif j == rk_n_stages:
\n", + "
            __Pyx_TraceLine(660,0,__PYX_ERR(0, 660, __pyx_L1_error))\n",
+       "            __pyx_t_4 = (__pyx_v_j == __pyx_v_rk_n_stages);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "            __pyx_L122:;\n",
+       "
 661:                             # Set last array of the K array.
\n", + "
+662:                             K_view[j, i] = dydt_new_view[i]
\n", + "
              __Pyx_TraceLine(662,0,__PYX_ERR(0, 662, __pyx_L1_error))\n",
+       "              __pyx_t_12 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_12 < 0) {\n",
+       "                __pyx_t_12 += __pyx_v_dydt_new_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_12 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 662, __pyx_L1_error)\n",
+       "              }\n",
+       "              __pyx_t_20 = __pyx_v_j;\n",
+       "              __pyx_t_26 = __pyx_v_i;\n",
+       "              __pyx_t_13 = -1;\n",
+       "              if (__pyx_t_20 < 0) {\n",
+       "                __pyx_t_20 += __pyx_v_K_view.shape[0];\n",
+       "                if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "              } else if (unlikely(__pyx_t_20 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "              if (__pyx_t_26 < 0) {\n",
+       "                __pyx_t_26 += __pyx_v_K_view.shape[1];\n",
+       "                if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "              } else if (unlikely(__pyx_t_26 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "              if (unlikely(__pyx_t_13 != -1)) {\n",
+       "                __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "                __PYX_ERR(0, 662, __pyx_L1_error)\n",
+       "              }\n",
+       "              *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_20 * __pyx_v_K_view.strides[0]) ) + __pyx_t_26 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "
 663: 
\n", + "
+664:                         K_scale = K_view[j, i] / scale
\n", + "
            __Pyx_TraceLine(664,0,__PYX_ERR(0, 664, __pyx_L1_error))\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_t_26 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_K_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_K_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_K_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_K_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 664, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_22 = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_26 * __pyx_v_K_view.strides[1]) )));\n",
+       "            if (unlikely(__pyx_v_scale == 0)) {\n",
+       "              PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "              __PYX_ERR(0, 664, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_v_K_scale = (__pyx_t_22 / __pyx_v_scale);\n",
+       "
+665:                         E_tmp_view[i] = E_tmp_view[i] + (K_scale * E_view[j] * step)
\n", + "
            __Pyx_TraceLine(665,0,__PYX_ERR(0, 665, __pyx_L1_error))\n",
+       "            __pyx_t_26 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_E_tmp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_E_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 665, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_E_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_E_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 665, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_20 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_E_tmp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_E_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 665, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_20 * __pyx_v_E_tmp_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_26 * __pyx_v_E_tmp_view.strides[0]) ))) + ((__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )))) * __pyx_v_step));\n",
+       "          }\n",
+       "
 666: 
\n", + "
+667:                     error_norm_abs = fabs(E_tmp_view[i])
\n", + "
          __Pyx_TraceLine(667,0,__PYX_ERR(0, 667, __pyx_L1_error))\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_E_tmp_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_E_tmp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 667, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_v_error_norm_abs = fabs((*((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_12 * __pyx_v_E_tmp_view.strides[0]) ))));\n",
+       "
+668:                     error_norm += (error_norm_abs * error_norm_abs)
\n", + "
          __Pyx_TraceLine(668,0,__PYX_ERR(0, 668, __pyx_L1_error))\n",
+       "          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
+       "        }\n",
+       "
+669:                 error_norm = sqrt(error_norm) / y_size_sqrt
\n", + "
        __Pyx_TraceLine(669,0,__PYX_ERR(0, 669, __pyx_L1_error))\n",
+       "        __pyx_t_22 = sqrt(__pyx_v_error_norm);\n",
+       "        if (unlikely(__pyx_v_y_size_sqrt == 0)) {\n",
+       "          PyErr_SetString(PyExc_ZeroDivisionError, \"float division\");\n",
+       "          __PYX_ERR(0, 669, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_v_error_norm = (__pyx_t_22 / __pyx_v_y_size_sqrt);\n",
+       "      }\n",
+       "      __pyx_L107:;\n",
+       "
 670: 
\n", + "
+671:             if error_norm < 1.:
\n", + "
      __Pyx_TraceLine(671,0,__PYX_ERR(0, 671, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_error_norm < 1.);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L123;\n",
+       "      }\n",
+       "
 672:                 # The error is low! Let's update this step for the next time loop
\n", + "
+673:                 if error_norm == 0.:
\n", + "
        __Pyx_TraceLine(673,0,__PYX_ERR(0, 673, __pyx_L1_error))\n",
+       "        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L124;\n",
+       "        }\n",
+       "
+674:                     step_factor = MAX_FACTOR
\n", + "
          __Pyx_TraceLine(674,0,__PYX_ERR(0, 674, __pyx_L1_error))\n",
+       "          __pyx_v_step_factor = __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MAX_FACTOR;\n",
+       "
 675:                 else:
\n", + "
+676:                     error_pow = error_norm**-error_expo
\n", + "
        __Pyx_TraceLine(676,0,__PYX_ERR(0, 676, __pyx_L1_error))\n",
+       "        /*else*/ {\n",
+       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
+       "
+677:                     step_factor = min(MAX_FACTOR, SAFETY * error_pow)
\n", + "
          __Pyx_TraceLine(677,0,__PYX_ERR(0, 677, __pyx_L1_error))\n",
+       "          __pyx_t_22 = (__pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_SAFETY * __pyx_v_error_pow);\n",
+       "          __pyx_t_15 = __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MAX_FACTOR;\n",
+       "          if ((__pyx_t_22 < __pyx_t_15)) {\n",
+       "            __pyx_t_21 = __pyx_t_22;\n",
+       "          } else {\n",
+       "            __pyx_t_21 = __pyx_t_15;\n",
+       "          }\n",
+       "          __pyx_v_step_factor = __pyx_t_21;\n",
+       "        }\n",
+       "        __pyx_L124:;\n",
+       "
 678: 
\n", + "
+679:                 if step_rejected:
\n", + "
        __Pyx_TraceLine(679,0,__PYX_ERR(0, 679, __pyx_L1_error))\n",
+       "        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        }\n",
+       "
 680:                     # There were problems with this step size on the previous step loop. Make sure factor does
\n", + "
 681:                     #    not exasperate them.
\n", + "
+682:                     step_factor = min(step_factor, 1.)
\n", + "
          __Pyx_TraceLine(682,0,__PYX_ERR(0, 682, __pyx_L1_error))\n",
+       "          __pyx_t_21 = 1.;\n",
+       "          __pyx_t_22 = __pyx_v_step_factor;\n",
+       "          if ((__pyx_t_21 < __pyx_t_22)) {\n",
+       "            __pyx_t_15 = __pyx_t_21;\n",
+       "          } else {\n",
+       "            __pyx_t_15 = __pyx_t_22;\n",
+       "          }\n",
+       "          __pyx_v_step_factor = __pyx_t_15;\n",
+       "
 683: 
\n", + "
+684:                 step_size = step_size * step_factor
\n", + "
        __Pyx_TraceLine(684,0,__PYX_ERR(0, 684, __pyx_L1_error))\n",
+       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
+       "
+685:                 step_accepted = True
\n", + "
        __Pyx_TraceLine(685,0,__PYX_ERR(0, 685, __pyx_L1_error))\n",
+       "        __pyx_v_step_accepted = 1;\n",
+       "
 686:             else:
\n", + "
+687:                 error_pow = error_norm**-error_expo
\n", + "
      __Pyx_TraceLine(687,0,__PYX_ERR(0, 687, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
+       "
+688:                 step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)
\n", + "
        __Pyx_TraceLine(688,0,__PYX_ERR(0, 688, __pyx_L1_error))\n",
+       "        __pyx_t_15 = (__pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_SAFETY * __pyx_v_error_pow);\n",
+       "        __pyx_t_21 = __pyx_v_54_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b_MIN_FACTOR;\n",
+       "        if ((__pyx_t_15 > __pyx_t_21)) {\n",
+       "          __pyx_t_22 = __pyx_t_15;\n",
+       "        } else {\n",
+       "          __pyx_t_22 = __pyx_t_21;\n",
+       "        }\n",
+       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_22);\n",
+       "
+689:                 step_rejected = True
\n", + "
        __Pyx_TraceLine(689,0,__PYX_ERR(0, 689, __pyx_L1_error))\n",
+       "        __pyx_v_step_rejected = 1;\n",
+       "      }\n",
+       "      __pyx_L123:;\n",
+       "    }\n",
+       "    __pyx_L83_break:;\n",
+       "
 690: 
\n", + "
+691:         if not step_accepted:
\n", + "
    __Pyx_TraceLine(691,0,__PYX_ERR(0, 691, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 692:             # Issue with step convergence
\n", + "
+693:             status = -2
\n", + "
      __Pyx_TraceLine(693,0,__PYX_ERR(0, 693, __pyx_L1_error))\n",
+       "      __pyx_v_status = -2;\n",
+       "
+694:             break
\n", + "
      __Pyx_TraceLine(694,0,__PYX_ERR(0, 694, __pyx_L1_error))\n",
+       "      goto __pyx_L77_break;\n",
+       "
+695:         elif step_error:
\n", + "
    __Pyx_TraceLine(695,0,__PYX_ERR(0, 695, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 696:             # Issue with step convergence
\n", + "
+697:             status = -1
\n", + "
      __Pyx_TraceLine(697,0,__PYX_ERR(0, 697, __pyx_L1_error))\n",
+       "      __pyx_v_status = -1;\n",
+       "
+698:             break
\n", + "
      __Pyx_TraceLine(698,0,__PYX_ERR(0, 698, __pyx_L1_error))\n",
+       "      goto __pyx_L77_break;\n",
+       "
 699: 
\n", + "
 700:         # End of step loop. Update the _now variables
\n", + "
+701:         t_old = t_new
\n", + "
    __Pyx_TraceLine(701,0,__PYX_ERR(0, 701, __pyx_L1_error))\n",
+       "    __pyx_v_t_old = __pyx_v_t_new;\n",
+       "
+702:         for i in range(y_size):
\n", + "
    __Pyx_TraceLine(702,0,__PYX_ERR(0, 702, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_y_size;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+703:             y_old_view[i] = y_new_view[i]
\n", + "
      __Pyx_TraceLine(703,0,__PYX_ERR(0, 703, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_y_new_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 703, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_26 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_26 < 0) {\n",
+       "        __pyx_t_26 += __pyx_v_y_old_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_26 >= __pyx_v_y_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 703, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_26 * __pyx_v_y_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
+       "
+704:             dydt_old_view[i] = dydt_new_view[i]
\n", + "
      __Pyx_TraceLine(704,0,__PYX_ERR(0, 704, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_dydt_new_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_dydt_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 704, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_26 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_26 < 0) {\n",
+       "        __pyx_t_26 += __pyx_v_dydt_old_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_26 >= __pyx_v_dydt_old_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 704, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_26 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "    }\n",
+       "
 705: 
\n", + "
 706:         # Save data
\n", + "
+707:         if len_t >= (num_concats * expected_size_to_use):
\n", + "
    __Pyx_TraceLine(707,0,__PYX_ERR(0, 707, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 708:             # There is more data than we have room in our arrays. 
\n", + "
 709:             # Build new arrays with more space.
\n", + "
 710:             # OPT: Note this is an expensive operation. 
\n", + "
+711:             num_concats += 1
\n", + "
      __Pyx_TraceLine(711,0,__PYX_ERR(0, 711, __pyx_L1_error))\n",
+       "      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
+       "
+712:             new_size = num_concats * expected_size_to_use
\n", + "
      __Pyx_TraceLine(712,0,__PYX_ERR(0, 712, __pyx_L1_error))\n",
+       "      __pyx_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
+       "
+713:             time_domain_array_new      = np.empty(new_size, dtype=np.float64, order='C')
\n", + "
      __Pyx_TraceLine(713,0,__PYX_ERR(0, 713, __pyx_L1_error))\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "      __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_new_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_GIVEREF(__pyx_t_7);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
+       "      __pyx_t_7 = 0;\n",
+       "      __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_6);\n",
+       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_2);\n",
+       "      __pyx_t_2 = 0;\n",
+       "
+714:             y_results_array_new        = np.empty((store_loop_size, new_size), dtype=np.float64, order='C')
\n", + "
      __Pyx_TraceLine(714,0,__PYX_ERR(0, 714, __pyx_L1_error))\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_7);\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_new_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_GIVEREF(__pyx_t_2);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "      __Pyx_GIVEREF(__pyx_t_1);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);\n",
+       "      __pyx_t_2 = 0;\n",
+       "      __pyx_t_1 = 0;\n",
+       "      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_GIVEREF(__pyx_t_8);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
+       "      __pyx_t_8 = 0;\n",
+       "      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_6);\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 714, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_6);\n",
+       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_6);\n",
+       "      __pyx_t_6 = 0;\n",
+       "
+715:             time_domain_array_new_view = time_domain_array_new
\n", + "
      __Pyx_TraceLine(715,0,__PYX_ERR(0, 715, __pyx_L1_error))\n",
+       "      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
+       "      __pyx_v_time_domain_array_new_view = __pyx_t_9;\n",
+       "      __pyx_t_9.memview = NULL;\n",
+       "      __pyx_t_9.data = NULL;\n",
+       "
+716:             y_results_array_new_view   = y_results_array_new
\n", + "
      __Pyx_TraceLine(716,0,__PYX_ERR(0, 716, __pyx_L1_error))\n",
+       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 716, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
+       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
+       "      __pyx_t_16.memview = NULL;\n",
+       "      __pyx_t_16.data = NULL;\n",
+       "
 717: 
\n", + "
 718:             # Loop through time to fill in these new arrays with the old values
\n", + "
+719:             for i in range(len_t):
\n", + "
      __Pyx_TraceLine(719,0,__PYX_ERR(0, 719, __pyx_L1_error))\n",
+       "      __pyx_t_3 = __pyx_v_len_t;\n",
+       "      __pyx_t_10 = __pyx_t_3;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+720:                 time_domain_array_new_view[i] = time_domain_array_view[i]
\n", + "
        __Pyx_TraceLine(720,0,__PYX_ERR(0, 720, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_time_domain_array_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_time_domain_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 720, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_26 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_time_domain_array_new_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_time_domain_array_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 720, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_26 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
+       "
 721: 
\n", + "
+722:                 for j in range(store_loop_size):
\n", + "
        __Pyx_TraceLine(722,0,__PYX_ERR(0, 722, __pyx_L1_error))\n",
+       "        __pyx_t_17 = __pyx_v_store_loop_size;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_j = __pyx_t_19;\n",
+       "
+723:                     y_results_array_new_view[j, i] = y_results_array_view[j, i]
\n", + "
          __Pyx_TraceLine(723,0,__PYX_ERR(0, 723, __pyx_L1_error))\n",
+       "          __pyx_t_12 = __pyx_v_j;\n",
+       "          __pyx_t_26 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_12 < 0) {\n",
+       "            __pyx_t_12 += __pyx_v_y_results_array_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (__pyx_t_26 < 0) {\n",
+       "            __pyx_t_26 += __pyx_v_y_results_array_view.shape[1];\n",
+       "            if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "          } else if (unlikely(__pyx_t_26 >= __pyx_v_y_results_array_view.shape[1])) __pyx_t_13 = 1;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 723, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_20 = __pyx_v_j;\n",
+       "          __pyx_t_27 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_y_results_array_new_view.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_y_results_array_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (__pyx_t_27 < 0) {\n",
+       "            __pyx_t_27 += __pyx_v_y_results_array_new_view.shape[1];\n",
+       "            if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 1;\n",
+       "          } else if (unlikely(__pyx_t_27 >= __pyx_v_y_results_array_new_view.shape[1])) __pyx_t_13 = 1;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 723, __pyx_L1_error)\n",
+       "          }\n",
+       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_20 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_27 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_26 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "        }\n",
+       "      }\n",
+       "
 724: 
\n", + "
 725:             # No longer need the old arrays. Change where the view is pointing and delete them.
\n", + "
+726:             y_results_array_view = y_results_array_new
\n", + "
      __Pyx_TraceLine(726,0,__PYX_ERR(0, 726, __pyx_L1_error))\n",
+       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 726, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
+       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
+       "      __pyx_t_16.memview = NULL;\n",
+       "      __pyx_t_16.data = NULL;\n",
+       "
+727:             time_domain_array_view = time_domain_array_new
\n", + "
      __Pyx_TraceLine(727,0,__PYX_ERR(0, 727, __pyx_L1_error))\n",
+       "      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 727, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
+       "      __pyx_v_time_domain_array_view = __pyx_t_9;\n",
+       "      __pyx_t_9.memview = NULL;\n",
+       "      __pyx_t_9.data = NULL;\n",
+       "
 728:             # TODO: Delete the old arrays?
\n", + "
 729: 
\n", + "
 730:         # There should be room in the arrays to add new data.
\n", + "
+731:         time_domain_array_view[len_t] = t_new
\n", + "
    __Pyx_TraceLine(731,0,__PYX_ERR(0, 731, __pyx_L1_error))\n",
+       "    __pyx_t_26 = __pyx_v_len_t;\n",
+       "    __pyx_t_13 = -1;\n",
+       "    if (__pyx_t_26 < 0) {\n",
+       "      __pyx_t_26 += __pyx_v_time_domain_array_view.shape[0];\n",
+       "      if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "    } else if (unlikely(__pyx_t_26 >= __pyx_v_time_domain_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "    if (unlikely(__pyx_t_13 != -1)) {\n",
+       "      __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "      __PYX_ERR(0, 731, __pyx_L1_error)\n",
+       "    }\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_26 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
+       "
 732:         # To match the format that scipy follows, we will take the transpose of y.
\n", + "
+733:         for i in range(store_loop_size):
\n", + "
    __Pyx_TraceLine(733,0,__PYX_ERR(0, 733, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_store_loop_size;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+734:             if i < extra_start:
\n", + "
      __Pyx_TraceLine(734,0,__PYX_ERR(0, 734, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L136;\n",
+       "      }\n",
+       "
 735:                 # Pull from y result
\n", + "
+736:                 y_results_array_view[i, len_t] = y_new_view[i]
\n", + "
        __Pyx_TraceLine(736,0,__PYX_ERR(0, 736, __pyx_L1_error))\n",
+       "        __pyx_t_26 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_y_new_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_y_new_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 736, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_27 = __pyx_v_len_t;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y_results_array_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_27 < 0) {\n",
+       "          __pyx_t_27 += __pyx_v_y_results_array_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_27 >= __pyx_v_y_results_array_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 736, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_27 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_26 * __pyx_v_y_new_view.strides[0]) )));\n",
+       "
 737:             else:
\n", + "
 738:                 # Pull from extra
\n", + "
+739:                 y_results_array_view[i, len_t] = extra_result_view[i - extra_start]
\n", + "
      __Pyx_TraceLine(739,0,__PYX_ERR(0, 739, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_26 = (__pyx_v_i - __pyx_v_extra_start);\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_extra_result_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_extra_result_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 739, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_27 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_len_t;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_27 < 0) {\n",
+       "          __pyx_t_27 += __pyx_v_y_results_array_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_27 >= __pyx_v_y_results_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y_results_array_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_array_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 739, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_27 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_26 * __pyx_v_extra_result_view.strides[0]) )));\n",
+       "      }\n",
+       "      __pyx_L136:;\n",
+       "    }\n",
+       "
 740: 
\n", + "
 741:         # Increase number of time points.
\n", + "
+742:         len_t += 1
\n", + "
    __Pyx_TraceLine(742,0,__PYX_ERR(0, 742, __pyx_L1_error))\n",
+       "    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
+       "  }\n",
+       "  __pyx_L77_break:;\n",
+       "
 743: 
\n", + "
 744:     # # Clean up output.
\n", + "
 745:     cdef str message
\n", + "
+746:     message = 'Not Defined.'
\n", + "
  __Pyx_TraceLine(746,0,__PYX_ERR(0, 746, __pyx_L1_error))\n",
+       "  __Pyx_INCREF(__pyx_kp_u_Not_Defined);\n",
+       "  __pyx_v_message = __pyx_kp_u_Not_Defined;\n",
+       "
+747:     if status == 1:
\n", + "
  __Pyx_TraceLine(747,0,__PYX_ERR(0, 747, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_status == 1);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L137;\n",
+       "  }\n",
+       "
+748:         success = True
\n", + "
    __Pyx_TraceLine(748,0,__PYX_ERR(0, 748, __pyx_L1_error))\n",
+       "    __pyx_v_success = 1;\n",
+       "
+749:         message = 'Integration finished with no issue.'
\n", + "
    __Pyx_TraceLine(749,0,__PYX_ERR(0, 749, __pyx_L1_error))\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Integration_finished_with_no_iss);\n",
+       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Integration_finished_with_no_iss);\n",
+       "
+750:     elif status == -1:
\n", + "
  __Pyx_TraceLine(750,0,__PYX_ERR(0, 750, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_status == -1L);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L137;\n",
+       "  }\n",
+       "
+751:         message = 'Error in step size calculation: Required step size is less than spacing between numbers.'
\n", + "
    __Pyx_TraceLine(751,0,__PYX_ERR(0, 751, __pyx_L1_error))\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
+       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Error_in_step_size_calculation_R);\n",
+       "
+752:     elif status < -1:
\n", + "
  __Pyx_TraceLine(752,0,__PYX_ERR(0, 752, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_status < -1L);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "  __pyx_L137:;\n",
+       "
+753:         message = 'Integration Failed.'
\n", + "
    __Pyx_TraceLine(753,0,__PYX_ERR(0, 753, __pyx_L1_error))\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Integration_Failed);\n",
+       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Integration_Failed);\n",
+       "
 754: 
\n", + "
 755: 
\n", + "
 756:     # Create output arrays. To match the format that scipy follows, we will take the transpose of y.
\n", + "
+757:     if success:
\n", + "
  __Pyx_TraceLine(757,0,__PYX_ERR(0, 757, __pyx_L1_error))\n",
+       "  __pyx_t_4 = (__pyx_v_success != 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L138;\n",
+       "  }\n",
+       "
 758:         # Build final output arrays.
\n", + "
 759:         # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.
\n", + "
 760:         # This process will remove that junk and leave only the wanted data.
\n", + "
+761:         solution_y = np.empty((store_loop_size, len_t), dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(761,0,__PYX_ERR(0, 761, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GIVEREF(__pyx_t_6);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);\n",
+       "    __Pyx_GIVEREF(__pyx_t_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);\n",
+       "    __pyx_t_6 = 0;\n",
+       "    __pyx_t_1 = 0;\n",
+       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_GIVEREF(__pyx_t_7);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
+       "    __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_v_solution_y = __pyx_t_2;\n",
+       "    __pyx_t_2 = 0;\n",
+       "
+762:         solution_t = np.empty(len_t, dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(762,0,__PYX_ERR(0, 762, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 762, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_v_solution_t = __pyx_t_6;\n",
+       "    __pyx_t_6 = 0;\n",
+       "
 763: 
\n", + "
 764:         # Link memory views
\n", + "
+765:         solution_y_view = solution_y
\n", + "
    __Pyx_TraceLine(765,0,__PYX_ERR(0, 765, __pyx_L1_error))\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 765, __pyx_L1_error)\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+766:         solution_t_view = solution_t
\n", + "
    __Pyx_TraceLine(766,0,__PYX_ERR(0, 766, __pyx_L1_error))\n",
+       "    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 766, __pyx_L1_error)\n",
+       "    __pyx_v_solution_t_view = __pyx_t_9;\n",
+       "    __pyx_t_9.memview = NULL;\n",
+       "    __pyx_t_9.data = NULL;\n",
+       "
 767: 
\n", + "
 768:         # Populate values
\n", + "
+769:         for i in range(len_t):
\n", + "
    __Pyx_TraceLine(769,0,__PYX_ERR(0, 769, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_t;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+770:             solution_t_view[i] = time_domain_array_view[i]
\n", + "
      __Pyx_TraceLine(770,0,__PYX_ERR(0, 770, __pyx_L1_error))\n",
+       "      __pyx_t_26 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_26 < 0) {\n",
+       "        __pyx_t_26 += __pyx_v_time_domain_array_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_26 >= __pyx_v_time_domain_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 770, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_solution_t_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_solution_t_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 770, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_26 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
+       "
+771:             for j in range(store_loop_size):
\n", + "
      __Pyx_TraceLine(771,0,__PYX_ERR(0, 771, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_store_loop_size;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "
+772:                 solution_y_view[j, i] = y_results_array_view[j, i]
\n", + "
        __Pyx_TraceLine(772,0,__PYX_ERR(0, 772, __pyx_L1_error))\n",
+       "        __pyx_t_26 = __pyx_v_j;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_y_results_array_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_y_results_array_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y_results_array_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_array_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 772, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_27 = __pyx_v_j;\n",
+       "        __pyx_t_20 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_27 < 0) {\n",
+       "          __pyx_t_27 += __pyx_v_solution_y_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_27 >= __pyx_v_solution_y_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_20 < 0) {\n",
+       "          __pyx_t_20 += __pyx_v_solution_y_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_20 >= __pyx_v_solution_y_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 772, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_27 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_20 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_26 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "      }\n",
+       "    }\n",
+       "
 773:     else:
\n", + "
 774:         # Build nan arrays
\n", + "
+775:         solution_y = np.nan * np.ones((store_loop_size, 1), dtype=np.float64, order='C')
\n", + "
  __Pyx_TraceLine(775,0,__PYX_ERR(0, 775, __pyx_L1_error))\n",
+       "  /*else*/ {\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GIVEREF(__pyx_t_6);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);\n",
+       "    __Pyx_INCREF(__pyx_int_1);\n",
+       "    __Pyx_GIVEREF(__pyx_int_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_1);\n",
+       "    __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_GIVEREF(__pyx_t_7);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);\n",
+       "    __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_29) < 0) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __pyx_t_29 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = PyNumber_Multiply(__pyx_t_2, __pyx_t_29); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 775, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    __pyx_v_solution_y = __pyx_t_7;\n",
+       "    __pyx_t_7 = 0;\n",
+       "
+776:         solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(776,0,__PYX_ERR(0, 776, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_nan); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = PyNumber_Multiply(__pyx_t_29, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __pyx_v_solution_t = __pyx_t_7;\n",
+       "    __pyx_t_7 = 0;\n",
+       "/* … */\n",
+       "  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 776, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__15);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__15);\n",
+       "
 777: 
\n", + "
 778:         # Link memory views
\n", + "
+779:         solution_y_view = solution_y
\n", + "
    __Pyx_TraceLine(779,0,__PYX_ERR(0, 779, __pyx_L1_error))\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+780:         solution_t_view = solution_t
\n", + "
    __Pyx_TraceLine(780,0,__PYX_ERR(0, 780, __pyx_L1_error))\n",
+       "    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 780, __pyx_L1_error)\n",
+       "    __pyx_v_solution_t_view = __pyx_t_9;\n",
+       "    __pyx_t_9.memview = NULL;\n",
+       "    __pyx_t_9.data = NULL;\n",
+       "  }\n",
+       "  __pyx_L138:;\n",
+       "
 781: 
\n", + "
 782:     cdef double[:, :] y_results_reduced_view
\n", + "
 783:     cdef double[:] y_result_timeslice_view, y_result_temp_view
\n", + "
 784: 
\n", + "
+785:     if run_interpolation and success:
\n", + "
  __Pyx_TraceLine(785,0,__PYX_ERR(0, 785, __pyx_L1_error))\n",
+       "  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
+       "  if (__pyx_t_5) {\n",
+       "  } else {\n",
+       "    __pyx_t_4 = __pyx_t_5;\n",
+       "    goto __pyx_L144_bool_binop_done;\n",
+       "  }\n",
+       "  __pyx_t_5 = (__pyx_v_success != 0);\n",
+       "  __pyx_t_4 = __pyx_t_5;\n",
+       "  __pyx_L144_bool_binop_done:;\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
 786:         # User only wants data at specific points.
\n", + "
 787: 
\n", + "
 788:         # The current version of this function has not implemented sicpy's dense output.
\n", + "
 789:         #   Instead we use an interpolation.
\n", + "
 790:         # OPT: this could be done inside the integration loop for performance gains.
\n", + "
+791:         y_results_reduced       = np.empty((total_size, len_teval), dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(791,0,__PYX_ERR(0, 791, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_29 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_7);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
+       "    __Pyx_GIVEREF(__pyx_t_29);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_29);\n",
+       "    __pyx_t_7 = 0;\n",
+       "    __pyx_t_29 = 0;\n",
+       "    __pyx_t_29 = PyTuple_New(1); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_29, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 791, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_v_y_results_reduced = __pyx_t_6;\n",
+       "    __pyx_t_6 = 0;\n",
+       "
+792:         y_result_timeslice      = np.empty(len_t, dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(792,0,__PYX_ERR(0, 792, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_29 = PyTuple_New(1); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_GIVEREF(__pyx_t_6);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_6);\n",
+       "    __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_29, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 792, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __pyx_v_y_result_timeslice = __pyx_t_7;\n",
+       "    __pyx_t_7 = 0;\n",
+       "
+793:         y_result_temp           = np.empty(len_teval, dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(793,0,__PYX_ERR(0, 793, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __pyx_t_29 = PyTuple_New(1); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_GIVEREF(__pyx_t_7);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_7);\n",
+       "    __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_29, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __pyx_v_y_result_temp = __pyx_t_1;\n",
+       "    __pyx_t_1 = 0;\n",
+       "
+794:         y_results_reduced_view  = y_results_reduced
\n", + "
    __Pyx_TraceLine(794,0,__PYX_ERR(0, 794, __pyx_L1_error))\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_reduced, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 794, __pyx_L1_error)\n",
+       "    __pyx_v_y_results_reduced_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+795:         y_result_timeslice_view = y_result_timeslice
\n", + "
    __Pyx_TraceLine(795,0,__PYX_ERR(0, 795, __pyx_L1_error))\n",
+       "    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_timeslice, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 795, __pyx_L1_error)\n",
+       "    __pyx_v_y_result_timeslice_view = __pyx_t_9;\n",
+       "    __pyx_t_9.memview = NULL;\n",
+       "    __pyx_t_9.data = NULL;\n",
+       "
+796:         y_result_temp_view      = y_result_temp
\n", + "
    __Pyx_TraceLine(796,0,__PYX_ERR(0, 796, __pyx_L1_error))\n",
+       "    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_temp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 796, __pyx_L1_error)\n",
+       "    __pyx_v_y_result_temp_view = __pyx_t_9;\n",
+       "    __pyx_t_9.memview = NULL;\n",
+       "    __pyx_t_9.data = NULL;\n",
+       "
 797: 
\n", + "
+798:         for j in range(y_size):
\n", + "
    __Pyx_TraceLine(798,0,__PYX_ERR(0, 798, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_y_size;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_j = __pyx_t_11;\n",
+       "
 799:             # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", + "
 800:             # # Set timeslice equal to the time values at this y_j
\n", + "
+801:             for i in range(len_t):
\n", + "
      __Pyx_TraceLine(801,0,__PYX_ERR(0, 801, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_len_t;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_i = __pyx_t_19;\n",
+       "
+802:                 y_result_timeslice_view[i] = solution_y_view[j, i]
\n", + "
        __Pyx_TraceLine(802,0,__PYX_ERR(0, 802, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        __pyx_t_26 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_solution_y_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_solution_y_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_solution_y_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_solution_y_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 802, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_20 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_20 < 0) {\n",
+       "          __pyx_t_20 += __pyx_v_y_result_timeslice_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_20 >= __pyx_v_y_result_timeslice_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 802, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_20 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_26 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "      }\n",
+       "
 803: 
\n", + "
 804:             # Perform numerical interpolation
\n", + "
+805:             interp_array(
\n", + "
      __Pyx_TraceLine(805,0,__PYX_ERR(0, 805, __pyx_L1_error))\n",
+       "      __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 805, __pyx_L1_error)\n",
+       "
 806:                 t_eval,
\n", + "
 807:                 solution_t_view,
\n", + "
 808:                 y_result_timeslice_view,
\n", + "
 809:                 y_result_temp_view
\n", + "
 810:                 )
\n", + "
 811: 
\n", + "
 812:             # Store result.
\n", + "
+813:             for i in range(len_teval):
\n", + "
      __Pyx_TraceLine(813,0,__PYX_ERR(0, 813, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_len_teval;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_i = __pyx_t_19;\n",
+       "
+814:                 y_results_reduced_view[j, i] = y_result_temp_view[i]
\n", + "
        __Pyx_TraceLine(814,0,__PYX_ERR(0, 814, __pyx_L1_error))\n",
+       "        __pyx_t_26 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_y_result_temp_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_y_result_temp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 814, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        __pyx_t_20 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y_results_reduced_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_reduced_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_20 < 0) {\n",
+       "          __pyx_t_20 += __pyx_v_y_results_reduced_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_20 >= __pyx_v_y_results_reduced_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 814, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_20 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_26 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "      }\n",
+       "    }\n",
+       "
 815: 
\n", + "
+816:         if capture_extra:
\n", + "
    __Pyx_TraceLine(816,0,__PYX_ERR(0, 816, __pyx_L1_error))\n",
+       "    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 817:             # Right now if there is any extra output then it is stored at each time step used in the RK loop.
\n", + "
 818:             # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?
\n", + "
 819:             #  or do we use the interpolation on y to find new values.
\n", + "
 820:             # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.
\n", + "
+821:             if interpolate_extra:
\n", + "
      __Pyx_TraceLine(821,0,__PYX_ERR(0, 821, __pyx_L1_error))\n",
+       "      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L153;\n",
+       "      }\n",
+       "
 822:                 # Continue the interpolation for the extra values.
\n", + "
+823:                 for j in range(num_extra):
\n", + "
        __Pyx_TraceLine(823,0,__PYX_ERR(0, 823, __pyx_L1_error))\n",
+       "        __pyx_t_3 = __pyx_v_num_extra;\n",
+       "        __pyx_t_10 = __pyx_t_3;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "          __pyx_v_j = __pyx_t_11;\n",
+       "
 824:                     # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", + "
 825:                     # # Set timeslice equal to the time values at this y_j
\n", + "
+826:                     for i in range(len_t):
\n", + "
          __Pyx_TraceLine(826,0,__PYX_ERR(0, 826, __pyx_L1_error))\n",
+       "          __pyx_t_17 = __pyx_v_len_t;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_i = __pyx_t_19;\n",
+       "
+827:                         y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]
\n", + "
            __Pyx_TraceLine(827,0,__PYX_ERR(0, 827, __pyx_L1_error))\n",
+       "            __pyx_t_26 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_20 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_solution_y_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_solution_y_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_solution_y_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_solution_y_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 827, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_y_result_timeslice_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_y_result_timeslice_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 827, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_12 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_26 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_20 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "          }\n",
+       "
 828: 
\n", + "
 829:                     # Perform numerical interpolation
\n", + "
+830:                     interp_array(
\n", + "
          __Pyx_TraceLine(830,0,__PYX_ERR(0, 830, __pyx_L1_error))\n",
+       "          __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 830, __pyx_L1_error)\n",
+       "
 831:                             t_eval,
\n", + "
 832:                             solution_t_view,
\n", + "
 833:                             y_result_timeslice_view,
\n", + "
 834:                             y_result_temp_view
\n", + "
 835:                             )
\n", + "
 836: 
\n", + "
 837:                     # Store result.
\n", + "
+838:                     for i in range(len_teval):
\n", + "
          __Pyx_TraceLine(838,0,__PYX_ERR(0, 838, __pyx_L1_error))\n",
+       "          __pyx_t_17 = __pyx_v_len_teval;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_i = __pyx_t_19;\n",
+       "
+839:                         y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]
\n", + "
            __Pyx_TraceLine(839,0,__PYX_ERR(0, 839, __pyx_L1_error))\n",
+       "            __pyx_t_20 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_y_result_temp_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_y_result_temp_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 839, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_26 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_y_results_reduced_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_y_results_reduced_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_y_results_reduced_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_reduced_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 839, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_26 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_20 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "          }\n",
+       "        }\n",
+       "
 840:             else:
\n", + "
 841:                 # Use y and t to recalculate the extra outputs
\n", + "
+842:                 y_interp = np.empty(y_size, dtype=np.float64)
\n", + "
      __Pyx_TraceLine(842,0,__PYX_ERR(0, 842, __pyx_L1_error))\n",
+       "      /*else*/ {\n",
+       "        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __pyx_t_29 = PyTuple_New(1); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_29);\n",
+       "        __Pyx_GIVEREF(__pyx_t_1);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_1);\n",
+       "        __pyx_t_1 = 0;\n",
+       "        __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_6);\n",
+       "        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_29, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        __pyx_v_y_interp = __pyx_t_2;\n",
+       "        __pyx_t_2 = 0;\n",
+       "
+843:                 y_interp_view = y_interp
\n", + "
        __Pyx_TraceLine(843,0,__PYX_ERR(0, 843, __pyx_L1_error))\n",
+       "        __Pyx_INCREF(__pyx_v_y_interp);\n",
+       "        __pyx_v_y_interp_view = __pyx_v_y_interp;\n",
+       "
+844:                 for i in range(len_teval):
\n", + "
        __Pyx_TraceLine(844,0,__PYX_ERR(0, 844, __pyx_L1_error))\n",
+       "        __pyx_t_3 = __pyx_v_len_teval;\n",
+       "        __pyx_t_10 = __pyx_t_3;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
+845:                     time_ = t_eval[i]
\n", + "
          __Pyx_TraceLine(845,0,__PYX_ERR(0, 845, __pyx_L1_error))\n",
+       "          __pyx_t_20 = __pyx_v_i;\n",
+       "          __pyx_t_13 = -1;\n",
+       "          if (__pyx_t_20 < 0) {\n",
+       "            __pyx_t_20 += __pyx_v_t_eval.shape[0];\n",
+       "            if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "          } else if (unlikely(__pyx_t_20 >= __pyx_v_t_eval.shape[0])) __pyx_t_13 = 0;\n",
+       "          if (unlikely(__pyx_t_13 != -1)) {\n",
+       "            __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "            __PYX_ERR(0, 845, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_20 * __pyx_v_t_eval.strides[0]) )));\n",
+       "
+846:                     for j in range(y_size):
\n", + "
          __Pyx_TraceLine(846,0,__PYX_ERR(0, 846, __pyx_L1_error))\n",
+       "          __pyx_t_17 = __pyx_v_y_size;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "
+847:                         y_interp_view[j] = y_results_reduced_view[j, i]
\n", + "
            __Pyx_TraceLine(847,0,__PYX_ERR(0, 847, __pyx_L1_error))\n",
+       "            __pyx_t_20 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_y_results_reduced_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_y_results_reduced_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_y_results_reduced_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_reduced_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 847, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_20 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_y_interp_view, __pyx_v_j, __pyx_t_2, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0))) __PYX_ERR(0, 847, __pyx_L1_error)\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "          }\n",
+       "
 848: 
\n", + "
+849:                     if use_args:
\n", + "
          __Pyx_TraceLine(849,0,__PYX_ERR(0, 849, __pyx_L1_error))\n",
+       "          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "          if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            goto __pyx_L164;\n",
+       "          }\n",
+       "
+850:                         diffeq(time_, y_interp, diffeq_out, *args)
\n", + "
            __Pyx_TraceLine(850,0,__PYX_ERR(0, 850, __pyx_L1_error))\n",
+       "            __pyx_t_2 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_1);\n",
+       "            __Pyx_GIVEREF(__pyx_t_2);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
+       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
+       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y_interp);\n",
+       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_diffeq_out);\n",
+       "            __pyx_t_2 = 0;\n",
+       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "              __PYX_ERR(0, 850, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __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_v_diffeq, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_1);\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "
 851:                     else:
\n", + "
+852:                         diffeq(time_, y_interp, diffeq_out)
\n", + "
          __Pyx_TraceLine(852,0,__PYX_ERR(0, 852, __pyx_L1_error))\n",
+       "          /*else*/ {\n",
+       "            __pyx_t_2 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "            __pyx_t_29 = __pyx_v_diffeq; __pyx_t_7 = NULL;\n",
+       "            __pyx_t_13 = 0;\n",
+       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_29))) {\n",
+       "              __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_29);\n",
+       "              if (likely(__pyx_t_7)) {\n",
+       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_29);\n",
+       "                __Pyx_INCREF(__pyx_t_7);\n",
+       "                __Pyx_INCREF(function);\n",
+       "                __Pyx_DECREF_SET(__pyx_t_29, function);\n",
+       "                __pyx_t_13 = 1;\n",
+       "              }\n",
+       "            }\n",
+       "            {\n",
+       "              PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_2, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
+       "              __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_29, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "              if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "              __Pyx_GOTREF(__pyx_t_1);\n",
+       "              __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "            }\n",
+       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          }\n",
+       "          __pyx_L164:;\n",
+       "
 853: 
\n", + "
+854:                     for j in range(num_extra):
\n", + "
          __Pyx_TraceLine(854,0,__PYX_ERR(0, 854, __pyx_L1_error))\n",
+       "          __pyx_t_17 = __pyx_v_num_extra;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "
+855:                         y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]
\n", + "
            __Pyx_TraceLine(855,0,__PYX_ERR(0, 855, __pyx_L1_error))\n",
+       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_12 < 0) {\n",
+       "              __pyx_t_12 += __pyx_v_diffeq_out_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_12 >= __pyx_v_diffeq_out_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 855, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_20 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_26 = __pyx_v_i;\n",
+       "            __pyx_t_13 = -1;\n",
+       "            if (__pyx_t_20 < 0) {\n",
+       "              __pyx_t_20 += __pyx_v_y_results_reduced_view.shape[0];\n",
+       "              if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "            } else if (unlikely(__pyx_t_20 >= __pyx_v_y_results_reduced_view.shape[0])) __pyx_t_13 = 0;\n",
+       "            if (__pyx_t_26 < 0) {\n",
+       "              __pyx_t_26 += __pyx_v_y_results_reduced_view.shape[1];\n",
+       "              if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "            } else if (unlikely(__pyx_t_26 >= __pyx_v_y_results_reduced_view.shape[1])) __pyx_t_13 = 1;\n",
+       "            if (unlikely(__pyx_t_13 != -1)) {\n",
+       "              __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "              __PYX_ERR(0, 855, __pyx_L1_error)\n",
+       "            }\n",
+       "            *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_20 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_26 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "          }\n",
+       "        }\n",
+       "      }\n",
+       "      __pyx_L153:;\n",
+       "
 856: 
\n", + "
 857:         # Replace the output y results and time domain with the new reduced one
\n", + "
+858:         solution_y = np.empty((total_size, len_teval), dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(858,0,__PYX_ERR(0, 858, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GIVEREF(__pyx_t_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);\n",
+       "    __pyx_t_1 = 0;\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_7);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
+       "    __pyx_t_7 = 0;\n",
+       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_29, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 858, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_6);\n",
+       "    __pyx_t_6 = 0;\n",
+       "
+859:         solution_t = np.empty(len_teval, dtype=np.float64, order='C')
\n", + "
    __Pyx_TraceLine(859,0,__PYX_ERR(0, 859, __pyx_L1_error))\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_7);\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_6);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);\n",
+       "    __pyx_t_6 = 0;\n",
+       "    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_6);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_29, __pyx_n_s_np); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_29);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_29, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_1);\n",
+       "    __pyx_t_1 = 0;\n",
+       "
+860:         solution_y_view = solution_y
\n", + "
    __Pyx_TraceLine(860,0,__PYX_ERR(0, 860, __pyx_L1_error))\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 860, __pyx_L1_error)\n",
+       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+861:         solution_t_view = solution_t
\n", + "
    __Pyx_TraceLine(861,0,__PYX_ERR(0, 861, __pyx_L1_error))\n",
+       "    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 861, __pyx_L1_error)\n",
+       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
+       "    __pyx_v_solution_t_view = __pyx_t_9;\n",
+       "    __pyx_t_9.memview = NULL;\n",
+       "    __pyx_t_9.data = NULL;\n",
+       "
 862: 
\n", + "
 863:         # Update output arrays
\n", + "
+864:         for i in range(len_teval):
\n", + "
    __Pyx_TraceLine(864,0,__PYX_ERR(0, 864, __pyx_L1_error))\n",
+       "    __pyx_t_3 = __pyx_v_len_teval;\n",
+       "    __pyx_t_10 = __pyx_t_3;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+865:             solution_t_view[i] = t_eval[i]
\n", + "
      __Pyx_TraceLine(865,0,__PYX_ERR(0, 865, __pyx_L1_error))\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_12 < 0) {\n",
+       "        __pyx_t_12 += __pyx_v_t_eval.shape[0];\n",
+       "        if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_12 >= __pyx_v_t_eval.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 865, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_26 = __pyx_v_i;\n",
+       "      __pyx_t_13 = -1;\n",
+       "      if (__pyx_t_26 < 0) {\n",
+       "        __pyx_t_26 += __pyx_v_solution_t_view.shape[0];\n",
+       "        if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 0;\n",
+       "      } else if (unlikely(__pyx_t_26 >= __pyx_v_solution_t_view.shape[0])) __pyx_t_13 = 0;\n",
+       "      if (unlikely(__pyx_t_13 != -1)) {\n",
+       "        __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "        __PYX_ERR(0, 865, __pyx_L1_error)\n",
+       "      }\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_26 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_12 * __pyx_v_t_eval.strides[0]) )));\n",
+       "
+866:             for j in range(total_size):
\n", + "
      __Pyx_TraceLine(866,0,__PYX_ERR(0, 866, __pyx_L1_error))\n",
+       "      __pyx_t_17 = __pyx_v_total_size;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "
 867:                 # To match the format that scipy follows, we will take the transpose of y.
\n", + "
+868:                 solution_y_view[j, i] = y_results_reduced_view[j, i]
\n", + "
        __Pyx_TraceLine(868,0,__PYX_ERR(0, 868, __pyx_L1_error))\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        __pyx_t_26 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_12 < 0) {\n",
+       "          __pyx_t_12 += __pyx_v_y_results_reduced_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_12 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_12 >= __pyx_v_y_results_reduced_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_26 < 0) {\n",
+       "          __pyx_t_26 += __pyx_v_y_results_reduced_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_26 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_26 >= __pyx_v_y_results_reduced_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 868, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_20 = __pyx_v_j;\n",
+       "        __pyx_t_27 = __pyx_v_i;\n",
+       "        __pyx_t_13 = -1;\n",
+       "        if (__pyx_t_20 < 0) {\n",
+       "          __pyx_t_20 += __pyx_v_solution_y_view.shape[0];\n",
+       "          if (unlikely(__pyx_t_20 < 0)) __pyx_t_13 = 0;\n",
+       "        } else if (unlikely(__pyx_t_20 >= __pyx_v_solution_y_view.shape[0])) __pyx_t_13 = 0;\n",
+       "        if (__pyx_t_27 < 0) {\n",
+       "          __pyx_t_27 += __pyx_v_solution_y_view.shape[1];\n",
+       "          if (unlikely(__pyx_t_27 < 0)) __pyx_t_13 = 1;\n",
+       "        } else if (unlikely(__pyx_t_27 >= __pyx_v_solution_y_view.shape[1])) __pyx_t_13 = 1;\n",
+       "        if (unlikely(__pyx_t_13 != -1)) {\n",
+       "          __Pyx_RaiseBufferIndexError(__pyx_t_13);\n",
+       "          __PYX_ERR(0, 868, __pyx_L1_error)\n",
+       "        }\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_20 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_27 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_26 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
+       "      }\n",
+       "    }\n",
+       "
 869: 
\n", + "
+870:     return solution_t, solution_y, success, message
\n", + "
  __Pyx_TraceLine(870,0,__PYX_ERR(0, 870, __pyx_L1_error))\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_6);\n",
+       "  __Pyx_INCREF(__pyx_v_solution_t);\n",
+       "  __Pyx_GIVEREF(__pyx_v_solution_t);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_solution_t);\n",
+       "  __Pyx_INCREF(__pyx_v_solution_y);\n",
+       "  __Pyx_GIVEREF(__pyx_v_solution_y);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_solution_y);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);\n",
+       "  __Pyx_INCREF(__pyx_v_message);\n",
+       "  __Pyx_GIVEREF(__pyx_v_message);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_v_message);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_r = __pyx_t_6;\n",
+       "  __pyx_t_6 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "
 871: 
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%cython --annotate --force\n", + "# cython: linetrace=True\n", + "# cython: binding=True\n", + "# distutils: language=c++\n", + "# distutils: define_macros=CYTHON_TRACE_NOGIL=1\n", + "\n", + "import cython\n", + "import numpy as np\n", + "cimport numpy as np\n", + "np.import_array()\n", + "from libcpp cimport bool as bool_cpp_t\n", + "from libc.math cimport sqrt, fabs, nextafter, fmax, fmin\n", + "\n", + "from CyRK.array.interp cimport interp_array, interp_complex_array\n", + "from CyRK.rk.rk cimport (\n", + " RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,\n", + " RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,\n", + " RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,\n", + " RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,\n", + " DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,\n", + " DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)\n", + "\n", + "# # Integration Constants\n", + "# Multiply steps computed from asymptotic behaviour of errors by this.\n", + "cdef double SAFETY = 0.9\n", + "cdef double MIN_FACTOR = 0.2 # Minimum allowed decrease in a step size.\n", + "cdef double MAX_FACTOR = 10. # Maximum allowed increase in a step size.\n", + "cdef double MAX_STEP = np.inf\n", + "cdef double INF = np.inf\n", + "cdef double EPS = np.finfo(np.float64).eps\n", + "cdef double EPS_10 = EPS * 10.\n", + "cdef double EPS_100 = EPS * 100.\n", + "\n", + "\n", + "cdef double cabs(double complex value) nogil:\n", + " \"\"\" Absolute value function for complex-valued inputs.\n", + " \n", + " Parameters\n", + " ----------\n", + " value : float (double complex)\n", + " Complex-valued number.\n", + " \n", + " Returns\n", + " -------\n", + " value_abs : float (double)\n", + " Absolute value of `value`.\n", + " \"\"\"\n", + "\n", + " cdef double v_real\n", + " cdef double v_imag\n", + " v_real = value.real\n", + " v_imag = value.imag\n", + "\n", + " return sqrt(v_real * v_real + v_imag * v_imag)\n", + "\n", + "# Define fused type to handle both float and complex-valued versions of y and dydt.\n", + "\n", + "\n", + "def cyrk_ode_2(\n", + " diffeq,\n", + " (double, double) t_span,\n", + " const double[:] y0,\n", + " tuple args = None,\n", + " double rtol = 1.e-6,\n", + " double atol = 1.e-8,\n", + " double max_step = MAX_STEP,\n", + " double first_step = 0.,\n", + " unsigned char rk_method = 1,\n", + " double[:] t_eval = None,\n", + " bool_cpp_t capture_extra = False,\n", + " Py_ssize_t num_extra = 0,\n", + " bool_cpp_t interpolate_extra = False,\n", + " unsigned int expected_size = 0\n", + " ):\n", + " \"\"\" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\n", + "\n", + " Parameters\n", + " ----------\n", + " diffeq : callable\n", + " An njit-compiled function that defines the derivatives of the problem.\n", + " t_span : Tuple[float, float]\n", + " A tuple of the beginning and end of the integration domain's dependent variables.\n", + " y0 : np.ndarray\n", + " 1D array of the initial values of the problem at t_span[0]\n", + " args : tuple = tuple()\n", + " Any additional arguments that are passed to dffeq.\n", + " rtol : float = 1.e-6\n", + " Integration relative tolerance used to determine optimal step size.\n", + " atol : float = 1.e-8\n", + " Integration absolute tolerance used to determine optimal step size.\n", + " max_step : float = np.inf\n", + " Maximum allowed step size.\n", + " first_step : float = None\n", + " Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\n", + " rk_method : int = 1\n", + " The type of RK method used for integration\n", + " 0 = RK23\n", + " 1 = RK45\n", + " 2 = DOP853\n", + " t_eval : np.ndarray = None\n", + " If provided, then the function will interpolate the integration results to provide them at the\n", + " requested t-steps.\n", + " capture_extra : bool = False\n", + " If True, then additional output from the differential equation will be collected (but not used to determine\n", + " integration error).\n", + " Example:\n", + " ```\n", + " def diffeq(t, y, dy):\n", + " a = ... some function of y and t.\n", + " dy[0] = a**2 * sin(t) - y[1]\n", + " dy[1] = a**3 * cos(t) + y[0]\n", + "\n", + " # Storing extra output in dy even though it is not part of the diffeq.\n", + " dy[2] = a\n", + " ```\n", + " num_extra : int = 0\n", + " The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\n", + " interpolate_extra : bool = False\n", + " If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each\n", + " step in `t_eval`.\n", + " expected_size : int = 0\n", + " The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\n", + " If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\n", + " It is better to overshoot than undershoot this guess.\n", + "\n", + " Returns\n", + " -------\n", + " time_domain : np.ndarray\n", + " The final time domain. This is equal to t_eval if it was provided.\n", + " y_results : np.ndarray\n", + " The solution of the differential equation provided for each time_result.\n", + " success : bool\n", + " Final integration success flag.\n", + " message : str\n", + " Any integration messages, useful if success=False.\n", + "\n", + " \"\"\"\n", + " # Setup loop variables\n", + " cdef Py_ssize_t s, i, j\n", + "\n", + " # Determine information about the differential equation based on its initial conditions\n", + " cdef Py_ssize_t y_size\n", + " cdef double y_size_dbl, y_size_sqrt\n", + " y_size = y0.size\n", + " y_is_complex = False\n", + " y_size_dbl = y_size\n", + " y_size_sqrt = sqrt(y_size_dbl)\n", + "\n", + " # Build time domain\n", + " cdef double t_start, t_end, t_delta, t_delta_abs, direction, direction_inf, t_old, t_new, time_\n", + " t_start = t_span[0]\n", + " t_end = t_span[1]\n", + " t_delta = t_end - t_start\n", + " t_delta_abs = fabs(t_delta)\n", + " if t_delta >= 0.:\n", + " direction = 1.\n", + " else:\n", + " direction = -1.\n", + " direction_inf = direction * INF\n", + "\n", + " # Pull out information on t-eval\n", + " cdef Py_ssize_t len_teval\n", + " if t_eval is None:\n", + " len_teval = 0\n", + " else:\n", + " len_teval = t_eval.size\n", + "\n", + " # Pull out information on args\n", + " cdef bool_cpp_t use_args\n", + " if args is None:\n", + " use_args = False\n", + " else:\n", + " use_args = True\n", + "\n", + " # Set integration flags\n", + " cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\\n", + " store_extras_during_integration\n", + " success = False\n", + " step_accepted = False\n", + " step_rejected = False\n", + " step_error = False\n", + " run_interpolation = False\n", + " store_extras_during_integration = capture_extra\n", + " if len_teval > 0:\n", + " run_interpolation = True\n", + " if run_interpolation and not interpolate_extra:\n", + " # If y is eventually interpolated but the extra outputs are not being interpolated, then there is\n", + " # no point in storing the values during the integration. Turn off this functionality to save\n", + " # on computation.\n", + " store_extras_during_integration = False\n", + "\n", + " # # Determine integration parameters\n", + " # Check tolerances\n", + " if rtol < EPS_100:\n", + " rtol = EPS_100\n", + "\n", + " # atol_arr = np.asarray(atol, dtype=np.complex128)\n", + " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", + " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", + " # raise Exception\n", + "\n", + " # Expected size of output arrays.\n", + " cdef double temp_expected_size\n", + " cdef unsigned int expected_size_to_use, num_concats\n", + " if expected_size == 0:\n", + " # CySolver will attempt to guess on a best size for the arrays.\n", + " temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol))\n", + " temp_expected_size = fmax(temp_expected_size, 100.)\n", + " temp_expected_size = fmin(temp_expected_size, 10_000_000.)\n", + " expected_size_to_use = temp_expected_size\n", + " else:\n", + " expected_size_to_use = expected_size\n", + " # This variable tracks how many times the storage arrays have been appended.\n", + " # It starts at 1 since there is at least one storage array present.\n", + " num_concats = 1\n", + "\n", + " # Initialize arrays that are based on y's size and type.\n", + " y_new = np.empty(y_size, dtype=np.float64, order='C')\n", + " y_old = np.empty(y_size, dtype=np.float64, order='C')\n", + " dydt_new = np.empty(y_size, dtype=np.float64, order='C')\n", + " dydt_old = np.empty(y_size, dtype=np.float64, order='C')\n", + "\n", + " # Setup memory views for these arrays\n", + " cdef double[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view\n", + " y_new_view = y_new\n", + " y_old_view = y_old\n", + " dydt_new_view = dydt_new\n", + " dydt_old_view = dydt_old\n", + "\n", + " # Store y0 into the y arrays\n", + " cdef double y_value\n", + " for i in range(y_size):\n", + " y_value = y0[i]\n", + " y_new_view[i] = y_value\n", + " y_old_view[i] = y_value\n", + "\n", + " # If extra output is true then the output of the diffeq will be larger than the size of y0.\n", + " # Determine that extra size by calling the diffeq and checking its size.\n", + " cdef Py_ssize_t extra_start, total_size, store_loop_size\n", + " extra_start = y_size\n", + " total_size = y_size + num_extra\n", + " # Create arrays based on this total size\n", + " diffeq_out = np.empty(total_size, dtype=np.float64, order='C')\n", + " y0_plus_extra = np.empty(total_size, dtype=np.float64, order='C')\n", + " extra_result = np.empty(num_extra, dtype=np.float64, order='C')\n", + "\n", + " # Setup memory views\n", + " cdef double[:] diffeq_out_view, y0_plus_extra_view, extra_result_view\n", + " diffeq_out_view = diffeq_out\n", + " y0_plus_extra_view = y0_plus_extra\n", + " extra_result_view = extra_result\n", + "\n", + " # Capture the extra output for the initial condition.\n", + " if capture_extra:\n", + " if use_args:\n", + " diffeq(t_start, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_start, y_new, diffeq_out)\n", + "\n", + " # Extract the extra output from the function output.\n", + " for i in range(total_size):\n", + " if i < extra_start:\n", + " # Pull from y0\n", + " y0_plus_extra_view[i] = y0[i]\n", + " else:\n", + " # Pull from extra output\n", + " y0_plus_extra_view[i] = diffeq_out_view[i]\n", + " if store_extras_during_integration:\n", + " store_loop_size = total_size\n", + " else:\n", + " store_loop_size = y_size\n", + " else:\n", + " # No extra output\n", + " store_loop_size = y_size\n", + "\n", + " y0_to_store = np.empty(store_loop_size, dtype=np.float64, order='C')\n", + " cdef double[:] y0_to_store_view\n", + " y0_to_store_view = y0_to_store\n", + " for i in range(store_loop_size):\n", + " if store_extras_during_integration:\n", + " y0_to_store_view[i] = y0_plus_extra_view[i]\n", + " else:\n", + " y0_to_store_view[i] = y0[i]\n", + "\n", + " # # Determine RK scheme\n", + " cdef unsigned char rk_order, error_order\n", + " cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended\n", + " cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1\n", + " cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom\n", + "\n", + " if rk_method == 0:\n", + " # RK23 Method\n", + " rk_order = RK23_order\n", + " error_order = RK23_error_order\n", + " rk_n_stages = RK23_n_stages\n", + " len_C = RK23_LEN_C\n", + " len_B = RK23_LEN_B\n", + " len_E = RK23_LEN_E\n", + " len_E3 = RK23_LEN_E3\n", + " len_E5 = RK23_LEN_E5\n", + " len_A0 = RK23_LEN_A0\n", + " len_A1 = RK23_LEN_A1\n", + " elif rk_method == 1:\n", + " # RK45 Method\n", + " rk_order = RK45_order\n", + " error_order = RK45_error_order\n", + " rk_n_stages = RK45_n_stages\n", + " len_C = RK45_LEN_C\n", + " len_B = RK45_LEN_B\n", + " len_E = RK45_LEN_E\n", + " len_E3 = RK45_LEN_E3\n", + " len_E5 = RK45_LEN_E5\n", + " len_A0 = RK45_LEN_A0\n", + " len_A1 = RK45_LEN_A1\n", + " elif rk_method == 2:\n", + " # DOP853 Method\n", + " rk_order = DOP_order\n", + " error_order = DOP_error_order\n", + " rk_n_stages = DOP_n_stages\n", + " len_C = DOP_LEN_C\n", + " len_B = DOP_LEN_B\n", + " len_E = DOP_LEN_E\n", + " len_E3 = DOP_LEN_E3\n", + " len_E5 = DOP_LEN_E5\n", + " len_A0 = DOP_LEN_A0\n", + " len_A1 = DOP_LEN_A1\n", + "\n", + " rk_n_stages_extended = DOP_n_stages_extended\n", + " else:\n", + " raise Exception(\n", + " 'Unexpected rk_method provided. Currently supported versions are:\\n'\n", + " '\\t0 = RK23\\n'\n", + " '\\t1 = RK34\\n'\n", + " '\\t2 = DOP853')\n", + "\n", + " rk_n_stages_plus1 = rk_n_stages + 1\n", + " error_expo = 1. / (error_order + 1.)\n", + "\n", + " # Build RK Arrays. Note that all are 1D except for A and K.\n", + " A = np.empty((len_A0, len_A1), dtype=np.float64, order='C')\n", + " B = np.empty(len_B, dtype=np.float64, order='C')\n", + " C = np.empty(len_C, dtype=np.float64, order='C') # C is always float no matter what y0 is.\n", + " E = np.empty(len_E, dtype=np.float64, order='C')\n", + " E3 = np.empty(len_E3, dtype=np.float64, order='C')\n", + " E5 = np.empty(len_E5, dtype=np.float64, order='C')\n", + " E_tmp = np.empty(y_size, dtype=np.float64, order='C')\n", + " E3_tmp = np.empty(y_size, dtype=np.float64, order='C')\n", + " E5_tmp = np.empty(y_size, dtype=np.float64, order='C')\n", + " K = np.zeros((rk_n_stages_plus1, y_size), dtype=np.float64, order='C') # It is important K be initialized with 0s\n", + "\n", + " # Setup memory views.\n", + " cdef double[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view\n", + " cdef double[:, :] A_view, K_view\n", + " cdef double[:] C_view\n", + " A_view = A\n", + " B_view = B\n", + " C_view = C\n", + " E_view = E\n", + " E3_view = E3\n", + " E5_view = E5\n", + " E_tmp_view = E_tmp\n", + " E3_tmp_view = E3_tmp\n", + " E5_tmp_view = E5_tmp\n", + " K_view = K\n", + "\n", + " # Populate values based on externally defined constants.\n", + " if rk_method == 0:\n", + " # RK23 Method\n", + " for i in range(len_A0):\n", + " for j in range(len_A1):\n", + " A_view[i, j] = RK23_A[i][j]\n", + " for i in range(len_B):\n", + " B_view[i] = RK23_B[i]\n", + " for i in range(len_C):\n", + " C_view[i] = RK23_C[i]\n", + " for i in range(len_E):\n", + " E_view[i] = RK23_E[i]\n", + " # Dummy Variables, set equal to E\n", + " E3_view[i] = RK23_E[i]\n", + " E5_view[i] = RK23_E[i]\n", + " elif rk_method == 1:\n", + " # RK45 Method\n", + " for i in range(len_A0):\n", + " for j in range(len_A1):\n", + " A_view[i, j] = RK45_A[i][j]\n", + " for i in range(len_B):\n", + " B_view[i] = RK45_B[i]\n", + " for i in range(len_C):\n", + " C_view[i] = RK45_C[i]\n", + " for i in range(len_E):\n", + " E_view[i] = RK45_E[i]\n", + " # Dummy Variables, set equal to E\n", + " E3_view[i] = RK45_E[i]\n", + " E5_view[i] = RK45_E[i]\n", + " else:\n", + " # DOP853 Method\n", + " for i in range(len_A0):\n", + " for j in range(len_A1):\n", + " A_view[i, j] = DOP_A_REDUCED[i][j]\n", + " for i in range(len_B):\n", + " B_view[i] = DOP_B[i]\n", + " for i in range(len_C):\n", + " C_view[i] = DOP_C_REDUCED[i]\n", + " for i in range(len_E):\n", + " E3_view[i] = DOP_E3[i]\n", + " E5_view[i] = DOP_E5[i]\n", + " E_view[i] = DOP_E5[i]\n", + " # Dummy Variables, set equal to E3\n", + " E_view[i] = DOP_E3[i]\n", + "\n", + " # Initialize variables for start of integration\n", + " if not capture_extra:\n", + " # If `capture_extra` is True then this step was already performed.\n", + " if use_args:\n", + " diffeq(t_start, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_start, y_new, diffeq_out)\n", + "\n", + " t_old = t_start\n", + " t_new = t_start\n", + " # Initialize dydt arrays.\n", + " for i in range(y_size):\n", + " dydt_new_view[i] = diffeq_out_view[i]\n", + " dydt_old_view[i] = dydt_new_view[i]\n", + " \n", + " # Setup storage arrays\n", + " # These arrays are built to fit a number of points equal to `expected_size_to_use`\n", + " # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.\n", + " cdef double[:, :] y_results_array_view, y_results_array_new_view, solution_y_view\n", + " cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view\n", + " y_results_array = np.empty((store_loop_size, expected_size_to_use), dtype=np.float64, order='C')\n", + " time_domain_array = np.empty(expected_size_to_use, dtype=np.float64, order='C')\n", + " y_results_array_view = y_results_array\n", + " time_domain_array_view = time_domain_array\n", + "\n", + " # Load initial conditions into output arrays\n", + " time_domain_array_view[0] = t_start\n", + " for i in range(store_loop_size):\n", + " if store_extras_during_integration:\n", + " y_results_array_view[i] = y0_plus_extra_view[i]\n", + " else:\n", + " y_results_array_view[i] = y0[i]\n", + "\n", + " # # Determine size of first step.\n", + " cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale\n", + " if first_step == 0.:\n", + " # Select an initial step size based on the differential equation.\n", + " # .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", + " # Equations I: Nonstiff Problems\", Sec. II.4.\n", + " if y_size == 0:\n", + " step_size = INF\n", + " else:\n", + " # Find the norm for d0 and d1\n", + " d0 = 0.\n", + " d1 = 0.\n", + " for i in range(y_size):\n", + " scale = atol + fabs(y_old_view[i]) * rtol\n", + "\n", + " d0_abs = fabs(y_old_view[i] / scale)\n", + " d1_abs = fabs(dydt_old_view[i] / scale)\n", + " d0 += (d0_abs * d0_abs)\n", + " d1 += (d1_abs * d1_abs)\n", + "\n", + " d0 = sqrt(d0) / y_size_sqrt\n", + " d1 = sqrt(d1) / y_size_sqrt\n", + "\n", + " if d0 < 1.e-5 or d1 < 1.e-5:\n", + " h0 = 1.e-6\n", + " else:\n", + " h0 = 0.01 * d0 / d1\n", + "\n", + " h0_direction = h0 * direction\n", + " t_new = t_old + h0_direction\n", + " for i in range(y_size):\n", + " y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]\n", + "\n", + " if use_args:\n", + " diffeq(t_new, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_new, y_new, diffeq_out)\n", + "\n", + " # Find the norm for d2\n", + " d2 = 0.\n", + " for i in range(y_size):\n", + " dydt_new_view[i] = diffeq_out_view[i]\n", + " scale = atol + fabs(y_old_view[i]) * rtol\n", + " d2_abs = fabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)\n", + " d2 += (d2_abs * d2_abs)\n", + "\n", + " d2 = sqrt(d2) / (h0 * y_size_sqrt)\n", + "\n", + " if d1 <= 1.e-15 and d2 <= 1.e-15:\n", + " h1 = max(1.e-6, h0 * 1.e-3)\n", + " else:\n", + " h1 = (0.01 / max(d1, d2))**error_expo\n", + "\n", + " step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))\n", + " else:\n", + " if first_step <= 0.:\n", + " raise Exception('Error in user-provided step size: Step size must be a positive number.')\n", + " elif first_step > t_delta_abs:\n", + " raise Exception('Error in user-provided step size: Step size can not exceed bounds.')\n", + " step_size = first_step\n", + "\n", + " # # Main integration loop\n", + " cdef double min_step, step_factor, step\n", + " cdef double c\n", + " cdef double K_scale\n", + " # Integrator Status Codes\n", + " # 0 = Running\n", + " # -1 = Failed\n", + " # 1 = Finished with no obvious issues\n", + " cdef char status\n", + " cdef Py_ssize_t len_t\n", + " status = 0\n", + " len_t = 1 # There is an initial condition provided so the time length is already 1\n", + " while status == 0:\n", + " if t_new == t_end or y_size == 0:\n", + " t_old = t_end\n", + " t_new = t_end\n", + " status = 1\n", + " break\n", + "\n", + " # Run RK integration step\n", + " # Determine step size based on previous loop\n", + " # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)\n", + " min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)\n", + " # Look for over/undershoots in previous step size\n", + " if step_size > max_step:\n", + " step_size = max_step\n", + " elif step_size < min_step:\n", + " step_size = min_step\n", + "\n", + " # Determine new step size\n", + " step_accepted = False\n", + " step_rejected = False\n", + " step_error = False\n", + "\n", + " # # Step Loop\n", + " while not step_accepted:\n", + "\n", + " if step_size < min_step:\n", + " step_error = True\n", + " status = -1\n", + " break\n", + "\n", + " # Move time forward for this particular step size\n", + " step = step_size * direction\n", + " t_new = t_old + step\n", + "\n", + " # Check that we are not at the end of integration with that move\n", + " if direction * (t_new - t_end) > 0.:\n", + " t_new = t_end\n", + "\n", + " # Correct the step if we were at the end of integration\n", + " step = t_new - t_old\n", + " step_size = fabs(step)\n", + "\n", + " # Calculate derivative using RK method\n", + " for i in range(y_size):\n", + " K_view[0, i] = dydt_old_view[i]\n", + "\n", + " for s in range(1, len_C):\n", + " c = C_view[s]\n", + " time_ = t_old + c * step\n", + "\n", + " # Dot Product (K, a) * step\n", + " for j in range(s):\n", + " for i in range(y_size):\n", + " if j == 0:\n", + " # Initialize\n", + " y_new_view[i] = y_old_view[i]\n", + "\n", + " y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)\n", + "\n", + " if use_args:\n", + " diffeq(time_, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(time_, y_new, diffeq_out)\n", + "\n", + " for i in range(y_size):\n", + " K_view[s, i] = diffeq_out_view[i]\n", + "\n", + " # Dot Product (K, B) * step\n", + " for j in range(rk_n_stages):\n", + " # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match\n", + " # the shape of B.\n", + " for i in range(y_size):\n", + " if j == 0:\n", + " # Initialize\n", + " y_new_view[i] = y_old_view[i]\n", + " y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)\n", + "\n", + " if use_args:\n", + " diffeq(t_new, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_new, y_new, diffeq_out)\n", + "\n", + " for i in range(store_loop_size):\n", + " if i < extra_start:\n", + " # Set diffeq results\n", + " dydt_new_view[i] = diffeq_out_view[i]\n", + " else:\n", + " # Set extra results\n", + " extra_result_view[i - extra_start] = diffeq_out_view[i]\n", + "\n", + " if rk_method == 2:\n", + " # Calculate Error for DOP853\n", + "\n", + " # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale\n", + " for i in range(y_size):\n", + " # Check how well this step performed.\n", + " scale = atol + max(fabs(y_old_view[i]), fabs(y_new_view[i])) * rtol\n", + "\n", + " for j in range(rk_n_stages_plus1):\n", + " if j == 0:\n", + " # Initialize\n", + " E5_tmp_view[i] = 0.\n", + " E3_tmp_view[i] = 0.\n", + "\n", + " elif j == rk_n_stages:\n", + " # Set last array of the K array.\n", + " K_view[j, i] = dydt_new_view[i]\n", + "\n", + " K_scale = K_view[j, i] / scale\n", + " E5_tmp_view[i] = E5_tmp_view[i] + (K_scale * E5_view[j])\n", + " E3_tmp_view[i] = E3_tmp_view[i] + (K_scale * E3_view[j])\n", + "\n", + " # Find norms for each error\n", + " error_norm5 = 0.\n", + " error_norm3 = 0.\n", + "\n", + " # Perform summation\n", + " for i in range(y_size):\n", + " error_norm5_abs = fabs(E5_tmp_view[i])\n", + " error_norm3_abs = fabs(E3_tmp_view[i])\n", + "\n", + " error_norm5 += (error_norm5_abs * error_norm5_abs)\n", + " error_norm3 += (error_norm3_abs * error_norm3_abs)\n", + "\n", + " # Check if errors are zero\n", + " if (error_norm5 == 0.) and (error_norm3 == 0.):\n", + " error_norm = 0.\n", + " else:\n", + " error_denom = error_norm5 + 0.01 * error_norm3\n", + " error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)\n", + "\n", + " else:\n", + " # Calculate Error for RK23 and RK45\n", + " error_norm = 0.\n", + " # Dot Product (K, E) * step / scale\n", + " for i in range(y_size):\n", + "\n", + " # Check how well this step performed.\n", + " scale = atol + max(fabs(y_old_view[i]), fabs(y_new_view[i])) * rtol\n", + "\n", + " for j in range(rk_n_stages_plus1):\n", + " if j == 0:\n", + " # Initialize\n", + " E_tmp_view[i] = 0.\n", + " elif j == rk_n_stages:\n", + " # Set last array of the K array.\n", + " K_view[j, i] = dydt_new_view[i]\n", + "\n", + " K_scale = K_view[j, i] / scale\n", + " E_tmp_view[i] = E_tmp_view[i] + (K_scale * E_view[j] * step)\n", + "\n", + " error_norm_abs = fabs(E_tmp_view[i])\n", + " error_norm += (error_norm_abs * error_norm_abs)\n", + " error_norm = sqrt(error_norm) / y_size_sqrt\n", + "\n", + " if error_norm < 1.:\n", + " # The error is low! Let's update this step for the next time loop\n", + " if error_norm == 0.:\n", + " step_factor = MAX_FACTOR\n", + " else:\n", + " error_pow = error_norm**-error_expo\n", + " step_factor = min(MAX_FACTOR, SAFETY * error_pow)\n", + "\n", + " if step_rejected:\n", + " # There were problems with this step size on the previous step loop. Make sure factor does\n", + " # not exasperate them.\n", + " step_factor = min(step_factor, 1.)\n", + "\n", + " step_size = step_size * step_factor\n", + " step_accepted = True\n", + " else:\n", + " error_pow = error_norm**-error_expo\n", + " step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)\n", + " step_rejected = True\n", + "\n", + " if not step_accepted:\n", + " # Issue with step convergence\n", + " status = -2\n", + " break\n", + " elif step_error:\n", + " # Issue with step convergence\n", + " status = -1\n", + " break\n", + "\n", + " # End of step loop. Update the _now variables\n", + " t_old = t_new\n", + " for i in range(y_size):\n", + " y_old_view[i] = y_new_view[i]\n", + " dydt_old_view[i] = dydt_new_view[i]\n", + "\n", + " # Save data\n", + " if len_t >= (num_concats * expected_size_to_use): \n", + " # There is more data than we have room in our arrays. \n", + " # Build new arrays with more space.\n", + " # OPT: Note this is an expensive operation. \n", + " num_concats += 1\n", + " new_size = num_concats * expected_size_to_use\n", + " time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')\n", + " y_results_array_new = np.empty((store_loop_size, new_size), dtype=np.float64, order='C')\n", + " time_domain_array_new_view = time_domain_array_new\n", + " y_results_array_new_view = y_results_array_new\n", + " \n", + " # Loop through time to fill in these new arrays with the old values\n", + " for i in range(len_t):\n", + " time_domain_array_new_view[i] = time_domain_array_view[i]\n", + " \n", + " for j in range(store_loop_size):\n", + " y_results_array_new_view[j, i] = y_results_array_view[j, i]\n", + " \n", + " # No longer need the old arrays. Change where the view is pointing and delete them.\n", + " y_results_array_view = y_results_array_new\n", + " time_domain_array_view = time_domain_array_new\n", + " # TODO: Delete the old arrays?\n", + " \n", + " # There should be room in the arrays to add new data.\n", + " time_domain_array_view[len_t] = t_new\n", + " # To match the format that scipy follows, we will take the transpose of y.\n", + " for i in range(store_loop_size):\n", + " if i < extra_start:\n", + " # Pull from y result\n", + " y_results_array_view[i, len_t] = y_new_view[i]\n", + " else:\n", + " # Pull from extra\n", + " y_results_array_view[i, len_t] = extra_result_view[i - extra_start]\n", + "\n", + " # Increase number of time points.\n", + " len_t += 1\n", "\n", - " y0 = y[0] # Angular deflection [rad]\n", - " y1 = y[1] # Angular velocity [rad s-1]\n", - " dy = np.empty_like(y)\n", - " dy[0] = y1\n", - " dy[1] = (-3. * g / (2. * l)) * np.sin(y0) + (3. / (m * l**2)) * torque\n", - " return dy\n", + " # # Clean up output.\n", + " cdef str message\n", + " message = 'Not Defined.'\n", + " if status == 1:\n", + " success = True\n", + " message = 'Integration finished with no issue.'\n", + " elif status == -1:\n", + " message = 'Error in step size calculation: Required step size is less than spacing between numbers.'\n", + " elif status < -1:\n", + " message = 'Integration Failed.'\n", "\n", "\n", - "pendulum_cy = nb2cy(pendulum_nb, use_njit=True, cache_njit=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "59a5b145", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Working on Cython (function) integration...\n", - "181\n", - "Done.\n", - "Working on Numba integration...\n", - "Done.\n" - ] - } - ], - "source": [ - "print('Working on Cython (function) integration...')\n", - "t_cy, y_cy, _, _ = cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print(t_cy.size)\n", - "print('Done.')\n", - "print('Working on Numba integration...')\n", - "t_nb, y_nb, _, _ = nbrk_ode(pendulum_nb, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print('Done.')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "8c5e71aa", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Performance\n", - "Cython (function)\n", - "1.02 ms ± 5.82 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", - "\n", - "Numba\n", - "188 µs ± 251 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" - ] - } - ], - "source": [ - "print('Performance')\n", - "print('Cython (function)')\n", - "# v0.5.3: 1.19ms, 1.2ms, 1.2ms\n", - "# v0.6.2: 1.02ms, 1.02ms\n", - "%timeit cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", + " # Create output arrays. To match the format that scipy follows, we will take the transpose of y.\n", + " if success:\n", + " # Build final output arrays.\n", + " # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.\n", + " # This process will remove that junk and leave only the wanted data.\n", + " solution_y = np.empty((store_loop_size, len_t), dtype=np.float64, order='C')\n", + " solution_t = np.empty(len_t, dtype=np.float64, order='C')\n", "\n", - "print('\\nNumba')\n", - "# v0.5.3: 199us, 201us, 200us\n", - "# v0.6.2: 187us, 188us\n", - "%timeit nbrk_ode(pendulum_nb, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "f1f28e08", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig_cy, ax_cy = plt.subplots()\n", - "ax_cy.plot(t_cy, y_cy[0], 'r')\n", - "ax_cy.plot(t_cy, y_cy[1], 'b')\n", - "ax_cy.set(title='Cython (function)')\n", - "fig_nb, ax_nb = plt.subplots()\n", - "ax_nb.plot(t_nb, y_nb[0], 'r')\n", - "ax_nb.plot(t_nb, y_nb[1], 'b')\n", - "ax_nb.set(title='Numba')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "aa05194e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The Cython extension is already loaded. To reload it, use:\n", - " %reload_ext Cython\n" - ] - } - ], - "source": [ - "%load_ext Cython" + " # Link memory views\n", + " solution_y_view = solution_y\n", + " solution_t_view = solution_t\n", + "\n", + " # Populate values\n", + " for i in range(len_t):\n", + " solution_t_view[i] = time_domain_array_view[i]\n", + " for j in range(store_loop_size):\n", + " solution_y_view[j, i] = y_results_array_view[j, i]\n", + " else:\n", + " # Build nan arrays\n", + " solution_y = np.nan * np.ones((store_loop_size, 1), dtype=np.float64, order='C')\n", + " solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')\n", + "\n", + " # Link memory views\n", + " solution_y_view = solution_y\n", + " solution_t_view = solution_t\n", + "\n", + " cdef double[:, :] y_results_reduced_view\n", + " cdef double[:] y_result_timeslice_view, y_result_temp_view\n", + "\n", + " if run_interpolation and success:\n", + " # User only wants data at specific points.\n", + "\n", + " # The current version of this function has not implemented sicpy's dense output.\n", + " # Instead we use an interpolation.\n", + " # OPT: this could be done inside the integration loop for performance gains.\n", + " y_results_reduced = np.empty((total_size, len_teval), dtype=np.float64, order='C')\n", + " y_result_timeslice = np.empty(len_t, dtype=np.float64, order='C')\n", + " y_result_temp = np.empty(len_teval, dtype=np.float64, order='C')\n", + " y_results_reduced_view = y_results_reduced\n", + " y_result_timeslice_view = y_result_timeslice\n", + " y_result_temp_view = y_result_temp\n", + "\n", + " for j in range(y_size):\n", + " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", + " # # Set timeslice equal to the time values at this y_j\n", + " for i in range(len_t):\n", + " y_result_timeslice_view[i] = solution_y_view[j, i]\n", + "\n", + " # Perform numerical interpolation\n", + " interp_array(\n", + " t_eval,\n", + " solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", + "\n", + " # Store result.\n", + " for i in range(len_teval):\n", + " y_results_reduced_view[j, i] = y_result_temp_view[i]\n", + "\n", + " if capture_extra:\n", + " # Right now if there is any extra output then it is stored at each time step used in the RK loop.\n", + " # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?\n", + " # or do we use the interpolation on y to find new values.\n", + " # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.\n", + " if interpolate_extra:\n", + " # Continue the interpolation for the extra values.\n", + " for j in range(num_extra):\n", + " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", + " # # Set timeslice equal to the time values at this y_j\n", + " for i in range(len_t):\n", + " y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]\n", + "\n", + " # Perform numerical interpolation\n", + " interp_array(\n", + " t_eval,\n", + " solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", + "\n", + " # Store result.\n", + " for i in range(len_teval):\n", + " y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]\n", + " else:\n", + " # Use y and t to recalculate the extra outputs\n", + " y_interp = np.empty(y_size, dtype=np.float64)\n", + " y_interp_view = y_interp\n", + " for i in range(len_teval):\n", + " time_ = t_eval[i]\n", + " for j in range(y_size):\n", + " y_interp_view[j] = y_results_reduced_view[j, i]\n", + "\n", + " if use_args:\n", + " diffeq(time_, y_interp, diffeq_out, *args)\n", + " else:\n", + " diffeq(time_, y_interp, diffeq_out)\n", + "\n", + " for j in range(num_extra):\n", + " y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]\n", + "\n", + " # Replace the output y results and time domain with the new reduced one\n", + " solution_y = np.empty((total_size, len_teval), dtype=np.float64, order='C')\n", + " solution_t = np.empty(len_teval, dtype=np.float64, order='C')\n", + " solution_y_view = solution_y\n", + " solution_t_view = solution_t\n", + "\n", + " # Update output arrays\n", + " for i in range(len_teval):\n", + " solution_t_view[i] = t_eval[i]\n", + " for j in range(total_size):\n", + " # To match the format that scipy follows, we will take the transpose of y.\n", + " solution_y_view[j, i] = y_results_reduced_view[j, i]\n", + "\n", + " return solution_t, solution_y, success, message\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 10, "id": "c7158ab3", "metadata": { - "scrolled": false + "scrolled": true }, "outputs": [ { @@ -177,10 +7488,9 @@ "output_type": "stream", "text": [ "Content of stdout:\n", - "_cython_magic_10a8811746fe6409d70af51d5b3f1f361dd6a9f1.cpp\r\n", - "C:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_10a8811746fe6409d70af51d5b3f1f361dd6a9f1.cpp(44214): warning C4551: function call missing argument list\r\n", - " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_10a8811746fe6409d70af51d5b3f1f361dd6a9f1.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_10a8811746fe6409d70af51d5b3f1f361dd6a9f1.cp311-win_amd64.exp\r\n", + "_cython_magic_53737a926b342d19e513bb0e0cb06b965bdbcd90.cpp\r\n", + "C:\\ProgramData\\Anaconda3\\envs\\cytest39\\lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", + " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_53737a926b342d19e513bb0e0cb06b965bdbcd90.cp39-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_53737a926b342d19e513bb0e0cb06b965bdbcd90.cp39-win_amd64.exp\r\n", "Generating code\r\n", "Finished generating code" ] @@ -193,7 +7503,7 @@ "\n", "\n", " \n", - " Cython: _cython_magic_10a8811746fe6409d70af51d5b3f1f361dd6a9f1.pyx\n", + " Cython: _cython_magic_53737a926b342d19e513bb0e0cb06b965bdbcd90.pyx\n", " \n", + "\n", + "\n", + "

Generated by Cython 3.0.0

\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", + "

\n", + "
+01: # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False
\n", + "
  __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 02: 
\n", + "
+03: import numpy as np
\n", + "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 3, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 04: cimport numpy as np
\n", + "
+05: np.import_array()
\n", + "
  __pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 5, __pyx_L1_error)\n",
+       "
 06: 
\n", + "
 07: 
\n", + "
+08: cpdef void test_no_t(double[:] arr_in, double[:, :] arr_out):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(__Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out, CYTHON_UNUSED int __pyx_skip_dispatch) {\n",
+       "  Py_ssize_t __pyx_v_i;\n",
+       "  Py_ssize_t __pyx_v_j;\n",
+       "  Py_ssize_t __pyx_v_size_0;\n",
+       "  Py_ssize_t __pyx_v_size_1;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"test_no_t\", 0);\n",
+       "/* … */\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_no_t\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t = {\"test_no_t\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  __Pyx_memviewslice __pyx_v_arr_in = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_arr_out = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"test_no_t (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr_in,&__pyx_n_s_arr_out,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
+       "      }\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_in)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_out)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "        else {\n",
+       "          __Pyx_RaiseArgtupleInvalid(\"test_no_t\", 1, 2, 2, 1); __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "        }\n",
+       "      }\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"test_no_t\") < 0)) __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "      }\n",
+       "    } else if (unlikely(__pyx_nargs != 2)) {\n",
+       "      goto __pyx_L5_argtuple_error;\n",
+       "    } else {\n",
+       "      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "    }\n",
+       "    __pyx_v_arr_in = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_in.memview)) __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "    __pyx_v_arr_out = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_out.memview)) __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"test_no_t\", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_no_t\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(__pyx_self, __pyx_v_arr_in, __pyx_v_arr_out);\n",
+       "  int __pyx_lineno = 0;\n",
+       "  const char *__pyx_filename = NULL;\n",
+       "  int __pyx_clineno = 0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"test_no_t\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(__pyx_v_arr_in, __pyx_v_arr_out, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __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_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_no_t\", __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__22 = PyTuple_Pack(2, __pyx_n_s_arr_in, __pyx_n_s_arr_out); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__22);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__22);\n",
+       "/* … */\n",
+       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t, 0, __pyx_n_s_test_no_t, NULL, __pyx_n_s_cython_magic_b567b6953717f6ddb9, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_no_t, __pyx_t_7) < 0) __PYX_ERR(0, 8, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_test_no_t, 8, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
+       "
 09: 
\n", + "
 10:     cdef Py_ssize_t i, j, size_0, size_1
\n", + "
+11:     size_0 = arr_in.size
\n", + "
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_arr_in, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_size_0 = __pyx_t_3;\n",
+       "
+12:     size_1 = arr_out.shape[0]
\n", + "
  __pyx_v_size_1 = (__pyx_v_arr_out.shape[0]);\n",
+       "
 13: 
\n", + "
+14:     for i in range(size_0):
\n", + "
  __pyx_t_3 = __pyx_v_size_0;\n",
+       "  __pyx_t_4 = __pyx_t_3;\n",
+       "  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {\n",
+       "    __pyx_v_i = __pyx_t_5;\n",
+       "
+15:         for j in range(size_1):
\n", + "
    __pyx_t_6 = __pyx_v_size_1;\n",
+       "    __pyx_t_7 = __pyx_t_6;\n",
+       "    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {\n",
+       "      __pyx_v_j = __pyx_t_8;\n",
+       "
+16:             arr_out[j, i] = arr_in[i] / j
\n", + "
      __pyx_t_9 = __pyx_v_i;\n",
+       "      __pyx_t_10 = __pyx_v_j;\n",
+       "      __pyx_t_11 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_arr_out.data + __pyx_t_10 * __pyx_v_arr_out.strides[0]) ) + __pyx_t_11 * __pyx_v_arr_out.strides[1]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_arr_in.data + __pyx_t_9 * __pyx_v_arr_in.strides[0]) ))) / ((double)__pyx_v_j));\n",
+       "    }\n",
+       "  }\n",
+       "
 17: 
\n", + "
 18: 
\n", + "
+19: cpdef void test_wt(double[:] arr_in, double[:, :] arr_out):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_wt(__Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out, CYTHON_UNUSED int __pyx_skip_dispatch) {\n",
+       "  Py_ssize_t __pyx_v_i;\n",
+       "  Py_ssize_t __pyx_v_j;\n",
+       "  Py_ssize_t __pyx_v_size_0;\n",
+       "  Py_ssize_t __pyx_v_size_1;\n",
+       "  __Pyx_memviewslice __pyx_v_arr_view_t = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"test_wt\", 0);\n",
+       "  __PYX_INC_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "/* … */\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_4, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_wt\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_view_t, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt = {\"test_wt\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt(PyObject *__pyx_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  __Pyx_memviewslice __pyx_v_arr_in = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  __Pyx_memviewslice __pyx_v_arr_out = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"test_wt (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr_in,&__pyx_n_s_arr_out,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
+       "      }\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_in)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_out)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "        else {\n",
+       "          __Pyx_RaiseArgtupleInvalid(\"test_wt\", 1, 2, 2, 1); __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "        }\n",
+       "      }\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"test_wt\") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "      }\n",
+       "    } else if (unlikely(__pyx_nargs != 2)) {\n",
+       "      goto __pyx_L5_argtuple_error;\n",
+       "    } else {\n",
+       "      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "    }\n",
+       "    __pyx_v_arr_in = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_in.memview)) __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "    __pyx_v_arr_out = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_out.memview)) __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"test_wt\", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_wt\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_2test_wt(__pyx_self, __pyx_v_arr_in, __pyx_v_arr_out);\n",
+       "  int __pyx_lineno = 0;\n",
+       "  const char *__pyx_filename = NULL;\n",
+       "  int __pyx_clineno = 0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_2test_wt(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"test_wt\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_wt(__pyx_v_arr_in, __pyx_v_arr_out, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __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_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_wt\", __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_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt, 0, __pyx_n_s_test_wt, NULL, __pyx_n_s_cython_magic_b567b6953717f6ddb9, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 19, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_wt, __pyx_t_7) < 0) __PYX_ERR(0, 19, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "
 20: 
\n", + "
 21:     cdef Py_ssize_t i, j, size_0, size_1
\n", + "
+22:     size_0 = arr_in.size
\n", + "
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_arr_in, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_size_0 = __pyx_t_3;\n",
+       "
+23:     size_1 = arr_out.shape[0]
\n", + "
  __pyx_v_size_1 = (__pyx_v_arr_out.shape[0]);\n",
+       "
 24: 
\n", + "
 25:     cdef double[:, :] arr_view_t
\n", + "
+26:     arr_view_t = arr_out.T
\n", + "
  __pyx_t_4 = __pyx_v_arr_out;\n",
+       "  __PYX_INC_MEMVIEW(&__pyx_t_4, 1);\n",
+       "  if (unlikely((__pyx_memslice_transpose(&__pyx_t_4) < 0))) __PYX_ERR(0, 26, __pyx_L1_error)\n",
+       "  __pyx_v_arr_view_t = __pyx_t_4;\n",
+       "  __pyx_t_4.memview = NULL;\n",
+       "  __pyx_t_4.data = NULL;\n",
+       "
 27: 
\n", + "
+28:     for i in range(size_0):
\n", + "
  __pyx_t_3 = __pyx_v_size_0;\n",
+       "  __pyx_t_5 = __pyx_t_3;\n",
+       "  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {\n",
+       "    __pyx_v_i = __pyx_t_6;\n",
+       "
+29:         for j in range(size_1):
\n", + "
    __pyx_t_7 = __pyx_v_size_1;\n",
+       "    __pyx_t_8 = __pyx_t_7;\n",
+       "    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {\n",
+       "      __pyx_v_j = __pyx_t_9;\n",
+       "
+30:             arr_view_t[i, j] = arr_in[i] / j
\n", + "
      __pyx_t_10 = __pyx_v_i;\n",
+       "      __pyx_t_11 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_j;\n",
+       "      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_arr_view_t.data + __pyx_t_11 * __pyx_v_arr_view_t.strides[0]) ) + __pyx_t_12 * __pyx_v_arr_view_t.strides[1]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_arr_in.data + __pyx_t_10 * __pyx_v_arr_in.strides[0]) ))) / ((double)__pyx_v_j));\n",
+       "    }\n",
+       "  }\n",
+       "
 31: 
\n", + "
+32:     arr_out = arr_view_t.T
\n", + "
  __pyx_t_4 = __pyx_v_arr_view_t;\n",
+       "  __PYX_INC_MEMVIEW(&__pyx_t_4, 1);\n",
+       "  if (unlikely((__pyx_memslice_transpose(&__pyx_t_4) < 0))) __PYX_ERR(0, 32, __pyx_L1_error)\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
+       "  __pyx_v_arr_out = __pyx_t_4;\n",
+       "  __pyx_t_4.memview = NULL;\n",
+       "  __pyx_t_4.data = NULL;\n",
+       "
 33: 
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%cython --annotate --force\n", + "# cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False\n", + "\n", + "import numpy as np\n", + "cimport numpy as np\n", + "np.import_array()\n", + "\n", + "\n", + "cpdef void test_no_t(double[:] arr_in, double[:, :] arr_out):\n", + " \n", + " cdef Py_ssize_t i, j, size_0, size_1\n", + " size_0 = arr_in.size\n", + " size_1 = arr_out.shape[0]\n", + " \n", + " for i in range(size_0):\n", + " for j in range(size_1):\n", + " arr_out[j, i] = arr_in[i] / j\n", + "\n", + " \n", + "cpdef void test_wt(double[:] arr_in, double[:, :] arr_out):\n", + " \n", + " cdef Py_ssize_t i, j, size_0, size_1\n", + " size_0 = arr_in.size\n", + " size_1 = arr_out.shape[0]\n", + " \n", + " cdef double[:, :] arr_view_t\n", + " arr_view_t = arr_out.T\n", + " \n", + " for i in range(size_0):\n", + " for j in range(size_1):\n", + " arr_view_t[i, j] = arr_in[i] / j\n", + " \n", + " arr_out = arr_view_t.T\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "a508078d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "16.9 ms ± 598 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", + "16.6 ms ± 147 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] + } + ], + "source": [ + "x = np.linspace(0., 100., 100000, dtype=np.float64)\n", + "Z1 = np.zeros((100, x.size), dtype=np.float64)\n", + "Z2 = np.zeros((100, x.size), dtype=np.float64)\n", + "\n", + "test_no_t(x, Z1)\n", + "test_wt(x, Z2)\n", + "\n", + "print(np.all(Z1 == Z2))\n", + "\n", + "%timeit test_no_t(x, Z1)\n", + "%timeit test_wt(x, Z2)" + ] + }, { "cell_type": "code", "execution_count": 11, From eb4ae32ce2ea79628ffb9bebb2639f37f2abe115 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Fri, 25 Aug 2023 12:33:35 -0400 Subject: [PATCH 11/29] reverted loop structure on CySolver error calc. removed temp arrays --- CyRK/cy/cyrk.pyx | 51 +++++++++++++----------------------------- CyRK/cy/cysolver.pyx | 53 ++++++++++++++++---------------------------- 2 files changed, 35 insertions(+), 69 deletions(-) diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index 8d24e59..42dee2b 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -382,15 +382,12 @@ def cyrk_ode( E = np.empty(len_E, dtype=DTYPE, order='C') E3 = np.empty(len_E3, dtype=DTYPE, order='C') E5 = np.empty(len_E5, dtype=DTYPE, order='C') - E_tmp = np.empty(y_size, dtype=DTYPE, order='C') - E3_tmp = np.empty(y_size, dtype=DTYPE, order='C') - E5_tmp = np.empty(y_size, dtype=DTYPE, order='C') K = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C') # It is important K be initialized with 0s # Setup memory views. - cdef double_numeric[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view + cdef double_numeric[:] B_view, E_view, E3_view, E5_view cdef double_numeric[:, :] A_view, K_view - cdef double_numeric A_at_sj, B_at_j, E5_at_j, E3_at_j, E_at_j + cdef double_numeric A_at_sj, B_at_j, error_dot_1, error_dot_2 cdef double[:] C_view A_view = A B_view = B @@ -398,9 +395,6 @@ def cyrk_ode( E_view = E E3_view = E3 E5_view = E5 - E_tmp_view = E_tmp - E3_tmp_view = E3_tmp - E5_tmp_view = E5_tmp K_view = K # Populate values based on externally defined constants. @@ -678,37 +672,26 @@ def cyrk_ode( if rk_method == 2: # Calculate Error for DOP853 - + # Find norms for each error + error_norm5 = 0. + error_norm3 = 0. # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale for i in range(y_size): - # Check how well this step performed. - scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol - for j in range(rk_n_stages_plus1): if j == 0: # Initialize - E5_tmp_view[i] = 0. - E3_tmp_view[i] = 0. - - elif j == rk_n_stages: - # Set last array of the K array. - K_view[j, i] = dydt_new_view[i] + error_dot_1 = 0. + error_dot_2 = 0. K_scale = K_view[j, i] / scale_view[i] - E5_tmp_view[i] = E5_tmp_view[i] + (K_scale * E5_view[j]) - E3_tmp_view[i] = E3_tmp_view[i] + (K_scale * E3_view[j]) + error_dot_1 += K_scale * E3_view[j] + error_dot_2 += K_scale * E5_view[j] - # Find norms for each error - error_norm5 = 0. - error_norm3 = 0. + error_norm3_abs = dabs(error_dot_1) + error_norm5_abs = dabs(error_dot_2) - # Perform summation - for i in range(y_size): - error_norm5_abs = dabs(E5_tmp_view[i]) - error_norm3_abs = dabs(E3_tmp_view[i]) - - error_norm5 += (error_norm5_abs * error_norm5_abs) error_norm3 += (error_norm3_abs * error_norm3_abs) + error_norm5 += (error_norm5_abs * error_norm5_abs) # Check if errors are zero if (error_norm5 == 0.) and (error_norm3 == 0.): @@ -719,20 +702,18 @@ def cyrk_ode( else: # Calculate Error for RK23 and RK45 - error_norm = 0. # Dot Product (K, E) * step / scale - + error_norm = 0. for i in range(y_size): - for j in range(rk_n_stages_plus1): if j == 0: # Initialize - E_tmp_view[i] = 0. + error_dot_1 = 0. K_scale = K_view[j, i] / scale_view[i] - E_tmp_view[i] = E_tmp_view[i] + (K_scale * E_view[j] * step) + error_dot_1 += K_scale * E_view[j] * step - error_norm_abs = dabs(E_tmp_view[i]) + error_norm_abs = dabs(error_dot_1) error_norm += (error_norm_abs * error_norm_abs) error_norm = sqrt(error_norm) / y_size_sqrt diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 1b80e75..c4475e6 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -260,9 +260,6 @@ cdef class CySolver: self.E_view = E self.E3_view = E3 self.E5_view = E5 - self.E_tmp_view = E_tmp - self.E3_tmp_view = E3_tmp - self.E5_tmp_view = E5_tmp self.K_view = K # Populate values based on externally defined constants. @@ -478,18 +475,15 @@ cdef class CySolver: cdef double t_delta_check # Avoid method lookups for variables in tight loops - cdef double[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view, C_view + cdef double[:] B_view, E_view, E3_view, E5_view, C_view cdef double[:, :] A_view, K_view - cdef double A_at_sj, B_at_j, E_at_j, E5_at_j, E3_at_j + cdef double A_at_sj, B_at_j, error_dot_1, error_dot_2 A_view = self.A_view B_view = self.B_view C_view = self.C_view E_view = self.E_view E3_view = self.E3_view E5_view = self.E5_view - E_tmp_view = self.E_tmp_view - E3_tmp_view = self.E3_tmp_view - E5_tmp_view = self.E5_tmp_view K_view = self.K_view # Setup storage arrays @@ -660,32 +654,25 @@ cdef class CySolver: # Check how well this step performed by calculating its error if self.rk_method == 2: # Calculate Error for DOP853 - # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale - for j in range(self.rk_n_stages_plus1): - E5_at_j = E5_view[j] - E3_at_j = E3_view[j] - for i in range(self.y_size): + error_norm3 = 0. + error_norm5 = 0. + for i in range(self.y_size): + for j in range(self.rk_n_stages_plus1): if j == 0: # Initialize - E5_tmp_view[i] = 0. - E3_tmp_view[i] = 0. + error_dot_1 = 0. + error_dot_2 = 0. K_scale = K_view[j, i] / self.scale_view[i] - E5_tmp_view[i] = E5_tmp_view[i] + (K_scale * E5_at_j) - E3_tmp_view[i] = E3_tmp_view[i] + (K_scale * E3_at_j) - - # Find norms for each error - error_norm5 = 0. - error_norm3 = 0. + error_dot_1 += K_scale * E3_view[j] + error_dot_2 += K_scale * E5_view[j] - # Perform summation - for i in range(self.y_size): - error_norm5_abs = fabs(E5_tmp_view[i]) - error_norm3_abs = fabs(E3_tmp_view[i]) + error_norm3_abs = fabs(error_dot_1) + error_norm5_abs = fabs(error_dot_2) - error_norm5 += (error_norm5_abs * error_norm5_abs) error_norm3 += (error_norm3_abs * error_norm3_abs) + error_norm5 += (error_norm5_abs * error_norm5_abs) # Check if errors are zero if (error_norm5 == 0.) and (error_norm3 == 0.): @@ -697,19 +684,17 @@ cdef class CySolver: else: # Calculate Error for RK23 and RK45 # Dot Product (K, E) * step / scale - for j in range(self.rk_n_stages_plus1): - E_at_j = E_view[j] - for i in range(self.y_size): + error_norm = 0. + for i in range(self.y_size): + for j in range(self.rk_n_stages_plus1): if j == 0: # Initialize - E_tmp_view[i] = 0. + error_dot_1 = 0. K_scale = self.K_view[j, i] / self.scale_view[i] - E_tmp_view[i] = E_tmp_view[i] + (K_scale * E_at_j * step) + error_dot_1 += K_scale * E_view[j] * step - error_norm = 0. - for i in range(self.y_size): - error_norm_abs = fabs(E_tmp_view[i]) + error_norm_abs = fabs(error_dot_1) error_norm += (error_norm_abs * error_norm_abs) error_norm = sqrt(error_norm) / self.y_size_sqrt From 0bbd091e344094eb26d2de8e9e03e023cd67077f Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Fri, 25 Aug 2023 15:11:32 -0400 Subject: [PATCH 12/29] fixed issue with one of the tests tolerances --- CyRK/cy/cysolver.pxd | 2 +- CyRK/cy/cysolver.pyx | 36 +++++++++---------- .../test_e_cysolver_change_param.py | 6 ++-- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index d6ecec2..983652b 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -28,7 +28,7 @@ cdef class CySolver: cdef unsigned char rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended cdef double error_expo cdef Py_ssize_t len_C - cdef double[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view, C_view + cdef double[:] B_view, E_view, E3_view, E5_view, C_view cdef double[:, :] A_view, K_view # -- Integration information diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index c4475e6..566bd64 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -254,13 +254,13 @@ cdef class CySolver: K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C') # Setup memory views. - self.A_view = A - self.B_view = B - self.C_view = C - self.E_view = E - self.E3_view = E3 - self.E5_view = E5 - self.K_view = K + self.A_view = A + self.B_view = B + self.C_view = C + self.E_view = E + self.E3_view = E3 + self.E5_view = E5 + self.K_view = K # Populate values based on externally defined constants. if rk_method == 0: @@ -380,11 +380,11 @@ cdef class CySolver: cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C') - solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C') - solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C') - self.solution_t_view = solution_t_fake + solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C') + solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C') + self.solution_t_view = solution_t_fake self.solution_extra_view = solution_extra_fake - self.solution_y_view = solution_y_fake + self.solution_y_view = solution_y_fake # Other flags and messages self.success = False @@ -478,13 +478,13 @@ cdef class CySolver: cdef double[:] B_view, E_view, E3_view, E5_view, C_view cdef double[:, :] A_view, K_view cdef double A_at_sj, B_at_j, error_dot_1, error_dot_2 - A_view = self.A_view - B_view = self.B_view - C_view = self.C_view - E_view = self.E_view - E3_view = self.E3_view - E5_view = self.E5_view - K_view = self.K_view + A_view = self.A_view + B_view = self.B_view + C_view = self.C_view + E_view = self.E_view + E3_view = self.E3_view + E5_view = self.E5_view + K_view = self.K_view # Setup storage arrays # These arrays are built to fit a number of points equal to `self.expected_size` diff --git a/Tests/C_Cython_Tests/test_e_cysolver_change_param.py b/Tests/C_Cython_Tests/test_e_cysolver_change_param.py index 30b8411..11a18cb 100644 --- a/Tests/C_Cython_Tests/test_e_cysolver_change_param.py +++ b/Tests/C_Cython_Tests/test_e_cysolver_change_param.py @@ -22,7 +22,8 @@ def test_CySolverTester_change_param(rk_method, complex_valued): else: initial_conds_to_use = initial_conds - CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, auto_solve=False) + CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, auto_solve=False, + rtol=1.0e-8, atol=1.0e-9) # Solve once CySolverTesterInst.solve() @@ -40,10 +41,9 @@ def test_CySolverTester_change_param(rk_method, complex_valued): solution_2_y = np.copy(CySolverTesterInst.solution_y) assert solution_2_t[0] == 0. assert solution_2_t[-1] == 1. - assert not solution_2_y.shape == solution_1_y.shape # Change several things at once but keep the previous time span the same. - CySolverTesterInst.change_parameters(y0=initial_conds_2, rtol=1.0e-10, atol=1.0e-12) + CySolverTesterInst.change_parameters(rtol=1.0e-11, atol=1.0e-12) CySolverTesterInst.solve() assert CySolverTesterInst.success solution_3_t = np.copy(CySolverTesterInst.solution_t) From 4153bf9a820d850d2941d92a630fa9afb6805035 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Fri, 25 Aug 2023 15:16:01 -0400 Subject: [PATCH 13/29] fixed integer variable --- CyRK/cy/cyrk.pyx | 6 +++--- CyRK/cy/cysolver.pyx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index 42dee2b..0f24bdd 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -240,15 +240,15 @@ def cyrk_ode( # Expected size of output arrays. cdef double temp_expected_size - cdef unsigned int expected_size_to_use, num_concats + cdef Py_ssize_t expected_size_to_use, num_concats if expected_size == 0: # CySolver will attempt to guess on a best size for the arrays. temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol)) temp_expected_size = fmax(temp_expected_size, 100.) temp_expected_size = fmin(temp_expected_size, 10_000_000.) - expected_size_to_use = temp_expected_size + expected_size_to_use = temp_expected_size else: - expected_size_to_use = expected_size + expected_size_to_use = expected_size # This variable tracks how many times the storage arrays have been appended. # It starts at 1 since there is at least one storage array present. num_concats = 1 diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 566bd64..9adbe5b 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -112,7 +112,7 @@ cdef class CySolver: temp_expected_size = fmin(temp_expected_size, 10_000_000.) self.expected_size = temp_expected_size else: - self.expected_size = expected_size + self.expected_size = expected_size # This variable tracks how many times the storage arrays have been appended. # It starts at 1 since there is at least one storage array present. self.num_concats = 1 From 322d2964a8492be9f0df3b78cf42f88feaa23d45 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Fri, 25 Aug 2023 17:00:05 -0400 Subject: [PATCH 14/29] added max_steps argument. improved status codes --- CHANGES.md | 10 +++ CyRK/cy/cyrk.pyx | 87 +++++++++++++++------- CyRK/cy/cysolver.pxd | 10 +-- CyRK/cy/cysolver.pyx | 98 +++++++++++++++++-------- CyRK/nb/nbrk.py | 90 +++++++++++++++-------- Documentation/Status and Error Codes.md | 46 ++++++++++++ README.md | 10 ++- Tests/B_Other_Tests/test_helpers.py | 2 +- Tests/C_Cython_Tests/test_a_cython.py | 83 ++++++++++++++++++++- Tests/D_Numba_Tests/test_a_numba.py | 41 ++++++++++- pyproject.toml | 2 +- 11 files changed, 374 insertions(+), 105 deletions(-) create mode 100644 Documentation/Status and Error Codes.md diff --git a/CHANGES.md b/CHANGES.md index e1a417e..e6e6d3e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,9 +4,19 @@ ### v0.7.0 +New Features +- Added new optional argument to all solvers `max_steps` which allows the user to control how many steps the solver is allowed to take. + - If exceeded the integration with fail (softly). + - Defaults to 95% of `sys.maxsize` (depends on system architecture). + Other Changes +- Refactored `max_step` to `max_step_size` argument for all solvers to avoid confusion with new `max_steps` argument. - Improved documentation for `CySolver`'s `diffeq` method template. - To make more logical sense with the wording, `CySolver.size_growths` now gives one less than the solver's growths attribute. +- Cleaned up status codes and created new status code description document under "Documentation/Status and Error Codes.md" + +Performance +- Various minor performance gains for cython-based solvers. Bug Fixes: - Fixed potential seg fault when accessing `CySolver`'s arg_array_view. diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index 0f24bdd..9446583 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -2,6 +2,7 @@ # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False import cython +import sys import numpy as np cimport numpy as np np.import_array() @@ -27,6 +28,7 @@ cdef double INF = np.inf cdef double EPS = np.finfo(np.float64).eps cdef double EPS_10 = EPS * 10. cdef double EPS_100 = EPS * 100. +cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize) cdef double cabs(double complex value) nogil: @@ -86,14 +88,15 @@ def cyrk_ode( tuple args = None, double rtol = 1.e-6, double atol = 1.e-8, - double max_step = MAX_STEP, + double max_step_size = MAX_STEP, double first_step = 0., unsigned char rk_method = 1, double[:] t_eval = None, bool_cpp_t capture_extra = False, Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, - unsigned int expected_size = 0 + unsigned int expected_size = 0, + unsigned int max_steps = 0 ): """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. @@ -111,7 +114,7 @@ def cyrk_ode( Integration relative tolerance used to determine optimal step size. atol : float = 1.e-8 Integration absolute tolerance used to determine optimal step size. - max_step : float = np.inf + max_step_size : float = np.inf Maximum allowed step size. first_step : float = None Initial step size. If `None`, then the function will attempt to determine an appropriate initial step. @@ -145,6 +148,9 @@ def cyrk_ode( The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve. If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended. It is better to overshoot than undershoot this guess. + max_steps : int = 0 + Maximum number of steps integrator is allowed to take. + If set to 0 (the default) then an infinite number of steps are allowed. Returns ------- @@ -161,6 +167,10 @@ def cyrk_ode( # Setup loop variables cdef Py_ssize_t s, i, j + # Setup integration variables + cdef char status, old_status + cdef str message + # Determine information about the differential equation based on its initial conditions cdef Py_ssize_t y_size cdef double y_size_dbl, y_size_sqrt @@ -178,6 +188,8 @@ def cyrk_ode( y_is_complex = True else: # Cyrk only supports float64 and complex128. + status = -8 + message = "Attribute error." raise Exception('Unexpected type found for initial conditions (y0).') # Build time domain @@ -238,6 +250,18 @@ def cyrk_ode( # # atol must be either the same for all y or must be provided as an array, one for each y. # raise Exception + # Determine maximum number of steps + cdef Py_ssize_t max_steps_touse + cdef bool_cpp_t use_max_steps + if max_steps == 0: + use_max_steps = False + max_steps_touse = 0 + elif max_steps < 0: + raise AttributeError('Negative number of max steps provided.') + else: + use_max_steps = True + max_steps_touse = min(max_steps, MAX_INT_SIZE) + # Expected size of output arrays. cdef double temp_expected_size cdef Py_ssize_t expected_size_to_use, num_concats @@ -366,7 +390,9 @@ def cyrk_ode( rk_n_stages_extended = DOP_n_stages_extended else: - raise Exception( + status = -8 + message = "Attribute error." + raise AttributeError( 'Unexpected rk_method provided. Currently supported versions are:\n' '\t0 = RK23\n' '\t1 = RK34\n' @@ -540,28 +566,27 @@ def cyrk_ode( step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1)) else: if first_step <= 0.: - raise Exception('Error in user-provided step size: Step size must be a positive number.') + status = -8 + message = "Attribute error." + raise AttributeError('Error in user-provided step size: Step size must be a positive number.') elif first_step > t_delta_abs: - raise Exception('Error in user-provided step size: Step size can not exceed bounds.') + status = -8 + message = "Attribute error." + raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') step_size = first_step # # Main integration loop cdef double min_step, step_factor, step cdef double c cdef double_numeric K_scale - # Integrator Status Codes - # 0 = Running - # -1 = Failed - # 1 = Finished with no obvious issues - cdef char status - cdef str message cdef Py_ssize_t len_t status = 0 + message = "Integration is/was ongoing (perhaps it was interrupted?)." len_t = 1 # There is an initial condition provided so the time length is already 1 if y_size == 0: status = -6 - message = 'Integration never started: y-size is zero.' + message = "Integration never started: y-size is zero." while status == 0: if t_new == t_end: @@ -569,13 +594,24 @@ def cyrk_ode( status = 1 break + if use_max_steps: + if len_t > max_steps_touse: + status = -2 + message = "Maximum number of steps (set by user) exceeded during integration." + break + else: + if len_t > MAX_INT_SIZE: + status = -3 + message = "Maximum number of steps (set by system architecture) exceeded during integration." + break + # Run RK integration step # Determine step size based on previous loop # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old) # Look for over/undershoots in previous step size - if step_size > max_step: - step_size = max_step + if step_size > max_step_size: + step_size = max_step_size elif step_size < min_step: step_size = min_step @@ -737,13 +773,15 @@ def cyrk_ode( step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow) step_rejected = True - if not step_accepted: + if step_error: # Issue with step convergence - status = -2 + status = -1 + message = "Error in step size calculation:\n\tRequired step size is less than spacing between numbers." break - elif step_error: + elif not step_accepted: # Issue with step convergence - status = -1 + status = -7 + message = "Error in step size calculation:\n\tError in step size acceptance." break # End of step loop. Update the _now variables @@ -791,15 +829,9 @@ def cyrk_ode( len_t += 1 # # Clean up output. - message = 'Not Defined.' if status == 1: success = True - message = 'Integration finished with no issue.' - elif status == -1: - message = 'Error in step size calculation: Required step size is less than spacing between numbers.' - elif status < -1: - message = 'Integration Failed.' - + message = "Integration completed without issue." # Create output arrays. To match the format that scipy follows, we will take the transpose of y. if success: @@ -831,6 +863,8 @@ def cyrk_ode( cdef double_numeric[:] y_result_timeslice_view, y_result_temp_view if run_interpolation and success: + old_status = status + status = 2 # User only wants data at specific points. # The current version of this function has not implemented sicpy's dense output. @@ -930,5 +964,6 @@ def cyrk_ode( for j in range(total_size): # To match the format that scipy follows, we will take the transpose of y. solution_y_view[j, i] = y_results_reduced_view[j, i] + status = old_status return solution_t, solution_y, success, message diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index 983652b..2a03426 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -38,10 +38,10 @@ cdef class CySolver: cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf cdef bool_cpp_t direction_flag cdef double rtol, atol - cdef double step_size, max_step + cdef double step_size, max_step_size cdef double first_step - cdef Py_ssize_t expected_size - cdef unsigned int num_concats + cdef Py_ssize_t expected_size, num_concats, max_steps + cdef bool_cpp_t use_max_steps cdef double[:] scale_view cdef bool_cpp_t recalc_firststep @@ -74,9 +74,9 @@ cdef class CySolver: cpdef void change_y0(self, const double[:] y0, bool_cpp_t auto_reset_state = *) cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = *) cpdef void change_tols(self, double rtol = *, double atol = *, bool_cpp_t auto_reset_state = *) - cpdef void change_max_step(self, double max_step, bool_cpp_t auto_reset_state = *) + cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = *) cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = *) cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = *) cpdef void change_parameters(self, (double, double) t_span = *, const double[:] y0 = *, tuple args = *, - double rtol = *, double atol = *, double max_step = *, double first_step = *, + double rtol = *, double atol = *, double max_step_size = *, double first_step = *, const double[:] t_eval = *, bool_cpp_t auto_reset_state = *, bool_cpp_t auto_solve = *) diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 9adbe5b..a613e7d 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -2,6 +2,7 @@ # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False import cython +import sys import numpy as np cimport numpy as np np.import_array() @@ -27,6 +28,7 @@ cdef double INF = np.inf cdef double EPS = np.finfo(np.float64).eps cdef double EPS_10 = EPS * 10. cdef double EPS_100 = EPS * 100. +cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize) cdef (double, double) EMPTY_T_SPAN = (NAN, NAN) @@ -40,7 +42,7 @@ cdef class CySolver: tuple args = None, double rtol = 1.e-6, double atol = 1.e-8, - double max_step = MAX_STEP, + double max_step_size = MAX_STEP, double first_step = 0., unsigned char rk_method = 1, const double[:] t_eval = None, @@ -48,13 +50,14 @@ cdef class CySolver: Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, unsigned int expected_size = 0, + unsigned int max_steps = 0, bool_cpp_t auto_solve = True): # Setup loop variables cdef Py_ssize_t i, j # Set integration information - self.status = -3 # Status code to indicate that integration has not started. + self.status = -4 # Status code to indicate that integration has not started. self.message = 'Integration has not started.' self.success = False self.recalc_firststep = False @@ -103,6 +106,18 @@ cdef class CySolver: # # atol must be either the same for all y or must be provided as an array, one for each y. # raise Exception + # Determine maximum number of steps + if max_steps == 0: + self.use_max_steps = False + self.max_steps = 0 + elif max_steps < 0: + self.status = -8 + self.message = "Attribute error." + raise AttributeError('Negative number of max steps provided.') + else: + self.use_max_steps = True + self.max_steps = min(max_steps, MAX_INT_SIZE) + # Expected size of output arrays. cdef double temp_expected_size if expected_size == 0: @@ -228,6 +243,8 @@ cdef class CySolver: self.rk_n_stages_extended = DOP_n_stages_extended else: + self.status = -8 + self.message = "Attribute error." raise AttributeError( 'Unexpected rk_method provided. Currently supported versions are:\n' '\t0 = RK23\n' @@ -326,11 +343,15 @@ cdef class CySolver: self.step_size = self.calc_first_step() else: if self.first_step <= 0.: + self.status = -8 + self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size must be a positive number.') elif self.first_step > self.t_delta_abs: + self.status = -8 + self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') self.step_size = self.first_step - self.max_step = max_step + self.max_step_size = max_step_size # Run solver if requested if auto_solve: @@ -368,8 +389,12 @@ cdef class CySolver: self.step_size = self.calc_first_step() else: if self.first_step <= 0.: + self.status = -8 + self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size must be a positive number.') elif self.first_step > self.t_delta_abs: + self.status = -8 + self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') self.step_size = self.first_step @@ -535,34 +560,40 @@ cdef class CySolver: cdef double min_step, step_factor, step, time_tmp cdef double c cdef double K_scale - # Integrator Status Codes - # 0 = Running - # -1 = Failed (step size too small) - # -2 = Failed (step size failed to converge) - # -3 = Integration has not started yet. - # 1 = Finished with no obvious issues - self.message = 'Integrator is running.' + self.message = "Integration is/was ongoing (perhaps it was interrupted?)." self.status = 0 # There is an initial condition provided so the time length is already 1 self.len_t = 1 if self.y_size == 0: self.status = -6 - self.message = 'Integration never started: y-size is zero.' + self.message = "Integration never started: y-size is zero." while self.status == 0: if self.t_new == self.t_end: self.t_old = self.t_end self.status = 1 + self.message = "Integration completed without issue." break + if self.use_max_steps: + if self.len_t > self.max_steps: + self.status = -2 + self.message = "Maximum number of steps (set by user) exceeded during integration." + break + else: + if self.len_t > MAX_INT_SIZE: + self.status = -3 + self.message = "Maximum number of steps (set by system architecture) exceeded during integration." + break + # Run RK integration step # Determine step size based on previous loop # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old) # Look for over/undershoots in previous step size - if self.step_size > self.max_step: - self.step_size = self.max_step + if self.step_size > self.max_step_size: + self.step_size = self.max_step_size elif self.step_size < min_step: self.step_size = min_step @@ -721,10 +752,12 @@ cdef class CySolver: if step_error: # Issue with step convergence self.status = -1 + self.message = "Error in step size calculation:\n\tRequired step size is less than spacing between numbers." break elif not step_accepted: # Issue with step convergence - self.status = -2 + self.status = -7 + self.message = "Error in step size calculation:\n\tError in step size acceptance." break # End of step loop. Update the _now variables @@ -781,20 +814,11 @@ cdef class CySolver: self.len_t += 1 # # Clean up output. - self.message = 'Integration completed.' if self.status == 1: self.success = True - self.message = 'Integration finished with no issue.' - elif self.status == -1: - self.message = 'Integration Failed: Error in step size calculation: Required step size is less than spacing between numbers.' - elif self.status == -2: - # Don't think this should ever come up. - self.message = 'Integration Failed: Other issue with step size.' - elif self.status == -3: - # Don't think this should ever come up. - self.message = 'Integration never started.' - elif self.status < -3: - self.message = 'Integration Failed.' + self.message = "Integration completed without issue." + else: + self.success = False # Create output arrays. To match the format that scipy follows, we will take the transpose of y. cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_out_array, y_results_out_array_bad @@ -848,6 +872,9 @@ cdef class CySolver: cdef void interpolate(self): """ Interpolate the results of a successful integration over the user provided time domain, `t_eval`.""" # User only wants data at specific points. + cdef char old_status + old_status = self.status + self.status = 2 # Setup loop variables cdef Py_ssize_t i, j @@ -946,6 +973,8 @@ cdef class CySolver: if self.capture_extra: self.solution_extra_view = extra_reduced_view + self.status = old_status + cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = False): @@ -977,7 +1006,8 @@ cdef class CySolver: if self.y_size != y_size_new: # So many things need to update if ysize changes that the user might as well just # create a new class instance. - self.status = -6 # Bad update status + self.status = -8 + self.message = "Attribute error." raise AttributeError('New y0 must be the same size as the original y0 used to create CySolver class.' 'Create new CySolver instance instead.') @@ -1032,9 +1062,9 @@ cdef class CySolver: self.reset_state() - cpdef void change_max_step(self, double max_step, bool_cpp_t auto_reset_state = False): + cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = False): - self.max_step = max_step + self.max_step_size = max_step_size if auto_reset_state: self.reset_state() @@ -1047,8 +1077,12 @@ cdef class CySolver: self.step_size = self.calc_first_step() else: if self.first_step <= 0.: + self.status = -8 + self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size must be a positive number.') elif self.first_step > self.t_delta_abs: + self.status = -8 + self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') self.step_size = self.first_step @@ -1083,7 +1117,7 @@ cdef class CySolver: tuple args = None, double rtol = NAN, double atol = NAN, - double max_step = NAN, + double max_step_size = NAN, double first_step = NAN, const double[:] t_eval = None, bool_cpp_t auto_reset_state = True, @@ -1105,8 +1139,8 @@ cdef class CySolver: elif not isnan(atol): self.change_tols(atol=atol, auto_reset_state=False) - if not isnan(max_step): - self.change_max_step(max_step, auto_reset_state=False) + if not isnan(max_step_size): + self.change_max_step_size(max_step_size, auto_reset_state=False) if not isnan(first_step): self.change_first_step(first_step, auto_reset_state=False) diff --git a/CyRK/nb/nbrk.py b/CyRK/nb/nbrk.py index c52b44d..d9bb7f0 100644 --- a/CyRK/nb/nbrk.py +++ b/CyRK/nb/nbrk.py @@ -87,9 +87,9 @@ def _norm(x): def nbrk_ode( diffeq: callable, t_span: Tuple[float, float], y0: np.ndarray, args: tuple = tuple(), rtol: float = 1.e-6, atol: float = 1.e-8, - max_step: float = np.inf, first_step: float = None, + max_step_size: float = np.inf, first_step: float = None, rk_method: int = 1, t_eval: np.ndarray = EMPTY_ARR, - capture_extra: bool = False, interpolate_extra: bool = False + capture_extra: bool = False, interpolate_extra: bool = False, max_steps: int = 0 ): """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. @@ -107,7 +107,7 @@ def nbrk_ode( Integration relative tolerance used to determine optimal step size. atol : float = 1.e-8 Integration absolute tolerance used to determine optimal step size. - max_step : float = np.inf + max_step_size : float = np.inf Maximum allowed step size. first_step : float = None Initial step size. If `None`, then the function will attempt to determine an appropriate initial step. @@ -125,6 +125,9 @@ def nbrk_ode( interpolate_extra : bool = False If True, then extra output will be interpolated (along with y) at t_eval. Otherwise, y will be interpolated and then differential equation will be called to find the output at each t in t_eval. + max_steps : int = 0 + Maximum number of steps integrator is allowed to take. + If set to 0 (the default) then an infinite number of steps are allowed. References ---------- @@ -212,10 +215,8 @@ def nbrk_ode( y_result_list = [np.copy(y0_to_store)] # Integrator Status Codes - # 0 = Running - # -1 = Failed - # 1 = Finished with no obvious issues status = 0 + message = "Integration is/was ongoing (perhaps it was interrupted?)." # Determine RK constants if rk_method == 0: @@ -276,7 +277,9 @@ def nbrk_ode( K_extended = np.empty((N_STAGES_EXTENDED_DOP, y_size), dtype=dtype) K = np.ascontiguousarray(K_extended[:rk_n_stages_plus1, :]) else: - raise Exception( + status = -8 + message = "Attribute error." + raise AttributeError( 'Unexpected rk_method provided. Currently supported versions are:\n' '\t0 = RK23\n' '\t1 = RK34\n' @@ -297,6 +300,14 @@ def nbrk_ode( # atol must be either the same for all y or must be provided as an array, one for each y. raise Exception + # Determine maximum number of steps + if max_steps == 0: + use_max_steps = False + elif max_steps < 0: + raise AttributeError('Negative number of max steps provided.') + else: + use_max_steps = True + # Initialize variables for start of integration t_old = t_start t_new = t_start @@ -322,13 +333,15 @@ def nbrk_ode( # Find first step size first_step_found = False if first_step is not None: - step_size = max_step - if first_step < 0.: - # Step size must be a positive number - raise Exception + step_size = max_step_size + if first_step <= 0.: + status = -8 + message = "Attribute error." + raise AttributeError('Error in user-provided step size: Step size must be a positive number.') elif first_step > np.abs(t_end - t_start): - # Step size can not exceed bounds - raise Exception + status = -8 + message = "Attribute error." + raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') elif first_step != 0.: step_size = first_step first_step_found = True @@ -384,15 +397,26 @@ def nbrk_ode( step_size = max(next_after, min(100. * h0, h1)) # Main integration loop + if y_size == 0: + status = -6 + message = "Integration never started: y-size is zero." + # # Time Loop + len_t = 0 while status == 0: - if t_new == t_end or y_size == 0: + if t_new == t_end: t_old = t_end t_new = t_end status = 1 break + if use_max_steps: + if len_t > max_steps: + status = -7 + message = "Maximum number of steps (set by user) exceeded during integration." + break + # Run RK integration step # Determine step size based on previous loop # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) @@ -400,8 +424,8 @@ def nbrk_ode( min_step = next_after # Look for over/undershoots in previous step size - if step_size > max_step: - step_size = max_step + if step_size > max_step_size: + step_size = max_step_size elif step_size < min_step: step_size = min_step @@ -558,9 +582,15 @@ def nbrk_ode( ) step_rejected = True - if not step_accepted or step_error: + if step_error: # Issue with step convergence status = -1 + message = "Error in step size calculation:\n\tRequired step size is less than spacing between numbers." + break + elif not step_accepted: + # Issue with step convergence + status = -7 + message = "Error in step size calculation:\n\tError in step size acceptance." break # End of step loop. Update the _now variables @@ -582,19 +612,25 @@ def nbrk_ode( time_domain_list.append(t_new) y_result_list.append(np.copy(y_result_store)) - - t_size = len(time_domain_list) + len_t += 1 # To match the format that scipy follows, we will take the transpose of y. - time_domain = np.empty(t_size, dtype=np.float64) - y_results = np.empty((store_loop_size, t_size), dtype=dtype) - for t_i in range(t_size): + time_domain = np.empty(len_t, dtype=np.float64) + y_results = np.empty((store_loop_size, len_t), dtype=dtype) + for t_i in range(len_t): time_domain[t_i] = time_domain_list[t_i] y_results_list_at_t = y_result_list[t_i] for y_i in range(store_loop_size): y_results[y_i, t_i] = y_results_list_at_t[y_i] + success = False + if status == 1: + success = True + message = "Integration completed without issue." + if t_eval_size > 0: + old_status = status + status = 2 # User only wants data at specific points. # The current version of this function has not implemented sicpy's dense output, so we must use an interpolation. t_eval = np.asarray(t_eval, dtype=np.float64) @@ -627,15 +663,7 @@ def nbrk_ode( y_results = y_results_reduced time_domain = t_eval - success = status == 1 - if status == 1: - message = 'Integration finished.' - elif status == 0: - message = 'Integration interrupted.' - elif status == -1: - message = 'Error in step size calculation:\n\tRequired step size is less than spacing between numbers.' - else: - message = 'An unknown integration error occurred.' + status = old_status return time_domain, y_results, success, message diff --git a/Documentation/Status and Error Codes.md b/Documentation/Status and Error Codes.md new file mode 100644 index 0000000..86ecb20 --- /dev/null +++ b/Documentation/Status and Error Codes.md @@ -0,0 +1,46 @@ +# Error and Status Codes + +All of the solvers have an internal status code that is updated as integration is performed. With the exception of the +CySolver class, this code is not generally accessible to the user unless in debug mode. For the CySolver class, you can +access the code via "CySolverInstance.status". + +However, the status will determine what message is produced for each solver. +The currently implemented codes, and their respective messages, are listed below along with some troubleshooting suggestions. + +## Status Codes and Messages + +- 2: _No Message_ + - This is a status code use for the CySolver indicating that some process, other than integration, is currently being performed. E.g., Interpolation. +- 1: "Integration completed without issue." + - No obvious issues were encountered. There may still be a problem with the solution but it did not cause a problem during integration. +- 0: "Integration is/was ongoing (perhaps it was interrupted?)." + - This indicates that integration was on-going but was interrupted before completion. +It is unlikely to see this code unless in debug mode or if the integration was interrupted externally. +- -1: "Error in step size calculation:\n\tRequired step size is less than spacing between numbers." + - Step sizes are calculated based on local error in the differential equation. This code indicates that the required +step size to ensure a small solution error is smaller than machine precision. This likely results from a bad set of +initial conditions / optional arguments. And/or that the problem is stiff and not well suited to the selected integration method. +- -2: "Maximum number of steps (set by user) exceeded during integration." + - The number of steps required during integration exceeded the user set `max_steps` argument. +- -3: "Maximum number of steps (set by system architecture) exceeded during integration." + - The number of steps required during integration exceeded the maximum number allowed by system architecture (set by 95% of sys.maxsize). +- -4: "Integration has not started." + - This code is only applicable to the CySolver class. It indicates that a solver instance has been created but the solve() method has not been called. +- -5: "CySolver has been reset." + - This code is only applicable to the CySolver class. It indicates that a solver instance's reset_state() method has been called but the solve() method has not. +- -6: "Integration never started: y-size is zero." + - This code indicates that y0 was an empty, size 0, array. There is nothing to integrate. +- -7: "Error in step size calculation:\n\tError in step size acceptance." + - This is not likely to arise. It comes from a step size that had a problem during calculation but was still accepted. +- -8: "Attribute error." + - This error indicates that there is a problem with one or more user provided attributes. + if status == 1: + message = 'Integration finished.' + elif status == 0: + message = 'Integration interrupted.' + elif status == -1: + message = 'Error in step size calculation:\n\tRequired step size is less than spacing between numbers.' + elif status == -2: + message = 'Maximum number of steps exceeded during integration.' + else: + message = 'An unknown integration error occurred.' \ No newline at end of file diff --git a/README.md b/README.md index 66d663b..9ab721c 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ --- -CyRK Version 0.6.2 Alpha +CyRK Version 0.7.0 Alpha **Runge-Kutta ODE Integrator Implemented in Cython and Numba** @@ -51,13 +51,14 @@ test_cysolver() # Should see "CyRK's CySolver was tested successfully." ``` -### Installation Troubleshooting +### Troubleshooting Installation and Runtime Problems *Please [report](https://github.com/jrenaud90/CyRK/issues) installation issues. We will work on a fix and/or add workaround information here.* - If you see a "Can not load module: CyRK.cy" or similar error then the cython extensions likely did not compile during installation. Try running `pip install CyRK --no-binary="CyRK"` to force python to recompile the cython extensions locally (rather than via a prebuilt wheel). - On MacOS: If you run into problems installing CyRK then reinstall using the verbose flag (`pip install -v .`) to look at the installation log. If you see an error that looks like "clang: error: unsupported option '-fopenmp'" then you may have a problem with your `llvm` or `libomp` libraries. It is recommended that you install CyRK in an [Anaconda](https://www.anaconda.com/download) environment with the following packages `conda install numpy scipy cython llvm-openmp`. See more discussion [here](https://github.com/facebookresearch/xformers/issues/157) and the steps taken [here](https://github.com/jrenaud90/CyRK/blob/main/.github/workflows/push_tests_mac.yml). +- CyRK has a number of runtime status codes which can be used to help determine what failed during integration. Learn more about these codes [https://github.com/jrenaud90/CyRK/blob/main/Documentation/Status%20and%20Error%20Codes.md](here). ### Development and Testing Dependencies @@ -197,7 +198,7 @@ MyCyRKDiffeqInst.solution_extra # Extra output that was captured during integra All three integrators can take the following optional inputs: - `rtol`: Relative Tolerance (default is 1.0e-6). - `atol`: Absolute Tolerance (default is 1.0e-8). -- `max_step`: Maximum step size (default is +infinity). +- `max_step_size`: Maximum step size (default is +infinity). - `first_step`: Initial step size (default is 0). - If 0, then the solver will try to determine an ideal value. - `args`: Python tuple of additional arguments passed to the `diffeq`. @@ -209,7 +210,8 @@ All three integrators can take the following optional inputs: - `1` - "RK45" Explicit Runge-Kutta method of order 5(4). - `2` - "DOP853" Explicit Runge-Kutta method of order 8. - `capture_extra` and `interpolate_extra`: CyRK has the capability of capturing additional parameters during integration. Please see `Documentation\Extra Output.md` for more details. - +- `max_steps`: Maximum number of steps the solver is allowed to use. Defaults to system architecture's max size for ints. +- ### Additional Arguments for `cyrk_ode` and `CySolver` - `num_extra` : The number of extra outputs the integrator should expect. - Please see `Documentation\Extra Output.md` for more details. diff --git a/Tests/B_Other_Tests/test_helpers.py b/Tests/B_Other_Tests/test_helpers.py index c2df180..b8661b6 100644 --- a/Tests/B_Other_Tests/test_helpers.py +++ b/Tests/B_Other_Tests/test_helpers.py @@ -48,7 +48,6 @@ def test_nb2cy_noargs(): # First calculate the result of an integration using nbrk. time_domain_nb, y_results_nb, success_nb, message_nb = \ nbrk_ode(diffeq_scipy, time_span, initial_conds, t_eval=t_eval) - print(message_nb) assert success_nb # Perform a cyrk integration using the diffeq that was written for cyrk @@ -72,6 +71,7 @@ def test_nb2cy_noargs(): assert np.all(p_diff_2_cy < check_rtol) # # Converted vs. nbrk + breakpoint() p_diff_1_nb = 2. * np.abs((y_results_cy_conv[0] - y_results_nb[0]) / (y_results_cy_conv[0] + y_results_nb[0])) p_diff_2_nb = 2. * np.abs((y_results_cy_conv[1] - y_results_nb[1]) / (y_results_cy_conv[1] + y_results_nb[1])) assert np.all(p_diff_1_nb < check_rtol) diff --git a/Tests/C_Cython_Tests/test_a_cython.py b/Tests/C_Cython_Tests/test_a_cython.py index a3c0841..e66ae33 100644 --- a/Tests/C_Cython_Tests/test_a_cython.py +++ b/Tests/C_Cython_Tests/test_a_cython.py @@ -158,7 +158,7 @@ def test_different_tols_CySolverTester(rk_method, complex_valued): @pytest.mark.parametrize('complex_valued', (True, False)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_max_step(rk_method, complex_valued): +def test_max_step_size(rk_method, complex_valued): """Check that the cython function solver is able to run with different maximum step size""" if complex_valued: @@ -167,7 +167,7 @@ def test_max_step(rk_method, complex_valued): initial_conds_to_use = initial_conds time_domain, y_results, success, message = \ - cyrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step=time_span[1] / 2.) + cyrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step_size=time_span[1] / 2.) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -188,7 +188,7 @@ def test_max_step(rk_method, complex_valued): @pytest.mark.parametrize('complex_valued', (False,)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_max_step_CySolverTester(rk_method, complex_valued): +def test_max_step_size_CySolverTester(rk_method, complex_valued): """Check that the cython class solver is able to run with different maximum step size""" if complex_valued: @@ -196,7 +196,7 @@ def test_max_step_CySolverTester(rk_method, complex_valued): else: initial_conds_to_use = initial_conds - CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, max_step=time_span[1] / 2., auto_solve=True) + CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, max_step_size=time_span[1] / 2., auto_solve=True) # Check that the ndarrays make sense assert type(CySolverTesterInst.solution_t) == np.ndarray @@ -548,3 +548,78 @@ def correct_answer(t, c1_, c2_): # ax.plot(CySolverAccuracyTestInst.solution_t, real_answer[0], 'b', label='Analytic') # ax.plot(CySolverAccuracyTestInst.solution_t, real_answer[1], 'b:') # plt.show() + +@pytest.mark.parametrize('complex_valued', (True, False)) +@pytest.mark.parametrize('rk_method', (0, 1, 2)) +def test_maxsteps(rk_method, complex_valued): + """Check that the cython function cyrk_ode can use max_steps argument """ + + if complex_valued: + initial_conds_to_use = initial_conds_complex + else: + initial_conds_to_use = initial_conds + + # First test a number of max steps which is fine. + time_domain, y_results, success, message = \ + cyrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=1000000) + + # Check that the ndarrays make sense + assert type(time_domain) == np.ndarray + assert time_domain.dtype == np.float64 + if complex_valued: + assert y_results.dtype == np.complex128 + else: + assert y_results.dtype == np.float64 + assert time_domain.size > 1 + assert time_domain.size == y_results[0].size + assert len(y_results.shape) == 2 + assert y_results[0].size == y_results[1].size + + # Check that the other output makes sense + assert type(success) == bool + assert success + assert type(message) == str + + # Now test an insufficient number of steps + time_domain, y_results, success, message = \ + cyrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=4) + + assert not success + assert message == "Maximum number of steps (set by user) exceeded during integration." + +@pytest.mark.parametrize('complex_valued', (False,)) +@pytest.mark.parametrize('rk_method', (0, 1, 2)) +def test_maxsteps_CySolverTester(rk_method, complex_valued): + """Check that the cython class solver is able to run using the DOP853 method. Using a larger ending time value """ + + if complex_valued: + initial_conds_to_use = initial_conds_complex + else: + initial_conds_to_use = initial_conds + + # First test a number of max steps which is fine. + CySolverTesterInst = CySolverTester(time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_steps=1000000) + + # Check that the ndarrays make sense + assert type(CySolverTesterInst.solution_t) == np.ndarray + assert CySolverTesterInst.solution_t.dtype == np.float64 + if complex_valued: + assert CySolverTesterInst.solution_y.dtype == np.complex128 + else: + assert CySolverTesterInst.solution_y.dtype == np.float64 + assert CySolverTesterInst.solution_t.size > 1 + assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size + assert len(CySolverTesterInst.solution_y.shape) == 2 + assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + + # Check that the other output makes sense + assert type(CySolverTesterInst.success) == bool + assert CySolverTesterInst.success + assert type(CySolverTesterInst.message) == str + + # Now test an insufficient number of steps + CySolverTesterInst = CySolverTester( + time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_steps=4) + + assert not CySolverTesterInst.success + assert CySolverTesterInst.status == -2 \ No newline at end of file diff --git a/Tests/D_Numba_Tests/test_a_numba.py b/Tests/D_Numba_Tests/test_a_numba.py index 690e63f..1b25114 100644 --- a/Tests/D_Numba_Tests/test_a_numba.py +++ b/Tests/D_Numba_Tests/test_a_numba.py @@ -107,7 +107,7 @@ def test_max_step(rk_method, complex_valued): initial_conds_to_use = initial_conds time_domain, y_results, success, message = \ - nbrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step=time_span[1] / 2.) + nbrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step_size=time_span[1] / 2.) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -301,3 +301,42 @@ def correct_answer(t, c1_, c2_): # ax.plot(time_domain, real_answer[0], 'b', label='Analytic') # ax.plot(time_domain, real_answer[1], 'b:') # plt.show() + +@pytest.mark.parametrize('complex_valued', (True, False)) +@pytest.mark.parametrize('rk_method', (0, 1, 2)) +def test_max_steps(rk_method, complex_valued): + """Check that the numba solver is able to utilize the max_steps argument """ + + if complex_valued: + initial_conds_to_use = initial_conds_complex + else: + initial_conds_to_use = initial_conds + + # First test a number of max steps which is fine. + time_domain, y_results, success, message = \ + nbrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=1000000) + + # Check that the ndarrays make sense + assert type(time_domain) == np.ndarray + assert time_domain.dtype == np.float64 + if complex_valued: + assert y_results.dtype == np.complex128 + else: + assert y_results.dtype == np.float64 + assert time_domain.size > 1 + assert time_domain.size == y_results[0].size + assert len(y_results.shape) == 2 + assert y_results[0].size == y_results[1].size + + # Check that the other output makes sense + assert type(success) == bool + assert success + assert type(message) == str + + # Now test an insufficient number of steps + time_domain, y_results, success, message = \ + nbrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=4) + + # Check that the ndarrays make sense + assert not success + assert message == "Maximum number of steps (set by user) exceeded during integration." diff --git a/pyproject.toml b/pyproject.toml index 03599ea..b7baf61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0dev1' +version = '0.7.0dev2' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 5017f677cb2bae33304bef237d2c5375c1ef5538 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Fri, 25 Aug 2023 17:15:19 -0400 Subject: [PATCH 15/29] fixed bug in nbrk that was introduced in previous commits --- CyRK/nb/nbrk.py | 4 ++-- Tests/B_Other_Tests/test_helpers.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CyRK/nb/nbrk.py b/CyRK/nb/nbrk.py index d9bb7f0..323127d 100644 --- a/CyRK/nb/nbrk.py +++ b/CyRK/nb/nbrk.py @@ -334,7 +334,7 @@ def nbrk_ode( first_step_found = False if first_step is not None: step_size = max_step_size - if first_step <= 0.: + if first_step < 0.: status = -8 message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size must be a positive number.') @@ -402,7 +402,7 @@ def nbrk_ode( message = "Integration never started: y-size is zero." # # Time Loop - len_t = 0 + len_t = 1 # Already one time step due to initial conditions. while status == 0: if t_new == t_end: diff --git a/Tests/B_Other_Tests/test_helpers.py b/Tests/B_Other_Tests/test_helpers.py index b8661b6..37687b0 100644 --- a/Tests/B_Other_Tests/test_helpers.py +++ b/Tests/B_Other_Tests/test_helpers.py @@ -71,7 +71,6 @@ def test_nb2cy_noargs(): assert np.all(p_diff_2_cy < check_rtol) # # Converted vs. nbrk - breakpoint() p_diff_1_nb = 2. * np.abs((y_results_cy_conv[0] - y_results_nb[0]) / (y_results_cy_conv[0] + y_results_nb[0])) p_diff_2_nb = 2. * np.abs((y_results_cy_conv[1] - y_results_nb[1]) / (y_results_cy_conv[1] + y_results_nb[1])) assert np.all(p_diff_1_nb < check_rtol) From 87a1d05fe610ae8920a8a6870e46d69af5fb4ecd Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Fri, 25 Aug 2023 23:17:10 -0400 Subject: [PATCH 16/29] fixed numpy api build issue --- CHANGES.md | 1 + CyRK/cy/cyrk.pyx | 20 +- Tests/Cython Class Experiments.ipynb | 21409 ++++++++++++++----------- _build_cyrk.py | 7 + pyproject.toml | 4 +- setup.py | 6 + 6 files changed, 12392 insertions(+), 9055 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e6e6d3e..15c3170 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ Other Changes - Improved documentation for `CySolver`'s `diffeq` method template. - To make more logical sense with the wording, `CySolver.size_growths` now gives one less than the solver's growths attribute. - Cleaned up status codes and created new status code description document under "Documentation/Status and Error Codes.md" +- Fixed compile warning related to NPY_NO_DEPRECATED_API. Performance - Various minor performance gains for cython-based solvers. diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index 9446583..73ce8b3 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -6,6 +6,7 @@ import sys import numpy as np cimport numpy as np np.import_array() + from libcpp cimport bool as bool_cpp_t from libc.math cimport sqrt, fabs, nextafter, fmax, fmin @@ -495,6 +496,7 @@ def cyrk_ode( cdef np.ndarray[np.float64_t, ndim=1, mode='c'] scale_arr cdef double[:] scale_view + cdef double scale scale_arr = np.empty(y_size, dtype=np.float64, order='C') scale_view = scale_arr @@ -520,10 +522,10 @@ def cyrk_ode( d0 = 0. d1 = 0. for i in range(y_size): - scale_view[i] = atol + dabs(y_old_view[i]) * rtol + scale = atol + dabs(y_old_view[i]) * rtol - d0_abs = dabs(y_old_view[i] / scale_view[i]) - d1_abs = dabs(dydt_old_view[i] / scale_view[i]) + d0_abs = dabs(y_old_view[i] / scale) + d1_abs = dabs(dydt_old_view[i] / scale) d0 += (d0_abs * d0_abs) d1 += (d1_abs * d1_abs) @@ -552,8 +554,8 @@ def cyrk_ode( d2 = 0. for i in range(y_size): dydt_new_view[i] = diffeq_out_view[i] - scale_view[i] = atol + dabs(y_old_view[i]) * rtol - d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale_view[i]) + scale = atol + dabs(y_old_view[i]) * rtol + d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale) d2 += (d2_abs * d2_abs) d2 = sqrt(d2) / (h0 * y_size_sqrt) @@ -697,7 +699,7 @@ def cyrk_ode( dydt_new_view[i] = diffeq_out_view[i] # Find scale of y for error calculations - scale_view[i] = atol + max(cabs(y_old_view[i]), cabs(y_new_view[i])) * rtol + scale_view[i] = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol # Set last array of K equal to dydt K_view[rk_n_stages, i] = dydt_new_view[i] @@ -719,7 +721,8 @@ def cyrk_ode( error_dot_1 = 0. error_dot_2 = 0. - K_scale = K_view[j, i] / scale_view[i] + scale = scale_view[i] + K_scale = K_view[j, i] / scale error_dot_1 += K_scale * E3_view[j] error_dot_2 += K_scale * E5_view[j] @@ -746,7 +749,8 @@ def cyrk_ode( # Initialize error_dot_1 = 0. - K_scale = K_view[j, i] / scale_view[i] + scale = scale_view[i] + K_scale = K_view[j, i] / scale error_dot_1 += K_scale * E_view[j] * step error_norm_abs = dabs(error_dot_1) diff --git a/Tests/Cython Class Experiments.ipynb b/Tests/Cython Class Experiments.ipynb index 867db30..c8ac17d 100644 --- a/Tests/Cython Class Experiments.ipynb +++ b/Tests/Cython Class Experiments.ipynb @@ -59,7 +59,7 @@ "output_type": "stream", "text": [ "Working on Cython (function) integration...\n", - "181\n", + "182\n", "Done.\n", "Working on Numba integration...\n", "Done.\n" @@ -88,10 +88,10 @@ "text": [ "Performance\n", "Cython (function)\n", - "1.21 ms ± 75.2 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", + "1.29 ms ± 80 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", "\n", "Numba\n", - "274 µs ± 56.4 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "302 µs ± 54.5 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -100,11 +100,13 @@ "print('Cython (function)')\n", "# v0.5.3: 1.19ms, 1.2ms, 1.2ms\n", "# v0.6.2: 1.02ms, 1.02ms\n", + "\n", "%timeit cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", "\n", "print('\\nNumba')\n", "# v0.5.3: 199us, 201us, 200us\n", "# v0.6.2: 187us, 188us\n", + "\n", "%timeit nbrk_ode(pendulum_nb, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" ] }, @@ -116,7 +118,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -159,10 +161,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, + "id": "a14104ae", + "metadata": {}, + "outputs": [], + "source": [ + "# cython: linetrace=True\n", + "# cython: binding=True\n", + "# distutils: define_macros=CYTHON_TRACE_NOGIL=1" + ] + }, + { + "cell_type": "code", + "execution_count": 21, "id": "988b829a", "metadata": { - "scrolled": true + "scrolled": false }, "outputs": [ { @@ -170,9 +184,12 @@ "output_type": "stream", "text": [ "Content of stdout:\n", - "_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.cpp\r\n", - "C:\\ProgramData\\Anaconda3\\envs\\cytest39\\lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", - " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.cp39-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.cp39-win_amd64.exp\r\n", + "_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cpp\r\n", + "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cpp(20611): warning C4244: '=': conversion from 'long' to 'char', possible loss of data\r\n", + "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cpp(38815): warning C4244: '=': conversion from 'long' to 'unsigned char', possible loss of data\r\n", + "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cpp(38855): warning C4244: '=': conversion from 'long' to 'unsigned char', possible loss of data\r\n", + "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cpp(42609): warning C4551: function call missing argument list\r\n", + " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.cp311-win_amd64.exp\r\n", "Generating code\r\n", "Finished generating code" ] @@ -185,7 +202,7 @@ "\n", "\n", " \n", - " Cython: _cython_magic_fb91430ef808a1381812a6135edfd23343e0346b.pyx\n", + " Cython: _cython_magic_34fcc3fc3c4604e1c4f0774f75195dad5d013a81.pyx\n", " \n", - "\n", - "\n", - "

Generated by Cython 3.0.0

\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", - "

\n", - "
+01: # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False
\n", - "
  __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 02: 
\n", - "
+03: import numpy as np
\n", - "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 3, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 04: cimport numpy as np
\n", - "
+05: np.import_array()
\n", - "
  __pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 5, __pyx_L1_error)\n",
-       "
 06: 
\n", - "
 07: 
\n", - "
+08: cpdef void test_no_t(double[:] arr_in, double[:, :] arr_out):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t(PyObject *__pyx_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(__Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out, CYTHON_UNUSED int __pyx_skip_dispatch) {\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  Py_ssize_t __pyx_v_size_0;\n",
-       "  Py_ssize_t __pyx_v_size_1;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"test_no_t\", 0);\n",
+       "      goto __pyx_L23;\n",
+       "    }\n",
+       "
+351:             y0_to_store_view[i] = y0_plus_extra_view[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
+       "
 352:         else:
\n", + "
+353:             y0_to_store_view[i] = y0[i]
\n", + "
    /*else*/ {\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
+       "    }\n",
+       "    __pyx_L23:;\n",
+       "  }\n",
+       "/* … */\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
+       "    }\n",
+       "    __pyx_L23:;\n",
+       "  }\n",
+       "
 354: 
\n", + "
 355:     # # Determine RK scheme
\n", + "
 356:     cdef unsigned char rk_order, error_order
\n", + "
 357:     cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended
\n", + "
 358:     cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1
\n", + "
 359:     cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom
\n", + "
 360: 
\n", + "
+361:     if rk_method == 0:
\n", + "
  switch (__pyx_v_rk_method) {\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 1:\n",
+       "/* … */\n",
+       "  switch (__pyx_v_rk_method) {\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 1:\n",
+       "
 362:         # RK23 Method
\n", + "
+363:         rk_order    = RK23_order
\n", + "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
+       "
+364:         error_order = RK23_error_order
\n", + "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
+       "/* … */\n",
+       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
+       "
+365:         rk_n_stages = RK23_n_stages
\n", + "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
+       "
+366:         len_C       = RK23_LEN_C
\n", + "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
+       "/* … */\n",
+       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
+       "
+367:         len_B       = RK23_LEN_B
\n", + "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
+       "/* … */\n",
+       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
+       "
+368:         len_E       = RK23_LEN_E
\n", + "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
+       "
+369:         len_E3      = RK23_LEN_E3
\n", + "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
+       "
+370:         len_E5      = RK23_LEN_E5
\n", + "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
+       "
+371:         len_A0      = RK23_LEN_A0
\n", + "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
+       "/* … */\n",
+       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
+       "
+372:         len_A1      = RK23_LEN_A1
\n", + "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
+       "/* … */\n",
+       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
+       "
+373:     elif rk_method == 1:
\n", + "
    break;\n",
+       "    case 2:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 2:\n",
+       "
 374:         # RK45 Method
\n", + "
+375:         rk_order    = RK45_order
\n", + "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
+       "
+376:         error_order = RK45_error_order
\n", + "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
+       "/* … */\n",
+       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
+       "
+377:         rk_n_stages = RK45_n_stages
\n", + "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
+       "
+378:         len_C       = RK45_LEN_C
\n", + "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
+       "/* … */\n",
+       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
+       "
+379:         len_B       = RK45_LEN_B
\n", + "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
+       "/* … */\n",
+       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
+       "
+380:         len_E       = RK45_LEN_E
\n", + "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
+       "
+381:         len_E3      = RK45_LEN_E3
\n", + "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
+       "
+382:         len_E5      = RK45_LEN_E5
\n", + "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
+       "
+383:         len_A0      = RK45_LEN_A0
\n", + "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
+       "/* … */\n",
+       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
+       "
+384:         len_A1      = RK45_LEN_A1
\n", + "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
+       "/* … */\n",
+       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
+       "
+385:     elif rk_method == 2:
\n", + "
    break;\n",
+       "    default:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    default:\n",
+       "
 386:         # DOP853 Method
\n", + "
+387:         rk_order    = DOP_order
\n", + "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
+       "
+388:         error_order = DOP_error_order
\n", + "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
+       "/* … */\n",
+       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
+       "
+389:         rk_n_stages = DOP_n_stages
\n", + "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
+       "
+390:         len_C       = DOP_LEN_C
\n", + "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
+       "/* … */\n",
+       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
+       "
+391:         len_B       = DOP_LEN_B
\n", + "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
+       "/* … */\n",
+       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
+       "
+392:         len_E       = DOP_LEN_E
\n", + "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
+       "
+393:         len_E3      = DOP_LEN_E3
\n", + "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
+       "
+394:         len_E5      = DOP_LEN_E5
\n", + "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
+       "/* … */\n",
+       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
+       "
+395:         len_A0      = DOP_LEN_A0
\n", + "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
+       "/* … */\n",
+       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
+       "
+396:         len_A1      = DOP_LEN_A1
\n", + "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
+       "/* … */\n",
+       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
+       "
 397: 
\n", + "
+398:         rk_n_stages_extended = DOP_n_stages_extended
\n", + "
    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
+       "/* … */\n",
+       "    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
+       "
 399:     else:
\n", + "
+400:         status = -8
\n", + "
    __pyx_v_status = -8;\n",
+       "/* … */\n",
+       "    __pyx_v_status = -8;\n",
+       "
+401:         raise AttributeError(
\n", + "
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __PYX_ERR(0, 401, __pyx_L1_error)\n",
+       "    break;\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Unexpected_rk_method_provided_Cu); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 401, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__16);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__16);\n",
+       "/* … */\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __PYX_ERR(0, 401, __pyx_L1_error)\n",
+       "    break;\n",
+       "  }\n",
+       "
 402:             'Unexpected rk_method provided. Currently supported versions are:\\n'
\n", + "
 403:             '\\t0 = RK23\\n'
\n", + "
 404:             '\\t1 = RK34\\n'
\n", + "
 405:             '\\t2 = DOP853')
\n", + "
 406: 
\n", + "
+407:     rk_n_stages_plus1 = rk_n_stages + 1
\n", + "
  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
+       "/* … */\n",
+       "  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
+       "
+408:     error_expo = 1. / (<double>error_order + 1.)
\n", + "
  __pyx_v_error_expo = (1. / (((double)__pyx_v_error_order) + 1.));\n",
+       "/* … */\n",
+       "  __pyx_v_error_expo = (1. / (((double)__pyx_v_error_order) + 1.));\n",
+       "
 409: 
\n", + "
 410:     # Build RK Arrays. Note that all are 1D except for A and K.
\n", + "
+411:     A      = np.empty((len_A0, len_A1), dtype=DTYPE, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __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_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_A0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_A1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_9);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_9 = 0;\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_A = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __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_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_A0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_A1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_9);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_9 = 0;\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_v_A = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
+412:     B      = np.empty(len_B, dtype=DTYPE, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_B); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_B = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_B); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_B = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "
+413:     C      = np.empty(len_C, dtype=np.float64, order='C')  # C is always float no matter what y0 is.
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_C); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_C = __pyx_t_15;\n",
+       "  __pyx_t_15 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_C); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_C = __pyx_t_15;\n",
+       "  __pyx_t_15 = 0;\n",
+       "
+414:     E      = np.empty(len_E, dtype=DTYPE, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_E); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_15);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
+       "  __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __pyx_v_E = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_E); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_15);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
+       "  __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __pyx_v_E = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
+415:     E3     = np.empty(len_E3, dtype=DTYPE, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_E3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_E3 = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_E3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_E3 = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "
+416:     E5     = np.empty(len_E5, dtype=DTYPE, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_E5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_E5 = __pyx_t_15;\n",
+       "  __pyx_t_15 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_E5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_E5 = __pyx_t_15;\n",
+       "  __pyx_t_15 = 0;\n",
+       "
+417:     K      = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C')  # It is important K be initialized with 0s
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_15);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_9);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);\n",
+       "  __pyx_t_15 = 0;\n",
+       "  __pyx_t_9 = 0;\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_K = __pyx_t_15;\n",
+       "  __pyx_t_15 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_15);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_9);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);\n",
+       "  __pyx_t_15 = 0;\n",
+       "  __pyx_t_9 = 0;\n",
+       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_K = __pyx_t_15;\n",
+       "  __pyx_t_15 = 0;\n",
+       "
 418: 
\n", + "
 419:     # Setup memory views.
\n", + "
 420:     cdef double_numeric[:] B_view, E_view, E3_view, E5_view
\n", + "
 421:     cdef double_numeric[:, :] A_view, K_view
\n", + "
 422:     cdef double_numeric A_at_sj, B_at_j, error_dot_1, error_dot_2
\n", + "
 423:     cdef double[:] C_view
\n", + "
+424:     A_view      = A
\n", + "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 424, __pyx_L1_error)\n",
+       "  __pyx_v_A_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 424, __pyx_L1_error)\n",
+       "  __pyx_v_A_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "
+425:     B_view      = B
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 425, __pyx_L1_error)\n",
+       "  __pyx_v_B_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 425, __pyx_L1_error)\n",
+       "  __pyx_v_B_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "
+426:     C_view      = C
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 426, __pyx_L1_error)\n",
+       "  __pyx_v_C_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 426, __pyx_L1_error)\n",
+       "  __pyx_v_C_view = __pyx_t_17;\n",
+       "  __pyx_t_17.memview = NULL;\n",
+       "  __pyx_t_17.data = NULL;\n",
+       "
+427:     E_view      = E
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 427, __pyx_L1_error)\n",
+       "  __pyx_v_E_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 427, __pyx_L1_error)\n",
+       "  __pyx_v_E_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "
+428:     E3_view     = E3
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 428, __pyx_L1_error)\n",
+       "  __pyx_v_E3_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 428, __pyx_L1_error)\n",
+       "  __pyx_v_E3_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "
+429:     E5_view     = E5
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 429, __pyx_L1_error)\n",
+       "  __pyx_v_E5_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 429, __pyx_L1_error)\n",
+       "  __pyx_v_E5_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "
+430:     K_view      = K
\n", + "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __pyx_v_K_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
+       "  __pyx_v_K_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "
 431: 
\n", + "
 432:     # Populate values based on externally defined constants.
\n", + "
+433:     if rk_method == 0:
\n", + "
  switch (__pyx_v_rk_method) {\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 1:\n",
+       "/* … */\n",
+       "  switch (__pyx_v_rk_method) {\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 1:\n",
+       "
 434:         # RK23 Method
\n", + "
+435:         for i in range(len_A0):
\n", + "
    __pyx_t_7 = __pyx_v_len_A0;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_A0;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+436:             for j in range(len_A1):
\n", + "
      __pyx_t_17 = __pyx_v_len_A1;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_len_A1;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_j = __pyx_t_20;\n",
+       "
+437:                 A_view[i, j] = RK23_A[i][j]
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_j;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]);\n",
+       "      }\n",
+       "    }\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_j;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]), 0);\n",
+       "      }\n",
+       "    }\n",
+       "
+438:         for i in range(len_B):
\n", + "
    __pyx_t_7 = __pyx_v_len_B;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_B;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+439:             B_view[i] = RK23_B[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]), 0);\n",
+       "    }\n",
+       "
+440:         for i in range(len_C):
\n", + "
    __pyx_t_7 = __pyx_v_len_C;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_C;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+441:             C_view[i] = RK23_C[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
+       "    }\n",
+       "
+442:         for i in range(len_E):
\n", + "
    __pyx_t_7 = __pyx_v_len_E;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_E;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+443:             E_view[i] = RK23_E[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
+       "
 444:             # Dummy Variables, set equal to E
\n", + "
+445:             E3_view[i] = RK23_E[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
+       "
+446:             E5_view[i] = RK23_E[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
+       "    }\n",
+       "
+447:     elif rk_method == 1:
\n", + "
    break;\n",
+       "    default:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    default:\n",
+       "
 448:         # RK45 Method
\n", + "
+449:         for i in range(len_A0):
\n", + "
    __pyx_t_7 = __pyx_v_len_A0;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_A0;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+450:             for j in range(len_A1):
\n", + "
      __pyx_t_17 = __pyx_v_len_A1;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_len_A1;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_j = __pyx_t_20;\n",
+       "
+451:                 A_view[i, j] = RK45_A[i][j]
\n", + "
        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]);\n",
+       "      }\n",
+       "    }\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]), 0);\n",
+       "      }\n",
+       "    }\n",
+       "
+452:         for i in range(len_B):
\n", + "
    __pyx_t_7 = __pyx_v_len_B;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_B;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+453:             B_view[i] = RK45_B[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]), 0);\n",
+       "    }\n",
+       "
+454:         for i in range(len_C):
\n", + "
    __pyx_t_7 = __pyx_v_len_C;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_C;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+455:             C_view[i] = RK45_C[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
+       "    }\n",
+       "
+456:         for i in range(len_E):
\n", + "
    __pyx_t_7 = __pyx_v_len_E;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_E;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+457:             E_view[i] = RK45_E[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
+       "
 458:             # Dummy Variables, set equal to E
\n", + "
+459:             E3_view[i] = RK45_E[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
+       "
+460:             E5_view[i] = RK45_E[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
+       "    }\n",
+       "
 461:     else:
\n", + "
 462:         # DOP853 Method
\n", + "
+463:         for i in range(len_A0):
\n", + "
    __pyx_t_7 = __pyx_v_len_A0;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_A0;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+464:             for j in range(len_A1):
\n", + "
      __pyx_t_17 = __pyx_v_len_A1;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_len_A1;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_j = __pyx_t_20;\n",
+       "
+465:                 A_view[i, j] = DOP_A_REDUCED[i][j]
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_j;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]);\n",
+       "      }\n",
+       "    }\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_j;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]), 0);\n",
+       "      }\n",
+       "    }\n",
+       "
+466:         for i in range(len_B):
\n", + "
    __pyx_t_7 = __pyx_v_len_B;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_B;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+467:             B_view[i] = DOP_B[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]), 0);\n",
+       "    }\n",
+       "
+468:         for i in range(len_C):
\n", + "
    __pyx_t_7 = __pyx_v_len_C;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_C;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+469:             C_view[i] = DOP_C_REDUCED[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
+       "    }\n",
+       "
+470:         for i in range(len_E):
\n", + "
    __pyx_t_7 = __pyx_v_len_E;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_E;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+471:             E3_view[i] = DOP_E3[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]), 0);\n",
+       "
+472:             E5_view[i] = DOP_E5[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]), 0);\n",
+       "
+473:             E_view[i] = DOP_E5[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]), 0);\n",
+       "
 474:             # Dummy Variables, set equal to E3
\n", + "
+475:             E_view[i] = DOP_E3[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
+       "    }\n",
+       "    break;\n",
+       "  }\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]), 0);\n",
+       "    }\n",
+       "    break;\n",
+       "  }\n",
+       "
 476: 
\n", + "
 477:     # Initialize variables for start of integration
\n", + "
+478:     if not capture_extra:
\n", + "
  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
 479:         # If `capture_extra` is True then this step was already performed.
\n", + "
+480:         if use_args:
\n", + "
    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L55;\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L55;\n",
+       "    }\n",
+       "
+481:             diffeq(t_start, y_new, diffeq_out, *args)
\n", + "
      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_GIVEREF(__pyx_t_15);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
+       "      __Pyx_INCREF(__pyx_v_y_new);\n",
+       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y_new);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_diffeq_out);\n",
+       "      __pyx_t_15 = 0;\n",
+       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "        __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_15 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "/* … */\n",
+       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_GIVEREF(__pyx_t_15);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
+       "      __Pyx_INCREF(__pyx_v_y_new);\n",
+       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y_new);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_diffeq_out);\n",
+       "      __pyx_t_15 = 0;\n",
+       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "        __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      }\n",
+       "      __pyx_t_15 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "
 482:         else:
\n", + "
+483:             diffeq(t_start, y_new, diffeq_out)
\n", + "
    /*else*/ {\n",
+       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "      __pyx_t_9 = __pyx_v_diffeq; __pyx_t_2 = NULL;\n",
+       "      __pyx_t_13 = 0;\n",
+       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
+       "        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);\n",
+       "        if (likely(__pyx_t_2)) {\n",
+       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
+       "          __Pyx_INCREF(__pyx_t_2);\n",
+       "          __Pyx_INCREF(function);\n",
+       "          __Pyx_DECREF_SET(__pyx_t_9, function);\n",
+       "          __pyx_t_13 = 1;\n",
+       "        }\n",
+       "      }\n",
+       "      {\n",
+       "        PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      }\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    }\n",
+       "    __pyx_L55:;\n",
+       "/* … */\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "      __pyx_t_9 = __pyx_v_diffeq; __pyx_t_2 = NULL;\n",
+       "      __pyx_t_13 = 0;\n",
+       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
+       "        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);\n",
+       "        if (likely(__pyx_t_2)) {\n",
+       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
+       "          __Pyx_INCREF(__pyx_t_2);\n",
+       "          __Pyx_INCREF(function);\n",
+       "          __Pyx_DECREF_SET(__pyx_t_9, function);\n",
+       "          __pyx_t_13 = 1;\n",
+       "        }\n",
+       "      }\n",
+       "      {\n",
+       "        PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_1);\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      }\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    }\n",
+       "    __pyx_L55:;\n",
+       "
 484: 
\n", + "
+485:     t_old = t_start
\n", + "
  __pyx_v_t_old = __pyx_v_t_start;\n",
+       "/* … */\n",
+       "  __pyx_v_t_old = __pyx_v_t_start;\n",
+       "
+486:     t_new = t_start
\n", + "
  __pyx_v_t_new = __pyx_v_t_start;\n",
+       "/* … */\n",
+       "  __pyx_v_t_new = __pyx_v_t_start;\n",
+       "
 487:     # Initialize dydt arrays.
\n", + "
+488:     for i in range(y_size):
\n", + "
  __pyx_t_7 = __pyx_v_y_size;\n",
+       "  __pyx_t_3 = __pyx_t_7;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "  __pyx_t_7 = __pyx_v_y_size;\n",
+       "  __pyx_t_3 = __pyx_t_7;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "
+489:         dydt_new_view[i] = diffeq_out_view[i]
\n", + "
    __pyx_t_14 = __pyx_v_i;\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "/* … */\n",
+       "    __pyx_t_14 = __pyx_v_i;\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "
+490:         dydt_old_view[i] = dydt_new_view[i]
\n", + "
    __pyx_t_14 = __pyx_v_i;\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "  }\n",
+       "/* … */\n",
+       "    __pyx_t_14 = __pyx_v_i;\n",
+       "    __pyx_t_12 = __pyx_v_i;\n",
+       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "  }\n",
+       "
 491: 
\n", + "
 492:     # Setup storage arrays
\n", + "
 493:     # These arrays are built to fit a number of points equal to `expected_size_to_use`
\n", + "
 494:     # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.
\n", + "
 495:     cdef double_numeric[:, :] y_results_array_view, y_results_array_new_view, solution_y_view
\n", + "
 496:     cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view
\n", + "
+497:     y_results_array        = np.empty((store_loop_size, expected_size_to_use), dtype=DTYPE, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_15);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_y_results_array = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
+       "  __Pyx_GIVEREF(__pyx_t_15);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_15 = 0;\n",
+       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_2);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
+       "  __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_v_y_results_array = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "
+498:     time_domain_array      = np.empty(expected_size_to_use, dtype=np.float64, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __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_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_time_domain_array = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __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_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_v_time_domain_array = __pyx_t_8;\n",
+       "  __pyx_t_8 = 0;\n",
+       "
+499:     y_results_array_view   = y_results_array
\n", + "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 499, __pyx_L1_error)\n",
+       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 499, __pyx_L1_error)\n",
+       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
+       "  __pyx_t_16.memview = NULL;\n",
+       "  __pyx_t_16.data = NULL;\n",
+       "
+500:     time_domain_array_view = time_domain_array
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 500, __pyx_L1_error)\n",
+       "  __pyx_v_time_domain_array_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 500, __pyx_L1_error)\n",
+       "  __pyx_v_time_domain_array_view = __pyx_t_17;\n",
+       "  __pyx_t_17.memview = NULL;\n",
+       "  __pyx_t_17.data = NULL;\n",
+       "
 501: 
\n", + "
 502:     cdef np.ndarray[np.float64_t, ndim=1, mode='c'] scale_arr
\n", + "
 503:     cdef double[:] scale_view
\n", + "
 504:     cdef double scale
\n", + "
+505:     scale_arr = np.empty(y_size, dtype=np.float64, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __pyx_t_20 = ((PyArrayObject *)__pyx_t_9);\n",
+       "  {\n",
+       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
+       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
+       "    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
+       "    if (unlikely(__pyx_t_13 < 0)) {\n",
+       "      PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);\n",
+       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_v_scale_arr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
+       "        Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);\n",
+       "        __Pyx_RaiseBufferFallbackError();\n",
+       "      } else {\n",
+       "        PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);\n",
+       "      }\n",
+       "      __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;\n",
+       "    }\n",
+       "    __pyx_pybuffernd_scale_arr.diminfo[0].strides = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_scale_arr.diminfo[0].shape = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.shape[0];\n",
+       "    if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  }\n",
+       "  __pyx_t_20 = 0;\n",
+       "  __pyx_v_scale_arr = ((PyArrayObject *)__pyx_t_9);\n",
+       "  __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_15);\n",
+       "  __Pyx_GIVEREF(__pyx_t_8);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_8);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_9);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  __pyx_t_21 = ((PyArrayObject *)__pyx_t_9);\n",
+       "  {\n",
+       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
+       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
+       "    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
+       "    if (unlikely(__pyx_t_13 < 0)) {\n",
+       "      PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);\n",
+       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_v_scale_arr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
+       "        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24);\n",
+       "        __Pyx_RaiseBufferFallbackError();\n",
+       "      } else {\n",
+       "        PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24);\n",
+       "      }\n",
+       "      __pyx_t_22 = __pyx_t_23 = __pyx_t_24 = 0;\n",
+       "    }\n",
+       "    __pyx_pybuffernd_scale_arr.diminfo[0].strides = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_scale_arr.diminfo[0].shape = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.shape[0];\n",
+       "    if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
+       "  }\n",
+       "  __pyx_t_21 = 0;\n",
+       "  __pyx_v_scale_arr = ((PyArrayObject *)__pyx_t_9);\n",
+       "  __pyx_t_9 = 0;\n",
+       "
+506:     scale_view = scale_arr
\n", + "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_scale_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 506, __pyx_L1_error)\n",
+       "  __pyx_v_scale_view = __pyx_t_10;\n",
+       "  __pyx_t_10.memview = NULL;\n",
+       "  __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_scale_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 506, __pyx_L1_error)\n",
+       "  __pyx_v_scale_view = __pyx_t_17;\n",
+       "  __pyx_t_17.memview = NULL;\n",
+       "  __pyx_t_17.data = NULL;\n",
+       "
 507: 
\n", + "
 508: 
\n", + "
 509:     # Load initial conditions into output arrays
\n", + "
+510:     time_domain_array_view[0] = t_start
\n", + "
  __pyx_t_14 = 0;\n",
+       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
+       "/* … */\n",
+       "  __pyx_t_14 = 0;\n",
+       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
+       "
+511:     for i in range(store_loop_size):
\n", + "
  __pyx_t_7 = __pyx_v_store_loop_size;\n",
+       "  __pyx_t_3 = __pyx_t_7;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "  __pyx_t_7 = __pyx_v_store_loop_size;\n",
+       "  __pyx_t_3 = __pyx_t_7;\n",
+       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "    __pyx_v_i = __pyx_t_11;\n",
+       "
+512:         if store_extras_during_integration:
\n", + "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L60;\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L60;\n",
+       "    }\n",
+       "
+513:             y_results_array_view[i] = y0_plus_extra_view[i]
\n", + "
      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
+       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      {\n",
+       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
+       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
+       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
+       "}\n",
+       "\n",
+       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
+       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
+       "    __pyx_t_10.suboffsets[0] = -1;\n",
+       "\n",
+       "{\n",
+       "          double __pyx_temp_scalar = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
+       "          {\n",
+       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
+       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
+       "              char *__pyx_temp_pointer_0;\n",
+       "              Py_ssize_t __pyx_temp_idx_0;\n",
+       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
+       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
+       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
+       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
+       "              }\n",
+       "          }\n",
+       "      }\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
+       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      {\n",
+       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
+       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
+       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
+       "}\n",
+       "\n",
+       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
+       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
+       "    __pyx_t_10.suboffsets[0] = -1;\n",
+       "\n",
+       "{\n",
+       "          __pyx_t_double_complex __pyx_temp_scalar = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
+       "          {\n",
+       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
+       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
+       "              char *__pyx_temp_pointer_0;\n",
+       "              Py_ssize_t __pyx_temp_idx_0;\n",
+       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
+       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
+       "                *((__pyx_t_double_complex *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
+       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
+       "              }\n",
+       "          }\n",
+       "      }\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
+       "
 514:         else:
\n", + "
+515:             y_results_array_view[i] = y0[i]
\n", + "
    /*else*/ {\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
+       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      {\n",
+       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
+       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
+       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
+       "}\n",
+       "\n",
+       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
+       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
+       "    __pyx_t_10.suboffsets[0] = -1;\n",
+       "\n",
+       "{\n",
+       "          double __pyx_temp_scalar = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
+       "          {\n",
+       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
+       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
+       "              char *__pyx_temp_pointer_0;\n",
+       "              Py_ssize_t __pyx_temp_idx_0;\n",
+       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
+       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
+       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
+       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
+       "              }\n",
+       "          }\n",
+       "      }\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
+       "    }\n",
+       "    __pyx_L60:;\n",
+       "  }\n",
+       "/* … */\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_14 = __pyx_v_i;\n",
+       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
+       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      {\n",
+       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
+       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
+       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
+       "}\n",
+       "\n",
+       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
+       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
+       "    __pyx_t_10.suboffsets[0] = -1;\n",
+       "\n",
+       "{\n",
+       "          __pyx_t_double_complex __pyx_temp_scalar = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
+       "          {\n",
+       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
+       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
+       "              char *__pyx_temp_pointer_0;\n",
+       "              Py_ssize_t __pyx_temp_idx_0;\n",
+       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
+       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
+       "                *((__pyx_t_double_complex *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
+       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
+       "              }\n",
+       "          }\n",
+       "      }\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
+       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
+       "    }\n",
+       "    __pyx_L60:;\n",
+       "  }\n",
+       "
 516: 
\n", + "
 517:     # # Determine size of first step.
\n", + "
 518:     cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1
\n", + "
 519: 
\n", + "
+520:     if first_step == 0.:
\n", + "
  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L61;\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L61;\n",
+       "  }\n",
+       "
 521:         # Select an initial step size based on the differential equation.
\n", + "
 522:         # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
\n", + "
 523:         #        Equations I: Nonstiff Problems", Sec. II.4.
\n", + "
+524:         if y_size == 0:
\n", + "
    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L62;\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L62;\n",
+       "    }\n",
+       "
+525:             step_size = INF
\n", + "
      __pyx_v_step_size = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF;\n",
+       "/* … */\n",
+       "      __pyx_v_step_size = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF;\n",
+       "
 526:         else:
\n", + "
 527:             # Find the norm for d0 and d1
\n", + "
+528:             d0 = 0.
\n", + "
    /*else*/ {\n",
+       "      __pyx_v_d0 = 0.;\n",
+       "/* … */\n",
+       "    /*else*/ {\n",
+       "      __pyx_v_d0 = 0.;\n",
+       "
+529:             d1 = 0.
\n", + "
      __pyx_v_d1 = 0.;\n",
+       "/* … */\n",
+       "      __pyx_v_d1 = 0.;\n",
+       "
+530:             for i in range(y_size):
\n", + "
      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+531:                 scale = atol + dabs(y_old_view[i]) * rtol
\n", + "
        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
+       "
 532: 
\n", + "
+533:                 d0_abs = dabs(y_old_view[i] / scale)
\n", + "
        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_d0_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) / __pyx_v_scale));\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_d0_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0)));\n",
+       "
+534:                 d1_abs = dabs(dydt_old_view[i] / scale)
\n", + "
        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_d1_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(((*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))) / __pyx_v_scale));\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_d1_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0)));\n",
+       "
+535:                 d0 += (d0_abs * d0_abs)
\n", + "
        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
+       "/* … */\n",
+       "        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
+       "
+536:                 d1 += (d1_abs * d1_abs)
\n", + "
        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
+       "      }\n",
+       "/* … */\n",
+       "        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
+       "      }\n",
+       "
 537: 
\n", + "
+538:             d0 = sqrt(d0) / y_size_sqrt
\n", + "
      __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_y_size_sqrt);\n",
+       "/* … */\n",
+       "      __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_y_size_sqrt);\n",
+       "
+539:             d1 = sqrt(d1) / y_size_sqrt
\n", + "
      __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_y_size_sqrt);\n",
+       "/* … */\n",
+       "      __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_y_size_sqrt);\n",
+       "
 540: 
\n", + "
+541:             if d0 < 1.e-5 or d1 < 1.e-5:
\n", + "
      __pyx_t_5 = (__pyx_v_d0 < 1.e-5);\n",
+       "      if (!__pyx_t_5) {\n",
+       "      } else {\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        goto __pyx_L66_bool_binop_done;\n",
+       "      }\n",
+       "      __pyx_t_5 = (__pyx_v_d1 < 1.e-5);\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      __pyx_L66_bool_binop_done:;\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L65;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_5 = (__pyx_v_d0 < 1.e-5);\n",
+       "      if (!__pyx_t_5) {\n",
+       "      } else {\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        goto __pyx_L66_bool_binop_done;\n",
+       "      }\n",
+       "      __pyx_t_5 = (__pyx_v_d1 < 1.e-5);\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      __pyx_L66_bool_binop_done:;\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L65;\n",
+       "      }\n",
+       "
+542:                 h0 = 1.e-6
\n", + "
        __pyx_v_h0 = 1.e-6;\n",
+       "/* … */\n",
+       "        __pyx_v_h0 = 1.e-6;\n",
+       "
 543:             else:
\n", + "
+544:                 h0 = 0.01 * d0 / d1
\n", + "
      /*else*/ {\n",
+       "        __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
+       "      }\n",
+       "      __pyx_L65:;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
+       "      }\n",
+       "      __pyx_L65:;\n",
+       "
 545: 
\n", + "
+546:             if direction_flag:
\n", + "
      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L68;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L68;\n",
+       "      }\n",
+       "
+547:                 h0_direction = h0
\n", + "
        __pyx_v_h0_direction = __pyx_v_h0;\n",
+       "/* … */\n",
+       "        __pyx_v_h0_direction = __pyx_v_h0;\n",
+       "
 548:             else:
\n", + "
+549:                 h0_direction = -h0
\n", + "
      /*else*/ {\n",
+       "        __pyx_v_h0_direction = (-__pyx_v_h0);\n",
+       "      }\n",
+       "      __pyx_L68:;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_h0_direction = (-__pyx_v_h0);\n",
+       "      }\n",
+       "      __pyx_L68:;\n",
+       "
+550:             t_new = t_old + h0_direction
\n", + "
      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
+       "/* … */\n",
+       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
+       "
+551:             for i in range(y_size):
\n", + "
      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+552:                 y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]
\n", + "
        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_24 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) + (__pyx_v_h0_direction * (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
+       "      }\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_25 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_h0_direction, 0), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
+       "      }\n",
+       "
 553: 
\n", + "
+554:             if use_args:
\n", + "
      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L71;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L71;\n",
+       "      }\n",
+       "
+555:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", + "
        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_GIVEREF(__pyx_t_9);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
+       "        __Pyx_INCREF(__pyx_v_y_new);\n",
+       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
+       "        __pyx_t_9 = 0;\n",
+       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "          __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "/* … */\n",
+       "        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_GIVEREF(__pyx_t_9);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
+       "        __Pyx_INCREF(__pyx_v_y_new);\n",
+       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
+       "        __pyx_t_9 = 0;\n",
+       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "          __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "
 556:             else:
\n", + "
+557:                 diffeq(t_new, y_new, diffeq_out)
\n", + "
      /*else*/ {\n",
+       "        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "        __pyx_t_15 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
+       "        __pyx_t_13 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {\n",
+       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_15);\n",
+       "          if (likely(__pyx_t_1)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);\n",
+       "            __Pyx_INCREF(__pyx_t_1);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_15, function);\n",
+       "            __pyx_t_13 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_9, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      }\n",
+       "      __pyx_L71:;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "        __pyx_t_15 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
+       "        __pyx_t_13 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {\n",
+       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_15);\n",
+       "          if (likely(__pyx_t_1)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);\n",
+       "            __Pyx_INCREF(__pyx_t_1);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_15, function);\n",
+       "            __pyx_t_13 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_9, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      }\n",
+       "      __pyx_L71:;\n",
+       "
 558: 
\n", + "
 559:             # Find the norm for d2
\n", + "
+560:             d2 = 0.
\n", + "
      __pyx_v_d2 = 0.;\n",
+       "/* … */\n",
+       "      __pyx_v_d2 = 0.;\n",
+       "
+561:             for i in range(y_size):
\n", + "
      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+562:                 dydt_new_view[i] = diffeq_out_view[i]
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "
+563:                 scale = atol + dabs(y_old_view[i]) * rtol
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
+       "
+564:                 d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_d2_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((((*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )))) / __pyx_v_scale));\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_v_d2_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__Pyx_c_quot_double(__Pyx_c_diff_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0)));\n",
+       "
+565:                 d2 += (d2_abs * d2_abs)
\n", + "
        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
+       "      }\n",
+       "/* … */\n",
+       "        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
+       "      }\n",
+       "
 566: 
\n", + "
+567:             d2 = sqrt(d2) / (h0 * y_size_sqrt)
\n", + "
      __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_y_size_sqrt));\n",
+       "/* … */\n",
+       "      __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_y_size_sqrt));\n",
+       "
 568: 
\n", + "
+569:             if d1 <= 1.e-15 and d2 <= 1.e-15:
\n", + "
      __pyx_t_5 = (__pyx_v_d1 <= 1.e-15);\n",
+       "      if (__pyx_t_5) {\n",
+       "      } else {\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        goto __pyx_L75_bool_binop_done;\n",
+       "      }\n",
+       "      __pyx_t_5 = (__pyx_v_d2 <= 1.e-15);\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      __pyx_L75_bool_binop_done:;\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L74;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_5 = (__pyx_v_d1 <= 1.e-15);\n",
+       "      if (__pyx_t_5) {\n",
+       "      } else {\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        goto __pyx_L75_bool_binop_done;\n",
+       "      }\n",
+       "      __pyx_t_5 = (__pyx_v_d2 <= 1.e-15);\n",
+       "      __pyx_t_4 = __pyx_t_5;\n",
+       "      __pyx_L75_bool_binop_done:;\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L74;\n",
+       "      }\n",
+       "
+570:                 h1 = max(1.e-6, h0 * 1.e-3)
\n", + "
        __pyx_t_25 = (__pyx_v_h0 * 1.e-3);\n",
+       "        __pyx_t_26 = 1.e-6;\n",
+       "        if ((__pyx_t_25 > __pyx_t_26)) {\n",
+       "          __pyx_t_27 = __pyx_t_25;\n",
+       "        } else {\n",
+       "          __pyx_t_27 = __pyx_t_26;\n",
+       "        }\n",
+       "        __pyx_v_h1 = __pyx_t_27;\n",
+       "/* … */\n",
+       "        __pyx_t_26 = (__pyx_v_h0 * 1.e-3);\n",
+       "        __pyx_t_27 = 1.e-6;\n",
+       "        if ((__pyx_t_26 > __pyx_t_27)) {\n",
+       "          __pyx_t_28 = __pyx_t_26;\n",
+       "        } else {\n",
+       "          __pyx_t_28 = __pyx_t_27;\n",
+       "        }\n",
+       "        __pyx_v_h1 = __pyx_t_28;\n",
+       "
 571:             else:
\n", + "
+572:                 h1 = (0.01 / max(d1, d2))**error_expo
\n", + "
      /*else*/ {\n",
+       "        __pyx_t_27 = __pyx_v_d2;\n",
+       "        __pyx_t_25 = __pyx_v_d1;\n",
+       "        if ((__pyx_t_27 > __pyx_t_25)) {\n",
+       "          __pyx_t_26 = __pyx_t_27;\n",
+       "        } else {\n",
+       "          __pyx_t_26 = __pyx_t_25;\n",
+       "        }\n",
+       "        __pyx_v_h1 = pow((0.01 / __pyx_t_26), __pyx_v_error_expo);\n",
+       "      }\n",
+       "      __pyx_L74:;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_28 = __pyx_v_d2;\n",
+       "        __pyx_t_26 = __pyx_v_d1;\n",
+       "        if ((__pyx_t_28 > __pyx_t_26)) {\n",
+       "          __pyx_t_27 = __pyx_t_28;\n",
+       "        } else {\n",
+       "          __pyx_t_27 = __pyx_t_26;\n",
+       "        }\n",
+       "        __pyx_v_h1 = pow((0.01 / __pyx_t_27), __pyx_v_error_expo);\n",
+       "      }\n",
+       "      __pyx_L74:;\n",
+       "
 573: 
\n", + "
+574:             step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))
\n", + "
      __pyx_t_26 = __pyx_v_h1;\n",
+       "      __pyx_t_27 = (100. * __pyx_v_h0);\n",
+       "      if ((__pyx_t_26 < __pyx_t_27)) {\n",
+       "        __pyx_t_25 = __pyx_t_26;\n",
+       "      } else {\n",
+       "        __pyx_t_25 = __pyx_t_27;\n",
+       "      }\n",
+       "      __pyx_t_26 = __pyx_t_25;\n",
+       "      __pyx_t_25 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
+       "      if ((__pyx_t_26 > __pyx_t_25)) {\n",
+       "        __pyx_t_27 = __pyx_t_26;\n",
+       "      } else {\n",
+       "        __pyx_t_27 = __pyx_t_25;\n",
+       "      }\n",
+       "      __pyx_v_step_size = __pyx_t_27;\n",
+       "    }\n",
+       "    __pyx_L62:;\n",
+       "/* … */\n",
+       "      __pyx_t_27 = __pyx_v_h1;\n",
+       "      __pyx_t_28 = (100. * __pyx_v_h0);\n",
+       "      if ((__pyx_t_27 < __pyx_t_28)) {\n",
+       "        __pyx_t_26 = __pyx_t_27;\n",
+       "      } else {\n",
+       "        __pyx_t_26 = __pyx_t_28;\n",
+       "      }\n",
+       "      __pyx_t_27 = __pyx_t_26;\n",
+       "      __pyx_t_26 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
+       "      if ((__pyx_t_27 > __pyx_t_26)) {\n",
+       "        __pyx_t_28 = __pyx_t_27;\n",
+       "      } else {\n",
+       "        __pyx_t_28 = __pyx_t_26;\n",
+       "      }\n",
+       "      __pyx_v_step_size = __pyx_t_28;\n",
+       "    }\n",
+       "    __pyx_L62:;\n",
+       "
 575:     else:
\n", + "
+576:         if first_step <= 0.:
\n", + "
  /*else*/ {\n",
+       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
+       "    if (unlikely(__pyx_t_4)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "  /*else*/ {\n",
+       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
+       "    if (unlikely(__pyx_t_4)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+577:             status = -8
\n", + "
      __pyx_v_status = -8;\n",
+       "/* … */\n",
+       "      __pyx_v_status = -8;\n",
+       "
+578:             raise AttributeError('Error in user-provided step size: Step size must be a positive number.')
\n", + "
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "/* … */\n",
+       "  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__17);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__17);\n",
+       "/* … */\n",
+       "      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __PYX_ERR(0, 578, __pyx_L1_error)\n",
+       "
+579:         elif first_step > t_delta_abs:
\n", + "
    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
+       "    if (unlikely(__pyx_t_4)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
+       "    if (unlikely(__pyx_t_4)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+580:             status = -8
\n", + "
      __pyx_v_status = -8;\n",
+       "/* … */\n",
+       "      __pyx_v_status = -8;\n",
+       "
+581:             raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')
\n", + "
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "/* … */\n",
+       "  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size_2); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__18);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__18);\n",
+       "/* … */\n",
+       "      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __PYX_ERR(0, 581, __pyx_L1_error)\n",
+       "
+582:         step_size = first_step
\n", + "
    __pyx_v_step_size = __pyx_v_first_step;\n",
+       "  }\n",
+       "  __pyx_L61:;\n",
+       "/* … */\n",
+       "    __pyx_v_step_size = __pyx_v_first_step;\n",
+       "  }\n",
+       "  __pyx_L61:;\n",
+       "
 583: 
\n", + "
 584:     # # Main integration loop
\n", + "
 585:     cdef double min_step, step_factor, step
\n", + "
 586:     cdef double c
\n", + "
 587:     cdef double_numeric K_scale
\n", + "
 588:     cdef Py_ssize_t len_t
\n", + "
+589:     status = 0
\n", + "
  __pyx_v_status = 0;\n",
+       "/* … */\n",
+       "  __pyx_v_status = 0;\n",
+       "
+590:     len_t  = 1  # There is an initial condition provided so the time length is already 1
\n", + "
  __pyx_v_len_t = 1;\n",
+       "/* … */\n",
+       "  __pyx_v_len_t = 1;\n",
+       "
 591: 
\n", + "
+592:     if y_size == 0:
\n", + "
  __pyx_t_4 = (__pyx_v_y_size == 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_t_4 = (__pyx_v_y_size == 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+593:         status = -6
\n", + "
    __pyx_v_status = -6;\n",
+       "/* … */\n",
+       "    __pyx_v_status = -6;\n",
+       "
 594: 
\n", + "
+595:     while status == 0:
\n", + "
  while (1) {\n",
+       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
+       "    if (!__pyx_t_4) break;\n",
+       "/* … */\n",
+       "  while (1) {\n",
+       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
+       "    if (!__pyx_t_4) break;\n",
+       "
+596:         if t_new == t_end:
\n", + "
    __pyx_t_4 = (__pyx_v_t_new == __pyx_v_t_end);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_t_new == __pyx_v_t_end);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+597:             t_old = t_end
\n", + "
      __pyx_v_t_old = __pyx_v_t_end;\n",
+       "/* … */\n",
+       "      __pyx_v_t_old = __pyx_v_t_end;\n",
+       "
+598:             status = 1
\n", + "
      __pyx_v_status = 1;\n",
+       "/* … */\n",
+       "      __pyx_v_status = 1;\n",
+       "
+599:             break
\n", + "
      goto __pyx_L80_break;\n",
+       "/* … */\n",
+       "      goto __pyx_L80_break;\n",
+       "
 600: 
\n", + "
+601:         if use_max_steps:
\n", + "
    __pyx_t_4 = (__pyx_v_use_max_steps != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L82;\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_use_max_steps != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L82;\n",
+       "    }\n",
+       "
+602:             if len_t > max_steps_touse:
\n", + "
      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_max_steps_touse);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_max_steps_touse);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "
+603:                 status = -2
\n", + "
        __pyx_v_status = -2;\n",
+       "/* … */\n",
+       "        __pyx_v_status = -2;\n",
+       "
+604:                 break
\n", + "
        goto __pyx_L80_break;\n",
+       "/* … */\n",
+       "        goto __pyx_L80_break;\n",
+       "
 605:         else:
\n", + "
+606:             if len_t > MAX_INT_SIZE:
\n", + "
    /*else*/ {\n",
+       "      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "    }\n",
+       "    __pyx_L82:;\n",
+       "/* … */\n",
+       "    /*else*/ {\n",
+       "      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "    }\n",
+       "    __pyx_L82:;\n",
+       "
+607:                 status = -3
\n", + "
        __pyx_v_status = -3;\n",
+       "/* … */\n",
+       "        __pyx_v_status = -3;\n",
+       "
+608:                 break
\n", + "
        goto __pyx_L80_break;\n",
+       "/* … */\n",
+       "        goto __pyx_L80_break;\n",
+       "
 609: 
\n", + "
 610:         # Run RK integration step
\n", + "
 611:         # Determine step size based on previous loop
\n", + "
 612:         # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)
\n", + "
+613:         min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)
\n", + "
    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
+       "/* … */\n",
+       "    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
+       "
 614:         # Look for over/undershoots in previous step size
\n", + "
+615:         if step_size > max_step_size:
\n", + "
    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step_size);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L85;\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step_size);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      goto __pyx_L85;\n",
+       "    }\n",
+       "
+616:             step_size = max_step_size
\n", + "
      __pyx_v_step_size = __pyx_v_max_step_size;\n",
+       "/* … */\n",
+       "      __pyx_v_step_size = __pyx_v_max_step_size;\n",
+       "
+617:         elif step_size < min_step:
\n", + "
    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "    __pyx_L85:;\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "    __pyx_L85:;\n",
+       "
+618:             step_size = min_step
\n", + "
      __pyx_v_step_size = __pyx_v_min_step;\n",
+       "/* … */\n",
+       "      __pyx_v_step_size = __pyx_v_min_step;\n",
+       "
 619: 
\n", + "
 620:         # Determine new step size
\n", + "
+621:         step_accepted = False
\n", + "
    __pyx_v_step_accepted = 0;\n",
+       "/* … */\n",
+       "    __pyx_v_step_accepted = 0;\n",
+       "
+622:         step_rejected = False
\n", + "
    __pyx_v_step_rejected = 0;\n",
+       "/* … */\n",
+       "    __pyx_v_step_rejected = 0;\n",
+       "
+623:         step_error    = False
\n", + "
    __pyx_v_step_error = 0;\n",
+       "/* … */\n",
+       "    __pyx_v_step_error = 0;\n",
+       "
 624: 
\n", + "
 625:         # # Step Loop
\n", + "
+626:         while not step_accepted:
\n", + "
    while (1) {\n",
+       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
+       "      if (!__pyx_t_4) break;\n",
+       "/* … */\n",
+       "    while (1) {\n",
+       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
+       "      if (!__pyx_t_4) break;\n",
+       "
 627: 
\n", + "
+628:             if step_size < min_step:
\n", + "
      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "
+629:                 step_error = True
\n", + "
        __pyx_v_step_error = 1;\n",
+       "/* … */\n",
+       "        __pyx_v_step_error = 1;\n",
+       "
+630:                 status     = -1
\n", + "
        __pyx_v_status = -1;\n",
+       "/* … */\n",
+       "        __pyx_v_status = -1;\n",
+       "
+631:                 break
\n", + "
        goto __pyx_L87_break;\n",
+       "/* … */\n",
+       "        goto __pyx_L87_break;\n",
+       "
 632: 
\n", + "
 633:             # Move time forward for this particular step size
\n", + "
+634:             if direction_flag:
\n", + "
      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L89;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L89;\n",
+       "      }\n",
+       "
+635:                 step = step_size
\n", + "
        __pyx_v_step = __pyx_v_step_size;\n",
+       "/* … */\n",
+       "        __pyx_v_step = __pyx_v_step_size;\n",
+       "
+636:                 t_delta_check = t_new - t_end
\n", + "
        __pyx_v_t_delta_check = (__pyx_v_t_new - __pyx_v_t_end);\n",
+       "/* … */\n",
+       "        __pyx_v_t_delta_check = (__pyx_v_t_new - __pyx_v_t_end);\n",
+       "
 637:             else:
\n", + "
+638:                 step = -step_size
\n", + "
      /*else*/ {\n",
+       "        __pyx_v_step = (-__pyx_v_step_size);\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_step = (-__pyx_v_step_size);\n",
+       "
+639:                 t_delta_check = t_end - t_new
\n", + "
        __pyx_v_t_delta_check = (__pyx_v_t_end - __pyx_v_t_new);\n",
+       "      }\n",
+       "      __pyx_L89:;\n",
+       "/* … */\n",
+       "        __pyx_v_t_delta_check = (__pyx_v_t_end - __pyx_v_t_new);\n",
+       "      }\n",
+       "      __pyx_L89:;\n",
+       "
+640:             t_new = t_old + step
\n", + "
      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
+       "/* … */\n",
+       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
+       "
 641: 
\n", + "
 642:             # Check that we are not at the end of integration with that move
\n", + "
+643:             if t_delta_check > 0.:
\n", + "
      __pyx_t_4 = (__pyx_v_t_delta_check > 0.);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_t_delta_check > 0.);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "      }\n",
+       "
+644:                 t_new = t_end
\n", + "
        __pyx_v_t_new = __pyx_v_t_end;\n",
+       "/* … */\n",
+       "        __pyx_v_t_new = __pyx_v_t_end;\n",
+       "
 645: 
\n", + "
 646:                 # Correct the step if we were at the end of integration
\n", + "
+647:                 step = t_new - t_old
\n", + "
        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
+       "/* … */\n",
+       "        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
+       "
+648:                 if direction_flag:
\n", + "
        __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L91;\n",
+       "        }\n",
+       "/* … */\n",
+       "        __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L91;\n",
+       "        }\n",
+       "
+649:                     step_size = step
\n", + "
          __pyx_v_step_size = __pyx_v_step;\n",
+       "/* … */\n",
+       "          __pyx_v_step_size = __pyx_v_step;\n",
+       "
 650:                 else:
\n", + "
+651:                     step_size = -step
\n", + "
        /*else*/ {\n",
+       "          __pyx_v_step_size = (-__pyx_v_step);\n",
+       "        }\n",
+       "        __pyx_L91:;\n",
+       "/* … */\n",
+       "        /*else*/ {\n",
+       "          __pyx_v_step_size = (-__pyx_v_step);\n",
+       "        }\n",
+       "        __pyx_L91:;\n",
+       "
 652: 
\n", + "
 653:             # Calculate derivative using RK method
\n", + "
+654:             for i in range(y_size):
\n", + "
      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_y_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+655:                 K_view[0, i] = dydt_old_view[i]
\n", + "
        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = 0;\n",
+       "        __pyx_t_24 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_24 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
+       "      }\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_i;\n",
+       "        __pyx_t_12 = 0;\n",
+       "        __pyx_t_25 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_25 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
+       "      }\n",
+       "
 656: 
\n", + "
+657:             for s in range(1, len_C):
\n", + "
      __pyx_t_7 = __pyx_v_len_C;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_s = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_len_C;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_s = __pyx_t_11;\n",
+       "
+658:                 c = C_view[s]
\n", + "
        __pyx_t_14 = __pyx_v_s;\n",
+       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
+       "/* … */\n",
+       "        __pyx_t_14 = __pyx_v_s;\n",
+       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
+       "
+659:                 time_ = t_old + c * step
\n", + "
        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
+       "/* … */\n",
+       "        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
+       "
 660: 
\n", + "
 661:                 # Dot Product (K, a) * step
\n", + "
+662:                 for j in range(s):
\n", + "
        __pyx_t_17 = __pyx_v_s;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "        __pyx_t_18 = __pyx_v_s;\n",
+       "        __pyx_t_19 = __pyx_t_18;\n",
+       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "          __pyx_v_j = __pyx_t_20;\n",
+       "
+663:                     for i in range(y_size):
\n", + "
          __pyx_t_28 = __pyx_v_y_size;\n",
+       "          __pyx_t_29 = __pyx_t_28;\n",
+       "          for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) {\n",
+       "            __pyx_v_i = __pyx_t_30;\n",
+       "/* … */\n",
+       "          __pyx_t_29 = __pyx_v_y_size;\n",
+       "          __pyx_t_30 = __pyx_t_29;\n",
+       "          for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) {\n",
+       "            __pyx_v_i = __pyx_t_31;\n",
+       "
+664:                         if j == 0:
\n", + "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "/* … */\n",
+       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "
 665:                             # Initialize
\n", + "
+666:                             y_new_view[i] = y_old_view[i]
\n", + "
              __pyx_t_14 = __pyx_v_i;\n",
+       "              __pyx_t_24 = __pyx_v_i;\n",
+       "              *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "/* … */\n",
+       "              __pyx_t_14 = __pyx_v_i;\n",
+       "              __pyx_t_25 = __pyx_v_i;\n",
+       "              *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "
 667: 
\n", + "
+668:                         y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)
\n", + "
            __pyx_t_14 = __pyx_v_i;\n",
+       "            __pyx_t_24 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_31 = __pyx_v_s;\n",
+       "            __pyx_t_32 = __pyx_v_j;\n",
+       "            __pyx_t_33 = __pyx_v_i;\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_33 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_31 * __pyx_v_A_view.strides[0]) ) + __pyx_t_32 * __pyx_v_A_view.strides[1]) )))) * __pyx_v_step));\n",
+       "          }\n",
+       "        }\n",
+       "/* … */\n",
+       "            __pyx_t_14 = __pyx_v_i;\n",
+       "            __pyx_t_25 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_t_32 = __pyx_v_s;\n",
+       "            __pyx_t_33 = __pyx_v_j;\n",
+       "            __pyx_t_34 = __pyx_v_i;\n",
+       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_34 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_25 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))), (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_32 * __pyx_v_A_view.strides[0]) ) + __pyx_t_33 * __pyx_v_A_view.strides[1]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
+       "          }\n",
+       "        }\n",
+       "
 669: 
\n", + "
+670:                 if use_args:
\n", + "
        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L101;\n",
+       "        }\n",
+       "/* … */\n",
+       "        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L101;\n",
+       "        }\n",
+       "
+671:                     diffeq(time_, y_new, diffeq_out, *args)
\n", + "
          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_15);\n",
+       "          __Pyx_GIVEREF(__pyx_t_8);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
+       "          __Pyx_INCREF(__pyx_v_y_new);\n",
+       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_y_new);\n",
+       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_diffeq_out);\n",
+       "          __pyx_t_8 = 0;\n",
+       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "            __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_8, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_15);\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "/* … */\n",
+       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_15);\n",
+       "          __Pyx_GIVEREF(__pyx_t_8);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
+       "          __Pyx_INCREF(__pyx_v_y_new);\n",
+       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_y_new);\n",
+       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_diffeq_out);\n",
+       "          __pyx_t_8 = 0;\n",
+       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "            __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          }\n",
+       "          __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_8, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_15);\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "
 672:                 else:
\n", + "
+673:                     diffeq(time_, y_new, diffeq_out)
\n", + "
        /*else*/ {\n",
+       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "          __pyx_t_9 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
+       "          __pyx_t_13 = 0;\n",
+       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
+       "            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);\n",
+       "            if (likely(__pyx_t_1)) {\n",
+       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
+       "              __Pyx_INCREF(__pyx_t_1);\n",
+       "              __Pyx_INCREF(function);\n",
+       "              __Pyx_DECREF_SET(__pyx_t_9, function);\n",
+       "              __pyx_t_13 = 1;\n",
+       "            }\n",
+       "          }\n",
+       "          {\n",
+       "            PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_8, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "            __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_15);\n",
+       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "          }\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        }\n",
+       "        __pyx_L101:;\n",
+       "/* … */\n",
+       "        /*else*/ {\n",
+       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_8);\n",
+       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "          __pyx_t_9 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
+       "          __pyx_t_13 = 0;\n",
+       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
+       "            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);\n",
+       "            if (likely(__pyx_t_1)) {\n",
+       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
+       "              __Pyx_INCREF(__pyx_t_1);\n",
+       "              __Pyx_INCREF(function);\n",
+       "              __Pyx_DECREF_SET(__pyx_t_9, function);\n",
+       "              __pyx_t_13 = 1;\n",
+       "            }\n",
+       "          }\n",
+       "          {\n",
+       "            PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_8, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "            __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_15);\n",
+       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "          }\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        }\n",
+       "        __pyx_L101:;\n",
+       "
 674: 
\n", + "
+675:                 for i in range(y_size):
\n", + "
        __pyx_t_17 = __pyx_v_y_size;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_i = __pyx_t_19;\n",
+       "/* … */\n",
+       "        __pyx_t_18 = __pyx_v_y_size;\n",
+       "        __pyx_t_19 = __pyx_t_18;\n",
+       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "          __pyx_v_i = __pyx_t_20;\n",
+       "
+676:                     K_view[s, i] = diffeq_out_view[i]
\n", + "
          __pyx_t_32 = __pyx_v_i;\n",
+       "          __pyx_t_31 = __pyx_v_s;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_31 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_32 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "        }\n",
+       "      }\n",
+       "/* … */\n",
+       "          __pyx_t_33 = __pyx_v_i;\n",
+       "          __pyx_t_32 = __pyx_v_s;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_32 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_33 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "        }\n",
+       "      }\n",
+       "
 677: 
\n", + "
 678:             # Dot Product (K, B) * step
\n", + "
+679:             for j in range(rk_n_stages):
\n", + "
      __pyx_t_7 = __pyx_v_rk_n_stages;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_j = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_rk_n_stages;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_j = __pyx_t_11;\n",
+       "
 680:                 # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match
\n", + "
 681:                 #  the shape of B.
\n", + "
+682:                 for i in range(y_size):
\n", + "
        __pyx_t_17 = __pyx_v_y_size;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_i = __pyx_t_19;\n",
+       "/* … */\n",
+       "        __pyx_t_18 = __pyx_v_y_size;\n",
+       "        __pyx_t_19 = __pyx_t_18;\n",
+       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "          __pyx_v_i = __pyx_t_20;\n",
+       "
+683:                     if j == 0:
\n", + "
          __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "          if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          }\n",
+       "/* … */\n",
+       "          __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "          if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          }\n",
+       "
 684:                         # Initialize
\n", + "
+685:                         y_new_view[i] = y_old_view[i]
\n", + "
            __pyx_t_32 = __pyx_v_i;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_32 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "/* … */\n",
+       "            __pyx_t_33 = __pyx_v_i;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_33 * __pyx_v_y_old_view.strides[0]) )));\n",
+       "
+686:                     y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)
\n", + "
          __pyx_t_32 = __pyx_v_i;\n",
+       "          __pyx_t_12 = __pyx_v_j;\n",
+       "          __pyx_t_31 = __pyx_v_i;\n",
+       "          __pyx_t_24 = __pyx_v_j;\n",
+       "          __pyx_t_14 = __pyx_v_i;\n",
+       "          *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_32 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_31 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_24 * __pyx_v_B_view.strides[0]) )))) * __pyx_v_step));\n",
+       "        }\n",
+       "      }\n",
+       "/* … */\n",
+       "          __pyx_t_33 = __pyx_v_i;\n",
+       "          __pyx_t_12 = __pyx_v_j;\n",
+       "          __pyx_t_32 = __pyx_v_i;\n",
+       "          __pyx_t_25 = __pyx_v_j;\n",
+       "          __pyx_t_14 = __pyx_v_i;\n",
+       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_33 * __pyx_v_y_new_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_32 * __pyx_v_K_view.strides[1]) ))), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_25 * __pyx_v_B_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
+       "        }\n",
+       "      }\n",
+       "
 687: 
\n", + "
+688:             if use_args:
\n", + "
      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L109;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L109;\n",
+       "      }\n",
+       "
+689:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", + "
        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_GIVEREF(__pyx_t_15);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
+       "        __Pyx_INCREF(__pyx_v_y_new);\n",
+       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_y_new);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_diffeq_out);\n",
+       "        __pyx_t_15 = 0;\n",
+       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "          __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_15 = PyNumber_Add(__pyx_t_9, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_GIVEREF(__pyx_t_15);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
+       "        __Pyx_INCREF(__pyx_v_y_new);\n",
+       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_y_new);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_diffeq_out);\n",
+       "        __pyx_t_15 = 0;\n",
+       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "          __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        }\n",
+       "        __pyx_t_15 = PyNumber_Add(__pyx_t_9, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "
 690:             else:
\n", + "
+691:                 diffeq(t_new, y_new, diffeq_out)
\n", + "
      /*else*/ {\n",
+       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "        __pyx_t_8 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
+       "        __pyx_t_13 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
+       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);\n",
+       "          if (likely(__pyx_t_1)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
+       "            __Pyx_INCREF(__pyx_t_1);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_8, function);\n",
+       "            __pyx_t_13 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_9);\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      }\n",
+       "      __pyx_L109:;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "        __pyx_t_8 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
+       "        __pyx_t_13 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
+       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);\n",
+       "          if (likely(__pyx_t_1)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
+       "            __Pyx_INCREF(__pyx_t_1);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_8, function);\n",
+       "            __pyx_t_13 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
+       "          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_9);\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      }\n",
+       "      __pyx_L109:;\n",
+       "
 692: 
\n", + "
 693: 
\n", + "
+694:             for i in range(store_loop_size):
\n", + "
      __pyx_t_7 = __pyx_v_store_loop_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_store_loop_size;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+695:                 if i < extra_start:
\n", + "
        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L112;\n",
+       "        }\n",
+       "/* … */\n",
+       "        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L112;\n",
+       "        }\n",
+       "
 696:                     # Set diffeq results
\n", + "
+697:                     dydt_new_view[i] = diffeq_out_view[i]
\n", + "
          __pyx_t_24 = __pyx_v_i;\n",
+       "          __pyx_t_31 = __pyx_v_i;\n",
+       "          *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_31 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "/* … */\n",
+       "          __pyx_t_25 = __pyx_v_i;\n",
+       "          __pyx_t_32 = __pyx_v_i;\n",
+       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_32 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_25 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "
 698: 
\n", + "
 699:                     # Set last array of K equal to dydt
\n", + "
+700:                     K_view[rk_n_stages, i] = dydt_new_view[i]
\n", + "
          __pyx_t_24 = __pyx_v_i;\n",
+       "          __pyx_t_31 = __pyx_v_rk_n_stages;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_31 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_24 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "/* … */\n",
+       "          __pyx_t_25 = __pyx_v_i;\n",
+       "          __pyx_t_32 = __pyx_v_rk_n_stages;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_32 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_25 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "
 701: 
\n", + "
 702:                 else:
\n", + "
 703:                     # Set extra results
\n", + "
+704:                     extra_result_view[i - extra_start] = diffeq_out_view[i]
\n", + "
        /*else*/ {\n",
+       "          __pyx_t_24 = __pyx_v_i;\n",
+       "          __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
+       "          *((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "        }\n",
+       "        __pyx_L112:;\n",
+       "      }\n",
+       "/* … */\n",
+       "        /*else*/ {\n",
+       "          __pyx_t_25 = __pyx_v_i;\n",
+       "          __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
+       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_25 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "        }\n",
+       "        __pyx_L112:;\n",
+       "      }\n",
+       "
 705: 
\n", + "
+706:             if rk_method == 2:
\n", + "
      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L113;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L113;\n",
+       "      }\n",
+       "
 707:                 # Calculate Error for DOP853
\n", + "
 708:                 # Find norms for each error
\n", + "
+709:                 error_norm5 = 0.
\n", + "
        __pyx_v_error_norm5 = 0.;\n",
+       "/* … */\n",
+       "        __pyx_v_error_norm5 = 0.;\n",
+       "
+710:                 error_norm3 = 0.
\n", + "
        __pyx_v_error_norm3 = 0.;\n",
+       "/* … */\n",
+       "        __pyx_v_error_norm3 = 0.;\n",
+       "
 711:                 # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale
\n", + "
+712:                 for i in range(y_size):
\n", + "
        __pyx_t_7 = __pyx_v_y_size;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "        __pyx_t_7 = __pyx_v_y_size;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
+713:                     scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol
\n", + "
          __pyx_t_24 = __pyx_v_i;\n",
+       "          __pyx_t_27 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) ))));\n",
+       "          __pyx_t_24 = __pyx_v_i;\n",
+       "          __pyx_t_26 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_24 * __pyx_v_y_old_view.strides[0]) ))));\n",
+       "          if ((__pyx_t_27 > __pyx_t_26)) {\n",
+       "            __pyx_t_25 = __pyx_t_27;\n",
+       "          } else {\n",
+       "            __pyx_t_25 = __pyx_t_26;\n",
+       "          }\n",
+       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_25 * __pyx_v_rtol));\n",
+       "/* … */\n",
+       "          __pyx_t_25 = __pyx_v_i;\n",
+       "          __pyx_t_28 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) ))));\n",
+       "          __pyx_t_25 = __pyx_v_i;\n",
+       "          __pyx_t_27 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_25 * __pyx_v_y_old_view.strides[0]) ))));\n",
+       "          if ((__pyx_t_28 > __pyx_t_27)) {\n",
+       "            __pyx_t_26 = __pyx_t_28;\n",
+       "          } else {\n",
+       "            __pyx_t_26 = __pyx_t_27;\n",
+       "          }\n",
+       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_26 * __pyx_v_rtol));\n",
+       "
+714:                     for j in range(rk_n_stages_plus1):
\n", + "
          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "          __pyx_t_18 = __pyx_v_rk_n_stages_plus1;\n",
+       "          __pyx_t_19 = __pyx_t_18;\n",
+       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "            __pyx_v_j = __pyx_t_20;\n",
+       "
+715:                         if j == 0:
\n", + "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "/* … */\n",
+       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "
 716:                             # Initialize
\n", + "
+717:                             error_dot_1 = 0.
\n", + "
              __pyx_v_error_dot_1 = 0.;\n",
+       "/* … */\n",
+       "              __pyx_v_error_dot_1 = __pyx_t_double_complex_from_parts(0., 0);\n",
+       "
+718:                             error_dot_2 = 0.
\n", + "
              __pyx_v_error_dot_2 = 0.;\n",
+       "/* … */\n",
+       "              __pyx_v_error_dot_2 = __pyx_t_double_complex_from_parts(0., 0);\n",
+       "
 719: 
\n", + "
+720:                         K_scale = K_view[j, i] / <double_numeric>scale
\n", + "
            __pyx_t_24 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) / ((double)__pyx_v_scale));\n",
+       "/* … */\n",
+       "            __pyx_t_25 = __pyx_v_j;\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            __pyx_v_K_scale = __Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_25 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))), __pyx_t_double_complex_from_parts(((double)__pyx_v_scale), 0));\n",
+       "
+721:                         error_dot_1 += K_scale * E3_view[j]
\n", + "
            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_v_error_dot_1 = (__pyx_v_error_dot_1 + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
+       "/* … */\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_v_error_dot_1 = __Pyx_c_sum_double(__pyx_v_error_dot_1, __Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
+       "
+722:                         error_dot_2 += K_scale * E5_view[j]
\n", + "
            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_v_error_dot_2 = (__pyx_v_error_dot_2 + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )))));\n",
+       "          }\n",
+       "/* … */\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_v_error_dot_2 = __Pyx_c_sum_double(__pyx_v_error_dot_2, __Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )))));\n",
+       "          }\n",
+       "
 723: 
\n", + "
+724:                     error_norm3_abs = dabs(error_dot_1)
\n", + "
          __pyx_v_error_norm3_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm3_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
+       "
+725:                     error_norm5_abs = dabs(error_dot_2)
\n", + "
          __pyx_v_error_norm5_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_2);\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm5_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_2);\n",
+       "
 726: 
\n", + "
+727:                     error_norm3 += (error_norm3_abs * error_norm3_abs)
\n", + "
          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
+       "
+728:                     error_norm5 += (error_norm5_abs * error_norm5_abs)
\n", + "
          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
+       "        }\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
+       "        }\n",
+       "
 729: 
\n", + "
 730:                 # Check if errors are zero
\n", + "
+731:                 if (error_norm5 == 0.) and (error_norm3 == 0.):
\n", + "
        __pyx_t_5 = (__pyx_v_error_norm5 == 0.);\n",
+       "        if (__pyx_t_5) {\n",
+       "        } else {\n",
+       "          __pyx_t_4 = __pyx_t_5;\n",
+       "          goto __pyx_L120_bool_binop_done;\n",
+       "        }\n",
+       "        __pyx_t_5 = (__pyx_v_error_norm3 == 0.);\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        __pyx_L120_bool_binop_done:;\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L119;\n",
+       "        }\n",
+       "/* … */\n",
+       "        __pyx_t_5 = (__pyx_v_error_norm5 == 0.);\n",
+       "        if (__pyx_t_5) {\n",
+       "        } else {\n",
+       "          __pyx_t_4 = __pyx_t_5;\n",
+       "          goto __pyx_L120_bool_binop_done;\n",
+       "        }\n",
+       "        __pyx_t_5 = (__pyx_v_error_norm3 == 0.);\n",
+       "        __pyx_t_4 = __pyx_t_5;\n",
+       "        __pyx_L120_bool_binop_done:;\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L119;\n",
+       "        }\n",
+       "
+732:                     error_norm = 0.
\n", + "
          __pyx_v_error_norm = 0.;\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm = 0.;\n",
+       "
 733:                 else:
\n", + "
+734:                     error_denom = error_norm5 + 0.01 * error_norm3
\n", + "
        /*else*/ {\n",
+       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
+       "/* … */\n",
+       "        /*else*/ {\n",
+       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
+       "
+735:                     error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)
\n", + "
          __pyx_v_error_norm = ((__pyx_v_step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl)));\n",
+       "        }\n",
+       "        __pyx_L119:;\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm = ((__pyx_v_step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl)));\n",
+       "        }\n",
+       "        __pyx_L119:;\n",
+       "
 736: 
\n", + "
 737:             else:
\n", + "
 738:                 # Calculate Error for RK23 and RK45
\n", + "
 739:                 # Dot Product (K, E) * step / scale
\n", + "
+740:                 error_norm = 0.
\n", + "
      /*else*/ {\n",
+       "        __pyx_v_error_norm = 0.;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_error_norm = 0.;\n",
+       "
+741:                 for i in range(y_size):
\n", + "
        __pyx_t_7 = __pyx_v_y_size;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "        __pyx_t_7 = __pyx_v_y_size;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
+742:                     scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol
\n", + "
          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_25 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) ))));\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_27 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) ))));\n",
+       "          if ((__pyx_t_25 > __pyx_t_27)) {\n",
+       "            __pyx_t_26 = __pyx_t_25;\n",
+       "          } else {\n",
+       "            __pyx_t_26 = __pyx_t_27;\n",
+       "          }\n",
+       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_26 * __pyx_v_rtol));\n",
+       "/* … */\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_26 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) ))));\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_28 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) ))));\n",
+       "          if ((__pyx_t_26 > __pyx_t_28)) {\n",
+       "            __pyx_t_27 = __pyx_t_26;\n",
+       "          } else {\n",
+       "            __pyx_t_27 = __pyx_t_28;\n",
+       "          }\n",
+       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_27 * __pyx_v_rtol));\n",
+       "
+743:                     for j in range(rk_n_stages_plus1):
\n", + "
          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "          __pyx_t_18 = __pyx_v_rk_n_stages_plus1;\n",
+       "          __pyx_t_19 = __pyx_t_18;\n",
+       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "            __pyx_v_j = __pyx_t_20;\n",
+       "
+744:                         if j == 0:
\n", + "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "/* … */\n",
+       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
+       "            if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            }\n",
+       "
 745:                             # Initialize
\n", + "
+746:                             error_dot_1 = 0.
\n", + "
              __pyx_v_error_dot_1 = 0.;\n",
+       "/* … */\n",
+       "              __pyx_v_error_dot_1 = __pyx_t_double_complex_from_parts(0., 0);\n",
+       "
 747: 
\n", + "
+748:                         K_scale = K_view[j, i] / <double_numeric> scale
\n", + "
            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_t_24 = __pyx_v_i;\n",
+       "            __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_24 * __pyx_v_K_view.strides[1]) ))) / ((double)__pyx_v_scale));\n",
+       "/* … */\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            __pyx_t_25 = __pyx_v_i;\n",
+       "            __pyx_v_K_scale = __Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_25 * __pyx_v_K_view.strides[1]) ))), __pyx_t_double_complex_from_parts(((double)__pyx_v_scale), 0));\n",
+       "
+749:                         error_dot_1 += K_scale * E_view[j] * step
\n", + "
            __pyx_t_24 = __pyx_v_j;\n",
+       "            __pyx_v_error_dot_1 = (__pyx_v_error_dot_1 + ((__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_24 * __pyx_v_E_view.strides[0]) )))) * __pyx_v_step));\n",
+       "          }\n",
+       "/* … */\n",
+       "            __pyx_t_25 = __pyx_v_j;\n",
+       "            __pyx_v_error_dot_1 = __Pyx_c_sum_double(__pyx_v_error_dot_1, __Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_25 * __pyx_v_E_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
+       "          }\n",
+       "
 750: 
\n", + "
+751:                     error_norm_abs = dabs(error_dot_1)
\n", + "
          __pyx_v_error_norm_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
+       "
+752:                     error_norm += (error_norm_abs * error_norm_abs)
\n", + "
          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
+       "        }\n",
+       "/* … */\n",
+       "          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
+       "        }\n",
+       "
+753:                 error_norm = sqrt(error_norm) / y_size_sqrt
\n", + "
        __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_y_size_sqrt);\n",
+       "      }\n",
+       "      __pyx_L113:;\n",
+       "/* … */\n",
+       "        __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_y_size_sqrt);\n",
+       "      }\n",
+       "      __pyx_L113:;\n",
+       "
 754: 
\n", + "
+755:             if error_norm < 1.:
\n", + "
      __pyx_t_4 = (__pyx_v_error_norm < 1.);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L127;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_error_norm < 1.);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L127;\n",
+       "      }\n",
+       "
 756:                 # The error is low! Let's update this step for the next time loop
\n", + "
+757:                 if error_norm == 0.:
\n", + "
        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L128;\n",
+       "        }\n",
+       "/* … */\n",
+       "        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "          goto __pyx_L128;\n",
+       "        }\n",
+       "
+758:                     step_factor = MAX_FACTOR
\n", + "
          __pyx_v_step_factor = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
+       "/* … */\n",
+       "          __pyx_v_step_factor = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
+       "
 759:                 else:
\n", + "
+760:                     error_pow = error_norm**-error_expo
\n", + "
        /*else*/ {\n",
+       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
+       "/* … */\n",
+       "        /*else*/ {\n",
+       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
+       "
+761:                     step_factor = min(MAX_FACTOR, SAFETY * error_pow)
\n", + "
          __pyx_t_26 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
+       "          __pyx_t_25 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
+       "          if ((__pyx_t_26 < __pyx_t_25)) {\n",
+       "            __pyx_t_27 = __pyx_t_26;\n",
+       "          } else {\n",
+       "            __pyx_t_27 = __pyx_t_25;\n",
+       "          }\n",
+       "          __pyx_v_step_factor = __pyx_t_27;\n",
+       "        }\n",
+       "        __pyx_L128:;\n",
+       "/* … */\n",
+       "          __pyx_t_27 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
+       "          __pyx_t_26 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
+       "          if ((__pyx_t_27 < __pyx_t_26)) {\n",
+       "            __pyx_t_28 = __pyx_t_27;\n",
+       "          } else {\n",
+       "            __pyx_t_28 = __pyx_t_26;\n",
+       "          }\n",
+       "          __pyx_v_step_factor = __pyx_t_28;\n",
+       "        }\n",
+       "        __pyx_L128:;\n",
+       "
 762: 
\n", + "
+763:                 if step_rejected:
\n", + "
        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        }\n",
+       "/* … */\n",
+       "        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
+       "        if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        }\n",
+       "
 764:                     # There were problems with this step size on the previous step loop. Make sure factor does
\n", + "
 765:                     #    not exasperate them.
\n", + "
+766:                     step_factor = min(step_factor, 1.)
\n", + "
          __pyx_t_27 = 1.;\n",
+       "          __pyx_t_26 = __pyx_v_step_factor;\n",
+       "          if ((__pyx_t_27 < __pyx_t_26)) {\n",
+       "            __pyx_t_25 = __pyx_t_27;\n",
+       "          } else {\n",
+       "            __pyx_t_25 = __pyx_t_26;\n",
+       "          }\n",
+       "          __pyx_v_step_factor = __pyx_t_25;\n",
+       "/* … */\n",
+       "          __pyx_t_28 = 1.;\n",
+       "          __pyx_t_27 = __pyx_v_step_factor;\n",
+       "          if ((__pyx_t_28 < __pyx_t_27)) {\n",
+       "            __pyx_t_26 = __pyx_t_28;\n",
+       "          } else {\n",
+       "            __pyx_t_26 = __pyx_t_27;\n",
+       "          }\n",
+       "          __pyx_v_step_factor = __pyx_t_26;\n",
+       "
 767: 
\n", + "
+768:                 step_size = step_size * step_factor
\n", + "
        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
+       "/* … */\n",
+       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
+       "
+769:                 step_accepted = True
\n", + "
        __pyx_v_step_accepted = 1;\n",
+       "/* … */\n",
+       "        __pyx_v_step_accepted = 1;\n",
+       "
 770:             else:
\n", + "
+771:                 error_pow = error_norm**-error_expo
\n", + "
      /*else*/ {\n",
+       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
+       "
+772:                 step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)
\n", + "
        __pyx_t_25 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
+       "        __pyx_t_27 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MIN_FACTOR;\n",
+       "        if ((__pyx_t_25 > __pyx_t_27)) {\n",
+       "          __pyx_t_26 = __pyx_t_25;\n",
+       "        } else {\n",
+       "          __pyx_t_26 = __pyx_t_27;\n",
+       "        }\n",
+       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_26);\n",
+       "/* … */\n",
+       "        __pyx_t_26 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
+       "        __pyx_t_28 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MIN_FACTOR;\n",
+       "        if ((__pyx_t_26 > __pyx_t_28)) {\n",
+       "          __pyx_t_27 = __pyx_t_26;\n",
+       "        } else {\n",
+       "          __pyx_t_27 = __pyx_t_28;\n",
+       "        }\n",
+       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_27);\n",
+       "
+773:                 step_rejected = True
\n", + "
        __pyx_v_step_rejected = 1;\n",
+       "      }\n",
+       "      __pyx_L127:;\n",
+       "    }\n",
+       "    __pyx_L87_break:;\n",
+       "/* … */\n",
+       "        __pyx_v_step_rejected = 1;\n",
+       "      }\n",
+       "      __pyx_L127:;\n",
+       "    }\n",
+       "    __pyx_L87_break:;\n",
+       "
 774: 
\n", + "
+775:         if step_error:
\n", + "
    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 776:             # Issue with step convergence
\n", + "
+777:             status = -1
\n", + "
      __pyx_v_status = -1;\n",
+       "/* … */\n",
+       "      __pyx_v_status = -1;\n",
+       "
+778:             break
\n", + "
      goto __pyx_L80_break;\n",
+       "/* … */\n",
+       "      goto __pyx_L80_break;\n",
+       "
+779:         elif not step_accepted:
\n", + "
    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 780:             # Issue with step convergence
\n", + "
+781:             status = -7
\n", + "
      __pyx_v_status = -7;\n",
+       "/* … */\n",
+       "      __pyx_v_status = -7;\n",
+       "
+782:             break
\n", + "
      goto __pyx_L80_break;\n",
+       "/* … */\n",
+       "      goto __pyx_L80_break;\n",
+       "
 783: 
\n", + "
 784:         # End of step loop. Update the _now variables
\n", + "
+785:         t_old = t_new
\n", + "
    __pyx_v_t_old = __pyx_v_t_new;\n",
+       "/* … */\n",
+       "    __pyx_v_t_old = __pyx_v_t_new;\n",
+       "
+786:         for i in range(y_size):
\n", + "
    __pyx_t_7 = __pyx_v_y_size;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_y_size;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+787:             y_old_view[i] = y_new_view[i]
\n", + "
      __pyx_t_24 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )));\n",
+       "/* … */\n",
+       "      __pyx_t_25 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) )));\n",
+       "
+788:             dydt_old_view[i] = dydt_new_view[i]
\n", + "
      __pyx_t_24 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_24 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "    }\n",
+       "/* … */\n",
+       "      __pyx_t_25 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_25 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "    }\n",
+       "
 789: 
\n", + "
 790:         # Save data
\n", + "
+791:         if len_t >= (num_concats * expected_size_to_use):
\n", + "
    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 792:             # There is more data than we have room in our arrays. 
\n", + "
 793:             # Build new arrays with more space.
\n", + "
 794:             # OPT: Note this is an expensive operation. 
\n", + "
+795:             num_concats += 1
\n", + "
      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
+       "/* … */\n",
+       "      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
+       "
+796:             new_size = num_concats * expected_size_to_use
\n", + "
      __pyx_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
+       "/* … */\n",
+       "      __pyx_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
+       "
+797:             time_domain_array_new      = np.empty(new_size, dtype=np.float64, order='C')
\n", + "
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_GIVEREF(__pyx_t_9);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
+       "      __pyx_t_9 = 0;\n",
+       "      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_2);\n",
+       "      __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_GIVEREF(__pyx_t_9);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
+       "      __pyx_t_9 = 0;\n",
+       "      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_2);\n",
+       "      __pyx_t_2 = 0;\n",
+       "
+798:             y_results_array_new        = np.empty((store_loop_size, new_size), dtype=DTYPE, order='C')
\n", + "
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_GIVEREF(__pyx_t_2);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "      __Pyx_GIVEREF(__pyx_t_15);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_15);\n",
+       "      __pyx_t_2 = 0;\n",
+       "      __pyx_t_15 = 0;\n",
+       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_GIVEREF(__pyx_t_8);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
+       "      __pyx_t_8 = 0;\n",
+       "      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_2);\n",
+       "      __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_9);\n",
+       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      __Pyx_GIVEREF(__pyx_t_2);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "      __Pyx_GIVEREF(__pyx_t_15);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_15);\n",
+       "      __pyx_t_2 = 0;\n",
+       "      __pyx_t_15 = 0;\n",
+       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_15);\n",
+       "      __Pyx_GIVEREF(__pyx_t_8);\n",
+       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
+       "      __pyx_t_8 = 0;\n",
+       "      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_8);\n",
+       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_2);\n",
+       "      __pyx_t_2 = 0;\n",
+       "
+799:             time_domain_array_new_view = time_domain_array_new
\n", + "
      __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
+       "      __pyx_v_time_domain_array_new_view = __pyx_t_10;\n",
+       "      __pyx_t_10.memview = NULL;\n",
+       "      __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "      __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
+       "      __pyx_v_time_domain_array_new_view = __pyx_t_17;\n",
+       "      __pyx_t_17.memview = NULL;\n",
+       "      __pyx_t_17.data = NULL;\n",
+       "
+800:             y_results_array_new_view   = y_results_array_new
\n", + "
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
+       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
+       "      __pyx_t_16.memview = NULL;\n",
+       "      __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
+       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
+       "      __pyx_t_16.memview = NULL;\n",
+       "      __pyx_t_16.data = NULL;\n",
+       "
 801: 
\n", + "
 802:             # Loop through time to fill in these new arrays with the old values
\n", + "
+803:             for i in range(len_t):
\n", + "
      __pyx_t_7 = __pyx_v_len_t;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "      __pyx_t_7 = __pyx_v_len_t;\n",
+       "      __pyx_t_3 = __pyx_t_7;\n",
+       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "        __pyx_v_i = __pyx_t_11;\n",
+       "
+804:                 time_domain_array_new_view[i] = time_domain_array_view[i]
\n", + "
        __pyx_t_24 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_12 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_24 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
+       "/* … */\n",
+       "        __pyx_t_25 = __pyx_v_i;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_12 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_25 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
+       "
 805: 
\n", + "
+806:                 for j in range(store_loop_size):
\n", + "
        __pyx_t_17 = __pyx_v_store_loop_size;\n",
+       "        __pyx_t_18 = __pyx_t_17;\n",
+       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "          __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "        __pyx_t_18 = __pyx_v_store_loop_size;\n",
+       "        __pyx_t_19 = __pyx_t_18;\n",
+       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "          __pyx_v_j = __pyx_t_20;\n",
+       "
+807:                     y_results_array_new_view[j, i] = y_results_array_view[j, i]
\n", + "
          __pyx_t_24 = __pyx_v_j;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_31 = __pyx_v_j;\n",
+       "          __pyx_t_32 = __pyx_v_i;\n",
+       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_31 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_32 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_24 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "        }\n",
+       "      }\n",
+       "/* … */\n",
+       "          __pyx_t_25 = __pyx_v_j;\n",
+       "          __pyx_t_12 = __pyx_v_i;\n",
+       "          __pyx_t_32 = __pyx_v_j;\n",
+       "          __pyx_t_33 = __pyx_v_i;\n",
+       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_32 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_33 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_25 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "        }\n",
+       "      }\n",
+       "
 808: 
\n", + "
 809:             # No longer need the old arrays. Change where the view is pointing and delete them.
\n", + "
+810:             y_results_array_view = y_results_array_new
\n", + "
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 810, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
+       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
+       "      __pyx_t_16.memview = NULL;\n",
+       "      __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 810, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
+       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
+       "      __pyx_t_16.memview = NULL;\n",
+       "      __pyx_t_16.data = NULL;\n",
+       "
+811:             time_domain_array_view = time_domain_array_new
\n", + "
      __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 811, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
+       "      __pyx_v_time_domain_array_view = __pyx_t_10;\n",
+       "      __pyx_t_10.memview = NULL;\n",
+       "      __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "      __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 811, __pyx_L1_error)\n",
+       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
+       "      __pyx_v_time_domain_array_view = __pyx_t_17;\n",
+       "      __pyx_t_17.memview = NULL;\n",
+       "      __pyx_t_17.data = NULL;\n",
+       "
 812:             # TODO: Delete the old arrays?
\n", + "
 813: 
\n", + "
 814:         # There should be room in the arrays to add new data.
\n", + "
+815:         time_domain_array_view[len_t] = t_new
\n", + "
    __pyx_t_12 = __pyx_v_len_t;\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
+       "/* … */\n",
+       "    __pyx_t_12 = __pyx_v_len_t;\n",
+       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
+       "
 816:         # To match the format that scipy follows, we will take the transpose of y.
\n", + "
+817:         for i in range(store_loop_size):
\n", + "
    __pyx_t_7 = __pyx_v_store_loop_size;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_store_loop_size;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+818:             if i < extra_start:
\n", + "
      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L140;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L140;\n",
+       "      }\n",
+       "
 819:                 # Pull from y result
\n", + "
+820:                 y_results_array_view[i, len_t] = y_new_view[i]
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_24 = __pyx_v_i;\n",
+       "        __pyx_t_32 = __pyx_v_len_t;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_24 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_32 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_25 = __pyx_v_i;\n",
+       "        __pyx_t_33 = __pyx_v_len_t;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_25 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_33 * __pyx_v_y_results_array_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
+       "
 821:             else:
\n", + "
 822:                 # Pull from extra
\n", + "
+823:                 y_results_array_view[i, len_t] = extra_result_view[i - extra_start]
\n", + "
      /*else*/ {\n",
+       "        __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
+       "        __pyx_t_32 = __pyx_v_i;\n",
+       "        __pyx_t_24 = __pyx_v_len_t;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_32 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )));\n",
+       "      }\n",
+       "      __pyx_L140:;\n",
+       "    }\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
+       "        __pyx_t_33 = __pyx_v_i;\n",
+       "        __pyx_t_25 = __pyx_v_len_t;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_33 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_array_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )));\n",
+       "      }\n",
+       "      __pyx_L140:;\n",
+       "    }\n",
+       "
 824: 
\n", + "
 825:         # Increase number of time points.
\n", + "
+826:         len_t += 1
\n", + "
    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
+       "  }\n",
+       "  __pyx_L80_break:;\n",
+       "/* … */\n",
+       "    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
+       "  }\n",
+       "  __pyx_L80_break:;\n",
+       "
 827: 
\n", + "
 828:     # # Clean up output.
\n", + "
+829:     if status == 1:
\n", + "
  __pyx_t_4 = (__pyx_v_status == 1);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_t_4 = (__pyx_v_status == 1);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+830:         success = True
\n", + "
    __pyx_v_success = 1;\n",
+       "/* … */\n",
+       "    __pyx_v_success = 1;\n",
+       "
 831: 
\n", + "
 832:     # Create output arrays. To match the format that scipy follows, we will take the transpose of y.
\n", + "
+833:     if success:
\n", + "
  __pyx_t_4 = (__pyx_v_success != 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L142;\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_t_4 = (__pyx_v_success != 0);\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    goto __pyx_L142;\n",
+       "  }\n",
+       "
 834:         # Build final output arrays.
\n", + "
 835:         # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.
\n", + "
 836:         # This process will remove that junk and leave only the wanted data.
\n", + "
+837:         solution_y = np.empty((store_loop_size, len_t), dtype=DTYPE, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_15);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_15);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_v_solution_y = __pyx_t_2;\n",
+       "    __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_15);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_15);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_v_solution_y = __pyx_t_2;\n",
+       "    __pyx_t_2 = 0;\n",
+       "
+838:         solution_t = np.empty(len_t, dtype=np.float64, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_v_solution_t = __pyx_t_1;\n",
+       "    __pyx_t_1 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_v_solution_t = __pyx_t_1;\n",
+       "    __pyx_t_1 = 0;\n",
+       "
 839: 
\n", + "
 840:         # Link memory views
\n", + "
+841:         solution_y_view = solution_y
\n", + "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 841, __pyx_L1_error)\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 841, __pyx_L1_error)\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+842:         solution_t_view = solution_t
\n", + "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "    __pyx_v_solution_t_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
+       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
+       "    __pyx_t_17.memview = NULL;\n",
+       "    __pyx_t_17.data = NULL;\n",
+       "
 843: 
\n", + "
 844:         # Populate values
\n", + "
+845:         for i in range(len_t):
\n", + "
    __pyx_t_7 = __pyx_v_len_t;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_len_t;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+846:             solution_t_view[i] = time_domain_array_view[i]
\n", + "
      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_24 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_24 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
+       "/* … */\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      __pyx_t_25 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_25 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
+       "
+847:             for j in range(store_loop_size):
\n", + "
      __pyx_t_17 = __pyx_v_store_loop_size;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_store_loop_size;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_j = __pyx_t_20;\n",
+       "
+848:                 solution_y_view[j, i] = y_results_array_view[j, i]
\n", + "
        __pyx_t_12 = __pyx_v_j;\n",
+       "        __pyx_t_24 = __pyx_v_i;\n",
+       "        __pyx_t_32 = __pyx_v_j;\n",
+       "        __pyx_t_31 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_32 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_31 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "      }\n",
+       "    }\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_j;\n",
+       "        __pyx_t_25 = __pyx_v_i;\n",
+       "        __pyx_t_33 = __pyx_v_j;\n",
+       "        __pyx_t_32 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_33 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_32 * __pyx_v_solution_y_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "      }\n",
+       "    }\n",
+       "
 849:     else:
\n", + "
 850:         # Build nan arrays
\n", + "
+851:         solution_y = np.nan * np.ones((store_loop_size, 1), dtype=DTYPE, order='C')
\n", + "
  /*else*/ {\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "    __Pyx_INCREF(__pyx_int_1);\n",
+       "    __Pyx_GIVEREF(__pyx_int_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_1);\n",
+       "    __pyx_t_1 = 0;\n",
+       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __pyx_v_solution_y = __pyx_t_9;\n",
+       "    __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "  /*else*/ {\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
+       "    __Pyx_INCREF(__pyx_int_1);\n",
+       "    __Pyx_GIVEREF(__pyx_int_1);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_1);\n",
+       "    __pyx_t_1 = 0;\n",
+       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __pyx_v_solution_y = __pyx_t_9;\n",
+       "    __pyx_t_9 = 0;\n",
+       "
+852:         solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nan); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __pyx_v_solution_t = __pyx_t_9;\n",
+       "    __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nan); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __pyx_v_solution_t = __pyx_t_9;\n",
+       "    __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__19);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__19);\n",
+       "
 853: 
\n", + "
 854:         # Link memory views
\n", + "
+855:         solution_y_view = solution_y
\n", + "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 855, __pyx_L1_error)\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 855, __pyx_L1_error)\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+856:         solution_t_view = solution_t
\n", + "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
+       "    __pyx_v_solution_t_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "  }\n",
+       "  __pyx_L142:;\n",
+       "/* … */\n",
+       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
+       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
+       "    __pyx_t_17.memview = NULL;\n",
+       "    __pyx_t_17.data = NULL;\n",
+       "  }\n",
+       "  __pyx_L142:;\n",
+       "
 857: 
\n", + "
 858:     cdef double_numeric[:, :] y_results_reduced_view
\n", + "
 859:     cdef double_numeric[:] y_result_timeslice_view, y_result_temp_view, y_interp_view
\n", + "
 860: 
\n", + "
+861:     if run_interpolation and success:
\n", + "
  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
+       "  if (__pyx_t_5) {\n",
+       "  } else {\n",
+       "    __pyx_t_4 = __pyx_t_5;\n",
+       "    goto __pyx_L148_bool_binop_done;\n",
+       "  }\n",
+       "  __pyx_t_5 = (__pyx_v_success != 0);\n",
+       "  __pyx_t_4 = __pyx_t_5;\n",
+       "  __pyx_L148_bool_binop_done:;\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "/* … */\n",
+       "  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
+       "  if (__pyx_t_5) {\n",
+       "  } else {\n",
+       "    __pyx_t_4 = __pyx_t_5;\n",
+       "    goto __pyx_L148_bool_binop_done;\n",
+       "  }\n",
+       "  __pyx_t_5 = (__pyx_v_success != 0);\n",
+       "  __pyx_t_4 = __pyx_t_5;\n",
+       "  __pyx_L148_bool_binop_done:;\n",
+       "  if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+862:         old_status = status
\n", + "
    __pyx_v_old_status = __pyx_v_status;\n",
+       "/* … */\n",
+       "    __pyx_v_old_status = __pyx_v_status;\n",
+       "
+863:         status = 2
\n", + "
    __pyx_v_status = 2;\n",
+       "/* … */\n",
+       "    __pyx_v_status = 2;\n",
+       "
 864:         # User only wants data at specific points.
\n", + "
 865: 
\n", + "
 866:         # The current version of this function has not implemented sicpy's dense output.
\n", + "
 867:         #   Instead we use an interpolation.
\n", + "
 868:         # OPT: this could be done inside the integration loop for performance gains.
\n", + "
+869:         y_results_reduced       = np.empty((total_size, len_teval), dtype=DTYPE, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_8);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_8 = 0;\n",
+       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_v_y_results_reduced = __pyx_t_9;\n",
+       "    __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_8);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_8 = 0;\n",
+       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_v_y_results_reduced = __pyx_t_9;\n",
+       "    __pyx_t_9 = 0;\n",
+       "
+870:         y_result_timeslice      = np.empty(len_t, dtype=DTYPE, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_v_y_result_timeslice = __pyx_t_15;\n",
+       "    __pyx_t_15 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __pyx_v_y_result_timeslice = __pyx_t_15;\n",
+       "    __pyx_t_15 = 0;\n",
+       "
+871:         y_result_temp           = np.empty(len_teval, dtype=DTYPE, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_GIVEREF(__pyx_t_15);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_15);\n",
+       "    __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __pyx_v_y_result_temp = __pyx_t_2;\n",
+       "    __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_GIVEREF(__pyx_t_15);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_15);\n",
+       "    __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __pyx_v_y_result_temp = __pyx_t_2;\n",
+       "    __pyx_t_2 = 0;\n",
+       "
+872:         y_results_reduced_view  = y_results_reduced
\n", + "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_reduced, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 872, __pyx_L1_error)\n",
+       "    __pyx_v_y_results_reduced_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_reduced, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 872, __pyx_L1_error)\n",
+       "    __pyx_v_y_results_reduced_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+873:         y_result_timeslice_view = y_result_timeslice
\n", + "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_timeslice, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 873, __pyx_L1_error)\n",
+       "    __pyx_v_y_result_timeslice_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_timeslice, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 873, __pyx_L1_error)\n",
+       "    __pyx_v_y_result_timeslice_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "
+874:         y_result_temp_view      = y_result_temp
\n", + "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_temp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 874, __pyx_L1_error)\n",
+       "    __pyx_v_y_result_temp_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_temp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 874, __pyx_L1_error)\n",
+       "    __pyx_v_y_result_temp_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "
 875: 
\n", + "
+876:         for j in range(y_size):
\n", + "
    __pyx_t_7 = __pyx_v_y_size;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_j = __pyx_t_11;\n",
+       "/* … */\n",
+       "    __pyx_t_7 = __pyx_v_y_size;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_j = __pyx_t_11;\n",
+       "
 877:             # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", + "
 878:             # # Set timeslice equal to the time values at this y_j
\n", + "
+879:             for i in range(len_t):
\n", + "
      __pyx_t_17 = __pyx_v_len_t;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_i = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_len_t;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_i = __pyx_t_20;\n",
+       "
+880:                 y_result_timeslice_view[i] = solution_y_view[j, i]
\n", + "
        __pyx_t_24 = __pyx_v_j;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_31 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_31 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_24 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_12 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "      }\n",
+       "/* … */\n",
+       "        __pyx_t_25 = __pyx_v_j;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_32 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_32 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_25 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_12 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "      }\n",
+       "
 881: 
\n", + "
 882:             # Perform numerical interpolation
\n", + "
 883:             if double_numeric is cython.doublecomplex:
\n", + "
+884:                 interp_complex_array(
\n", + "
      __pyx_f_4CyRK_5array_6interp_interp_complex_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 884, __pyx_L1_error)\n",
+       "
 885:                     t_eval,
\n", + "
 886:                     solution_t_view,
\n", + "
 887:                     y_result_timeslice_view,
\n", + "
 888:                     y_result_temp_view
\n", + "
 889:                     )
\n", + "
 890:             else:
\n", + "
+891:                 interp_array(
\n", + "
      __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 891, __pyx_L1_error)\n",
+       "
 892:                     t_eval,
\n", + "
 893:                     solution_t_view,
\n", + "
 894:                     y_result_timeslice_view,
\n", + "
 895:                     y_result_temp_view
\n", + "
 896:                     )
\n", + "
 897: 
\n", + "
 898:             # Store result.
\n", + "
+899:             for i in range(len_teval):
\n", + "
      __pyx_t_17 = __pyx_v_len_teval;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_i = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_len_teval;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_i = __pyx_t_20;\n",
+       "
+900:                 y_results_reduced_view[j, i] = y_result_temp_view[i]
\n", + "
        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_24 = __pyx_v_j;\n",
+       "        __pyx_t_31 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_31 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_12 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "      }\n",
+       "    }\n",
+       "/* … */\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_25 = __pyx_v_j;\n",
+       "        __pyx_t_32 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_32 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_12 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "      }\n",
+       "    }\n",
+       "
 901: 
\n", + "
+902:         if capture_extra:
\n", + "
    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "/* … */\n",
+       "    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
+       "    if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
 903:             # Right now if there is any extra output then it is stored at each time step used in the RK loop.
\n", + "
 904:             # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?
\n", + "
 905:             #  or do we use the interpolation on y to find new values.
\n", + "
 906:             # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.
\n", + "
+907:             if interpolate_extra:
\n", + "
      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L157;\n",
+       "      }\n",
+       "/* … */\n",
+       "      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
+       "      if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "        goto __pyx_L157;\n",
+       "      }\n",
+       "
 908:                 # Continue the interpolation for the extra values.
\n", + "
+909:                 for j in range(num_extra):
\n", + "
        __pyx_t_7 = __pyx_v_num_extra;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_j = __pyx_t_11;\n",
+       "/* … */\n",
+       "        __pyx_t_7 = __pyx_v_num_extra;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_j = __pyx_t_11;\n",
+       "
 910:                     # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", + "
 911:                     # # Set timeslice equal to the time values at this y_j
\n", + "
+912:                     for i in range(len_t):
\n", + "
          __pyx_t_17 = __pyx_v_len_t;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_i = __pyx_t_19;\n",
+       "/* … */\n",
+       "          __pyx_t_18 = __pyx_v_len_t;\n",
+       "          __pyx_t_19 = __pyx_t_18;\n",
+       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "            __pyx_v_i = __pyx_t_20;\n",
+       "
+913:                         y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]
\n", + "
            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_31 = __pyx_v_i;\n",
+       "            __pyx_t_24 = __pyx_v_i;\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_24 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_31 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "          }\n",
+       "/* … */\n",
+       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_32 = __pyx_v_i;\n",
+       "            __pyx_t_25 = __pyx_v_i;\n",
+       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_25 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_32 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "          }\n",
+       "
 914: 
\n", + "
 915:                     # Perform numerical interpolation
\n", + "
 916:                     if double_numeric is cython.doublecomplex:
\n", + "
+917:                         interp_complex_array(
\n", + "
          __pyx_f_4CyRK_5array_6interp_interp_complex_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 917, __pyx_L1_error)\n",
+       "
 918:                                 t_eval,
\n", + "
 919:                                 solution_t_view,
\n", + "
 920:                                 y_result_timeslice_view,
\n", + "
 921:                                 y_result_temp_view
\n", + "
 922:                                 )
\n", + "
 923:                     else:
\n", + "
+924:                         interp_array(
\n", + "
          __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 924, __pyx_L1_error)\n",
+       "
 925:                                 t_eval,
\n", + "
 926:                                 solution_t_view,
\n", + "
 927:                                 y_result_timeslice_view,
\n", + "
 928:                                 y_result_temp_view
\n", + "
 929:                                 )
\n", + "
 930: 
\n", + "
 931:                     # Store result.
\n", + "
+932:                     for i in range(len_teval):
\n", + "
          __pyx_t_17 = __pyx_v_len_teval;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_i = __pyx_t_19;\n",
+       "/* … */\n",
+       "          __pyx_t_18 = __pyx_v_len_teval;\n",
+       "          __pyx_t_19 = __pyx_t_18;\n",
+       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "            __pyx_v_i = __pyx_t_20;\n",
+       "
+933:                         y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]
\n", + "
            __pyx_t_31 = __pyx_v_i;\n",
+       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_24 = __pyx_v_i;\n",
+       "            *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_31 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "          }\n",
+       "        }\n",
+       "/* … */\n",
+       "            __pyx_t_32 = __pyx_v_i;\n",
+       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_25 = __pyx_v_i;\n",
+       "            *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_32 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "          }\n",
+       "        }\n",
+       "
 934:             else:
\n", + "
 935:                 # Use y and t to recalculate the extra outputs
\n", + "
+936:                 y_interp = np.empty(y_size, dtype=DTYPE)
\n", + "
      /*else*/ {\n",
+       "        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_GIVEREF(__pyx_t_2);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "        __pyx_t_2 = 0;\n",
+       "        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __pyx_v_y_interp = __pyx_t_9;\n",
+       "        __pyx_t_9 = 0;\n",
+       "/* … */\n",
+       "      /*else*/ {\n",
+       "        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_15);\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __Pyx_GIVEREF(__pyx_t_2);\n",
+       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
+       "        __pyx_t_2 = 0;\n",
+       "        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_2);\n",
+       "        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __pyx_v_y_interp = __pyx_t_9;\n",
+       "        __pyx_t_9 = 0;\n",
+       "
+937:                 y_interp_view = y_interp
\n", + "
        __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_interp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 937, __pyx_L1_error)\n",
+       "        __pyx_v_y_interp_view = __pyx_t_10;\n",
+       "        __pyx_t_10.memview = NULL;\n",
+       "        __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "        __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_interp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 937, __pyx_L1_error)\n",
+       "        __pyx_v_y_interp_view = __pyx_t_10;\n",
+       "        __pyx_t_10.memview = NULL;\n",
+       "        __pyx_t_10.data = NULL;\n",
+       "
+938:                 for i in range(len_teval):
\n", + "
        __pyx_t_7 = __pyx_v_len_teval;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "/* … */\n",
+       "        __pyx_t_7 = __pyx_v_len_teval;\n",
+       "        __pyx_t_3 = __pyx_t_7;\n",
+       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "          __pyx_v_i = __pyx_t_11;\n",
+       "
+939:                     time_ = t_eval[i]
\n", + "
          __pyx_t_31 = __pyx_v_i;\n",
+       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_31 * __pyx_v_t_eval.strides[0]) )));\n",
+       "/* … */\n",
+       "          __pyx_t_32 = __pyx_v_i;\n",
+       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_32 * __pyx_v_t_eval.strides[0]) )));\n",
+       "
+940:                     for j in range(y_size):
\n", + "
          __pyx_t_17 = __pyx_v_y_size;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "          __pyx_t_18 = __pyx_v_y_size;\n",
+       "          __pyx_t_19 = __pyx_t_18;\n",
+       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "            __pyx_v_j = __pyx_t_20;\n",
+       "
+941:                         y_interp_view[j] = y_results_reduced_view[j, i]
\n", + "
            __pyx_t_31 = __pyx_v_j;\n",
+       "            __pyx_t_24 = __pyx_v_i;\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            *((double *) ( /* dim=0 */ (__pyx_v_y_interp_view.data + __pyx_t_12 * __pyx_v_y_interp_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_31 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
+       "          }\n",
+       "/* … */\n",
+       "            __pyx_t_32 = __pyx_v_j;\n",
+       "            __pyx_t_25 = __pyx_v_i;\n",
+       "            __pyx_t_12 = __pyx_v_j;\n",
+       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_interp_view.data + __pyx_t_12 * __pyx_v_y_interp_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_32 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
+       "          }\n",
+       "
 942: 
\n", + "
+943:                     if use_args:
\n", + "
          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "          if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            goto __pyx_L168;\n",
+       "          }\n",
+       "/* … */\n",
+       "          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
+       "          if (__pyx_t_4) {\n",
+       "/* … */\n",
+       "            goto __pyx_L168;\n",
+       "          }\n",
+       "
+944:                         diffeq(time_, y_interp, diffeq_out, *args)
\n", + "
            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_9);\n",
+       "            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            __Pyx_GIVEREF(__pyx_t_9);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
+       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
+       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_interp);\n",
+       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
+       "            __pyx_t_9 = 0;\n",
+       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "              __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_9);\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_9);\n",
+       "            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            __Pyx_GIVEREF(__pyx_t_9);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
+       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
+       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_interp);\n",
+       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
+       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
+       "            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
+       "            __pyx_t_9 = 0;\n",
+       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
+       "              __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            }\n",
+       "            __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_9);\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_2);\n",
+       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "
 945:                     else:
\n", + "
+946:                         diffeq(time_, y_interp, diffeq_out)
\n", + "
          /*else*/ {\n",
+       "            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_9);\n",
+       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "            __pyx_t_8 = __pyx_v_diffeq; __pyx_t_15 = NULL;\n",
+       "            __pyx_t_13 = 0;\n",
+       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
+       "              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);\n",
+       "              if (likely(__pyx_t_15)) {\n",
+       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
+       "                __Pyx_INCREF(__pyx_t_15);\n",
+       "                __Pyx_INCREF(function);\n",
+       "                __Pyx_DECREF_SET(__pyx_t_8, function);\n",
+       "                __pyx_t_13 = 1;\n",
+       "              }\n",
+       "            }\n",
+       "            {\n",
+       "              PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_9, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
+       "              __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
+       "              __Pyx_GOTREF(__pyx_t_2);\n",
+       "              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "            }\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "          }\n",
+       "          __pyx_L168:;\n",
+       "/* … */\n",
+       "          /*else*/ {\n",
+       "            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
+       "            __Pyx_GOTREF(__pyx_t_9);\n",
+       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
+       "            __pyx_t_8 = __pyx_v_diffeq; __pyx_t_15 = NULL;\n",
+       "            __pyx_t_13 = 0;\n",
+       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
+       "              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);\n",
+       "              if (likely(__pyx_t_15)) {\n",
+       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
+       "                __Pyx_INCREF(__pyx_t_15);\n",
+       "                __Pyx_INCREF(function);\n",
+       "                __Pyx_DECREF_SET(__pyx_t_8, function);\n",
+       "                __pyx_t_13 = 1;\n",
+       "              }\n",
+       "            }\n",
+       "            {\n",
+       "              PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_9, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
+       "              __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
+       "              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
+       "              __Pyx_GOTREF(__pyx_t_2);\n",
+       "              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "            }\n",
+       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "          }\n",
+       "          __pyx_L168:;\n",
+       "
 947: 
\n", + "
+948:                     for j in range(num_extra):
\n", + "
          __pyx_t_17 = __pyx_v_num_extra;\n",
+       "          __pyx_t_18 = __pyx_t_17;\n",
+       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "            __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "          __pyx_t_18 = __pyx_v_num_extra;\n",
+       "          __pyx_t_19 = __pyx_t_18;\n",
+       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "            __pyx_v_j = __pyx_t_20;\n",
+       "
+949:                         y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]
\n", + "
            __pyx_t_24 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_31 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_31 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "          }\n",
+       "        }\n",
+       "      }\n",
+       "      __pyx_L157:;\n",
+       "/* … */\n",
+       "            __pyx_t_25 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_32 = (__pyx_v_extra_start + __pyx_v_j);\n",
+       "            __pyx_t_12 = __pyx_v_i;\n",
+       "            *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_32 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_25 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
+       "          }\n",
+       "        }\n",
+       "      }\n",
+       "      __pyx_L157:;\n",
+       "
 950: 
\n", + "
 951:         # Replace the output y results and time domain with the new reduced one
\n", + "
+952:         solution_y = np.empty((total_size, len_teval), dtype=DTYPE, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_9);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_15);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
+       "    __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
+       "    __Pyx_GIVEREF(__pyx_t_9);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_9);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_9 = 0;\n",
+       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_15);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
+       "    __pyx_t_15 = 0;\n",
+       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "
+953:         solution_t = np.empty(len_teval, dtype=np.float64, order='C')
\n", + "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_1);\n",
+       "    __pyx_t_1 = 0;\n",
+       "/* … */\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_15);\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_9);\n",
+       "    __Pyx_GIVEREF(__pyx_t_2);\n",
+       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
+       "    __pyx_t_2 = 0;\n",
+       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_2);\n",
+       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_8);\n",
+       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_1);\n",
+       "    __pyx_t_1 = 0;\n",
+       "
+954:         solution_y_view = solution_y
\n", + "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 954, __pyx_L1_error)\n",
+       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 954, __pyx_L1_error)\n",
+       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
+       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
+       "    __pyx_t_16.memview = NULL;\n",
+       "    __pyx_t_16.data = NULL;\n",
+       "
+955:         solution_t_view = solution_t
\n", + "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 955, __pyx_L1_error)\n",
+       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
+       "    __pyx_v_solution_t_view = __pyx_t_10;\n",
+       "    __pyx_t_10.memview = NULL;\n",
+       "    __pyx_t_10.data = NULL;\n",
+       "/* … */\n",
+       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 955, __pyx_L1_error)\n",
+       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
+       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
+       "    __pyx_t_17.memview = NULL;\n",
+       "    __pyx_t_17.data = NULL;\n",
+       "
 956: 
\n", + "
 957:         # Update output arrays
\n", + "
+958:         for i in range(len_teval):
\n", + "
    __pyx_t_7 = __pyx_v_len_teval;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
        "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_no_t\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t(PyObject *__pyx_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t = {\"test_no_t\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t(PyObject *__pyx_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  __Pyx_memviewslice __pyx_v_arr_in = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_arr_out = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"test_no_t (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr_in,&__pyx_n_s_arr_out,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_in)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_out)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"test_no_t\", 1, 2, 2, 1); __PYX_ERR(0, 8, __pyx_L3_error)\n",
-       "        }\n",
+       "    __pyx_t_7 = __pyx_v_len_teval;\n",
+       "    __pyx_t_3 = __pyx_t_7;\n",
+       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
+       "      __pyx_v_i = __pyx_t_11;\n",
+       "
+959:             solution_t_view[i] = t_eval[i]
\n", + "
      __pyx_t_24 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_24 * __pyx_v_t_eval.strides[0]) )));\n",
+       "/* … */\n",
+       "      __pyx_t_25 = __pyx_v_i;\n",
+       "      __pyx_t_12 = __pyx_v_i;\n",
+       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_25 * __pyx_v_t_eval.strides[0]) )));\n",
+       "
+960:             for j in range(total_size):
\n", + "
      __pyx_t_17 = __pyx_v_total_size;\n",
+       "      __pyx_t_18 = __pyx_t_17;\n",
+       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
+       "        __pyx_v_j = __pyx_t_19;\n",
+       "/* … */\n",
+       "      __pyx_t_18 = __pyx_v_total_size;\n",
+       "      __pyx_t_19 = __pyx_t_18;\n",
+       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
+       "        __pyx_v_j = __pyx_t_20;\n",
+       "
 961:                 # To match the format that scipy follows, we will take the transpose of y.
\n", + "
+962:                 solution_y_view[j, i] = y_results_reduced_view[j, i]
\n", + "
        __pyx_t_24 = __pyx_v_j;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_31 = __pyx_v_j;\n",
+       "        __pyx_t_32 = __pyx_v_i;\n",
+       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_31 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_32 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
        "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"test_no_t\") < 0)) __PYX_ERR(0, 8, __pyx_L3_error)\n",
+       "    }\n",
+       "/* … */\n",
+       "        __pyx_t_25 = __pyx_v_j;\n",
+       "        __pyx_t_12 = __pyx_v_i;\n",
+       "        __pyx_t_32 = __pyx_v_j;\n",
+       "        __pyx_t_33 = __pyx_v_i;\n",
+       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_32 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_33 * __pyx_v_solution_y_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
        "      }\n",
-       "    } else if (unlikely(__pyx_nargs != 2)) {\n",
-       "      goto __pyx_L5_argtuple_error;\n",
-       "    } else {\n",
-       "      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
        "    }\n",
-       "    __pyx_v_arr_in = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_in.memview)) __PYX_ERR(0, 8, __pyx_L3_error)\n",
-       "    __pyx_v_arr_out = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_out.memview)) __PYX_ERR(0, 8, __pyx_L3_error)\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"test_no_t\", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 8, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_no_t\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(__pyx_self, __pyx_v_arr_in, __pyx_v_arr_out);\n",
-       "  int __pyx_lineno = 0;\n",
-       "  const char *__pyx_filename = NULL;\n",
-       "  int __pyx_clineno = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"test_no_t\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_no_t(__pyx_v_arr_in, __pyx_v_arr_out, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __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_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_no_t\", __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",
+       "
+963:         status = old_status
\n", + "
    __pyx_v_status = __pyx_v_old_status;\n",
        "/* … */\n",
-       "  __pyx_tuple__22 = PyTuple_Pack(2, __pyx_n_s_arr_in, __pyx_n_s_arr_out); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__22);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__22);\n",
+       "    __pyx_v_status = __pyx_v_old_status;\n",
+       "
 964: 
\n", + "
 965:     # Set message
\n", + "
+966:     if status == 1:
\n", + "
  switch (__pyx_v_status) {\n",
+       "    case 1:\n",
        "/* … */\n",
-       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_1test_no_t, 0, __pyx_n_s_test_no_t, NULL, __pyx_n_s_cython_magic_b567b6953717f6ddb9, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_no_t, __pyx_t_7) < 0) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_test_no_t, 8, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "
 09: 
\n", - "
 10:     cdef Py_ssize_t i, j, size_0, size_1
\n", - "
+11:     size_0 = arr_in.size
\n", - "
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_arr_in, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_size_0 = __pyx_t_3;\n",
-       "
+12:     size_1 = arr_out.shape[0]
\n", - "
  __pyx_v_size_1 = (__pyx_v_arr_out.shape[0]);\n",
-       "
 13: 
\n", - "
+14:     for i in range(size_0):
\n", - "
  __pyx_t_3 = __pyx_v_size_0;\n",
-       "  __pyx_t_4 = __pyx_t_3;\n",
-       "  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {\n",
-       "    __pyx_v_i = __pyx_t_5;\n",
-       "
+15:         for j in range(size_1):
\n", - "
    __pyx_t_6 = __pyx_v_size_1;\n",
-       "    __pyx_t_7 = __pyx_t_6;\n",
-       "    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {\n",
-       "      __pyx_v_j = __pyx_t_8;\n",
-       "
+16:             arr_out[j, i] = arr_in[i] / j
\n", - "
      __pyx_t_9 = __pyx_v_i;\n",
-       "      __pyx_t_10 = __pyx_v_j;\n",
-       "      __pyx_t_11 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_arr_out.data + __pyx_t_10 * __pyx_v_arr_out.strides[0]) ) + __pyx_t_11 * __pyx_v_arr_out.strides[1]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_arr_in.data + __pyx_t_9 * __pyx_v_arr_in.strides[0]) ))) / ((double)__pyx_v_j));\n",
-       "    }\n",
+       "    break;\n",
+       "    case 0:\n",
+       "/* … */\n",
+       "  switch (__pyx_v_status) {\n",
+       "    case 1:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case 0:\n",
+       "
+967:         message = "Integration completed without issue."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Integration_completed_without_is);\n",
+       "    __pyx_v_message = __pyx_kp_u_Integration_completed_without_is;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Integration_completed_without_is);\n",
+       "    __pyx_v_message = __pyx_kp_u_Integration_completed_without_is;\n",
+       "
+968:     elif status == 0:
\n", + "
    break;\n",
+       "    case -1L:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case -1L:\n",
+       "
+969:         message = "Integration is/was ongoing (perhaps it was interrupted?)."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Integration_is_was_ongoing_perha);\n",
+       "    __pyx_v_message = __pyx_kp_u_Integration_is_was_ongoing_perha;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Integration_is_was_ongoing_perha);\n",
+       "    __pyx_v_message = __pyx_kp_u_Integration_is_was_ongoing_perha;\n",
+       "
+970:     elif status == -1:
\n", + "
    break;\n",
+       "    case -2L:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case -2L:\n",
+       "
+971:         message = "Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
+       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_R;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
+       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_R;\n",
+       "
+972:     elif status == -2:
\n", + "
    break;\n",
+       "    case -3L:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case -3L:\n",
+       "
+973:         message = "Maximum number of steps (set by user) exceeded during integration."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_u);\n",
+       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_u;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_u);\n",
+       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_u;\n",
+       "
+974:     elif status == -3:
\n", + "
    break;\n",
+       "    case -6L:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case -6L:\n",
+       "
+975:         message = "Maximum number of steps (set by system architecture) exceeded during integration."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_s);\n",
+       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_s;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_s);\n",
+       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_s;\n",
+       "
+976:     elif status == -6:
\n", + "
    break;\n",
+       "    case -7L:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case -7L:\n",
+       "
+977:         message = "Integration never started: y-size is zero."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Integration_never_started_y_size);\n",
+       "    __pyx_v_message = __pyx_kp_u_Integration_never_started_y_size;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Integration_never_started_y_size);\n",
+       "    __pyx_v_message = __pyx_kp_u_Integration_never_started_y_size;\n",
+       "
+978:     elif status == -7:
\n", + "
    break;\n",
+       "    case -8L:\n",
+       "/* … */\n",
+       "    break;\n",
+       "    case -8L:\n",
+       "
+979:         message = "Error in step size calculation:\\n\\tError in step size acceptance."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_E);\n",
+       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_E;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_E);\n",
+       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_E;\n",
+       "
+980:     elif status == -8:
\n", + "
    break;\n",
+       "    default: break;\n",
        "  }\n",
-       "
 17: 
\n", - "
 18: 
\n", - "
+19: cpdef void test_wt(double[:] arr_in, double[:, :] arr_out):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt(PyObject *__pyx_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_wt(__Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out, CYTHON_UNUSED int __pyx_skip_dispatch) {\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  Py_ssize_t __pyx_v_size_0;\n",
-       "  Py_ssize_t __pyx_v_size_1;\n",
-       "  __Pyx_memviewslice __pyx_v_arr_view_t = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"test_wt\", 0);\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_v_arr_out, 1);\n",
        "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_4, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_wt\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_view_t, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt(PyObject *__pyx_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt = {\"test_wt\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt(PyObject *__pyx_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  __Pyx_memviewslice __pyx_v_arr_in = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_arr_out = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"test_wt (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr_in,&__pyx_n_s_arr_out,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_in)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr_out)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"test_wt\", 1, 2, 2, 1); __PYX_ERR(0, 19, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"test_wt\") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else if (unlikely(__pyx_nargs != 2)) {\n",
-       "      goto __pyx_L5_argtuple_error;\n",
-       "    } else {\n",
-       "      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "    }\n",
-       "    __pyx_v_arr_in = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_in.memview)) __PYX_ERR(0, 19, __pyx_L3_error)\n",
-       "    __pyx_v_arr_out = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_arr_out.memview)) __PYX_ERR(0, 19, __pyx_L3_error)\n",
+       "    break;\n",
+       "    default: break;\n",
        "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"test_wt\", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 19, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_wt\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_2test_wt(__pyx_self, __pyx_v_arr_in, __pyx_v_arr_out);\n",
-       "  int __pyx_lineno = 0;\n",
-       "  const char *__pyx_filename = NULL;\n",
-       "  int __pyx_clineno = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_in, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_2test_wt(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_arr_in, __Pyx_memviewslice __pyx_v_arr_out) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"test_wt\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_f_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_test_wt(__pyx_v_arr_in, __pyx_v_arr_out, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)\n",
+       "
+981:         message = "Attribute error."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
+       "    __pyx_v_message = __pyx_kp_u_Attribute_error;\n",
+       "/* … */\n",
+       "    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
+       "    __pyx_v_message = __pyx_kp_u_Attribute_error;\n",
+       "
 982: 
\n", + "
+983:     return solution_t, solution_y, success, message
\n", + "
  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
        "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_r = __pyx_t_1;\n",
+       "  if (unlikely(!__pyx_v_message)) { __Pyx_RaiseUnboundLocalError(\"message\"); __PYX_ERR(0, 983, __pyx_L1_error) }\n",
+       "  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_INCREF(__pyx_v_solution_t);\n",
+       "  __Pyx_GIVEREF(__pyx_v_solution_t);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_solution_t);\n",
+       "  __Pyx_INCREF(__pyx_v_solution_y);\n",
+       "  __Pyx_GIVEREF(__pyx_v_solution_y);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_solution_y);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);\n",
+       "  __Pyx_INCREF(__pyx_v_message);\n",
+       "  __Pyx_GIVEREF(__pyx_v_message);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_message);\n",
        "  __pyx_t_1 = 0;\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 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_b567b6953717f6ddb92778eff3d1d36cc94d7e02.test_wt\", __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_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_b567b6953717f6ddb92778eff3d1d36cc94d7e02_3test_wt, 0, __pyx_n_s_test_wt, NULL, __pyx_n_s_cython_magic_b567b6953717f6ddb9, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 19, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_wt, __pyx_t_7) < 0) __PYX_ERR(0, 19, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 20: 
\n", - "
 21:     cdef Py_ssize_t i, j, size_0, size_1
\n", - "
+22:     size_0 = arr_in.size
\n", - "
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_arr_in, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
        "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error)\n",
+       "  if (unlikely(!__pyx_v_message)) { __Pyx_RaiseUnboundLocalError(\"message\"); __PYX_ERR(0, 983, __pyx_L1_error) }\n",
+       "  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
        "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_size_0 = __pyx_t_3;\n",
-       "
+23:     size_1 = arr_out.shape[0]
\n", - "
  __pyx_v_size_1 = (__pyx_v_arr_out.shape[0]);\n",
-       "
 24: 
\n", - "
 25:     cdef double[:, :] arr_view_t
\n", - "
+26:     arr_view_t = arr_out.T
\n", - "
  __pyx_t_4 = __pyx_v_arr_out;\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_t_4, 1);\n",
-       "  if (unlikely((__pyx_memslice_transpose(&__pyx_t_4) < 0))) __PYX_ERR(0, 26, __pyx_L1_error)\n",
-       "  __pyx_v_arr_view_t = __pyx_t_4;\n",
-       "  __pyx_t_4.memview = NULL;\n",
-       "  __pyx_t_4.data = NULL;\n",
-       "
 27: 
\n", - "
+28:     for i in range(size_0):
\n", - "
  __pyx_t_3 = __pyx_v_size_0;\n",
-       "  __pyx_t_5 = __pyx_t_3;\n",
-       "  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {\n",
-       "    __pyx_v_i = __pyx_t_6;\n",
-       "
+29:         for j in range(size_1):
\n", - "
    __pyx_t_7 = __pyx_v_size_1;\n",
-       "    __pyx_t_8 = __pyx_t_7;\n",
-       "    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {\n",
-       "      __pyx_v_j = __pyx_t_9;\n",
-       "
+30:             arr_view_t[i, j] = arr_in[i] / j
\n", - "
      __pyx_t_10 = __pyx_v_i;\n",
-       "      __pyx_t_11 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_j;\n",
-       "      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_arr_view_t.data + __pyx_t_11 * __pyx_v_arr_view_t.strides[0]) ) + __pyx_t_12 * __pyx_v_arr_view_t.strides[1]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_arr_in.data + __pyx_t_10 * __pyx_v_arr_in.strides[0]) ))) / ((double)__pyx_v_j));\n",
-       "    }\n",
-       "  }\n",
-       "
 31: 
\n", - "
+32:     arr_out = arr_view_t.T
\n", - "
  __pyx_t_4 = __pyx_v_arr_view_t;\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_t_4, 1);\n",
-       "  if (unlikely((__pyx_memslice_transpose(&__pyx_t_4) < 0))) __PYX_ERR(0, 32, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_arr_out, 1);\n",
-       "  __pyx_v_arr_out = __pyx_t_4;\n",
-       "  __pyx_t_4.memview = NULL;\n",
-       "  __pyx_t_4.data = NULL;\n",
-       "
 33: 
\n", + " __Pyx_INCREF(__pyx_v_solution_t);\n", + " __Pyx_GIVEREF(__pyx_v_solution_t);\n", + " PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_solution_t);\n", + " __Pyx_INCREF(__pyx_v_solution_y);\n", + " __Pyx_GIVEREF(__pyx_v_solution_y);\n", + " PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_solution_y);\n", + " __Pyx_GIVEREF(__pyx_t_1);\n", + " PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);\n", + " __Pyx_INCREF(__pyx_v_message);\n", + " __Pyx_GIVEREF(__pyx_v_message);\n", + " PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_message);\n", + " __pyx_t_1 = 0;\n", + " __pyx_r = __pyx_t_2;\n", + " __pyx_t_2 = 0;\n", + " goto __pyx_L0;\n", + "
 984: 
\n", "
" ], "text/plain": [ "" ] }, - "execution_count": 32, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%cython --annotate --force\n", + "# distutils: language = c++\n", + "# distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION\n", "# cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False\n", "\n", - "import numpy as np\n", - "cimport numpy as np\n", - "np.import_array()\n", + "import cython\n", + "cimport cython\n", + "import sys\n", + "import numpy as np\n", + "cimport numpy as np\n", + "np.import_array()\n", + "\n", + "from libcpp cimport bool as bool_cpp_t\n", + "from libc.math cimport sqrt, fabs, nextafter, fmax, fmin\n", + "\n", + "from CyRK.array.interp cimport interp_array, interp_complex_array\n", + "from CyRK.rk.rk cimport (\n", + " RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,\n", + " RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,\n", + " RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,\n", + " RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,\n", + " DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,\n", + " DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)\n", + "\n", + "# # Integration Constants\n", + "# Multiply steps computed from asymptotic behaviour of errors by this.\n", + "cdef double SAFETY = 0.9\n", + "cdef double MIN_FACTOR = 0.2 # Minimum allowed decrease in a step size.\n", + "cdef double MAX_FACTOR = 10. # Maximum allowed increase in a step size.\n", + "cdef double MAX_STEP = np.inf\n", + "cdef double INF = np.inf\n", + "cdef double EPS = np.finfo(np.float64).eps\n", + "cdef double EPS_10 = EPS * 10.\n", + "cdef double EPS_100 = EPS * 100.\n", + "cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize)\n", + "\n", + "cdef double cabs(double complex value) noexcept nogil:\n", + " \"\"\" Absolute value function for complex-valued inputs.\n", + " \n", + " Parameters\n", + " ----------\n", + " value : float (double complex)\n", + " Complex-valued number.\n", + " \n", + " Returns\n", + " -------\n", + " value_abs : float (double)\n", + " Absolute value of `value`.\n", + " \"\"\"\n", + "\n", + " cdef double v_real\n", + " cdef double v_imag\n", + " v_real = value.real\n", + " v_imag = value.imag\n", + "\n", + " return sqrt(v_real * v_real + v_imag * v_imag)\n", + "\n", + "# Define fused type to handle both float and complex-valued versions of y and dydt.\n", + "ctypedef fused double_numeric:\n", + " double\n", + " double complex\n", + " \n", + "\n", + "cdef double dabs(double_numeric value) noexcept nogil:\n", + " \"\"\" Absolute value function for either float or complex-valued inputs.\n", + " \n", + " Checks the type of value and either utilizes `cabs` (for double complex) or `fabs` (for floats).\n", + " \n", + " Parameters\n", + " ----------\n", + " value : float (double_numeric)\n", + " Float or complex-valued number.\n", + "\n", + " Returns\n", + " -------\n", + " value_abs : float (double)\n", + " Absolute value of `value`.\n", + " \"\"\"\n", + " cdef double result\n", + " \n", + " # Check the type of value\n", + " if double_numeric is cython.doublecomplex:\n", + " result = cabs(value)\n", + " else:\n", + " result = fabs(value)\n", + " return result\n", + "\n", + "@cython.wraparound(False)\n", + "@cython.cdivision(True)\n", + "@cython.initializedcheck(False)\n", + "@cython.boundscheck(False)\n", + "def cyrk_ode_2(\n", + " diffeq,\n", + " (double, double) t_span,\n", + " const double_numeric[:] y0,\n", + " tuple args = None,\n", + " double rtol = 1.e-6,\n", + " double atol = 1.e-8,\n", + " double max_step_size = MAX_STEP,\n", + " double first_step = 0.,\n", + " unsigned char rk_method = 1,\n", + " double[:] t_eval = None,\n", + " bool_cpp_t capture_extra = False,\n", + " Py_ssize_t num_extra = 0,\n", + " bool_cpp_t interpolate_extra = False,\n", + " unsigned int expected_size = 0,\n", + " unsigned int max_steps = 0\n", + " ):\n", + " \"\"\" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\n", + "\n", + " Parameters\n", + " ----------\n", + " diffeq : callable\n", + " An njit-compiled function that defines the derivatives of the problem.\n", + " t_span : Tuple[float, float]\n", + " A tuple of the beginning and end of the integration domain's dependent variables.\n", + " y0 : np.ndarray\n", + " 1D array of the initial values of the problem at t_span[0]\n", + " args : tuple = tuple()\n", + " Any additional arguments that are passed to dffeq.\n", + " rtol : float = 1.e-6\n", + " Integration relative tolerance used to determine optimal step size.\n", + " atol : float = 1.e-8\n", + " Integration absolute tolerance used to determine optimal step size.\n", + " max_step_size : float = np.inf\n", + " Maximum allowed step size.\n", + " first_step : float = None\n", + " Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\n", + " rk_method : int = 1\n", + " The type of RK method used for integration\n", + " 0 = RK23\n", + " 1 = RK45\n", + " 2 = DOP853\n", + " t_eval : np.ndarray = None\n", + " If provided, then the function will interpolate the integration results to provide them at the\n", + " requested t-steps.\n", + " capture_extra : bool = False\n", + " If True, then additional output from the differential equation will be collected (but not used to determine\n", + " integration error).\n", + " Example:\n", + " ```\n", + " def diffeq(t, y, dy):\n", + " a = ... some function of y and t.\n", + " dy[0] = a**2 * sin(t) - y[1]\n", + " dy[1] = a**3 * cos(t) + y[0]\n", + "\n", + " # Storing extra output in dy even though it is not part of the diffeq.\n", + " dy[2] = a\n", + " ```\n", + " num_extra : int = 0\n", + " The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\n", + " interpolate_extra : bool = False\n", + " If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each\n", + " step in `t_eval`.\n", + " expected_size : int = 0\n", + " The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\n", + " If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\n", + " It is better to overshoot than undershoot this guess.\n", + " max_steps : int = 0\n", + " Maximum number of steps integrator is allowed to take.\n", + " If set to 0 (the default) then an infinite number of steps are allowed.\n", + "\n", + " Returns\n", + " -------\n", + " time_domain : np.ndarray\n", + " The final time domain. This is equal to t_eval if it was provided.\n", + " y_results : np.ndarray\n", + " The solution of the differential equation provided for each time_result.\n", + " success : bool\n", + " Final integration success flag.\n", + " message : str\n", + " Any integration messages, useful if success=False.\n", + "\n", + " \"\"\"\n", + " # Setup loop variables\n", + " cdef Py_ssize_t s, i, j\n", + "\n", + " # Setup integration variables\n", + " cdef char status, old_status\n", + " cdef str message\n", + "\n", + " # Determine information about the differential equation based on its initial conditions\n", + " cdef Py_ssize_t y_size\n", + " cdef double y_size_dbl, y_size_sqrt\n", + " cdef bool_cpp_t y_is_complex\n", + " y_size = y0.size\n", + " y_is_complex = False\n", + " y_size_dbl = y_size\n", + " y_size_sqrt = sqrt(y_size_dbl)\n", + "\n", + " # Check the type of the values in y0\n", + " if double_numeric is cython.double:\n", + " DTYPE = np.float64\n", + " elif double_numeric is cython.doublecomplex:\n", + " DTYPE = np.complex128\n", + " y_is_complex = True\n", + " else:\n", + " # Cyrk only supports float64 and complex128.\n", + " status = -8\n", + " raise Exception('Unexpected type found for initial conditions (y0).')\n", + "\n", + " # Build time domain\n", + " cdef double t_start, t_end, t_delta, t_delta_check, t_delta_abs, direction_inf, t_old, t_new, time_\n", + " cdef bool_cpp_t direction_flag\n", + " t_start = t_span[0]\n", + " t_end = t_span[1]\n", + " t_delta = t_end - t_start\n", + " t_delta_abs = fabs(t_delta)\n", + " t_delta_check = t_delta_abs\n", + " if t_delta >= 0.:\n", + " # Integration is moving forward in time.\n", + " direction_flag = True\n", + " direction_inf = INF\n", + " else:\n", + " # Integration is moving backwards in time.\n", + " direction_flag = False\n", + " direction_inf = -INF\n", + "\n", + " # Pull out information on t-eval\n", + " cdef Py_ssize_t len_teval\n", + " if t_eval is None:\n", + " len_teval = 0\n", + " else:\n", + " len_teval = t_eval.size\n", + "\n", + " # Pull out information on args\n", + " cdef bool_cpp_t use_args\n", + " if args is None:\n", + " use_args = False\n", + " else:\n", + " use_args = True\n", + "\n", + " # Set integration flags\n", + " cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\\n", + " store_extras_during_integration\n", + " success = False\n", + " step_accepted = False\n", + " step_rejected = False\n", + " step_error = False\n", + " run_interpolation = False\n", + " store_extras_during_integration = capture_extra\n", + " if len_teval > 0:\n", + " run_interpolation = True\n", + " if run_interpolation and not interpolate_extra:\n", + " # If y is eventually interpolated but the extra outputs are not being interpolated, then there is\n", + " # no point in storing the values during the integration. Turn off this functionality to save\n", + " # on computation.\n", + " store_extras_during_integration = False\n", + "\n", + " # # Determine integration parameters\n", + " # Check tolerances\n", + " if rtol < EPS_100:\n", + " rtol = EPS_100\n", + "\n", + " # atol_arr = np.asarray(atol, dtype=np.complex128)\n", + " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", + " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", + " # raise Exception\n", + "\n", + " # Determine maximum number of steps\n", + " cdef Py_ssize_t max_steps_touse\n", + " cdef bool_cpp_t use_max_steps\n", + " if max_steps == 0:\n", + " use_max_steps = False\n", + " max_steps_touse = 0\n", + " elif max_steps < 0:\n", + " status = -8\n", + " raise AttributeError('Negative number of max steps provided.')\n", + " else:\n", + " use_max_steps = True\n", + " max_steps_touse = min(max_steps, MAX_INT_SIZE)\n", + "\n", + " # Expected size of output arrays.\n", + " cdef double temp_expected_size\n", + " cdef Py_ssize_t expected_size_to_use, num_concats\n", + " if expected_size == 0:\n", + " # CySolver will attempt to guess on a best size for the arrays.\n", + " temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol))\n", + " temp_expected_size = fmax(temp_expected_size, 100.)\n", + " temp_expected_size = fmin(temp_expected_size, 10_000_000.)\n", + " expected_size_to_use = temp_expected_size\n", + " else:\n", + " expected_size_to_use = expected_size\n", + " # This variable tracks how many times the storage arrays have been appended.\n", + " # It starts at 1 since there is at least one storage array present.\n", + " num_concats = 1\n", + "\n", + " # Initialize arrays that are based on y's size and type.\n", + " y_new = np.empty(y_size, dtype=DTYPE, order='C')\n", + " y_old = np.empty(y_size, dtype=DTYPE, order='C')\n", + " dydt_new = np.empty(y_size, dtype=DTYPE, order='C')\n", + " dydt_old = np.empty(y_size, dtype=DTYPE, order='C')\n", + "\n", + " # Setup memory views for these arrays\n", + " cdef double_numeric[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view\n", + " y_new_view = y_new\n", + " y_old_view = y_old\n", + " dydt_new_view = dydt_new\n", + " dydt_old_view = dydt_old\n", + "\n", + " # Store y0 into the y arrays\n", + " cdef double_numeric y_value\n", + " for i in range(y_size):\n", + " y_value = y0[i]\n", + " y_new_view[i] = y_value\n", + " y_old_view[i] = y_value\n", + "\n", + " # If extra output is true then the output of the diffeq will be larger than the size of y0.\n", + " # Determine that extra size by calling the diffeq and checking its size.\n", + " cdef Py_ssize_t extra_start, total_size, store_loop_size\n", + " extra_start = y_size\n", + " total_size = y_size + num_extra\n", + " # Create arrays based on this total size\n", + " diffeq_out = np.empty(total_size, dtype=DTYPE, order='C')\n", + " y0_plus_extra = np.empty(total_size, dtype=DTYPE, order='C')\n", + " extra_result = np.empty(num_extra, dtype=DTYPE, order='C')\n", + "\n", + " # Setup memory views\n", + " cdef double_numeric[:] diffeq_out_view, y0_plus_extra_view, extra_result_view\n", + " diffeq_out_view = diffeq_out\n", + " y0_plus_extra_view = y0_plus_extra\n", + " extra_result_view = extra_result\n", + "\n", + " # Capture the extra output for the initial condition.\n", + " if capture_extra:\n", + " if use_args:\n", + " diffeq(t_start, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_start, y_new, diffeq_out)\n", + "\n", + " # Extract the extra output from the function output.\n", + " for i in range(total_size):\n", + " if i < extra_start:\n", + " # Pull from y0\n", + " y0_plus_extra_view[i] = y0[i]\n", + " else:\n", + " # Pull from extra output\n", + " y0_plus_extra_view[i] = diffeq_out_view[i]\n", + " if store_extras_during_integration:\n", + " store_loop_size = total_size\n", + " else:\n", + " store_loop_size = y_size\n", + " else:\n", + " # No extra output\n", + " store_loop_size = y_size\n", + "\n", + " y0_to_store = np.empty(store_loop_size, dtype=DTYPE, order='C')\n", + " cdef double_numeric[:] y0_to_store_view\n", + " y0_to_store_view = y0_to_store\n", + " for i in range(store_loop_size):\n", + " if store_extras_during_integration:\n", + " y0_to_store_view[i] = y0_plus_extra_view[i]\n", + " else:\n", + " y0_to_store_view[i] = y0[i]\n", + "\n", + " # # Determine RK scheme\n", + " cdef unsigned char rk_order, error_order\n", + " cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended\n", + " cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1\n", + " cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom\n", + "\n", + " if rk_method == 0:\n", + " # RK23 Method\n", + " rk_order = RK23_order\n", + " error_order = RK23_error_order\n", + " rk_n_stages = RK23_n_stages\n", + " len_C = RK23_LEN_C\n", + " len_B = RK23_LEN_B\n", + " len_E = RK23_LEN_E\n", + " len_E3 = RK23_LEN_E3\n", + " len_E5 = RK23_LEN_E5\n", + " len_A0 = RK23_LEN_A0\n", + " len_A1 = RK23_LEN_A1\n", + " elif rk_method == 1:\n", + " # RK45 Method\n", + " rk_order = RK45_order\n", + " error_order = RK45_error_order\n", + " rk_n_stages = RK45_n_stages\n", + " len_C = RK45_LEN_C\n", + " len_B = RK45_LEN_B\n", + " len_E = RK45_LEN_E\n", + " len_E3 = RK45_LEN_E3\n", + " len_E5 = RK45_LEN_E5\n", + " len_A0 = RK45_LEN_A0\n", + " len_A1 = RK45_LEN_A1\n", + " elif rk_method == 2:\n", + " # DOP853 Method\n", + " rk_order = DOP_order\n", + " error_order = DOP_error_order\n", + " rk_n_stages = DOP_n_stages\n", + " len_C = DOP_LEN_C\n", + " len_B = DOP_LEN_B\n", + " len_E = DOP_LEN_E\n", + " len_E3 = DOP_LEN_E3\n", + " len_E5 = DOP_LEN_E5\n", + " len_A0 = DOP_LEN_A0\n", + " len_A1 = DOP_LEN_A1\n", + "\n", + " rk_n_stages_extended = DOP_n_stages_extended\n", + " else:\n", + " status = -8\n", + " raise AttributeError(\n", + " 'Unexpected rk_method provided. Currently supported versions are:\\n'\n", + " '\\t0 = RK23\\n'\n", + " '\\t1 = RK34\\n'\n", + " '\\t2 = DOP853')\n", + "\n", + " rk_n_stages_plus1 = rk_n_stages + 1\n", + " error_expo = 1. / (error_order + 1.)\n", + "\n", + " # Build RK Arrays. Note that all are 1D except for A and K.\n", + " A = np.empty((len_A0, len_A1), dtype=DTYPE, order='C')\n", + " B = np.empty(len_B, dtype=DTYPE, order='C')\n", + " C = np.empty(len_C, dtype=np.float64, order='C') # C is always float no matter what y0 is.\n", + " E = np.empty(len_E, dtype=DTYPE, order='C')\n", + " E3 = np.empty(len_E3, dtype=DTYPE, order='C')\n", + " E5 = np.empty(len_E5, dtype=DTYPE, order='C')\n", + " K = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C') # It is important K be initialized with 0s\n", + "\n", + " # Setup memory views.\n", + " cdef double_numeric[:] B_view, E_view, E3_view, E5_view\n", + " cdef double_numeric[:, :] A_view, K_view\n", + " cdef double_numeric A_at_sj, B_at_j, error_dot_1, error_dot_2\n", + " cdef double[:] C_view\n", + " A_view = A\n", + " B_view = B\n", + " C_view = C\n", + " E_view = E\n", + " E3_view = E3\n", + " E5_view = E5\n", + " K_view = K\n", + "\n", + " # Populate values based on externally defined constants.\n", + " if rk_method == 0:\n", + " # RK23 Method\n", + " for i in range(len_A0):\n", + " for j in range(len_A1):\n", + " A_view[i, j] = RK23_A[i][j]\n", + " for i in range(len_B):\n", + " B_view[i] = RK23_B[i]\n", + " for i in range(len_C):\n", + " C_view[i] = RK23_C[i]\n", + " for i in range(len_E):\n", + " E_view[i] = RK23_E[i]\n", + " # Dummy Variables, set equal to E\n", + " E3_view[i] = RK23_E[i]\n", + " E5_view[i] = RK23_E[i]\n", + " elif rk_method == 1:\n", + " # RK45 Method\n", + " for i in range(len_A0):\n", + " for j in range(len_A1):\n", + " A_view[i, j] = RK45_A[i][j]\n", + " for i in range(len_B):\n", + " B_view[i] = RK45_B[i]\n", + " for i in range(len_C):\n", + " C_view[i] = RK45_C[i]\n", + " for i in range(len_E):\n", + " E_view[i] = RK45_E[i]\n", + " # Dummy Variables, set equal to E\n", + " E3_view[i] = RK45_E[i]\n", + " E5_view[i] = RK45_E[i]\n", + " else:\n", + " # DOP853 Method\n", + " for i in range(len_A0):\n", + " for j in range(len_A1):\n", + " A_view[i, j] = DOP_A_REDUCED[i][j]\n", + " for i in range(len_B):\n", + " B_view[i] = DOP_B[i]\n", + " for i in range(len_C):\n", + " C_view[i] = DOP_C_REDUCED[i]\n", + " for i in range(len_E):\n", + " E3_view[i] = DOP_E3[i]\n", + " E5_view[i] = DOP_E5[i]\n", + " E_view[i] = DOP_E5[i]\n", + " # Dummy Variables, set equal to E3\n", + " E_view[i] = DOP_E3[i]\n", + "\n", + " # Initialize variables for start of integration\n", + " if not capture_extra:\n", + " # If `capture_extra` is True then this step was already performed.\n", + " if use_args:\n", + " diffeq(t_start, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_start, y_new, diffeq_out)\n", + "\n", + " t_old = t_start\n", + " t_new = t_start\n", + " # Initialize dydt arrays.\n", + " for i in range(y_size):\n", + " dydt_new_view[i] = diffeq_out_view[i]\n", + " dydt_old_view[i] = dydt_new_view[i]\n", + " \n", + " # Setup storage arrays\n", + " # These arrays are built to fit a number of points equal to `expected_size_to_use`\n", + " # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.\n", + " cdef double_numeric[:, :] y_results_array_view, y_results_array_new_view, solution_y_view\n", + " cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view\n", + " y_results_array = np.empty((store_loop_size, expected_size_to_use), dtype=DTYPE, order='C')\n", + " time_domain_array = np.empty(expected_size_to_use, dtype=np.float64, order='C')\n", + " y_results_array_view = y_results_array\n", + " time_domain_array_view = time_domain_array\n", + "\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] scale_arr\n", + " cdef double[:] scale_view\n", + " cdef double scale\n", + " scale_arr = np.empty(y_size, dtype=np.float64, order='C')\n", + " scale_view = scale_arr\n", + "\n", + "\n", + " # Load initial conditions into output arrays\n", + " time_domain_array_view[0] = t_start\n", + " for i in range(store_loop_size):\n", + " if store_extras_during_integration:\n", + " y_results_array_view[i] = y0_plus_extra_view[i]\n", + " else:\n", + " y_results_array_view[i] = y0[i]\n", + "\n", + " # # Determine size of first step.\n", + " cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1\n", + " \n", + " if first_step == 0.:\n", + " # Select an initial step size based on the differential equation.\n", + " # .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", + " # Equations I: Nonstiff Problems\", Sec. II.4.\n", + " if y_size == 0:\n", + " step_size = INF\n", + " else:\n", + " # Find the norm for d0 and d1\n", + " d0 = 0.\n", + " d1 = 0.\n", + " for i in range(y_size):\n", + " scale = atol + dabs(y_old_view[i]) * rtol\n", + "\n", + " d0_abs = dabs(y_old_view[i] / scale)\n", + " d1_abs = dabs(dydt_old_view[i] / scale)\n", + " d0 += (d0_abs * d0_abs)\n", + " d1 += (d1_abs * d1_abs)\n", + "\n", + " d0 = sqrt(d0) / y_size_sqrt\n", + " d1 = sqrt(d1) / y_size_sqrt\n", + "\n", + " if d0 < 1.e-5 or d1 < 1.e-5:\n", + " h0 = 1.e-6\n", + " else:\n", + " h0 = 0.01 * d0 / d1\n", + "\n", + " if direction_flag:\n", + " h0_direction = h0\n", + " else:\n", + " h0_direction = -h0\n", + " t_new = t_old + h0_direction\n", + " for i in range(y_size):\n", + " y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]\n", + "\n", + " if use_args:\n", + " diffeq(t_new, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_new, y_new, diffeq_out)\n", + "\n", + " # Find the norm for d2\n", + " d2 = 0.\n", + " for i in range(y_size):\n", + " dydt_new_view[i] = diffeq_out_view[i]\n", + " scale = atol + dabs(y_old_view[i]) * rtol\n", + " d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)\n", + " d2 += (d2_abs * d2_abs)\n", + "\n", + " d2 = sqrt(d2) / (h0 * y_size_sqrt)\n", + "\n", + " if d1 <= 1.e-15 and d2 <= 1.e-15:\n", + " h1 = max(1.e-6, h0 * 1.e-3)\n", + " else:\n", + " h1 = (0.01 / max(d1, d2))**error_expo\n", + "\n", + " step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))\n", + " else:\n", + " if first_step <= 0.:\n", + " status = -8\n", + " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", + " elif first_step > t_delta_abs:\n", + " status = -8\n", + " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", + " step_size = first_step\n", + "\n", + " # # Main integration loop\n", + " cdef double min_step, step_factor, step\n", + " cdef double c\n", + " cdef double_numeric K_scale\n", + " cdef Py_ssize_t len_t\n", + " status = 0\n", + " len_t = 1 # There is an initial condition provided so the time length is already 1\n", + "\n", + " if y_size == 0:\n", + " status = -6\n", + "\n", + " while status == 0:\n", + " if t_new == t_end:\n", + " t_old = t_end\n", + " status = 1\n", + " break\n", + "\n", + " if use_max_steps:\n", + " if len_t > max_steps_touse:\n", + " status = -2\n", + " break\n", + " else:\n", + " if len_t > MAX_INT_SIZE:\n", + " status = -3\n", + " break\n", + "\n", + " # Run RK integration step\n", + " # Determine step size based on previous loop\n", + " # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)\n", + " min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)\n", + " # Look for over/undershoots in previous step size\n", + " if step_size > max_step_size:\n", + " step_size = max_step_size\n", + " elif step_size < min_step:\n", + " step_size = min_step\n", + "\n", + " # Determine new step size\n", + " step_accepted = False\n", + " step_rejected = False\n", + " step_error = False\n", + "\n", + " # # Step Loop\n", + " while not step_accepted:\n", + "\n", + " if step_size < min_step:\n", + " step_error = True\n", + " status = -1\n", + " break\n", + "\n", + " # Move time forward for this particular step size\n", + " if direction_flag:\n", + " step = step_size\n", + " t_delta_check = t_new - t_end\n", + " else:\n", + " step = -step_size\n", + " t_delta_check = t_end - t_new\n", + " t_new = t_old + step\n", + "\n", + " # Check that we are not at the end of integration with that move\n", + " if t_delta_check > 0.:\n", + " t_new = t_end\n", + "\n", + " # Correct the step if we were at the end of integration\n", + " step = t_new - t_old\n", + " if direction_flag:\n", + " step_size = step\n", + " else:\n", + " step_size = -step\n", + "\n", + " # Calculate derivative using RK method\n", + " for i in range(y_size):\n", + " K_view[0, i] = dydt_old_view[i]\n", + "\n", + " for s in range(1, len_C):\n", + " c = C_view[s]\n", + " time_ = t_old + c * step\n", + "\n", + " # Dot Product (K, a) * step\n", + " for j in range(s):\n", + " for i in range(y_size):\n", + " if j == 0:\n", + " # Initialize\n", + " y_new_view[i] = y_old_view[i]\n", + "\n", + " y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)\n", + "\n", + " if use_args:\n", + " diffeq(time_, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(time_, y_new, diffeq_out)\n", + "\n", + " for i in range(y_size):\n", + " K_view[s, i] = diffeq_out_view[i]\n", + "\n", + " # Dot Product (K, B) * step\n", + " for j in range(rk_n_stages):\n", + " # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match\n", + " # the shape of B.\n", + " for i in range(y_size):\n", + " if j == 0:\n", + " # Initialize\n", + " y_new_view[i] = y_old_view[i]\n", + " y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)\n", + "\n", + " if use_args:\n", + " diffeq(t_new, y_new, diffeq_out, *args)\n", + " else:\n", + " diffeq(t_new, y_new, diffeq_out)\n", + "\n", + "\n", + " for i in range(store_loop_size):\n", + " if i < extra_start:\n", + " # Set diffeq results\n", + " dydt_new_view[i] = diffeq_out_view[i]\n", + "\n", + " # Set last array of K equal to dydt\n", + " K_view[rk_n_stages, i] = dydt_new_view[i]\n", + "\n", + " else:\n", + " # Set extra results\n", + " extra_result_view[i - extra_start] = diffeq_out_view[i]\n", + "\n", + " if rk_method == 2:\n", + " # Calculate Error for DOP853\n", + " # Find norms for each error\n", + " error_norm5 = 0.\n", + " error_norm3 = 0.\n", + " # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale\n", + " for i in range(y_size):\n", + " scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol\n", + " for j in range(rk_n_stages_plus1):\n", + " if j == 0:\n", + " # Initialize\n", + " error_dot_1 = 0.\n", + " error_dot_2 = 0.\n", + "\n", + " K_scale = K_view[j, i] / scale\n", + " error_dot_1 += K_scale * E3_view[j]\n", + " error_dot_2 += K_scale * E5_view[j]\n", + "\n", + " error_norm3_abs = dabs(error_dot_1)\n", + " error_norm5_abs = dabs(error_dot_2)\n", + "\n", + " error_norm3 += (error_norm3_abs * error_norm3_abs)\n", + " error_norm5 += (error_norm5_abs * error_norm5_abs)\n", + "\n", + " # Check if errors are zero\n", + " if (error_norm5 == 0.) and (error_norm3 == 0.):\n", + " error_norm = 0.\n", + " else:\n", + " error_denom = error_norm5 + 0.01 * error_norm3\n", + " error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)\n", + "\n", + " else:\n", + " # Calculate Error for RK23 and RK45\n", + " # Dot Product (K, E) * step / scale\n", + " error_norm = 0.\n", + " for i in range(y_size):\n", + " scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol\n", + " for j in range(rk_n_stages_plus1):\n", + " if j == 0:\n", + " # Initialize\n", + " error_dot_1 = 0.\n", + "\n", + " K_scale = K_view[j, i] / scale\n", + " error_dot_1 += K_scale * E_view[j] * step\n", + "\n", + " error_norm_abs = dabs(error_dot_1)\n", + " error_norm += (error_norm_abs * error_norm_abs)\n", + " error_norm = sqrt(error_norm) / y_size_sqrt\n", + "\n", + " if error_norm < 1.:\n", + " # The error is low! Let's update this step for the next time loop\n", + " if error_norm == 0.:\n", + " step_factor = MAX_FACTOR\n", + " else:\n", + " error_pow = error_norm**-error_expo\n", + " step_factor = min(MAX_FACTOR, SAFETY * error_pow)\n", + "\n", + " if step_rejected:\n", + " # There were problems with this step size on the previous step loop. Make sure factor does\n", + " # not exasperate them.\n", + " step_factor = min(step_factor, 1.)\n", + "\n", + " step_size = step_size * step_factor\n", + " step_accepted = True\n", + " else:\n", + " error_pow = error_norm**-error_expo\n", + " step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)\n", + " step_rejected = True\n", + "\n", + " if step_error:\n", + " # Issue with step convergence\n", + " status = -1\n", + " break\n", + " elif not step_accepted:\n", + " # Issue with step convergence\n", + " status = -7\n", + " break\n", + "\n", + " # End of step loop. Update the _now variables\n", + " t_old = t_new\n", + " for i in range(y_size):\n", + " y_old_view[i] = y_new_view[i]\n", + " dydt_old_view[i] = dydt_new_view[i]\n", + "\n", + " # Save data\n", + " if len_t >= (num_concats * expected_size_to_use): \n", + " # There is more data than we have room in our arrays. \n", + " # Build new arrays with more space.\n", + " # OPT: Note this is an expensive operation. \n", + " num_concats += 1\n", + " new_size = num_concats * expected_size_to_use\n", + " time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')\n", + " y_results_array_new = np.empty((store_loop_size, new_size), dtype=DTYPE, order='C')\n", + " time_domain_array_new_view = time_domain_array_new\n", + " y_results_array_new_view = y_results_array_new\n", + " \n", + " # Loop through time to fill in these new arrays with the old values\n", + " for i in range(len_t):\n", + " time_domain_array_new_view[i] = time_domain_array_view[i]\n", + " \n", + " for j in range(store_loop_size):\n", + " y_results_array_new_view[j, i] = y_results_array_view[j, i]\n", + " \n", + " # No longer need the old arrays. Change where the view is pointing and delete them.\n", + " y_results_array_view = y_results_array_new\n", + " time_domain_array_view = time_domain_array_new\n", + " # TODO: Delete the old arrays?\n", + " \n", + " # There should be room in the arrays to add new data.\n", + " time_domain_array_view[len_t] = t_new\n", + " # To match the format that scipy follows, we will take the transpose of y.\n", + " for i in range(store_loop_size):\n", + " if i < extra_start:\n", + " # Pull from y result\n", + " y_results_array_view[i, len_t] = y_new_view[i]\n", + " else:\n", + " # Pull from extra\n", + " y_results_array_view[i, len_t] = extra_result_view[i - extra_start]\n", + "\n", + " # Increase number of time points.\n", + " len_t += 1\n", "\n", + " # # Clean up output.\n", + " if status == 1:\n", + " success = True\n", "\n", - "cpdef void test_no_t(double[:] arr_in, double[:, :] arr_out):\n", - " \n", - " cdef Py_ssize_t i, j, size_0, size_1\n", - " size_0 = arr_in.size\n", - " size_1 = arr_out.shape[0]\n", - " \n", - " for i in range(size_0):\n", - " for j in range(size_1):\n", - " arr_out[j, i] = arr_in[i] / j\n", + " # Create output arrays. To match the format that scipy follows, we will take the transpose of y.\n", + " if success:\n", + " # Build final output arrays.\n", + " # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.\n", + " # This process will remove that junk and leave only the wanted data.\n", + " solution_y = np.empty((store_loop_size, len_t), dtype=DTYPE, order='C')\n", + " solution_t = np.empty(len_t, dtype=np.float64, order='C')\n", "\n", - " \n", - "cpdef void test_wt(double[:] arr_in, double[:, :] arr_out):\n", - " \n", - " cdef Py_ssize_t i, j, size_0, size_1\n", - " size_0 = arr_in.size\n", - " size_1 = arr_out.shape[0]\n", - " \n", - " cdef double[:, :] arr_view_t\n", - " arr_view_t = arr_out.T\n", - " \n", - " for i in range(size_0):\n", - " for j in range(size_1):\n", - " arr_view_t[i, j] = arr_in[i] / j\n", - " \n", - " arr_out = arr_view_t.T\n", - " " + " # Link memory views\n", + " solution_y_view = solution_y\n", + " solution_t_view = solution_t\n", + "\n", + " # Populate values\n", + " for i in range(len_t):\n", + " solution_t_view[i] = time_domain_array_view[i]\n", + " for j in range(store_loop_size):\n", + " solution_y_view[j, i] = y_results_array_view[j, i]\n", + " else:\n", + " # Build nan arrays\n", + " solution_y = np.nan * np.ones((store_loop_size, 1), dtype=DTYPE, order='C')\n", + " solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')\n", + "\n", + " # Link memory views\n", + " solution_y_view = solution_y\n", + " solution_t_view = solution_t\n", + "\n", + " cdef double_numeric[:, :] y_results_reduced_view\n", + " cdef double_numeric[:] y_result_timeslice_view, y_result_temp_view, y_interp_view\n", + "\n", + " if run_interpolation and success:\n", + " old_status = status\n", + " status = 2\n", + " # User only wants data at specific points.\n", + "\n", + " # The current version of this function has not implemented sicpy's dense output.\n", + " # Instead we use an interpolation.\n", + " # OPT: this could be done inside the integration loop for performance gains.\n", + " y_results_reduced = np.empty((total_size, len_teval), dtype=DTYPE, order='C')\n", + " y_result_timeslice = np.empty(len_t, dtype=DTYPE, order='C')\n", + " y_result_temp = np.empty(len_teval, dtype=DTYPE, order='C')\n", + " y_results_reduced_view = y_results_reduced\n", + " y_result_timeslice_view = y_result_timeslice\n", + " y_result_temp_view = y_result_temp\n", + "\n", + " for j in range(y_size):\n", + " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", + " # # Set timeslice equal to the time values at this y_j\n", + " for i in range(len_t):\n", + " y_result_timeslice_view[i] = solution_y_view[j, i]\n", + "\n", + " # Perform numerical interpolation\n", + " if double_numeric is cython.doublecomplex:\n", + " interp_complex_array(\n", + " t_eval,\n", + " solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", + " else:\n", + " interp_array(\n", + " t_eval,\n", + " solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", + "\n", + " # Store result.\n", + " for i in range(len_teval):\n", + " y_results_reduced_view[j, i] = y_result_temp_view[i]\n", + "\n", + " if capture_extra:\n", + " # Right now if there is any extra output then it is stored at each time step used in the RK loop.\n", + " # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?\n", + " # or do we use the interpolation on y to find new values.\n", + " # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.\n", + " if interpolate_extra:\n", + " # Continue the interpolation for the extra values.\n", + " for j in range(num_extra):\n", + " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", + " # # Set timeslice equal to the time values at this y_j\n", + " for i in range(len_t):\n", + " y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]\n", + "\n", + " # Perform numerical interpolation\n", + " if double_numeric is cython.doublecomplex:\n", + " interp_complex_array(\n", + " t_eval,\n", + " solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", + " else:\n", + " interp_array(\n", + " t_eval,\n", + " solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", + "\n", + " # Store result.\n", + " for i in range(len_teval):\n", + " y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]\n", + " else:\n", + " # Use y and t to recalculate the extra outputs\n", + " y_interp = np.empty(y_size, dtype=DTYPE)\n", + " y_interp_view = y_interp\n", + " for i in range(len_teval):\n", + " time_ = t_eval[i]\n", + " for j in range(y_size):\n", + " y_interp_view[j] = y_results_reduced_view[j, i]\n", + "\n", + " if use_args:\n", + " diffeq(time_, y_interp, diffeq_out, *args)\n", + " else:\n", + " diffeq(time_, y_interp, diffeq_out)\n", + "\n", + " for j in range(num_extra):\n", + " y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]\n", + "\n", + " # Replace the output y results and time domain with the new reduced one\n", + " solution_y = np.empty((total_size, len_teval), dtype=DTYPE, order='C')\n", + " solution_t = np.empty(len_teval, dtype=np.float64, order='C')\n", + " solution_y_view = solution_y\n", + " solution_t_view = solution_t\n", + "\n", + " # Update output arrays\n", + " for i in range(len_teval):\n", + " solution_t_view[i] = t_eval[i]\n", + " for j in range(total_size):\n", + " # To match the format that scipy follows, we will take the transpose of y.\n", + " solution_y_view[j, i] = y_results_reduced_view[j, i]\n", + " status = old_status\n", + " \n", + " # Set message\n", + " if status == 1:\n", + " message = \"Integration completed without issue.\"\n", + " elif status == 0:\n", + " message = \"Integration is/was ongoing (perhaps it was interrupted?).\"\n", + " elif status == -1:\n", + " message = \"Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers.\"\n", + " elif status == -2:\n", + " message = \"Maximum number of steps (set by user) exceeded during integration.\"\n", + " elif status == -3:\n", + " message = \"Maximum number of steps (set by system architecture) exceeded during integration.\"\n", + " elif status == -6:\n", + " message = \"Integration never started: y-size is zero.\"\n", + " elif status == -7:\n", + " message = \"Error in step size calculation:\\n\\tError in step size acceptance.\"\n", + " elif status == -8:\n", + " message = \"Attribute error.\"\n", + "\n", + " return solution_t, solution_y, success, message\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 33, - "id": "a508078d", + "execution_count": 45, + "id": "0be43685", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "False\n", - "16.9 ms ± 598 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", - "16.6 ms ± 147 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "182\n" ] } ], "source": [ - "x = np.linspace(0., 100., 100000, dtype=np.float64)\n", - "Z1 = np.zeros((100, x.size), dtype=np.float64)\n", - "Z2 = np.zeros((100, x.size), dtype=np.float64)\n", - "\n", - "test_no_t(x, Z1)\n", - "test_wt(x, Z2)\n", - "\n", - "print(np.all(Z1 == Z2))\n", - "\n", - "%timeit test_no_t(x, Z1)\n", - "%timeit test_wt(x, Z2)" + "t_cy, y_cy, _, _ = cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", + "print(t_cy.size)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "f4a356ce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "182\n" + ] + } + ], + "source": [ + "t_cy, y_cy, _, _ = cyrk_ode_2(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", + "print(t_cy.size)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "77ad57b6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "181\n" + ] + } + ], + "source": [ + "t_cy, y_cy, _, _ = cyrk_ode_3(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", + "print(t_cy.size)" ] }, { @@ -23699,7 +20575,7 @@ "source": [ "print('Working on Cython (class) integration...')\n", "# Solver = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "Solver = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", + "Solver = cyrk_ode(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", "Solver.solve()\n", "print('Status', Solver.status)\n", "print('Success', Solver.success)\n", @@ -23768,25 +20644,53 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 28, "id": "01538911", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'line_profiler'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[28], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mload_ext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mline_profiler\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:2417\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[1;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[0;32m 2415\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[0;32m 2416\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m-> 2417\u001b[0m result \u001b[38;5;241m=\u001b[39m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 2419\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[0;32m 2420\u001b[0m \u001b[38;5;66;03m# when using magics with decodator @output_can_be_silenced\u001b[39;00m\n\u001b[0;32m 2421\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[0;32m 2422\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\extension.py:33\u001b[0m, in \u001b[0;36mExtensionMagics.load_ext\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m module_str:\n\u001b[0;32m 32\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m UsageError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMissing module name.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 33\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshell\u001b[38;5;241m.\u001b[39mextension_manager\u001b[38;5;241m.\u001b[39mload_extension(module_str)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124malready loaded\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 36\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m extension is already loaded. To reload it, use:\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m module_str)\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\extensions.py:76\u001b[0m, in \u001b[0;36mExtensionManager.load_extension\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Load an IPython extension by its module name.\u001b[39;00m\n\u001b[0;32m 70\u001b[0m \n\u001b[0;32m 71\u001b[0m \u001b[38;5;124;03mReturns the string \"already loaded\" if the extension is already loaded,\u001b[39;00m\n\u001b[0;32m 72\u001b[0m \u001b[38;5;124;03m\"no load function\" if the module doesn't have a load_ipython_extension\u001b[39;00m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;124;03mfunction, or None if it succeeded.\u001b[39;00m\n\u001b[0;32m 74\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 75\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 76\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_load_extension(module_str)\n\u001b[0;32m 77\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mModuleNotFoundError\u001b[39;00m:\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m module_str \u001b[38;5;129;01min\u001b[39;00m BUILTINS_EXTS:\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\extensions.py:91\u001b[0m, in \u001b[0;36mExtensionManager._load_extension\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 89\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshell\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m module_str \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m sys\u001b[38;5;241m.\u001b[39mmodules:\n\u001b[1;32m---> 91\u001b[0m mod \u001b[38;5;241m=\u001b[39m import_module(module_str)\n\u001b[0;32m 92\u001b[0m mod \u001b[38;5;241m=\u001b[39m sys\u001b[38;5;241m.\u001b[39mmodules[module_str]\n\u001b[0;32m 93\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_load_ipython_extension(mod):\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\importlib\\__init__.py:126\u001b[0m, in \u001b[0;36mimport_module\u001b[1;34m(name, package)\u001b[0m\n\u001b[0;32m 124\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[0;32m 125\u001b[0m level \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m--> 126\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _bootstrap\u001b[38;5;241m.\u001b[39m_gcd_import(name[level:], package, level)\n", + "File \u001b[1;32m:1204\u001b[0m, in \u001b[0;36m_gcd_import\u001b[1;34m(name, package, level)\u001b[0m\n", + "File \u001b[1;32m:1176\u001b[0m, in \u001b[0;36m_find_and_load\u001b[1;34m(name, import_)\u001b[0m\n", + "File \u001b[1;32m:1140\u001b[0m, in \u001b[0;36m_find_and_load_unlocked\u001b[1;34m(name, import_)\u001b[0m\n", + "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'line_profiler'" + ] + } + ], "source": [ "%load_ext line_profiler" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 22, "id": "d8e6a48b", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "119 ms ± 8.71 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + "ename": "NameError", + "evalue": "name 'PendulumSolver' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[22], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtimeit\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPendulumSolver(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:2417\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[1;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[0;32m 2415\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[0;32m 2416\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m-> 2417\u001b[0m result \u001b[38;5;241m=\u001b[39m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 2419\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[0;32m 2420\u001b[0m \u001b[38;5;66;03m# when using magics with decodator @output_can_be_silenced\u001b[39;00m\n\u001b[0;32m 2421\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[0;32m 2422\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\execution.py:1170\u001b[0m, in \u001b[0;36mExecutionMagics.timeit\u001b[1;34m(self, line, cell, local_ns)\u001b[0m\n\u001b[0;32m 1168\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m index \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m 1169\u001b[0m number \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m10\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m index\n\u001b[1;32m-> 1170\u001b[0m time_number \u001b[38;5;241m=\u001b[39m timer\u001b[38;5;241m.\u001b[39mtimeit(number)\n\u001b[0;32m 1171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m time_number \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.2\u001b[39m:\n\u001b[0;32m 1172\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\execution.py:158\u001b[0m, in \u001b[0;36mTimer.timeit\u001b[1;34m(self, number)\u001b[0m\n\u001b[0;32m 156\u001b[0m gc\u001b[38;5;241m.\u001b[39mdisable()\n\u001b[0;32m 157\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 158\u001b[0m timing \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minner(it, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtimer)\n\u001b[0;32m 159\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 160\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m gcold:\n", + "File \u001b[1;32m:1\u001b[0m, in \u001b[0;36minner\u001b[1;34m(_it, _timer)\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'PendulumSolver' is not defined" ] } ], @@ -23796,7 +20700,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 48, "id": "698b6e53", "metadata": {}, "outputs": [ @@ -23804,7 +20708,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "254 ms ± 36 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + "301 ms ± 68.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], @@ -23814,7 +20718,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 24, "id": "67b12e97", "metadata": {}, "outputs": [ @@ -23822,7 +20726,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.16 s ± 65.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + "1.21 s ± 90 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], @@ -23832,7 +20736,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 44, "id": "49701a69", "metadata": {}, "outputs": [ @@ -23840,20 +20744,50 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.23 s ± 79.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + "1.27 s ± 69.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" ] } ], "source": [ + "# 1.15s\n", + "# 1.19s\n", + "# 1.22s, 1.31s\n", + "# 1.18s, 1.23s\n", "%timeit cyrk_ode_2(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 41, + "id": "f6f7ba37", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.28 s ± 39.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%timeit cyrk_ode_3(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, "id": "8bf52cba", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "UsageError: Line magic function `%lprun` not found.\n" + ] + } + ], "source": [ "%lprun -f cyrk_ode_2 cyrk_ode_2(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" ] diff --git a/pyproject.toml b/pyproject.toml index d5e70fd..958974f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0dev3' +version = '0.7.0dev4' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 21d4777558888980ca3e0a02ffd2fdf1b77246c3 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sat, 26 Aug 2023 00:45:09 -0400 Subject: [PATCH 18/29] Converted RK variable lengths to Py_ssize_t types. --- Benchmarks/CyRK - SciPy Comparison.ipynb | 24 ++++----- Benchmarks/CyRK_CySolver.pdf | Bin 13874 -> 13904 bytes Benchmarks/CyRK_cyrk_ode.pdf | Bin 13874 -> 13904 bytes Benchmarks/CyRK_numba.pdf | Bin 13874 -> 13874 bytes Benchmarks/SciPy.pdf | Bin 13874 -> 13874 bytes CHANGES.md | 1 + CyRK/cy/cyrk.pyx | 6 +-- CyRK/cy/cysolver.pxd | 2 +- CyRK/rk/rk.pyx | 62 +++++++++++------------ pyproject.toml | 2 +- 10 files changed, 49 insertions(+), 48 deletions(-) diff --git a/Benchmarks/CyRK - SciPy Comparison.ipynb b/Benchmarks/CyRK - SciPy Comparison.ipynb index fea5ac5..05d7922 100644 --- a/Benchmarks/CyRK - SciPy Comparison.ipynb +++ b/Benchmarks/CyRK - SciPy Comparison.ipynb @@ -165,7 +165,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAGwCAYAAACtlb+kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEUElEQVR4nO2deZxdVZXvv5VUKmNVEghJZQASkDkMAqGRDiYiQcQWDPoAQQWablp8vLToaxponxFb5UkzpEFom/cQaJ+iqNAoCgYCibRhMEFiEmQQCIRKpcxcSSqpSiX7/bHPqX1O1R3OPK7v53M+5+bec0/t+8vea6+99tr7NAAKQRAEQRCEAjMo7QIIgiAIgiDEjTg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwtOYdgGyxKRJk9i+fXvaxRAEQRAEwQfNzc2sW7eu5jXi8FhMmjSJtra2tIshCIIgCEIAJk+eXNPpEYfHwo7sTJ48WaI8giAIgpATmpubaWtrq9t3i8PTj+3bt4vDIwiCIAgFQ5KWBUEQBEEoPOLwCIIgCIJQeMThEQRBEASh8EgOjyAIgiDkgBEjRjBu3DgaGhrSLkpiKKXYuHEjXV1doe8lDo8gCIIgZJiGhgYuv/xyZs+enXZRUmPx4sXcd999KKUC30McHkEQBEHIMJdffjmzZs3ixz/+Ma+++iq9vb1pFykxGhsbOfLII7ngggsA+N73vhf8XlEVShAEQRCEaBk5ciSzZ8/mxz/+Mb/85S/TLk4qvPnmmwBceOGF/OhHPwo8vSVJy4IgCIKQUfbff38AXn311ZRLki727x83blzge4jDIwiCIAgZxU5QLtM0ViXs3x8mYVscHkEQBEEQCo84PIIgCIIgFB5xeARBEARBKDzi8JSGwch/txPRQhAEoUyI1S8Fk4FNwPfTLkhG+BTQDVycdkEywl3Ae8DUlMuRBYYCLwNPAuXZzbY604HNwD+mXZCMcBWwAfjLtAuSEQ4BjkYPqLOPODyl4BPAaHQH/750i5IJbkVvQfUDpFMD+ALaKf5u2gXJAO8HjgfORLebsnMVMBb438D4lMuSBe4GxgH/lWopRqR0uBmErhvDgYkVy7l27Vquuuoq13sf+MAH2LlzJwcddFCg3x4GcXhKgdPJ+evUSpFNPpx2AVJmiuP1HCqZtXJxjOP11amVIjsc4Hh9eWqlyCbvT+WvjgB2pnS4rcMwx+v9K5b1+eefZ8aMGa73FixYwIIFC3j33Xd9//awiMNTCk5wvD4prUJkhGHoaIbNcWkVJCMc63g9CJnWmu54fXhqpcgOTgew7HpM7vfvw1IpRXYY7njdSKVprf4Oz2c/+1kOOuggbrrpJgA+9rGP8eqrr/L6669zxRVXxFxeebRESXB26v0bbdnoP988pdqFJWF6v39PAV5JoyAZwdnBT0TXlb0plSVtmnB36mVvK8f0+/eBqZSiCxiZyl/Wf9swvN+nTcAu1zvPP/883/72txk5ciT79u3jW9/6Fl/5ylfYsWMHgwcP5rbbbuNDH/oQnZ2dvPTSSzz88MNs2bIltvKLw1N4hgH7Of5ddqPV30iV3QE8pN+/y14/DnW8Hgy0Am0plSVtDgSGOP4tdcNNenoEe5JU1Azt9+8h9Hd4li1bxt69eznxxBM588wz2bRpU9/DP0855RRWr17NunXrAPjVr37FRz7yEX70ox/FVmJxeApP/7nV0ejxwc4UypIF9uv377IbcdHDTSU9yurw9NcinYhGdpC24qa/+9A04Iru7m5WrFjB+eefz5VXXsnHP/5xlFIATJo0ibY207bee+89Jk+OdwAqOTyFx3Z4OoBO63WZoxq2Hq9Z5zJrAcaI23qU2YgPBsZYr209ytzJ928rzUBLSmXJAnZbsR/iWea6ASY1YLd1HujwgJ7WmjdvHk899RRPP/103/uVnollO0NxIQ5P4bEb6Sb0XitQ7k7e1uMP1nkS5V6a3l+PMjs8YxyvV1rnMuth14216L14QPQAaSs2doTHnsYaUvGql19+md7eXv7hH/7B9X5bW5srojNlyhTa29tjKKdBHJ7CY4/SNmFC82VuqLYer6CTUYdQ7v1FxIgbbC22AWus16KHdnbswVKZoxr928pEyp0VYv92O6OocoTnkksu4e677+b11193vf/iiy8yffp0Jk2axKhRozjnnHP49a9/HV9xKff/VkmwO/jNgJ39LhEe+DOwHq3FFPSUXxnpb8SlQ5MO3qa/HschDiDoKa0edAc/ER0BKxsNmMi4HeExDk9DQwMHHHAAV1xxBUcccQRz584dcIe9e/fy5S9/mWeeeYZBgwZx8803s3nz5gHXRYk4PIXHOaW13npdeVfMcuCMeLWjHZ7W9IqTKkMwORmrrfMY6/09aRQoZZwdvN1WxqVUlizg1MPuzA6ocm0ZsPXYiB4wTUHXjzI6PLbroNCP6XG+Bx/84Ad5+umnefXVVzn//PPp7OzsfwMAfvGLX/CLX/wi1pI6EYen8Dg7+I3W6/6rDcqE04hvsl6PTaksaWP/7n3AO9bZ3i7+z2kVKkWc0VB7pCltxe3wiB6mfkyhvHrYrkOvdTjfgyVLljB4cPaeryU5PIXH6fDYU1plbaTg1qPsnZr9u7eijdbWfu+XDWc0tOx1AwZ28M73yojoYbCdmb24N+bMnpPjRByewjPGOm9BGimY3y56uA248yx6iBYgejgZiYlyiR7uCI9CR4dBHB4hZUZZ5+1IIx2EefxdJxLxsvN37Pn1steP0da5E6PFKKqtPik+th7bMG2lrNO/Y6zzHnSSbtlthzPCA5WmtbKIODyFx3Z4diJGy/ms351IB2/XjR3Wuex62E8o2oF2emxjXtb24tRD6oZG2orGdh3syI7dViTCI6SKs1NzNtIybrZna7EXvTuorUfZOzT7MSNlN+JOPRQyincOlqRuaKStaCTCI2QSZ0O1Dfhg9DbxZUOMlhuJ8LgRPdw420vZtZC64aZ/hEccHiETOBvqbswmUWWMaojRciMOoBvRwzAYGGa9dkaHRzjeLxNSN9zIlJaQSaShGvprUfYpi2p5CWV0hkHyNJyMdLzeic5pskfxZawfYkfd2K6DTGkJmWEQYsSdVIvwjKXcOU1ixDWih8G2G3sxO+mWeYAg0WE3diRHprSEzOBclWQ3VDFaAyM8gzFLtMuEjFrdiB6G/h08lFsPqRtuZEpLyBx2I92Hzt+Bck9b9I92dWMMWBkNV7VR6/4Vri0DooehfwcP5e7kqzk8w3APLMuCt6TltWvXctVVV7ne+8AHPsDOnTs56KCDYi1hJcThKTSVRmkS4XEb8a3WeTTlo78R32adyxjtAtHDSf/BAZS7rfS3HTswnX0a9WNESodN/2XplSM8zz//PDNmzHC9t2DBAhYsWMC7774b8LcHRxyeQlNplGbvqlvmZelOI27rIZ1aubVw7sItelQeHGy3zmI7NGnVjxHo/5c0DruNeJvS6u/wfPazn+Wggw7ipptuAuDhhx9m8+bN/OQnPwkuhw/E4Sk0lSI8YsQrO4Cih9FiKOV7nEL/Xbih3HWj1mBJ9NCUWY9qDo/bpXj++ec56qijGDlyJMOHD+db3/oWX/nKV9ixQ/dJd9xxB5/73OcSKTFkPaVaCIl08G4qjdJk1OoO09u0ABuTLU6qOPPd7L2qpG7IYMkmSxGvLtzbBiT9t2HgsvTKDw9dtmwZe/fu5cQTT+TMM89k06ZNfO973+v7fPHixcyaNSvOArsQh6fQiNFyIw6gm/71Y5/1ehTldXikbmikrbjJmi3tqn9JrPRflm47Pg3WoQDo7u5mxYoVnH/++Vx55ZV8/OMfRymVbFEdyJRWocnSqCQLSKfmplanVrb6IR28G2krbkQPN/2ntPY5PhuYxzNv3jyeeuopnn766SQKVxVxeAqNvQX8Lsd7ZW6kdp6Gc3RUZj3EiBtECzeihxtxiA1Ot8Hp6FROXH755Zfp7e3lH/7hH+IuWF1Sd3g+//nPs2LFCrZt28a2bdtYunQpZ599tuua+fPn09bWRldXF8888wxHH3206/OmpibuuOMONmzYwI4dO3j00UeZPHlykj8jowy3zuLwaMQBdCN6GGppMYzyJXHbtqPS4KBs0T+QtuLEuSt9fYfnkksu4e677+b111+Pu2B1Sd3hee+997juuus4+eSTOfnkk3n66ad59NFH+5yaa6+9li996UtcffXVzJgxg/Xr1/Pkk08yatSovnssWLCAuXPnctFFFzFz5kxGjRrFY489xqBBqf+8lLEb6W7He2VtpFBbj7IZ8cGYFD6pH5U7tO2O12WrH5Xaiq1H2eoGyODRid2v9s/FMSu1GhoaGD9+PNdffz1HHHEE8+fPr3inJ554gp/85Cecc845rF27lpNPPjmuQvehsnZs2rRJ/fVf/7UC1Lp169S1117b91lTU5PasmWLuvLKKxWgWlpaVHd3t7rgggv6rpk4caLq7e1VZ511lue/2dzcrJRSqrm5OfXfH90xX4FScJfjvWnWe9szUL6kj99av/08x3uft977aQbKl+QxyvrdSsEwx/s/s977uwyUMcnjfOt3/6bf+zus96dloIxJHt+1fvdXHO+dZr33egbKl/TxlvXbT3G89zXrve/E+rcPPvhg9R//8R/q4IMPzoAOKBiq4CQFJ/R7/0jr/dFq1qxZau/evWr16tXqlFNOieTv1tLBa/+dqRDIoEGDuPDCCxk5ciTPPfcc06ZNY+LEiSxcuLDvmp6eHpYsWcJpp50GwEknnURTU5Prmvb2dlatWtV3TSWamppobm52HcWj1ihtFBkI8CWMRLwMwxyvux2vyzqKr1Q3oLwRQIlouJGIl8Ge0trX730zpbVkyRIGDx7MMcccw4svvphg2WqTiR5v+vTpbN++ne7ubr773e8yd+5c/vjHP9La2gpAR0eH6/qOjo6+z1pbW+nu7mbr1q1Vr6nE9ddfT2dnZ9/R1tYW7Y/KBLbRqtTBgxhxKK8Rd9YN5XhfOng3Za0fMjhwI7bDUG9KK7sPEM2Ew/Paa69xwgkncOqpp/Jv//ZvPPDAAxx11FF9n/dft9/Q0FB3LX+9a2666SZaWlr6jmImOVfKS+jBjOjL1lDFiBvqRTRED43oYbC1GE75tnAT22HovyTdRhweT+zZs4c333yT5cuXc8MNN7BixQr+/u//nvXr1wMMiNSMHz++L+qzfv16hg4dypgxY6peU4menh62b9/uOopHpQgPyCheRmnSwfdH9HBTqa1IErc4PFB/SisTbkVFMlmyhoYGhg4dyttvv017eztz5szp+2zIkCHMmjWLpUuXArB8+XJ6enpc17S2tjJ9+vS+a8pLpQgPlHfuWVZpGWQKx001PaStGPZi9qEpkx5DHa+THyzZMxWNjVmJqlWb0qr8eImosH9/mJ2aU1fwm9/8Jo8//jhr166lubmZiy66iNmzZ/ftxbNgwQJuuOEG3njjDd544w1uuOEGurq6+OEPfwhAZ2cn9957L7feeiubNm1i8+bN3HLLLaxcuZKnnnoqzZ+WAWTU6qbWqLUF55boxada3ZAO3k1Z20qt+jGScukx3PE6+QjPpk2bADjyyCN58803Y/1b3khnSuvII48EYOPG4I+8Sd3hmTBhAt///veZOHEi27Zt4w9/+ANnn312n7Ny8803M3z4cO6++27Gjh3LCy+8wFlnndX3tFWAa665ht7eXh566CGGDx/OokWLuOyyy9i3r/9/SNmQUbyhATNSq5bEPQp32L7ISAfvRlZpuallO1opV/2w68ZeoNfxfjJ1Y+fOnSxevJgLLrgAgFdffZXe3t4634qTscAEtOPbXeH9EUQ5cGxsbOTII4/kggsuYPHixXR1BX+OWOoOz9/8zd/UvebGG2/kxhtvrPp5d3c38+bNY968eVEWrQBIp2ZwhqWdenSjE7mb0HqUxeGp5wxLB68pY1sBsR1O6qUGjEB3pfE5Iffddx8AF154YWx/wzvNwH7oXbg3ON4fCYxD15nq+bNBWbx4cZ8OQUnd4RHiRDo1gzMsXUmPcWgjXsTtCSohHZob0cON6GGotvijfxL3lthKoJTie9/7Hj/60Y8YN24cDQ0N9b8UG58DbgB+Afwvx/sfBO4BVgJXRvbXlFJs3LgxVGTHRhyeQiN5GgZbi17MXLON0+EpC9KhuRE93EjEy1CtbuxB6zMcrUd8Do9NV1cX7777bux/pzY9aE06gXcc779tvd/S7/3skMlVWkJUiNEyVNMCyh3xqrUqKc1RZNLIKi03ktNkqDalBeW2pfkbHIjDU2hk1GqopgWUs1OrVzdAJ3GXBWkrbiQ6bKjWwUM560c1BzD7WojDU2gkh8fgJcKT3YYaPdWM1m50qB7KqYdENGAIZmlx/jq16Kk1WCpj/ajXVkaS1d2WxeEpNDJKM3gxWmXSw8uotUxGXKZ/Dc4Hy0rES6a0+uM1iTt7iMNTaEZYZzHiEuHpjziAbmRKy+B0eLr7fVZGPWoNDso8eOxvS/c43hOHR0iUJsdrMeISlu5PLQewzEa82qi1mfIkccvgwI0MDtzkN6dJHJ7C4iUsLR28JtuNNB7EiLupN6U1CJ2bUAZkcOBGprTc5HcBiDg8hcW50V5Pv8/K3Ej7h+gh6400HsThcVNNj12YHXTLoofUDTf5jWjEQ34dQHF4Ckul50bZlLGDr6VHthtpPEin5kb0MEjOihupG27y6wCKw1NY7A6+UkTDrpRNuJ8xVWS86JHNRhoPMm3hRvQwyODAjdQNN/m1peLwFBY7ablSpdzheJ3Nihk9+W2k8WDr0X+6E0SP/pRND2krbqRuuMlv/RCHp7DUqpT7cK8+KQP5baTxUMshLtu0xRDHa9HDW1spUxK3tBU3tepHtvUQh6ew1KqUkPWKGT219LAjXmVx/sCb0SqLHs5pXdHDdPCVIhq7MA/fLYse0lbceNEjm4+lEYensHh1eMrSUGuFpcumBYgRdyIOj5t6tqNsAwRpK27ya0vF4Sks4vC48RKWHgY0JlOc1BEjbrC12AOoCp+XVY96tiObo/jokbbixostzaYe4vAUllpeOMgozYnzGTBlM+KV6kdZ64a0FY0MltxIW3GTXwdQHJ7CIqM0N7X06MUsOc1mQ40eL6M0qRuasupRzQHMdqcWPV7aShPu5PciIw6PkDlqNVLIesWMHhm1usmv0YoeaStuRA83XqPDZdCjAePY5S/iJQ5PYZEO3o0kYroRh8cgbcWNtBU3tfTYS9afEB4tzodS5y86LA5PYREj7kbC9G7yu7Q0eqRuuBHb4Ub0MOR7RaM4PIVFGqkbr2H6snTytfZasbUoy+Zy0lbcSE6TG3GIDU6HR5alC5lBjLgb0cMw2Dqgsh5d6N24oRx6yBSOm1rOMJSrrUD9wVKZ6ocfO9oQf3F8Ig5PYZGltm7E4THUC0tDueqHRP/cSFtxIxEvg1dnGLIYHRaHp7CIEXcjRtzgxeEpU/2QuuFG9HAjehjqabGbLD96RByewiKN1I1MWxhsLfZhjFN/ylQ/JEfDjdgON6KHoZ4WkOXBkjg8hUUaqRvp1Az1on9QLj28tpWhlGNzOZkOdyO2w+DH4cmeHuLwFBZxeNzIZmqGfBut6PEa/YNy6CHT4W7EdhjqOX+QZT3E4Sks4vC4kcRDgzg8burpUbZHj4jtcDPMOst0eN6jw+LwFBavYekydPAgRtyJF4enjEbcy6i1DO1F2orBOYUpeuR9sCQOT2HxarRkczlNdhtp9PgJS0sHrylj/ZC2Iisa+5PvwZI4PIWlXuhxJ2ZzuTI1VEnEzHtYOnrE4XHjZ+PB7G0uFy31dhaGctWNfA+WxOEpLPn2xKNlENBovZZRq3Tw/RE93PhJ4i56dNjWohczQOxPmepGvgdL4vAUFjHihnpP+IXyaAFSN/ojeripp8cuzP5N2RvFR0u+O/joyXdbEYensOS7YkaLzMO7kbrhxkvSclmioSD1w4lEyt3ku26Iw1NY8l0xo8Xp8Oypco2txTDM9FdRyfdeGtGT791jo0fqh0HsqJt86yEOT2HxYrTKMjKxtdhd45oybS7nJUxfpm0L8m3Eo0emcQziDLvJdzRUHJ7C4sdoFb2henH+yrS5nHTwbkQPN6KHwU+0qwl3vmARybcDKA5PYZFRmsGLFlAePaRDcyN6uJG8FYOfaCgUX498txVxeAqLn91js1cxo0UcHjdSN9yIHoZBwGDrdT73WokWLx38XqDLel30+pHv/K7UHZ7rrruOF198kc7OTjo6OnjkkUc4/PDDXdfcd999KKVcx3PPPee6pqmpiTvuuIMNGzawY8cOHn30USZPnpzkT8kYYsQNXrSA8unhdZRW9M3l/Iziy1I3IK+j+GjxOlgqW/3IZ91I3eGZNWsWd911F6eeeipz5syhsbGRhQsXMmLECNd1jz/+OK2trX3HOeec4/p8wYIFzJ07l4suuoiZM2cyatQoHnvsMQYNSv0npoQ4PAa/Dk/RR61+6gYUf3M5eZaWwenwiO2QwVJ/8t2vpL7+9qMf/ajr35dffjkbNmzgpJNO4tlnn+17v7u7m46Ojor3aGlp4YorruCzn/0sixYtAuAzn/kMa9eu5cwzz2ThwoUDvtPU1MTQoWa5cnNz9v5zwiGrtAxitNx40cPeXG4wupPfUePavJNvIx4tToen2hYOUD49ZLCk8bNKaxQ6OqxiLZEfMhf+GD16NACbN292vT979mw6Ojp47bXXuOeeezjggAP6PjvppJNoampyOTbt7e2sWrWK0047reLfuf766+ns7Ow72traYvg1aeF3Hl6MlkYcQDeih0HaihvRw43oYXBGh7PlAGbO4bntttt49tlnWb16dd97jz/+OJdccglnnHEGX/7yl5kxYwZPP/00TU1a/NbWVrq7u9m6davrXh0dHbS2tlb8OzfddBMtLS19R7HyffyGpbNVKaNHjJYb0cONODwGL5FhEGe4P2WpH1702I3e5gOy1rekPqXl5Dvf+Q7HHXccM2fOdL3/0EMP9b1evXo1y5Yt45133uFjH/sYjzzySNX7NTQ0oFTlcFpPTw89PfUqcV6ReXg3YrTciB5uxOExyBSOG2krbvzoMRatR3usJfJDZiI8d9xxB+eeey4f+tCH6k4vrV+/nnfeeYfDDjus799Dhw5lzJgxruvGjx9fNe+n2Mg8vBsxWm5EDzd+8hKKvrmc1A03Mv3rJt/1IxMOz5133sn555/PGWecwZo1a+pev99++3HggQfS3q49x+XLl9PT08OcOXP6rmltbWX69OksXbo0rmJnGLtS7qF2wlg2K2X0yKjVTb6NVvT4zUsosh5SN9yIHm7yrUfqU1p33XUXF198Meeddx7bt29nwoQJAGzbto3du3czcuRIvva1r/Gzn/2M9vZ2pk6dyre+9S02btzYN53V2dnJvffey6233sqmTZvYvHkzt9xyCytXruSpp55K8+elRL4rZfSIHm7EAXTjRY+96JVrw9F6bIq7UCkhbcWNtBU3+d6XKHWH5wtf+AIAS5Yscb1/2WWX8cADD7B3716OPfZYPve5zzFmzBja29t55plnuPDCC9mxwyyVveaaa+jt7eWhhx5i+PDhLFq0iMsuu4x9+/Yl+nuyQZAwbLaWD0aLhKXdSGKqGz+d2nCKrYc4PG5EDzf51iN1h6ehofYurrt37+bss8+ue5/u7m7mzZvHvHnzoipajvH7KAWAEcDOeIqTOvlupNEjerjxo8d4iq2HDA7cSFtxk++IVyZyeISo8Vopu9Cheih2QxWj5Ub0MAxxvBY9gnVoRX70iLQVN/nWQxyeQuK1UkI5Rmpep3Cy2UijJ99GK1q8buEA5WgrfusGFPvRI9JW3ORbD3F4CokfhyebFTNa8t1Io0f0MPhxeMqkR73pcOfmcmXQQ5xhTb5thzg8hUQcHjf5nneOHtHDYGuxDzO9W40y6SG2QyNtxU2+HUBxeAqJTGm58dtIh+LO7Sga+TZa0SIdvBvRw02+IxrRk289xOEpJGK03ATJSxA9pG70R/RwIw6xoQx1A/Ie8RKHp5AEMeLZqpjR4lUPe3M5KLbhEiNuEIfHjejhxm9bGYJZJFFE8m07xOEpJGK03Igebvzu01QGLSSioZHBkhu/079Q3PoxCLN1nzg8QmaQDt6N6OEm36O0aJG64Ub0cONVj33ofc2guHrkf88qcXgKiRgtNzJqdSObyxm87tEEUjf6I7bDTdHrR/73rBKHp5CI0XIj0xZuZHM5g9fpPZC20h/Rw03R9XA6PHvqXJtNLcThKSTSwbsRo2XwMw+/m+I/ekTqhhuxHW6kfhhsLfZQ/0HTthYjyZKbkZ2SCBEiYXo3YrQMfubhofh6SN1wI3q4ET0MQbSALEWHxeEpJNJI3YgeBj/z8FAePSSioZGcFTdiOwx+BtLdmGmv7OghDk8hkUbqRvQw+JmHh/LoIXVDI3q4EYfY4EcLyGL9EIenkIjRciN6GPzMw0PxR/FB6sYQ3I5jkZC24kYiXgZxeIRMIkbLTZBRmhgtTdHrR5C6AaIHFL9uQLB8yKLq4dd2ZC/iJQ5PIZEwrBsx4ob8G61o8aPHXoq/uZzYDjdiOwxBB0vZGTyKw1NIgoZhi7q5nBgtg0R43IgebqStuJEIjyH/bUUcnkKS/+WD0SKbyxnyb7SiRSJebmRLC0Oj47U4PEWwHeLwFBI/HfwuZHM5J9lrpNGSf6MVLaKHG4kOG/xu4VB0Zzj/bUUcnkKS/4oZLeLwGPI/Dx8tooeboNHhIuohe1a5yX+/Ig5PIcl/xYwWWaVlkLrhRvRw40ePbG4uFx1Oh6fXw/VlcYa9zBxAFiNe4vAUEjHihkZMNZdRmr8cDSi+HtJW3EhOk8FvBy91w032HEBxeAqJGC1D0LB0U7/vFgWpG27E4XEjehhECzf510McnkKS/4oZHUETD6HYekjd0IgD6Cb/o/jokLbiJv96iMNTSMRoGfzOwxd9c7n8G61oET3ciB6GoM5wIzAs+uKkTv7rhjg8hST/FTM6/M7DQzn0EGdYI3q4kbwVQ1CHB0QPyGLdEIenkOS/YkaHXy2g2NMWUjfciB5uRA+DXy32ATut10V0iPM//SsOTyERo2UI4vAUeRQfJqJR5M3lpK1o8t+pRUcY2yF6ZFELcXgKSf4rZnSI0XITtG6AOIBQ7LrRAAyxXoseMh3en/xP/4rDU0hklGYQh8eNXyPejUn2LrIe0laMswN57tSiQ2yHm6AOz0iy4mpkoxRCxOTfE48OMVpuRA83EuEx+N3CAcqhh+T/afIfHRaHp5DIbroG6eDdSE6TGxkcGJwOz56qV7mRtuJG9DD0OK7Nhh7i8BQOmYd3I6M0N2LE3cgybIOtRS96xZEXyqCHDA40+bel4vAUjjDz8NmolNEiRsuNODxugkZ4hmAiqUVB6oYb0cNN/vUQh6dwyDy8m/w30mgRPdzI5nKG/I/go0Xaipv8Dx7F4SkcQRweMVpuxGi5kfph2EdxHz2S/w4tWsR2uMm/HuLwFA67Uu7F/zx8dpYPRkf+G2m0iB5uRA+DaOFGBgdu8l8/ita7CaEqJWinp0jkv5FGi4zi3YgeBmkrbkQPN35X/0LW9Ejd4bnuuut48cUX6ezspKOjg0ceeYTDDz98wHXz58+nra2Nrq4unnnmGY4++mjX501NTdxxxx1s2LCBHTt28OijjzJ58uSkfkaGCLI76G6Ku7mcjNLchDHiLRGXJQuIHoYwWkh0WNNpncV2aMThcTFr1izuuusuTj31VObMmUNjYyMLFy5kxIgRfddce+21fOlLX+Lqq69mxowZrF+/nieffJJRo8wIa8GCBcydO5eLLrqImTNnMmrUKB577DEGDUr9JyZMkEoJYsSdbLPORdMCwhlx0UNT1PoRpm6A6AHSVvpj6zE64rIER2XpGDdunFJKqdNPP73vvXXr1qlrr722799NTU1qy5Yt6sorr1SAamlpUd3d3eqCCy7ou2bixImqt7dXnXXWWZ7+bnNzs1JKqebm5tQ1CHecoEApWOvze29b3zslA78hyuNa63d9z8d3DrO+sy0D5Y/6eMr6bRf6+M4XrO/8JAPlj/IYZP0upWCsj+89an3nbzPwG6I8zrZ+1+98fq/L+t7BGfgNUR63Wb/rmz6+M9P6zmsZKH/Ux2rrt83y8Z2vW9+5M9ayee2/Mxf+GD16NACbN28GYNq0aUycOJGFCxf2XdPT08OSJUs47bTTADjppJNoampyXdPe3s6qVav6rulPU1MTzc3NrqMYBI3w2KPW0RGWJQuEHcFnromEJIweRa0bIHqA2I7+SFtxk/9oaOas+W233cazzz7L6tWrAWhtbQWgo6PDdV1HR0ffZ62trXR3d7N169aq1/Tn+uuvp7Ozs+9oa2uL+JekhRgtN0ES7bY5XhfFEbbJv9GKDnF43ARpK1D8+pHvKZzoyL8DmCmH5zvf+Q7HHXccn/70pwd8ppRy/buhoWHAe/2pdc1NN91ES0tL31GcBGdxeNwE0aMbk/QtRrz4dQO8PzsKpIPvT9HrR5C2Mgx3/SoC+bcdmXF47rjjDs4991w+9KEPuaIt69evBxgQqRk/fnxf1Gf9+vUMHTqUMWPGVL2mPz09PWzfvt11FIOgRquoIxMx4m7yb7SiQ+qGG7EdbsImcYseWasbmXB47rzzTs4//3zOOOMM1qxZ4/rs7bffpr29nTlz5vS9N2TIEGbNmsXSpUsBWL58OT09Pa5rWltbmT59et815UGMuBvRw02QaYtsGa3okLrhRvRwE0SPfciKVyfZqhuNaRfgrrvu4uKLL+a8885j+/btTJgwAYBt27axe/duQC85v+GGG3jjjTd44403uOGGG+jq6uKHP/whAJ2dndx7773ceuutbNq0ic2bN3PLLbewcuVKnnrqqdR+WzqI0XIjergJY7RGoE1Gb41r84TUDTeih5swejRTXD387PGWrenf1B2eL3zhCwAsWbLE9f5ll13GAw88AMDNN9/M8OHDufvuuxk7diwvvPACZ511Fjt2mAf5XXPNNfT29vLQQw8xfPhwFi1axGWXXca+fV4fr1AUwhqtbFTM6JAwvZsowvSboitOqgRN0pW64UZshxupH4ZsOcOpOzwNDQ2errvxxhu58cYbq37e3d3NvHnzmDdvXlRFyykySnMjergJosde9O7To9CdWlEcHung3UhbcSN6GIY4XgdxeIYAw4FdkZUoCJnI4RGixB61+ll1AsVspCCdWn/EiBtECzeihxvRwxB0C4ed6AETZEEPcXgKR5B5VihmIwUxWv2RML1B6oYbqRtuZLBkCOrwQJbqhzg8hcOO8IjDoxE93EgnbwirRRN6v5WiIHXDjUTLDXbd2GcdfsiOHuLwFA4xWm4k4mVwjtJEj+DO8A6M0Rc9ilk3ILjtyE5EIzqC1g3IUsRLHJ7CEbRiFrGRgqzEcRImLJ0doxUdQQcHCrPXShHrh9QNjTiAhigcnvT1EIencIRtpEMd9ygCYfUokhF3/r+KES/KqDU6pIN3I3oYgjrDkKXBozg8hSNoxXQ+WqNIRlym+AzOnITaz6EbSHaMVnSEMeJFrh9Bo8NFshsgES8nEuERMknQirmPYnZqMkozSAfvphhGPDrCdvCD0Xs1FQWxHYZi2A5xeApHMSpmdEjSskE6eDeih5ugeuzCrGQSPWTg2J/sRLzE4SkcYsTdBE1azk4jjQ6pG25kcOCmGJ1adMh0uKEYtkMcnsIRNKIBWaqY0RE2LN0IjIyuOKkSRQdfpA4tjBEvYt6KOIAG2cLBjSQtC5kkaEQDpKE66cI8FbwonVoxRmnRIXq4icIBLIoeUWzhMAqd11QEitFWxOEpHMWomNEhRtxQjFFadEhEw43oYYhiCweA5gjKkgWK0a+Iw1M4pFMzDMKMsPLdUKOhGEYrOkQPN6KHIcwWDnswTwUvih7FmA4Xh6dwSOKhwTlKk1FrdHWjKGZDOng3YjsMYTp4KN7gsRhtpSiWS+hDwtKGMGFpKJ4eUdQNKM5eK9JW3IgehjAdPBRPjzCLYbLj/InDUziK4YlHgzPx0O8Tj6F4eoSpGz3Abuu16FHMVVqS72YQh8dNFIthhgNDoilOQMThKRzi8BjCGq2idWoSpncjEQ03YjsMYdtK0ab4onCGIe36IQ5P4RAjbpBRmhvRw4108G7EdhikrbgJUzf2YZ7VKA6PEClixA1RjdKKoocYcTdRtJUR6M0pi4DYDkNU0WHRQ5ONiJc4PIVDRmkG6eDdiAPoJootHKAYegwmmi0cijKFI23FTTEcQF8Oz5QpU+IqhxAZMkozhFlZAMXToxijtOgIo8deYIf1ugh6hNlZGLLSoUWHDJbcFMMB9OXwvPrqq3z9619nxIgRcZVHCE0Uz9IqSpg+zMoCkA6+P9KpuSmSHrKFgxsZHLgphgPoy+GZM2cOZ511Fm+88QaXXXZZTEUSwjHMOgfp5Lc7XhehoUqH5qYYo7ToED0MzghPb9WrqlMkLUDqRn9K6PA899xznHrqqVx33XV8/etf56WXXmLWrFlxlU3wjXOPgyAVsxfYab0uQkOVKS03xTBa0SF6GGwtdte8qjq2Fk2YQVeekcGSm2Is0w+UtPz973+fww8/nF/84hf88pe/5OGHH+bQQw+NumyCb8LOw0MxjbhooZFRqxtxeAxhtdiBXn4MaXdq0SB1w00x9Ai8SquhoYGFCxdyzz33cO6557Jq1SpuueUWRo0qyrbz+eKTwGdDz8NDVipmGIYA/wgcKREeAA4CbgaGF8RoheVM4J8AcQA1VwMfCa2FwkQ1xoQtUmq0AN8AJkndAOAY4NvA4IJsWuorM/Xv/u7vmDFjBjNmzOCoo45i7969/OEPf+Cuu+7i5Zdf5pJLLuGVV15h7ty5LF++PK4yC/04A/gp0E4T3wf0CpJ9tb5Sg/w31JuBLwKTGco8IHgj3Wqdh6LD9EHD/ekxCPgtMAV4hKE8BwR3eLZa5zFhi5UaBwFPWq//haFWzSivHp8G7gReYii/BoJrAVqPMeRZjweATwAbGcoCoMx1Yxjwe/QA8t8ZyltAcD22WOcxocsVBl8Ozz/90z/x/PPP88ADD/D888+zbNkyenpMZ3Lfffdx/fXXc//993PsscdGXlihMt+2zt2hR/BgKubYEPdIjwPQzg5AU2g9tqOdx8FoPdpDlS0N/hva2YEoRq35rhsA8x2vw49a869H9LZjKnnV42i0swMwJrQedt0YjR52BB2ApseVmKzQ/UM7PFutc7p1w5fDc9BBB9W95t577+Wf//mfAxdI8McI4P3W62iM1lbrnE+jdarjdU/oKS3QeuyPHpnkz+E53fE6fP3Yap3HBC1O6nzQ8XpvyfWYChxove4J7fxB3vVwtpXwemxxvB4DbA54n/RwLkdSkekxJnB5oiDynZb//Oc/c8YZZ0R9W6EKJ6LjDzswjbQhlNHKRsUMygzr3Imzg49Cj3w6gCdb561E4fDkW4sxwPus11uAnpLrEW3dgKLosYUo9OjFbEw5JkSp0sPWYxtRDpZyFOHxym9+85s4bitU4BTrvBAYYVXKRrrZE/iO+TZatsPzA6KK8ORXjyHACdbrHxPlqHWkdffgtSwNbAP+J+AN1xYO5ZzSstvKz9BTFqBtR5BdeDT51sOuHw8RZcRrFHnUYzw6320fOj+0KIMleZZWzrEb6e+AtVYjbZKIhquRNpZUj+nodOvNwNNEYbS2YXIR8qfHSdZ5GfBmJCsa81s3wLSVpcB6y3YMK2lbGYpuLxBVBw951sNuK68BfyAKB3CrdR4TvFARIA5PzjncOr8CrLUa6dCSNtKxwDjr9VJgm6VHS0n1OMI6rwLeJgqjpTCr+PKnx5HWeSXwlsvhybcRD4pTjzZLj5ElbSvvQ093bEGvarQdnuEl1eMo67wSWEOUEZ7BQHPwgoVEHJ6cY2/3+CdgndWhlbWR2vkZbegF5JssPUaXXI8/4TZajSVNarf1eBNYY9WNQfQSfAVNfuvGcGCS9fpPmAjPyEiSlvOnh21H3wR2AZ2WHvuVNOLl7FfeJgqHZzdmW48xwQsWEnF4coy9dgjgLaDdqpQjStpInR08wCZLj3BGa6t1zp8eTiO+Adht6TE+EgdwTIh7pIPTiL8baTS0BT1yzQ+HWOct1rHe0qO5pHXD6QwDbLH0GFdSPZy24x1MdHh4zm2pODw5xm6k76F952iM1lbrnO8OHmCr1Uj3L6nR6m/Euyw9JpXQIR4BTLRev4mZ/h1GNw2B77rV8XpM4LukgdP5A9hg6VHWaGh/27Et0sFBfvX4E+4Vr5Nzroc4PDmmv9HaFElYOv8dvK1Hp9VIx+S8kQalvxG3IzzROID50sOOaGxGuymbHQn+wfcU34vZMj9fevR3hrdZeowqoTMMA9tKV990eL4jGkEYDBxsvbb12NM3eMz3Pk3i8OSY/kbL7uBHRdKhDQdXYmf2GRjRsEet5TPi/SMaYMLS4YxWPvXo36H1Oqa0xlX8hle2Wucxoe6SNP312BHplFa+6gYMHDzusvQYW0I9DkJvOrEbWAc4H0p9QM71EIcnx9i7pK6xzjscS0uDP8LVfpwC5LGhgtFjt6VHGSM8U63zVswv2FPiCM9U6/x23zsmwhPO4cmnHtOs81vWeWckKxq3Wucx5KlrGYSJaNj1Y3df/l/5psPtuvE2el2mc+AbzuFZh07ASO8xG7FsPCgkg/2MpDbrvMcxat0fs8+nPxTmcQpjgfVhipgYgzARjfes8+6+UVr5wtK2M7zW8V5vJHkJW61zPvV4t++dqCI8+XR4+tePLseU1lCCrsVxPk6hBXeOU3aZgI5o7MWOaJhoaBlXaQ20HSbCMyGUHn8b4rvRkLobfvrpp/Pzn/+ctrY2lFKcd955rs/vu+8+lFKu47nnnnNd09TUxB133MGGDRvYsWMHjz76KJMnT07yZ6SC/Qvf63unvEZ8Atp73wt0WO919xmt8kU0bGfYGK1B7LPGNweUMMdroBEvb1uBgfWju99gKRh7gJ3W6/zoYdeNdZjY9p5IV2nlRwuoZDvs7Sz2cIAV88krqTs8I0eOZMWKFVx99dVVr3n88cdpbW3tO8455xzX5wsWLGDu3LlcdNFFzJw5k1GjRvHYY48xaFDqPy9W+kd4nGH64EYL8thQbeevHWO0ehxh6eA1of/jFPJBrVFaawmNeDU9wreVrdZ5TKi7JMkoTGnFAazUwRuHJ9wUzlbrnB8tIM7BQfqkPqX1xBNP8MQTT9S8pru7m46OjoqftbS0cMUVV/DZz36WRYsWAfCZz3yGtWvXcuaZZ7Jw4cKK32tqamLoUDM32dyc3u6PQRiBaUbRR3i2Wuf8NNSBzp+ZwhlGD2OBTYHuvM3xegx6R5vsU81oAUwUh4cyd/C2Flsw8Zhoc5qmkEc9nA7PXkuP6KKhDZCT6EitwUHeHZ5chEBmz55NR0cHr732Gvfccw8HHHBA32cnnXQSTU1NLsemvb2dVatWcdppp1W95/XXX09nZ2ff0dbWVvXaLGJHNHZgFsZKhMft8Nh6hOvU9mEcwP0C3yVpas/Dh3nop1038qPFYAbmd0Xn8Gy2zvnRo1IHTyRTWpDH+mHr8Z7jvb2OR20E37bArhvpPk7BLwP1KE6EJ/MOz+OPP84ll1zCGWecwZe//GVmzJjB008/TVOTNuCtra10d3ezdetW1/c6OjpobW2tet+bbrqJlpaWviNvOT8D83cgOqNlN9T8OTyV9AjvANqxofwZ8f4RjSa6OaDC9d7JnxYT0V1ODya/K7pRa/4cHjsa6m4rUemRv/pRzwEMrkc30GW9DmeBkqRaDk8RHJ7Up7Tq8dBDD/W9Xr16NcuWLeOdd97hYx/7GI888kjV7zU0NKBU9RBiT08PPT1hwpXpUjmiEVXFtI1W/hpp9BEe0J3aoeTRiJtOzXRoI9C7LO0KdGe7gx9l3TP7bcjWog3npEJ520p8HTzk0QGsrIfbAXyToGxCJyDsh3NThKwyEjPMrTSlFW6wlD6Zj/D0Z/369bzzzjscdthhff8eOnQoY8aMcV03fvz4qnk/RaBWBx/dqDU/RrxexKtMndpotOGCymFpCNMdbcOkheejU6sc0TDRv3C/In8dfC09htId8pfkq61AfdsRLs6dL1tq141tOLc1MVo0k4MoSQ1y5/Dst99+HHjggbS3twOwfPlyenp6mDNnTt81ra2tTJ8+naVLl6ZVzNip10iDzztDHsPSlR1A06mF0yNfnZr9FOwtOKM4WoshlsMTXA9F3vI07Pydda53TfQvmraSjw4NTP2oNliKpq3kQ48GTP0wegzGfhhs2WxpvboBeoelvJK6szZy5Eje97739f172rRpHH/88WzevJnNmzfzta99jZ/97Ge0t7czdepUvvWtb7Fx48a+6azOzk7uvfdebr31VjZt2sTmzZu55ZZbWLlyJU899VRaPyt26kV4ymbEKzuAplML10jzpYdtwNtd72otGi2jFb5+jCMvethG3O3wRDU4yFcHD9Xqh9Ej3ANl8tXBj0NvNrGPgfld+lW5HMBadcM5WNpMPknd4Tn55JNZvHhx379vv/12AO6//36uuuoqjj32WD73uc8xZswY2tvbeeaZZ7jwwgvZscME3K655hp6e3t56KGHGD58OIsWLeKyyy5j3770trCOm3gjPPlqpM4pnGo5TWWM8FTq4AeHjvBA3vSo5QA2WY9hGYyZqPOH3cEPI0xmVJLUcwCHhbp7vmyHXTc2AL197w51vCpnhCc+25EuqTs8S5YsoaGhoernZ599dt17dHd3M2/ePObNmxdl0TJNMhGefDRSW4vN6AfeGcoZ8ao1ShscWYQH8qJHvQ4edJh+C0HYgd5heAhaj/dqX54yjdCXeFrNASyT7ajVVgAa6S3V4LHW4KAhEtuRLrnL4RG00bIX3Mcb4RmLPZedZSpHuxqxq3fZIl6VO3httAZJhMdCt5Vo9MhPJz8B3Sr2ABtdn5QzOlyrrTSymwbKUzeg9uCgwTE4yCvi8OSQVozR+rPrE2O0RhHmP9c5Qzsm8F2SolbCMsioVeM2WhLh0Z3avkhGrfnp5O26sZ7++/5GleBfnLYS7eAg+3UDkrAd6SIOTw6xIxrr6G+0osqm34vZXTj7DbVWwjLIqFVj61GuDn4YZl+RSqPWfSWL8FSuGxDdqjW7bjSSh1hA7WholNO/2a8bUFsPJVNaQhpU3nQQTFSjXCOTWpswwl4a2RvRKq18GK3Ky7CjrBv50cPWogvnI1ggHocn+22l8gge+q/SCr5Sazdmd+H81I/4Ihr5saNQWw8lER4hDSpP4YDtie8p2cikVgJ3NIl2ttFqJg9PTLdHafEZrfwY8XoRjd6SRbzq6RHNXit516Ocg4Nm9P7pUNl2RDM4SBdxeHLIwI2ybHTF3FPSTq1yhCcKLbaid+qArBuuFvRG9lB5pcXeSDq0/BjxehGN3pJ1avX06BE9iHYKx7kAJNvdra3FNkyMTuO2HeLwCIlSeQQP/Y1WWTbbqz2FoxvpcMLEZpy7C2dbD7tubKX/jjBRjtLy5wxXi2hEEw0tgh66fnSXrH7Ush3RRkMHhb5T3NSrG9EMDtJFHJ4cUs+I7y7RlFYjMN56XXmU1t33Thn0qGzAIdopnHxoARLR6E9lPcxQYFeJ6sf+mFR+91MX3YODcAPHPcB2x1/MLtUH0lEODtJFHJ4cUs+Il2mUZu8r0oveLdVgprTsPbnLoEe96F80ozRbi+HWkV3qjVqjiYbmo25AvZyVctkOW4s/o90Sg3sKpxEzTRyMfETLqw+W3LYj+2vvqiMOTw6pF+HZFWmeRj4a6cB9RcwybHt1TnOov2Rv0xbuuetx49VojRrwuR+2Y08V5kWPaqPWHut3hNMjH3VjMNWiocbh2VUiPeoNHPfR3Ze5VwbbUW+wZOeGhtMiXcThyRnV9xWB/hGeMhiteiN4Z4QnXEO140cH1LwqbbyGpcMbrXzpUa+tlKFuVI+G2oODXrqsLr4MevixHeFsqa1Htm1pvcFBdLYjPcThyRl2pdyFzqY3mI32dkVSMfNhtOpFNKC7bwa9DA5gPT3sKZzhhH1oSL70qDf9G01b2Z8sP4ql3i7L0Q8O8lo3THTYth3RRHiybUu9Tv+Gs6PpIg5Pzqg/KoHd1iM0y+Dw1ItoRGe08qGH1yRdKL4ewzBps/US/MNp4XwUS3YTdetNhTvbSjSDg+zWDfAW4RHbAdEODtJFHJ6cUX0EP6zv1a5IR63jgOpPs0+b6kbLTqbdVSqjVa9T29eXtRJVmD67etgP2B0YDQXbiO+OZNS6F5Pzll096nVo0sHbmC0tyhTx8rr6dxg6kTuPiMOTM6pHNEwHH828sz1KayTLCxGrGy3bAdwdcVg620arukMctQOYfT2qG3Cw68euSKKhkIdOrboeUbeV7GsBXiI8u0sT8RpFtV2Wwa4f3VZbgfxGecThyRn1IzxRGa0ezNOHsttQvRjxaBMPs6tF9a3hIb5OLbt6VHeGwdajKzKHJ/udWvKDg6Gh7xQn1fUoX3TYtqOdwM4Bn+r6sbcvHprfPB5xeHJG9QiPbbSiaqSQp4YqU1rureF3Dfi0fKP46m2lAePwaKXCG/Ds14/kosO7MN1mdvVIzgHMflupPTiI2pamhzg8OaN+Bx9VI4WsG/FGTMmSG7WOJKub7VV+pphNXFOe2awbUP+ZcwA7rQjPYML+r+anUxuoR9RtBbKux36YWuDFASz6Ki0v07/R1o90EIcnZ3iZ0oqmQ4OsG63q+4pA9I20k6xvtpes0cq2MwxeBgew0xELK2+nFscIPtt6VN9lGSq1lWimw0cT5ol+cVLbdkTtAKaHODw5o/6UVpReeLaNVvV9RSD6iAZkvZOvXjcgvim+bDp/4CW/qxfYWwoHcDB6gABJ5P9B1vVIdnCwFV3XIKvtxa8eksMjxE7tXZYHdmjhN5cTo+Um2w5gsnrYWuxHVs2Il8EBUAoH0I6G7sH8zxlM/l9ZosNeIxrR1A1F1rctkCktIXNU32UZKlVKKPaoNflGWgwjHk2nZhvwQWT1eWtepnCAUuQ02VrUjobK4EAzMD1AbAdI0rKQKF4b6R6IeHO5bDbS5FcWiANocG62l736MZxa0dA4IzzFqBvRRYezVzfAfwdflunwgXo0YmpClA5gOojDkyOqJyxD/1FrGZ4BI1NabkQPg91WdmJ2kzLE0VaK1cFDORzAWns0laWtgJcNSyFaBzAdxOHJEV4bKZRj1FrbAYxz1Vo29Ug+LJ1dPbw6fxD14CCbm+0lHx3OdgcvbcXQgt5sA2rlu0F0jx5JD3F4coTXDh6iMuJ/ts7jQ90lLpJdlQTQYZ2zp8cYzC8eqMcQTFOP0gG09ZhQ86o08OPwRLfZnl3T8qZHHBGv7NYNSCOHJ7t62FpsodKGpXHUjfQQhydH+DFa0Rhxu5EOJ4tV3O8UTvjN5Ww9WmtelQa2FpvA8Tx0m8ph6TIY8eQ6eNApwZDl+pHcYCm7WjTgffAY3RROXttK5cFB9noDb4jDkyOSn9LahcmAyFZDrb3LMjj1cD4bJhojni0twKvR2gf0SAcfS1uBonRq0UZ4sjdYOgBtP/ZhSukmjuhw3m2Hu25IDo8QO8lPaUFWoxq1d1kGp9FSRB3xyq7Rqj29V74Ovt50J5RDDz8LHqIZxWd3is+uGx3otYYDKWd0ONloaDqIw5MjxIgbnFoM3FcE4h+1toS6U9T4cYYlhycuPbIZ8RqCyTpLdhSfzU6+dt0Apy3tcrxb1Jym5GcO0kMcnpxQe5dl+wqIvmJm04jX3oMHyjbFl84UTjbrBqQdDc1W3bD/d7qBzRWviDunKVt61G4rgzHPu9qNIioH0K4bI8iauyARHiFz2Aa8i0q7LEPZRvF+RmlQ/E4tiNEaQdjN5bKpBaRlxLOpR/22Ui4H0JszDNHq0UXWp/iSjYamgzg8OaF+RKNcK0/8RniKPm0RJMIDUa7iy84U3yhMaZIN02d7CsdvWym6Hsk6PJDPiJdEeIQUkFGaGz9haSi7Hm6j1UNUm8tlc4rPdoY7MZ23mzi2cIB8dmhQrVMrpx62He1Br+MSB1DjtqPhHz2SDuLw5IT0HJ48RzSgLBEvP0YL4jDi2enUZHDgRvRw42fxB8SRxJ0dPfZD7w0O/qKhkM8ojzg8OcHvlFbRc3hq6+HeDh2KbcT3B5qs1+srXuFelg7FdgDT7+CzNcWXfr5bduoG+B8cFHlKy9ZiIybq68ZdN5yPHhGHR4gNifC48RuWLnKY3tZiA9ogDcTWY+CotYgOYP2clbg6+GxO8fm1HdFF/7LXVgZjSuNl+heK7QDWTuCGWg5gHhOXxeHJCekswwbTSIein9iUPvV3WR5otIo8D++3Q4Ni77UStIMfjDs2GIzsOoD1Izxx7cOTHS3Go/+fq29YGmeEJ3t6+I3+Qb4Tl8XhyQnphaW7ga3W62w01Pq7LIvRchOnA5i9UbxfPZyJzeV2iOOa0srOFJ+txXrs2G9/4sx3y2NbidOWJo84PDkh6Kg1mrBjtoy4312WoRzz8OkYrWzVDfCvh/PRI0WbAh6GTkyFanoMdbyOOjrsnOLLhh5hIhrljIYOzP/L8wNEU3d4Tj/9dH7+85/T1taGUorzzjtvwDXz58+nra2Nrq4unnnmGY4++mjX501NTdxxxx1s2LCBHTt28OijjzJ58uSkfkLsDMPsslw/L8FttMJvLgdZM+LeE7jjmMKxtXD+r6RLumFp+39hUs2rkiSIEY9ej4k1r0qK+huWOp8QFeWztGyypUe6gwP7r2ZDC/CzR1McDmDypO7wjBw5khUrVnD11VdX/Pzaa6/lS1/6EldffTUzZsxg/fr1PPnkk4waZeResGABc+fO5aKLLmLmzJmMGjWKxx57jEGDUv95kTDFOu+gmtEahKmY+tng0W0uB6ahZsOJtPV4r+oVI6yzeRJOdEa8BzORlg097FKkk8PTZp2z4/BkQ49s1Y36Hdpe9CRx1B1a3vRIwhkeCowLfbcoCNNW8hjhaUy7AE888QRPPPFE1c+/+MUv8s1vfpNHHnkEgEsvvZSOjg4uvvhi7rnnHlpaWrjiiiv47Gc/y6JFiwD4zGc+w9q1aznzzDNZuHBhIr8jTg60zmurXuEcpelO3t5crgldMSs7Sl7JltGy9ajv8OzseyfaRroOnTY9GVgVyR3DUL9+xOkA2nVjAtqc9Ia+Yxj2x7SGtqpXDawf0euRjbZiDw781I3+0eHKTxT3Sv71iK5u9KKntSag9dgY+o5hCWI78uzwZDoEMm3aNCZOnOhyWnp6eliyZAmnnXYaACeddBJNTU2ua9rb21m1alXfNZVoamqiubnZdWSV+hGNkY7XxR+1hjHi0fwv500Pu37E4QBuQLvWg8jClKetxZ+xd2CqhK1HHPUjW3WjfodWXQsoXnTYewc/sK0ULeLViGmx9fuWOBzA5Mm0w9Paqv87Ojo6XO93dHT0fdba2kp3dzdbt26tek0lrr/+ejo7O/uOtrbq48G08ddITRpvUUet3o14XBGe7OgxFL3UFvxN8UWnh8KE6tPXo37dgHgjgNmpGxCsg+/B7OcUnR7ZmPIM4wAWzXZMQjsAPegBQmXidgCTJdMOj41S7rU4DQ0NA97rT71rbrrpJlpaWvqOLCc5e4/wdLneLboRD9LBF22UZteNLmBz1auqO4DR6JGdUbw3h6d6pxZdRKMlkruFxbvt2Ol6t6jR4TARnmgdnvQdQKcdrd5Txj14TJZMOzzr1+sVMf0jNePHj++L+qxfv56hQ4cyZsyYqtdUoqenh+3bt7uOrBKkkUIcDk/6jbQBYzr9RHjsaFcjUWwulx09/EU04gpLZ0eP+h18E2bdYhw5PDswS7HT1yNIjgYUc7A0FvNrq8fz457CyY4eYQcH4vBEzNtvv017eztz5szpe2/IkCHMmjWLpUuXArB8+XJ6enpc17S2tjJ9+vS+a/JOkIgGxDFqTX91wQFWKfZRa2VB9Q4eimXE63fwUKYpPu9TFlCGaYsg078Q12CpIfTdwmBrUTu/K+4pnOxEQ73ZjjgT/JMn9VVaI0eO5H3ve1/fv6dNm8bxxx/P5s2bWbt2LQsWLOCGG27gjTfe4I033uCGG26gq6uLH/7whwB0dnZy7733cuutt7Jp0yY2b97MLbfcwsqVK3nqqafS+lmREiQpFaKsmHvQZmI8aa8usLVYT631QANHJfbmcqPQelTeodkr2TFa2Ril5bGD78FZg6LX4yjS1qMJsz2m3whPtBsx7gOGoIcr1bNF4iZsW7Gjw7sJQ57aCsQ7/Zs8qTs8J598MosXL+779+233w7A/fffz+WXX87NN9/M8OHDufvuuxk7diwvvPACZ511Fjt2mDH7NddcQ29vLw899BDDhw9n0aJFXHbZZezbV3nz8DwxHL3UFtIMS4NuqLbDsyKSOwYhaFIqaD1GEWVewgS0Ia/8yM4kCJukW7ScprDTv0XSw/7ru/CX3wVR6tGLdnJa0VGe9ByeoBENpzLNlM3hiTunKVlSd3iWLFlCQ0PtUOeNN97IjTfeWPXz7u5u5s2bx7x586IuXurYlXI7JjNgIHEnLYNuqO8n7YZaP9oF1fSIbtS6ER0UH4reNfXd0HcMStAprWjD0tmJeAVN8C9inkbQ/C6Iw3a0ovV4OZI7BiFoRCPa6LBdN8ah7Uf1ybW4qa/HYMyjRySHR0gAbx18eUat9fOZIP4kbshKJx+0U7O1GEkURiAbScvO/C4/mw5CMaf4/HXwoocmblu6BfOYhnTbi7/93YqRwyMOT8bx18HLqFWTVMQLsq9HA7XC0hDlFF8zaZpBW4sOak0yJlE3suEMhxksie1IYrCUnsPThNl0sP70716ckag85/CIw5NxvDk85RmlBZ2Hh7hWW6RntLzldw187Aho82U7BeH16AK2Wq/Tqx/Zi4amO4L3ZzviWuEJWXMAw+hRFFvqzO+qvgSlthbRPJg6WcThyTgHW+c1Na9Kah4e0jZath7v1LwqCaNlm80pNa+KE2d+V/VnpTnD0rtcn0Q7ik9fj4Osc7r5XWC0mEiaXYI/PeIcLKVfNxoIN6UVT/04sOZVcRJFagDkL8ojDk/GmWqd19S8KolRmp2Ye1DNq+KkEWMy19S8MgmjZetxcM2r4mSqdV5T8yqnM+zeTzXaTi0veiTRwa9Hx9AaSXOAMNU6v13zqiQGS/bwJL26MQG9pLyXcNPh0djS9PWYap3X1LyqshbRPnokWcThyThTrfOamlclkYhpN9IxwOhI7uiXKejx8i50nkZ1kojwrLHOUyO5WxDsv7ym5lWVO3goqx5JTGkpTLeal04tzsGBXYL0tXiPek9/T9KWpq/HmppX1bcdEuERIqMBE08JMoUTrdHqwizITKehTrXOtbWAZDq1vBityiN4KKsetZ3hIZiFuOGw9Zha66LY2A/T7mtvmhD3Lu2g3Yx96Hyy8XWujYep1nlNzauGYqYgk4h4Ta11UazYf3lNzasq21HI79J0cXgyzER0Nn0vtZbZQjKjEki7U5tqndfUvTKJML1digm4E4OTY2q/klQmqQhPXhyeym2l/+Zy4bFLkW5bWUe9nV6SmOLbg0lczrLtGOF4Hefg0S5F1ttK5cEBiMMjxMBU67wWr2HYOEdpkPa0hf1Xa0d4Km+WBVEbra2YrSDTyWuaap3X1LyqeoQnHiM+NZK7+aUZs2ItSDR0H6bLL4IDONU6r6l7ZVKDJbskUyO7ox/sv7qmxjXVHjsCceVDjiat9ICp1nlNzauqR3jyuhePODwZZqp1XlP3ytph+mg2l3OWJMtG3DlKk4hX8hGeyaSxgbv9P7AJ9yqSgdQP00c7xTc1krv5xf6r9ad/k8h3c5Yky20lqSkcZ3rA1Eju6IfBmFVaa2peWT/CIzk8QmRMtc5r6l5Ze+NBKIYR97ZE326k++gfzC/SqHUYesrTWYrKJNXBd6D1Hkway4+nWuc1da9MKkxvlyTLHTwks6IR0rYd9l8NEv2DOG1H8vXDHpL0AO01r0xqsJQc4vBkGG97zoCpdu6xrXNzufIYcbv73jHgk+hHJemNWu1JtO3UejAkJGfEFWnqMdU6r6l7ZXUjHm0nb2txEHr5QbJMtc5r6l5Zf3O5vEeHG/A7WIp7+hey0Fbeof9GFf2pv+BBHB4hMqZa5zV1r2yxzgMfLxptJ2+XZGokd/ODM25Q2wG0tRg4sVGkUav9F9fUvbKyMwzFMuLeOjSopUf0G3XuReeTtda5NnqmWuc1Na8ajOnU3HpEv7lcenXD3oNnL/U22rN/adx2FLLg8NTenwmStR3JIA5PhplqndfUvTIpI2430nG4d/CNnynoMGw3elu36ti/tLrRKkJYemq/ElSnvjNchCk++y+uqXGNpn5biaZT68V0r1mtH85fGnd0OP3BwXv0T0XuT/XBUnw5TVMju6NX7L+4pu6V9W2p5PAIkeAMw9aOaDRZB8TviTsnUJI14lOtc/0wbFLOn10ayHtEo0ij1jV1r0zSAUxHD+978Nha7KbS41bjmeJrBsZGckevTLXOa+pemaTtsEuTh7aShB7JIA5PRpmMDobvod5W6M4qVz1vJe8jk0Otc5gwrP1OI1FtLrfGOk9Cb1mXHIf0K0F10nAAp0Z2R69EoUdRpvimWed2tCtTnepaON+NxiHejdkfPR091tS9srozXJS6AUaPoLmhznfE4REi4X3W+W3q7cFjN9KuilcWZWRi6/FG3SurG63oN5fbgNZ9EEk/CNDW4091r0zSiK+xzsnWjbHoqAbAm3WvLr4DGEXdgOJMeXrXI41o6AEknR5wmHXOlu1IBnF4Mor/RlrbaEW/+eC0WhdFThRGK/rN5cDocUitiyLHu9FKsoO3428Hk+RePHbdeI/+z4PvTwPJ5iXYeqRTN+oPDrxFeKKvH4fWvCpq/OtRvW5E9+iRbcAW63VytnQE5nG2YeqH5PAIkeI9opG00bLH0O+reVXUROHwON+NTg+7RIfVvCpKxqH3Z91HNBGN6IzWOrTL0UiSo3jvzl/1JF3nO9HVDbv1Hh7ZHb3gP8JTua1EP4q39UiurUA0ekQfHQZ43TonVz9sV3Mzxt2qTpL5bskgDk9GiWIED3EYreQbKUTv8ETXySevh1033qPec5IgWaOlSKNT8z/duYdK2S3xtZWDMAsL4se/7UgqOpx83RiF2aAzjB7xRIez3FZAcniExMhuRMNuKoeSVPUZjy7/XrwkLSedl5Ce0apfN8BLku4ootwaL3k9ohocRF83Oqy7DibJaS3/DmDStiO5umFHNDagJ5Fq402PPDuAUdsOcXiESIgqLB19I30XHVcYRlKJurY5eBe9HXptko54ZX2UVn9pKZTFiCcd/YOk9WhBDxAgughP9BGvA4Hhkd21FsE6+OIOlrznMw3DrDyVfXiEGJmITi7rxc/SwaQaqTNzJJmGGtWoxPlu9Eb8EJJK1PUe0YBa9WM3ZiO2PE/xRbGCD+IK0yerh63FeiptUtGfpHN4NmP28UomB9B7Bw/JR7zSayvenWGotd1JdA+mToY8lbU02JXyHSptB9afpCMakJYR99bBJx3xWodemp5coq53PYajp1OgqNMWY9BJ3BAugdv5brRtJVk94hgc5DniFWWEJ77ocGukd62F/yXpO6i01Ws80eH4EYcng0SVWOZ8Nx6HJ39GK55EXbtkyTiA3ketttFyply6ic+IH0wSibp23bDdztokHdGApDv4YBGNJCNeWdYjaQewE/iz9Tr+iNdwzPMIwyzRB53U0NvvyjwgDk8GyXZEA5JebisOoGF/dFQD4K26V9fWwvlJtIm6nWjTEv9+K8HqRlKrkiCttpLN6V8oQnQ4Hgcwfj3stPktmInF6qRhO+JHHJ4MYld9MVqaYDkrxRzFO5ek195kD/wYrbxOW0RZN+x3nU+nC4/dVqaQRKKuPz2KHfEaiX7oC3jRYwg6URfSyfFKrq1EEf2DfCYui8OTQY62zq94unqMda686DJeozWVuJ8hNQm9yV4vXo34aOuc5Cg+OQfwSOv8qqera3dozk/y2qkdZZ1fr3mVjbcOHvKbqGvr8Zqnq4udw3OEdf4zsLXu1c7/8WI6gLbt8NZWJMIjJMAQTNX35vDYTx6uHKSMp1K2o5t/I3Fvi247f2/gJYF7JMYBq7yPaN47+GOss7+6UX1P1bwntdv1Y7Wnq2vrsQ+TB5TH+jEe/UyxvXh1eGrrEW9biT9R11/dGGOdd1Dt6YV5tx3B2srWqlfkcS8ecXgyxvvQXXYn0ObpG96MVvTLB5OZe/YX7bK16KFakm68YemDiHvaIpge1R2eePU4ouZVYRns+AtRODwQdwTwyJpXhcV2ht+i3lPSbdJweDrRi+Yh7voRbHBQPbslz3UDoh8sSYRHCI2/Dg28Gi2I+pm8f7TOx9S8Kiz+Gqn9zOykIxobgI3o5nRUnWvD4W+UZutR34hHq4dduumR3rU/h6CzLnbiZb8q8GPEW6peEYRV1jlePfzZjkGY6d/KesQ3gk+mfvjTo77tiKduvIqesB+LyTiKHqdlitoBFIdHCEzUDk83ZnfiaBvqSut8bKR37U/UEQ0702l01SuCEr8eIzE7/WRbj1fR0wL7Y55kFD123fgjlXYKqUR9I77VOkerh+3wZKmtjMaY/8r1Y6t1HknUW2omazuiiv5ttc5jApanMj2YKE98ehyMjj3vxsvqTvDiAG61zmMClyp5xOHJGP6M1gjMepL6FXNs1SuCkE+HZ6t1HhOwPNWx9Yhv1GqP0DrwsqwUvOhhfxJt3diNmfKMTw//gwPvRjyetnIEcSb529FQfx38Tqo9sGVrhaujIf6I13DMMmx/EZ76zvCYYEWqQfx62HXjVXSuWn28244xAcuUBuLwZIxgHXwvtTaSj6dTs434kcT1SIUJmCRMbysL0urgIQkH0N+IFbwY8Tzr4W+6E9KrH2vRsbQhxJm3EvXgYB8mAjgmYJkqE3/dOALduW2wjvqUw3b4bytp2I74EIcnQziTMKMyWs5Po62Y76ITEJuIy4jbjTSqJEznJ8Mwu25EQ/zTFlFPdzo/id5oJaeHNwewAdNtp2HE49VjHHAA2knxtmVB/Q4N4tLD/h+biJ72jB5pK27yEw2NF3F4MsQhwFB0kPldT99I0+GBuBuq/4iGt0Q7e0v0eML0kzDGIlr8TVmAnym++Eat8YTpB2HWtUSVs+L8JG962HXjbbxsSAleOjSIq37sxGSSxKuH/w6+vjPsrEnRYNeNoyO/s00ctkMiPEIo7A7+VfwmYabl8MQbio1jlAZxGfEd6O4G4jLicYzS4puHt+vGMcRhZqah8zR2AWs8fcP+3+6iWs4KJJHjla+2En/9yNpgqf7gAKJOan8LXS+HEcfmlA34XaEFfqa0xgQoU1qIw5MhjrPOUUY0IIlRfDxGy75rlB2889M86TECvyu0IN15eNuIDyeOZ2rFkYTp/DS+aGhWIhppTmlB3NHh4BGe6vXDmSkZrR6KOJfqH4xeadcNvOnpG0Mwuw3JlJYQE++3zi95/kbaRjy+Dr4Bo8fvPX8rbT3iM+LHoxvrOvSOP/Vx5qzUj/A496iOhn2Y7iZ6I27XjRWev5GVDn4acTx9yNbjD56/keaUFsQ5xdeM2bfYux5p14/4bOkJ1vkVqu0h3R/nr6v8yCKQKS0hJCda5/w5PFOJepefw9DdQhdet8mH7OhxXM2rgmDXjeWev9GCToOHWno4nzgWnx7HR35n/3qkHf3bjNk7Pdr6MQjTqXnXIytt5Vii7oZOsM7vAJs8fysrekTfVk6yzsHqRvX4qTOnqSFAudJAHJ6MsD869AjwsudvHWCda4/542ukWzB73L6/1oW+cY7gvY1KwKz4qG3m4tPDNiknEPVSfdtoeXeG7Q6+Cx3Mrsw+4hzF23qcHPmd/Q8O0o5oQFx6HIGe8tyB1ydhg5ckXYgzT+M1dPJyM1Gv8vRfNyD9+pG/tmJ/Opj87LaceYdn/vz5KKVcR3t7+4Br2tra6Orq4plnnuHoo4+ucrfsYnfwb1Dr+bT9GW+d/1zzqnhDj7+zzqdEetdgRmuCde6oedVW6xy9Hn+y7j6cqEP1/vWwtahdNyDO+hFP3RgPTEE7a96ntOy2Urtu5LGt2M7w7/GazwTp2469mNo8I9I7+x8cjMBMM6alx0toTQ5EP1g1Ovzr4a1udGO2C8nLtFbmHR6AVatW0dra2ncce6yZ57z22mv50pe+xNVXX82MGTNYv349Tz75JKNGRT9PHidxdvD2GC6exdIvWue0HZ7hmHFG7YYanx4K06lFZ8SHYpIw/Rut2nUDTDwsej1WoFdEHYCJX4bHrht2jMAb3hxAW4tmzB7m0WG3lWg7+Dhth61HPLvlZEUPu63sot5wMz49dmJy3qLTYxL6f7oXP4MDb3UDzNxCPPUjenLh8PT29tLR0dF3bNxopnC++MUv8s1vfpNHHnmE1atXc+mllzJixAguvvjimvdsamqiubnZdaRJMKPlzRO31Rrn695eyZrR2o07M2Ug9s6r8egR/Sj+WPQE2QbgPc/f8h7hsevHATWvCkI3Jm00Oj385++An+ifvU9T9EZ8mXU+nCgnifyP4MFr/YivbkAcbWUEZn8m7/XDewefjO2IzpbadeOPeN28FbJhO+IhFw7PYYcdRltbG2+99RYPPvgg06ZNA2DatGlMnDiRhQsX9l3b09PDkiVLOO2002re8/rrr6ezs7PvaGtrq3l93PhfoQVeR/F2I92POP7Dl6MD6QdjGko4DkaXtQc/S/S9RzTibaTRO4DhOrS0jXhW9PBWPxRmFB99/diMWRgcTa6GczWj9w5+GGaRgTfbEW/dOJ6o4mnHo3NK1uGl5ttkpYOP3gGMc3AAcdeP6Mm8w/PCCy/wuc99jo985CP87d/+La2trSxdupT99tuP1lY919nR4f6P6ejo6PusGjfddBMtLS19x+TJk2P7DfVoRo/5wM8S7KGYUaK3KZxBxDFtsYOoQ7F2I10J7PH8Le9GK5lR2nT0eDM84aJ/aTuA8RnxuBzAPEVE34e2H7vw+kgJMHWjm1rLjsGtRfQrcd62/sJQolq5FnfdkMGBm3jbSvRk3uF54oknePjhh1m1ahWLFi3iYx/7GACXXnpp3zVKufclbmhoGPBef3p6eti+fbvrSIsTrPO7+FlGaXdPPbj3AB1IL8bpyUOnlu8Ofh16+fFgolq5lu9Rmm3ETyIKc7MfZgPGl319078eeWgrdofmbzWjf+evkah3F7axp/mi6eTz3cGvRDuh+xHVZp1JDQ5kSismurq6WLlyJYcddhjr168HGBDNGT9+/ICoT5b5gHVeVvOq/niPaEBSnVo0RvxU6xysg087wgOmU/uL0HcaitmKLI4cDYjbaL2KjgKOwmxwHxx7IuhP1ItNOHFGQ9Pu1KJtK7abEFeH1oPJiIt3CjgfesTbVvZgYvzh9ZgITEYnHLzs65tZGSxFT+4cnqamJo466ija29t5++23aW9vZ86cOX2fDxkyhFmzZrF06dIUS+mPv7TOz/r6lvdRCcTdUF+wzqdiNrsLRiPG4fkvX9/0P0obRhx73gI8Z51nhr7TDHR3vR7zpC5vZMVo7cPUj9ND381W9Le+vuU9GgpxOzwvWeWYhH5ccDhsPfxZO+91A+LWw24r4evGGMxmEM/VuG4gWRosRaeH3a/8AT+rGSE707/Rk3mH51/+5V/44Ac/yNSpUznllFP46U9/SktLCw888AAACxYs4IYbbuATn/gExxxzDPfffz9dXV388Ic/TLnk3mjAVEx/RjxYhCceh2cFuiMZTdhpnOPRTsgW/DwHB/zo0WUdEFdDXWydZxE288E2e/6cYcjOFB8YPWaHvpOthz9nOEttZRfGAZwd6k4jMFMWcQ6W4tXjt+hJ90PRe9AEx7ajr+H1f9rGfwc/Cj1gip7F1nl26DsFsx3BoqEypRURU6ZM4cEHH+S1117j4Ycfpqenh1NPPZV3330XgJtvvpkFCxZw9913s2zZMiZPnsxZZ53Fjh076tw5GxyJXv7ahZ+EZTCbU/kzWvGN4n9jvf5QqDs5R/Denhhv40+PeBvqS+j9PPYj7LNxbD38dfBDMOnpWRi1LrbOs0PdZQhmktCfEc9SRAOi0uMv0BHRtej8P+/4cwDj1WM7ZvJ6Vqg7BWsr4Kd+dKLjcxCXHr9B29OjCLvqNZjDYzvD3qKhMqUVMZ/+9KeZPHkyQ4cOZcqUKXzqU5/ij3/8o+uaG2+8kUmTJjF8+HBmz57N6tXeFzOnjd1In8fs/+GNg6yzN1MXvyf+jHWeHeouwY2WPz3ibai9mF8Q3AEcBNibK/gzWlOs8y68pMHbdWMsUT8Qw+ZFqywTCJPHcxJ6e8kN+Hm+GpjIgbddjOKNaEBUDk/w6J8/PZKzHeEGS8H1sNuLt61J4nUAt2IyboI7gC2YdW/+bKmtxTpPV8uUluCL8B38OzWvsonfiNtG63TCdJvB9GjAGPHiOIDT0cHl7fh56jOYXY29abEZs8InHj16MBO2swPfJWlneHzNq8LwHHo1zoGEWY2TlB52HCg+PRZb59mB7zAMk7Dsz+HZD5PJt9bTN+z6Ec2uY5VYbJ2DO4AfQGdTvgm017nWjW07vPUrdt0YR9jszWQQhydl7HnnuI3Weusc7VNanPwBHU1oxiwO9ceh6PJ1E2TFWhO62/Y2MrGNwERff8cPi63zBwmax+NMSPW+5Bj8Gi2FqR/x6zE78B2Cd/D+9LBrUHxahM/jGYxZ3ek/opE1Pew8nkMwds0fM9AWoB14y9c37b/Xgde9iOPXY7F1nh34DnZb8V83/A+ke9GORHwOYHSIw5MiE9Gd/F70lJY//I3i7UYa3/aKClhivQ42MrEb6e+o9XzvSthatOHVNbD1mOTr7/jhJfSM/37oVGz/JDWChyT0WGydZxPEAWwgjBEP1lb2R6dwxsNi6xysrZyASe73N4E/AhPH86dHfHVjB2aIMzvQHcLXDW8dPCShx7PoPJ4jCepWBUvuhyCDJXvwGJ8e0SEOT4p82Dq/jJ8npINeDWVvDe8tDGvPTsdbKZ+2zh8J9G1bj7hHJZCE0dqL6dQ+GugOs61zMYz4i+haPh6ztsg709EOyE78JveD3/qxFR2DgThH8Yus80cIYoZnW+el+E3ut6d+t+F1J6P46wbAU9b5nEDfnm2d4+7gIQk9tmIcQP+2YxhBk/vB7+AAkqof0SAOT4qcbZ2f8P1N24BvwJjm2theeDNx7T0D8EvrPBO/D7FowLhJv/b9d/03UtsBjPeBIr+wzuf6/ubx6M52B373FIFsOoB7MDXdvx52W1mM3+T+Rsz/cpaM+G/R2VPjMJNT3rG7wSd9fzOLHTyYtnI2ej2ed0Zg0nv965HFtgJGj4/7/uZstNOzFnjd97ezWj+iQRyelBiE6eCDOzzeDfhOzHguvoq5Bp3L04jfkcmJ6LH/dvxuogbZnMIBeMw6n4rfGW5bvacxy2C9k9VRWnAH0Nbjcd/fnIzOeOnGz+Mkk4kA/sp67U+PkZgpC/96+K8b9mBpJCauHD2/Q2eSjUbnvXlnNnrqcQ1+nidmk/W2chZ+d/wJ3lZAHB4hFk5Ej+22ESZ/x9t0lk0yUY2fW2d/RtwewT+FnweG2gQ3WhOJ46GINusxW+d/zNc3wxmtrI5af4Xu6E/AzyZzzZgcDf96OJ1h75M/yehhtxV/o/gz0Am6bxFkBO+/buxC5wpBnHoozADBn+0oZge/Al1nR6D/x71j21L/eoxBtzYI4hCLwyNUxdnB+wvRAxxhnd/w9a1kjfjZaLPsjeDTe2CeNf+m52+sR6cFNqFzQ+LDvwPYgtl/x78eU9Ajwj143WcFkqobmzDL07138h9GT3K8jt8VOKCfJw56/O+dZPT4NTp+dxRwmOdvhevgs6xHsGmccHrY2wJ4f3CLrUUrcQ6WIEhE9BC0NdyDyRLzjq3FeryuWAOJ8AgeCNfBH22d/1jzqv4kUzGXWX+pBa8rLsZgshj86zEEY8S9P4yiF7OHRDIO4Bz0tnn1ORM9KfgqfrslMHXjDfy40skZLVuP8zx/I1yHZuvhby1TMnp0YhLbvXdq0ejh78EtySUu7wKm4XWH8sPQ3XQ3ZsmEd1rRuYZ78RMr60APloYQ94Z7TgfQm2tl143/wu9CGIBjrHMW60Y0iMOTAvthHpAZzOGxd6v1VzHtKa0pNa8Ki8J0ahd6+sYcdJbFK/jdIh+0yWtEdx7edkq1sa8OtvOHV1ai4xIj8NrJp9Gh2VpMIK5nBNn8p3U+A695TeEGB8GMuK3HwTWvioL/tM4Xe7r6SGAquoN/pvalFRiMiQ77cwCT0aMLWGi99qaH3Vaexe8DMsG0lTfxsxHGXsw0Trx6PINesTUJr4PHNGyHHUeO145Ggzg8KXA+2vT8Hj+TDjYtmCwcfxEeO2gb/hnN9fh/1vkCdKpjbf6bdf5FzauqEayRgtFjWqC/64fvW+fL6l7ZCHzCev3LGtdVJ5gem9AuI8RtxN9Ep6U3ApfUvXoG2pDuxMRC/BFMD3vqLP668WP0tNaJmGd9V+eT1vlpzANwvXMoOr13J36HFsnp8R/W+bN46Z5sPZJsK5CUHj3o+gFwad2rR6OjwxBWD3/OsG1Hx2IeO5pVxOFJATvu8aNA37ajO22YLsobdiON3+H5LXpKZRTavavOKOCvrNc/rnVhVYJFuyBJPWwjfib1Ar8fRofJO0i2g4ck9XjAOtc34hdZ50fxk1VgMwrjvgVzeCbjJxMtCJsxrr53PYK1FedUuL/de5KrG4+hNZmM2ZmrMpMx67l+EuhvBYv+QRpt5ZPUGzx+Au3OriLIL4KgenRhdmqP3yEOhzg8CTMes7fqQ4HuYHfw/qI74G6k8SbbAdxvnS+redXH0ZktrxNkQzkI08HbKc7xG6230E9BHgx8puaVdof2E/w+TsImDw7Pj9Huy3HoFVuVaSCqwUE7Zp2RNzag90AaRBLTWnan9hlqPZHoGHQMqBszEeYPu0Pz/3Dl5OpGD/Cg9bq2A3iBdf4NfiezbYJFNCBJPZ5DW8dRmHhWZWzbEaytjEBPlkK2bUc4xOFJmE+hTdoLBElIBZPM579SvotOYx1GnDvI2nwfndp3BrW6jHAjVjBGPLgDGPzxjX6wO7XLql4xFJhrvQ5mtCaiA8v+kjBtkjNa29AxG6ilx0z0KH4rQTajhDAjeEhSj8fRKfSt6H1XKnOR42pveyT3J3xE40D8bgsYBLutzKXWzj+fts7B2grkI8IDJkJc3QEch5nOCqbHkWh34M+YRyt7RxweoSLhRqxg0p1/5/ubezG7TcRfMddiFkZ+vuIVozEJqcH0aMEYreW+v51sI/0JOnfiKKrtq3E2WpO1BNl8EUzdeAW/TyODpPW43zpfitn7w43dwT9MkM0XwWyw/3KgbyenRy/wA+v1/6h6VbgRPITRowM9dZFMxOt36Do8Arii4hWHovO79gI/DfQ3DkVvSNFNkMFScvmQ4B48Vs7z+iQ6K+53+Nmcw8kp1nlFoG8nFy0Phzg8CfI+9JzzPoLOOQ/FPIk8WJdoV8xkohp3WuerqDRS+zQ6PyL4nPNfoKvwm/jZRdfmXbTBHE4SEa/twL3W6+sqXvE56/wQfjMsbOzde35b86pqJFs3fo3uaMYAfzfg06GYKYvg0b9weiQbAbwTXRs/ip7qc/MBtP3YSdDk/lZ0d7SPIFudQtJ63G6dv0SlmJI9MbwIPf3on7+0zssJMzg4CO1oxMu7wM+s19dWvMK2HcGdYVuPPLSV4IjDkyB2nONXBJ1zPhHdFXQQZAs2gD9Z5yNqXhUVj6HdmdFop8fNf7fO/yfw/e0OLZjz14sZqR0ZuAx+uM36q3Po/wDNAzGL1r8X+P7hjJa9jeVh1MokiQoF3Gy9vob+qcEXosP072AeK+mP0ZjRcDA97EnBo2peFRVvY7L6/nHAp3Zb+TFBVmeBqRsr8bvYwcbWI5m28h/oHV6m0H+J+hCMi5xWW2lHD2Ea8bNlZBi+bZ0/Tf8F4CegLWEPJk7on3B6JNtWgiMOT0IMBy63Xt8d+C729nzBOnjQ7gd43dYrLArTUK/BucPL6ejuaCdmxt4/4UbwoM0/JKXHO5iETHen9ndoJ+Npgka7wkf/1qATdYdhtnKMlx+gN2aYhF6GbLA7+H9DxyT8cyravP0Js8WkP+y2Un+xeFTYDuCFmARSvdDB3rrhO4HvHa5Dg6RtRw+wwHp9Lc5lFnPREdn16OnOYESnRzL1Yzna9W9ER70Mdlv5KUHi3KDVnIaOMAaL/tlp31PI/tJ0JQequblZKaVUc3NzLPe/DJQC9SaoQYHv80ulb/M/A5djplWONYlp26jgbavc/73v/R9Z5fhu4PsOVbDduu9xgcv3dasc9ySmx3SrzHsVHKkA1QSqwyrH+YHvO8u6b3uo8j1vleNTienxJavcrysYogA1wyrDblDjAt/3m9Z97w9cttFWOZT1Ohk9Hrf+5Hf73vsnqwxLQ913mXXfiwPf41NWOZ5PTIsWBVutcn+y7/0lVjm+Fvi+4+z/VgUHBC7fPdZNvp6YHmdaZd6hYIIC1FhQXVY5Tgt834us+74UqnxrrHLMTEwPc/jov5MvXBaPuB2eZVZl+IfA9xitoFvp2xwZuBxjMEa8JTF9r7L+5AYF+6mJoHqsMhwX+J4ft+75roKGwGX7b1Y5nktMCxQ8YpX91wpQF1tlWAtqcOB73mHd875QZfs/hO1M/B6jFHRYZf+yAtQDVhkeCHXfV617fjpU+d4lbGfi95hplbtXwftVo1UvlFVPgt3zYMc9xwcu25FWObaDakhMj69bZX9bwXB1rFWGPaAmBb7n31r3XBaqbPOssjycmBYoeM4q+wMKUF+2yvBSqHs+ZN3zplBl+4VVls8nqoc+xOGJTzDfx0etirAT1P6B73OJ0rdZHbo8thH/y8T0HaxghVX+f1cLrL+/JNQ9H7Dud3uosqVjxA9RsEuBUg18Uq20yvBPge/XoKDN0uOcUGX7e9Iw4pdZZd+uDmRynzM8I/D9jrXut0tphyp42X5JGkb8h1b5l6rLaFAK1Hp0JDDY/b5s3W9RqHINRkfdFKhDE9NihIJ3rPLfqB60/v6PQ93z19b9/jFU2T5kleVPidaNk5WODivVxEzVZpXhilD67rT0ODFU2W6yynJ3onroQxye+ATzffyWQUqB+pdQ93lYgVJ6xBOuPI/qG6kvJqrxX1rlV2oJf6EUqDMC32uIgi3W/f4yVLkGo50dBeqYRPX4mgKlRvCu2s5ItZkw0yZ2VGCLgqZQ5bKnPNsS1aJBwW8VKHUKDyoF6olQ97OjAo+ELps95XlfonpMUtCpQKmbuUwpUF8Kdb/nLT0+H7psL1h6fDpRPc5XoFQDu9SfOCRkZHh/BXssPQ4JVa4xmGh58IFskOO7CpQaxwq1h8FqDWGc4U9ZP+HN0OWypzyXJ6qFPsThiU8wX8fJzFaH8Zp6iSPU+MD32V9BlwKl4PjQZfpHfSP1k8R1vk+BUsewUv2KESHuc56lxToVZjrLPp6y9PjbRLUYpuAtBUpdyXfV9aHudZelxwOhyzUMM914cKJ6nKD0lItSP+GTIaI7DQpes/QInq9iH2dbWryWqBYoO7dpLJvU8xyshgW+zyGWFnuVnfcR5rjN0uPOxPXQUZmZ/Eb9PxpD3OfvLD2WR1KuVZYef5WoFvsp2KhAqa/yNXV5qHv9zNLjf4cu12RLi15QIxOuH+LwxCeYr2MGTyhQajyrlU7CC3KfbygibKT2KH5dwhofzAGqlXUKlDqAH4a41wuWHuEbKaQ1ikd9hDNVQ194+tKA92lVxhk+I5Jy2YnLyY7iUefyvxUoNYxOBUcEvI89Yt2iIHxbHoMZxQdPoPZ/DKdRnWDV8wP4ndJJ+kHudY9V/McjKVdao/jjOES1WAnMY7k14H0aFfzJ0uOLkZTLznn7VsJ6nMfF1u9QahAfDXifo5U9PaYXU4Qv1xqrULMT1kMcnvgE83XszwQ1mrVK14PHFL5HJ2MUbLO+/4lIyjQMVDdJz8WjngT1G2aqwfRYv+fLAe7zEeu7O1WYFRbOwx7Fv5mgFgeA2gjq63zF+j1dCk4JcK/brO//V2Rls0fx/5agHmeD2sNgNYunrd+zWsFYn/dpULDS+v5XIyvbakuPuQnqcSuodzhQjWWD9XvuU/6jmVMVfW3tA5GUaxJmFJ/UoodGUL8H9UhfZFcpndPo916XWd9drwgVYTbH5VaB/ivBunEoemXWVX2R3c0q2ADhQev7P42sbD+09PhqgnqAODxxChbgOEmZUfjPlL88C7tS/0FFMX1jH8/om6r/kZC+l1p/rwvU/vwP6zf5HWkNUyb5+ZbIyjYKk4x5REJ62IZhGQ2qgZ9bv2mrglN93OdoZerVnMjKdo5VtncS0mKU9bcUqK8xXsF71m96SenpXK/3utL63halVzVGU74FVtn+T0J6zEA7FArUyZyp7Kk+Ha3xYwN+an3viUjL94pVtqS2LrjO+nsbQQ3nJus39Sp/U5ZjlUl+/lJkZTsQ4wDul5Aei6y/+RhNyqzaaldwlI/7/KUy0Z3g23r0P/7aKtsLCWlhH+LwxCdYwOMcZa/M0QZonIfvXGBdH22HBjoJUoFamIC240Ftsv7e/+x73zZcSsE/K72Sq969/q91/XoVZnltpeOJAeWL7/gYxkieCApGKlhs/bZOBed6uM8oBX+0vhNthzYMvaJQgTo2AT3+FRNhGwFKO3Lt1m9bpbyNXk9Upn1F16EB6kzMFHDcK/mGgPqD9fe+3/f+xco4PQ8qb1N1f29d363Crr7pf3zbKt/9CdSNw0Htsv7eZ0DBIGXswF6lB0z1nMAGpaPrSukprWiiO/bxslW+SxLQ4wrrb+0ANQ2U7kdetn5bh9L7cdW7zwRlVnXeH2n5WjFTwBMS0MM+xOGJT7AQx4eV3jTK9sjPV9Ub62XKGPBvRF6Ww/SNVTd686q4fnMjZkSynP77zHzV+n1KwVJVfR65SdkrE7ThjyZXxXlcbRXktzFqAXpEuN76W992fTZcwUKHHv+uqk/ZTVFm5c27ypvz7O+wV/LFHZo+1/xg9WHXZ4crE+nZqeBqVT0y+iFl9vL5TxVlJBS0E9JplfHUmPWwnb8/03/lzwXKrC56U+lN6Krd58uOa/974LJUO07HRFyCrw6qfwxH2wwF6nHXZw0K/k2ZqvO4gvdVuU+zgh9b13WpKBZ99D++YRXkpzHXjWMw9fAa12f7KbOx5F6lcxurRTiPUHoQYQ8mRkZezhetMv5dzHo4D3F44hMs5HG8MhXOzlW4XmkDNkvBpUrvl2F//lPlLfrh//i99Ufmxfh7F1h/oxPU0RWvuViZJeZKwa+U3qhwptIO4v9UZtXNXqU7vujLORG9mZkCdVRMWjgN+O+tf7uvaVLwbYcWXUqPZi9RcJqCs5Xed2iz9fkmFSzvp/5xiVWItwmzM3jtw2nA76h4zUTldgLfU3oH5Y9Z9eOTSndmdvTjJRXlVJbzuJ/4p7Xs0btCO4IDr/lLZXYtV0on7/9PBbOt40plpjiU0k5B9OUcjNkM8b/FqIe9G3sHqCkVr7lKmSndXqVt5d9YOp2p9IDKnsbqVnBhLOW0N0PsRufmxfE39kNHQBWop6nUJkcq+D+O//ttCu5UOon/NKXbzHeV2Z2+TelBRfRltTdDTHJaSxye+ASL4BiqdNRmq8LYuH5Hr4L/paIerTqPq6w/tjqm+1/p+EHn1bz2QAU/UqbjqnRsVDphOb7/l0esP3ZbDPcejN4sTaEN+EE1r5+tTASn2rFM6aTUeLQYBmqz9cfOjuH+49Ebtil0BLCx6rUNCr6gTLSn2vE9pXO84tHDXtm4g3iSdWdhFhLU3oCyRcG/KtPRVzp2K738Oh4twKxsfCqm+8/HOBG1N0g9SsEv6tSNdxX8Rax62Csbr43h3kMxUfI3qbfnz7nKJO5XOxapqFMCnMc4TF0+IUbNnYc4PPEJFuHRorQxf1DpKMYfld6Abb7STkC8f78Fs+le1CtQnM7OfM/fO8T67Y8rHbb/g9L7b1yhwu6Y6+WwV2vtQM9FR3XfRujbIbYHP8+amaX0KqznlM49+L1VVz6q4or6OQ97tVa4ZzgNPCaB+qN177fwumlbk9KRru8pHSF9VcGLSke8op+mqHTYe67Mj/i+H8bkTHnfQXicgmuUXgTxhtKR4t8oHfFpjV2LgzER0ah3bP8qxnb8jefvTVd6ELlI6bayQmlH6GKlp4vj1eMyq7zriXYPmuHoPEuFjoZ62xy1QWkbcaeC31n14yWlV/rNVnEOou3DXpTxs5j/jn2IwxOfYIU6bkRXzFeJbj7+eozBiiNaEuex1Cr3v0d0v2ZMPkw3qE9k4Dd6PVoxHfEnI7rnUZjIzhqS3RYh7PFJTMczMaJ7fgqTlPsrCLHBYPLHv1vl/i3RTHsORi/HV9ZxXQZ+o9ejEdQbVrm/FtE9DwD1G+ue20F9MAO/0+txFGalYRKPMBKHJz7BCnU0Y5Jobw95r7HoZzAp6/jfGfh9fg87IVOhl2eHudexaEdSoTu1j2Xg9/k97KmLPxM+6nURJqL4J+pN62XzeM4q/0LCrdhqAnULpq49QrwJwHEckx3/n/8Y8l6t6NwUW48vZuD3+T3sTRn3gDol5L1Ow+RJbQX1gQz8Pr+HvSnjm8S/Z5M4PPEJVrjD3ndFoR8e6ff7Degk1w7rHrvxE4rO3nG79Tu2gfqLAN8fid551X5Ew7uEN4BpHU3oJzErdKJ1kL1GpoH6OaaOPUV8yZ1xH4ejpzwVqHsI5vScgZnSU+jVeoMD3CcLh73x3l6CPc29EdQX0J26QkfPooompnHYU9fr0Q8m9vv9/dAP39xr3ecV4ltEEfcxGr3oQYFajL3lRDyHODzxCVbIYz7GAN+Dt6XqI9Fz16sc310F6uQM/J4wx1DMaLML1H/HW4c0GdT/Qi/XtfV4mGQfSRDHcSiodkzOzWyP3zsJ1PcwuR7d6HB/Xjt3+/gUJlz/a1BTPXxnCHrl1WJM3WinXjJ/Po5/w+28eclhGYN2dN5yfPcFktv4M66jBTNA2IreO8iLU3yopZ29alGh286oDPymMMeJGGd2Jaj3x/R3xOGJT7DCHv+EGVlsQzs+F6Iz7Q9BjzTmoMPNj2DC2QrUFvSc+5AM/I4ojhGgHnP8vrfQ+218FL28/lD0E5vPQ+dBPevQTqGnsiovLc7ncSQm90aht9K/Bp1XcJh1nIIe5d+JO4Kh0Bs7BhnxZvW4AJPf1I1+EO/laGf/EHTHPRu9F8n/A7XBocVu9DL80Rn4HVEcDZjtJ5T1W+8EdT66jUxDt5mPolcx/Qqzs7lCR0OuIr7tD5I+9ke3D/v3rUYPhM5Et4FD0Tb1fFA3YfatsY+X0Kv20v4dUR1/gRkw7SWe3CxxeOITrNDHbMzOoV6O19Dz90k9VyfJowEd3fmzDz0Wo53Eohhv59EC6juYqbp6Rxd6tUbwJ59n+zgKHeHxWjfaQd2MXqWWdtnjOM4F9boPPVagN/wcuB9V/o9G9OKNbR616EVvrpjsU9eTO8ajHX+Fzk+K+v5e++8G60XpaW5uprOzk5aWFrZv3552cVKlAZgFnA+cAhwEtADdwDrgT8BSYBHwUkplTJIRwCeAs4ETgVZgCLAbeAd4FVgCPAm8m04RE2UicBG6jhwDHGC9vx14C1gBLAaeAjpTKF/SnABcAJwGHAKMBfYAG4E3gRfQejwL7E2lhMkxGDgLOA84GZgCjES3lTbgdeC36LqxOqUyJkkL8Em0JicAE9Aa7QTWAK+gbcdCoCOVEibL+9D9R9R47b/F4bEQh0cQBEEQ8ofX/ntQgmUSBEEQBEFIhUI5PFdddRVvvfUWu3btYtmyZcycOTPtIgmCIAiCkAEK4/BccMEFLFiwgG9+85u8//3v59lnn+Xxxx/nwAMPTLtogiAIgiCkTGFyeJ5//nleeuklvvCFL/S998orr/Cf//mf3HDDDXW/Lzk8giAIgpA/SpXDM2TIEE466SQWLlzoen/hwoWcdtppFb/T1NREc3Oz6xAEQRAEoZgUwuEZN24cjY2NdHS4F/Z1dHTQ2tpa8TvXX389nZ2dfUdbW1sSRRUEQRAEIQUK4fDYKOWenWtoaBjwns1NN91ES0tL3zF58uQkiigIgiAIQgo0pl2AKNi4cSO9vb0Dojnjx48fEPWx6enpoaenJ4niCYIgCIKQMoWI8OzZs4fly5czZ84c1/tz5sxh6dKlKZVKEARBEISsUIgID8Btt93G97//fZYtW8Zzzz3HlVdeyUEHHcR3v/vdtIsmCIIgCELKFMbheeihh9h///356le/ysSJE1m1ahXnnHMO775bhqcbCYIgCIJQi8LswxMW2YdHEARBEPJHqfbhEQRBEARBqIU4PIIgCIIgFJ7C5PBEhey4LAiCIAj5wWu/LQ6PhS2Y7LgsCIIgCPmjubm5Zg6PJC07mDRpUuQJy83NzbS1tTF58mRJho4Z0ToZROdkEJ2TQXROhrh1bm5uZt26dTWvkQiPg3pihWH79u3SmBJCtE4G0TkZROdkEJ2TIS6dvdxTkpYFQRAEQSg84vAIgiAIglB4xOGJme7ubr72ta/R3d2ddlEKj2idDKJzMojOySA6J0MWdJakZUEQBEEQCo9EeARBEARBKDzi8AiCIAiCUHjE4REEQRAEofCIwyMIgiAIQuERhydmrrrqKt566y127drFsmXLmDlzZtpFyjWnn346P//5z2lra0MpxXnnnTfgmvnz59PW1kZXVxfPPPMMRx99dAolzTfXXXcdL774Ip2dnXR0dPDII49w+OGHD7hOtA7H5z//eVasWMG2bdvYtm0bS5cu5eyzz3ZdIxpHz3XXXYdSittvv931vmgdnvnz56OUch3t7e0DrklLZyVHPMcFF1yguru71RVXXKGOPPJIdfvtt6vt27erAw88MPWy5fU4++yz1T//8z+ruXPnKqWUOu+881yfX3vttWrbtm1q7ty56phjjlEPPvigamtrU6NGjUq97Hk6Hn/8cXXppZeqo48+Wh133HHqF7/4hVqzZo0aMWKEaB3h8Vd/9Vfqox/9qDrssMPUYYcdpr7xjW+o7u5udfTRR4vGMR0nn3yyeuutt9TLL7+sbr/99r73Retojvnz56uVK1eqCRMm9B3jxo3Lis7pC1TU4/nnn1d33323671XXnlFfetb30q9bEU4Kjk869atU9dee23fv5uamtSWLVvUlVdemXp583yMGzdOKaXU6aefLlrHfGzatEn99V//tWgcwzFy5Ej12muvqQ9/+MPqmWeecTk8onU0x/z589Xvf//7qp+nqbNMacXEkCFDOOmkk1i4cKHr/YULF3LaaaelVKpiM23aNCZOnOjSvKenhyVLlojmIRk9ejQAmzdvBkTrOBg0aBAXXnghI0eO5LnnnhONY+Cuu+7il7/8JYsWLXK9L1pHy2GHHUZbWxtvvfUWDz74INOmTQPS11keHhoT48aNo7GxkY6ODtf7HR0dtLa2plSqYmPrWknzgw8+OI0iFYbbbruNZ599ltWrVwOidZRMnz6d5557jmHDhrFjxw7mzp3LH//4Rz7wgQ8AonFUXHjhhZx44onMmDFjwGdSn6PjhRde4HOf+xyvv/46EyZM4Ctf+QpLly7lmGOOSV1ncXhiRinl+ndDQ8OA94RoEc2j5Tvf+Q7HHXdcxYR70To8r732GieccAJjxozhk5/8JA888ACzZs3q+1w0Ds+UKVP413/9V84666yajzYQrcPzxBNP9L1etWoVzz33HG+++SaXXnopzz//PJCezjKlFRMbN26kt7d3QDRn/PjxA7xbIRrWr18PIJpHyB133MG5557Lhz70Idra2vreF62jY8+ePbz55pssX76cG264gRUrVvD3f//3onGEnHTSSUyYMIHly5ezZ88e9uzZw+zZs5k3bx579uzp01O0jp6uri5WrlzJYYcdlnqdFocnJvbs2cPy5cuZM2eO6/05c+awdOnSlEpVbN5++23a29tdmg8ZMoRZs2aJ5gG48847Of/88znjjDNYs2aN6zPROj4aGhoYOnSoaBwhixYtYvr06Zxwwgl9x+9+9zt+8IMfcMIJJ/DWW2+J1jHR1NTEUUcdRXt7eybqdOpZ3UU97GXpl19+uTryyCPVbbfdprZv364OOuig1MuW12PkyJHq+OOPV8cff7xSSqkvfvGL6vjjj+9b6n/ttdeqLVu2qE984hPqmGOOUT/4wQ9kaWmA46677lJbtmxRH/zgB13LS4cNG9Z3jWgd/vjmN7+pZs6cqQ4++GA1ffp09Y1vfEP19vaqM888UzSO+ei/Sku0jub4l3/5F/XBD35QTZ06VZ1yyinq5z//udq2bVtfv5eyzukLVOTjqquuUm+//bbavXu3WrZsmWtZrxz+j1mzZqlK3HfffX3XzJ8/X61bt07t2rVLLV68WB1zzDGplztvRzUuvfRS13Widbjj//7f/9tnHzo6OtSTTz7Z5+yIxvEe/R0e0Tqaw95Xp7u7W7333nvqpz/9qTrqqKMyoXOD9UIQBEEQBKGwSA6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwiMOjyAIgiAIhUccHkEQCs/tt9/OI488knYxBEFIEXF4BEEoPDNmzODFF19MuxiCIKSIPEtLEITC0tjYyM6dO2lqaup774UXXuDUU09NsVSCIKRBY9oFEARBiIu9e/cyc+ZMXnzxRY4//ng6OjrYvXt32sUSBCEFxOERBKGwKKWYNGkSGzdu5A9/+EPaxREEIUUkh0cQhELz/ve/nxUrVqRdDEEQUkYcHkEQCs0JJ5wgDo8gCOLwCIJQbI499liZzhIEQRweQRCKzaBBgzjuuOOYOHEiLS0taRdHEISUEIdHEIRC85WvfIULL7yQdevW8dWvfjXt4giCkBKyD48gCIIgCIVHIjyCIAiCIBQecXgEQRAEQSg84vAIgiAIglB4xOERBEEQBKHwiMMjCIIgCELhEYdHEARBEITCIw6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeP4/cZ4Fv1Dm5tcAAAAASUVORK5CYII=", + "image/png": "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6sILL1SHHXaYOvLII9Xvfvc7tWrVKjVixAiRdYTHX/zFX6iPf/zjavr06Wr69OnqW9/6lurt7VWHHXaYyDim49hjj1Vvvvmmeu6559Qtt9wy8L7IOvxx7bXXqhdeeEFNnDhx4Bg/fnyWZJy+kIp6PPXUU+r22293vffSSy+pb3/726m3rQhHtYBnzZo16sorrxz4d0tLi9q4caO69NJLU29vno/x48crpZQ68cQTRdYxH+vXr1d/8zd/IzKO4Rg5cqR69dVX1Z//+Z+rxx9/3BXwiKzDH9dee6364x//WPPvactYprRiYsiQIRxzzDEsXLjQ9f7ChQs54YQTUmpVsZk2bRqTJk1yybyvr48lS5aIzEMyZswYADZs2ACIrOOgubmZc845h5EjR/Lkk0+KjGPgtttu4/e//z2LFi1yvS+yjo7p06fT0dHBm2++yc9//nOmTZsGZEPG8vDQmBg/fjyDBw+mq6vL9X5XVxft7e0ptarY2HKtJvP9998/jSYVhptvvpknnniCF198ERBZR8mMGTN48sknGTZsGFu2bGHevHm8/PLLfPjDHwZExlFxzjnn8KEPfYiZM2fu8TfR52h4+umnueCCC3jttdeYOHEiX/3qV1m6dCmHH354JmQsAU/MKKVc/25qatrjPSFaRObR8oMf/IAjjzyyasG9yDo8r776KkcffTRtbW385V/+JXfffTezZ88e+LvIODz77LMP//zP/8ypp55a99EGIutwPPzwwwOvV65cyZNPPskbb7zBhRdeyFNPPQWkK2OZ0oqJdevW0d/fv0c2Z8KECXtEuEI0rF27FkBkHiG33norn/zkJ/noRz9KR0fHwPsi6+jYuXMnb7zxBsuXL+eaa65hxYoVfPGLXxQZR8gxxxzDxIkTWb58OTt37mTnzp3MmTOH+fPns3PnzgF5iqyjZdu2bbzwwgtMnz49E/osAU9M7Ny5k+XLlzN37lzX+3PnzmXp0qUptarYvPXWW3R2drpkPmTIEGbPni0yD8D3v/99zjrrLE4++WRWrVrl+pvIOj6ampoYOnSoyDhCFi1axIwZMzj66KMHjj/84Q/89Kc/5eijj+bNN98UWcdAS0sLhx56KJ2dnZnR59Qru4t62MvSL774YnXIIYeom2++WW3evFntt99+qbctr8fIkSPVUUcdpY466iillFJf+tKX1FFHHTWw1P/KK69UGzduVJ/61KfU4Ycfrn7605/K0tIAx2233aY2btyoTjrpJNcS02HDhg1cI7IOf1x//fVq1qxZav/991czZsxQ3/rWt1R/f7865ZRTRMYxH5WrtETW4Y/vfve76qSTTlJTp05Vxx13nHrggQfUpk2bBvq8DMg4fSEV+bjsssvUW2+9pXbs2KGWLVvmWtYrh/9j9uzZqhp33nnnwDXXXnutWrNmjdq+fbtavHixOvzww1Nvd96OWlx44YWu60TW4Y5//dd/HfAPXV1d6pFHHhkIdkTG8R6VAY/IOvxh76vT29ur3n33XfXrX/9aHXrooZmRcZP1QhAEQRAEobBIDY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHwSMAjCIIgCELhkYBHEARBEITCIwGPIAiCIAiFRwIeQRAKzy233MJ9992XdjMEQUgRCXgEQSg8M2fO5Jlnnkm7GYIgpIg8S0sQhMIyePBgtm7dSktLy8B7Tz/9NMcff3yKrRIEIQ0Gp90AQRCEuNi1axezZs3imWee4aijjqKrq4sdO3ak3SxBEFJAAh5BEAqLUorJkyezbt06nn/++bSbIwhCikgNjyAIheaDH/wgK1asSLsZgiCkjAQ8giAUmqOPPloCHkEQJOARBKHYHHHEETKdJQiCBDyCIBSb5uZmjjzySCZNmsTo0aPTbo4gCCkhAY8gCIXmq1/9Kueccw5r1qzha1/7WtrNEQQhJWQfHkEQBEEQCo9keARBEARBKDwS8AiCIAiCUHgk4BEEQRAEofBIwCMIgiAIQuGRgEcQBEEQhMIjAY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHw/P9y2vvEykvE7wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -198,7 +198,7 @@ }, { "data": { - "image/png": "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U6NGjUq97Hk6Hn/8cXXppZeqo48+Wh133HHqF7/4hVqzZo0aMWKEaB3h8Vd/9Vfqox/9qDrssMPUYYcdpr7xjW+o7u5udfTRR4vGMR0nn3yyeuutt9TLL7+sbr/99r73Retojvnz56uVK1eqCRMm9B3jxo3Lis7pC1TU4/nnn1d33323671XXnlFfetb30q9bEU4Kjk869atU9dee23fv5uamtSWLVvUlVdemXp583yMGzdOKaXU6aefLlrHfGzatEn99V//tWgcwzFy5Ej12muvqQ9/+MPqmWeecTk8onU0x/z589Xvf//7qp+nqbNMacXEkCFDOOmkk1i4cKHr/YULF3LaaaelVKpiM23aNCZOnOjSvKenhyVLlojmIRk9ejQAmzdvBkTrOBg0aBAXXnghI0eO5LnnnhONY+Cuu+7il7/8JYsWLXK9L1pHy2GHHUZbWxtvvfUWDz74INOmTQPS11keHhoT48aNo7GxkY6ODtf7HR0dtLa2plSqYmPrWknzgw8+OI0iFYbbbruNZ599ltWrVwOidZRMnz6d5557jmHDhrFjxw7mzp3LH//4Rz7wgQ8AonFUXHjhhZx44onMmDFjwGdSn6PjhRde4HOf+xyvv/46EyZM4Ctf+QpLly7lmGOOSV1ncXhiRinl+ndDQ8OA94RoEc2j5Tvf+Q7HHXdcxYR70To8r732GieccAJjxozhk5/8JA888ACzZs3q+1w0Ds+UKVP413/9V84666yajzYQrcPzxBNP9L1etWoVzz33HG+++SaXXnopzz//PJCezjKlFRMbN26kt7d3QDRn/PjxA7xbIRrWr18PIJpHyB133MG5557Lhz70Idra2vreF62jY8+ePbz55pssX76cG264gRUrVvD3f//3onGEnHTSSUyYMIHly5ezZ88e9uzZw+zZs5k3bx579uzp01O0jp6uri5WrlzJYYcdlnqdFocnJvbs2cPy5cuZM2eO6/05c+awdOnSlEpVbN5++23a29tdmg8ZMoRZs2aJ5gG48847Of/88znjjDNYs2aN6zPROj4aGhoYOnSoaBwhixYtYvr06Zxwwgl9x+9+9zt+8IMfcMIJJ/DWW2+J1jHR1NTEUUcdRXt7eybqdOpZ3UU97GXpl19+uTryyCPVbbfdprZv364OOuig1MuW12PkyJHq+OOPV8cff7xSSqkvfvGL6vjjj+9b6n/ttdeqLVu2qE984hPqmGOOUT/4wQ9kaWmA46677lJbtmxRH/zgB13LS4cNG9Z3jWgd/vjmN7+pZs6cqQ4++GA1ffp09Y1vfEP19vaqM888UzSO+ei/Sku0jub4l3/5F/XBD35QTZ06VZ1yyinq5z//udq2bVtfv5eyzukLVOTjqquuUm+//bbavXu3WrZsmWtZrxz+j1mzZqlK3HfffX3XzJ8/X61bt07t2rVLLV68WB1zzDGplztvRzUuvfRS13Widbjj//7f/9tnHzo6OtSTTz7Z5+yIxvEe/R0e0Tqaw95Xp7u7W7333nvqpz/9qTrqqKMyoXOD9UIQBEEQBKGwSA6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwiMOjyAIgiAIhUccHkEQCs/tt9/OI488knYxBEFIEXF4BEEoPDNmzODFF19MuxiCIKSIPEtLEITC0tjYyM6dO2lqaup774UXXuDUU09NsVSCIKRBY9oFEARBiIu9e/cyc+ZMXnzxRY4//ng6OjrYvXt32sUSBCEFxOERBKGwKKWYNGkSGzdu5A9/+EPaxREEIUUkh0cQhELz/ve/nxUrVqRdDEEQUkYcHkEQCs0JJ5wgDo8gCOLwCIJQbI499liZzhIEQRweQRCKzaBBgzjuuOOYOHEiLS0taRdHEISUEIdHEIRC85WvfIULL7yQdevW8dWvfjXt4giCkBKyD48gCIIgCIVHIjyCIAiCIBQecXgEQRAEQSg84vAIgiAIglB4xOERBEEQBKHwiMMjCIIgCELhEYdHEARBEITCIw6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeP4/cZ4Fv1Dm5tcAAAAASUVORK5CYII=", + "image/png": "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6sILL1SHHXaYOvLII9Xvfvc7tWrVKjVixAiRdYTHX/zFX6iPf/zjavr06Wr69OnqW9/6lurt7VWHHXaYyDim49hjj1Vvvvmmeu6559Qtt9wy8L7IOvxx7bXXqhdeeEFNnDhx4Bg/fnyWZJy+kIp6PPXUU+r22293vffSSy+pb3/726m3rQhHtYBnzZo16sorrxz4d0tLi9q4caO69NJLU29vno/x48crpZQ68cQTRdYxH+vXr1d/8zd/IzKO4Rg5cqR69dVX1Z//+Z+rxx9/3BXwiKzDH9dee6364x//WPPvactYprRiYsiQIRxzzDEsXLjQ9f7ChQs54YQTUmpVsZk2bRqTJk1yybyvr48lS5aIzEMyZswYADZs2ACIrOOgubmZc845h5EjR/Lkk0+KjGPgtttu4/e//z2LFi1yvS+yjo7p06fT0dHBm2++yc9//nOmTZsGZEPG8vDQmBg/fjyDBw+mq6vL9X5XVxft7e0ptarY2HKtJvP9998/jSYVhptvvpknnniCF198ERBZR8mMGTN48sknGTZsGFu2bGHevHm8/PLLfPjDHwZExlFxzjnn8KEPfYiZM2fu8TfR52h4+umnueCCC3jttdeYOHEiX/3qV1m6dCmHH354JmQsAU/MKKVc/25qatrjPSFaRObR8oMf/IAjjzyyasG9yDo8r776KkcffTRtbW385V/+JXfffTezZ88e+LvIODz77LMP//zP/8ypp55a99EGIutwPPzwwwOvV65cyZNPPskbb7zBhRdeyFNPPQWkK2OZ0oqJdevW0d/fv0c2Z8KECXtEuEI0rF27FkBkHiG33norn/zkJ/noRz9KR0fHwPsi6+jYuXMnb7zxBsuXL+eaa65hxYoVfPGLXxQZR8gxxxzDxIkTWb58OTt37mTnzp3MmTOH+fPns3PnzgF5iqyjZdu2bbzwwgtMnz49E/osAU9M7Ny5k+XLlzN37lzX+3PnzmXp0qUptarYvPXWW3R2drpkPmTIEGbPni0yD8D3v/99zjrrLE4++WRWrVrl+pvIOj6ampoYOnSoyDhCFi1axIwZMzj66KMHjj/84Q/89Kc/5eijj+bNN98UWcdAS0sLhx56KJ2dnZnR59Qru4t62MvSL774YnXIIYeom2++WW3evFntt99+qbctr8fIkSPVUUcdpY466iillFJf+tKX1FFHHTWw1P/KK69UGzduVJ/61KfU4Ycfrn7605/K0tIAx2233aY2btyoTjrpJNcS02HDhg1cI7IOf1x//fVq1qxZav/991czZsxQ3/rWt1R/f7865ZRTRMYxH5WrtETW4Y/vfve76qSTTlJTp05Vxx13nHrggQfUpk2bBvq8DMg4fSEV+bjsssvUW2+9pXbs2KGWLVvmWtYrh/9j9uzZqhp33nnnwDXXXnutWrNmjdq+fbtavHixOvzww1Nvd96OWlx44YWu60TW4Y5//dd/HfAPXV1d6pFHHhkIdkTG8R6VAY/IOvxh76vT29ur3n33XfXrX/9aHXrooZmRcZP1QhAEQRAEobBIDY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHwSMAjCIIgCELhkYBHEARBEITCIwGPIAiCIAiFRwIeQRAKzy233MJ9992XdjMEQUgRCXgEQSg8M2fO5Jlnnkm7GYIgpIg8S0sQhMIyePBgtm7dSktLy8B7Tz/9NMcff3yKrRIEIQ0Gp90AQRCEuNi1axezZs3imWee4aijjqKrq4sdO3ak3SxBEFJAAh5BEAqLUorJkyezbt06nn/++bSbIwhCikgNjyAIheaDH/wgK1asSLsZgiCkjAQ8giAUmqOPPloCHkEQJOARBKHYHHHEETKdJQiCBDyCIBSb5uZmjjzySCZNmsTo0aPTbo4gCCkhAY8gCIXmq1/9Kueccw5r1qzha1/7WtrNEQQhJWQfHkEQBEEQCo9keARBEARBKDwS8AiCIAiCUHgk4BEEQRAEofBIwCMIgiAIQuGRgEcQBEEQhMIjAY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHw/P9y2vvEykvE7wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -412,7 +412,7 @@ "outputs": [ { "data": { - "image/png": "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FYWFheLkyZNqJXcffPCBEEKIhIQEcfr06TLb/PzzzyI3N1fMmDFDuLm5iUWLFomioiKVZO2LL74QBQUFws3NTal83759Ijc3V3z22WdiwIABYvbs2SInJ0fs379fqd3atWtFQUGBcHJyUpR9//33Qggh1q5dK55//nmlrfQs4PHjx0VBQYFS2cKFC4UQxVfFDhw4ULz//vtlXhVrYWEhLl68KBISEsS0adPEgAEDhLu7u3j//ffFjh07RK9evZT6bdeuneLvlp2dLRo0aFDp35rn2HHjVuVN7wPgxo2bEWzPPfec2LBhg4iLixN5eXkiKytLXLx4USxYsEDY2dmptHdzcxNCCJXZr5KtvMQOgPD29hZCCDF27FgBVJwkvPPOO6KgoECcPn1aWFlZVRiDtbW1yM7OFkKoLslSspmYmIj58+cr4rxx44aYPHmySruSmcW+ffsqldevX18sXrxYxMfHi/z8fBEXFye+/vprlcWdN2zYIIQQSoc9y7ugpCRBfvL1JYc/S49r9uzZIj4+XuTl5YnLly+LIUOGlLlAsYWFhVi4cKGIiooSeXl54v79+yIiIkJ89913omnTpir9nj59WgghxJYtW9T6vDCx48atapvk8QMiolpl+fLl8Pb2hqOjY6UXHRARUTHeK5aIapXnn38eTz/9NHx8fPDTTz8xqSMi0gBn7IioVhFCIDs7G4cOHYKXlxeys7P1PSQiojqDiR0RERGRgeACxUREREQGgokdERERkYFgYkdERERkIHhVbA1o0aIFsrKy9D0MIiIiqqOsra1x+/btStsxsdOxFi1aIDk5Wd/DICIiojrOwcGh0uSOiZ2OlczUOTg46GTWTiaTwd3dHceOHUNRUZHW+69tjC1ewPhiZryGz9hiZryGT9cxW1tbIzk5Wa08goldDcnKytJZYpebm4usrCyj+AIZW7yA8cXMeA2fscXMeA1fbYqZF08QERERGQgmdkREREQGgokdERERkYHgOXa1gImJCezt7SGVap5ny2Qy2NnZoVWrVno/rl8TjC1ewPhi1ke8QgikpaUhJyenRvZHRKQrTOzUUFBQgGvXrgEAwsLC8MEHH2it76ZNm2LRokWoX79+lfswNzdH//79tTam2s7Y4gWML2Z9xRsSEoINGzZACN5Cm4jqJiZ2asjIyEDXrl213q9EIsGECRPw8OFDLF++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F85jtJ+f0jp2AJCUno6pm7iOXU3SOLF79dVXyywXQiAvLw///PMP4uLiKuzDzc0Nhw8fxpkzZ+Dm5obPPvsMd+/exXPPPYcJEybg9ddf13RYREREpEeBF85jX9gF9OvYER79+iEoJAQhkZGcqathGid2e/fuhRACklLr0ZSUCSFw+vRpjBgxAhnlnCi5ZMkSfP7551ixYoXSbFZwcDB8fX01HRIRERHVAnIhEBoVBYvWrREaFcWkTg80PgHM3d0dFy5cgLu7O2xsbGBjYwN3d3ecP38eQ4cOhZubGxo3blzhXSg6deqEwMBAlfK7d++icePGZbyCiIiIiCqj8YzdypUrMXHiRJw7d05R9scff+CTTz7Bzz//jGeffRZTp07F+vXry+0jIyMD9vb2Kodsu3btiuTkZE2HRERERESowozdU089VebFAJmZmWjTpg0A4ObNm7CzK38V6u3bt+Pbb79Fs2bNIISAVCpF7969sXz5cqO4YpaIiIhIFzRO7C5evIhly5YpJW52dnZYunQpLly4AABo164dkpKSyu3js88+Q0JCApKTk2FlZYXr16/j5MmTOHv2LBYtWlSFMIiIiIhI40Ox77//Pvbt24ekpCQkJiZCCAEnJyfExMRg+PDhAAArKyt89dVX5fZRWFiId999F/PmzUPXrl0hlUoRHh7Oe8cSERERVYPGiV10dDRcXFwwaNAgPP3005BIJLhx4waOHTsG8fjql3379lXYR9u2bfHPP/8gJiYGMTExVRt5DdqzZw/69euHEydOcCkWIiIiqrWqtEAxABw5cgRHjhyp0mv//vtvpKSkIDQ0FKGhoQgJCUF0dHRVh6Jz33//PdavXw9PT099D4WIiIioXFVK7CwsLNC3b184OTnBzMxMqe6HH36o9PX29vbo378/+vbti2nTpmHNmjVITU1VJHk//fRTVYalMyEhIejbt6++h0FERERUIY0vnujSpQv++ecf/Prrr1i1ahU+//xz+Pv745tvvsHUqVPV6uPff//Fb7/9Bm9vb7i4uODpp5/GkSNHMGrUKKxevVrTIVXI1dUV+/fvR3JyMoQQivMAn+Tt7Y2YmBjk5uYiLCwMffr00eoYiIiIiGqCxondihUrcODAATRq1Ai5ubl44YUX0KpVK1y8eBGffPKJWn1YWlpi0KBBWLx4Mc6ePYurV6/iueeeww8/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", + "image/png": "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9vY1SuwAYNGiRYrFfc3MzPDJJ5/g/v37AKCVJzpYWlqiY8eOiveOjo7o3r07MjIykJiYCD8/P2zbtg1hYWE4f/48pk6dCgcHB/zwww+1Om7ZS7FERMYtECVLmqwE8PhEiiSUJHVc6qTeiwZwvWT2a/cB3RFxJsLgL7/WRWondt9//z1WrlyJZcuW4erVq+UmT1y9erXSz4aGhuKpp55SvD937hw6dOhQro4m9enTB6dOnVK8X7FiBYCSma5eXl7YvXs3mjdvjs8//xy2traIjIzEiBEjkJCQUKvj8lIsEVFZgQAOQCodhO7dhyMiIghy+SlwpM6ACEASL4FdF7uSiRJM6nRO7cRu165dAKD0bNjSZ71WN3ni+eefr0EXayckJAQSSdXr5qxduxZr167VUY+IiIyZHBJJCOzsLHDlSgiY1BFpltqJnaOjozb6YXB4KZaIiIh0Te3ErraXKI0FL8USERGRrqmU2L344os4cuQIioqK8OKLL1ZZ99ChQxrpGBERERGpR6XEbv/+/WjdujXS0tKUlgUpq7p77IwJL8USERGRrqmUdchkMjRs2FDxurKNSd1/AgIC4OzsDBcXF313hYiIiIyEysNJsbGxaNGihUYOOmzYMDz33HOK9z4+PggPD8eOHTvQpEkTjRyDiIiIyNionNhVt2SIOpYtW4bGjUseCv3000/ju+++w+HDh9GhQwf4+flp7DhERERExkQv104dHR1x7do1AMBLL72E3377DZ988gl69uyJw4cP66NLRERERPWeWond5MmT8eDBgyrrfP/999W2U1BQoHh82NChQ7F161YAQEZGhmIkr77j5AkiIiLSNbUSu/feew/FxcWV7hdCqJTYnTlzBn5+fjh79ixcXFzwyiuvAACefPJJJCUlqdOlOovr2BEREZGuqZXY9enTB2lpabU+6PTp0xEQEIDx48fD29sbt2/fBgD873//Q1BQUK3bJyIiIjJGKid2QmjuSb6JiYkVLnQ8e/ZsjR2DiIhI36QSwK2zgGu7ZOR2Fjh1DZBr7uuUqByVE7vazoq1srJCdna24nVVSusRERHVVx59gFWeQNtmcgDhmNMfSLwL+G4FAsP03TsyVCondl988UW1Eyeqcu/ePdja2iItLQ2ZmZkVjgBKJBKDeXoFJ08QERkvjz7A3pnly+2alpSP92dyR9qhcga1aNGi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", "text/plain": [ "
" ] @@ -469,15 +469,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "end_time-1.0e-03: Numba=9.294x; Cython(cryk_ode)=6.914x; Cython(CySolver)=4.566x; NbCy=1.344x; NbCyS=2.035x\n", - "end_time-1.0e-02: Numba=9.235x; Cython(cryk_ode)=6.707x; Cython(CySolver)=4.447x; NbCy=1.377x; NbCyS=2.077x\n", - "end_time-1.0e-01: Numba=13.049x; Cython(cryk_ode)=9.044x; Cython(CySolver)=6.416x; NbCy=1.443x; NbCyS=2.034x\n", - "end_time-1.0e+00: Numba=26.728x; Cython(cryk_ode)=15.324x; Cython(CySolver)=14.355x; NbCy=1.744x; NbCyS=1.862x\n", - "end_time-1.0e+01: Numba=85.615x; Cython(cryk_ode)=30.168x; Cython(CySolver)=106.321x; NbCy=2.838x; NbCyS=0.805x\n", - "end_time-1.0e+02: Numba=102.427x; Cython(cryk_ode)=26.259x; Cython(CySolver)=254.585x; NbCy=3.901x; NbCyS=0.402x\n", - "end_time-1.0e+03: Numba=109.736x; Cython(cryk_ode)=26.222x; Cython(CySolver)=346.580x; NbCy=4.185x; NbCyS=0.317x\n", - "end_time-1.0e+04: Numba=98.063x; Cython(cryk_ode)=27.157x; Cython(CySolver)=365.611x; NbCy=3.611x; NbCyS=0.268x\n", - "end_time-1.0e+05: Numba=93.948x; Cython(cryk_ode)=35.459x; Cython(CySolver)=379.234x; NbCy=2.650x; NbCyS=0.248x\n" + "end_time-1.0e-03: Numba=7.243x; Cython(cryk_ode)=5.702x; Cython(CySolver)=3.392x; NbCy=1.270x; NbCyS=2.135x\n", + "end_time-1.0e-02: Numba=8.358x; Cython(cryk_ode)=5.794x; Cython(CySolver)=3.477x; NbCy=1.442x; NbCyS=2.403x\n", + "end_time-1.0e-01: Numba=14.333x; Cython(cryk_ode)=7.790x; Cython(CySolver)=5.606x; NbCy=1.840x; NbCyS=2.557x\n", + "end_time-1.0e+00: Numba=31.499x; Cython(cryk_ode)=17.577x; Cython(CySolver)=15.219x; NbCy=1.792x; NbCyS=2.070x\n", + "end_time-1.0e+01: Numba=87.411x; Cython(cryk_ode)=26.348x; Cython(CySolver)=109.390x; NbCy=3.318x; NbCyS=0.799x\n", + "end_time-1.0e+02: Numba=94.580x; Cython(cryk_ode)=26.605x; Cython(CySolver)=243.903x; NbCy=3.555x; NbCyS=0.388x\n", + "end_time-1.0e+03: Numba=106.131x; Cython(cryk_ode)=30.681x; Cython(CySolver)=373.961x; NbCy=3.459x; NbCyS=0.284x\n", + "end_time-1.0e+04: Numba=103.674x; Cython(cryk_ode)=28.543x; Cython(CySolver)=424.916x; NbCy=3.632x; NbCyS=0.244x\n", + "end_time-1.0e+05: Numba=99.546x; Cython(cryk_ode)=34.986x; Cython(CySolver)=411.983x; NbCy=2.845x; NbCyS=0.242x\n" ] } ], diff --git a/Benchmarks/CyRK_CySolver.pdf b/Benchmarks/CyRK_CySolver.pdf index 57dad7ad75eb9c0850b8eca66d39c6f898e7e8bc..06ae649a328fc665114302b46adbcb85bffb21dc 100644 GIT binary patch delta 7313 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ⓈhK)Oml#EAmTiD!r=c8J>P$1^7DfJeIgJ)A1~zV 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 RtV#%ih!S#gD(k2a{y%HF;^+VX diff --git a/Benchmarks/CyRK_cyrk_ode.pdf b/Benchmarks/CyRK_cyrk_ode.pdf index 57dad7ad75eb9c0850b8eca66d39c6f898e7e8bc..5cd90bc7ff411c1fbbf4117378f45bbc779ba000 100644 GIT binary patch delta 7313 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ⓈhK)Oml#EAmTiD!r=c8J>P$1^7DfJeIgJ)A1~zV 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 RtV#%ih!S#gD(k2a{y%HF;^+VX diff --git a/Benchmarks/CyRK_numba.pdf b/Benchmarks/CyRK_numba.pdf index 57dad7ad75eb9c0850b8eca66d39c6f898e7e8bc..2c68d1a18fba79e42713856aa298685dcd98074f 100644 GIT binary patch delta 21 ccmdm#vngjozA=Z9nSp_kp^?$%a^u}h09ZT+KmY&$ delta 21 ccmdm#vngjozA=ZPxuKb{rJ=>{a^u}h09Z8#KL7v# delta 21 ccmdm#vngjozA=ZPxuKb{rJ>>Ga^u}h09d{UP5=M^ diff --git a/CHANGES.md b/CHANGES.md index 3e3c98e..ff094c3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,7 @@ Other Changes - To make more logical sense with the wording, `CySolver.size_growths` now gives one less than the solver's growths attribute. - Cleaned up status codes and created new status code description document under "Documentation/Status and Error Codes.md" - Fixed compile warning related to NPY_NO_DEPRECATED_API. +- Converted RK variable lengths to Py_ssize_t types. Performance - Various minor performance gains for cython-based solvers. diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index ded5fcc..e4c1149 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -96,8 +96,8 @@ def cyrk_ode( bool_cpp_t capture_extra = False, Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, - unsigned int expected_size = 0, - unsigned int max_steps = 0 + Py_ssize_t expected_size = 0, + Py_ssize_t max_steps = 0 ): """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. @@ -347,7 +347,7 @@ def cyrk_ode( y0_to_store_view[i] = y0[i] # # Determine RK scheme - cdef unsigned char rk_order, error_order + cdef Py_ssize_t rk_order, error_order cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1 cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index 2a03426..a994668 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -25,7 +25,7 @@ cdef class CySolver: # -- RK method information cdef unsigned char rk_method - cdef unsigned char rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended + cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended cdef double error_expo cdef Py_ssize_t len_C cdef double[:] B_view, E_view, E3_view, E5_view, C_view diff --git a/CyRK/rk/rk.pyx b/CyRK/rk/rk.pyx index ee10103..8f1f307 100644 --- a/CyRK/rk/rk.pyx +++ b/CyRK/rk/rk.pyx @@ -9,16 +9,16 @@ cdef double RK23_C[3] cdef double RK23_B[3] cdef double RK23_E[4] cdef double RK23_A[3][3] -cdef unsigned char RK23_order = 3 -cdef unsigned char RK23_error_order = 2 -cdef unsigned char RK23_n_stages = 3 -cdef unsigned char RK23_LEN_C = 3 -cdef unsigned char RK23_LEN_B = 3 -cdef unsigned char RK23_LEN_E = 4 -cdef unsigned char RK23_LEN_E3 = 4 -cdef unsigned char RK23_LEN_E5 = 4 -cdef unsigned char RK23_LEN_A0 = 3 -cdef unsigned char RK23_LEN_A1 = 3 +cdef Py_ssize_t RK23_order = 3 +cdef Py_ssize_t RK23_error_order = 2 +cdef Py_ssize_t RK23_n_stages = 3 +cdef Py_ssize_t RK23_LEN_C = 3 +cdef Py_ssize_t RK23_LEN_B = 3 +cdef Py_ssize_t RK23_LEN_E = 4 +cdef Py_ssize_t RK23_LEN_E3 = 4 +cdef Py_ssize_t RK23_LEN_E5 = 4 +cdef Py_ssize_t RK23_LEN_A0 = 3 +cdef Py_ssize_t RK23_LEN_A1 = 3 RK23_C[:] = [0, 1 / 2, 3 / 4] RK23_B[:] = [2 / 9, 1 / 3, 4 / 9] @@ -33,16 +33,16 @@ cdef double RK45_C[6] cdef double RK45_B[6] cdef double RK45_E[7] cdef double RK45_A[6][5] -cdef unsigned char RK45_order = 5 -cdef unsigned char RK45_error_order = 4 -cdef unsigned char RK45_n_stages = 6 -cdef unsigned char RK45_LEN_C = 6 -cdef unsigned char RK45_LEN_B = 6 -cdef unsigned char RK45_LEN_E = 7 -cdef unsigned char RK45_LEN_E3 = 7 -cdef unsigned char RK45_LEN_E5 = 7 -cdef unsigned char RK45_LEN_A0 = 6 -cdef unsigned char RK45_LEN_A1 = 5 +cdef Py_ssize_t RK45_order = 5 +cdef Py_ssize_t RK45_error_order = 4 +cdef Py_ssize_t RK45_n_stages = 6 +cdef Py_ssize_t RK45_LEN_C = 6 +cdef Py_ssize_t RK45_LEN_B = 6 +cdef Py_ssize_t RK45_LEN_E = 7 +cdef Py_ssize_t RK45_LEN_E3 = 7 +cdef Py_ssize_t RK45_LEN_E5 = 7 +cdef Py_ssize_t RK45_LEN_A0 = 6 +cdef Py_ssize_t RK45_LEN_A1 = 5 RK45_C[:] = [0, 1 / 5, 3 / 10, 4 / 5, 8 / 9, 1] RK45_B[:] = [35 / 384, 0, 500 / 1113, 125 / 192, -2187 / 6784, 11 / 84] @@ -57,17 +57,17 @@ RK45_A[5][:] = [9017 / 3168, -355 / 33, 46732 / 5247, 49 / 176, -5103 / 18656] # DOP863 Constants cdef Py_ssize_t j_, i_ -cdef unsigned char DOP_order = 8 -cdef unsigned char DOP_error_order = 7 -cdef unsigned char DOP_n_stages = 12 -cdef unsigned char DOP_n_stages_extended = 16 -cdef unsigned char DOP_LEN_C = 12 ## Reduced Size -cdef unsigned char DOP_LEN_B = 12 -cdef unsigned char DOP_LEN_E = 13 -cdef unsigned char DOP_LEN_E3 = 13 -cdef unsigned char DOP_LEN_E5 = 13 -cdef unsigned char DOP_LEN_A0 = 12 ## Reduced Size -cdef unsigned char DOP_LEN_A1 = 12 ## Reduced Size +cdef Py_ssize_t DOP_order = 8 +cdef Py_ssize_t DOP_error_order = 7 +cdef Py_ssize_t DOP_n_stages = 12 +cdef Py_ssize_t DOP_n_stages_extended = 16 +cdef Py_ssize_t DOP_LEN_C = 12 ## Reduced Size +cdef Py_ssize_t DOP_LEN_B = 12 +cdef Py_ssize_t DOP_LEN_E = 13 +cdef Py_ssize_t DOP_LEN_E3 = 13 +cdef Py_ssize_t DOP_LEN_E5 = 13 +cdef Py_ssize_t DOP_LEN_A0 = 12 ## Reduced Size +cdef Py_ssize_t DOP_LEN_A1 = 12 ## Reduced Size cdef double DOP_C[16] DOP_C = [ diff --git a/pyproject.toml b/pyproject.toml index 958974f..7540620 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0dev4' +version = '0.7.0dev5' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From a4b16ffc39c69aabec13a622b18895fb45105e3a Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sun, 27 Aug 2023 00:31:22 -0400 Subject: [PATCH 19/29] Converted RK variable lengths to Py_ssize_t types. --- CHANGES.md | 4 + CyRK/cy/cysolver.pxd | 40 +- CyRK/cy/cysolver.pyx | 681 +- Tests/Cython Class Experiments.ipynb | 29298 +++++++++---------------- pyproject.toml | 2 +- 5 files changed, 10227 insertions(+), 19798 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ff094c3..56bfdfe 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,8 @@ New Features - Added new optional argument to all solvers `max_steps` which allows the user to control how many steps the solver is allowed to take. - If exceeded the integration with fail (softly). - Defaults to 95% of `sys.maxsize` (depends on system architecture). +- New `CySolver.update_constants` method allows for significant speed boosts for certain differential equations. + - See test diffeqs, which have been updated to use this feature, for examples. Other Changes - Refactored `max_step` to `max_step_size` argument for all solvers to avoid confusion with new `max_steps` argument. @@ -23,6 +25,8 @@ Other Changes Performance - Various minor performance gains for cython-based solvers. +- Moved key loops in `CySolver` into self-contained method so that gil can be released. +- New `CySolver.update_constants` method allows for significant speed boosts for certain differential equations. Bug Fixes: - Fixed potential seg fault when accessing `CySolver`'s arg_array_view. diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index a994668..68b28fb 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -15,22 +15,23 @@ cdef class CySolver: # -- Live variables cdef double t_new, t_old cdef Py_ssize_t len_t - cdef double[:] y_new_view, y_old_view, dy_new_view, dy_old_view - cdef double[:] extra_output_view, extra_output_init_view - + cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view + cdef double[::1] extra_output_view, extra_output_init_view + # -- Dependent (y0) variable information cdef Py_ssize_t y_size cdef double y_size_dbl, y_size_sqrt - cdef const double[:] y0_view - + cdef const double[::1] y0_view + # -- RK method information cdef unsigned char rk_method cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended cdef double error_expo cdef Py_ssize_t len_C - cdef double[:] B_view, E_view, E3_view, E5_view, C_view - cdef double[:, :] A_view, K_view - + cdef double[::1] B_view, E_view, E3_view, E5_view, C_view + cdef double[:, ::1] A_view, K_view + cdef double[::1, :] K_T_view + # -- Integration information cdef public char status cdef public str message @@ -42,12 +43,11 @@ cdef class CySolver: cdef double first_step cdef Py_ssize_t expected_size, num_concats, max_steps cdef bool_cpp_t use_max_steps - cdef double[:] scale_view cdef bool_cpp_t recalc_firststep - + # -- Optional args info cdef Py_ssize_t num_args - cdef double[:] arg_array_view + cdef double[::1] arg_array_view # -- Extra output info cdef bool_cpp_t capture_extra @@ -57,26 +57,28 @@ cdef class CySolver: cdef bool_cpp_t run_interpolation cdef bool_cpp_t interpolate_extra cdef Py_ssize_t len_t_eval - cdef double[:] t_eval_view + cdef double[::1] t_eval_view # -- Solution variables - cdef double[:, :] solution_y_view, solution_extra_view - cdef double[:] solution_t_view + cdef double[:, ::1] solution_y_view, solution_extra_view + cdef double[::1] solution_t_view # Class functions cpdef void reset_state(self) - cdef double calc_first_step(self) + cdef double calc_first_step(self) noexcept nogil + cdef void rk_step(self) noexcept nogil cpdef void solve(self, bool_cpp_t reset = *) cdef void _solve(self, bool_cpp_t reset = *) cdef void interpolate(self) - cdef void diffeq(self) cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = *) - cpdef void change_y0(self, const double[:] y0, bool_cpp_t auto_reset_state = *) + cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = *) cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = *) cpdef void change_tols(self, double rtol = *, double atol = *, bool_cpp_t auto_reset_state = *) cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = *) cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = *) cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = *) - cpdef void change_parameters(self, (double, double) t_span = *, const double[:] y0 = *, tuple args = *, + cpdef void change_parameters(self, (double, double) t_span = *, const double[::1] y0 = *, tuple args = *, double rtol = *, double atol = *, double max_step_size = *, double first_step = *, - const double[:] t_eval = *, bool_cpp_t auto_reset_state = *, bool_cpp_t auto_solve = *) + const double[::1] t_eval = *, bool_cpp_t auto_reset_state = *, bool_cpp_t auto_solve = *) + cdef void update_constants(self) noexcept nogil + cdef void diffeq(self) noexcept nogil diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 7baa9af..0451e93 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -2,21 +2,21 @@ # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False import cython +cimport cython import sys import numpy as np cimport numpy as np np.import_array() + from libcpp cimport bool as bool_cpp_t -from libc.math cimport sqrt, fabs, nextafter, fmax, fmin, isnan, NAN +from libc.math cimport sqrt, fabs, nextafter, fmax, fmin, isnan, NAN, pow from CyRK.array.interp cimport interp_array from CyRK.rk.rk cimport ( - RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E, - RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1, - RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E, - RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1, + RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, + RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages, - DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1) + DOP_n_stages_extended, DOP_LEN_C) # # Integration Constants # Multiply steps computed from asymptotic behaviour of errors by this. @@ -32,25 +32,76 @@ cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize) cdef (double, double) EMPTY_T_SPAN = (NAN, NAN) - cdef class CySolver: + # Class attributes + # -- Live variables + cdef double t_new, t_old + cdef Py_ssize_t len_t + cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view + cdef double[::1] extra_output_view, extra_output_init_view + + # -- Dependent (y0) variable information + cdef Py_ssize_t y_size + cdef double y_size_dbl, y_size_sqrt + cdef const double[::1] y0_view + + # -- RK method information + cdef unsigned char rk_method + cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended + cdef double error_expo + cdef Py_ssize_t len_C + cdef double[::1] B_view, E_view, E3_view, E5_view, C_view + cdef double[:, ::1] A_view, K_view + cdef double[::1, :] K_T_view + + # -- Integration information + cdef public char status + cdef public str message + cdef public bool_cpp_t success + cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf + cdef bool_cpp_t direction_flag + cdef double rtol, atol + cdef double step_size, max_step_size + cdef double first_step + cdef Py_ssize_t expected_size, num_concats, max_steps + cdef bool_cpp_t use_max_steps + cdef bool_cpp_t recalc_firststep + + # -- Optional args info + cdef Py_ssize_t num_args + cdef double[::1] arg_array_view + + # -- Extra output info + cdef bool_cpp_t capture_extra + cdef Py_ssize_t num_extra + + # -- Interpolation info + cdef bool_cpp_t run_interpolation + cdef bool_cpp_t interpolate_extra + cdef Py_ssize_t len_t_eval + cdef double[::1] t_eval_view + + # -- Solution variables + cdef double[:, ::1] solution_y_view, solution_extra_view + cdef double[::1] solution_t_view + def __init__(self, (double, double) t_span, - const double[:] y0, + const double[::1] y0, tuple args = None, double rtol = 1.e-6, double atol = 1.e-8, double max_step_size = MAX_STEP, double first_step = 0., unsigned char rk_method = 1, - const double[:] t_eval = None, + const double[::1] t_eval = None, bool_cpp_t capture_extra = False, Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, - unsigned int expected_size = 0, - unsigned int max_steps = 0, + Py_ssize_t expected_size = 0, + Py_ssize_t max_steps = 0, bool_cpp_t auto_solve = True): # Setup loop variables @@ -199,10 +250,8 @@ cdef class CySolver: for i in range(self.len_t_eval): self.t_eval_view[i] = t_eval[i] - # Determine RK scheme + # Determine RK scheme and initalize memory views self.rk_method = rk_method - cdef Py_ssize_t len_B, len_E, len_E3, len_E5, len_A0, len_A1 - # Note, len_C is used during the solving phase so it is declared at the class level. if rk_method == 0: # RK23 Method @@ -210,38 +259,43 @@ cdef class CySolver: self.error_order = RK23_error_order self.rk_n_stages = RK23_n_stages self.len_C = RK23_LEN_C - len_B = RK23_LEN_B - len_E = RK23_LEN_E - len_E3 = RK23_LEN_E3 - len_E5 = RK23_LEN_E5 - len_A0 = RK23_LEN_A0 - len_A1 = RK23_LEN_A1 + self.A_view = RK23_A + self.B_view = RK23_B + self.C_view = RK23_C + self.E_view = RK23_E + + # Unused for RK23 but initalize it anyways + self.E3_view = RK23_E + self.E5_view = RK23_E elif rk_method == 1: # RK45 Method self.rk_order = RK45_order self.error_order = RK45_error_order self.rk_n_stages = RK45_n_stages self.len_C = RK45_LEN_C - len_B = RK45_LEN_B - len_E = RK45_LEN_E - len_E3 = RK45_LEN_E3 - len_E5 = RK45_LEN_E5 - len_A0 = RK45_LEN_A0 - len_A1 = RK45_LEN_A1 + self.A_view = RK45_A + self.B_view = RK45_B + self.C_view = RK45_C + self.E_view = RK45_E + + # Unused for RK23 but initalize it anyways + self.E3_view = RK45_E + self.E5_view = RK45_E elif rk_method == 2: # DOP853 Method self.rk_order = DOP_order self.error_order = DOP_error_order self.rk_n_stages = DOP_n_stages self.len_C = DOP_LEN_C - len_B = DOP_LEN_B - len_E = DOP_LEN_E - len_E3 = DOP_LEN_E3 - len_E5 = DOP_LEN_E5 - len_A0 = DOP_LEN_A0 - len_A1 = DOP_LEN_A1 - + self.A_view = DOP_A_REDUCED + self.B_view = DOP_B + self.C_view = DOP_C_REDUCED + self.E3_view = DOP_E3 + self.E5_view = DOP_E5 self.rk_n_stages_extended = DOP_n_stages_extended + + # Unused for DOP853 but initalize it anyways + self.E_view = DOP_E3 else: self.status = -8 self.message = "Attribute error." @@ -254,80 +308,14 @@ cdef class CySolver: self.rk_n_stages_plus1 = self.rk_n_stages + 1 self.error_expo = 1. / (self.error_order + 1.) - # Initialize RK Arrays. Note that all are 1D except for A and K. - cdef np.ndarray[np.float64_t, ndim=2, mode='c'] A, K - cdef np.ndarray[np.float64_t, ndim=1, mode='c'] B, C, E, E3, E5, E_tmp, E3_tmp, E5_tmp - - A = np.empty((len_A0, len_A1), dtype=np.float64, order='C') - B = np.empty(len_B, dtype=np.float64, order='C') - C = np.empty(self.len_C, dtype=np.float64, order='C') - E = np.empty(len_E, dtype=np.float64, order='C') - E3 = np.empty(len_E3, dtype=np.float64, order='C') - E5 = np.empty(len_E5, dtype=np.float64, order='C') - E_tmp = np.empty(self.y_size, dtype=np.float64, order='C') - E3_tmp = np.empty(self.y_size, dtype=np.float64, order='C') - E5_tmp = np.empty(self.y_size, dtype=np.float64, order='C') + # Initialize other RK-related Arrays + cdef np.ndarray[np.float64_t, ndim=2, mode='c'] K # It is important K be initialized with 0s - K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C') + K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C') # Setup memory views. - self.A_view = A - self.B_view = B - self.C_view = C - self.E_view = E - self.E3_view = E3 - self.E5_view = E5 - self.K_view = K - - # Populate values based on externally defined constants. - if rk_method == 0: - # RK23 Method - for i in range(len_A0): - for j in range(len_A1): - self.A_view[i, j] = RK23_A[i][j] - for i in range(len_B): - self.B_view[i] = RK23_B[i] - for i in range(self.len_C): - self.C_view[i] = RK23_C[i] - for i in range(len_E): - self.E_view[i] = RK23_E[i] - # Dummy Variables, set equal to E - self.E3_view[i] = RK23_E[i] - self.E5_view[i] = RK23_E[i] - elif rk_method == 1: - # RK45 Method - for i in range(len_A0): - for j in range(len_A1): - self.A_view[i, j] = RK45_A[i][j] - for i in range(len_B): - self.B_view[i] = RK45_B[i] - for i in range(self.len_C): - self.C_view[i] = RK45_C[i] - for i in range(len_E): - self.E_view[i] = RK45_E[i] - # Dummy Variables, set equal to E - self.E3_view[i] = RK45_E[i] - self.E5_view[i] = RK45_E[i] - else: - # DOP853 Method - for i in range(len_A0): - for j in range(len_A1): - self.A_view[i, j] = DOP_A_REDUCED[i][j] - for i in range(len_B): - self.B_view[i] = DOP_B[i] - for i in range(self.len_C): - self.C_view[i] = DOP_C_REDUCED[i] - for i in range(len_E): - self.E3_view[i] = DOP_E3[i] - self.E5_view[i] = DOP_E5[i] - self.E_view[i] = DOP_E5[i] - # Dummy Variables, set equal to E3 - self.E_view[i] = DOP_E3[i] - - # Setup error scale array - cdef np.ndarray[np.float64_t, ndim=1, mode='c'] scale_array - scale_array = np.empty(self.y_size, dtype=np.float64, order='C') - self.scale_view = scale_array + self.K_view = K + self.K_T_view = self.K_view.T # Initialize dy_new_view for start of integration (important for first_step calculation) if not self.capture_extra: @@ -353,6 +341,9 @@ cdef class CySolver: self.step_size = self.first_step self.max_step_size = max_step_size + # Set any constant parameters that the user has set + self.update_constants() + # Run solver if requested if auto_solve: # We know for a fact that this is the first time solve will be called @@ -379,6 +370,9 @@ cdef class CySolver: # Reset RK variables self.K_view[j, i] = 0. + # Update any constant parameters that the user has set + self.update_constants() + # Make initial call to diffeq() self.diffeq() for i in range(self.y_size): @@ -417,10 +411,11 @@ cdef class CySolver: self.message = "CySolver has been reset." - cdef double calc_first_step(self): + cdef double calc_first_step(self) noexcept nogil: """ Determine initial step size. """ cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale + cdef double y_old_tmp # Select an initial step size based on the differential equation. # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential @@ -432,9 +427,10 @@ cdef class CySolver: d0 = 0. d1 = 0. for i in range(self.y_size): - scale = self.atol + fabs(self.y_old_view[i]) * self.rtol + y_old_tmp = self.y_old_view[i] + scale = self.atol + fabs(y_old_tmp) * self.rtol - d0_abs = fabs(self.y_old_view[i] / scale) + d0_abs = fabs(y_old_tmp / scale) d1_abs = fabs(self.dy_old_view[i] / scale) d0 += (d0_abs * d0_abs) d1 += (d1_abs * d1_abs) @@ -451,6 +447,7 @@ cdef class CySolver: h0_direction = h0 else: h0_direction = -h0 + self.t_new = self.t_old + h0_direction for i in range(self.y_size): self.y_new_view[i] = self.y_old_view[i] + h0_direction * self.dy_old_view[i] @@ -477,6 +474,211 @@ cdef class CySolver: return step_size + cdef void rk_step(self) noexcept nogil: + + # Initialize step variables + cdef Py_ssize_t s, i, j + cdef double min_step, step, step_factor, time_tmp, t_delta_check + cdef double C_at_s, A_at_sj, A_at_10, B_at_j + cdef double scale, K_scale, dy_tmp + cdef double error_norm3, error_norm5, error_norm, error_dot_1, error_dot_2, error_denom, error_pow + cdef bool_cpp_t step_accepted, step_rejected, step_error + + # Run RK integration step + # Determine step size based on previous loop + # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) + min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old) + # Look for over/undershoots in previous step size + if self.step_size > self.max_step_size: + self.step_size = self.max_step_size + elif self.step_size < min_step: + self.step_size = min_step + + # Determine new step size + step_accepted = False + step_rejected = False + step_error = False + + # Optimization since this A is called consistently and does not change. + A_at_10 = self.A_view[1, 0] + + # # Step Loop + while not step_accepted: + + if self.step_size < min_step: + step_error = True + self.status = -1 + break + + # Move time forward for this particular step size + if self.direction_flag: + step = self.step_size + t_delta_check = self.t_new - self.t_end + else: + step = -self.step_size + t_delta_check = self.t_end - self.t_new + self.t_new = self.t_old + step + + # Check that we are not at the end of integration with that move + if t_delta_check > 0.: + self.t_new = self.t_end + + # Correct the step if we were at the end of integration + step = self.t_new - self.t_old + if self.direction_flag: + self.step_size = step + else: + self.step_size = -step + + # Calculate derivative using RK method + + # t_new must be updated for each loop of s in order to make the diffeq calls. + # But we need to return to its original value later on. Store in temp variable. + time_tmp = self.t_new + for s in range(1, self.len_C): + C_at_s = self.C_view[s] + + # Update t_new so it can be used in the diffeq call. + self.t_new = self.t_old + C_at_s * step + + # Dot Product (K, a) * step + if s == 1: + for i in range(self.y_size): + # Set the first column of K + dy_tmp = self.dy_old_view[i] + self.K_view[0, i] = dy_tmp + + # Calculate y_new for s==1 + self.y_new_view[i] = self.y_old_view[i] + (dy_tmp * A_at_10 * step) + else: + for j in range(s): + A_at_sj = self.A_view[s, j] + for i in range(self.y_size): + if j == 0: + # Initialize + self.y_new_view[i] = self.y_old_view[i] + + self.y_new_view[i] += self.K_view[j, i] * A_at_sj * step + + # Call diffeq to update K with the new dydt + self.diffeq() + + for i in range(self.y_size): + self.K_view[s, i] = self.dy_new_view[i] + + # Restore t_new to its previous value. + self.t_new = time_tmp + + # Dot Product (K, B) * step + for j in range(self.rk_n_stages): + B_at_j = self.B_view[j] + # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match + # the shape of B. + for i in range(self.y_size): + if j == 0: + # Initialize + self.y_new_view[i] = self.y_old_view[i] + + self.y_new_view[i] += self.K_view[j, i] * B_at_j * step + + self.diffeq() + + # Check how well this step performed by calculating its error + if self.rk_method == 2: + # Calculate Error for DOP853 + # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale + error_norm3 = 0. + error_norm5 = 0. + for i in range(self.y_size): + # Find scale of y for error calculations + scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol + + # Set last array of K equal to dydt + self.K_view[self.rk_n_stages, i] = self.dy_new_view[i] + for j in range(self.rk_n_stages_plus1): + if j == 0: + # Initialize + error_dot_1 = 0. + error_dot_2 = 0. + + K_scale = self.K_T_view[i, j] / scale + error_dot_1 += K_scale * self.E3_view[j] + error_dot_2 += K_scale * self.E5_view[j] + + # We need the absolute value but since we are taking the square, it is guaranteed to be positive. + # TODO: This will need to change if CySolver ever accepts complex numbers + # error_norm3_abs = fabs(error_dot_1) + # error_norm5_abs = fabs(error_dot_2) + + error_norm3 += (error_dot_1 * error_dot_1) + error_norm5 += (error_dot_2 * error_dot_2) + + # Check if errors are zero + if (error_norm5 == 0.) and (error_norm3 == 0.): + error_norm = 0. + else: + error_denom = error_norm5 + 0.01 * error_norm3 + error_norm = self.step_size * error_norm5 / sqrt(error_denom * self.y_size_dbl) + + else: + # Calculate Error for RK23 and RK45 + # Dot Product (K, E) * step / scale + error_norm = 0. + for i in range(self.y_size): + # Find scale of y for error calculations + scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol + + # Set last array of K equal to dydt + self.K_view[self.rk_n_stages, i] = self.dy_new_view[i] + for j in range(self.rk_n_stages_plus1): + if j == 0: + # Initialize + error_dot_1 = 0. + + K_scale = self.K_T_view[i, j] / scale + error_dot_1 += K_scale * self.E_view[j] * step + + # We need the absolute value but since we are taking the square, it is guaranteed to be positive. + # TODO: This will need to change if CySolver ever accepts complex numbers + # error_norm_abs = fabs(error_dot_1) + # error_norm5_abs = fabs(error_dot_2) + + error_norm += (error_dot_1 * error_dot_1) + error_norm = sqrt(error_norm) / self.y_size_sqrt + + if error_norm < 1.: + # The error is low! Let's update this step for the next time loop + if error_norm == 0.: + step_factor = MAX_FACTOR + else: + error_pow = pow(error_norm, -self.error_expo) + step_factor = min(MAX_FACTOR, SAFETY * error_pow) + + if step_rejected: + # There were problems with this step size on the previous step loop. Make sure factor does + # not exasperate them. + step_factor = min(step_factor, 1.) + + self.step_size = self.step_size * step_factor + step_accepted = True + else: + error_pow = pow(error_norm, -self.error_expo) + self.step_size = self.step_size * max(MIN_FACTOR, SAFETY * error_pow) + step_rejected = True + + if step_error: + # Issue with step convergence + self.status = -1 + elif not step_accepted: + # Issue with step convergence + self.status = -7 + + # End of step loop. Update the old variables + self.t_old = self.t_new + for i in range(self.y_size): + self.y_old_view[i] = self.y_new_view[i] + self.dy_old_view[i] = self.dy_new_view[i] + cpdef void solve(self, bool_cpp_t reset = True): self._solve() @@ -490,31 +692,15 @@ cdef class CySolver: self.reset_state() # Setup loop variables - cdef Py_ssize_t s, i, j - - # Initialize other variables - cdef double error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom, error_pow - cdef double t_delta_check - - # Avoid method lookups for variables in tight loops - cdef double[:] B_view, E_view, E3_view, E5_view, C_view - cdef double[:, :] A_view, K_view - cdef double A_at_sj, B_at_j, error_dot_1, error_dot_2 - A_view = self.A_view - B_view = self.B_view - C_view = self.C_view - E_view = self.E_view - E3_view = self.E3_view - E5_view = self.E5_view - K_view = self.K_view + cdef Py_ssize_t i, j # Setup storage arrays # These arrays are built to fit a number of points equal to `self.expected_size` # If the integration needs more than that then a new array will be concatenated (with performance costs) to these. cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array, extra_array cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array - cdef double[:, :] y_results_array_view, extra_array_view - cdef double[:] time_domain_array_view + cdef double[:, ::1] y_results_array_view, extra_array_view + cdef double[::1] time_domain_array_view y_results_array = np.empty((self.y_size, self.expected_size), dtype=np.float64, order='C') time_domain_array = np.empty(self.expected_size, dtype=np.float64, order='C') y_results_array_view = y_results_array @@ -526,8 +712,8 @@ cdef class CySolver: # The following are unused unless the previous array size is too small to capture all of the data cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array_new, extra_array_new cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array_new - cdef double[:, :] y_results_array_new_view, extra_array_new_view - cdef double[:] time_domain_array_new_view + cdef double[:, ::1] y_results_array_new_view, extra_array_new_view + cdef double[::1] time_domain_array_new_view # Load initial conditions into output arrays time_domain_array_view[0] = self.t_start @@ -546,223 +732,36 @@ cdef class CySolver: self.t_old = self.t_start self.t_new = self.t_start - # Set integration flags - cdef bool_cpp_t step_accepted, step_rejected, step_error - self.success = False - step_accepted = False - step_rejected = False - step_error = False - # # Main integration loop - cdef double min_step, step_factor, step, time_tmp - cdef double c - cdef double K_scale - self.message = "Integration is/was ongoing (perhaps it was interrupted?)." self.status = 0 # There is an initial condition provided so the time length is already 1 self.len_t = 1 if self.y_size == 0: self.status = -6 - self.message = "Integration never started: y-size is zero." while self.status == 0: if self.t_new == self.t_end: self.t_old = self.t_end self.status = 1 - self.message = "Integration completed without issue." break if self.use_max_steps: if self.len_t > self.max_steps: self.status = -2 - self.message = "Maximum number of steps (set by user) exceeded during integration." break else: if self.len_t > MAX_INT_SIZE: self.status = -3 - self.message = "Maximum number of steps (set by system architecture) exceeded during integration." - break - - # Run RK integration step - # Determine step size based on previous loop - # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) - min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old) - # Look for over/undershoots in previous step size - if self.step_size > self.max_step_size: - self.step_size = self.max_step_size - elif self.step_size < min_step: - self.step_size = min_step - - # Determine new step size - step_accepted = False - step_rejected = False - step_error = False - - # # Step Loop - while not step_accepted: - - if self.step_size < min_step: - step_error = True - self.status = -1 break - # Move time forward for this particular step size - if self.direction_flag: - step = self.step_size - t_delta_check = self.t_new - self.t_end - else: - step = -self.step_size - t_delta_check = self.t_end - self.t_new - self.t_new = self.t_old + step - - # Check that we are not at the end of integration with that move - if t_delta_check > 0.: - self.t_new = self.t_end - - # Correct the step if we were at the end of integration - step = self.t_new - self.t_old - if self.direction_flag: - self.step_size = step - else: - self.step_size = -step - - # Calculate derivative using RK method - for i in range(self.y_size): - K_view[0, i] = self.dy_old_view[i] - - # t_new must be updated for each loop of s in order to make the diffeq calls. - # But we need to return to its original value later on. Store in temp variable. - time_tmp = self.t_new - for s in range(1, self.len_C): - c = C_view[s] - - # Update t_new so it can be used in the diffeq call. - self.t_new = self.t_old + c * step - - # Dot Product (K, a) * step - for j in range(s): - A_at_sj = A_view[s, j] - for i in range(self.y_size): - if j == 0: - # Initialize - self.y_new_view[i] = self.y_old_view[i] - - self.y_new_view[i] = self.y_new_view[i] + (K_view[j, i] * A_at_sj * step) - - self.diffeq() - - for i in range(self.y_size): - K_view[s, i] = self.dy_new_view[i] + # Perform RK Step + self.rk_step() - # Restore t_new to its previous value. - self.t_new = time_tmp - - # Dot Product (K, B) * step - for j in range(self.rk_n_stages): - B_at_j = B_view[j] - # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match - # the shape of B. - for i in range(self.y_size): - if j == 0: - # Initialize - self.y_new_view[i] = self.y_old_view[i] - self.y_new_view[i] = self.y_new_view[i] + (K_view[j, i] * B_at_j * step) - - self.diffeq() - - - for i in range(self.y_size): - # Find scale of y for error calculations - self.scale_view[i] = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol - - # Set last array of K equal to dydt - K_view[self.rk_n_stages, i] = self.dy_new_view[i] - - # Check how well this step performed by calculating its error - if self.rk_method == 2: - # Calculate Error for DOP853 - # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale - error_norm3 = 0. - error_norm5 = 0. - for i in range(self.y_size): - for j in range(self.rk_n_stages_plus1): - if j == 0: - # Initialize - error_dot_1 = 0. - error_dot_2 = 0. - - K_scale = K_view[j, i] / self.scale_view[i] - error_dot_1 += K_scale * E3_view[j] - error_dot_2 += K_scale * E5_view[j] - - error_norm3_abs = fabs(error_dot_1) - error_norm5_abs = fabs(error_dot_2) - - error_norm3 += (error_norm3_abs * error_norm3_abs) - error_norm5 += (error_norm5_abs * error_norm5_abs) - - # Check if errors are zero - if (error_norm5 == 0.) and (error_norm3 == 0.): - error_norm = 0. - else: - error_denom = error_norm5 + 0.01 * error_norm3 - error_norm = self.step_size * error_norm5 / sqrt(error_denom * self.y_size_dbl) - - else: - # Calculate Error for RK23 and RK45 - # Dot Product (K, E) * step / scale - error_norm = 0. - for i in range(self.y_size): - for j in range(self.rk_n_stages_plus1): - if j == 0: - # Initialize - error_dot_1 = 0. - - K_scale = self.K_view[j, i] / self.scale_view[i] - error_dot_1 += K_scale * E_view[j] * step - - error_norm_abs = fabs(error_dot_1) - error_norm += (error_norm_abs * error_norm_abs) - error_norm = sqrt(error_norm) / self.y_size_sqrt - - if error_norm < 1.: - # The error is low! Let's update this step for the next time loop - if error_norm == 0.: - step_factor = MAX_FACTOR - else: - error_pow = error_norm**-self.error_expo - step_factor = min(MAX_FACTOR, SAFETY * error_pow) - - if step_rejected: - # There were problems with this step size on the previous step loop. Make sure factor does - # not exasperate them. - step_factor = min(step_factor, 1.) - - self.step_size = self.step_size * step_factor - step_accepted = True - else: - error_pow = error_norm**-self.error_expo - self.step_size = self.step_size * max(MIN_FACTOR, SAFETY * error_pow) - step_rejected = True - - if step_error: - # Issue with step convergence - self.status = -1 - self.message = "Error in step size calculation:\n\tRequired step size is less than spacing between numbers." - break - elif not step_accepted: - # Issue with step convergence - self.status = -7 - self.message = "Error in step size calculation:\n\tError in step size acceptance." + # Check is error occurred during step. + if self.status != 0: break - # End of step loop. Update the _now variables - self.t_old = self.t_new - for i in range(self.y_size): - self.y_old_view[i] = self.y_new_view[i] - self.dy_old_view[i] = self.dy_new_view[i] - # Save data if self.len_t >= (self.num_concats * self.expected_size): # There is more data than we have room in our arrays. @@ -813,7 +812,6 @@ cdef class CySolver: # # Clean up output. if self.status == 1: self.success = True - self.message = "Integration completed without issue." else: self.success = False @@ -864,6 +862,23 @@ cdef class CySolver: if self.success and self.run_interpolation: self.interpolate() + # Update integration message + if self.status == 1: + self.message = "Integration completed without issue." + elif self.status == 0: + self.message = "Integration is/was ongoing (perhaps it was interrupted?)." + elif self.status == -1: + self.message = "Error in step size calculation:\n\tRequired step size is less than spacing between numbers." + elif self.status == -2: + self.message = "Maximum number of steps (set by user) exceeded during integration." + elif self.status == -3: + self.message = "Maximum number of steps (set by system architecture) exceeded during integration." + elif self.status == -6: + self.message = "Integration never started: y-size is zero." + elif self.status == -7: + self.message = "Error in step size calculation:\n\tError in step size acceptance." + + cdef void interpolate(self): """ Interpolate the results of a successful integration over the user provided time domain, `t_eval`.""" @@ -884,8 +899,8 @@ cdef class CySolver: y_result_timeslice = np.empty(self.len_t, dtype=np.float64, order='C') y_result_temp = np.empty(self.len_t_eval, dtype=np.float64, order='C') - cdef double[:, :] y_results_reduced_view - cdef double[:] y_result_timeslice_view, y_result_temp_view + cdef double[:, ::1] y_results_reduced_view + cdef double[::1] y_result_timeslice_view, y_result_temp_view y_results_reduced_view = y_results_reduced y_result_timeslice_view = y_result_timeslice y_result_temp_view = y_result_temp @@ -893,8 +908,8 @@ cdef class CySolver: # Create arrays for extra output which may or may not be required. cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_reduced cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_timeslice, extra_temp - cdef double[:, :] extra_reduced_view - cdef double[:] extra_timeslice_view, extra_temp_view + cdef double[:, ::1] extra_reduced_view + cdef double[::1] extra_timeslice_view, extra_temp_view for j in range(self.y_size): # np.interp only works on 1D arrays so we must loop through each of the y variables. @@ -993,7 +1008,7 @@ cdef class CySolver: self.reset_state() - cpdef void change_y0(self, const double[:] y0, bool_cpp_t auto_reset_state = False): + cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = False): # Check y-size information cdef Py_ssize_t y_size_new @@ -1109,13 +1124,13 @@ cdef class CySolver: cpdef void change_parameters( self, (double, double) t_span = EMPTY_T_SPAN, - const double[:] y0 = None, + const double[::1] y0 = None, tuple args = None, double rtol = NAN, double atol = NAN, double max_step_size = NAN, double first_step = NAN, - const double[:] t_eval = None, + const double[::1] t_eval = None, bool_cpp_t auto_reset_state = True, bool_cpp_t auto_solve = False): @@ -1128,12 +1143,8 @@ cdef class CySolver: if args is not None: self.change_args(args, auto_reset_state=False) - if not isnan(rtol) and not isnan(atol): + if not isnan(rtol) or not isnan(atol): self.change_tols(rtol=rtol, atol=atol, auto_reset_state=False) - elif not isnan(rtol): - self.change_tols(rtol=rtol, auto_reset_state=False) - elif not isnan(atol): - self.change_tols(atol=atol, auto_reset_state=False) if not isnan(max_step_size): self.change_max_step_size(max_step_size, auto_reset_state=False) @@ -1158,8 +1169,12 @@ cdef class CySolver: # ^ This should probably be a warning. Don't see why you'd ever want to do that. self._solve(reset=(not auto_reset_state)) + cdef void update_constants(self) noexcept nogil: + + # Nothing to update + pass - cdef void diffeq(self): + cdef void diffeq(self) noexcept nogil: # This is a template function that should be overriden by the user's subclass. # The diffeq can use live variables which are automatically updated before each call. diff --git a/Tests/Cython Class Experiments.ipynb b/Tests/Cython Class Experiments.ipynb index 6e93a5b..8cba0a4 100644 --- a/Tests/Cython Class Experiments.ipynb +++ b/Tests/Cython Class Experiments.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "968743f3", "metadata": {}, "outputs": [], @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "5c7be204", "metadata": {}, "outputs": [], @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "59a5b145", "metadata": {}, "outputs": [ @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "8c5e71aa", "metadata": {}, "outputs": [ @@ -88,10 +88,10 @@ "text": [ "Performance\n", "Cython (function)\n", - "1.29 ms ± 80 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", + "1.29 ms ± 39.6 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", "\n", "Numba\n", - "302 µs ± 54.5 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "298 µs ± 68.4 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -112,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "f1f28e08", "metadata": {}, "outputs": [ @@ -151,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "aa05194e", "metadata": {}, "outputs": [], @@ -174,7 +174,7 @@ { "cell_type": "code", "execution_count": 40, - "id": "22c6f4d0", + "id": "988b829a", "metadata": { "scrolled": false }, @@ -184,13 +184,10 @@ "output_type": "stream", "text": [ "Content of stdout:\n", - "_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cpp\r\n", + "_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cpp\r\n", "C:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cpp(20512): warning C4244: '=': conversion from 'long' to 'char', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cpp(37934): warning C4244: '=': conversion from 'long' to 'unsigned char', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cpp(37973): warning C4244: '=': conversion from 'long' to 'unsigned char', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cpp(41170): warning C4551: function call missing argument list\r\n", - " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.cp311-win_amd64.exp\r\n", + "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cpp(44377): warning C4551: function call missing argument list\r\n", + " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cp311-win_amd64.exp\r\n", "Generating code\r\n", "Finished generating code" ] @@ -203,7 +200,7 @@ "\n", "\n", " \n", - " Cython: _cython_magic_8b25b085bf2727d7c5457a82096664af430a2e06.pyx\n", + " Cython: _cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.pyx\n", " \n", - "\n", - "\n", - "

Generated by Cython 3.0.0

\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", - "

\n", - "
+001: # distutils: language = c++
\n", - "
  __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_5) < 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "
 002: # distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
\n", - "
 003: # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False
\n", - "
 004: 
\n", - "
 005: import cython
\n", - "
 006: cimport cython
\n", - "
+007: import sys
\n", - "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_sys, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_7) < 0) __PYX_ERR(0, 7, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
+008: import numpy as np
\n", - "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 009: cimport numpy as np
\n", - "
+010: np.import_array()
\n", - "
  __pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error)\n",
-       "
 011: 
\n", - "
 012: from libcpp cimport bool as bool_cpp_t
\n", - "
 013: from libc.math cimport sqrt, fabs, nextafter, fmax, fmin
\n", - "
 014: 
\n", - "
 015: from CyRK.array.interp cimport interp_array, interp_complex_array
\n", - "
 016: from CyRK.rk.rk cimport (
\n", - "
 017:     RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,
\n", - "
 018:     RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,
\n", - "
 019:     RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,
\n", - "
 020:     RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,
\n", - "
 021:     DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,
\n", - "
 022:     DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)
\n", - "
 023: 
\n", - "
 024: # # Integration Constants
\n", - "
 025: # Multiply steps computed from asymptotic behaviour of errors by this.
\n", - "
+026: cdef double SAFETY = 0.9
\n", - "
  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY = 0.9;\n",
-       "
+027: cdef double MIN_FACTOR = 0.2  # Minimum allowed decrease in a step size.
\n", - "
  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MIN_FACTOR = 0.2;\n",
-       "
+028: cdef double MAX_FACTOR = 10.  # Maximum allowed increase in a step size.
\n", - "
  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR = 10.;\n",
-       "
+029: cdef double MAX_STEP = np.inf
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_inf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 29, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_STEP = __pyx_t_10;\n",
-       "
+030: cdef double INF = np.inf
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_inf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 30, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 30, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF = __pyx_t_10;\n",
-       "
+031: cdef double EPS = np.finfo(np.float64).eps
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_finfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_eps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 31, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS = __pyx_t_10;\n",
-       "
+032: cdef double EPS_10 = EPS * 10.
\n", - "
  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS_10 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS * 10.);\n",
-       "
+033: cdef double EPS_100 = EPS * 100.
\n", - "
  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS_100 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS * 100.);\n",
-       "
+034: cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize)
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_maxsize); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE = __pyx_t_11;\n",
-       "
 035: 
\n", - "
+036: cdef double cabs(double complex value) noexcept nogil:
\n", - "
static double __pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cabs(__pyx_t_double_complex __pyx_v_value) {\n",
-       "  double __pyx_v_v_real;\n",
-       "  double __pyx_v_v_imag;\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 037:     """ Absolute value function for complex-valued inputs.
\n", - "
 038:     
\n", - "
 039:     Parameters
\n", - "
 040:     ----------
\n", - "
 041:     value : float (double complex)
\n", - "
 042:         Complex-valued number.
\n", - "
 043:          
\n", - "
 044:     Returns
\n", - "
 045:     -------
\n", - "
 046:     value_abs : float (double)
\n", - "
 047:         Absolute value of `value`.
\n", - "
 048:     """
\n", - "
 049: 
\n", - "
 050:     cdef double v_real
\n", - "
 051:     cdef double v_imag
\n", - "
+052:     v_real = value.real
\n", - "
  __pyx_t_1 = __Pyx_CREAL(__pyx_v_value);\n",
-       "  __pyx_v_v_real = __pyx_t_1;\n",
-       "
+053:     v_imag = value.imag
\n", - "
  __pyx_t_1 = __Pyx_CIMAG(__pyx_v_value);\n",
-       "  __pyx_v_v_imag = __pyx_t_1;\n",
-       "
 054: 
\n", - "
+055:     return sqrt(v_real * v_real + v_imag * v_imag)
\n", - "
  __pyx_r = sqrt(((__pyx_v_v_real * __pyx_v_v_real) + (__pyx_v_v_imag * __pyx_v_v_imag)));\n",
-       "  goto __pyx_L0;\n",
-       "
 056: 
\n", - "
 057: # Define fused type to handle both float and complex-valued versions of y and dydt.
\n", - "
 058: ctypedef fused double_numeric:
\n", - "
 059:     double
\n", - "
 060:     double complex
\n", - "
 061: 
\n", - "
 062: 
\n", - "
+063: cdef double dabs(double_numeric value) noexcept nogil:
\n", - "
static double __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(double __pyx_v_value) {\n",
-       "  double __pyx_v_result;\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static double __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_t_double_complex __pyx_v_value) {\n",
-       "  double __pyx_v_result;\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 064:     """ Absolute value function for either float or complex-valued inputs.
\n", - "
 065:     
\n", - "
 066:     Checks the type of value and either utilizes `cabs` (for double complex) or `fabs` (for floats).
\n", - "
 067:     
\n", - "
 068:     Parameters
\n", - "
 069:     ----------
\n", - "
 070:     value : float (double_numeric)
\n", - "
 071:         Float or complex-valued number.
\n", - "
 072: 
\n", - "
 073:     Returns
\n", - "
 074:     -------
\n", - "
 075:     value_abs : float (double)
\n", - "
 076:         Absolute value of `value`.
\n", - "
 077:     """
\n", - "
 078:     cdef double result
\n", - "
 079: 
\n", - "
 080:     # Check the type of value
\n", - "
 081:     if double_numeric is cython.doublecomplex:
\n", - "
+082:         result = cabs(value)
\n", - "
  __pyx_v_result = __pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cabs(__pyx_v_value);\n",
-       "
 083:     else:
\n", - "
+084:         result = fabs(value)
\n", - "
  __pyx_v_result = fabs(__pyx_v_value);\n",
-       "
+085:     return result
\n", - "
  __pyx_r = __pyx_v_result;\n",
-       "  goto __pyx_L0;\n",
-       "/* … */\n",
-       "  __pyx_r = __pyx_v_result;\n",
-       "  goto __pyx_L0;\n",
-       "
 086: 
\n", - "
+087: @cython.wraparound(False)
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_1cyrk_ode_2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "PyDoc_STRVAR(__pyx_doc_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cyrk_ode_2, \" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\\n\\n    Parameters\\n    ----------\\n    diffeq : callable\\n        An njit-compiled function that defines the derivatives of the problem.\\n    t_span : Tuple[float, float]\\n        A tuple of the beginning and end of the integration domain's dependent variables.\\n    y0 : np.ndarray\\n        1D array of the initial values of the problem at t_span[0]\\n    args : tuple = tuple()\\n        Any additional arguments that are passed to dffeq.\\n    rtol : float = 1.e-6\\n        Integration relative tolerance used to determine optimal step size.\\n    atol : float = 1.e-8\\n        Integration absolute tolerance used to determine optimal step size.\\n    max_step_size : float = np.inf\\n        Maximum allowed step size.\\n    first_step : float = None\\n        Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\\n    rk_method : int = 1\\n        The type of RK method used for integration\\n            0 = RK23\\n            1 = RK45\\n            2 = DOP853\\n    t_eval : np.ndarray = None\\n        If provided, then the function will interpolate the integration results to provide them at the\\n            requested t-steps.\\n    capture_extra : bool = False\\n        If True, then additional output from the differential equation will be collected (but not used to determine\\n         integration error).\\n         Example:\\n            ```\\n            def diffeq(t, y, dy):\\n                a = ... some function of y and t.\\n                dy[0] = a**2 * sin(t) - y[1]\\n                dy[1] = a**3 * cos(t) + y[0]\\n\\n                # Storing extra output in dy even though it is not part of the diffeq.\\n                dy[2] = a\\n            ```\\n    num_extra : int = 0\\n        The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\\n    interpolate_extra : bool = False\\n        If True, and if `t_eval` was \"\"provided, then the integrator will interpolate the extra output values at each\\n         step in `t_eval`.\\n    expected_size : int = 0\\n        The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\\n        If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\\n        It is better to overshoot than undershoot this guess.\\n    max_steps : int = 0\\n        Maximum number of steps integrator is allowed to take.\\n        If set to 0 (the default) then an infinite number of steps are allowed.\\n\\n    Returns\\n    -------\\n    time_domain : np.ndarray\\n        The final time domain. This is equal to t_eval if it was provided.\\n    y_results : np.ndarray\\n        The solution of the differential equation provided for each time_result.\\n    success : bool\\n        Final integration success flag.\\n    message : str\\n        Any integration messages, useful if success=False.\\n\\n    \");\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_1cyrk_ode_2 = {\"cyrk_ode_2\", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_1cyrk_ode_2, METH_VARARGS|METH_KEYWORDS, __pyx_doc_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cyrk_ode_2};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_1cyrk_ode_2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  PyObject *__pyx_v_signatures = 0;\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  PyObject *__pyx_v_kwargs = 0;\n",
-       "  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;\n",
-       "  PyObject *__pyx_v__fused_sigindex = 0;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__pyx_fused_cpdef (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,&__pyx_n_s_fused_sigindex,0};\n",
-       "    PyObject* values[5] = {0,0,0,0,0};\n",
-       "    __pyx_defaults2 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self);\n",
-       "    values[4] = __pyx_dynamic_args->__pyx_arg__fused_sigindex;\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signatures)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, 1); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kwargs)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, 2); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_defaults)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, 3); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fused_sigindex);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"__pyx_fused_cpdef\") < 0)) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_signatures = values[0];\n",
-       "    __pyx_v_args = values[1];\n",
-       "    __pyx_v_kwargs = values[2];\n",
-       "    __pyx_v_defaults = values[3];\n",
-       "    __pyx_v__fused_sigindex = values[4];\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.__pyx_fused_cpdef\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cyrk_ode_2(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults, __pyx_v__fused_sigindex);\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_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cyrk_ode_2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults, PyObject *__pyx_v__fused_sigindex) {\n",
-       "  PyObject *__pyx_v_search_list = 0;\n",
-       "  PyObject *__pyx_v_sn = 0;\n",
-       "  PyObject *__pyx_v_sigindex_node = 0;\n",
-       "  PyObject *__pyx_v_dest_sig = NULL;\n",
-       "  PyTypeObject *__pyx_v_ndarray = 0;\n",
-       "  PyObject *__pyx_v_arg_as_memoryview = 0;\n",
-       "  __Pyx_memviewslice __pyx_v_memslice;\n",
-       "  Py_ssize_t __pyx_v_itemsize;\n",
-       "  CYTHON_UNUSED int __pyx_v_dtype_signed;\n",
-       "  char __pyx_v_kind;\n",
-       "  PyObject *__pyx_v_arg = NULL;\n",
-       "  PyObject *__pyx_v_dtype = NULL;\n",
-       "  PyObject *__pyx_v_arg_base = NULL;\n",
-       "  PyObject *__pyx_v_sig = NULL;\n",
-       "  PyObject *__pyx_v_sig_series = NULL;\n",
-       "  PyObject *__pyx_v_last_type = NULL;\n",
-       "  PyObject *__pyx_v_sig_type = NULL;\n",
-       "  PyObject *__pyx_v_sigindex_matches = NULL;\n",
-       "  PyObject *__pyx_v_sigindex_candidates = NULL;\n",
-       "  PyObject *__pyx_v_dst_type = NULL;\n",
-       "  PyObject *__pyx_v_found_matches = NULL;\n",
-       "  PyObject *__pyx_v_found_candidates = NULL;\n",
-       "  PyObject *__pyx_v_candidates = NULL;\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"cyrk_ode_2\", 0);\n",
-       "  __Pyx_INCREF(__pyx_v_kwargs);\n",
-       "  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);\n",
-       "  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = (__pyx_v_kwargs != Py_None);\n",
-       "  if (__pyx_t_3) {\n",
-       "  } else {\n",
-       "    __pyx_t_2 = __pyx_t_3;\n",
-       "    goto __pyx_L4_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __pyx_t_4 = (!__pyx_t_3);\n",
-       "  __pyx_t_2 = __pyx_t_4;\n",
-       "  __pyx_L4_bool_binop_done:;\n",
-       "  if (__pyx_t_2) {\n",
-       "    __Pyx_INCREF(Py_None);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);\n",
-       "  }\n",
-       "  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_v_itemsize = -1L;\n",
-       "  if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "    PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
-       "    __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __pyx_t_2 = (2 < __pyx_t_5);\n",
-       "  if (__pyx_t_2) {\n",
-       "    if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 2);\n",
-       "    __Pyx_INCREF(__pyx_t_1);\n",
-       "    __pyx_v_arg = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "  __pyx_t_4 = (__pyx_v_kwargs != Py_None);\n",
-       "  if (__pyx_t_4) {\n",
-       "  } else {\n",
-       "    __pyx_t_2 = __pyx_t_4;\n",
-       "    goto __pyx_L7_bool_binop_done;\n",
-       "  }\n",
-       "  if (unlikely(__pyx_v_kwargs == Py_None)) {\n",
-       "    PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "    __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_y0, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __pyx_t_4;\n",
-       "  __pyx_L7_bool_binop_done:;\n",
-       "  if (likely(__pyx_t_2)) {\n",
-       "    if (unlikely(__pyx_v_kwargs == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_y0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_v_arg = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "  /*else*/ {\n",
-       "    if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
-       "      __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_INCREF(__pyx_int_3);\n",
-       "    __Pyx_GIVEREF(__pyx_int_3);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);\n",
-       "    __Pyx_INCREF(__pyx_n_s_s);\n",
-       "    __Pyx_GIVEREF(__pyx_n_s_s);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_Raise(__pyx_t_6, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_L6:;\n",
-       "  while (1) {\n",
-       "    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));\n",
-       "    if (__pyx_t_2) {\n",
-       "      __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); \n",
-       "      if (__pyx_t_2) {\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_v_dtype = __pyx_t_6;\n",
-       "        __pyx_t_6 = 0;\n",
-       "        goto __pyx_L12;\n",
-       "      }\n",
-       "      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); \n",
-       "      if (__pyx_t_2) {\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_v_arg_base = __pyx_t_6;\n",
-       "        __pyx_t_6 = 0;\n",
-       "        __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); \n",
-       "        if (__pyx_t_2) {\n",
-       "          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          __pyx_v_dtype = __pyx_t_6;\n",
-       "          __pyx_t_6 = 0;\n",
-       "          goto __pyx_L13;\n",
-       "        }\n",
-       "        /*else*/ {\n",
-       "          __Pyx_INCREF(Py_None);\n",
-       "          __pyx_v_dtype = Py_None;\n",
-       "        }\n",
-       "        __pyx_L13:;\n",
-       "        goto __pyx_L12;\n",
-       "      }\n",
-       "      /*else*/ {\n",
-       "        __Pyx_INCREF(Py_None);\n",
-       "        __pyx_v_dtype = Py_None;\n",
-       "      }\n",
-       "      __pyx_L12:;\n",
-       "      __pyx_v_itemsize = -1L;\n",
-       "      __pyx_t_2 = (__pyx_v_dtype != Py_None);\n",
-       "      if (__pyx_t_2) {\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __pyx_v_itemsize = __pyx_t_5;\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __pyx_v_kind = __pyx_t_7;\n",
-       "        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');\n",
-       "        switch (__pyx_v_kind) {\n",
-       "          case 'i':\n",
-       "          case 'u':\n",
-       "          break;\n",
-       "          case 'f':\n",
-       "          __pyx_t_4 = ((sizeof(double const )) == __pyx_v_itemsize);\n",
-       "          if (__pyx_t_4) {\n",
-       "          } else {\n",
-       "            __pyx_t_2 = __pyx_t_4;\n",
-       "            goto __pyx_L16_bool_binop_done;\n",
-       "          }\n",
-       "          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1);\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          __pyx_L16_bool_binop_done:;\n",
-       "          if (__pyx_t_2) {\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "            goto __pyx_L10_break;\n",
-       "          }\n",
-       "          break;\n",
-       "          case 'c':\n",
-       "          __pyx_t_4 = ((sizeof(__pyx_t_double_complex const )) == __pyx_v_itemsize);\n",
-       "          if (__pyx_t_4) {\n",
-       "          } else {\n",
-       "            __pyx_t_2 = __pyx_t_4;\n",
-       "            goto __pyx_L19_bool_binop_done;\n",
-       "          }\n",
-       "          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1);\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          __pyx_L19_bool_binop_done:;\n",
-       "          if (__pyx_t_2) {\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_double_complex, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "            goto __pyx_L10_break;\n",
-       "          }\n",
-       "          break;\n",
-       "          case 'O':\n",
-       "          break;\n",
-       "          default: break;\n",
-       "        }\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_t_2 = (__pyx_v_arg == Py_None);\n",
-       "    if (__pyx_t_2) {\n",
-       "      if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      goto __pyx_L10_break;\n",
-       "    }\n",
-       "    {\n",
-       "      /*try:*/ {\n",
-       "        __pyx_t_6 = PyMemoryView_FromObject(__pyx_v_arg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L22_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_v_arg_as_memoryview = ((PyObject*)__pyx_t_6);\n",
-       "        __pyx_t_6 = 0;\n",
-       "      }\n",
-       "      /*else:*/ {\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == -1L);\n",
-       "        if (!__pyx_t_4) {\n",
-       "          goto __pyx_L33_next_or;\n",
-       "        } else {\n",
-       "        }\n",
-       "        __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_5 == (sizeof(double const )));\n",
-       "        if (!__pyx_t_4) {\n",
-       "        } else {\n",
-       "          goto __pyx_L32_next_and;\n",
-       "        }\n",
-       "        __pyx_L33_next_or:;\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == (sizeof(double const )));\n",
-       "        if (__pyx_t_4) {\n",
-       "        } else {\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          goto __pyx_L31_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_L32_next_and:;\n",
-       "        __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_11 == 1);\n",
-       "        __pyx_t_2 = __pyx_t_4;\n",
-       "        __pyx_L31_bool_binop_done:;\n",
-       "        if (__pyx_t_2) {\n",
-       "          __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(__pyx_v_arg_as_memoryview, 0); \n",
-       "          __pyx_v_memslice = __pyx_t_12;\n",
-       "          __pyx_t_2 = (__pyx_v_memslice.memview != 0);\n",
-       "          if (__pyx_t_2) {\n",
-       "            __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); \n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "            goto __pyx_L27_try_break;\n",
-       "          }\n",
-       "          /*else*/ {\n",
-       "            PyErr_Clear(); \n",
-       "          }\n",
-       "        }\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == -1L);\n",
-       "        if (!__pyx_t_4) {\n",
-       "          goto __pyx_L39_next_or;\n",
-       "        } else {\n",
-       "        }\n",
-       "        __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_5 == (sizeof(__pyx_t_double_complex const )));\n",
-       "        if (!__pyx_t_4) {\n",
-       "        } else {\n",
-       "          goto __pyx_L38_next_and;\n",
-       "        }\n",
-       "        __pyx_L39_next_or:;\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == (sizeof(__pyx_t_double_complex const )));\n",
-       "        if (__pyx_t_4) {\n",
-       "        } else {\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          goto __pyx_L37_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_L38_next_and:;\n",
-       "        __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_11 == 1);\n",
-       "        __pyx_t_2 = __pyx_t_4;\n",
-       "        __pyx_L37_bool_binop_done:;\n",
-       "        if (__pyx_t_2) {\n",
-       "          __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex__const__(__pyx_v_arg_as_memoryview, 0); \n",
-       "          __pyx_v_memslice = __pyx_t_12;\n",
-       "          __pyx_t_2 = (__pyx_v_memslice.memview != 0);\n",
-       "          if (__pyx_t_2) {\n",
-       "            __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); \n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_double_complex, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "            goto __pyx_L27_try_break;\n",
-       "          }\n",
-       "          /*else*/ {\n",
-       "            PyErr_Clear(); \n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;\n",
-       "      goto __pyx_L29_try_end;\n",
-       "      __pyx_L22_error:;\n",
-       "      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError);\n",
-       "      if (__pyx_t_11) {\n",
-       "        __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.__pyx_fused_cpdef\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(0, 87, __pyx_L24_except_error)\n",
-       "        __Pyx_XGOTREF(__pyx_t_6);\n",
-       "        __Pyx_XGOTREF(__pyx_t_1);\n",
-       "        __Pyx_XGOTREF(__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "        goto __pyx_L23_exception_handled;\n",
-       "      }\n",
-       "      goto __pyx_L24_except_error;\n",
-       "      __pyx_L24_except_error:;\n",
-       "      __Pyx_XGIVEREF(__pyx_t_8);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_9);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_10);\n",
-       "      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      goto __pyx_L1_error;\n",
-       "      __pyx_L27_try_break:;\n",
-       "      __Pyx_XGIVEREF(__pyx_t_8);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_9);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_10);\n",
-       "      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      goto __pyx_L10_break;\n",
-       "      __pyx_L23_exception_handled:;\n",
-       "      __Pyx_XGIVEREF(__pyx_t_8);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_9);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_10);\n",
-       "      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      __pyx_L29_try_end:;\n",
-       "    }\n",
-       "    if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    goto __pyx_L10_break;\n",
-       "  }\n",
-       "  __pyx_L10_break:;\n",
-       "  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__fused_sigindex); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __pyx_t_4 = (!__pyx_t_2);\n",
-       "  if (__pyx_t_4) {\n",
-       "    __pyx_t_5 = 0;\n",
-       "    if (unlikely(__pyx_v_signatures == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "      __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_14), (&__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_XDECREF(__pyx_t_13);\n",
-       "    __pyx_t_13 = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    while (1) {\n",
-       "      __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_13, __pyx_t_14, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_11);\n",
-       "      if (unlikely(__pyx_t_15 == 0)) break;\n",
-       "      if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);\n",
-       "      __pyx_t_1 = 0;\n",
-       "      if (!(likely(PyDict_CheckExact(__pyx_v__fused_sigindex))||((__pyx_v__fused_sigindex) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_v__fused_sigindex))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __pyx_t_1 = __pyx_v__fused_sigindex;\n",
-       "      __Pyx_INCREF(__pyx_t_1);\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_1));\n",
-       "      __pyx_t_1 = 0;\n",
-       "      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_16);\n",
-       "      __pyx_t_17 = NULL;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {\n",
-       "        __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16);\n",
-       "        if (likely(__pyx_t_17)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);\n",
-       "          __Pyx_INCREF(__pyx_t_17);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_16, function);\n",
-       "          __pyx_t_15 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_kp_s__11};\n",
-       "        __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15);\n",
-       "        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;\n",
-       "        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;\n",
-       "      }\n",
-       "      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_split); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_16);\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __pyx_t_6 = NULL;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {\n",
-       "        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_16);\n",
-       "        if (likely(__pyx_t_6)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);\n",
-       "          __Pyx_INCREF(__pyx_t_6);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_16, function);\n",
-       "          __pyx_t_15 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_kp_s__12};\n",
-       "        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15);\n",
-       "        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;\n",
-       "      }\n",
-       "      __pyx_t_16 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_16);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_18 = PyList_GET_SIZE(__pyx_t_16);\n",
-       "      if (unlikely(__pyx_t_18 < 1)) {\n",
-       "        __Pyx_RaiseNeedMoreValuesError(0+__pyx_t_18); __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      }\n",
-       "      #if CYTHON_COMPILING_IN_CPYTHON\n",
-       "      __pyx_t_6 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_18-1); \n",
-       "      ((PyVarObject*)__pyx_t_16)->ob_size--;\n",
-       "      #else\n",
-       "      __pyx_t_6 = PySequence_ITEM(__pyx_t_16, __pyx_t_18-1); \n",
-       "      #endif\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      #if !CYTHON_COMPILING_IN_CPYTHON\n",
-       "      __pyx_t_17 = PySequence_GetSlice(__pyx_t_16, 0, __pyx_t_18-1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_17);\n",
-       "      __Pyx_DECREF(__pyx_t_16);\n",
-       "      __pyx_t_16 = __pyx_t_17; __pyx_t_17 = NULL;\n",
-       "      #else\n",
-       "      CYTHON_UNUSED_VAR(__pyx_t_17);\n",
-       "      #endif\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_sig_series, ((PyObject*)__pyx_t_16));\n",
-       "      __pyx_t_16 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_last_type, __pyx_t_6);\n",
-       "      __pyx_t_6 = 0;\n",
-       "      __pyx_t_1 = __pyx_v_sig_series; __Pyx_INCREF(__pyx_t_1); __pyx_t_18 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_6); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        #endif\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_sig_type, __pyx_t_6);\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_sig_type, __pyx_v_sigindex_node, Py_NE)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        if (__pyx_t_4) {\n",
-       "          __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "            __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          }\n",
-       "          if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_sig_type, __pyx_t_6) < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_INCREF(__pyx_t_6);\n",
-       "          __Pyx_DECREF_SET(__pyx_v_sigindex_node, __pyx_t_6);\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          goto __pyx_L49;\n",
-       "        }\n",
-       "        /*else*/ {\n",
-       "          if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "            __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_sigindex_node, __pyx_v_sig_type); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_6))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_DECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_6));\n",
-       "          __pyx_t_6 = 0;\n",
-       "        }\n",
-       "        __pyx_L49:;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "        __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      }\n",
-       "      if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_last_type, __pyx_v_sig) < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    }\n",
-       "    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "  }\n",
-       "  __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_13);\n",
-       "  __pyx_v_sigindex_matches = ((PyObject*)__pyx_t_13);\n",
-       "  __pyx_t_13 = 0;\n",
-       "  __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_13);\n",
-       "  __Pyx_INCREF(__pyx_v__fused_sigindex);\n",
-       "  __Pyx_GIVEREF(__pyx_v__fused_sigindex);\n",
-       "  PyList_SET_ITEM(__pyx_t_13, 0, __pyx_v__fused_sigindex);\n",
-       "  __pyx_v_sigindex_candidates = ((PyObject*)__pyx_t_13);\n",
-       "  __pyx_t_13 = 0;\n",
-       "  __pyx_t_13 = __pyx_v_dest_sig; __Pyx_INCREF(__pyx_t_13); __pyx_t_14 = 0;\n",
-       "  for (;;) {\n",
-       "    if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_13)) break;\n",
-       "    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_14); __Pyx_INCREF(__pyx_t_1); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    #else\n",
-       "    __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    #endif\n",
-       "    __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_XDECREF_SET(__pyx_v_found_matches, ((PyObject*)__pyx_t_1));\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_XDECREF_SET(__pyx_v_found_candidates, ((PyObject*)__pyx_t_1));\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_4 = (__pyx_v_dst_type == Py_None);\n",
-       "    if (__pyx_t_4) {\n",
-       "      __pyx_t_1 = __pyx_v_sigindex_matches; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        #endif\n",
-       "        if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_6))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_6));\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "          PyErr_Format(PyExc_AttributeError, \"'NoneType' object has no attribute '%.30s'\", \"values\");\n",
-       "          __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_6 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_matches, __pyx_t_6); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_1 = __pyx_v_sigindex_candidates; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        #endif\n",
-       "        if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_6))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_6));\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "          PyErr_Format(PyExc_AttributeError, \"'NoneType' object has no attribute '%.30s'\", \"values\");\n",
-       "          __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_6 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_candidates, __pyx_t_6); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      goto __pyx_L53;\n",
-       "    }\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_INCREF(__pyx_v_sigindex_matches);\n",
-       "      __Pyx_GIVEREF(__pyx_v_sigindex_matches);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sigindex_matches);\n",
-       "      __Pyx_INCREF(__pyx_v_sigindex_candidates);\n",
-       "      __Pyx_GIVEREF(__pyx_v_sigindex_candidates);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_sigindex_candidates);\n",
-       "      __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_5 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_5 >= 2) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        #endif\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_search_list, ((PyObject*)__pyx_t_1));\n",
-       "        __pyx_t_1 = 0;\n",
-       "        if (unlikely(__pyx_v_search_list == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_1 = __pyx_v_search_list; __Pyx_INCREF(__pyx_t_1); __pyx_t_18 = 0;\n",
-       "        for (;;) {\n",
-       "          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "          __pyx_t_16 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_16); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          #else\n",
-       "          __pyx_t_16 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_16);\n",
-       "          #endif\n",
-       "          if (!(likely(PyDict_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_16))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_16));\n",
-       "          __pyx_t_16 = 0;\n",
-       "          if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "            __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_dst_type, __pyx_v_sn, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "          if (__pyx_t_4) {\n",
-       "            if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "              __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "            }\n",
-       "            __pyx_t_16 = __Pyx_PyDict_GetItem(__pyx_v_sn, __pyx_v_dst_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_16);\n",
-       "            __pyx_t_19 = __Pyx_PyList_Append(__pyx_v_found_matches, __pyx_t_16); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;\n",
-       "          }\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    }\n",
-       "    __pyx_L53:;\n",
-       "    __Pyx_INCREF(__pyx_v_found_matches);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_sigindex_matches, __pyx_v_found_matches);\n",
-       "    __Pyx_INCREF(__pyx_v_found_candidates);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_sigindex_candidates, __pyx_v_found_candidates);\n",
-       "    __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_matches) != 0);\n",
-       "    if (!__pyx_t_2) {\n",
-       "    } else {\n",
-       "      __pyx_t_4 = __pyx_t_2;\n",
-       "      goto __pyx_L68_bool_binop_done;\n",
-       "    }\n",
-       "    __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_candidates) != 0);\n",
-       "    __pyx_t_4 = __pyx_t_2;\n",
-       "    __pyx_L68_bool_binop_done:;\n",
-       "    __pyx_t_2 = (!__pyx_t_4);\n",
-       "    if (__pyx_t_2) {\n",
-       "      goto __pyx_L52_break;\n",
-       "    }\n",
-       "  }\n",
-       "  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "  goto __pyx_L70_for_end;\n",
-       "  __pyx_L52_break:;\n",
-       "  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "  goto __pyx_L70_for_end;\n",
-       "  __pyx_L70_for_end:;\n",
-       "  __Pyx_INCREF(__pyx_v_sigindex_matches);\n",
-       "  __pyx_v_candidates = __pyx_v_sigindex_matches;\n",
-       "  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);\n",
-       "  __pyx_t_4 = (!__pyx_t_2);\n",
-       "  if (unlikely(__pyx_t_4)) {\n",
-       "    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_13);\n",
-       "    __Pyx_Raise(__pyx_t_13, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "    __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_14 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __pyx_t_4 = (__pyx_t_14 > 1);\n",
-       "  if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__13);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__13);\n",
-       "    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_13);\n",
-       "    __Pyx_Raise(__pyx_t_13, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "    __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  }\n",
-       "  /*else*/ {\n",
-       "    __Pyx_XDECREF(__pyx_r);\n",
-       "    if (unlikely(__pyx_v_signatures == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_13);\n",
-       "    __pyx_r = __pyx_t_13;\n",
-       "    __pyx_t_13 = 0;\n",
-       "    goto __pyx_L0;\n",
-       "  }\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_13);\n",
-       "  __Pyx_XDECREF(__pyx_t_16);\n",
-       "  __Pyx_XDECREF(__pyx_t_17);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.__pyx_fused_cpdef\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_XDECREF(__pyx_v_search_list);\n",
-       "  __Pyx_XDECREF(__pyx_v_sn);\n",
-       "  __Pyx_XDECREF(__pyx_v_sigindex_node);\n",
-       "  __Pyx_XDECREF(__pyx_v_dest_sig);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_ndarray);\n",
-       "  __Pyx_XDECREF(__pyx_v_arg_as_memoryview);\n",
-       "  __Pyx_XDECREF(__pyx_v_arg);\n",
-       "  __Pyx_XDECREF(__pyx_v_dtype);\n",
-       "  __Pyx_XDECREF(__pyx_v_arg_base);\n",
-       "  __Pyx_XDECREF(__pyx_v_sig);\n",
-       "  __Pyx_XDECREF(__pyx_v_sig_series);\n",
-       "  __Pyx_XDECREF(__pyx_v_last_type);\n",
-       "  __Pyx_XDECREF(__pyx_v_sig_type);\n",
-       "  __Pyx_XDECREF(__pyx_v_sigindex_matches);\n",
-       "  __Pyx_XDECREF(__pyx_v_sigindex_candidates);\n",
-       "  __Pyx_XDECREF(__pyx_v_dst_type);\n",
-       "  __Pyx_XDECREF(__pyx_v_found_matches);\n",
-       "  __Pyx_XDECREF(__pyx_v_found_candidates);\n",
-       "  __Pyx_XDECREF(__pyx_v_candidates);\n",
-       "  __Pyx_XDECREF(__pyx_v_kwargs);\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_16__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__defaults__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_rtol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_atol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_max_step_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_first_step); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = __Pyx_PyInt_From_unsigned_char(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_rk_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_6 = __pyx_memoryview_fromslice(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_7 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_capture_extra); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_8 = PyInt_FromSsize_t(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_num_extra); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_9 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_interpolate_extra); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_10 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_expected_size); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_10);\n",
-       "  __pyx_t_11 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_max_steps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_11);\n",
-       "  __pyx_t_12 = PyTuple_New(12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_12);\n",
-       "  __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_args);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 0, __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_3);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_6);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 6, __pyx_t_6);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 7, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 8, __pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 9, __pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_10);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 10, __pyx_t_10);\n",
-       "  __Pyx_GIVEREF(__pyx_t_11);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 11, __pyx_t_11);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_3 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_10 = 0;\n",
-       "  __pyx_t_11 = 0;\n",
-       "  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_11);\n",
-       "  __Pyx_GIVEREF(__pyx_t_12);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 1, Py_None);\n",
-       "  __pyx_t_12 = 0;\n",
-       "  __pyx_r = __pyx_t_11;\n",
-       "  __pyx_t_11 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __Pyx_XDECREF(__pyx_t_10);\n",
-       "  __Pyx_XDECREF(__pyx_t_11);\n",
-       "  __Pyx_XDECREF(__pyx_t_12);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.__defaults__\", __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",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_fuse_0__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_3cyrk_ode_2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "static PyMethodDef __pyx_fuse_0__pyx_mdef_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_3cyrk_ode_2 = {\"__pyx_fuse_0cyrk_ode_2\", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_3cyrk_ode_2, METH_VARARGS|METH_KEYWORDS, __pyx_doc_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cyrk_ode_2};\n",
-       "static PyObject *__pyx_fuse_0__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_3cyrk_ode_2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  PyObject *__pyx_v_diffeq = 0;\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  double __pyx_v_max_step_size;\n",
-       "  double __pyx_v_first_step;\n",
-       "  unsigned char __pyx_v_rk_method;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_capture_extra;\n",
-       "  Py_ssize_t __pyx_v_num_extra;\n",
-       "  bool __pyx_v_interpolate_extra;\n",
-       "  unsigned int __pyx_v_expected_size;\n",
-       "  unsigned int __pyx_v_max_steps;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"cyrk_ode_2 (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_diffeq,&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step_size,&__pyx_n_s_first_step,&__pyx_n_s_rk_method,&__pyx_n_s_t_eval,&__pyx_n_s_capture_extra,&__pyx_n_s_num_extra,&__pyx_n_s_interpolate_extra,&__pyx_n_s_expected_size,&__pyx_n_s_max_steps,0};\n",
-       "    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};\n",
-       "    __pyx_defaults5 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self);\n",
-       "    values[3] = __pyx_dynamic_args->__pyx_arg_args;\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_diffeq)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 15, 1); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 15, 2); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
-       "          if (value) { values[3] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[5] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size);\n",
-       "          if (value) { values[6] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
-       "          if (value) { values[7] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rk_method);\n",
-       "          if (value) { values[8] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
-       "          if (value) { values[9] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_capture_extra);\n",
-       "          if (value) { values[10] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_extra);\n",
-       "          if (value) { values[11] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interpolate_extra);\n",
-       "          if (value) { values[12] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expected_size);\n",
-       "          if (value) { values[13] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_steps);\n",
-       "          if (value) { values[14] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"cyrk_ode_2\") < 0)) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_diffeq = values[0];\n",
-       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error)\n",
-       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(values[2], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 94, __pyx_L3_error)\n",
-       "    __pyx_v_args = ((PyObject*)values[3]);\n",
-       "    if (values[4]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = __pyx_dynamic_args->__pyx_arg_rtol;\n",
-       "    }\n",
-       "    if (values[5]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = __pyx_dynamic_args->__pyx_arg_atol;\n",
-       "    }\n",
-       "    if (values[6]) {\n",
-       "      __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_step_size = __pyx_dynamic_args->__pyx_arg_max_step_size;\n",
-       "    }\n",
-       "    if (values[7]) {\n",
-       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_first_step = __pyx_dynamic_args->__pyx_arg_first_step;\n",
-       "    }\n",
-       "    if (values[8]) {\n",
-       "      __pyx_v_rk_method = __Pyx_PyInt_As_unsigned_char(values[8]); if (unlikely((__pyx_v_rk_method == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rk_method = __pyx_dynamic_args->__pyx_arg_rk_method;\n",
-       "    }\n",
-       "    if (values[9]) {\n",
-       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 101, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_eval = __pyx_dynamic_args->__pyx_arg_t_eval;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "    }\n",
-       "    if (values[10]) {\n",
-       "      __pyx_v_capture_extra = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_capture_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_capture_extra = __pyx_dynamic_args->__pyx_arg_capture_extra;\n",
-       "    }\n",
-       "    if (values[11]) {\n",
-       "      __pyx_v_num_extra = __Pyx_PyIndex_AsSsize_t(values[11]); if (unlikely((__pyx_v_num_extra == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_num_extra = __pyx_dynamic_args->__pyx_arg_num_extra;\n",
-       "    }\n",
-       "    if (values[12]) {\n",
-       "      __pyx_v_interpolate_extra = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_interpolate_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_interpolate_extra = __pyx_dynamic_args->__pyx_arg_interpolate_extra;\n",
-       "    }\n",
-       "    if (values[13]) {\n",
-       "      __pyx_v_expected_size = __Pyx_PyInt_As_unsigned_int(values[13]); if (unlikely((__pyx_v_expected_size == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_expected_size = __pyx_dynamic_args->__pyx_arg_expected_size;\n",
-       "    }\n",
-       "    if (values[14]) {\n",
-       "      __pyx_v_max_steps = __Pyx_PyInt_As_unsigned_int(values[14]); if (unlikely((__pyx_v_max_steps == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_steps = __pyx_dynamic_args->__pyx_arg_max_steps;\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 15, __pyx_nargs); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.cyrk_ode_2\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 95, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_2cyrk_ode_2(__pyx_self, __pyx_v_diffeq, __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step_size, __pyx_v_first_step, __pyx_v_rk_method, __pyx_v_t_eval, __pyx_v_capture_extra, __pyx_v_num_extra, __pyx_v_interpolate_extra, __pyx_v_expected_size, __pyx_v_max_steps);\n",
-       "  int __pyx_lineno = 0;\n",
-       "  const char *__pyx_filename = NULL;\n",
-       "  int __pyx_clineno = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_2cyrk_ode_2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_diffeq, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step_size, double __pyx_v_first_step, unsigned char __pyx_v_rk_method, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_capture_extra, Py_ssize_t __pyx_v_num_extra, bool __pyx_v_interpolate_extra, unsigned int __pyx_v_expected_size, unsigned int __pyx_v_max_steps) {\n",
-       "  Py_ssize_t __pyx_v_s;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  char __pyx_v_status;\n",
-       "  char __pyx_v_old_status;\n",
-       "  PyObject *__pyx_v_message = 0;\n",
-       "  Py_ssize_t __pyx_v_y_size;\n",
-       "  double __pyx_v_y_size_dbl;\n",
-       "  double __pyx_v_y_size_sqrt;\n",
-       "  CYTHON_UNUSED bool __pyx_v_y_is_complex;\n",
-       "  PyObject *__pyx_v_DTYPE = NULL;\n",
-       "  double __pyx_v_t_start;\n",
-       "  double __pyx_v_t_end;\n",
-       "  double __pyx_v_t_delta;\n",
-       "  double __pyx_v_t_delta_check;\n",
-       "  double __pyx_v_t_delta_abs;\n",
-       "  double __pyx_v_direction_inf;\n",
-       "  double __pyx_v_t_old;\n",
-       "  double __pyx_v_t_new;\n",
-       "  double __pyx_v_time_;\n",
-       "  bool __pyx_v_direction_flag;\n",
-       "  Py_ssize_t __pyx_v_len_teval;\n",
-       "  bool __pyx_v_use_args;\n",
-       "  bool __pyx_v_success;\n",
-       "  bool __pyx_v_step_accepted;\n",
-       "  bool __pyx_v_step_rejected;\n",
-       "  bool __pyx_v_step_error;\n",
-       "  bool __pyx_v_run_interpolation;\n",
-       "  bool __pyx_v_store_extras_during_integration;\n",
-       "  Py_ssize_t __pyx_v_max_steps_touse;\n",
-       "  bool __pyx_v_use_max_steps;\n",
-       "  double __pyx_v_temp_expected_size;\n",
-       "  Py_ssize_t __pyx_v_expected_size_to_use;\n",
-       "  Py_ssize_t __pyx_v_num_concats;\n",
-       "  PyObject *__pyx_v_y_new = NULL;\n",
-       "  PyObject *__pyx_v_y_old = NULL;\n",
-       "  PyObject *__pyx_v_dydt_new = NULL;\n",
-       "  PyObject *__pyx_v_dydt_old = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  double __pyx_v_y_value;\n",
-       "  Py_ssize_t __pyx_v_extra_start;\n",
-       "  Py_ssize_t __pyx_v_total_size;\n",
-       "  Py_ssize_t __pyx_v_store_loop_size;\n",
-       "  PyObject *__pyx_v_diffeq_out = NULL;\n",
-       "  PyObject *__pyx_v_y0_plus_extra = NULL;\n",
-       "  PyObject *__pyx_v_extra_result = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_diffeq_out_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y0_plus_extra_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_result_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y0_to_store = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y0_to_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  CYTHON_UNUSED unsigned char __pyx_v_rk_order;\n",
-       "  unsigned char __pyx_v_error_order;\n",
-       "  Py_ssize_t __pyx_v_rk_n_stages;\n",
-       "  Py_ssize_t __pyx_v_rk_n_stages_plus1;\n",
-       "  CYTHON_UNUSED Py_ssize_t __pyx_v_rk_n_stages_extended;\n",
-       "  Py_ssize_t __pyx_v_len_C;\n",
-       "  Py_ssize_t __pyx_v_len_B;\n",
-       "  Py_ssize_t __pyx_v_len_E;\n",
-       "  Py_ssize_t __pyx_v_len_E3;\n",
-       "  Py_ssize_t __pyx_v_len_E5;\n",
-       "  Py_ssize_t __pyx_v_len_A0;\n",
-       "  Py_ssize_t __pyx_v_len_A1;\n",
-       "  double __pyx_v_error_pow;\n",
-       "  double __pyx_v_error_expo;\n",
-       "  double __pyx_v_error_norm5;\n",
-       "  double __pyx_v_error_norm3;\n",
-       "  double __pyx_v_error_norm;\n",
-       "  double __pyx_v_error_norm_abs;\n",
-       "  double __pyx_v_error_norm3_abs;\n",
-       "  double __pyx_v_error_norm5_abs;\n",
-       "  double __pyx_v_error_denom;\n",
-       "  PyObject *__pyx_v_A = NULL;\n",
-       "  PyObject *__pyx_v_B = NULL;\n",
-       "  PyObject *__pyx_v_C = NULL;\n",
-       "  PyObject *__pyx_v_E = NULL;\n",
-       "  PyObject *__pyx_v_E3 = NULL;\n",
-       "  PyObject *__pyx_v_E5 = NULL;\n",
-       "  PyObject *__pyx_v_K = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_B_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E3_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E5_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_A_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_K_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  double __pyx_v_error_dot_1;\n",
-       "  double __pyx_v_error_dot_2;\n",
-       "  __Pyx_memviewslice __pyx_v_C_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_y_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_t_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y_results_array = NULL;\n",
-       "  PyObject *__pyx_v_time_domain_array = NULL;\n",
-       "  PyArrayObject *__pyx_v_scale_arr = 0;\n",
-       "  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_scale_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  double __pyx_v_scale;\n",
-       "  double __pyx_v_step_size;\n",
-       "  double __pyx_v_d0;\n",
-       "  double __pyx_v_d1;\n",
-       "  double __pyx_v_d2;\n",
-       "  double __pyx_v_d0_abs;\n",
-       "  double __pyx_v_d1_abs;\n",
-       "  double __pyx_v_d2_abs;\n",
-       "  double __pyx_v_h0;\n",
-       "  double __pyx_v_h1;\n",
-       "  double __pyx_v_h0_direction;\n",
-       "  double __pyx_v_min_step;\n",
-       "  double __pyx_v_step_factor;\n",
-       "  double __pyx_v_step;\n",
-       "  double __pyx_v_c;\n",
-       "  double __pyx_v_K_scale;\n",
-       "  Py_ssize_t __pyx_v_len_t;\n",
-       "  Py_ssize_t __pyx_v_new_size;\n",
-       "  PyObject *__pyx_v_time_domain_array_new = NULL;\n",
-       "  PyObject *__pyx_v_y_results_array_new = NULL;\n",
-       "  PyObject *__pyx_v_solution_y = NULL;\n",
-       "  PyObject *__pyx_v_solution_t = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_reduced_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_result_timeslice_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_result_temp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_interp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y_results_reduced = NULL;\n",
-       "  PyObject *__pyx_v_y_result_timeslice = NULL;\n",
-       "  PyObject *__pyx_v_y_result_temp = NULL;\n",
-       "  PyObject *__pyx_v_y_interp = NULL;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_scale_arr;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_scale_arr;\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__pyx_fuse_0cyrk_ode_2\", 0);\n",
-       "  __pyx_pybuffer_scale_arr.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_scale_arr.refcount = 0;\n",
-       "  __pyx_pybuffernd_scale_arr.data = NULL;\n",
-       "  __pyx_pybuffernd_scale_arr.rcbuffer = &__pyx_pybuffer_scale_arr;\n",
-       "  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__14);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__14);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
-       "  __Pyx_XDECREF(__pyx_t_15);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.cyrk_ode_2\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = NULL;\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF(__pyx_v_message);\n",
-       "  __Pyx_XDECREF(__pyx_v_DTYPE);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_old);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_old);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_old_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_old_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_diffeq_out);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_plus_extra);\n",
-       "  __Pyx_XDECREF(__pyx_v_extra_result);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_diffeq_out_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_plus_extra_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_result_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_to_store);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_to_store_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_A);\n",
-       "  __Pyx_XDECREF(__pyx_v_B);\n",
-       "  __Pyx_XDECREF(__pyx_v_C);\n",
-       "  __Pyx_XDECREF(__pyx_v_E);\n",
-       "  __Pyx_XDECREF(__pyx_v_E3);\n",
-       "  __Pyx_XDECREF(__pyx_v_E5);\n",
-       "  __Pyx_XDECREF(__pyx_v_K);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_B_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_K_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_C_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_scale_arr);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_scale_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_y);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_t);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_reduced_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_timeslice_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_temp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_interp_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_reduced);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_temp);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_interp);\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_18__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__defaults__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_rtol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_atol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_max_step_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_first_step); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = __Pyx_PyInt_From_unsigned_char(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_rk_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_6 = __pyx_memoryview_fromslice(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_7 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_capture_extra); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_8 = PyInt_FromSsize_t(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_num_extra); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_9 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_interpolate_extra); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_10 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_expected_size); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_10);\n",
-       "  __pyx_t_11 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_max_steps); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_11);\n",
-       "  __pyx_t_12 = PyTuple_New(12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_12);\n",
-       "  __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_args);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 0, __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_3);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_6);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 6, __pyx_t_6);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 7, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 8, __pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 9, __pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_10);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 10, __pyx_t_10);\n",
-       "  __Pyx_GIVEREF(__pyx_t_11);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_12, 11, __pyx_t_11);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_3 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_10 = 0;\n",
-       "  __pyx_t_11 = 0;\n",
-       "  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_11);\n",
-       "  __Pyx_GIVEREF(__pyx_t_12);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 1, Py_None);\n",
-       "  __pyx_t_12 = 0;\n",
-       "  __pyx_r = __pyx_t_11;\n",
-       "  __pyx_t_11 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __Pyx_XDECREF(__pyx_t_10);\n",
-       "  __Pyx_XDECREF(__pyx_t_11);\n",
-       "  __Pyx_XDECREF(__pyx_t_12);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.__defaults__\", __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",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_fuse_1__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_5cyrk_ode_2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "static PyMethodDef __pyx_fuse_1__pyx_mdef_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_5cyrk_ode_2 = {\"__pyx_fuse_1cyrk_ode_2\", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_5cyrk_ode_2, METH_VARARGS|METH_KEYWORDS, __pyx_doc_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_cyrk_ode_2};\n",
-       "static PyObject *__pyx_fuse_1__pyx_pw_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_5cyrk_ode_2(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  PyObject *__pyx_v_diffeq = 0;\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  double __pyx_v_max_step_size;\n",
-       "  double __pyx_v_first_step;\n",
-       "  unsigned char __pyx_v_rk_method;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_capture_extra;\n",
-       "  Py_ssize_t __pyx_v_num_extra;\n",
-       "  bool __pyx_v_interpolate_extra;\n",
-       "  unsigned int __pyx_v_expected_size;\n",
-       "  unsigned int __pyx_v_max_steps;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"cyrk_ode_2 (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_diffeq,&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step_size,&__pyx_n_s_first_step,&__pyx_n_s_rk_method,&__pyx_n_s_t_eval,&__pyx_n_s_capture_extra,&__pyx_n_s_num_extra,&__pyx_n_s_interpolate_extra,&__pyx_n_s_expected_size,&__pyx_n_s_max_steps,0};\n",
-       "    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};\n",
-       "    __pyx_defaults6 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self);\n",
-       "    values[3] = __pyx_dynamic_args->__pyx_arg_args;\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_diffeq)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 15, 1); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 15, 2); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
-       "          if (value) { values[3] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[5] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size);\n",
-       "          if (value) { values[6] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
-       "          if (value) { values[7] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rk_method);\n",
-       "          if (value) { values[8] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
-       "          if (value) { values[9] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_capture_extra);\n",
-       "          if (value) { values[10] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_extra);\n",
-       "          if (value) { values[11] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interpolate_extra);\n",
-       "          if (value) { values[12] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expected_size);\n",
-       "          if (value) { values[13] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_steps);\n",
-       "          if (value) { values[14] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"cyrk_ode_2\") < 0)) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_diffeq = values[0];\n",
-       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error)\n",
-       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex__const__(values[2], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 94, __pyx_L3_error)\n",
-       "    __pyx_v_args = ((PyObject*)values[3]);\n",
-       "    if (values[4]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = __pyx_dynamic_args->__pyx_arg_rtol;\n",
-       "    }\n",
-       "    if (values[5]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = __pyx_dynamic_args->__pyx_arg_atol;\n",
-       "    }\n",
-       "    if (values[6]) {\n",
-       "      __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_step_size = __pyx_dynamic_args->__pyx_arg_max_step_size;\n",
-       "    }\n",
-       "    if (values[7]) {\n",
-       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_first_step = __pyx_dynamic_args->__pyx_arg_first_step;\n",
-       "    }\n",
-       "    if (values[8]) {\n",
-       "      __pyx_v_rk_method = __Pyx_PyInt_As_unsigned_char(values[8]); if (unlikely((__pyx_v_rk_method == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rk_method = __pyx_dynamic_args->__pyx_arg_rk_method;\n",
-       "    }\n",
-       "    if (values[9]) {\n",
-       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 101, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_eval = __pyx_dynamic_args->__pyx_arg_t_eval;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "    }\n",
-       "    if (values[10]) {\n",
-       "      __pyx_v_capture_extra = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_capture_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_capture_extra = __pyx_dynamic_args->__pyx_arg_capture_extra;\n",
-       "    }\n",
-       "    if (values[11]) {\n",
-       "      __pyx_v_num_extra = __Pyx_PyIndex_AsSsize_t(values[11]); if (unlikely((__pyx_v_num_extra == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_num_extra = __pyx_dynamic_args->__pyx_arg_num_extra;\n",
-       "    }\n",
-       "    if (values[12]) {\n",
-       "      __pyx_v_interpolate_extra = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_interpolate_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_interpolate_extra = __pyx_dynamic_args->__pyx_arg_interpolate_extra;\n",
-       "    }\n",
-       "    if (values[13]) {\n",
-       "      __pyx_v_expected_size = __Pyx_PyInt_As_unsigned_int(values[13]); if (unlikely((__pyx_v_expected_size == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_expected_size = __pyx_dynamic_args->__pyx_arg_expected_size;\n",
-       "    }\n",
-       "    if (values[14]) {\n",
-       "      __pyx_v_max_steps = __Pyx_PyInt_As_unsigned_int(values[14]); if (unlikely((__pyx_v_max_steps == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_steps = __pyx_dynamic_args->__pyx_arg_max_steps;\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"cyrk_ode_2\", 0, 3, 15, __pyx_nargs); __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.cyrk_ode_2\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 95, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_4cyrk_ode_2(__pyx_self, __pyx_v_diffeq, __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step_size, __pyx_v_first_step, __pyx_v_rk_method, __pyx_v_t_eval, __pyx_v_capture_extra, __pyx_v_num_extra, __pyx_v_interpolate_extra, __pyx_v_expected_size, __pyx_v_max_steps);\n",
-       "  int __pyx_lineno = 0;\n",
-       "  const char *__pyx_filename = NULL;\n",
-       "  int __pyx_clineno = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_4cyrk_ode_2(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_diffeq, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step_size, double __pyx_v_first_step, unsigned char __pyx_v_rk_method, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_capture_extra, Py_ssize_t __pyx_v_num_extra, bool __pyx_v_interpolate_extra, unsigned int __pyx_v_expected_size, unsigned int __pyx_v_max_steps) {\n",
-       "  Py_ssize_t __pyx_v_s;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  char __pyx_v_status;\n",
-       "  char __pyx_v_old_status;\n",
-       "  PyObject *__pyx_v_message = 0;\n",
-       "  Py_ssize_t __pyx_v_y_size;\n",
-       "  double __pyx_v_y_size_dbl;\n",
-       "  double __pyx_v_y_size_sqrt;\n",
-       "  CYTHON_UNUSED bool __pyx_v_y_is_complex;\n",
-       "  PyObject *__pyx_v_DTYPE = NULL;\n",
-       "  double __pyx_v_t_start;\n",
-       "  double __pyx_v_t_end;\n",
-       "  double __pyx_v_t_delta;\n",
-       "  double __pyx_v_t_delta_check;\n",
-       "  double __pyx_v_t_delta_abs;\n",
-       "  double __pyx_v_direction_inf;\n",
-       "  double __pyx_v_t_old;\n",
-       "  double __pyx_v_t_new;\n",
-       "  double __pyx_v_time_;\n",
-       "  bool __pyx_v_direction_flag;\n",
-       "  Py_ssize_t __pyx_v_len_teval;\n",
-       "  bool __pyx_v_use_args;\n",
-       "  bool __pyx_v_success;\n",
-       "  bool __pyx_v_step_accepted;\n",
-       "  bool __pyx_v_step_rejected;\n",
-       "  bool __pyx_v_step_error;\n",
-       "  bool __pyx_v_run_interpolation;\n",
-       "  bool __pyx_v_store_extras_during_integration;\n",
-       "  Py_ssize_t __pyx_v_max_steps_touse;\n",
-       "  bool __pyx_v_use_max_steps;\n",
-       "  double __pyx_v_temp_expected_size;\n",
-       "  Py_ssize_t __pyx_v_expected_size_to_use;\n",
-       "  Py_ssize_t __pyx_v_num_concats;\n",
-       "  PyObject *__pyx_v_y_new = NULL;\n",
-       "  PyObject *__pyx_v_y_old = NULL;\n",
-       "  PyObject *__pyx_v_dydt_new = NULL;\n",
-       "  PyObject *__pyx_v_dydt_old = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __pyx_t_double_complex __pyx_v_y_value;\n",
-       "  Py_ssize_t __pyx_v_extra_start;\n",
-       "  Py_ssize_t __pyx_v_total_size;\n",
-       "  Py_ssize_t __pyx_v_store_loop_size;\n",
-       "  PyObject *__pyx_v_diffeq_out = NULL;\n",
-       "  PyObject *__pyx_v_y0_plus_extra = NULL;\n",
-       "  PyObject *__pyx_v_extra_result = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_diffeq_out_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y0_plus_extra_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_result_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y0_to_store = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y0_to_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  CYTHON_UNUSED unsigned char __pyx_v_rk_order;\n",
-       "  unsigned char __pyx_v_error_order;\n",
-       "  Py_ssize_t __pyx_v_rk_n_stages;\n",
-       "  Py_ssize_t __pyx_v_rk_n_stages_plus1;\n",
-       "  CYTHON_UNUSED Py_ssize_t __pyx_v_rk_n_stages_extended;\n",
-       "  Py_ssize_t __pyx_v_len_C;\n",
-       "  Py_ssize_t __pyx_v_len_B;\n",
-       "  Py_ssize_t __pyx_v_len_E;\n",
-       "  Py_ssize_t __pyx_v_len_E3;\n",
-       "  Py_ssize_t __pyx_v_len_E5;\n",
-       "  Py_ssize_t __pyx_v_len_A0;\n",
-       "  Py_ssize_t __pyx_v_len_A1;\n",
-       "  double __pyx_v_error_pow;\n",
-       "  double __pyx_v_error_expo;\n",
-       "  double __pyx_v_error_norm5;\n",
-       "  double __pyx_v_error_norm3;\n",
-       "  double __pyx_v_error_norm;\n",
-       "  double __pyx_v_error_norm_abs;\n",
-       "  double __pyx_v_error_norm3_abs;\n",
-       "  double __pyx_v_error_norm5_abs;\n",
-       "  double __pyx_v_error_denom;\n",
-       "  PyObject *__pyx_v_A = NULL;\n",
-       "  PyObject *__pyx_v_B = NULL;\n",
-       "  PyObject *__pyx_v_C = NULL;\n",
-       "  PyObject *__pyx_v_E = NULL;\n",
-       "  PyObject *__pyx_v_E3 = NULL;\n",
-       "  PyObject *__pyx_v_E5 = NULL;\n",
-       "  PyObject *__pyx_v_K = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_B_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E3_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E5_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_A_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_K_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __pyx_t_double_complex __pyx_v_error_dot_1;\n",
-       "  __pyx_t_double_complex __pyx_v_error_dot_2;\n",
-       "  __Pyx_memviewslice __pyx_v_C_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_y_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_t_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y_results_array = NULL;\n",
-       "  PyObject *__pyx_v_time_domain_array = NULL;\n",
-       "  PyArrayObject *__pyx_v_scale_arr = 0;\n",
-       "  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_scale_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  double __pyx_v_scale;\n",
-       "  double __pyx_v_step_size;\n",
-       "  double __pyx_v_d0;\n",
-       "  double __pyx_v_d1;\n",
-       "  double __pyx_v_d2;\n",
-       "  double __pyx_v_d0_abs;\n",
-       "  double __pyx_v_d1_abs;\n",
-       "  double __pyx_v_d2_abs;\n",
-       "  double __pyx_v_h0;\n",
-       "  double __pyx_v_h1;\n",
-       "  double __pyx_v_h0_direction;\n",
-       "  double __pyx_v_min_step;\n",
-       "  double __pyx_v_step_factor;\n",
-       "  double __pyx_v_step;\n",
-       "  double __pyx_v_c;\n",
-       "  __pyx_t_double_complex __pyx_v_K_scale;\n",
-       "  Py_ssize_t __pyx_v_len_t;\n",
-       "  Py_ssize_t __pyx_v_new_size;\n",
-       "  PyObject *__pyx_v_time_domain_array_new = NULL;\n",
-       "  PyObject *__pyx_v_y_results_array_new = NULL;\n",
-       "  PyObject *__pyx_v_solution_y = NULL;\n",
-       "  PyObject *__pyx_v_solution_t = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_reduced_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_result_timeslice_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_result_temp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_interp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y_results_reduced = NULL;\n",
-       "  PyObject *__pyx_v_y_result_timeslice = NULL;\n",
-       "  PyObject *__pyx_v_y_result_temp = NULL;\n",
-       "  PyObject *__pyx_v_y_interp = NULL;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_scale_arr;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_scale_arr;\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__pyx_fuse_1cyrk_ode_2\", 0);\n",
-       "  __pyx_pybuffer_scale_arr.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_scale_arr.refcount = 0;\n",
-       "  __pyx_pybuffernd_scale_arr.data = NULL;\n",
-       "  __pyx_pybuffernd_scale_arr.rcbuffer = &__pyx_pybuffer_scale_arr;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
-       "  __Pyx_XDECREF(__pyx_t_15);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d.cyrk_ode_2\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = NULL;\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF(__pyx_v_message);\n",
-       "  __Pyx_XDECREF(__pyx_v_DTYPE);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_old);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_old);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_old_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_old_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_diffeq_out);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_plus_extra);\n",
-       "  __Pyx_XDECREF(__pyx_v_extra_result);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_diffeq_out_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_plus_extra_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_result_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_to_store);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_to_store_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_A);\n",
-       "  __Pyx_XDECREF(__pyx_v_B);\n",
-       "  __Pyx_XDECREF(__pyx_v_C);\n",
-       "  __Pyx_XDECREF(__pyx_v_E);\n",
-       "  __Pyx_XDECREF(__pyx_v_E3);\n",
-       "  __Pyx_XDECREF(__pyx_v_E5);\n",
-       "  __Pyx_XDECREF(__pyx_v_K);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_B_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_K_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_C_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_scale_arr);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_scale_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_y);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_t);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_reduced_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_timeslice_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_temp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_interp_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_reduced);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_temp);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_interp);\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "/* … */\n",
-       "  __pyx_t_29 = PyTuple_New(12); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_29);\n",
-       "  __Pyx_INCREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 0, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 1, __pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_20);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 2, __pyx_t_20);\n",
-       "  __Pyx_GIVEREF(__pyx_t_21);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 3, __pyx_t_21);\n",
-       "  __Pyx_GIVEREF(__pyx_t_22);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 4, __pyx_t_22);\n",
-       "  __Pyx_GIVEREF(__pyx_t_23);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 5, __pyx_t_23);\n",
-       "  __Pyx_INCREF(__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 6, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_24);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 7, __pyx_t_24);\n",
-       "  __Pyx_GIVEREF(__pyx_t_25);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 8, __pyx_t_25);\n",
-       "  __Pyx_GIVEREF(__pyx_t_26);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 9, __pyx_t_26);\n",
-       "  __Pyx_GIVEREF(__pyx_t_27);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 10, __pyx_t_27);\n",
-       "  __Pyx_GIVEREF(__pyx_t_28);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_29, 11, __pyx_t_28);\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_20 = 0;\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_t_22 = 0;\n",
-       "  __pyx_t_23 = 0;\n",
-       "  __pyx_t_24 = 0;\n",
-       "  __pyx_t_25 = 0;\n",
-       "  __pyx_t_26 = 0;\n",
-       "  __pyx_t_27 = 0;\n",
-       "  __pyx_t_28 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__31 = PyTuple_Pack(148, __pyx_n_s_diffeq, __pyx_n_s_t_span, __pyx_n_s_y0, __pyx_n_s_args, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_max_step_size, __pyx_n_s_first_step, __pyx_n_s_rk_method, __pyx_n_s_t_eval, __pyx_n_s_capture_extra, __pyx_n_s_num_extra, __pyx_n_s_interpolate_extra, __pyx_n_s_expected_size, __pyx_n_s_max_steps, __pyx_n_s_s, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_status, __pyx_n_s_old_status, __pyx_n_s_message, __pyx_n_s_y_size, __pyx_n_s_y_size_dbl, __pyx_n_s_y_size_sqrt, __pyx_n_s_y_is_complex, __pyx_n_s_DTYPE, __pyx_n_s_t_start, __pyx_n_s_t_end, __pyx_n_s_t_delta, __pyx_n_s_t_delta_check, __pyx_n_s_t_delta_abs, __pyx_n_s_direction_inf, __pyx_n_s_t_old, __pyx_n_s_t_new, __pyx_n_s_time, __pyx_n_s_direction_flag, __pyx_n_s_len_teval, __pyx_n_s_use_args, __pyx_n_s_success, __pyx_n_s_step_accepted, __pyx_n_s_step_rejected, __pyx_n_s_step_error, __pyx_n_s_run_interpolation, __pyx_n_s_store_extras_during_integration, __pyx_n_s_max_steps_touse, __pyx_n_s_use_max_steps, __pyx_n_s_temp_expected_size, __pyx_n_s_expected_size_to_use, __pyx_n_s_num_concats, __pyx_n_s_y_new, __pyx_n_s_y_old, __pyx_n_s_dydt_new, __pyx_n_s_dydt_old, __pyx_n_s_y_new_view, __pyx_n_s_y_old_view, __pyx_n_s_dydt_new_view, __pyx_n_s_dydt_old_view, __pyx_n_s_y_value, __pyx_n_s_extra_start, __pyx_n_s_total_size, __pyx_n_s_store_loop_size, __pyx_n_s_diffeq_out, __pyx_n_s_y0_plus_extra, __pyx_n_s_extra_result, __pyx_n_s_diffeq_out_view, __pyx_n_s_y0_plus_extra_view, __pyx_n_s_extra_result_view, __pyx_n_s_y0_to_store, __pyx_n_s_y0_to_store_view, __pyx_n_s_rk_order, __pyx_n_s_error_order, __pyx_n_s_rk_n_stages, __pyx_n_s_rk_n_stages_plus1, __pyx_n_s_rk_n_stages_extended, __pyx_n_s_len_C, __pyx_n_s_len_B, __pyx_n_s_len_E, __pyx_n_s_len_E3, __pyx_n_s_len_E5, __pyx_n_s_len_A0, __pyx_n_s_len_A1, __pyx_n_s_error_pow, __pyx_n_s_error_expo, __pyx_n_s_error_norm5, __pyx_n_s_error_norm3, __pyx_n_s_error_norm, __pyx_n_s_error_norm_abs, __pyx_n_s_error_norm3_abs, __pyx_n_s_error_norm5_abs, __pyx_n_s_error_denom, __pyx_n_s_A, __pyx_n_s_B, __pyx_n_s_C, __pyx_n_s_E, __pyx_n_s_E3, __pyx_n_s_E5, __pyx_n_s_K, __pyx_n_s_B_view, __pyx_n_s_E_view, __pyx_n_s_E3_view, __pyx_n_s_E5_view, __pyx_n_s_A_view, __pyx_n_s_K_view, __pyx_n_s_A_at_sj, __pyx_n_s_B_at_j, __pyx_n_s_error_dot_1, __pyx_n_s_error_dot_2, __pyx_n_s_C_view, __pyx_n_s_y_results_array_view, __pyx_n_s_y_results_array_new_view, __pyx_n_s_solution_y_view, __pyx_n_s_time_domain_array_view, __pyx_n_s_time_domain_array_new_view, __pyx_n_s_solution_t_view, __pyx_n_s_y_results_array, __pyx_n_s_time_domain_array, __pyx_n_s_scale_arr, __pyx_n_s_scale_view, __pyx_n_s_scale, __pyx_n_s_step_size, __pyx_n_s_d0, __pyx_n_s_d1, __pyx_n_s_d2, __pyx_n_s_d0_abs, __pyx_n_s_d1_abs, __pyx_n_s_d2_abs, __pyx_n_s_h0, __pyx_n_s_h1, __pyx_n_s_h0_direction, __pyx_n_s_min_step, __pyx_n_s_step_factor, __pyx_n_s_step, __pyx_n_s_c, __pyx_n_s_K_scale, __pyx_n_s_len_t, __pyx_n_s_new_size, __pyx_n_s_time_domain_array_new, __pyx_n_s_y_results_array_new, __pyx_n_s_solution_y, __pyx_n_s_solution_t, __pyx_n_s_y_results_reduced_view, __pyx_n_s_y_result_timeslice_view, __pyx_n_s_y_result_temp_view, __pyx_n_s_y_interp_view, __pyx_n_s_y_results_reduced, __pyx_n_s_y_result_timeslice, __pyx_n_s_y_result_temp, __pyx_n_s_y_interp); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__31);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__31);\n",
-       "  __pyx_t_28 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_28);\n",
-       "  __pyx_t_27 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_3cyrk_ode_2, 0, __pyx_n_s_cyrk_ode_2, NULL, __pyx_n_s_cython_magic_56da2061fc4785e067, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_27);\n",
-       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_27, sizeof(__pyx_defaults5), 1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_args = ((PyObject*)__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  __Pyx_INCREF(__pyx_t_7);\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_rtol = __pyx_t_10;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_atol = __pyx_t_12;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_max_step_size = __pyx_t_13;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_first_step = __pyx_t_14;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_rk_method = __pyx_t_15;\n",
-       "/* … */\n",
-       "  __pyx_t_27 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_5cyrk_ode_2, 0, __pyx_n_s_cyrk_ode_2, NULL, __pyx_n_s_cython_magic_56da2061fc4785e067, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_27);\n",
-       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_27, sizeof(__pyx_defaults6), 1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_args = ((PyObject*)__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  __Pyx_INCREF(__pyx_t_7);\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_rtol = __pyx_t_10;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_atol = __pyx_t_12;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_max_step_size = __pyx_t_13;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_first_step = __pyx_t_14;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_rk_method = __pyx_t_15;\n",
-       "/* … */\n",
-       "  __pyx_t_27 = __pyx_FusedFunction_New(&__pyx_mdef_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_1cyrk_ode_2, 0, __pyx_n_s_cyrk_ode_2, NULL, __pyx_n_s_cython_magic_56da2061fc4785e067, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_27);\n",
-       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_27, sizeof(__pyx_defaults2), 1)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __pyx_t_26 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_26);\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_t_27)->__pyx_arg__fused_sigindex = __pyx_t_26;\n",
-       "  __Pyx_GIVEREF(__pyx_t_26);\n",
-       "  __pyx_t_26 = 0;\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_27, __pyx_t_29);\n",
-       "  ((__pyx_FusedFunctionObject *) __pyx_t_27)->__signatures__ = __pyx_t_28;\n",
-       "  __Pyx_GIVEREF(__pyx_t_28);\n",
-       "  __pyx_t_28 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cyrk_ode_2, __pyx_t_27) < 0) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "
 088: @cython.cdivision(True)
\n", - "
 089: @cython.initializedcheck(False)
\n", - "
 090: @cython.boundscheck(False)
\n", - "
 091: def cyrk_ode_2(
\n", - "
 092:     diffeq,
\n", - "
+093:     (double, double) t_span,
\n", - "
struct __pyx_ctuple_double__and_double {\n",
-       "  double f0;\n",
-       "  double f1;\n",
-       "};\n",
-       "
 094:     const double_numeric[:] y0,
\n", - "
+095:     tuple args = None,
\n", - "
  __pyx_t_7 = Py_None;\n",
-       "  __Pyx_INCREF(__pyx_t_7);\n",
-       "
+096:     double rtol = 1.e-6,
\n", - "
  __pyx_t_10 = 1.e-6;\n",
-       "/* … */\n",
-       "  __pyx_t_4 = PyFloat_FromDouble(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 96, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "
+097:     double atol = 1.e-8,
\n", - "
  __pyx_t_12 = 1.e-8;\n",
-       "/* … */\n",
-       "  __pyx_t_20 = PyFloat_FromDouble(__pyx_t_12); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 97, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_20);\n",
-       "
+098:     double max_step_size = MAX_STEP,
\n", - "
  __pyx_t_13 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_STEP;\n",
-       "/* … */\n",
-       "  __pyx_t_21 = PyFloat_FromDouble(__pyx_t_13); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 98, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_21);\n",
-       "
+099:     double first_step = 0.,
\n", - "
  __pyx_t_14 = 0.;\n",
-       "/* … */\n",
-       "  __pyx_t_22 = PyFloat_FromDouble(__pyx_t_14); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 99, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_22);\n",
-       "
+100:     unsigned char rk_method = 1,
\n", - "
  __pyx_t_15 = 1;\n",
-       "/* … */\n",
-       "  __pyx_t_23 = __Pyx_PyInt_From_long(__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 100, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_23);\n",
-       "
+101:     double[:] t_eval = None,
\n", - "
  __pyx_t_5 = Py_None;\n",
-       "  __Pyx_INCREF(__pyx_t_5);\n",
-       "/* … */\n",
-       "  __pyx_t_30 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_30.memview)) __PYX_ERR(0, 101, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_t_eval = __pyx_t_30;\n",
-       "  __pyx_t_30.memview = NULL;\n",
-       "  __pyx_t_30.data = NULL;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_capture_extra = __pyx_t_6;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_num_extra = __pyx_t_16;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_interpolate_extra = __pyx_t_17;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_expected_size = __pyx_t_18;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_27)->__pyx_arg_max_steps = __pyx_t_19;\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_27, __pyx_t_29);\n",
-       "  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_27, __pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_16__defaults__);\n",
-       "  if (PyDict_SetItem(__pyx_t_28, __pyx_n_s_double, __pyx_t_27) < 0) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_30 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_30.memview)) __PYX_ERR(0, 101, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_t_eval = __pyx_t_30;\n",
-       "  __pyx_t_30.memview = NULL;\n",
-       "  __pyx_t_30.data = NULL;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_capture_extra = __pyx_t_6;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_num_extra = __pyx_t_16;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_interpolate_extra = __pyx_t_17;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_expected_size = __pyx_t_18;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_27)->__pyx_arg_max_steps = __pyx_t_19;\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_27, __pyx_t_29);\n",
-       "  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_27, __pyx_pf_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_18__defaults__);\n",
-       "  if (PyDict_SetItem(__pyx_t_28, __pyx_kp_s_double_complex, __pyx_t_27) < 0) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;\n",
-       "
+102:     bool_cpp_t capture_extra = False,
\n", - "
  __pyx_t_6 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_24 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 102, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_24);\n",
-       "
+103:     Py_ssize_t num_extra = 0,
\n", - "
  __pyx_t_16 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_25 = __Pyx_PyInt_From_long(__pyx_t_16); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 103, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_25);\n",
-       "
+104:     bool_cpp_t interpolate_extra = False,
\n", - "
  __pyx_t_17 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_26 = __Pyx_PyBool_FromLong(__pyx_t_17); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 104, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_26);\n",
-       "
+105:     unsigned int expected_size = 0,
\n", - "
  __pyx_t_18 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_27 = __Pyx_PyInt_From_long(__pyx_t_18); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 105, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_27);\n",
-       "
+106:     unsigned int max_steps = 0
\n", - "
  __pyx_t_19 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_28 = __Pyx_PyInt_From_long(__pyx_t_19); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 106, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_28);\n",
-       "
 107:     ):
\n", - "
 108:     """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.
\n", - "
 109: 
\n", - "
 110:     Parameters
\n", - "
 111:     ----------
\n", - "
 112:     diffeq : callable
\n", - "
 113:         An njit-compiled function that defines the derivatives of the problem.
\n", - "
 114:     t_span : Tuple[float, float]
\n", - "
 115:         A tuple of the beginning and end of the integration domain's dependent variables.
\n", - "
 116:     y0 : np.ndarray
\n", - "
 117:         1D array of the initial values of the problem at t_span[0]
\n", - "
 118:     args : tuple = tuple()
\n", - "
 119:         Any additional arguments that are passed to dffeq.
\n", - "
 120:     rtol : float = 1.e-6
\n", - "
 121:         Integration relative tolerance used to determine optimal step size.
\n", - "
 122:     atol : float = 1.e-8
\n", - "
 123:         Integration absolute tolerance used to determine optimal step size.
\n", - "
 124:     max_step_size : float = np.inf
\n", - "
 125:         Maximum allowed step size.
\n", - "
 126:     first_step : float = None
\n", - "
 127:         Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.
\n", - "
 128:     rk_method : int = 1
\n", - "
 129:         The type of RK method used for integration
\n", - "
 130:             0 = RK23
\n", - "
 131:             1 = RK45
\n", - "
 132:             2 = DOP853
\n", - "
 133:     t_eval : np.ndarray = None
\n", - "
 134:         If provided, then the function will interpolate the integration results to provide them at the
\n", - "
 135:             requested t-steps.
\n", - "
 136:     capture_extra : bool = False
\n", - "
 137:         If True, then additional output from the differential equation will be collected (but not used to determine
\n", - "
 138:          integration error).
\n", - "
 139:          Example:
\n", - "
 140:             ```
\n", - "
 141:             def diffeq(t, y, dy):
\n", - "
 142:                 a = ... some function of y and t.
\n", - "
 143:                 dy[0] = a**2 * sin(t) - y[1]
\n", - "
 144:                 dy[1] = a**3 * cos(t) + y[0]
\n", - "
 145: 
\n", - "
 146:                 # Storing extra output in dy even though it is not part of the diffeq.
\n", - "
 147:                 dy[2] = a
\n", - "
 148:             ```
\n", - "
 149:     num_extra : int = 0
\n", - "
 150:         The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.
\n", - "
 151:     interpolate_extra : bool = False
\n", - "
 152:         If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each
\n", - "
 153:          step in `t_eval`.
\n", - "
 154:     expected_size : int = 0
\n", - "
 155:         The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.
\n", - "
 156:         If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.
\n", - "
 157:         It is better to overshoot than undershoot this guess.
\n", - "
 158:     max_steps : int = 0
\n", - "
 159:         Maximum number of steps integrator is allowed to take.
\n", - "
 160:         If set to 0 (the default) then an infinite number of steps are allowed.
\n", - "
 161: 
\n", - "
 162:     Returns
\n", - "
 163:     -------
\n", - "
 164:     time_domain : np.ndarray
\n", - "
 165:         The final time domain. This is equal to t_eval if it was provided.
\n", - "
 166:     y_results : np.ndarray
\n", - "
 167:         The solution of the differential equation provided for each time_result.
\n", - "
 168:     success : bool
\n", - "
 169:         Final integration success flag.
\n", - "
 170:     message : str
\n", - "
 171:         Any integration messages, useful if success=False.
\n", - "
 172: 
\n", - "
 173:     """
\n", - "
 174:     # Setup loop variables
\n", - "
 175:     cdef Py_ssize_t s, i, j
\n", - "
 176: 
\n", - "
 177:     # Setup integration variables
\n", - "
 178:     cdef char status, old_status
\n", - "
 179:     cdef str message
\n", - "
 180: 
\n", - "
 181:     # Determine information about the differential equation based on its initial conditions
\n", - "
 182:     cdef Py_ssize_t y_size
\n", - "
 183:     cdef double y_size_dbl, y_size_sqrt
\n", - "
 184:     cdef bool_cpp_t y_is_complex
\n", - "
+185:     y_size = y0.size
\n", - "
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 185, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_size = __pyx_t_3;\n",
-       "/* … */\n",
-       "  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get___pyx_t_double_complex__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 185, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_size = __pyx_t_3;\n",
-       "
+186:     y_is_complex = False
\n", - "
  __pyx_v_y_is_complex = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_y_is_complex = 0;\n",
-       "
+187:     y_size_dbl = <double>y_size
\n", - "
  __pyx_v_y_size_dbl = ((double)__pyx_v_y_size);\n",
-       "/* … */\n",
-       "  __pyx_v_y_size_dbl = ((double)__pyx_v_y_size);\n",
-       "
+188:     y_size_sqrt = sqrt(y_size_dbl)
\n", - "
  __pyx_v_y_size_sqrt = sqrt(__pyx_v_y_size_dbl);\n",
-       "/* … */\n",
-       "  __pyx_v_y_size_sqrt = sqrt(__pyx_v_y_size_dbl);\n",
-       "
 189: 
\n", - "
 190:     # Check the type of the values in y0
\n", - "
 191:     if double_numeric is cython.double:
\n", - "
+192:         DTYPE = np.float64
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_DTYPE = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
 193:     elif double_numeric is cython.doublecomplex:
\n", - "
+194:         DTYPE = np.complex128
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex128); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_DTYPE = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+195:         y_is_complex = True
\n", - "
  __pyx_v_y_is_complex = 1;\n",
-       "
 196:     else:
\n", - "
 197:         # Cyrk only supports float64 and complex128.
\n", - "
 198:         status = -8
\n", - "
 199:         raise Exception('Unexpected type found for initial conditions (y0).')
\n", - "
 200: 
\n", - "
 201:     # Build time domain
\n", - "
 202:     cdef double t_start, t_end, t_delta, t_delta_check, t_delta_abs, direction_inf, t_old, t_new, time_
\n", - "
 203:     cdef bool_cpp_t direction_flag
\n", - "
+204:     t_start = t_span[0]
\n", - "
  __pyx_v_t_start = __pyx_v_t_span.f0;\n",
-       "/* … */\n",
-       "  __pyx_v_t_start = __pyx_v_t_span.f0;\n",
-       "
+205:     t_end   = t_span[1]
\n", - "
  __pyx_v_t_end = __pyx_v_t_span.f1;\n",
-       "/* … */\n",
-       "  __pyx_v_t_end = __pyx_v_t_span.f1;\n",
-       "
+206:     t_delta = t_end - t_start
\n", - "
  __pyx_v_t_delta = (__pyx_v_t_end - __pyx_v_t_start);\n",
-       "/* … */\n",
-       "  __pyx_v_t_delta = (__pyx_v_t_end - __pyx_v_t_start);\n",
-       "
+207:     t_delta_abs = fabs(t_delta)
\n", - "
  __pyx_v_t_delta_abs = fabs(__pyx_v_t_delta);\n",
-       "/* … */\n",
-       "  __pyx_v_t_delta_abs = fabs(__pyx_v_t_delta);\n",
-       "
+208:     t_delta_check = t_delta_abs
\n", - "
  __pyx_v_t_delta_check = __pyx_v_t_delta_abs;\n",
-       "/* … */\n",
-       "  __pyx_v_t_delta_check = __pyx_v_t_delta_abs;\n",
-       "
+209:     if t_delta >= 0.:
\n", - "
  __pyx_t_4 = (__pyx_v_t_delta >= 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_t_delta >= 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
 210:         # Integration is moving forward in time.
\n", - "
+211:         direction_flag = True
\n", - "
    __pyx_v_direction_flag = 1;\n",
-       "/* … */\n",
-       "    __pyx_v_direction_flag = 1;\n",
-       "
+212:         direction_inf = INF
\n", - "
    __pyx_v_direction_inf = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF;\n",
-       "/* … */\n",
-       "    __pyx_v_direction_inf = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF;\n",
-       "
 213:     else:
\n", - "
 214:         # Integration is moving backwards in time.
\n", - "
+215:         direction_flag = False
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_direction_flag = 0;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_direction_flag = 0;\n",
-       "
+216:         direction_inf = -INF
\n", - "
    __pyx_v_direction_inf = (-__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF);\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "/* … */\n",
-       "    __pyx_v_direction_inf = (-__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF);\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
 217: 
\n", - "
 218:     # Pull out information on t-eval
\n", - "
 219:     cdef Py_ssize_t len_teval
\n", - "
+220:     if t_eval is None:
\n", - "
  __pyx_t_4 = (((PyObject *) __pyx_v_t_eval.memview) == Py_None);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L4;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (((PyObject *) __pyx_v_t_eval.memview) == Py_None);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L4;\n",
-       "  }\n",
-       "
+221:         len_teval = 0
\n", - "
    __pyx_v_len_teval = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_teval = 0;\n",
-       "
 222:     else:
\n", - "
+223:         len_teval = t_eval.size
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_len_teval = __pyx_t_3;\n",
-       "  }\n",
-       "  __pyx_L4:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_len_teval = __pyx_t_3;\n",
-       "  }\n",
-       "  __pyx_L4:;\n",
-       "
 224: 
\n", - "
 225:     # Pull out information on args
\n", - "
 226:     cdef bool_cpp_t use_args
\n", - "
+227:     if args is None:
\n", - "
  __pyx_t_4 = (__pyx_v_args == ((PyObject*)Py_None));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L5;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_args == ((PyObject*)Py_None));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L5;\n",
-       "  }\n",
-       "
+228:         use_args = False
\n", - "
    __pyx_v_use_args = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_use_args = 0;\n",
-       "
 229:     else:
\n", - "
+230:         use_args = True
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_use_args = 1;\n",
-       "  }\n",
-       "  __pyx_L5:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_use_args = 1;\n",
-       "  }\n",
-       "  __pyx_L5:;\n",
-       "
 231: 
\n", - "
 232:     # Set integration flags
\n", - "
 233:     cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\
\n", - "
 234:         store_extras_during_integration
\n", - "
+235:     success           = False
\n", - "
  __pyx_v_success = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_success = 0;\n",
-       "
+236:     step_accepted     = False
\n", - "
  __pyx_v_step_accepted = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_step_accepted = 0;\n",
-       "
+237:     step_rejected     = False
\n", - "
  __pyx_v_step_rejected = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_step_rejected = 0;\n",
-       "
+238:     step_error        = False
\n", - "
  __pyx_v_step_error = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_step_error = 0;\n",
-       "
+239:     run_interpolation = False
\n", - "
  __pyx_v_run_interpolation = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_run_interpolation = 0;\n",
-       "
+240:     store_extras_during_integration = capture_extra
\n", - "
  __pyx_v_store_extras_during_integration = __pyx_v_capture_extra;\n",
-       "/* … */\n",
-       "  __pyx_v_store_extras_during_integration = __pyx_v_capture_extra;\n",
-       "
+241:     if len_teval > 0:
\n", - "
  __pyx_t_4 = (__pyx_v_len_teval > 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_len_teval > 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+242:         run_interpolation = True
\n", - "
    __pyx_v_run_interpolation = 1;\n",
-       "/* … */\n",
-       "    __pyx_v_run_interpolation = 1;\n",
-       "
+243:     if run_interpolation and not interpolate_extra:
\n", - "
  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_5) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_5;\n",
-       "    goto __pyx_L8_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_5 = (!(__pyx_v_interpolate_extra != 0));\n",
-       "  __pyx_t_4 = __pyx_t_5;\n",
-       "  __pyx_L8_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_5) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_5;\n",
-       "    goto __pyx_L8_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_5 = (!(__pyx_v_interpolate_extra != 0));\n",
-       "  __pyx_t_4 = __pyx_t_5;\n",
-       "  __pyx_L8_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 244:         # If y is eventually interpolated but the extra outputs are not being interpolated, then there is
\n", - "
 245:         #  no point in storing the values during the integration. Turn off this functionality to save
\n", - "
 246:         #  on computation.
\n", - "
+247:         store_extras_during_integration = False
\n", - "
    __pyx_v_store_extras_during_integration = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_store_extras_during_integration = 0;\n",
-       "
 248: 
\n", - "
 249:     # # Determine integration parameters
\n", - "
 250:     # Check tolerances
\n", - "
+251:     if rtol < EPS_100:
\n", - "
  __pyx_t_4 = (__pyx_v_rtol < __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS_100);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_rtol < __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS_100);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+252:         rtol = EPS_100
\n", - "
    __pyx_v_rtol = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS_100;\n",
-       "/* … */\n",
-       "    __pyx_v_rtol = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_EPS_100;\n",
-       "
 253: 
\n", - "
 254:     #     atol_arr = np.asarray(atol, dtype=np.complex128)
\n", - "
 255:     #     if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:
\n", - "
 256:     #         # atol must be either the same for all y or must be provided as an array, one for each y.
\n", - "
 257:     #         raise Exception
\n", - "
 258: 
\n", - "
 259:     # Determine maximum number of steps
\n", - "
 260:     cdef Py_ssize_t max_steps_touse
\n", - "
 261:     cdef bool_cpp_t use_max_steps
\n", - "
+262:     if max_steps == 0:
\n", - "
  __pyx_t_4 = (__pyx_v_max_steps == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L11;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_max_steps == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L11;\n",
-       "  }\n",
-       "
+263:         use_max_steps = False
\n", - "
    __pyx_v_use_max_steps = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_use_max_steps = 0;\n",
-       "
+264:         max_steps_touse = 0
\n", - "
    __pyx_v_max_steps_touse = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_max_steps_touse = 0;\n",
-       "
+265:     elif max_steps < 0:
\n", - "
  __pyx_t_4 = (__pyx_v_max_steps < 0);\n",
-       "  if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_max_steps < 0);\n",
-       "  if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+266:         status = -8
\n", - "
    __pyx_v_status = -8;\n",
-       "/* … */\n",
-       "    __pyx_v_status = -8;\n",
-       "
+267:         raise AttributeError('Negative number of max steps provided.')
\n", - "
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Negative_number_of_max_steps_pro); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__15);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__15);\n",
-       "/* … */\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "
 268:     else:
\n", - "
+269:         use_max_steps = True
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_use_max_steps = 1;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_use_max_steps = 1;\n",
-       "
+270:         max_steps_touse = min(max_steps, MAX_INT_SIZE)
\n", - "
    __pyx_t_3 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE;\n",
-       "    __pyx_t_6 = __pyx_v_max_steps;\n",
-       "    if ((__pyx_t_3 < __pyx_t_6)) {\n",
-       "      __pyx_t_7 = __pyx_t_3;\n",
-       "    } else {\n",
-       "      __pyx_t_7 = __pyx_t_6;\n",
-       "    }\n",
-       "    __pyx_v_max_steps_touse = __pyx_t_7;\n",
-       "  }\n",
-       "  __pyx_L11:;\n",
-       "/* … */\n",
-       "    __pyx_t_3 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE;\n",
-       "    __pyx_t_6 = __pyx_v_max_steps;\n",
-       "    if ((__pyx_t_3 < __pyx_t_6)) {\n",
-       "      __pyx_t_7 = __pyx_t_3;\n",
-       "    } else {\n",
-       "      __pyx_t_7 = __pyx_t_6;\n",
-       "    }\n",
-       "    __pyx_v_max_steps_touse = __pyx_t_7;\n",
-       "  }\n",
-       "  __pyx_L11:;\n",
-       "
 271: 
\n", - "
 272:     # Expected size of output arrays.
\n", - "
 273:     cdef double temp_expected_size
\n", - "
 274:     cdef Py_ssize_t expected_size_to_use, num_concats
\n", - "
+275:     if expected_size == 0:
\n", - "
  __pyx_t_4 = (__pyx_v_expected_size == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L12;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_expected_size == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L12;\n",
-       "  }\n",
-       "
 276:         # CySolver will attempt to guess on a best size for the arrays.
\n", - "
+277:         temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol))
\n", - "
    __pyx_v_temp_expected_size = ((100. * __pyx_v_t_delta_abs) * fmax(1., (1.e-6 / __pyx_v_rtol)));\n",
-       "/* … */\n",
-       "    __pyx_v_temp_expected_size = ((100. * __pyx_v_t_delta_abs) * fmax(1., (1.e-6 / __pyx_v_rtol)));\n",
-       "
+278:         temp_expected_size = fmax(temp_expected_size, 100.)
\n", - "
    __pyx_v_temp_expected_size = fmax(__pyx_v_temp_expected_size, 100.);\n",
-       "/* … */\n",
-       "    __pyx_v_temp_expected_size = fmax(__pyx_v_temp_expected_size, 100.);\n",
-       "
+279:         temp_expected_size = fmin(temp_expected_size, 10_000_000.)
\n", - "
    __pyx_v_temp_expected_size = fmin(__pyx_v_temp_expected_size, 10000000.);\n",
-       "/* … */\n",
-       "    __pyx_v_temp_expected_size = fmin(__pyx_v_temp_expected_size, 10000000.);\n",
-       "
+280:         expected_size_to_use = <Py_ssize_t>temp_expected_size
\n", - "
    __pyx_v_expected_size_to_use = ((Py_ssize_t)__pyx_v_temp_expected_size);\n",
-       "/* … */\n",
-       "    __pyx_v_expected_size_to_use = ((Py_ssize_t)__pyx_v_temp_expected_size);\n",
-       "
 281:     else:
\n", - "
+282:         expected_size_to_use = <Py_ssize_t>expected_size
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_expected_size_to_use = ((Py_ssize_t)__pyx_v_expected_size);\n",
-       "  }\n",
-       "  __pyx_L12:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_expected_size_to_use = ((Py_ssize_t)__pyx_v_expected_size);\n",
-       "  }\n",
-       "  __pyx_L12:;\n",
-       "
 283:     # This variable tracks how many times the storage arrays have been appended.
\n", - "
 284:     # It starts at 1 since there is at least one storage array present.
\n", - "
+285:     num_concats = 1
\n", - "
  __pyx_v_num_concats = 1;\n",
-       "/* … */\n",
-       "  __pyx_v_num_concats = 1;\n",
-       "
 286: 
\n", - "
 287:     # Initialize arrays that are based on y's size and type.
\n", - "
+288:     y_new    = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_new = __pyx_t_9;\n",
-       "  __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_new = __pyx_t_9;\n",
-       "  __pyx_t_9 = 0;\n",
-       "
+289:     y_old    = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_v_y_old = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_v_y_old = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+290:     dydt_new = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_dydt_new = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_dydt_new = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+291:     dydt_old = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_dydt_old = __pyx_t_9;\n",
-       "  __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 291, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_dydt_old = __pyx_t_9;\n",
-       "  __pyx_t_9 = 0;\n",
-       "
 292: 
\n", - "
 293:     # Setup memory views for these arrays
\n", - "
 294:     cdef double_numeric[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view
\n", - "
+295:     y_new_view    = y_new
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 295, __pyx_L1_error)\n",
-       "  __pyx_v_y_new_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 295, __pyx_L1_error)\n",
-       "  __pyx_v_y_new_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+296:     y_old_view    = y_old
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 296, __pyx_L1_error)\n",
-       "  __pyx_v_y_old_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 296, __pyx_L1_error)\n",
-       "  __pyx_v_y_old_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+297:     dydt_new_view = dydt_new
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dydt_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 297, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_new_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_dydt_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 297, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_new_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+298:     dydt_old_view = dydt_old
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dydt_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 298, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_old_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_dydt_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 298, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_old_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
 299: 
\n", - "
 300:     # Store y0 into the y arrays
\n", - "
 301:     cdef double_numeric y_value
\n", - "
+302:     for i in range(y_size):
\n", - "
  __pyx_t_7 = __pyx_v_y_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __pyx_v_y_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+303:         y_value = y0[i]
\n", - "
    __pyx_t_12 = __pyx_v_i;\n",
-       "    __pyx_v_y_value = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    __pyx_v_y_value = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "
+304:         y_new_view[i] = y_value
\n", - "
    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "
+305:         y_old_view[i] = y_value
\n", - "
    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "  }\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "  }\n",
-       "
 306: 
\n", - "
 307:     # If extra output is true then the output of the diffeq will be larger than the size of y0.
\n", - "
 308:     # Determine that extra size by calling the diffeq and checking its size.
\n", - "
 309:     cdef Py_ssize_t extra_start, total_size, store_loop_size
\n", - "
+310:     extra_start = y_size
\n", - "
  __pyx_v_extra_start = __pyx_v_y_size;\n",
-       "/* … */\n",
-       "  __pyx_v_extra_start = __pyx_v_y_size;\n",
-       "
+311:     total_size  = y_size + num_extra
\n", - "
  __pyx_v_total_size = (__pyx_v_y_size + __pyx_v_num_extra);\n",
-       "/* … */\n",
-       "  __pyx_v_total_size = (__pyx_v_y_size + __pyx_v_num_extra);\n",
-       "
 312:     # Create arrays based on this total size
\n", - "
+313:     diffeq_out     = np.empty(total_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_v_diffeq_out = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __pyx_v_diffeq_out = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+314:     y0_plus_extra  = np.empty(total_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_y0_plus_extra = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_y0_plus_extra = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+315:     extra_result   = np.empty(num_extra, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_num_extra); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_extra_result = __pyx_t_9;\n",
-       "  __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_num_extra); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 315, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_extra_result = __pyx_t_9;\n",
-       "  __pyx_t_9 = 0;\n",
-       "
 316: 
\n", - "
 317:     # Setup memory views
\n", - "
 318:     cdef double_numeric[:] diffeq_out_view, y0_plus_extra_view, extra_result_view
\n", - "
+319:     diffeq_out_view     = diffeq_out
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_diffeq_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 319, __pyx_L1_error)\n",
-       "  __pyx_v_diffeq_out_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_diffeq_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 319, __pyx_L1_error)\n",
-       "  __pyx_v_diffeq_out_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+320:     y0_plus_extra_view  = y0_plus_extra
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y0_plus_extra, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __pyx_v_y0_plus_extra_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y0_plus_extra, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __pyx_v_y0_plus_extra_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+321:     extra_result_view   = extra_result
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_extra_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 321, __pyx_L1_error)\n",
-       "  __pyx_v_extra_result_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_extra_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 321, __pyx_L1_error)\n",
-       "  __pyx_v_extra_result_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
 322: 
\n", - "
 323:     # Capture the extra output for the initial condition.
\n", - "
+324:     if capture_extra:
\n", - "
  __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L15;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L15;\n",
-       "  }\n",
-       "
+325:         if use_args:
\n", - "
    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L16;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L16;\n",
-       "    }\n",
-       "
+326:             diffeq(t_start, y_new, diffeq_out, *args)
\n", - "
      __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_9);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_9 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "      __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_9);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_9 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "
 327:         else:
\n", - "
+328:             diffeq(t_start, y_new, diffeq_out)
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 328, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_8 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
-       "        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);\n",
-       "        if (likely(__pyx_t_1)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
-       "          __Pyx_INCREF(__pyx_t_1);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_8, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_9, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 328, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    }\n",
-       "    __pyx_L16:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 328, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_8 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
-       "        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);\n",
-       "        if (likely(__pyx_t_1)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
-       "          __Pyx_INCREF(__pyx_t_1);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_8, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_9, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 328, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    }\n",
-       "    __pyx_L16:;\n",
-       "
 329: 
\n", - "
 330:         # Extract the extra output from the function output.
\n", - "
+331:         for i in range(total_size):
\n", - "
    __pyx_t_7 = __pyx_v_total_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_total_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+332:             if i < extra_start:
\n", - "
      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L19;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L19;\n",
-       "      }\n",
-       "
 333:                 # Pull from y0
\n", - "
+334:                 y0_plus_extra_view[i] = y0[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "
 335:             else:
\n", - "
 336:                 # Pull from extra output
\n", - "
+337:                 y0_plus_extra_view[i] = diffeq_out_view[i]
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L19:;\n",
-       "    }\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L19:;\n",
-       "    }\n",
-       "
+338:         if store_extras_during_integration:
\n", - "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L20;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L20;\n",
-       "    }\n",
-       "
+339:             store_loop_size = total_size
\n", - "
      __pyx_v_store_loop_size = __pyx_v_total_size;\n",
-       "/* … */\n",
-       "      __pyx_v_store_loop_size = __pyx_v_total_size;\n",
-       "
 340:         else:
\n", - "
+341:             store_loop_size = y_size
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "    }\n",
-       "    __pyx_L20:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "    }\n",
-       "    __pyx_L20:;\n",
-       "
 342:     else:
\n", - "
 343:         # No extra output
\n", - "
+344:         store_loop_size = y_size
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "  }\n",
-       "  __pyx_L15:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "  }\n",
-       "  __pyx_L15:;\n",
-       "
 345: 
\n", - "
+346:     y0_to_store = np.empty(store_loop_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y0_to_store = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y0_to_store = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
 347:     cdef double_numeric[:] y0_to_store_view
\n", - "
+348:     y0_to_store_view = y0_to_store
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y0_to_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
-       "  __pyx_v_y0_to_store_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y0_to_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 348, __pyx_L1_error)\n",
-       "  __pyx_v_y0_to_store_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+349:     for i in range(store_loop_size):
\n", - "
  __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+350:         if store_extras_during_integration:
\n", - "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L23;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L23;\n",
-       "    }\n",
-       "
+351:             y0_to_store_view[i] = y0_plus_extra_view[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "
 352:         else:
\n", - "
+353:             y0_to_store_view[i] = y0[i]
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "    }\n",
-       "    __pyx_L23:;\n",
-       "  }\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "    }\n",
-       "    __pyx_L23:;\n",
-       "  }\n",
-       "
 354: 
\n", - "
 355:     # # Determine RK scheme
\n", - "
 356:     cdef unsigned char rk_order, error_order
\n", - "
 357:     cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended
\n", - "
 358:     cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1
\n", - "
 359:     cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom
\n", - "
 360: 
\n", - "
+361:     if rk_method == 0:
\n", - "
  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "
 362:         # RK23 Method
\n", - "
+363:         rk_order    = RK23_order
\n", - "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
-       "
+364:         error_order = RK23_error_order
\n", - "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
-       "/* … */\n",
-       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
-       "
+365:         rk_n_stages = RK23_n_stages
\n", - "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
-       "
+366:         len_C       = RK23_LEN_C
\n", - "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
-       "/* … */\n",
-       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
-       "
+367:         len_B       = RK23_LEN_B
\n", - "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
-       "/* … */\n",
-       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
-       "
+368:         len_E       = RK23_LEN_E
\n", - "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
-       "
+369:         len_E3      = RK23_LEN_E3
\n", - "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
-       "
+370:         len_E5      = RK23_LEN_E5
\n", - "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
-       "
+371:         len_A0      = RK23_LEN_A0
\n", - "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
-       "
+372:         len_A1      = RK23_LEN_A1
\n", - "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
-       "
+373:     elif rk_method == 1:
\n", - "
    break;\n",
-       "    case 2:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 2:\n",
-       "
 374:         # RK45 Method
\n", - "
+375:         rk_order    = RK45_order
\n", - "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
-       "
+376:         error_order = RK45_error_order
\n", - "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
-       "/* … */\n",
-       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
-       "
+377:         rk_n_stages = RK45_n_stages
\n", - "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
-       "
+378:         len_C       = RK45_LEN_C
\n", - "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
-       "/* … */\n",
-       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
-       "
+379:         len_B       = RK45_LEN_B
\n", - "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
-       "/* … */\n",
-       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
-       "
+380:         len_E       = RK45_LEN_E
\n", - "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
-       "
+381:         len_E3      = RK45_LEN_E3
\n", - "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
-       "
+382:         len_E5      = RK45_LEN_E5
\n", - "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
-       "
+383:         len_A0      = RK45_LEN_A0
\n", - "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
-       "
+384:         len_A1      = RK45_LEN_A1
\n", - "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
-       "
+385:     elif rk_method == 2:
\n", - "
    break;\n",
-       "    default:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    default:\n",
-       "
 386:         # DOP853 Method
\n", - "
+387:         rk_order    = DOP_order
\n", - "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
-       "
+388:         error_order = DOP_error_order
\n", - "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
-       "/* … */\n",
-       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
-       "
+389:         rk_n_stages = DOP_n_stages
\n", - "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
-       "
+390:         len_C       = DOP_LEN_C
\n", - "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
-       "/* … */\n",
-       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
-       "
+391:         len_B       = DOP_LEN_B
\n", - "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
-       "/* … */\n",
-       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
-       "
+392:         len_E       = DOP_LEN_E
\n", - "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
-       "
+393:         len_E3      = DOP_LEN_E3
\n", - "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
-       "
+394:         len_E5      = DOP_LEN_E5
\n", - "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
-       "
+395:         len_A0      = DOP_LEN_A0
\n", - "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
-       "
+396:         len_A1      = DOP_LEN_A1
\n", - "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
-       "
 397: 
\n", - "
+398:         rk_n_stages_extended = DOP_n_stages_extended
\n", - "
    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
-       "
 399:     else:
\n", - "
+400:         status = -8
\n", - "
    __pyx_v_status = -8;\n",
-       "/* … */\n",
-       "    __pyx_v_status = -8;\n",
-       "
+401:         raise AttributeError(
\n", - "
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __PYX_ERR(0, 401, __pyx_L1_error)\n",
-       "    break;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Unexpected_rk_method_provided_Cu); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 401, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__16);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__16);\n",
-       "/* … */\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __PYX_ERR(0, 401, __pyx_L1_error)\n",
-       "    break;\n",
-       "  }\n",
-       "
 402:             'Unexpected rk_method provided. Currently supported versions are:\\n'
\n", - "
 403:             '\\t0 = RK23\\n'
\n", - "
 404:             '\\t1 = RK34\\n'
\n", - "
 405:             '\\t2 = DOP853')
\n", - "
 406: 
\n", - "
+407:     rk_n_stages_plus1 = rk_n_stages + 1
\n", - "
  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
-       "/* … */\n",
-       "  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
-       "
+408:     error_expo = 1. / (<double>error_order + 1.)
\n", - "
  __pyx_v_error_expo = (1. / (((double)__pyx_v_error_order) + 1.));\n",
-       "/* … */\n",
-       "  __pyx_v_error_expo = (1. / (((double)__pyx_v_error_order) + 1.));\n",
-       "
 409: 
\n", - "
 410:     # Build RK Arrays. Note that all are 1D except for A and K.
\n", - "
+411:     A      = np.empty((len_A0, len_A1), dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __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_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_A0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_A1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_A = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __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_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_A0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_A1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_A = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+412:     B      = np.empty(len_B, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_B); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_B = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_B); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_B = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+413:     C      = np.empty(len_C, dtype=np.float64, order='C')  # C is always float no matter what y0 is.
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_C); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_C = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_C); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 413, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_C = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
+414:     E      = np.empty(len_E, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_E); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_v_E = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_E); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_v_E = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+415:     E3     = np.empty(len_E3, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_E3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_E3 = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_len_E3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_E3 = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+416:     E5     = np.empty(len_E5, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_E5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_E5 = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_E5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 416, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_E5 = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
+417:     K      = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C')  # It is important K be initialized with 0s
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_K = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_9);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_K = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
 418: 
\n", - "
 419:     # Setup memory views.
\n", - "
 420:     cdef double_numeric[:] B_view, E_view, E3_view, E5_view
\n", - "
 421:     cdef double_numeric[:, :] A_view, K_view
\n", - "
 422:     cdef double_numeric A_at_sj, B_at_j, error_dot_1, error_dot_2
\n", - "
 423:     cdef double[:] C_view
\n", - "
+424:     A_view      = A
\n", - "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 424, __pyx_L1_error)\n",
-       "  __pyx_v_A_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 424, __pyx_L1_error)\n",
-       "  __pyx_v_A_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "
+425:     B_view      = B
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 425, __pyx_L1_error)\n",
-       "  __pyx_v_B_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 425, __pyx_L1_error)\n",
-       "  __pyx_v_B_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+426:     C_view      = C
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 426, __pyx_L1_error)\n",
-       "  __pyx_v_C_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 426, __pyx_L1_error)\n",
-       "  __pyx_v_C_view = __pyx_t_17;\n",
-       "  __pyx_t_17.memview = NULL;\n",
-       "  __pyx_t_17.data = NULL;\n",
-       "
+427:     E_view      = E
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 427, __pyx_L1_error)\n",
-       "  __pyx_v_E_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 427, __pyx_L1_error)\n",
-       "  __pyx_v_E_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+428:     E3_view     = E3
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 428, __pyx_L1_error)\n",
-       "  __pyx_v_E3_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 428, __pyx_L1_error)\n",
-       "  __pyx_v_E3_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+429:     E5_view     = E5
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 429, __pyx_L1_error)\n",
-       "  __pyx_v_E5_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 429, __pyx_L1_error)\n",
-       "  __pyx_v_E5_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "
+430:     K_view      = K
\n", - "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
-       "  __pyx_v_K_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 430, __pyx_L1_error)\n",
-       "  __pyx_v_K_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "
 431: 
\n", - "
 432:     # Populate values based on externally defined constants.
\n", - "
+433:     if rk_method == 0:
\n", - "
  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "
 434:         # RK23 Method
\n", - "
+435:         for i in range(len_A0):
\n", - "
    __pyx_t_7 = __pyx_v_len_A0;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_A0;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+436:             for j in range(len_A1):
\n", - "
      __pyx_t_17 = __pyx_v_len_A1;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_len_A1;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_j = __pyx_t_20;\n",
-       "
+437:                 A_view[i, j] = RK23_A[i][j]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]);\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]), 0);\n",
-       "      }\n",
-       "    }\n",
-       "
+438:         for i in range(len_B):
\n", - "
    __pyx_t_7 = __pyx_v_len_B;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_B;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+439:             B_view[i] = RK23_B[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+440:         for i in range(len_C):
\n", - "
    __pyx_t_7 = __pyx_v_len_C;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_C;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+441:             C_view[i] = RK23_C[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
-       "    }\n",
-       "
+442:         for i in range(len_E):
\n", - "
    __pyx_t_7 = __pyx_v_len_E;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_E;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+443:             E_view[i] = RK23_E[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
-       "
 444:             # Dummy Variables, set equal to E
\n", - "
+445:             E3_view[i] = RK23_E[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
-       "
+446:             E5_view[i] = RK23_E[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+447:     elif rk_method == 1:
\n", - "
    break;\n",
-       "    default:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    default:\n",
-       "
 448:         # RK45 Method
\n", - "
+449:         for i in range(len_A0):
\n", - "
    __pyx_t_7 = __pyx_v_len_A0;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_A0;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+450:             for j in range(len_A1):
\n", - "
      __pyx_t_17 = __pyx_v_len_A1;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_len_A1;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_j = __pyx_t_20;\n",
-       "
+451:                 A_view[i, j] = RK45_A[i][j]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]);\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]), 0);\n",
-       "      }\n",
-       "    }\n",
-       "
+452:         for i in range(len_B):
\n", - "
    __pyx_t_7 = __pyx_v_len_B;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_B;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+453:             B_view[i] = RK45_B[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+454:         for i in range(len_C):
\n", - "
    __pyx_t_7 = __pyx_v_len_C;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_C;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+455:             C_view[i] = RK45_C[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
-       "    }\n",
-       "
+456:         for i in range(len_E):
\n", - "
    __pyx_t_7 = __pyx_v_len_E;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_E;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+457:             E_view[i] = RK45_E[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
-       "
 458:             # Dummy Variables, set equal to E
\n", - "
+459:             E3_view[i] = RK45_E[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
-       "
+460:             E5_view[i] = RK45_E[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
 461:     else:
\n", - "
 462:         # DOP853 Method
\n", - "
+463:         for i in range(len_A0):
\n", - "
    __pyx_t_7 = __pyx_v_len_A0;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_A0;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+464:             for j in range(len_A1):
\n", - "
      __pyx_t_17 = __pyx_v_len_A1;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_len_A1;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_j = __pyx_t_20;\n",
-       "
+465:                 A_view[i, j] = DOP_A_REDUCED[i][j]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]);\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]), 0);\n",
-       "      }\n",
-       "    }\n",
-       "
+466:         for i in range(len_B):
\n", - "
    __pyx_t_7 = __pyx_v_len_B;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_B;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+467:             B_view[i] = DOP_B[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+468:         for i in range(len_C):
\n", - "
    __pyx_t_7 = __pyx_v_len_C;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_C;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+469:             C_view[i] = DOP_C_REDUCED[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
-       "    }\n",
-       "
+470:         for i in range(len_E):
\n", - "
    __pyx_t_7 = __pyx_v_len_E;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_E;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+471:             E3_view[i] = DOP_E3[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]), 0);\n",
-       "
+472:             E5_view[i] = DOP_E5[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]), 0);\n",
-       "
+473:             E_view[i] = DOP_E5[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]), 0);\n",
-       "
 474:             # Dummy Variables, set equal to E3
\n", - "
+475:             E_view[i] = DOP_E3[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
-       "    }\n",
-       "    break;\n",
-       "  }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "    break;\n",
-       "  }\n",
-       "
 476: 
\n", - "
 477:     # Initialize variables for start of integration
\n", - "
+478:     if not capture_extra:
\n", - "
  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
-       "  if (__pyx_t_4) {\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_tuple__57 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__57);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__57);\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_span {\n",
+       "  int __pyx_n;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 0997: 
\n", + "
 0998:         # Update time domain information
\n", + "
+0999:         self.t_start     = t_span[0]
\n", + "
  __pyx_v_self->t_start = __pyx_v_t_span.f0;\n",
+       "
+1000:         self.t_end       = t_span[1]
\n", + "
  __pyx_v_self->t_end = __pyx_v_t_span.f1;\n",
+       "
+1001:         self.t_delta     = self.t_end - self.t_start
\n", + "
  __pyx_v_self->t_delta = (__pyx_v_self->t_end - __pyx_v_self->t_start);\n",
+       "
+1002:         self.t_delta_abs = fabs(self.t_delta)
\n", + "
  __pyx_v_self->t_delta_abs = fabs(__pyx_v_self->t_delta);\n",
+       "
+1003:         if self.t_delta >= 0.:
\n", + "
  __pyx_t_8 = (__pyx_v_self->t_delta >= 0.);\n",
+       "  if (__pyx_t_8) {\n",
        "/* … */\n",
+       "    goto __pyx_L3;\n",
        "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "
+1004:             self.direction_flag = True
\n", + "
    __pyx_v_self->direction_flag = 1;\n",
+       "
+1005:             self.direction_inf  = INF
\n", + "
    __pyx_v_self->direction_inf = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF;\n",
+       "
 1006:         else:
\n", + "
+1007:             self.direction_flag = False
\n", + "
  /*else*/ {\n",
+       "    __pyx_v_self->direction_flag = 0;\n",
+       "
+1008:             self.direction_inf  = -INF
\n", + "
    __pyx_v_self->direction_inf = (-__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF);\n",
        "  }\n",
-       "
 479:         # If `capture_extra` is True then this step was already performed.
\n", - "
+480:         if use_args:
\n", - "
    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L55;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L55;\n",
-       "    }\n",
-       "
+481:             diffeq(t_start, y_new, diffeq_out, *args)
\n", - "
      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_15 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_15 = PyNumber_Add(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error)\n",
+       "  __pyx_L3:;\n",
+       "
 1009: 
\n", + "
 1010:         # A change to t-span will affect the first step's size
\n", + "
+1011:         self.recalc_firststep = True
\n", + "
  __pyx_v_self->recalc_firststep = 1;\n",
+       "
 1012: 
\n", + "
+1013:         if auto_reset_state:
\n", + "
  __pyx_t_8 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_8) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1014:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1014, __pyx_L1_error)\n",
+       "
 1015: 
\n", + "
 1016: 
\n", + "
+1017:     cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = False):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_y0, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0 *__pyx_optional_args) {\n",
+       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
+       "  Py_ssize_t __pyx_v_y_size_new;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_y0\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "    }\n",
+       "  }\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_y0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
        "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "
 482:         else:
\n", - "
+483:             diffeq(t_start, y_new, diffeq_out)
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_9 = __pyx_v_diffeq; __pyx_t_2 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
-       "        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);\n",
-       "        if (likely(__pyx_t_2)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
-       "          __Pyx_INCREF(__pyx_t_2);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_9, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    }\n",
-       "    __pyx_L55:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_9 = __pyx_v_diffeq; __pyx_t_2 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
-       "        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);\n",
-       "        if (likely(__pyx_t_2)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
-       "          __Pyx_INCREF(__pyx_t_2);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_9, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    }\n",
-       "    __pyx_L55:;\n",
-       "
 484: 
\n", - "
+485:     t_old = t_start
\n", - "
  __pyx_v_t_old = __pyx_v_t_start;\n",
-       "/* … */\n",
-       "  __pyx_v_t_old = __pyx_v_t_start;\n",
-       "
+486:     t_new = t_start
\n", - "
  __pyx_v_t_new = __pyx_v_t_start;\n",
-       "/* … */\n",
-       "  __pyx_v_t_new = __pyx_v_t_start;\n",
-       "
 487:     # Initialize dydt arrays.
\n", - "
+488:     for i in range(y_size):
\n", - "
  __pyx_t_7 = __pyx_v_y_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __pyx_v_y_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+489:         dydt_new_view[i] = diffeq_out_view[i]
\n", - "
    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "/* … */\n",
-       "    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "
+490:         dydt_old_view[i] = dydt_new_view[i]
\n", - "
    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "  }\n",
-       "/* … */\n",
-       "    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "  }\n",
-       "
 491: 
\n", - "
 492:     # Setup storage arrays
\n", - "
 493:     # These arrays are built to fit a number of points equal to `expected_size_to_use`
\n", - "
 494:     # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.
\n", - "
 495:     cdef double_numeric[:, :] y_results_array_view, y_results_array_new_view, solution_y_view
\n", - "
 496:     cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view
\n", - "
+497:     y_results_array        = np.empty((store_loop_size, expected_size_to_use), dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_results_array = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_results_array = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+498:     time_domain_array      = np.empty(expected_size_to_use, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __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_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_time_domain_array = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __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_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_time_domain_array = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
+499:     y_results_array_view   = y_results_array
\n", - "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 499, __pyx_L1_error)\n",
-       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 499, __pyx_L1_error)\n",
-       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "
+500:     time_domain_array_view = time_domain_array
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 500, __pyx_L1_error)\n",
-       "  __pyx_v_time_domain_array_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 500, __pyx_L1_error)\n",
-       "  __pyx_v_time_domain_array_view = __pyx_t_17;\n",
-       "  __pyx_t_17.memview = NULL;\n",
-       "  __pyx_t_17.data = NULL;\n",
-       "
 501: 
\n", - "
 502:     cdef np.ndarray[np.float64_t, ndim=1, mode='c'] scale_arr
\n", - "
 503:     cdef double[:] scale_view
\n", - "
 504:     cdef double scale
\n", - "
+505:     scale_arr = np.empty(y_size, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __pyx_t_20 = ((PyArrayObject *)__pyx_t_9);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
-       "    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_13 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_v_scale_arr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);\n",
-       "      }\n",
-       "      __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_scale_arr.diminfo[0].strides = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_scale_arr.diminfo[0].shape = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_20 = 0;\n",
-       "  __pyx_v_scale_arr = ((PyArrayObject *)__pyx_t_9);\n",
-       "  __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_9) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  __pyx_t_21 = ((PyArrayObject *)__pyx_t_9);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer);\n",
-       "    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_13 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_scale_arr.rcbuffer->pybuffer, (PyObject*)__pyx_v_scale_arr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_24);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_22, __pyx_t_23, __pyx_t_24);\n",
-       "      }\n",
-       "      __pyx_t_22 = __pyx_t_23 = __pyx_t_24 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_scale_arr.diminfo[0].strides = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_scale_arr.diminfo[0].shape = __pyx_pybuffernd_scale_arr.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 505, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_v_scale_arr = ((PyArrayObject *)__pyx_t_9);\n",
-       "  __pyx_t_9 = 0;\n",
-       "
+506:     scale_view = scale_arr
\n", - "
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_scale_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 506, __pyx_L1_error)\n",
-       "  __pyx_v_scale_view = __pyx_t_10;\n",
-       "  __pyx_t_10.memview = NULL;\n",
-       "  __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(((PyObject *)__pyx_v_scale_arr), PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 506, __pyx_L1_error)\n",
-       "  __pyx_v_scale_view = __pyx_t_17;\n",
-       "  __pyx_t_17.memview = NULL;\n",
-       "  __pyx_t_17.data = NULL;\n",
-       "
 507: 
\n", - "
 508: 
\n", - "
 509:     # Load initial conditions into output arrays
\n", - "
+510:     time_domain_array_view[0] = t_start
\n", - "
  __pyx_t_14 = 0;\n",
-       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
-       "/* … */\n",
-       "  __pyx_t_14 = 0;\n",
-       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
-       "
+511:     for i in range(store_loop_size):
\n", - "
  __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_3 = __pyx_t_7;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+512:         if store_extras_during_integration:
\n", - "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L60;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L60;\n",
-       "    }\n",
-       "
+513:             y_results_array_view[i] = y0_plus_extra_view[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_10.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          double __pyx_temp_scalar = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_10.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          __pyx_t_double_complex __pyx_temp_scalar = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((__pyx_t_double_complex *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
-       "
 514:         else:
\n", - "
+515:             y_results_array_view[i] = y0[i]
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_10.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          double __pyx_temp_scalar = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
-       "    }\n",
-       "    __pyx_L60:;\n",
-       "  }\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_10.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_10.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_10.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_10.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_10.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          __pyx_t_double_complex __pyx_temp_scalar = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_10.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_10.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_10.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((__pyx_t_double_complex *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_10, 1);\n",
-       "      __pyx_t_10.memview = NULL; __pyx_t_10.data = NULL;\n",
-       "    }\n",
-       "    __pyx_L60:;\n",
-       "  }\n",
-       "
 516: 
\n", - "
 517:     # # Determine size of first step.
\n", - "
 518:     cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1
\n", - "
 519: 
\n", - "
+520:     if first_step == 0.:
\n", - "
  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L61;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L61;\n",
-       "  }\n",
-       "
 521:         # Select an initial step size based on the differential equation.
\n", - "
 522:         # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
\n", - "
 523:         #        Equations I: Nonstiff Problems", Sec. II.4.
\n", - "
+524:         if y_size == 0:
\n", - "
    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L62;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L62;\n",
-       "    }\n",
-       "
+525:             step_size = INF
\n", - "
      __pyx_v_step_size = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF;\n",
-       "/* … */\n",
-       "      __pyx_v_step_size = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_INF;\n",
-       "
 526:         else:
\n", - "
 527:             # Find the norm for d0 and d1
\n", - "
+528:             d0 = 0.
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_d0 = 0.;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_v_d0 = 0.;\n",
-       "
+529:             d1 = 0.
\n", - "
      __pyx_v_d1 = 0.;\n",
-       "/* … */\n",
-       "      __pyx_v_d1 = 0.;\n",
-       "
+530:             for i in range(y_size):
\n", - "
      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+531:                 scale = atol + dabs(y_old_view[i]) * rtol
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
-       "
 532: 
\n", - "
+533:                 d0_abs = dabs(y_old_view[i] / scale)
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_d0_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) / __pyx_v_scale));\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_d0_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0)));\n",
-       "
+534:                 d1_abs = dabs(dydt_old_view[i] / scale)
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_d1_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(((*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))) / __pyx_v_scale));\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_d1_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0)));\n",
-       "
+535:                 d0 += (d0_abs * d0_abs)
\n", - "
        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
-       "/* … */\n",
-       "        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
-       "
+536:                 d1 += (d1_abs * d1_abs)
\n", - "
        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
-       "      }\n",
-       "
 537: 
\n", - "
+538:             d0 = sqrt(d0) / y_size_sqrt
\n", - "
      __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_y_size_sqrt);\n",
-       "/* … */\n",
-       "      __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_y_size_sqrt);\n",
-       "
+539:             d1 = sqrt(d1) / y_size_sqrt
\n", - "
      __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_y_size_sqrt);\n",
-       "/* … */\n",
-       "      __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_y_size_sqrt);\n",
-       "
 540: 
\n", - "
+541:             if d0 < 1.e-5 or d1 < 1.e-5:
\n", - "
      __pyx_t_5 = (__pyx_v_d0 < 1.e-5);\n",
-       "      if (!__pyx_t_5) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_5;\n",
-       "        goto __pyx_L66_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_5 = (__pyx_v_d1 < 1.e-5);\n",
-       "      __pyx_t_4 = __pyx_t_5;\n",
-       "      __pyx_L66_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L65;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_5 = (__pyx_v_d0 < 1.e-5);\n",
-       "      if (!__pyx_t_5) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_5;\n",
-       "        goto __pyx_L66_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_5 = (__pyx_v_d1 < 1.e-5);\n",
-       "      __pyx_t_4 = __pyx_t_5;\n",
-       "      __pyx_L66_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L65;\n",
-       "      }\n",
-       "
+542:                 h0 = 1.e-6
\n", - "
        __pyx_v_h0 = 1.e-6;\n",
-       "/* … */\n",
-       "        __pyx_v_h0 = 1.e-6;\n",
-       "
 543:             else:
\n", - "
+544:                 h0 = 0.01 * d0 / d1
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
-       "      }\n",
-       "      __pyx_L65:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
-       "      }\n",
-       "      __pyx_L65:;\n",
-       "
 545: 
\n", - "
+546:             if direction_flag:
\n", - "
      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L68;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L68;\n",
-       "      }\n",
-       "
+547:                 h0_direction = h0
\n", - "
        __pyx_v_h0_direction = __pyx_v_h0;\n",
-       "/* … */\n",
-       "        __pyx_v_h0_direction = __pyx_v_h0;\n",
-       "
 548:             else:
\n", - "
+549:                 h0_direction = -h0
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_h0_direction = (-__pyx_v_h0);\n",
-       "      }\n",
-       "      __pyx_L68:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_h0_direction = (-__pyx_v_h0);\n",
-       "      }\n",
-       "      __pyx_L68:;\n",
-       "
+550:             t_new = t_old + h0_direction
\n", - "
      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
-       "/* … */\n",
-       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
-       "
+551:             for i in range(y_size):
\n", - "
      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+552:                 y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) + (__pyx_v_h0_direction * (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_25 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_h0_direction, 0), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
-       "      }\n",
-       "
 553: 
\n", - "
+554:             if use_args:
\n", - "
      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L71;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L71;\n",
-       "      }\n",
-       "
+555:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", - "
        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_GIVEREF(__pyx_t_9);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_9 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_GIVEREF(__pyx_t_9);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_9 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 555, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "
 556:             else:
\n", - "
+557:                 diffeq(t_new, y_new, diffeq_out)
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_15 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {\n",
-       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_15);\n",
-       "          if (likely(__pyx_t_1)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);\n",
-       "            __Pyx_INCREF(__pyx_t_1);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_15, function);\n",
-       "            __pyx_t_13 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_9, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __pyx_L71:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_9 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_15 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {\n",
-       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_15);\n",
-       "          if (likely(__pyx_t_1)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);\n",
-       "            __Pyx_INCREF(__pyx_t_1);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0)) {\n",
+       "        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_4);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
+       "        __pyx_t_7 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
+       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
+       "          if (likely(__pyx_t_6)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
+       "            __Pyx_INCREF(__pyx_t_6);\n",
        "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_15, function);\n",
-       "            __pyx_t_13 = 1;\n",
+       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
+       "            __pyx_t_7 = 1;\n",
        "          }\n",
        "        }\n",
        "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_9, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 557, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __pyx_L71:;\n",
-       "
 558: 
\n", - "
 559:             # Find the norm for d2
\n", - "
+560:             d2 = 0.
\n", - "
      __pyx_v_d2 = 0.;\n",
-       "/* … */\n",
-       "      __pyx_v_d2 = 0.;\n",
-       "
+561:             for i in range(y_size):
\n", - "
      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+562:                 dydt_new_view[i] = diffeq_out_view[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "
+563:                 scale = atol + dabs(y_old_view[i]) * rtol
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))) * __pyx_v_rtol));\n",
-       "
+564:                 d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_d2_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((((*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )))) / __pyx_v_scale));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_v_d2_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__Pyx_c_quot_double(__Pyx_c_diff_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0)));\n",
-       "
+565:                 d2 += (d2_abs * d2_abs)
\n", - "
        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
-       "      }\n",
-       "
 566: 
\n", - "
+567:             d2 = sqrt(d2) / (h0 * y_size_sqrt)
\n", - "
      __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_y_size_sqrt));\n",
-       "/* … */\n",
-       "      __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_y_size_sqrt));\n",
-       "
 568: 
\n", - "
+569:             if d1 <= 1.e-15 and d2 <= 1.e-15:
\n", - "
      __pyx_t_5 = (__pyx_v_d1 <= 1.e-15);\n",
-       "      if (__pyx_t_5) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_5;\n",
-       "        goto __pyx_L75_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_5 = (__pyx_v_d2 <= 1.e-15);\n",
-       "      __pyx_t_4 = __pyx_t_5;\n",
-       "      __pyx_L75_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L74;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_5 = (__pyx_v_d1 <= 1.e-15);\n",
-       "      if (__pyx_t_5) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_5;\n",
-       "        goto __pyx_L75_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_5 = (__pyx_v_d2 <= 1.e-15);\n",
-       "      __pyx_t_4 = __pyx_t_5;\n",
-       "      __pyx_L75_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L74;\n",
-       "      }\n",
-       "
+570:                 h1 = max(1.e-6, h0 * 1.e-3)
\n", - "
        __pyx_t_25 = (__pyx_v_h0 * 1.e-3);\n",
-       "        __pyx_t_26 = 1.e-6;\n",
-       "        if ((__pyx_t_25 > __pyx_t_26)) {\n",
-       "          __pyx_t_27 = __pyx_t_25;\n",
-       "        } else {\n",
-       "          __pyx_t_27 = __pyx_t_26;\n",
-       "        }\n",
-       "        __pyx_v_h1 = __pyx_t_27;\n",
-       "/* … */\n",
-       "        __pyx_t_26 = (__pyx_v_h0 * 1.e-3);\n",
-       "        __pyx_t_27 = 1.e-6;\n",
-       "        if ((__pyx_t_26 > __pyx_t_27)) {\n",
-       "          __pyx_t_28 = __pyx_t_26;\n",
-       "        } else {\n",
-       "          __pyx_t_28 = __pyx_t_27;\n",
-       "        }\n",
-       "        __pyx_v_h1 = __pyx_t_28;\n",
-       "
 571:             else:
\n", - "
+572:                 h1 = (0.01 / max(d1, d2))**error_expo
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_27 = __pyx_v_d2;\n",
-       "        __pyx_t_25 = __pyx_v_d1;\n",
-       "        if ((__pyx_t_27 > __pyx_t_25)) {\n",
-       "          __pyx_t_26 = __pyx_t_27;\n",
-       "        } else {\n",
-       "          __pyx_t_26 = __pyx_t_25;\n",
-       "        }\n",
-       "        __pyx_v_h1 = pow((0.01 / __pyx_t_26), __pyx_v_error_expo);\n",
-       "      }\n",
-       "      __pyx_L74:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_28 = __pyx_v_d2;\n",
-       "        __pyx_t_26 = __pyx_v_d1;\n",
-       "        if ((__pyx_t_28 > __pyx_t_26)) {\n",
-       "          __pyx_t_27 = __pyx_t_28;\n",
-       "        } else {\n",
-       "          __pyx_t_27 = __pyx_t_26;\n",
+       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
+       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
        "        }\n",
-       "        __pyx_v_h1 = pow((0.01 / __pyx_t_27), __pyx_v_error_expo);\n",
-       "      }\n",
-       "      __pyx_L74:;\n",
-       "
 573: 
\n", - "
+574:             step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))
\n", - "
      __pyx_t_26 = __pyx_v_h1;\n",
-       "      __pyx_t_27 = (100. * __pyx_v_h0);\n",
-       "      if ((__pyx_t_26 < __pyx_t_27)) {\n",
-       "        __pyx_t_25 = __pyx_t_26;\n",
-       "      } else {\n",
-       "        __pyx_t_25 = __pyx_t_27;\n",
-       "      }\n",
-       "      __pyx_t_26 = __pyx_t_25;\n",
-       "      __pyx_t_25 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "      if ((__pyx_t_26 > __pyx_t_25)) {\n",
-       "        __pyx_t_27 = __pyx_t_26;\n",
-       "      } else {\n",
-       "        __pyx_t_27 = __pyx_t_25;\n",
-       "      }\n",
-       "      __pyx_v_step_size = __pyx_t_27;\n",
-       "    }\n",
-       "    __pyx_L62:;\n",
-       "/* … */\n",
-       "      __pyx_t_27 = __pyx_v_h1;\n",
-       "      __pyx_t_28 = (100. * __pyx_v_h0);\n",
-       "      if ((__pyx_t_27 < __pyx_t_28)) {\n",
-       "        __pyx_t_26 = __pyx_t_27;\n",
-       "      } else {\n",
-       "        __pyx_t_26 = __pyx_t_28;\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
        "      }\n",
-       "      __pyx_t_27 = __pyx_t_26;\n",
-       "      __pyx_t_26 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "      if ((__pyx_t_27 > __pyx_t_26)) {\n",
-       "        __pyx_t_28 = __pyx_t_27;\n",
-       "      } else {\n",
-       "        __pyx_t_28 = __pyx_t_26;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
        "      }\n",
-       "      __pyx_v_step_size = __pyx_t_28;\n",
-       "    }\n",
-       "    __pyx_L62:;\n",
-       "
 575:     else:
\n", - "
+576:         if first_step <= 0.:
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+577:             status = -8
\n", - "
      __pyx_v_status = -8;\n",
-       "/* … */\n",
-       "      __pyx_v_status = -8;\n",
-       "
+578:             raise AttributeError('Error in user-provided step size: Step size must be a positive number.')
\n", - "
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __PYX_ERR(0, 578, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__17);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__17);\n",
-       "/* … */\n",
-       "      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 578, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __PYX_ERR(0, 578, __pyx_L1_error)\n",
-       "
+579:         elif first_step > t_delta_abs:
\n", - "
    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
+       "      #endif\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
        "    }\n",
-       "
+580:             status = -8
\n", - "
      __pyx_v_status = -8;\n",
-       "/* … */\n",
-       "      __pyx_v_status = -8;\n",
-       "
+581:             raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')
\n", - "
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 581, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __PYX_ERR(0, 581, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size_2); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 581, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__18);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__18);\n",
-       "/* … */\n",
-       "      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 581, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_Raise(__pyx_t_8, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __PYX_ERR(0, 581, __pyx_L1_error)\n",
-       "
+582:         step_size = first_step
\n", - "
    __pyx_v_step_size = __pyx_v_first_step;\n",
-       "  }\n",
-       "  __pyx_L61:;\n",
-       "/* … */\n",
-       "    __pyx_v_step_size = __pyx_v_first_step;\n",
-       "  }\n",
-       "  __pyx_L61:;\n",
-       "
 583: 
\n", - "
 584:     # # Main integration loop
\n", - "
 585:     cdef double min_step, step_factor, step
\n", - "
 586:     cdef double c
\n", - "
 587:     cdef double_numeric K_scale
\n", - "
 588:     cdef Py_ssize_t len_t
\n", - "
+589:     status = 0
\n", - "
  __pyx_v_status = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_status = 0;\n",
-       "
+590:     len_t  = 1  # There is an initial condition provided so the time length is already 1
\n", - "
  __pyx_v_len_t = 1;\n",
-       "/* … */\n",
-       "  __pyx_v_len_t = 1;\n",
-       "
 591: 
\n", - "
+592:     if y_size == 0:
\n", - "
  __pyx_t_4 = (__pyx_v_y_size == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_y_size == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "    #endif\n",
        "  }\n",
-       "
+593:         status = -6
\n", - "
    __pyx_v_status = -6;\n",
-       "/* … */\n",
-       "    __pyx_v_status = -6;\n",
-       "
 594: 
\n", - "
+595:     while status == 0:
\n", - "
  while (1) {\n",
-       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
-       "    if (!__pyx_t_4) break;\n",
-       "/* … */\n",
-       "  while (1) {\n",
-       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
-       "    if (!__pyx_t_4) break;\n",
-       "
+596:         if t_new == t_end:
\n", - "
    __pyx_t_4 = (__pyx_v_t_new == __pyx_v_t_end);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_t_new == __pyx_v_t_end);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+597:             t_old = t_end
\n", - "
      __pyx_v_t_old = __pyx_v_t_end;\n",
-       "/* … */\n",
-       "      __pyx_v_t_old = __pyx_v_t_end;\n",
-       "
+598:             status = 1
\n", - "
      __pyx_v_status = 1;\n",
-       "/* … */\n",
-       "      __pyx_v_status = 1;\n",
-       "
+599:             break
\n", - "
      goto __pyx_L80_break;\n",
-       "/* … */\n",
-       "      goto __pyx_L80_break;\n",
-       "
 600: 
\n", - "
+601:         if use_max_steps:
\n", - "
    __pyx_t_4 = (__pyx_v_use_max_steps != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L82;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_use_max_steps != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L82;\n",
-       "    }\n",
-       "
+602:             if len_t > max_steps_touse:
\n", - "
      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_max_steps_touse);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_max_steps_touse);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+603:                 status = -2
\n", - "
        __pyx_v_status = -2;\n",
-       "/* … */\n",
-       "        __pyx_v_status = -2;\n",
-       "
+604:                 break
\n", - "
        goto __pyx_L80_break;\n",
-       "/* … */\n",
-       "        goto __pyx_L80_break;\n",
-       "
 605:         else:
\n", - "
+606:             if len_t > MAX_INT_SIZE:
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_L82:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_4 = (__pyx_v_len_t > __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_INT_SIZE);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_L82:;\n",
-       "
+607:                 status = -3
\n", - "
        __pyx_v_status = -3;\n",
-       "/* … */\n",
-       "        __pyx_v_status = -3;\n",
-       "
+608:                 break
\n", - "
        goto __pyx_L80_break;\n",
-       "/* … */\n",
-       "        goto __pyx_L80_break;\n",
-       "
 609: 
\n", - "
 610:         # Run RK integration step
\n", - "
 611:         # Determine step size based on previous loop
\n", - "
 612:         # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)
\n", - "
+613:         min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)
\n", - "
    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "/* … */\n",
-       "    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "
 614:         # Look for over/undershoots in previous step size
\n", - "
+615:         if step_size > max_step_size:
\n", - "
    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step_size);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L85;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step_size);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L85;\n",
-       "    }\n",
-       "
+616:             step_size = max_step_size
\n", - "
      __pyx_v_step_size = __pyx_v_max_step_size;\n",
-       "/* … */\n",
-       "      __pyx_v_step_size = __pyx_v_max_step_size;\n",
-       "
+617:         elif step_size < min_step:
\n", - "
    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "    __pyx_L85:;\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "    __pyx_L85:;\n",
-       "
+618:             step_size = min_step
\n", - "
      __pyx_v_step_size = __pyx_v_min_step;\n",
-       "/* … */\n",
-       "      __pyx_v_step_size = __pyx_v_min_step;\n",
-       "
 619: 
\n", - "
 620:         # Determine new step size
\n", - "
+621:         step_accepted = False
\n", - "
    __pyx_v_step_accepted = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_step_accepted = 0;\n",
-       "
+622:         step_rejected = False
\n", - "
    __pyx_v_step_rejected = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_step_rejected = 0;\n",
-       "
+623:         step_error    = False
\n", - "
    __pyx_v_step_error = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_step_error = 0;\n",
-       "
 624: 
\n", - "
 625:         # # Step Loop
\n", - "
+626:         while not step_accepted:
\n", - "
    while (1) {\n",
-       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "      if (!__pyx_t_4) break;\n",
-       "/* … */\n",
-       "    while (1) {\n",
-       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "      if (!__pyx_t_4) break;\n",
-       "
 627: 
\n", - "
+628:             if step_size < min_step:
\n", - "
      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+629:                 step_error = True
\n", - "
        __pyx_v_step_error = 1;\n",
-       "/* … */\n",
-       "        __pyx_v_step_error = 1;\n",
-       "
+630:                 status     = -1
\n", - "
        __pyx_v_status = -1;\n",
-       "/* … */\n",
-       "        __pyx_v_status = -1;\n",
-       "
+631:                 break
\n", - "
        goto __pyx_L87_break;\n",
-       "/* … */\n",
-       "        goto __pyx_L87_break;\n",
-       "
 632: 
\n", - "
 633:             # Move time forward for this particular step size
\n", - "
+634:             if direction_flag:
\n", - "
      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L89;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L89;\n",
-       "      }\n",
-       "
+635:                 step = step_size
\n", - "
        __pyx_v_step = __pyx_v_step_size;\n",
-       "/* … */\n",
-       "        __pyx_v_step = __pyx_v_step_size;\n",
-       "
+636:                 t_delta_check = t_new - t_end
\n", - "
        __pyx_v_t_delta_check = (__pyx_v_t_new - __pyx_v_t_end);\n",
-       "/* … */\n",
-       "        __pyx_v_t_delta_check = (__pyx_v_t_new - __pyx_v_t_end);\n",
-       "
 637:             else:
\n", - "
+638:                 step = -step_size
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_step = (-__pyx_v_step_size);\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_step = (-__pyx_v_step_size);\n",
-       "
+639:                 t_delta_check = t_end - t_new
\n", - "
        __pyx_v_t_delta_check = (__pyx_v_t_end - __pyx_v_t_new);\n",
-       "      }\n",
-       "      __pyx_L89:;\n",
-       "/* … */\n",
-       "        __pyx_v_t_delta_check = (__pyx_v_t_end - __pyx_v_t_new);\n",
-       "      }\n",
-       "      __pyx_L89:;\n",
-       "
+640:             t_new = t_old + step
\n", - "
      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
-       "/* … */\n",
-       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
-       "
 641: 
\n", - "
 642:             # Check that we are not at the end of integration with that move
\n", - "
+643:             if t_delta_check > 0.:
\n", - "
      __pyx_t_4 = (__pyx_v_t_delta_check > 0.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_t_delta_check > 0.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+644:                 t_new = t_end
\n", - "
        __pyx_v_t_new = __pyx_v_t_end;\n",
-       "/* … */\n",
-       "        __pyx_v_t_new = __pyx_v_t_end;\n",
-       "
 645: 
\n", - "
 646:                 # Correct the step if we were at the end of integration
\n", - "
+647:                 step = t_new - t_old
\n", - "
        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
-       "/* … */\n",
-       "        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
-       "
+648:                 if direction_flag:
\n", - "
        __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L91;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_direction_flag != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L91;\n",
-       "        }\n",
-       "
+649:                     step_size = step
\n", - "
          __pyx_v_step_size = __pyx_v_step;\n",
-       "/* … */\n",
-       "          __pyx_v_step_size = __pyx_v_step;\n",
-       "
 650:                 else:
\n", - "
+651:                     step_size = -step
\n", - "
        /*else*/ {\n",
-       "          __pyx_v_step_size = (-__pyx_v_step);\n",
-       "        }\n",
-       "        __pyx_L91:;\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_v_step_size = (-__pyx_v_step);\n",
-       "        }\n",
-       "        __pyx_L91:;\n",
-       "
 652: 
\n", - "
 653:             # Calculate derivative using RK method
\n", - "
+654:             for i in range(y_size):
\n", - "
      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_y_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+655:                 K_view[0, i] = dydt_old_view[i]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = 0;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_24 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = 0;\n",
-       "        __pyx_t_25 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_25 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
-       "      }\n",
-       "
 656: 
\n", - "
+657:             for s in range(1, len_C):
\n", - "
      __pyx_t_7 = __pyx_v_len_C;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_s = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_len_C;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_s = __pyx_t_11;\n",
-       "
+658:                 c = C_view[s]
\n", - "
        __pyx_t_14 = __pyx_v_s;\n",
-       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_s;\n",
-       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
-       "
+659:                 time_ = t_old + c * step
\n", - "
        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
-       "/* … */\n",
-       "        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
-       "
 660: 
\n", - "
 661:                 # Dot Product (K, a) * step
\n", - "
+662:                 for j in range(s):
\n", - "
        __pyx_t_17 = __pyx_v_s;\n",
-       "        __pyx_t_18 = __pyx_t_17;\n",
-       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "          __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "        __pyx_t_18 = __pyx_v_s;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_j = __pyx_t_20;\n",
-       "
+663:                     for i in range(y_size):
\n", - "
          __pyx_t_28 = __pyx_v_y_size;\n",
-       "          __pyx_t_29 = __pyx_t_28;\n",
-       "          for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) {\n",
-       "            __pyx_v_i = __pyx_t_30;\n",
-       "/* … */\n",
-       "          __pyx_t_29 = __pyx_v_y_size;\n",
-       "          __pyx_t_30 = __pyx_t_29;\n",
-       "          for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) {\n",
-       "            __pyx_v_i = __pyx_t_31;\n",
-       "
+664:                         if j == 0:
\n", - "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "
 665:                             # Initialize
\n", - "
+666:                             y_new_view[i] = y_old_view[i]
\n", - "
              __pyx_t_14 = __pyx_v_i;\n",
-       "              __pyx_t_24 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "/* … */\n",
-       "              __pyx_t_14 = __pyx_v_i;\n",
-       "              __pyx_t_25 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "
 667: 
\n", - "
+668:                         y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)
\n", - "
            __pyx_t_14 = __pyx_v_i;\n",
-       "            __pyx_t_24 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_31 = __pyx_v_s;\n",
-       "            __pyx_t_32 = __pyx_v_j;\n",
-       "            __pyx_t_33 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_33 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_31 * __pyx_v_A_view.strides[0]) ) + __pyx_t_32 * __pyx_v_A_view.strides[1]) )))) * __pyx_v_step));\n",
-       "          }\n",
-       "        }\n",
-       "/* … */\n",
-       "            __pyx_t_14 = __pyx_v_i;\n",
-       "            __pyx_t_25 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_32 = __pyx_v_s;\n",
-       "            __pyx_t_33 = __pyx_v_j;\n",
-       "            __pyx_t_34 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_34 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_25 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))), (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_32 * __pyx_v_A_view.strides[0]) ) + __pyx_t_33 * __pyx_v_A_view.strides[1]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
-       "          }\n",
-       "        }\n",
-       "
 669: 
\n", - "
+670:                 if use_args:
\n", - "
        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L101;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L101;\n",
-       "        }\n",
-       "
+671:                     diffeq(time_, y_new, diffeq_out, *args)
\n", - "
          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_GIVEREF(__pyx_t_8);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "          __Pyx_INCREF(__pyx_v_y_new);\n",
-       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_y_new);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_diffeq_out);\n",
-       "          __pyx_t_8 = 0;\n",
-       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "            __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_8, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_GIVEREF(__pyx_t_8);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "          __Pyx_INCREF(__pyx_v_y_new);\n",
-       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_y_new);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_diffeq_out);\n",
-       "          __pyx_t_8 = 0;\n",
-       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "            __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_8, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 671, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "
 672:                 else:
\n", - "
+673:                     diffeq(time_, y_new, diffeq_out)
\n", - "
        /*else*/ {\n",
-       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "          __pyx_t_9 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "          __pyx_t_13 = 0;\n",
-       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
-       "            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);\n",
-       "            if (likely(__pyx_t_1)) {\n",
-       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
-       "              __Pyx_INCREF(__pyx_t_1);\n",
-       "              __Pyx_INCREF(function);\n",
-       "              __Pyx_DECREF_SET(__pyx_t_9, function);\n",
-       "              __pyx_t_13 = 1;\n",
-       "            }\n",
-       "          }\n",
-       "          {\n",
-       "            PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_8, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "            __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "          }\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __pyx_L101:;\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_t_8 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_8);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "          __pyx_t_9 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "          __pyx_t_13 = 0;\n",
-       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {\n",
-       "            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);\n",
-       "            if (likely(__pyx_t_1)) {\n",
-       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);\n",
-       "              __Pyx_INCREF(__pyx_t_1);\n",
-       "              __Pyx_INCREF(function);\n",
-       "              __Pyx_DECREF_SET(__pyx_t_9, function);\n",
-       "              __pyx_t_13 = 1;\n",
-       "            }\n",
-       "          }\n",
-       "          {\n",
-       "            PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_8, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "            __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 673, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "          }\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __pyx_L101:;\n",
-       "
 674: 
\n", - "
+675:                 for i in range(y_size):
\n", - "
        __pyx_t_17 = __pyx_v_y_size;\n",
-       "        __pyx_t_18 = __pyx_t_17;\n",
-       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "          __pyx_v_i = __pyx_t_19;\n",
-       "/* … */\n",
-       "        __pyx_t_18 = __pyx_v_y_size;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_i = __pyx_t_20;\n",
-       "
+676:                     K_view[s, i] = diffeq_out_view[i]
\n", - "
          __pyx_t_32 = __pyx_v_i;\n",
-       "          __pyx_t_31 = __pyx_v_s;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_31 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_32 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "      }\n",
-       "/* … */\n",
-       "          __pyx_t_33 = __pyx_v_i;\n",
-       "          __pyx_t_32 = __pyx_v_s;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_32 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_33 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "      }\n",
-       "
 677: 
\n", - "
 678:             # Dot Product (K, B) * step
\n", - "
+679:             for j in range(rk_n_stages):
\n", - "
      __pyx_t_7 = __pyx_v_rk_n_stages;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_j = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_rk_n_stages;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_j = __pyx_t_11;\n",
-       "
 680:                 # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match
\n", - "
 681:                 #  the shape of B.
\n", - "
+682:                 for i in range(y_size):
\n", - "
        __pyx_t_17 = __pyx_v_y_size;\n",
-       "        __pyx_t_18 = __pyx_t_17;\n",
-       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "          __pyx_v_i = __pyx_t_19;\n",
-       "/* … */\n",
-       "        __pyx_t_18 = __pyx_v_y_size;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_i = __pyx_t_20;\n",
-       "
+683:                     if j == 0:
\n", - "
          __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          }\n",
        "/* … */\n",
-       "          __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          }\n",
-       "
 684:                         # Initialize
\n", - "
+685:                         y_new_view[i] = y_old_view[i]
\n", - "
            __pyx_t_32 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_32 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "/* … */\n",
-       "            __pyx_t_33 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_33 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "
+686:                     y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)
\n", - "
          __pyx_t_32 = __pyx_v_i;\n",
-       "          __pyx_t_12 = __pyx_v_j;\n",
-       "          __pyx_t_31 = __pyx_v_i;\n",
-       "          __pyx_t_24 = __pyx_v_j;\n",
-       "          __pyx_t_14 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_32 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_31 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_24 * __pyx_v_B_view.strides[0]) )))) * __pyx_v_step));\n",
-       "        }\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_y0\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0 = {\"change_y0\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_y0 (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y0,&__pyx_n_s_auto_reset_state,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "/* … */\n",
-       "          __pyx_t_33 = __pyx_v_i;\n",
-       "          __pyx_t_12 = __pyx_v_j;\n",
-       "          __pyx_t_32 = __pyx_v_i;\n",
-       "          __pyx_t_25 = __pyx_v_j;\n",
-       "          __pyx_t_14 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_33 * __pyx_v_y_new_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_32 * __pyx_v_K_view.strides[1]) ))), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_25 * __pyx_v_B_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
        "        }\n",
        "      }\n",
-       "
 687: 
\n", - "
+688:             if use_args:
\n", - "
      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L109;\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_y0\") < 0)) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
        "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L109;\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "
+689:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", - "
        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_GIVEREF(__pyx_t_15);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_15 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_15 = PyNumber_Add(__pyx_t_9, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "    }\n",
+       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[0], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_auto_reset_state = ((bool)0);\n",
+       "    }\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_y0\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1017, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_y0\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_8change_y0(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_y0, __pyx_v_auto_reset_state);\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_8change_y0(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_y0, bool __pyx_v_auto_reset_state) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_y0\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 1;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_y0(__pyx_v_self, __pyx_v_y0, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_y0\", __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_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_GIVEREF(__pyx_t_15);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_15 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_15 = PyNumber_Add(__pyx_t_9, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "
 690:             else:
\n", - "
+691:                 diffeq(t_new, y_new, diffeq_out)
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_8 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
-       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);\n",
-       "          if (likely(__pyx_t_1)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
-       "            __Pyx_INCREF(__pyx_t_1);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_8, function);\n",
-       "            __pyx_t_13 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_9);\n",
-       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __pyx_L109:;\n",
+       "  __pyx_tuple__58 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_y0, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__58);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__58);\n",
+       "  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_y0, 1017, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
        "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_8 = __pyx_v_diffeq; __pyx_t_1 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
-       "          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);\n",
-       "          if (likely(__pyx_t_1)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
-       "            __Pyx_INCREF(__pyx_t_1);\n",
+       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_y0, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__60);\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_y0, __pyx_t_7) < 0) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_tuple__60 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__60);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__60);\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0 {\n",
+       "  int __pyx_n;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 1018: 
\n", + "
 1019:         # Check y-size information
\n", + "
 1020:         cdef Py_ssize_t y_size_new
\n", + "
+1021:         y_size_new = len(y0)
\n", + "
  __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_y0); \n",
+       "  __pyx_v_y_size_new = __pyx_t_8;\n",
+       "
 1022: 
\n", + "
+1023:         if self.y_size != y_size_new:
\n", + "
  __pyx_t_9 = (__pyx_v_self->y_size != __pyx_v_y_size_new);\n",
+       "  if (unlikely(__pyx_t_9)) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
 1024:             # So many things need to update if ysize changes that the user might as well just
\n", + "
 1025:             #  create a new class instance.
\n", + "
+1026:             self.status = -8
\n", + "
    __pyx_v_self->status = -8;\n",
+       "
+1027:             self.message = "Attribute error."
\n", + "
    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
+       "    __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
+       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
+       "    __Pyx_DECREF(__pyx_v_self->message);\n",
+       "    __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
+       "
+1028:             raise AttributeError('New y0 must be the same size as the original y0 used to create CySolver class.'
\n", + "
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
+       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "    __PYX_ERR(0, 1028, __pyx_L1_error)\n",
+       "/* … */\n",
+       "  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_New_y0_must_be_the_same_size_as); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 1028, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__27);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__27);\n",
+       "
 1029:                                  'Create new CySolver instance instead.')
\n", + "
 1030: 
\n", + "
 1031:         # Store y0 values for later
\n", + "
+1032:         self.y0_view = y0
\n", + "
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->y0_view, 0);\n",
+       "  __PYX_INC_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __pyx_v_self->y0_view = __pyx_v_y0;\n",
+       "
 1033: 
\n", + "
 1034:         # A change to y0 will affect the first step's size
\n", + "
+1035:         self.recalc_firststep = True
\n", + "
  __pyx_v_self->recalc_firststep = 1;\n",
+       "
 1036: 
\n", + "
+1037:         if auto_reset_state:
\n", + "
  __pyx_t_9 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_9) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1038:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1038, __pyx_L1_error)\n",
+       "
 1039: 
\n", + "
 1040: 
\n", + "
+1041:     cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = False):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_args, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args *__pyx_optional_args) {\n",
+       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
+       "  PyArrayObject *__pyx_v_arg_array = 0;\n",
+       "  Py_ssize_t __pyx_v_i;\n",
+       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_arg_array;\n",
+       "  __Pyx_Buffer __pyx_pybuffer_arg_array;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_args\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "    }\n",
+       "  }\n",
+       "  __pyx_pybuffer_arg_array.pybuffer.buf = NULL;\n",
+       "  __pyx_pybuffer_arg_array.refcount = 0;\n",
+       "  __pyx_pybuffernd_arg_array.data = NULL;\n",
+       "  __pyx_pybuffernd_arg_array.rcbuffer = &__pyx_pybuffer_arg_array;\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args)) {\n",
+       "        __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;\n",
+       "        __pyx_t_6 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {\n",
+       "          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);\n",
+       "          if (likely(__pyx_t_5)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);\n",
+       "            __Pyx_INCREF(__pyx_t_5);\n",
        "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_8, function);\n",
-       "            __pyx_t_13 = 1;\n",
+       "            __Pyx_DECREF_SET(__pyx_t_4, function);\n",
+       "            __pyx_t_6 = 1;\n",
        "          }\n",
        "        }\n",
        "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 691, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_9);\n",
-       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __pyx_L109:;\n",
-       "
 692: 
\n", - "
 693: 
\n", - "
+694:             for i in range(store_loop_size):
\n", - "
      __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+695:                 if i < extra_start:
\n", - "
        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L112;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L112;\n",
+       "          PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_args, __pyx_t_3};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);\n",
+       "          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
        "        }\n",
-       "
 696:                     # Set diffeq results
\n", - "
+697:                     dydt_new_view[i] = diffeq_out_view[i]
\n", - "
          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_31 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_31 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "/* … */\n",
-       "          __pyx_t_25 = __pyx_v_i;\n",
-       "          __pyx_t_32 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_32 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_25 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "
 698: 
\n", - "
 699:                     # Set last array of K equal to dydt
\n", - "
+700:                     K_view[rk_n_stages, i] = dydt_new_view[i]
\n", - "
          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_31 = __pyx_v_rk_n_stages;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_31 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_24 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "          __pyx_t_25 = __pyx_v_i;\n",
-       "          __pyx_t_32 = __pyx_v_rk_n_stages;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_32 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_25 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "
 701: 
\n", - "
 702:                 else:
\n", - "
 703:                     # Set extra results
\n", - "
+704:                     extra_result_view[i - extra_start] = diffeq_out_view[i]
\n", - "
        /*else*/ {\n",
-       "          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "          *((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "        __pyx_L112:;\n",
-       "      }\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_t_25 = __pyx_v_i;\n",
-       "          __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_25 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "        __pyx_L112:;\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
        "      }\n",
-       "
 705: 
\n", - "
+706:             if rk_method == 2:
\n", - "
      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L113;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
        "      }\n",
+       "      #endif\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    }\n",
+       "    #endif\n",
+       "  }\n",
        "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L113;\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_12, 1);\n",
+       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
+       "    __Pyx_PyThreadState_declare\n",
+       "    __Pyx_PyThreadState_assign\n",
+       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
+       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
+       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_args\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  goto __pyx_L2;\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
+       "  __pyx_L2:;\n",
+       "  __Pyx_XDECREF((PyObject *)__pyx_v_arg_array);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args = {\"change_args\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  PyObject *__pyx_v_args = 0;\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_args (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,&__pyx_n_s_auto_reset_state,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "
 707:                 # Calculate Error for DOP853
\n", - "
 708:                 # Find norms for each error
\n", - "
+709:                 error_norm5 = 0.
\n", - "
        __pyx_v_error_norm5 = 0.;\n",
-       "/* … */\n",
-       "        __pyx_v_error_norm5 = 0.;\n",
-       "
+710:                 error_norm3 = 0.
\n", - "
        __pyx_v_error_norm3 = 0.;\n",
-       "/* … */\n",
-       "        __pyx_v_error_norm3 = 0.;\n",
-       "
 711:                 # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale
\n", - "
+712:                 for i in range(y_size):
\n", - "
        __pyx_t_7 = __pyx_v_y_size;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_7 = __pyx_v_y_size;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
+713:                     scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol
\n", - "
          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_27 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) ))));\n",
-       "          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_26 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_24 * __pyx_v_y_old_view.strides[0]) ))));\n",
-       "          if ((__pyx_t_27 > __pyx_t_26)) {\n",
-       "            __pyx_t_25 = __pyx_t_27;\n",
-       "          } else {\n",
-       "            __pyx_t_25 = __pyx_t_26;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_25 * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "          __pyx_t_25 = __pyx_v_i;\n",
-       "          __pyx_t_28 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) ))));\n",
-       "          __pyx_t_25 = __pyx_v_i;\n",
-       "          __pyx_t_27 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_25 * __pyx_v_y_old_view.strides[0]) ))));\n",
-       "          if ((__pyx_t_28 > __pyx_t_27)) {\n",
-       "            __pyx_t_26 = __pyx_t_28;\n",
-       "          } else {\n",
-       "            __pyx_t_26 = __pyx_t_27;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_26 * __pyx_v_rtol));\n",
-       "
+714:                     for j in range(rk_n_stages_plus1):
\n", - "
          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "            __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "            __pyx_v_j = __pyx_t_20;\n",
-       "
+715:                         if j == 0:
\n", - "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "
 716:                             # Initialize
\n", - "
+717:                             error_dot_1 = 0.
\n", - "
              __pyx_v_error_dot_1 = 0.;\n",
-       "/* … */\n",
-       "              __pyx_v_error_dot_1 = __pyx_t_double_complex_from_parts(0., 0);\n",
-       "
+718:                             error_dot_2 = 0.
\n", - "
              __pyx_v_error_dot_2 = 0.;\n",
-       "/* … */\n",
-       "              __pyx_v_error_dot_2 = __pyx_t_double_complex_from_parts(0., 0);\n",
-       "
 719: 
\n", - "
+720:                         K_scale = K_view[j, i] / <double_numeric>scale
\n", - "
            __pyx_t_24 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) / ((double)__pyx_v_scale));\n",
-       "/* … */\n",
-       "            __pyx_t_25 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = __Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_25 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))), __pyx_t_double_complex_from_parts(((double)__pyx_v_scale), 0));\n",
-       "
+721:                         error_dot_1 += K_scale * E3_view[j]
\n", - "
            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_v_error_dot_1 = (__pyx_v_error_dot_1 + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
-       "/* … */\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_v_error_dot_1 = __Pyx_c_sum_double(__pyx_v_error_dot_1, __Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
-       "
+722:                         error_dot_2 += K_scale * E5_view[j]
\n", - "
            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_v_error_dot_2 = (__pyx_v_error_dot_2 + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )))));\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_v_error_dot_2 = __Pyx_c_sum_double(__pyx_v_error_dot_2, __Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )))));\n",
-       "          }\n",
-       "
 723: 
\n", - "
+724:                     error_norm3_abs = dabs(error_dot_1)
\n", - "
          __pyx_v_error_norm3_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm3_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
-       "
+725:                     error_norm5_abs = dabs(error_dot_2)
\n", - "
          __pyx_v_error_norm5_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_2);\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm5_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_2);\n",
-       "
 726: 
\n", - "
+727:                     error_norm3 += (error_norm3_abs * error_norm3_abs)
\n", - "
          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
-       "
+728:                     error_norm5 += (error_norm5_abs * error_norm5_abs)
\n", - "
          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
-       "        }\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
-       "        }\n",
-       "
 729: 
\n", - "
 730:                 # Check if errors are zero
\n", - "
+731:                 if (error_norm5 == 0.) and (error_norm3 == 0.):
\n", - "
        __pyx_t_5 = (__pyx_v_error_norm5 == 0.);\n",
-       "        if (__pyx_t_5) {\n",
-       "        } else {\n",
-       "          __pyx_t_4 = __pyx_t_5;\n",
-       "          goto __pyx_L120_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_t_5 = (__pyx_v_error_norm3 == 0.);\n",
-       "        __pyx_t_4 = __pyx_t_5;\n",
-       "        __pyx_L120_bool_binop_done:;\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L119;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_5 = (__pyx_v_error_norm5 == 0.);\n",
-       "        if (__pyx_t_5) {\n",
-       "        } else {\n",
-       "          __pyx_t_4 = __pyx_t_5;\n",
-       "          goto __pyx_L120_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_t_5 = (__pyx_v_error_norm3 == 0.);\n",
-       "        __pyx_t_4 = __pyx_t_5;\n",
-       "        __pyx_L120_bool_binop_done:;\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L119;\n",
-       "        }\n",
-       "
+732:                     error_norm = 0.
\n", - "
          __pyx_v_error_norm = 0.;\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm = 0.;\n",
-       "
 733:                 else:
\n", - "
+734:                     error_denom = error_norm5 + 0.01 * error_norm3
\n", - "
        /*else*/ {\n",
-       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
-       "
+735:                     error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)
\n", - "
          __pyx_v_error_norm = ((__pyx_v_step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl)));\n",
-       "        }\n",
-       "        __pyx_L119:;\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm = ((__pyx_v_step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl)));\n",
-       "        }\n",
-       "        __pyx_L119:;\n",
-       "
 736: 
\n", - "
 737:             else:
\n", - "
 738:                 # Calculate Error for RK23 and RK45
\n", - "
 739:                 # Dot Product (K, E) * step / scale
\n", - "
+740:                 error_norm = 0.
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_error_norm = 0.;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_error_norm = 0.;\n",
-       "
+741:                 for i in range(y_size):
\n", - "
        __pyx_t_7 = __pyx_v_y_size;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_7 = __pyx_v_y_size;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
+742:                     scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol
\n", - "
          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_25 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) ))));\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_27 = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) ))));\n",
-       "          if ((__pyx_t_25 > __pyx_t_27)) {\n",
-       "            __pyx_t_26 = __pyx_t_25;\n",
-       "          } else {\n",
-       "            __pyx_t_26 = __pyx_t_27;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_26 * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_26 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) ))));\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_28 = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) ))));\n",
-       "          if ((__pyx_t_26 > __pyx_t_28)) {\n",
-       "            __pyx_t_27 = __pyx_t_26;\n",
-       "          } else {\n",
-       "            __pyx_t_27 = __pyx_t_28;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_27 * __pyx_v_rtol));\n",
-       "
+743:                     for j in range(rk_n_stages_plus1):
\n", - "
          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "            __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "            __pyx_v_j = __pyx_t_20;\n",
-       "
+744:                         if j == 0:
\n", - "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "
 745:                             # Initialize
\n", - "
+746:                             error_dot_1 = 0.
\n", - "
              __pyx_v_error_dot_1 = 0.;\n",
-       "/* … */\n",
-       "              __pyx_v_error_dot_1 = __pyx_t_double_complex_from_parts(0., 0);\n",
-       "
 747: 
\n", - "
+748:                         K_scale = K_view[j, i] / <double_numeric> scale
\n", - "
            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_24 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_24 * __pyx_v_K_view.strides[1]) ))) / ((double)__pyx_v_scale));\n",
-       "/* … */\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_25 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = __Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_25 * __pyx_v_K_view.strides[1]) ))), __pyx_t_double_complex_from_parts(((double)__pyx_v_scale), 0));\n",
-       "
+749:                         error_dot_1 += K_scale * E_view[j] * step
\n", - "
            __pyx_t_24 = __pyx_v_j;\n",
-       "            __pyx_v_error_dot_1 = (__pyx_v_error_dot_1 + ((__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_24 * __pyx_v_E_view.strides[0]) )))) * __pyx_v_step));\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_25 = __pyx_v_j;\n",
-       "            __pyx_v_error_dot_1 = __Pyx_c_sum_double(__pyx_v_error_dot_1, __Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_25 * __pyx_v_E_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
-       "          }\n",
-       "
 750: 
\n", - "
+751:                     error_norm_abs = dabs(error_dot_1)
\n", - "
          __pyx_v_error_norm_abs = __pyx_fuse_0__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm_abs = __pyx_fuse_1__pyx_f_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_dabs(__pyx_v_error_dot_1);\n",
-       "
+752:                     error_norm += (error_norm_abs * error_norm_abs)
\n", - "
          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
-       "        }\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
        "        }\n",
-       "
+753:                 error_norm = sqrt(error_norm) / y_size_sqrt
\n", - "
        __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_y_size_sqrt);\n",
        "      }\n",
-       "      __pyx_L113:;\n",
-       "/* … */\n",
-       "        __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_y_size_sqrt);\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_args\") < 0)) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
        "      }\n",
-       "      __pyx_L113:;\n",
-       "
 754: 
\n", - "
+755:             if error_norm < 1.:
\n", - "
      __pyx_t_4 = (__pyx_v_error_norm < 1.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L127;\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
+       "    }\n",
+       "    __pyx_v_args = ((PyObject*)values[0]);\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_auto_reset_state = ((bool)0);\n",
+       "    }\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_args\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1041, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_args\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10change_args(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_args, __pyx_v_auto_reset_state);\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __pyx_r = NULL;\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10change_args(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_args, bool __pyx_v_auto_reset_state) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_args\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 1;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_args(__pyx_v_self, __pyx_v_args, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_args\", __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_t_4 = (__pyx_v_error_norm < 1.);\n",
-       "      if (__pyx_t_4) {\n",
+       "  __pyx_tuple__61 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__61);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__61);\n",
+       "  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_args, 1041, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
        "/* … */\n",
-       "        goto __pyx_L127;\n",
+       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_args, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__63);\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_args, __pyx_t_7) < 0) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_tuple__63 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__63);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__63);\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args {\n",
+       "  int __pyx_n;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 1042: 
\n", + "
 1043:         # Determine optional arguments
\n", + "
 1044:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array
\n", + "
 1045: 
\n", + "
+1046:         self.num_args = len(args)
\n", + "
  if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "    PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
+       "    __PYX_ERR(0, 1046, __pyx_L1_error)\n",
+       "  }\n",
+       "  __pyx_t_7 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1046, __pyx_L1_error)\n",
+       "  __pyx_v_self->num_args = __pyx_t_7;\n",
+       "
+1047:         arg_array = np.empty(self.num_args, dtype=np.float64, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __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_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->num_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);\n",
+       "  {\n",
+       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
+       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
+       "    __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
+       "    if (unlikely(__pyx_t_6 < 0)) {\n",
+       "      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
+       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_arg_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
+       "        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
+       "        __Pyx_RaiseBufferFallbackError();\n",
+       "      } else {\n",
+       "        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
        "      }\n",
-       "
 756:                 # The error is low! Let's update this step for the next time loop
\n", - "
+757:                 if error_norm == 0.:
\n", - "
        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L128;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L128;\n",
-       "        }\n",
-       "
+758:                     step_factor = MAX_FACTOR
\n", - "
          __pyx_v_step_factor = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
-       "/* … */\n",
-       "          __pyx_v_step_factor = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
-       "
 759:                 else:
\n", - "
+760:                     error_pow = error_norm**-error_expo
\n", - "
        /*else*/ {\n",
-       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "
+761:                     step_factor = min(MAX_FACTOR, SAFETY * error_pow)
\n", - "
          __pyx_t_26 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
-       "          __pyx_t_25 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
-       "          if ((__pyx_t_26 < __pyx_t_25)) {\n",
-       "            __pyx_t_27 = __pyx_t_26;\n",
-       "          } else {\n",
-       "            __pyx_t_27 = __pyx_t_25;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_27;\n",
-       "        }\n",
-       "        __pyx_L128:;\n",
-       "/* … */\n",
-       "          __pyx_t_27 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
-       "          __pyx_t_26 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MAX_FACTOR;\n",
-       "          if ((__pyx_t_27 < __pyx_t_26)) {\n",
-       "            __pyx_t_28 = __pyx_t_27;\n",
-       "          } else {\n",
-       "            __pyx_t_28 = __pyx_t_26;\n",
+       "      __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
+       "    }\n",
+       "    __pyx_pybuffernd_arg_array.diminfo[0].strides = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arg_array.diminfo[0].shape = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.shape[0];\n",
+       "    if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
+       "  }\n",
+       "  __pyx_t_8 = 0;\n",
+       "  __pyx_v_arg_array = ((PyArrayObject *)__pyx_t_5);\n",
+       "  __pyx_t_5 = 0;\n",
+       "
+1048:         self.arg_array_view = arg_array
\n", + "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_arg_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 1048, __pyx_L1_error)\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->arg_array_view, 0);\n",
+       "  __pyx_v_self->arg_array_view = __pyx_t_12;\n",
+       "  __pyx_t_12.memview = NULL;\n",
+       "  __pyx_t_12.data = NULL;\n",
+       "
+1049:         for i in range(self.num_args):
\n", + "
  __pyx_t_7 = __pyx_v_self->num_args;\n",
+       "  __pyx_t_13 = __pyx_t_7;\n",
+       "  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {\n",
+       "    __pyx_v_i = __pyx_t_14;\n",
+       "
+1050:             self.arg_array_view[i] = args[i]
\n", + "
    if (unlikely(__pyx_v_args == Py_None)) {\n",
+       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
+       "      __PYX_ERR(0, 1050, __pyx_L1_error)\n",
+       "    }\n",
+       "    __pyx_t_15 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_v_args, __pyx_v_i)); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1050, __pyx_L1_error)\n",
+       "    __pyx_t_16 = __pyx_v_i;\n",
+       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->arg_array_view.data) + __pyx_t_16)) )) = __pyx_t_15;\n",
+       "  }\n",
+       "
 1051: 
\n", + "
 1052:         # A change to args will affect the first step's size
\n", + "
+1053:         self.recalc_firststep = True
\n", + "
  __pyx_v_self->recalc_firststep = 1;\n",
+       "
 1054: 
\n", + "
+1055:         if auto_reset_state:
\n", + "
  __pyx_t_17 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_17) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1056:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1056, __pyx_L1_error)\n",
+       "
 1057: 
\n", + "
 1058: 
\n", + "
+1059:     cpdef void change_tols(self, double rtol = NAN, double atol = NAN, bool_cpp_t auto_reset_state = False):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols *__pyx_optional_args) {\n",
+       "  double __pyx_v_rtol = __pyx_k__28;\n",
+       "  double __pyx_v_atol = __pyx_k__29;\n",
+       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_tols\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_rtol = __pyx_optional_args->rtol;\n",
+       "      if (__pyx_optional_args->__pyx_n > 1) {\n",
+       "        __pyx_v_atol = __pyx_optional_args->atol;\n",
+       "        if (__pyx_optional_args->__pyx_n > 2) {\n",
+       "          __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "        }\n",
+       "      }\n",
+       "    }\n",
+       "  }\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_tols); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols)) {\n",
+       "        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_rtol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __pyx_t_4 = PyFloat_FromDouble(__pyx_v_atol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_4);\n",
+       "        __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_5);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_6 = __pyx_t_1; __pyx_t_7 = NULL;\n",
+       "        __pyx_t_8 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {\n",
+       "          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);\n",
+       "          if (likely(__pyx_t_7)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);\n",
+       "            __Pyx_INCREF(__pyx_t_7);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_6, function);\n",
+       "            __pyx_t_8 = 1;\n",
        "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_28;\n",
        "        }\n",
-       "        __pyx_L128:;\n",
-       "
 762: 
\n", - "
+763:                 if step_rejected:
\n", - "
        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_5};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 3+__pyx_t_8);\n",
+       "          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
        "        }\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
+       "      }\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "      }\n",
+       "      #endif\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    }\n",
+       "    #endif\n",
+       "  }\n",
        "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_XDECREF(__pyx_t_7);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_tols\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols = {\"change_tols\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  double __pyx_v_rtol;\n",
+       "  double __pyx_v_atol;\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_tols (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_auto_reset_state,0};\n",
+       "    PyObject* values[3] = {0,0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
+       "      }\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
+       "          if (value) { values[0] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
        "        }\n",
-       "
 764:                     # There were problems with this step size on the previous step loop. Make sure factor does
\n", - "
 765:                     #    not exasperate them.
\n", - "
+766:                     step_factor = min(step_factor, 1.)
\n", - "
          __pyx_t_27 = 1.;\n",
-       "          __pyx_t_26 = __pyx_v_step_factor;\n",
-       "          if ((__pyx_t_27 < __pyx_t_26)) {\n",
-       "            __pyx_t_25 = __pyx_t_27;\n",
-       "          } else {\n",
-       "            __pyx_t_25 = __pyx_t_26;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_25;\n",
-       "/* … */\n",
-       "          __pyx_t_28 = 1.;\n",
-       "          __pyx_t_27 = __pyx_v_step_factor;\n",
-       "          if ((__pyx_t_28 < __pyx_t_27)) {\n",
-       "            __pyx_t_26 = __pyx_t_28;\n",
-       "          } else {\n",
-       "            __pyx_t_26 = __pyx_t_27;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_26;\n",
-       "
 767: 
\n", - "
+768:                 step_size = step_size * step_factor
\n", - "
        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
-       "/* … */\n",
-       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
-       "
+769:                 step_accepted = True
\n", - "
        __pyx_v_step_accepted = 1;\n",
-       "/* … */\n",
-       "        __pyx_v_step_accepted = 1;\n",
-       "
 770:             else:
\n", - "
+771:                 error_pow = error_norm**-error_expo
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "
+772:                 step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)
\n", - "
        __pyx_t_25 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
-       "        __pyx_t_27 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MIN_FACTOR;\n",
-       "        if ((__pyx_t_25 > __pyx_t_27)) {\n",
-       "          __pyx_t_26 = __pyx_t_25;\n",
-       "        } else {\n",
-       "          __pyx_t_26 = __pyx_t_27;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
        "        }\n",
-       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_26);\n",
-       "/* … */\n",
-       "        __pyx_t_26 = (__pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_SAFETY * __pyx_v_error_pow);\n",
-       "        __pyx_t_28 = __pyx_v_54_cython_magic_56da2061fc4785e067d5abafa3f6cd63e524969d_MIN_FACTOR;\n",
-       "        if ((__pyx_t_26 > __pyx_t_28)) {\n",
-       "          __pyx_t_27 = __pyx_t_26;\n",
-       "        } else {\n",
-       "          __pyx_t_27 = __pyx_t_28;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[2] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
        "        }\n",
-       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_27);\n",
-       "
+773:                 step_rejected = True
\n", - "
        __pyx_v_step_rejected = 1;\n",
        "      }\n",
-       "      __pyx_L127:;\n",
-       "    }\n",
-       "    __pyx_L87_break:;\n",
-       "/* … */\n",
-       "        __pyx_v_step_rejected = 1;\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_tols\") < 0)) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
+       "      }\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "      __pyx_L127:;\n",
-       "    }\n",
-       "    __pyx_L87_break:;\n",
-       "
 774: 
\n", - "
+775:         if step_error:
\n", - "
    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 776:             # Issue with step convergence
\n", - "
+777:             status = -1
\n", - "
      __pyx_v_status = -1;\n",
-       "/* … */\n",
-       "      __pyx_v_status = -1;\n",
-       "
+778:             break
\n", - "
      goto __pyx_L80_break;\n",
-       "/* … */\n",
-       "      goto __pyx_L80_break;\n",
-       "
+779:         elif not step_accepted:
\n", - "
    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 780:             # Issue with step convergence
\n", - "
+781:             status = -7
\n", - "
      __pyx_v_status = -7;\n",
-       "/* … */\n",
-       "      __pyx_v_status = -7;\n",
-       "
+782:             break
\n", - "
      goto __pyx_L80_break;\n",
-       "/* … */\n",
-       "      goto __pyx_L80_break;\n",
-       "
 783: 
\n", - "
 784:         # End of step loop. Update the _now variables
\n", - "
+785:         t_old = t_new
\n", - "
    __pyx_v_t_old = __pyx_v_t_new;\n",
-       "/* … */\n",
-       "    __pyx_v_t_old = __pyx_v_t_new;\n",
-       "
+786:         for i in range(y_size):
\n", - "
    __pyx_t_7 = __pyx_v_y_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_y_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+787:             y_old_view[i] = y_new_view[i]
\n", - "
      __pyx_t_24 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_25 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_25 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "
+788:             dydt_old_view[i] = dydt_new_view[i]
\n", - "
      __pyx_t_24 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_24 * __pyx_v_dydt_new_view.strides[0]) )));\n",
        "    }\n",
-       "/* … */\n",
-       "      __pyx_t_25 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_25 * __pyx_v_dydt_new_view.strides[0]) )));\n",
+       "    if (values[0]) {\n",
+       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_rtol = __pyx_k__28;\n",
        "    }\n",
-       "
 789: 
\n", - "
 790:         # Save data
\n", - "
+791:         if len_t >= (num_concats * expected_size_to_use):
\n", - "
    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_atol = __pyx_k__29;\n",
        "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "    if (values[2]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_auto_reset_state = ((bool)0);\n",
        "    }\n",
-       "
 792:             # There is more data than we have room in our arrays. 
\n", - "
 793:             # Build new arrays with more space.
\n", - "
 794:             # OPT: Note this is an expensive operation. 
\n", - "
+795:             num_concats += 1
\n", - "
      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
-       "/* … */\n",
-       "      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
-       "
+796:             new_size = num_concats * expected_size_to_use
\n", - "
      __pyx_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_tols\", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 1059, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_tols\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12change_tols(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol, __pyx_v_auto_reset_state);\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12change_tols(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_rtol, double __pyx_v_atol, bool __pyx_v_auto_reset_state) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_tols\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 3;\n",
+       "  __pyx_t_1.rtol = __pyx_v_rtol;\n",
+       "  __pyx_t_1.atol = __pyx_v_atol;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_tols(__pyx_v_self, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_tols\", __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_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
-       "
+797:             time_domain_array_new      = np.empty(new_size, dtype=np.float64, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_9);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
-       "      __pyx_t_9 = 0;\n",
-       "      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_2);\n",
-       "      __pyx_t_2 = 0;\n",
+       "  __pyx_k__28 = NAN;\n",
+       "  __pyx_k__29 = NAN;\n",
        "/* … */\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_9);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
-       "      __pyx_t_9 = 0;\n",
-       "      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
+       "  __pyx_tuple__64 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__64);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__64);\n",
+       "  __pyx_t_7 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "  __pyx_t_5 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);\n",
+       "  __Pyx_GIVEREF(__pyx_t_5);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);\n",
+       "  __Pyx_INCREF(Py_False);\n",
+       "  __Pyx_GIVEREF(Py_False);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_False);\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_5 = 0;\n",
+       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_tols, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_t_4);\n",
+       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_tols, __pyx_t_5) < 0) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_tols, 1059, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols {\n",
+       "  int __pyx_n;\n",
+       "  double rtol;\n",
+       "  double atol;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 1060: 
\n", + "
 1061:         # Update tolerances
\n", + "
+1062:         if not isnan(rtol):
\n", + "
  __pyx_t_9 = (!isnan(__pyx_v_rtol));\n",
+       "  if (__pyx_t_9) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1063:             self.rtol = rtol
\n", + "
    __pyx_v_self->rtol = __pyx_v_rtol;\n",
+       "
+1064:         if not isnan(atol):
\n", + "
  __pyx_t_9 = (!isnan(__pyx_v_atol));\n",
+       "  if (__pyx_t_9) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1065:             self.atol = atol
\n", + "
    __pyx_v_self->atol = __pyx_v_atol;\n",
+       "
 1066: 
\n", + "
+1067:         if self.rtol < EPS_100:
\n", + "
  __pyx_t_9 = (__pyx_v_self->rtol < __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100);\n",
+       "  if (__pyx_t_9) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1068:             self.rtol = EPS_100
\n", + "
    __pyx_v_self->rtol = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100;\n",
+       "
 1069:         # TODO: array based atol
\n", + "
 1070:         #     atol_arr = np.asarray(atol, dtype=)
\n", + "
 1071:         #     if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:
\n", + "
 1072:         #         # atol must be either the same for all y or must be provided as an array, one for each y.
\n", + "
 1073:         #         raise Exception
\n", + "
 1074: 
\n", + "
 1075:         # A change to tolerances will affect the first step's size
\n", + "
+1076:         self.recalc_firststep = True
\n", + "
  __pyx_v_self->recalc_firststep = 1;\n",
+       "
 1077: 
\n", + "
+1078:         if auto_reset_state:
\n", + "
  __pyx_t_9 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_9) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1079:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1079, __pyx_L1_error)\n",
+       "
 1080: 
\n", + "
 1081: 
\n", + "
+1082:     cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = False):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_max_step_size, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size *__pyx_optional_args) {\n",
+       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_max_step_size\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "    }\n",
+       "  }\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_max_step_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
        "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size)) {\n",
+       "        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_max_step_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_4);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
+       "        __pyx_t_7 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
+       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
+       "          if (likely(__pyx_t_6)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
+       "            __Pyx_INCREF(__pyx_t_6);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
+       "            __pyx_t_7 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
+       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
+       "      }\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "      }\n",
+       "      #endif\n",
        "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 797, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_2);\n",
-       "      __pyx_t_2 = 0;\n",
-       "
+798:             y_results_array_new        = np.empty((store_loop_size, new_size), dtype=DTYPE, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_GIVEREF(__pyx_t_2);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_15);\n",
-       "      __pyx_t_2 = 0;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_8);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "      __pyx_t_8 = 0;\n",
-       "      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_2);\n",
-       "      __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_9);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_GIVEREF(__pyx_t_2);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_15);\n",
-       "      __pyx_t_2 = 0;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_8);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "      __pyx_t_8 = 0;\n",
-       "      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_2);\n",
-       "      __pyx_t_2 = 0;\n",
-       "
+799:             time_domain_array_new_view = time_domain_array_new
\n", - "
      __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "      __pyx_v_time_domain_array_new_view = __pyx_t_10;\n",
-       "      __pyx_t_10.memview = NULL;\n",
-       "      __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "      __pyx_v_time_domain_array_new_view = __pyx_t_17;\n",
-       "      __pyx_t_17.memview = NULL;\n",
-       "      __pyx_t_17.data = NULL;\n",
-       "
+800:             y_results_array_new_view   = y_results_array_new
\n", - "
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "
 801: 
\n", - "
 802:             # Loop through time to fill in these new arrays with the old values
\n", - "
+803:             for i in range(len_t):
\n", - "
      __pyx_t_7 = __pyx_v_len_t;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_7 = __pyx_v_len_t;\n",
-       "      __pyx_t_3 = __pyx_t_7;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+804:                 time_domain_array_new_view[i] = time_domain_array_view[i]
\n", - "
        __pyx_t_24 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_12 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_24 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_25 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_12 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_25 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "
 805: 
\n", - "
+806:                 for j in range(store_loop_size):
\n", - "
        __pyx_t_17 = __pyx_v_store_loop_size;\n",
-       "        __pyx_t_18 = __pyx_t_17;\n",
-       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "          __pyx_v_j = __pyx_t_19;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    }\n",
+       "    #endif\n",
+       "  }\n",
        "/* … */\n",
-       "        __pyx_t_18 = __pyx_v_store_loop_size;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_j = __pyx_t_20;\n",
-       "
+807:                     y_results_array_new_view[j, i] = y_results_array_view[j, i]
\n", - "
          __pyx_t_24 = __pyx_v_j;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_31 = __pyx_v_j;\n",
-       "          __pyx_t_32 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_31 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_32 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_24 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
-       "        }\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_max_step_size\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size = {\"change_max_step_size\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  double __pyx_v_max_step_size;\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_max_step_size (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_step_size,&__pyx_n_s_auto_reset_state,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "/* … */\n",
-       "          __pyx_t_25 = __pyx_v_j;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_32 = __pyx_v_j;\n",
-       "          __pyx_t_33 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_32 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_33 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_25 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
        "        }\n",
        "      }\n",
-       "
 808: 
\n", - "
 809:             # No longer need the old arrays. Change where the view is pointing and delete them.
\n", - "
+810:             y_results_array_view = y_results_array_new
\n", - "
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 810, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 810, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "
+811:             time_domain_array_view = time_domain_array_new
\n", - "
      __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 811, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "      __pyx_v_time_domain_array_view = __pyx_t_10;\n",
-       "      __pyx_t_10.memview = NULL;\n",
-       "      __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 811, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "      __pyx_v_time_domain_array_view = __pyx_t_17;\n",
-       "      __pyx_t_17.memview = NULL;\n",
-       "      __pyx_t_17.data = NULL;\n",
-       "
 812:             # TODO: Delete the old arrays?
\n", - "
 813: 
\n", - "
 814:         # There should be room in the arrays to add new data.
\n", - "
+815:         time_domain_array_view[len_t] = t_new
\n", - "
    __pyx_t_12 = __pyx_v_len_t;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_len_t;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
-       "
 816:         # To match the format that scipy follows, we will take the transpose of y.
\n", - "
+817:         for i in range(store_loop_size):
\n", - "
    __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_store_loop_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+818:             if i < extra_start:
\n", - "
      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L140;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L140;\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_max_step_size\") < 0)) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
        "      }\n",
-       "
 819:                 # Pull from y result
\n", - "
+820:                 y_results_array_view[i, len_t] = y_new_view[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        __pyx_t_32 = __pyx_v_len_t;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_24 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_32 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_25 = __pyx_v_i;\n",
-       "        __pyx_t_33 = __pyx_v_len_t;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_25 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_33 * __pyx_v_y_results_array_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "
 821:             else:
\n", - "
 822:                 # Pull from extra
\n", - "
+823:                 y_results_array_view[i, len_t] = extra_result_view[i - extra_start]
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "        __pyx_t_32 = __pyx_v_i;\n",
-       "        __pyx_t_24 = __pyx_v_len_t;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_32 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )));\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "      __pyx_L140:;\n",
        "    }\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_12 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "        __pyx_t_33 = __pyx_v_i;\n",
-       "        __pyx_t_25 = __pyx_v_len_t;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_33 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_array_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_12 * __pyx_v_extra_result_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L140:;\n",
+       "    __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_auto_reset_state = ((bool)0);\n",
        "    }\n",
-       "
 824: 
\n", - "
 825:         # Increase number of time points.
\n", - "
+826:         len_t += 1
\n", - "
    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
-       "  }\n",
-       "  __pyx_L80_break:;\n",
-       "/* … */\n",
-       "    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
-       "  }\n",
-       "  __pyx_L80_break:;\n",
-       "
 827: 
\n", - "
 828:     # # Clean up output.
\n", - "
+829:     if status == 1:
\n", - "
  __pyx_t_4 = (__pyx_v_status == 1);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_status == 1);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+830:         success = True
\n", - "
    __pyx_v_success = 1;\n",
-       "/* … */\n",
-       "    __pyx_v_success = 1;\n",
-       "
 831: 
\n", - "
 832:     # Create output arrays. To match the format that scipy follows, we will take the transpose of y.
\n", - "
+833:     if success:
\n", - "
  __pyx_t_4 = (__pyx_v_success != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L142;\n",
        "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_max_step_size\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1082, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_max_step_size\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14change_max_step_size(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_max_step_size, __pyx_v_auto_reset_state);\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14change_max_step_size(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_max_step_size, bool __pyx_v_auto_reset_state) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_max_step_size\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 1;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_max_step_size(__pyx_v_self, __pyx_v_max_step_size, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_max_step_size\", __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_t_4 = (__pyx_v_success != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L142;\n",
-       "  }\n",
-       "
 834:         # Build final output arrays.
\n", - "
 835:         # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.
\n", - "
 836:         # This process will remove that junk and leave only the wanted data.
\n", - "
+837:         solution_y = np.empty((store_loop_size, len_t), dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_15);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_2;\n",
-       "    __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_15);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_2;\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+838:         solution_t = np.empty(len_t, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "
 839: 
\n", - "
 840:         # Link memory views
\n", - "
+841:         solution_y_view = solution_y
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 841, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 841, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+842:         solution_t_view = solution_t
\n", - "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
-       "    __pyx_t_17.memview = NULL;\n",
-       "    __pyx_t_17.data = NULL;\n",
-       "
 843: 
\n", - "
 844:         # Populate values
\n", - "
+845:         for i in range(len_t):
\n", - "
    __pyx_t_7 = __pyx_v_len_t;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_t;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+846:             solution_t_view[i] = time_domain_array_view[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_24 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_24 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_25 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_25 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "
+847:             for j in range(store_loop_size):
\n", - "
      __pyx_t_17 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
+       "  __pyx_tuple__66 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_max_step_size, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__66);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__66);\n",
+       "  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_max_step_size, 1082, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
        "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_j = __pyx_t_20;\n",
-       "
+848:                 solution_y_view[j, i] = y_results_array_view[j, i]
\n", - "
        __pyx_t_12 = __pyx_v_j;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        __pyx_t_32 = __pyx_v_j;\n",
-       "        __pyx_t_31 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_32 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_31 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_max_step_size, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__68);\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_max_step_size, __pyx_t_5) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_tuple__68 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__68);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__68);\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size {\n",
+       "  int __pyx_n;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 1083: 
\n", + "
+1084:         self.max_step_size = max_step_size
\n", + "
  __pyx_v_self->max_step_size = __pyx_v_max_step_size;\n",
+       "
 1085: 
\n", + "
+1086:         if auto_reset_state:
\n", + "
  __pyx_t_8 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_8) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1087:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1087, __pyx_L1_error)\n",
+       "
 1088: 
\n", + "
 1089: 
\n", + "
+1090:     cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = False):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_first_step, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step *__pyx_optional_args) {\n",
+       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_first_step\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "    }\n",
+       "  }\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_first_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step)) {\n",
+       "        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_first_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_4);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
+       "        __pyx_t_7 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
+       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
+       "          if (likely(__pyx_t_6)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
+       "            __Pyx_INCREF(__pyx_t_6);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
+       "            __pyx_t_7 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
+       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
        "      }\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "      }\n",
+       "      #endif\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
        "    }\n",
+       "    #endif\n",
+       "  }\n",
        "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        __pyx_t_25 = __pyx_v_i;\n",
-       "        __pyx_t_33 = __pyx_v_j;\n",
-       "        __pyx_t_32 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_33 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_32 * __pyx_v_solution_y_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_array_view.strides[1]) )));\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_first_step\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step = {\"change_first_step\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  double __pyx_v_first_step;\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_first_step (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_first_step,&__pyx_n_s_auto_reset_state,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
+       "      }\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
+       "        }\n",
+       "      }\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_first_step\") < 0)) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
+       "      }\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
        "    }\n",
-       "
 849:     else:
\n", - "
 850:         # Build nan arrays
\n", - "
+851:         solution_y = np.nan * np.ones((store_loop_size, 1), dtype=DTYPE, order='C')
\n", - "
  /*else*/ {\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "    __Pyx_INCREF(__pyx_int_1);\n",
-       "    __Pyx_GIVEREF(__pyx_int_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_9;\n",
-       "    __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);\n",
-       "    __Pyx_INCREF(__pyx_int_1);\n",
-       "    __Pyx_GIVEREF(__pyx_int_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_9);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_9;\n",
-       "    __pyx_t_9 = 0;\n",
-       "
+852:         solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nan); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_9;\n",
-       "    __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nan); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyNumber_Multiply(__pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_9;\n",
-       "    __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__19);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__19);\n",
-       "
 853: 
\n", - "
 854:         # Link memory views
\n", - "
+855:         solution_y_view = solution_y
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 855, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
+       "    __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_auto_reset_state = ((bool)0);\n",
+       "    }\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_first_step\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1090, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_first_step\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_16change_first_step(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_first_step, __pyx_v_auto_reset_state);\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_16change_first_step(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_first_step, bool __pyx_v_auto_reset_state) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_first_step\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 1;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_first_step(__pyx_v_self, __pyx_v_first_step, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_first_step\", __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_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 855, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+856:         solution_t_view = solution_t
\n", - "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "  }\n",
-       "  __pyx_L142:;\n",
+       "  __pyx_tuple__69 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_first_step, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__69);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__69);\n",
+       "  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_first_step, 1090, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
        "/* … */\n",
-       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
-       "    __pyx_t_17.memview = NULL;\n",
-       "    __pyx_t_17.data = NULL;\n",
-       "  }\n",
-       "  __pyx_L142:;\n",
-       "
 857: 
\n", - "
 858:     cdef double_numeric[:, :] y_results_reduced_view
\n", - "
 859:     cdef double_numeric[:] y_result_timeslice_view, y_result_temp_view, y_interp_view
\n", - "
 860: 
\n", - "
+861:     if run_interpolation and success:
\n", - "
  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_5) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_5;\n",
-       "    goto __pyx_L148_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_5 = (__pyx_v_success != 0);\n",
-       "  __pyx_t_4 = __pyx_t_5;\n",
-       "  __pyx_L148_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
+       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_first_step, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__71);\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_first_step, __pyx_t_5) < 0) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_tuple__71 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__71);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__71);\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step {\n",
+       "  int __pyx_n;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 1091: 
\n", + "
+1092:         self.first_step = first_step
\n", + "
  __pyx_v_self->first_step = __pyx_v_first_step;\n",
+       "
+1093:         if self.first_step == 0.:
\n", + "
  __pyx_t_8 = (__pyx_v_self->first_step == 0.);\n",
+       "  if (__pyx_t_8) {\n",
        "/* … */\n",
+       "    goto __pyx_L3;\n",
        "  }\n",
-       "/* … */\n",
-       "  __pyx_t_5 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_5) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_5;\n",
-       "    goto __pyx_L148_bool_binop_done;\n",
+       "
+1094:             self.step_size = self.calc_first_step()
\n", + "
    __pyx_v_self->step_size = ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->calc_first_step(__pyx_v_self);\n",
+       "
 1095:         else:
\n", + "
+1096:             if self.first_step <= 0.:
\n", + "
  /*else*/ {\n",
+       "    __pyx_t_8 = (__pyx_v_self->first_step <= 0.);\n",
+       "    if (unlikely(__pyx_t_8)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+1097:                 self.status = -8
\n", + "
      __pyx_v_self->status = -8;\n",
+       "
+1098:                 self.message = "Attribute error."
\n", + "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
+       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
+       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
+       "      __Pyx_DECREF(__pyx_v_self->message);\n",
+       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
+       "
+1099:                 raise AttributeError('Error in user-provided step size: Step size must be a positive number.')
\n", + "
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __PYX_ERR(0, 1099, __pyx_L1_error)\n",
+       "
+1100:             elif self.first_step > self.t_delta_abs:
\n", + "
    __pyx_t_8 = (__pyx_v_self->first_step > __pyx_v_self->t_delta_abs);\n",
+       "    if (unlikely(__pyx_t_8)) {\n",
+       "/* … */\n",
+       "    }\n",
+       "
+1101:                 self.status = -8
\n", + "
      __pyx_v_self->status = -8;\n",
+       "
+1102:                 self.message = "Attribute error."
\n", + "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
+       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
+       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
+       "      __Pyx_DECREF(__pyx_v_self->message);\n",
+       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
+       "
+1103:                 raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')
\n", + "
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1103, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      __PYX_ERR(0, 1103, __pyx_L1_error)\n",
+       "
+1104:             self.step_size = self.first_step
\n", + "
    __pyx_t_9 = __pyx_v_self->first_step;\n",
+       "    __pyx_v_self->step_size = __pyx_t_9;\n",
        "  }\n",
-       "  __pyx_t_5 = (__pyx_v_success != 0);\n",
-       "  __pyx_t_4 = __pyx_t_5;\n",
-       "  __pyx_L148_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "  __pyx_L3:;\n",
+       "
 1105: 
\n", + "
 1106:         # If first step has already been reset then no need to call it again later.
\n", + "
+1107:         self.recalc_firststep = False
\n", + "
  __pyx_v_self->recalc_firststep = 0;\n",
+       "
 1108: 
\n", + "
+1109:         if auto_reset_state:
\n", + "
  __pyx_t_8 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_8) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1110:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1110, __pyx_L1_error)\n",
+       "
 1111: 
\n", + "
 1112: 
\n", + "
+1113:     cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = False):
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_t_eval, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval *__pyx_optional_args) {\n",
+       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
+       "  PyArrayObject *__pyx_v_t_eval_array = 0;\n",
+       "  Py_ssize_t __pyx_v_i;\n",
+       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_t_eval_array;\n",
+       "  __Pyx_Buffer __pyx_pybuffer_t_eval_array;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_t_eval\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "    }\n",
+       "  }\n",
+       "  __pyx_pybuffer_t_eval_array.pybuffer.buf = NULL;\n",
+       "  __pyx_pybuffer_t_eval_array.refcount = 0;\n",
+       "  __pyx_pybuffernd_t_eval_array.data = NULL;\n",
+       "  __pyx_pybuffernd_t_eval_array.rcbuffer = &__pyx_pybuffer_t_eval_array;\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_t_eval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval)) {\n",
+       "        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_4);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
+       "        __pyx_t_7 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
+       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
+       "          if (likely(__pyx_t_6)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
+       "            __Pyx_INCREF(__pyx_t_6);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
+       "            __pyx_t_7 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
+       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
+       "      }\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "      }\n",
+       "      #endif\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    }\n",
+       "    #endif\n",
        "  }\n",
-       "
+862:         old_status = status
\n", - "
    __pyx_v_old_status = __pyx_v_status;\n",
-       "/* … */\n",
-       "    __pyx_v_old_status = __pyx_v_status;\n",
-       "
+863:         status = 2
\n", - "
    __pyx_v_status = 2;\n",
-       "/* … */\n",
-       "    __pyx_v_status = 2;\n",
-       "
 864:         # User only wants data at specific points.
\n", - "
 865: 
\n", - "
 866:         # The current version of this function has not implemented sicpy's dense output.
\n", - "
 867:         #   Instead we use an interpolation.
\n", - "
 868:         # OPT: this could be done inside the integration loop for performance gains.
\n", - "
+869:         y_results_reduced       = np.empty((total_size, len_teval), dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_8);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_8 = 0;\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_y_results_reduced = __pyx_t_9;\n",
-       "    __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_8);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_8 = 0;\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_y_results_reduced = __pyx_t_9;\n",
-       "    __pyx_t_9 = 0;\n",
-       "
+870:         y_result_timeslice      = np.empty(len_t, dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_v_y_result_timeslice = __pyx_t_15;\n",
-       "    __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_t); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __pyx_v_y_result_timeslice = __pyx_t_15;\n",
-       "    __pyx_t_15 = 0;\n",
-       "
+871:         y_result_temp           = np.empty(len_teval, dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_15);\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_y_result_temp = __pyx_t_2;\n",
-       "    __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_15);\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 871, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_y_result_temp = __pyx_t_2;\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+872:         y_results_reduced_view  = y_results_reduced
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_reduced, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 872, __pyx_L1_error)\n",
-       "    __pyx_v_y_results_reduced_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_reduced, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 872, __pyx_L1_error)\n",
-       "    __pyx_v_y_results_reduced_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+873:         y_result_timeslice_view = y_result_timeslice
\n", - "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_timeslice, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 873, __pyx_L1_error)\n",
-       "    __pyx_v_y_result_timeslice_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_timeslice, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 873, __pyx_L1_error)\n",
-       "    __pyx_v_y_result_timeslice_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "
+874:         y_result_temp_view      = y_result_temp
\n", - "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_temp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 874, __pyx_L1_error)\n",
-       "    __pyx_v_y_result_temp_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_temp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 874, __pyx_L1_error)\n",
-       "    __pyx_v_y_result_temp_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "
 875: 
\n", - "
+876:         for j in range(y_size):
\n", - "
    __pyx_t_7 = __pyx_v_y_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_j = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_y_size;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_j = __pyx_t_11;\n",
-       "
 877:             # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", - "
 878:             # # Set timeslice equal to the time values at this y_j
\n", - "
+879:             for i in range(len_t):
\n", - "
      __pyx_t_17 = __pyx_v_len_t;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_i = __pyx_t_19;\n",
        "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_len_t;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_i = __pyx_t_20;\n",
-       "
+880:                 y_result_timeslice_view[i] = solution_y_view[j, i]
\n", - "
        __pyx_t_24 = __pyx_v_j;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_31 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_31 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_24 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_12 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);\n",
+       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
+       "    __Pyx_PyThreadState_declare\n",
+       "    __Pyx_PyThreadState_assign\n",
+       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
+       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
+       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_eval\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  goto __pyx_L2;\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
+       "  __pyx_L2:;\n",
+       "  __Pyx_XDECREF((PyObject *)__pyx_v_t_eval_array);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval = {\"change_t_eval\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_t_eval (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_eval,&__pyx_n_s_auto_reset_state,0};\n",
+       "    PyObject* values[2] = {0,0};\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "/* … */\n",
-       "        __pyx_t_25 = __pyx_v_j;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_32 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_32 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_25 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_12 * __pyx_v_solution_y_view.strides[1]) )));\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval)) != 0)) kw_args--;\n",
+       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
+       "        else goto __pyx_L5_argtuple_error;\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
+       "        }\n",
        "      }\n",
-       "
 881: 
\n", - "
 882:             # Perform numerical interpolation
\n", - "
 883:             if double_numeric is cython.doublecomplex:
\n", - "
+884:                 interp_complex_array(
\n", - "
      __pyx_f_4CyRK_5array_6interp_interp_complex_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 884, __pyx_L1_error)\n",
-       "
 885:                     t_eval,
\n", - "
 886:                     solution_t_view,
\n", - "
 887:                     y_result_timeslice_view,
\n", - "
 888:                     y_result_temp_view
\n", - "
 889:                     )
\n", - "
 890:             else:
\n", - "
+891:                 interp_array(
\n", - "
      __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 891, __pyx_L1_error)\n",
-       "
 892:                     t_eval,
\n", - "
 893:                     solution_t_view,
\n", - "
 894:                     y_result_timeslice_view,
\n", - "
 895:                     y_result_temp_view
\n", - "
 896:                     )
\n", - "
 897: 
\n", - "
 898:             # Store result.
\n", - "
+899:             for i in range(len_teval):
\n", - "
      __pyx_t_17 = __pyx_v_len_teval;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_i = __pyx_t_19;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_len_teval;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_i = __pyx_t_20;\n",
-       "
+900:                 y_results_reduced_view[j, i] = y_result_temp_view[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_24 = __pyx_v_j;\n",
-       "        __pyx_t_31 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_31 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_12 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_t_eval\") < 0)) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
+       "      }\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
        "    }\n",
+       "    __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(values[0], 0); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_auto_reset_state = ((bool)0);\n",
+       "    }\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_t_eval\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1113, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_eval\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_18change_t_eval(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_t_eval, __pyx_v_auto_reset_state);\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_18change_t_eval(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_auto_reset_state) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_t_eval\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 1;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_t_eval(__pyx_v_self, __pyx_v_t_eval, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_eval\", __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__72 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_t_eval, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__72);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__72);\n",
+       "  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_t_eval, 1113, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
        "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_25 = __pyx_v_j;\n",
-       "        __pyx_t_32 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_32 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_12 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
+       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_t_eval, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__74);\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_t_eval, __pyx_t_5) < 0) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_tuple__74 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__74);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__74);\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval {\n",
+       "  int __pyx_n;\n",
+       "  bool auto_reset_state;\n",
+       "};\n",
+       "
 1114: 
\n", + "
 1115:         # Determine interpolation information
\n", + "
 1116:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array
\n", + "
 1117: 
\n", + "
+1118:         self.run_interpolation = True
\n", + "
  __pyx_v_self->run_interpolation = 1;\n",
+       "
+1119:         self.len_t_eval = len(t_eval)
\n", + "
  __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_t_eval); \n",
+       "  __pyx_v_self->len_t_eval = __pyx_t_8;\n",
+       "
 1120: 
\n", + "
+1121:         t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')
\n", + "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __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_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "  __Pyx_GIVEREF(__pyx_t_1);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);\n",
+       "  __pyx_t_1 = 0;\n",
+       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_1);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);\n",
+       "  {\n",
+       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
+       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
+       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
+       "    if (unlikely(__pyx_t_7 < 0)) {\n",
+       "      PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);\n",
+       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_t_eval_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
+       "        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12);\n",
+       "        __Pyx_RaiseBufferFallbackError();\n",
+       "      } else {\n",
+       "        PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12);\n",
        "      }\n",
+       "      __pyx_t_10 = __pyx_t_11 = __pyx_t_12 = 0;\n",
        "    }\n",
-       "
 901: 
\n", - "
+902:         if capture_extra:
\n", - "
    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
+       "    __pyx_pybuffernd_t_eval_array.diminfo[0].strides = __pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_t_eval_array.diminfo[0].shape = __pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer.shape[0];\n",
+       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
+       "  }\n",
+       "  __pyx_t_9 = 0;\n",
+       "  __pyx_v_t_eval_array = ((PyArrayObject *)__pyx_t_3);\n",
+       "  __pyx_t_3 = 0;\n",
+       "
+1122:         self.t_eval_view = t_eval_array
\n", + "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_t_eval_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 1122, __pyx_L1_error)\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->t_eval_view, 0);\n",
+       "  __pyx_v_self->t_eval_view = __pyx_t_13;\n",
+       "  __pyx_t_13.memview = NULL;\n",
+       "  __pyx_t_13.data = NULL;\n",
+       "
+1123:         for i in range(self.len_t_eval):
\n", + "
  __pyx_t_8 = __pyx_v_self->len_t_eval;\n",
+       "  __pyx_t_14 = __pyx_t_8;\n",
+       "  for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {\n",
+       "    __pyx_v_i = __pyx_t_15;\n",
+       "
+1124:             self.t_eval_view[i] = t_eval[i]
\n", + "
    __pyx_t_16 = __pyx_v_i;\n",
+       "    __pyx_t_17 = __pyx_v_i;\n",
+       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->t_eval_view.data) + __pyx_t_17)) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_16 * __pyx_v_t_eval.strides[0]) )));\n",
+       "  }\n",
+       "
 1125: 
\n", + "
+1126:         if auto_reset_state:
\n", + "
  __pyx_t_18 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_18) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1127:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1127, __pyx_L1_error)\n",
+       "
 1128: 
\n", + "
 1129: 
\n", + "
+1130:     cpdef void change_parameters(
\n", + "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters *__pyx_optional_args) {\n",
+       "  __pyx_ctuple_double__and_double __pyx_v_t_span = __pyx_k__30;\n",
+       "  __Pyx_memviewslice __pyx_v_y0 = __pyx_k__31;\n",
+       "/* … */\n",
+       "  /* Check if called by wrapper */\n",
+       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
+       "  /* Check if overridden in Python */\n",
+       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
+       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
+       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      #endif\n",
+       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_parameters); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "      __Pyx_GOTREF(__pyx_t_1);\n",
+       "      #ifdef __Pyx_CyFunction_USED\n",
+       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
+       "      #else\n",
+       "      if (!PyCFunction_Check(__pyx_t_1)\n",
+       "      #endif\n",
+       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters)) {\n",
+       "        __pyx_t_3 = __pyx_convert__to_py___pyx_ctuple_double__and_double(__pyx_v_t_span); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_3);\n",
+       "        __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_4);\n",
+       "        __pyx_t_5 = PyFloat_FromDouble(__pyx_v_rtol); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_5);\n",
+       "        __pyx_t_6 = PyFloat_FromDouble(__pyx_v_atol); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_6);\n",
+       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_max_step_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_7);\n",
+       "        __pyx_t_8 = PyFloat_FromDouble(__pyx_v_first_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_8);\n",
+       "        __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_9);\n",
+       "        __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_10);\n",
+       "        __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_v_auto_solve); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "        __Pyx_GOTREF(__pyx_t_11);\n",
+       "        __Pyx_INCREF(__pyx_t_1);\n",
+       "        __pyx_t_12 = __pyx_t_1; __pyx_t_13 = NULL;\n",
+       "        __pyx_t_14 = 0;\n",
+       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {\n",
+       "          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);\n",
+       "          if (likely(__pyx_t_13)) {\n",
+       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);\n",
+       "            __Pyx_INCREF(__pyx_t_13);\n",
+       "            __Pyx_INCREF(function);\n",
+       "            __Pyx_DECREF_SET(__pyx_t_12, function);\n",
+       "            __pyx_t_14 = 1;\n",
+       "          }\n",
+       "        }\n",
+       "        {\n",
+       "          PyObject *__pyx_callargs[11] = {__pyx_t_13, __pyx_t_3, __pyx_t_4, __pyx_v_args, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_11};\n",
+       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_14, 10+__pyx_t_14);\n",
+       "          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;\n",
+       "          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;\n",
+       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "          __Pyx_GOTREF(__pyx_t_2);\n",
+       "          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;\n",
+       "        }\n",
+       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "        goto __pyx_L0;\n",
+       "      }\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
+       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
+       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
+       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
+       "      }\n",
+       "      #endif\n",
+       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
+       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
        "    }\n",
+       "    #endif\n",
+       "  }\n",
        "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "    if (__pyx_t_4) {\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_XDECREF(__pyx_t_5);\n",
+       "  __Pyx_XDECREF(__pyx_t_6);\n",
+       "  __Pyx_XDECREF(__pyx_t_7);\n",
+       "  __Pyx_XDECREF(__pyx_t_8);\n",
+       "  __Pyx_XDECREF(__pyx_t_9);\n",
+       "  __Pyx_XDECREF(__pyx_t_10);\n",
+       "  __Pyx_XDECREF(__pyx_t_11);\n",
+       "  __Pyx_XDECREF(__pyx_t_12);\n",
+       "  __Pyx_XDECREF(__pyx_t_13);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_parameters\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __pyx_L0:;\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "}\n",
+       "\n",
+       "/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       "); /*proto*/\n",
+       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters = {\"change_parameters\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters(PyObject *__pyx_v_self, \n",
+       "#if CYTHON_METH_FASTCALL\n",
+       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
+       "#else\n",
+       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
+       "#endif\n",
+       ") {\n",
+       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
+       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  PyObject *__pyx_v_args = 0;\n",
+       "  double __pyx_v_rtol;\n",
+       "  double __pyx_v_atol;\n",
+       "  double __pyx_v_max_step_size;\n",
+       "  double __pyx_v_first_step;\n",
+       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
+       "  bool __pyx_v_auto_reset_state;\n",
+       "  bool __pyx_v_auto_solve;\n",
+       "  #if !CYTHON_METH_FASTCALL\n",
+       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
+       "  #endif\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_parameters (wrapper)\", 0);\n",
+       "  {\n",
+       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step_size,&__pyx_n_s_first_step,&__pyx_n_s_t_eval,&__pyx_n_s_auto_reset_state,&__pyx_n_s_auto_solve,0};\n",
+       "    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};\n",
        "/* … */\n",
-       "    }\n",
-       "
 903:             # Right now if there is any extra output then it is stored at each time step used in the RK loop.
\n", - "
 904:             # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?
\n", - "
 905:             #  or do we use the interpolation on y to find new values.
\n", - "
 906:             # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.
\n", - "
+907:             if interpolate_extra:
\n", - "
      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
-       "      if (__pyx_t_4) {\n",
+       "  /* function exit code */\n",
+       "  goto __pyx_L0;\n",
+       "  __pyx_L1_error:;\n",
+       "  __pyx_r = NULL;\n",
+       "  __pyx_L0:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_20change_parameters(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step_size, double __pyx_v_first_step, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_auto_reset_state, bool __pyx_v_auto_solve) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_parameters\", 0);\n",
+       "  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1.__pyx_n = 10;\n",
+       "  __pyx_t_1.t_span = __pyx_v_t_span;\n",
+       "  __pyx_t_1.y0 = __pyx_v_y0;\n",
+       "  __pyx_t_1.args = __pyx_v_args;\n",
+       "  __pyx_t_1.rtol = __pyx_v_rtol;\n",
+       "  __pyx_t_1.atol = __pyx_v_atol;\n",
+       "  __pyx_t_1.max_step_size = __pyx_v_max_step_size;\n",
+       "  __pyx_t_1.first_step = __pyx_v_first_step;\n",
+       "  __pyx_t_1.t_eval = __pyx_v_t_eval;\n",
+       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
+       "  __pyx_t_1.auto_solve = __pyx_v_auto_solve;\n",
+       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_parameters(__pyx_v_self, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_r = __pyx_t_2;\n",
+       "  __pyx_t_2 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_parameters\", __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",
-       "        goto __pyx_L157;\n",
-       "      }\n",
+       "  __pyx_tuple__75 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_t_span, __pyx_n_s_y0, __pyx_n_s_args, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_max_step_size, __pyx_n_s_first_step, __pyx_n_s_t_eval, __pyx_n_s_auto_reset_state, __pyx_n_s_auto_solve); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_tuple__75);\n",
+       "  __Pyx_GIVEREF(__pyx_tuple__75);\n",
        "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
-       "      if (__pyx_t_4) {\n",
+       "  __pyx_t_20 = PyTuple_New(10); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_20);\n",
+       "  __Pyx_GIVEREF(__pyx_t_5);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_5);\n",
+       "  __Pyx_GIVEREF(__pyx_t_4);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_4);\n",
+       "  __Pyx_INCREF(Py_None);\n",
+       "  __Pyx_GIVEREF(Py_None);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 2, Py_None);\n",
+       "  __Pyx_GIVEREF(__pyx_t_7);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 3, __pyx_t_7);\n",
+       "  __Pyx_GIVEREF(__pyx_t_16);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 4, __pyx_t_16);\n",
+       "  __Pyx_GIVEREF(__pyx_t_17);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 5, __pyx_t_17);\n",
+       "  __Pyx_GIVEREF(__pyx_t_18);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 6, __pyx_t_18);\n",
+       "  __Pyx_GIVEREF(__pyx_t_19);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 7, __pyx_t_19);\n",
+       "  __Pyx_INCREF(Py_True);\n",
+       "  __Pyx_GIVEREF(Py_True);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 8, Py_True);\n",
+       "  __Pyx_INCREF(Py_False);\n",
+       "  __Pyx_GIVEREF(Py_False);\n",
+       "  PyTuple_SET_ITEM(__pyx_t_20, 9, Py_False);\n",
+       "  __pyx_t_5 = 0;\n",
+       "  __pyx_t_4 = 0;\n",
+       "  __pyx_t_7 = 0;\n",
+       "  __pyx_t_16 = 0;\n",
+       "  __pyx_t_17 = 0;\n",
+       "  __pyx_t_18 = 0;\n",
+       "  __pyx_t_19 = 0;\n",
+       "  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_parameters, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_19);\n",
+       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_t_20);\n",
+       "  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;\n",
+       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_parameters, __pyx_t_19) < 0) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;\n",
+       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
+       "  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(11, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_parameters, 1130, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
+       "/* … */\n",
+       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters {\n",
+       "  int __pyx_n;\n",
+       "  __pyx_ctuple_double__and_double t_span;\n",
+       "  __Pyx_memviewslice y0;\n",
+       "  PyObject *args;\n",
+       "  double rtol;\n",
+       "  double atol;\n",
+       "  double max_step_size;\n",
+       "  double first_step;\n",
+       "  __Pyx_memviewslice t_eval;\n",
+       "  bool auto_reset_state;\n",
+       "  bool auto_solve;\n",
+       "};\n",
+       "
 1131:             self,
\n", + "
+1132:             (double, double) t_span = EMPTY_T_SPAN,
\n", + "
  __pyx_k__30 = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EMPTY_T_SPAN;\n",
        "/* … */\n",
-       "        goto __pyx_L157;\n",
+       "  __pyx_t_5 = __pyx_convert__to_py___pyx_ctuple_double__and_double(__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EMPTY_T_SPAN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1132, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_5);\n",
+       "
+1133:             const double[::1] y0 = None,
\n", + "
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 1133, __pyx_L1_error)\n",
+       "  __pyx_k__31 = __pyx_t_14;\n",
+       "  __pyx_t_14.memview = NULL;\n",
+       "  __pyx_t_14.data = NULL;\n",
+       "/* … */\n",
+       "  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 1133, __pyx_L1_error)\n",
+       "  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_14, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1133, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_4);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 1);\n",
+       "  __pyx_t_14.memview = NULL; __pyx_t_14.data = NULL;\n",
+       "
+1134:             tuple args = None,
\n", + "
  PyObject *__pyx_v_args = ((PyObject*)Py_None);\n",
+       "  double __pyx_v_rtol = __pyx_k__32;\n",
+       "  double __pyx_v_atol = __pyx_k__33;\n",
+       "  double __pyx_v_max_step_size = __pyx_k__34;\n",
+       "  double __pyx_v_first_step = __pyx_k__35;\n",
+       "  __Pyx_memviewslice __pyx_v_t_eval = __pyx_k__36;\n",
+       "/* … */\n",
+       "    values[2] = ((PyObject*)Py_None);\n",
+       "    if (__pyx_kwds) {\n",
+       "      Py_ssize_t kw_args;\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
-       "
 908:                 # Continue the interpolation for the extra values.
\n", - "
+909:                 for j in range(num_extra):
\n", - "
        __pyx_t_7 = __pyx_v_num_extra;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_j = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_7 = __pyx_v_num_extra;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_j = __pyx_t_11;\n",
-       "
 910:                     # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", - "
 911:                     # # Set timeslice equal to the time values at this y_j
\n", - "
+912:                     for i in range(len_t):
\n", - "
          __pyx_t_17 = __pyx_v_len_t;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "            __pyx_v_i = __pyx_t_19;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_len_t;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "            __pyx_v_i = __pyx_t_20;\n",
-       "
+913:                         y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]
\n", - "
            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_31 = __pyx_v_i;\n",
-       "            __pyx_t_24 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_24 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_31 * __pyx_v_solution_y_view.strides[1]) )));\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_32 = __pyx_v_i;\n",
-       "            __pyx_t_25 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_timeslice_view.data + __pyx_t_25 * __pyx_v_y_result_timeslice_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_32 * __pyx_v_solution_y_view.strides[1]) )));\n",
-       "          }\n",
-       "
 914: 
\n", - "
 915:                     # Perform numerical interpolation
\n", - "
 916:                     if double_numeric is cython.doublecomplex:
\n", - "
+917:                         interp_complex_array(
\n", - "
          __pyx_f_4CyRK_5array_6interp_interp_complex_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 917, __pyx_L1_error)\n",
-       "
 918:                                 t_eval,
\n", - "
 919:                                 solution_t_view,
\n", - "
 920:                                 y_result_timeslice_view,
\n", - "
 921:                                 y_result_temp_view
\n", - "
 922:                                 )
\n", - "
 923:                     else:
\n", - "
+924:                         interp_array(
\n", - "
          __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 924, __pyx_L1_error)\n",
-       "
 925:                                 t_eval,
\n", - "
 926:                                 solution_t_view,
\n", - "
 927:                                 y_result_timeslice_view,
\n", - "
 928:                                 y_result_temp_view
\n", - "
 929:                                 )
\n", - "
 930: 
\n", - "
 931:                     # Store result.
\n", - "
+932:                     for i in range(len_teval):
\n", - "
          __pyx_t_17 = __pyx_v_len_teval;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "            __pyx_v_i = __pyx_t_19;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_len_teval;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "            __pyx_v_i = __pyx_t_20;\n",
-       "
+933:                         y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]
\n", - "
            __pyx_t_31 = __pyx_v_i;\n",
-       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_24 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_31 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
-       "          }\n",
+       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case  0:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span);\n",
+       "          if (value) { values[0] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
        "        }\n",
-       "/* … */\n",
-       "            __pyx_t_32 = __pyx_v_i;\n",
-       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_25 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_result_temp_view.data + __pyx_t_32 * __pyx_v_y_result_temp_view.strides[0]) )));\n",
-       "          }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0);\n",
+       "          if (value) { values[1] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
        "        }\n",
-       "
 934:             else:
\n", - "
 935:                 # Use y and t to recalculate the extra outputs
\n", - "
+936:                 y_interp = np.empty(y_size, dtype=DTYPE)
\n", - "
      /*else*/ {\n",
-       "        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_GIVEREF(__pyx_t_2);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "        __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_v_y_interp = __pyx_t_9;\n",
-       "        __pyx_t_9 = 0;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_GIVEREF(__pyx_t_2);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "        __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 936, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_v_y_interp = __pyx_t_9;\n",
-       "        __pyx_t_9 = 0;\n",
-       "
+937:                 y_interp_view = y_interp
\n", - "
        __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_interp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 937, __pyx_L1_error)\n",
-       "        __pyx_v_y_interp_view = __pyx_t_10;\n",
-       "        __pyx_t_10.memview = NULL;\n",
-       "        __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "        __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_interp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 937, __pyx_L1_error)\n",
-       "        __pyx_v_y_interp_view = __pyx_t_10;\n",
-       "        __pyx_t_10.memview = NULL;\n",
-       "        __pyx_t_10.data = NULL;\n",
-       "
+938:                 for i in range(len_teval):
\n", - "
        __pyx_t_7 = __pyx_v_len_teval;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_7 = __pyx_v_len_teval;\n",
-       "        __pyx_t_3 = __pyx_t_7;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
+939:                     time_ = t_eval[i]
\n", - "
          __pyx_t_31 = __pyx_v_i;\n",
-       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_31 * __pyx_v_t_eval.strides[0]) )));\n",
-       "/* … */\n",
-       "          __pyx_t_32 = __pyx_v_i;\n",
-       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_32 * __pyx_v_t_eval.strides[0]) )));\n",
-       "
+940:                     for j in range(y_size):
\n", - "
          __pyx_t_17 = __pyx_v_y_size;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "            __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_y_size;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "            __pyx_v_j = __pyx_t_20;\n",
-       "
+941:                         y_interp_view[j] = y_results_reduced_view[j, i]
\n", - "
            __pyx_t_31 = __pyx_v_j;\n",
-       "            __pyx_t_24 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_y_interp_view.data + __pyx_t_12 * __pyx_v_y_interp_view.strides[0]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_31 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_32 = __pyx_v_j;\n",
-       "            __pyx_t_25 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_interp_view.data + __pyx_t_12 * __pyx_v_y_interp_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_32 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
-       "          }\n",
-       "
 942: 
\n", - "
+943:                     if use_args:
\n", - "
          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            goto __pyx_L168;\n",
-       "          }\n",
-       "/* … */\n",
-       "          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            goto __pyx_L168;\n",
-       "          }\n",
-       "
+944:                         diffeq(time_, y_interp, diffeq_out, *args)
\n", - "
            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_9);\n",
-       "            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_GIVEREF(__pyx_t_9);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
-       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
-       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_interp);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "            __pyx_t_9 = 0;\n",
-       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "              __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            }\n",
-       "            __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_9);\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_9);\n",
-       "            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_GIVEREF(__pyx_t_9);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_9);\n",
-       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
-       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_interp);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "            __pyx_t_9 = 0;\n",
-       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "              __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            }\n",
-       "            __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_9);\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "
 945:                     else:
\n", - "
+946:                         diffeq(time_, y_interp, diffeq_out)
\n", - "
          /*else*/ {\n",
-       "            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_9);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "            __pyx_t_8 = __pyx_v_diffeq; __pyx_t_15 = NULL;\n",
-       "            __pyx_t_13 = 0;\n",
-       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
-       "              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);\n",
-       "              if (likely(__pyx_t_15)) {\n",
-       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
-       "                __Pyx_INCREF(__pyx_t_15);\n",
-       "                __Pyx_INCREF(function);\n",
-       "                __Pyx_DECREF_SET(__pyx_t_8, function);\n",
-       "                __pyx_t_13 = 1;\n",
-       "              }\n",
-       "            }\n",
-       "            {\n",
-       "              PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_9, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
-       "              __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "              __Pyx_GOTREF(__pyx_t_2);\n",
-       "              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "            }\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          }\n",
-       "          __pyx_L168:;\n",
-       "/* … */\n",
-       "          /*else*/ {\n",
-       "            __pyx_t_9 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_9);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "            __pyx_t_8 = __pyx_v_diffeq; __pyx_t_15 = NULL;\n",
-       "            __pyx_t_13 = 0;\n",
-       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {\n",
-       "              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);\n",
-       "              if (likely(__pyx_t_15)) {\n",
-       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);\n",
-       "                __Pyx_INCREF(__pyx_t_15);\n",
-       "                __Pyx_INCREF(function);\n",
-       "                __Pyx_DECREF_SET(__pyx_t_8, function);\n",
-       "                __pyx_t_13 = 1;\n",
-       "              }\n",
-       "            }\n",
-       "            {\n",
-       "              PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_9, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
-       "              __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "              __Pyx_GOTREF(__pyx_t_2);\n",
-       "              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "            }\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          }\n",
-       "          __pyx_L168:;\n",
-       "
 947: 
\n", - "
+948:                     for j in range(num_extra):
\n", - "
          __pyx_t_17 = __pyx_v_num_extra;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "            __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_num_extra;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "            __pyx_v_j = __pyx_t_20;\n",
-       "
+949:                         y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]
\n", - "
            __pyx_t_24 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_31 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_31 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "          }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
+       "          if (value) { values[2] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
        "        }\n",
-       "      }\n",
-       "      __pyx_L157:;\n",
-       "/* … */\n",
-       "            __pyx_t_25 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_32 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_32 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_25 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "          }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  3:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
+       "          if (value) { values[3] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  4:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
+       "          if (value) { values[4] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  5:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size);\n",
+       "          if (value) { values[5] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  6:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
+       "          if (value) { values[6] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  7:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
+       "          if (value) { values[7] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  8:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
+       "          if (value) { values[8] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "        }\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  9:\n",
+       "        if (kw_args > 0) {\n",
+       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_solve);\n",
+       "          if (value) { values[9] = value; kw_args--; }\n",
+       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
        "        }\n",
        "      }\n",
-       "      __pyx_L157:;\n",
-       "
 950: 
\n", - "
 951:         # Replace the output y results and time domain with the new reduced one
\n", - "
+952:         solution_y = np.empty((total_size, len_teval), dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_9);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_9);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_9);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_9 = 0;\n",
-       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+953:         solution_t = np.empty(len_teval, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_9);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "
+954:         solution_y_view = solution_y
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 954, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 954, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+955:         solution_t_view = solution_t
\n", - "
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 955, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "    __pyx_v_solution_t_view = __pyx_t_10;\n",
-       "    __pyx_t_10.memview = NULL;\n",
-       "    __pyx_t_10.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 955, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
-       "    __pyx_t_17.memview = NULL;\n",
-       "    __pyx_t_17.data = NULL;\n",
-       "
 956: 
\n", - "
 957:         # Update output arrays
\n", - "
+958:         for i in range(len_teval):
\n", - "
    __pyx_t_7 = __pyx_v_len_teval;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_7 = __pyx_v_len_teval;\n",
-       "    __pyx_t_3 = __pyx_t_7;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_3; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+959:             solution_t_view[i] = t_eval[i]
\n", - "
      __pyx_t_24 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_24 * __pyx_v_t_eval.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_25 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_25 * __pyx_v_t_eval.strides[0]) )));\n",
-       "
+960:             for j in range(total_size):
\n", - "
      __pyx_t_17 = __pyx_v_total_size;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_total_size;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "        __pyx_v_j = __pyx_t_20;\n",
-       "
 961:                 # To match the format that scipy follows, we will take the transpose of y.
\n", - "
+962:                 solution_y_view[j, i] = y_results_reduced_view[j, i]
\n", - "
        __pyx_t_24 = __pyx_v_j;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_31 = __pyx_v_j;\n",
-       "        __pyx_t_32 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_31 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_32 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_24 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
+       "      if (unlikely(kw_args > 0)) {\n",
+       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
+       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_parameters\") < 0)) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
        "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_25 = __pyx_v_j;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_32 = __pyx_v_j;\n",
-       "        __pyx_t_33 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_32 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_33 * __pyx_v_solution_y_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_25 * __pyx_v_y_results_reduced_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_reduced_view.strides[1]) )));\n",
+       "    } else {\n",
+       "      switch (__pyx_nargs) {\n",
+       "        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
+       "        CYTHON_FALLTHROUGH;\n",
+       "        case  0: break;\n",
+       "        default: goto __pyx_L5_argtuple_error;\n",
        "      }\n",
        "    }\n",
-       "
+963:         status = old_status
\n", - "
    __pyx_v_status = __pyx_v_old_status;\n",
-       "/* … */\n",
-       "    __pyx_v_status = __pyx_v_old_status;\n",
-       "
 964: 
\n", - "
 965:     # Set message
\n", - "
+966:     if status == 1:
\n", - "
  switch (__pyx_v_status) {\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "  switch (__pyx_v_status) {\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 0:\n",
-       "
+967:         message = "Integration completed without issue."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_completed_without_is);\n",
-       "    __pyx_v_message = __pyx_kp_u_Integration_completed_without_is;\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Integration_completed_without_is);\n",
-       "    __pyx_v_message = __pyx_kp_u_Integration_completed_without_is;\n",
-       "
+968:     elif status == 0:
\n", - "
    break;\n",
-       "    case -1L:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case -1L:\n",
-       "
+969:         message = "Integration is/was ongoing (perhaps it was interrupted?)."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_is_was_ongoing_perha);\n",
-       "    __pyx_v_message = __pyx_kp_u_Integration_is_was_ongoing_perha;\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Integration_is_was_ongoing_perha);\n",
-       "    __pyx_v_message = __pyx_kp_u_Integration_is_was_ongoing_perha;\n",
-       "
+970:     elif status == -1:
\n", - "
    break;\n",
-       "    case -2L:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case -2L:\n",
-       "
+971:         message = "Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_R;\n",
+       "    if (values[0]) {\n",
+       "      __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1132, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_t_span = __pyx_k__30;\n",
+       "    }\n",
+       "    if (values[1]) {\n",
+       "      __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[1], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 1133, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_y0 = __pyx_k__31;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "    }\n",
+       "    __pyx_v_args = ((PyObject*)values[2]);\n",
+       "    if (values[3]) {\n",
+       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1135, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_rtol = __pyx_k__32;\n",
+       "    }\n",
+       "    if (values[4]) {\n",
+       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1136, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_atol = __pyx_k__33;\n",
+       "    }\n",
+       "    if (values[5]) {\n",
+       "      __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1137, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_max_step_size = __pyx_k__34;\n",
+       "    }\n",
+       "    if (values[6]) {\n",
+       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1138, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_first_step = __pyx_k__35;\n",
+       "    }\n",
+       "    if (values[7]) {\n",
+       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[7], 0); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 1139, __pyx_L3_error)\n",
+       "    } else {\n",
+       "      __pyx_v_t_eval = __pyx_k__36;\n",
+       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "    }\n",
+       "    if (values[8]) {\n",
+       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1140, __pyx_L3_error)\n",
+       "    } else {\n",
+       "
+1135:             double rtol = NAN,
\n", + "
  __pyx_k__32 = NAN;\n",
        "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_R;\n",
-       "
+972:     elif status == -2:
\n", - "
    break;\n",
-       "    case -3L:\n",
+       "  __pyx_t_7 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1135, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_7);\n",
+       "
+1136:             double atol = NAN,
\n", + "
  __pyx_k__33 = NAN;\n",
        "/* … */\n",
-       "    break;\n",
-       "    case -3L:\n",
-       "
+973:         message = "Maximum number of steps (set by user) exceeded during integration."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_u);\n",
-       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_u;\n",
+       "  __pyx_t_16 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1136, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_16);\n",
+       "
+1137:             double max_step_size = NAN,
\n", + "
  __pyx_k__34 = NAN;\n",
        "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_u);\n",
-       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_u;\n",
-       "
+974:     elif status == -3:
\n", - "
    break;\n",
-       "    case -6L:\n",
+       "  __pyx_t_17 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1137, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_17);\n",
+       "
+1138:             double first_step = NAN,
\n", + "
  __pyx_k__35 = NAN;\n",
        "/* … */\n",
-       "    break;\n",
-       "    case -6L:\n",
-       "
+975:         message = "Maximum number of steps (set by system architecture) exceeded during integration."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_s);\n",
-       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_s;\n",
+       "  __pyx_t_18 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1138, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_18);\n",
+       "
+1139:             const double[::1] t_eval = None,
\n", + "
  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 1139, __pyx_L1_error)\n",
+       "  __pyx_k__36 = __pyx_t_15;\n",
+       "  __pyx_t_15.memview = NULL;\n",
+       "  __pyx_t_15.data = NULL;\n",
        "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_s);\n",
-       "    __pyx_v_message = __pyx_kp_u_Maximum_number_of_steps_set_by_s;\n",
-       "
+976:     elif status == -6:
\n", - "
    break;\n",
-       "    case -7L:\n",
+       "  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 1139, __pyx_L1_error)\n",
+       "  __pyx_t_19 = __pyx_memoryview_fromslice(__pyx_t_15, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1139, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_19);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 1);\n",
+       "  __pyx_t_15.memview = NULL; __pyx_t_15.data = NULL;\n",
+       "
+1140:             bool_cpp_t auto_reset_state = True,
\n", + "
  bool __pyx_v_auto_reset_state = ((bool)1);\n",
        "/* … */\n",
-       "    break;\n",
-       "    case -7L:\n",
-       "
+977:         message = "Integration never started: y-size is zero."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_never_started_y_size);\n",
-       "    __pyx_v_message = __pyx_kp_u_Integration_never_started_y_size;\n",
+       "      __pyx_v_auto_reset_state = ((bool)1);\n",
+       "    }\n",
+       "    if (values[9]) {\n",
+       "      __pyx_v_auto_solve = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_auto_solve == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L3_error)\n",
+       "    } else {\n",
+       "
+1141:             bool_cpp_t auto_solve = False):
\n", + "
  bool __pyx_v_auto_solve = ((bool)0);\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"change_parameters\", 0);\n",
+       "  if (__pyx_optional_args) {\n",
+       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
+       "      __pyx_v_t_span = __pyx_optional_args->t_span;\n",
+       "      if (__pyx_optional_args->__pyx_n > 1) {\n",
+       "        __pyx_v_y0 = __pyx_optional_args->y0;\n",
+       "        if (__pyx_optional_args->__pyx_n > 2) {\n",
+       "          __pyx_v_args = __pyx_optional_args->args;\n",
+       "          if (__pyx_optional_args->__pyx_n > 3) {\n",
+       "            __pyx_v_rtol = __pyx_optional_args->rtol;\n",
+       "            if (__pyx_optional_args->__pyx_n > 4) {\n",
+       "              __pyx_v_atol = __pyx_optional_args->atol;\n",
+       "              if (__pyx_optional_args->__pyx_n > 5) {\n",
+       "                __pyx_v_max_step_size = __pyx_optional_args->max_step_size;\n",
+       "                if (__pyx_optional_args->__pyx_n > 6) {\n",
+       "                  __pyx_v_first_step = __pyx_optional_args->first_step;\n",
+       "                  if (__pyx_optional_args->__pyx_n > 7) {\n",
+       "                    __pyx_v_t_eval = __pyx_optional_args->t_eval;\n",
+       "                    if (__pyx_optional_args->__pyx_n > 8) {\n",
+       "                      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
+       "                      if (__pyx_optional_args->__pyx_n > 9) {\n",
+       "                        __pyx_v_auto_solve = __pyx_optional_args->auto_solve;\n",
+       "                      }\n",
+       "                    }\n",
+       "                  }\n",
+       "                }\n",
+       "              }\n",
+       "            }\n",
+       "          }\n",
+       "        }\n",
+       "      }\n",
+       "    }\n",
+       "  }\n",
        "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Integration_never_started_y_size);\n",
-       "    __pyx_v_message = __pyx_kp_u_Integration_never_started_y_size;\n",
-       "
+978:     elif status == -7:
\n", - "
    break;\n",
-       "    case -8L:\n",
+       "      __pyx_v_auto_solve = ((bool)0);\n",
+       "    }\n",
+       "  }\n",
+       "  goto __pyx_L4_argument_unpacking_done;\n",
+       "  __pyx_L5_argtuple_error:;\n",
+       "  __Pyx_RaiseArgtupleInvalid(\"change_parameters\", 0, 0, 10, __pyx_nargs); __PYX_ERR(0, 1130, __pyx_L3_error)\n",
+       "  __pyx_L3_error:;\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
+       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_parameters\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return NULL;\n",
+       "  __pyx_L4_argument_unpacking_done:;\n",
+       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 1134, __pyx_L1_error)\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_20change_parameters(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step_size, __pyx_v_first_step, __pyx_v_t_eval, __pyx_v_auto_reset_state, __pyx_v_auto_solve);\n",
+       "
 1142: 
\n", + "
+1143:         if not isnan(t_span[0]):
\n", + "
  __pyx_t_15 = (!isnan(__pyx_v_t_span.f0));\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1144:             self.change_t_span(t_span, auto_reset_state=False)
\n", + "
    __pyx_t_16.__pyx_n = 1;\n",
+       "    __pyx_t_16.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_t_span(__pyx_v_self, __pyx_v_t_span, 0, &__pyx_t_16); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1144, __pyx_L1_error)\n",
+       "
 1145: 
\n", + "
+1146:         if y0 is not None:
\n", + "
  __pyx_t_15 = (((PyObject *) __pyx_v_y0.memview) != Py_None);\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1147:             self.change_y0(y0, auto_reset_state=False)
\n", + "
    __pyx_t_17.__pyx_n = 1;\n",
+       "    __pyx_t_17.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_y0(__pyx_v_self, __pyx_v_y0, 0, &__pyx_t_17); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1147, __pyx_L1_error)\n",
+       "
 1148: 
\n", + "
+1149:         if args is not None:
\n", + "
  __pyx_t_15 = (__pyx_v_args != ((PyObject*)Py_None));\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1150:             self.change_args(args, auto_reset_state=False)
\n", + "
    __pyx_t_18.__pyx_n = 1;\n",
+       "    __pyx_t_18.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_args(__pyx_v_self, __pyx_v_args, 0, &__pyx_t_18); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1150, __pyx_L1_error)\n",
+       "
 1151: 
\n", + "
+1152:         if not isnan(rtol) or not isnan(atol):
\n", + "
  __pyx_t_19 = (!isnan(__pyx_v_rtol));\n",
+       "  if (!__pyx_t_19) {\n",
+       "  } else {\n",
+       "    __pyx_t_15 = __pyx_t_19;\n",
+       "    goto __pyx_L7_bool_binop_done;\n",
+       "  }\n",
+       "  __pyx_t_19 = (!isnan(__pyx_v_atol));\n",
+       "  __pyx_t_15 = __pyx_t_19;\n",
+       "  __pyx_L7_bool_binop_done:;\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1153:             self.change_tols(rtol=rtol, atol=atol, auto_reset_state=False)
\n", + "
    __pyx_t_20.__pyx_n = 3;\n",
+       "    __pyx_t_20.rtol = __pyx_v_rtol;\n",
+       "    __pyx_t_20.atol = __pyx_v_atol;\n",
+       "    __pyx_t_20.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_tols(__pyx_v_self, 0, &__pyx_t_20); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1153, __pyx_L1_error)\n",
+       "
 1154: 
\n", + "
+1155:         if not isnan(max_step_size):
\n", + "
  __pyx_t_15 = (!isnan(__pyx_v_max_step_size));\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1156:             self.change_max_step_size(max_step_size, auto_reset_state=False)
\n", + "
    __pyx_t_21.__pyx_n = 1;\n",
+       "    __pyx_t_21.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_max_step_size(__pyx_v_self, __pyx_v_max_step_size, 0, &__pyx_t_21); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1156, __pyx_L1_error)\n",
+       "
 1157: 
\n", + "
+1158:         if not isnan(first_step):
\n", + "
  __pyx_t_15 = (!isnan(__pyx_v_first_step));\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1159:             self.change_first_step(first_step, auto_reset_state=False)
\n", + "
    __pyx_t_22.__pyx_n = 1;\n",
+       "    __pyx_t_22.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_first_step(__pyx_v_self, __pyx_v_first_step, 0, &__pyx_t_22); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1159, __pyx_L1_error)\n",
+       "
 1160: 
\n", + "
+1161:         if t_eval is not None:
\n", + "
  __pyx_t_15 = (((PyObject *) __pyx_v_t_eval.memview) != Py_None);\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1162:             self.change_t_eval(t_eval, auto_reset_state=False)
\n", + "
    __pyx_t_23.__pyx_n = 1;\n",
+       "    __pyx_t_23.auto_reset_state = 0;\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_t_eval(__pyx_v_self, __pyx_v_t_eval, 0, &__pyx_t_23); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1162, __pyx_L1_error)\n",
+       "
 1163: 
\n", + "
 1164:         # Now that everything has been set, reset the solver's state.
\n", + "
 1165:         # If first step has already been reset then no need to call it again later.
\n", + "
+1166:         if not isnan(first_step):
\n", + "
  __pyx_t_15 = (!isnan(__pyx_v_first_step));\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1167:             self.recalc_firststep = False
\n", + "
    __pyx_v_self->recalc_firststep = 0;\n",
+       "
 1168: 
\n", + "
+1169:         if auto_reset_state:
\n", + "
  __pyx_t_15 = (__pyx_v_auto_reset_state != 0);\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
+1170:             self.reset_state()
\n", + "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1170, __pyx_L1_error)\n",
+       "
 1171: 
\n", + "
 1172:         # User can choose to go ahead and rerun the solver with the new setup
\n", + "
+1173:         if auto_solve:
\n", + "
  __pyx_t_15 = (__pyx_v_auto_solve != 0);\n",
+       "  if (__pyx_t_15) {\n",
+       "/* … */\n",
+       "  }\n",
+       "
 1174:             # Tell solver to reset state if for some reason the user set reset to False but auto_solve to True,
\n", + "
 1175:             # ^ This should probably be a warning. Don't see why you'd ever want to do that.
\n", + "
+1176:             self._solve(reset=(not auto_reset_state))
\n", + "
    __pyx_t_24.__pyx_n = 1;\n",
+       "    __pyx_t_24.reset = (!(__pyx_v_auto_reset_state != 0));\n",
+       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->_solve(__pyx_v_self, &__pyx_t_24); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1176, __pyx_L1_error)\n",
+       "
 1177: 
\n", + "
+1178:     cdef void update_constants(self) noexcept nogil:
\n", + "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_update_constants(CYTHON_UNUSED struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
+       "\n",
+       "  /* function exit code */\n",
+       "}\n",
+       "
 1179: 
\n", + "
 1180:         # Nothing to update
\n", + "
 1181:         pass
\n", + "
 1182: 
\n", + "
+1183:     cdef void diffeq(self) noexcept nogil:
\n", + "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_diffeq(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
+       "  Py_ssize_t __pyx_v_i;\n",
        "/* … */\n",
-       "    break;\n",
-       "    case -8L:\n",
-       "
+979:         message = "Error in step size calculation:\\n\\tError in step size acceptance."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_E);\n",
-       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_E;\n",
+       "  /* function exit code */\n",
+       "}\n",
+       "
 1184:         # This is a template function that should be overriden by the user's subclass.
\n", + "
 1185: 
\n", + "
 1186:         # The diffeq can use live variables which are automatically updated before each call.
\n", + "
 1187:         # self.t_new: The current "time" (of course, depending on your problem, it may not actually be _time_ per se).
\n", + "
 1188:         # self.y_new_view[:]: The current y value(s) stored as an array.
\n", + "
 1189:         # For example...
\n", + "
 1190:         # ```python
\n", + "
 1191:         # cdef double t_sin
\n", + "
 1192:         # # You will want to import the c version of sin "from libc.math cimport sin" at the top of your file.
\n", + "
 1193:         # t_sin = sin(self.t_new)
\n", + "
 1194:         # y0 = self.y_new_view[0]
\n", + "
 1195:         # y1 = self.y_new_view[1]
\n", + "
 1196:         # ```
\n", + "
 1197: 
\n", + "
 1198:         # Can also use other optional global attributes like...
\n", + "
 1199:         # self.arg_array_view  (size of self.arg_array_view is self.num_args). For example...
\n", + "
 1200:         # ```python
\n", + "
 1201:         # cdef double a, b
\n", + "
 1202:         # a = self.arg_array_view[0]
\n", + "
 1203:         # b = self.arg_array_view[1]
\n", + "
 1204:         # ```
\n", + "
 1205:         # Currently, these args must be doubles (floats).
\n", + "
 1206: 
\n", + "
 1207:         # This function *must* set new values to the dy_new_view variable (size of array is self.y_size). For example...
\n", + "
 1208:         # ```python
\n", + "
 1209:         # self.dy_new_view[0] = b * t_sin - y1
\n", + "
 1210:         # self.dy_new_view[1] = a * sin(y0)
\n", + "
 1211:         # ```
\n", + "
 1212: 
\n", + "
 1213:         # CySolver can also set additional outputs that the user may want to capture without having to make new calls
\n", + "
 1214:         #  to the differential equation or its sub-methods. For example...
\n", + "
 1215:         # ```python
\n", + "
 1216:         # self.extra_output_view[0] = t_sin
\n", + "
 1217:         # self.extra_output_view[1] = b * t_sin
\n", + "
 1218:         # ```
\n", + "
 1219:         # Currently, these additional outputs must be stored as doubles (floats).
\n", + "
 1220:         # Note that if extra output is used then the variables `capture_extra` and `num_extra` must be set in CySolver's
\n", + "
 1221:         #  `__init__` method.
\n", + "
 1222: 
\n", + "
 1223:         # The default template simply sets all dy to 0.
\n", + "
 1224:         cdef Py_ssize_t i
\n", + "
+1225:         for i in range(self.y_size):
\n", + "
  __pyx_t_1 = __pyx_v_self->y_size;\n",
+       "  __pyx_t_2 = __pyx_t_1;\n",
+       "  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {\n",
+       "    __pyx_v_i = __pyx_t_3;\n",
+       "
+1226:             self.dy_new_view[i] = 0.
\n", + "
    __pyx_t_4 = __pyx_v_i;\n",
+       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_4)) )) = 0.;\n",
+       "  }\n",
+       "
 1227: 
\n", + "
 1228: 
\n", + "
 1229:     # Public accessed properties
\n", + "
+1230:     @property
\n", + "
/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t_1__get__(PyObject *__pyx_v_self) {\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
        "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_E);\n",
-       "    __pyx_v_message = __pyx_kp_u_Error_in_step_size_calculation_E;\n",
-       "
+980:     elif status == -8:
\n", - "
    break;\n",
-       "    default: break;\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solution_t.__get__\", __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",
+       "
 1231:     def solution_t(self):
\n", + "
 1232:         # Need to convert the memory view back into a numpy array
\n", + "
+1233:         return np.asarray(self.solution_t_view)
\n", + "
  __Pyx_XDECREF(__pyx_r);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->solution_t_view, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_4 = NULL;\n",
+       "  __pyx_t_5 = 0;\n",
+       "  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
+       "    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
+       "    if (likely(__pyx_t_4)) {\n",
+       "      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
+       "      __Pyx_INCREF(__pyx_t_4);\n",
+       "      __Pyx_INCREF(function);\n",
+       "      __Pyx_DECREF_SET(__pyx_t_3, function);\n",
+       "      __pyx_t_5 = 1;\n",
+       "    }\n",
+       "  }\n",
+       "  {\n",
+       "    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};\n",
+       "    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);\n",
+       "    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
        "  }\n",
+       "  __pyx_r = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "
 1234: 
\n", + "
 1235: 
\n", + "
+1236:     @property
\n", + "
/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y_1__get__(PyObject *__pyx_v_self) {\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
        "/* … */\n",
-       "    break;\n",
-       "    default: break;\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solution_y.__get__\", __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",
+       "
 1237:     def solution_y(self):
\n", + "
 1238:         # Need to convert the memory view back into a numpy array
\n", + "
+1239:         return np.asarray(self.solution_y_view)
\n", + "
  __Pyx_XDECREF(__pyx_r);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->solution_y_view, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_4 = NULL;\n",
+       "  __pyx_t_5 = 0;\n",
+       "  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
+       "    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
+       "    if (likely(__pyx_t_4)) {\n",
+       "      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
+       "      __Pyx_INCREF(__pyx_t_4);\n",
+       "      __Pyx_INCREF(function);\n",
+       "      __Pyx_DECREF_SET(__pyx_t_3, function);\n",
+       "      __pyx_t_5 = 1;\n",
+       "    }\n",
        "  }\n",
-       "
+981:         message = "Attribute error."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "    __pyx_v_message = __pyx_kp_u_Attribute_error;\n",
+       "  {\n",
+       "    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};\n",
+       "    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);\n",
+       "    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "  }\n",
+       "  __pyx_r = __pyx_t_1;\n",
+       "  __pyx_t_1 = 0;\n",
+       "  goto __pyx_L0;\n",
+       "
 1240: 
\n", + "
 1241: 
\n", + "
+1242:     @property
\n", + "
/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra_1__get__(PyObject *__pyx_v_self) {\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
        "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "    __pyx_v_message = __pyx_kp_u_Attribute_error;\n",
-       "
 982: 
\n", - "
+983:     return solution_t, solution_y, success, message
\n", - "
  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (unlikely(!__pyx_v_message)) { __Pyx_RaiseUnboundLocalError(\"message\"); __PYX_ERR(0, 983, __pyx_L1_error) }\n",
-       "  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_XDECREF(__pyx_t_2);\n",
+       "  __Pyx_XDECREF(__pyx_t_3);\n",
+       "  __Pyx_XDECREF(__pyx_t_4);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solution_extra.__get__\", __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",
+       "
 1243:     def solution_extra(self):
\n", + "
 1244:         # Need to convert the memory view back into a numpy array
\n", + "
+1245:         return np.asarray(self.solution_extra_view)
\n", + "
  __Pyx_XDECREF(__pyx_r);\n",
+       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
        "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_t);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_t);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_solution_t);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_y);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);\n",
-       "  __Pyx_INCREF(__pyx_v_message);\n",
-       "  __Pyx_GIVEREF(__pyx_v_message);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_message);\n",
+       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_3);\n",
+       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->solution_extra_view, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
+       "  __Pyx_GOTREF(__pyx_t_2);\n",
+       "  __pyx_t_4 = NULL;\n",
+       "  __pyx_t_5 = 0;\n",
+       "  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
+       "    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
+       "    if (likely(__pyx_t_4)) {\n",
+       "      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
+       "      __Pyx_INCREF(__pyx_t_4);\n",
+       "      __Pyx_INCREF(function);\n",
+       "      __Pyx_DECREF_SET(__pyx_t_3, function);\n",
+       "      __pyx_t_5 = 1;\n",
+       "    }\n",
+       "  }\n",
+       "  {\n",
+       "    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};\n",
+       "    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);\n",
+       "    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
+       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
+       "    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
+       "    __Pyx_GOTREF(__pyx_t_1);\n",
+       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
+       "  }\n",
+       "  __pyx_r = __pyx_t_1;\n",
        "  __pyx_t_1 = 0;\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
        "  goto __pyx_L0;\n",
+       "
 1246: 
\n", + "
 1247: 
\n", + "
+1248:     @property
\n", + "
/* Python wrapper */\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
+       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths_1__get__(PyObject *__pyx_v_self) {\n",
+       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
+       "  PyObject *__pyx_r = 0;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
+       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
+       "\n",
+       "  /* function exit code */\n",
+       "  __Pyx_RefNannyFinishContext();\n",
+       "  return __pyx_r;\n",
+       "}\n",
+       "\n",
+       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
+       "  PyObject *__pyx_r = NULL;\n",
+       "  __Pyx_RefNannyDeclarations\n",
+       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
        "/* … */\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
+       "  /* function exit code */\n",
+       "  __pyx_L1_error:;\n",
+       "  __Pyx_XDECREF(__pyx_t_1);\n",
+       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.size_growths.__get__\", __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",
+       "
 1249:     def size_growths(self):
\n", + "
 1250:         # How many times the output arrays had to grow during integration
\n", + "
+1251:         return self.num_concats - 1
\n", + "
  __Pyx_XDECREF(__pyx_r);\n",
+       "  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_self->num_concats - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1251, __pyx_L1_error)\n",
        "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (unlikely(!__pyx_v_message)) { __Pyx_RaiseUnboundLocalError(\"message\"); __PYX_ERR(0, 983, __pyx_L1_error) }\n",
-       "  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 983, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_t);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_t);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_solution_t);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_y);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);\n",
-       "  __Pyx_INCREF(__pyx_v_message);\n",
-       "  __Pyx_GIVEREF(__pyx_v_message);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_message);\n",
+       "  __pyx_r = __pyx_t_1;\n",
        "  __pyx_t_1 = 0;\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
        "  goto __pyx_L0;\n",
-       "
 984: 
\n", - "
" + "
 1252: 
\n", + "
 1253: from libc.math cimport sin
\n", + "
 1254: 
\n", + "
+1255: cdef class CySolverPendulum(CySolver):
\n", + "
struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum {\n",
+       "  struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver __pyx_base;\n",
+       "  double coeff_1;\n",
+       "  double coeff_2;\n",
+       "};\n",
+       "/* … */\n",
+       "struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum {\n",
+       "  struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver __pyx_base;\n",
+       "};\n",
+       "static struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum *__pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum;\n",
+       "\n",
+       "
 1256: 
\n", + "
 1257:     cdef double coeff_1, coeff_2
\n", + "
 1258: 
\n", + "
+1259:     cdef void update_constants(self) noexcept nogil:
\n", + "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_16CySolverPendulum_update_constants(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum *__pyx_v_self) {\n",
+       "  double __pyx_v_l;\n",
+       "  double __pyx_v_m;\n",
+       "  double __pyx_v_g;\n",
+       "/* … */\n",
+       "  /* function exit code */\n",
+       "}\n",
+       "
 1260: 
\n", + "
 1261:         cdef double l, m, g
\n", + "
 1262: 
\n", + "
+1263:         l  = self.arg_array_view[0]
\n", + "
  __pyx_t_1 = 0;\n",
+       "  __pyx_v_l = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.arg_array_view.data) + __pyx_t_1)) )));\n",
+       "
+1264:         m  = self.arg_array_view[1]
\n", + "
  __pyx_t_1 = 1;\n",
+       "  __pyx_v_m = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.arg_array_view.data) + __pyx_t_1)) )));\n",
+       "
+1265:         g  = self.arg_array_view[2]
\n", + "
  __pyx_t_1 = 2;\n",
+       "  __pyx_v_g = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.arg_array_view.data) + __pyx_t_1)) )));\n",
+       "
+1266:         self.coeff_1 = (-3. * g / (2. * l))
\n", + "
  __pyx_v_self->coeff_1 = ((-3. * __pyx_v_g) / (2. * __pyx_v_l));\n",
+       "
+1267:         self.coeff_2 = (3. / (m * l**2))
\n", + "
  __pyx_v_self->coeff_2 = (3. / (__pyx_v_m * pow(__pyx_v_l, 2.0)));\n",
+       "
 1268: 
\n", + "
+1269:     cdef void diffeq(self) noexcept nogil:
\n", + "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_16CySolverPendulum_diffeq(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum *__pyx_v_self) {\n",
+       "  double __pyx_v_y0;\n",
+       "  double __pyx_v_y1;\n",
+       "  double __pyx_v_torque;\n",
+       "/* … */\n",
+       "  /* function exit code */\n",
+       "}\n",
+       "
 1270: 
\n", + "
 1271:         # Unpack y
\n", + "
 1272:         cdef double y0, y1, torque
\n", + "
+1273:         y0 = self.y_new_view[0]
\n", + "
  __pyx_t_1 = 0;\n",
+       "  __pyx_v_y0 = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.y_new_view.data) + __pyx_t_1)) )));\n",
+       "
+1274:         y1 = self.y_new_view[1]
\n", + "
  __pyx_t_1 = 1;\n",
+       "  __pyx_v_y1 = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.y_new_view.data) + __pyx_t_1)) )));\n",
+       "
 1275: 
\n", + "
 1276:         # External torque
\n", + "
+1277:         torque = 0.1 * sin(self.t_new)
\n", + "
  __pyx_v_torque = (0.1 * sin(__pyx_v_self->__pyx_base.t_new));\n",
+       "
 1278: 
\n", + "
+1279:         self.dy_new_view[0] = y1
\n", + "
  __pyx_t_1 = 0;\n",
+       "  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.dy_new_view.data) + __pyx_t_1)) )) = __pyx_v_y1;\n",
+       "
+1280:         self.dy_new_view[1] = self.coeff_1 * sin(y0) + self.coeff_2 * torque
\n", + "
  __pyx_t_1 = 1;\n",
+       "  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.dy_new_view.data) + __pyx_t_1)) )) = ((__pyx_v_self->coeff_1 * sin(__pyx_v_y0)) + (__pyx_v_self->coeff_2 * __pyx_v_torque));\n",
+       "
" ], "text/plain": [ "" ] }, - "execution_count": 43, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -19510,20 +9737,23 @@ "source": [ "%%cython --annotate --force\n", "# distutils: language = c++\n", - "# distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION\n", "# cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False\n", "\n", "import cython\n", + "cimport openmp\n", "cimport cython\n", "import sys\n", "import numpy as np\n", "cimport numpy as np\n", "np.import_array()\n", - "\n", "from libcpp cimport bool as bool_cpp_t\n", - "from libc.math cimport sqrt, fabs, nextafter, fmax, fmin\n", + "from libc.math cimport sqrt, fabs, nextafter, fmax, fmin, isnan, NAN, pow\n", + "\n", + "import cython.parallel as cp\n", + "from cython.parallel import parallel, prange\n", "\n", - "from CyRK.array.interp cimport interp_array, interp_complex_array\n", + "\n", + "from CyRK.array.interp cimport interp_array\n", "from CyRK.rk.rk cimport (\n", " RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,\n", " RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,\n", @@ -19544,731 +9774,628 @@ "cdef double EPS_100 = EPS * 100.\n", "cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize)\n", "\n", - "cdef double cabs(double complex value) noexcept nogil:\n", - " \"\"\" Absolute value function for complex-valued inputs.\n", - " \n", - " Parameters\n", - " ----------\n", - " value : float (double complex)\n", - " Complex-valued number.\n", - " \n", - " Returns\n", - " -------\n", - " value_abs : float (double)\n", - " Absolute value of `value`.\n", - " \"\"\"\n", - "\n", - " cdef double v_real\n", - " cdef double v_imag\n", - " v_real = value.real\n", - " v_imag = value.imag\n", - "\n", - " return sqrt(v_real * v_real + v_imag * v_imag)\n", - "\n", - "# Define fused type to handle both float and complex-valued versions of y and dydt.\n", - "ctypedef fused double_numeric:\n", - " double\n", - " double complex\n", - " \n", + "cdef (double, double) EMPTY_T_SPAN = (NAN, NAN)\n", "\n", - "cdef double dabs(double_numeric value) noexcept nogil:\n", - " \"\"\" Absolute value function for either float or complex-valued inputs.\n", + "cdef class CySolver:\n", " \n", - " Checks the type of value and either utilizes `cabs` (for double complex) or `fabs` (for floats).\n", - " \n", - " Parameters\n", - " ----------\n", - " value : float (double_numeric)\n", - " Float or complex-valued number.\n", - "\n", - " Returns\n", - " -------\n", - " value_abs : float (double)\n", - " Absolute value of `value`.\n", - " \"\"\"\n", - " cdef double result\n", + " # Class attributes \n", + " # -- Live variables\n", + " cdef double t_new, t_old\n", + " cdef Py_ssize_t len_t\n", + " cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view\n", + " cdef double[::1] extra_output_view, extra_output_init_view\n", " \n", - " # Check the type of value\n", - " if double_numeric is cython.doublecomplex:\n", - " result = cabs(value)\n", - " else:\n", - " result = fabs(value)\n", - " return result\n", - "\n", - "@cython.wraparound(False)\n", - "@cython.cdivision(True)\n", - "@cython.initializedcheck(False)\n", - "@cython.boundscheck(False)\n", - "def cyrk_ode_2(\n", - " diffeq,\n", - " (double, double) t_span,\n", - " const double_numeric[:] y0,\n", - " tuple args = None,\n", - " double rtol = 1.e-6,\n", - " double atol = 1.e-8,\n", - " double max_step_size = MAX_STEP,\n", - " double first_step = 0.,\n", - " unsigned char rk_method = 1,\n", - " double[:] t_eval = None,\n", - " bool_cpp_t capture_extra = False,\n", - " Py_ssize_t num_extra = 0,\n", - " bool_cpp_t interpolate_extra = False,\n", - " unsigned int expected_size = 0,\n", - " unsigned int max_steps = 0\n", - " ):\n", - " \"\"\" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\n", - "\n", - " Parameters\n", - " ----------\n", - " diffeq : callable\n", - " An njit-compiled function that defines the derivatives of the problem.\n", - " t_span : Tuple[float, float]\n", - " A tuple of the beginning and end of the integration domain's dependent variables.\n", - " y0 : np.ndarray\n", - " 1D array of the initial values of the problem at t_span[0]\n", - " args : tuple = tuple()\n", - " Any additional arguments that are passed to dffeq.\n", - " rtol : float = 1.e-6\n", - " Integration relative tolerance used to determine optimal step size.\n", - " atol : float = 1.e-8\n", - " Integration absolute tolerance used to determine optimal step size.\n", - " max_step_size : float = np.inf\n", - " Maximum allowed step size.\n", - " first_step : float = None\n", - " Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\n", - " rk_method : int = 1\n", - " The type of RK method used for integration\n", - " 0 = RK23\n", - " 1 = RK45\n", - " 2 = DOP853\n", - " t_eval : np.ndarray = None\n", - " If provided, then the function will interpolate the integration results to provide them at the\n", - " requested t-steps.\n", - " capture_extra : bool = False\n", - " If True, then additional output from the differential equation will be collected (but not used to determine\n", - " integration error).\n", - " Example:\n", - " ```\n", - " def diffeq(t, y, dy):\n", - " a = ... some function of y and t.\n", - " dy[0] = a**2 * sin(t) - y[1]\n", - " dy[1] = a**3 * cos(t) + y[0]\n", - "\n", - " # Storing extra output in dy even though it is not part of the diffeq.\n", - " dy[2] = a\n", - " ```\n", - " num_extra : int = 0\n", - " The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\n", - " interpolate_extra : bool = False\n", - " If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each\n", - " step in `t_eval`.\n", - " expected_size : int = 0\n", - " The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\n", - " If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\n", - " It is better to overshoot than undershoot this guess.\n", - " max_steps : int = 0\n", - " Maximum number of steps integrator is allowed to take.\n", - " If set to 0 (the default) then an infinite number of steps are allowed.\n", - "\n", - " Returns\n", - " -------\n", - " time_domain : np.ndarray\n", - " The final time domain. This is equal to t_eval if it was provided.\n", - " y_results : np.ndarray\n", - " The solution of the differential equation provided for each time_result.\n", - " success : bool\n", - " Final integration success flag.\n", - " message : str\n", - " Any integration messages, useful if success=False.\n", - "\n", - " \"\"\"\n", - " # Setup loop variables\n", - " cdef Py_ssize_t s, i, j\n", - "\n", - " # Setup integration variables\n", - " cdef char status, old_status\n", - " cdef str message\n", - "\n", - " # Determine information about the differential equation based on its initial conditions\n", + " # -- Dependent (y0) variable information\n", " cdef Py_ssize_t y_size\n", " cdef double y_size_dbl, y_size_sqrt\n", - " cdef bool_cpp_t y_is_complex\n", - " y_size = y0.size\n", - " y_is_complex = False\n", - " y_size_dbl = y_size\n", - " y_size_sqrt = sqrt(y_size_dbl)\n", - "\n", - " # Check the type of the values in y0\n", - " if double_numeric is cython.double:\n", - " DTYPE = np.float64\n", - " elif double_numeric is cython.doublecomplex:\n", - " DTYPE = np.complex128\n", - " y_is_complex = True\n", - " else:\n", - " # Cyrk only supports float64 and complex128.\n", - " status = -8\n", - " raise Exception('Unexpected type found for initial conditions (y0).')\n", - "\n", - " # Build time domain\n", - " cdef double t_start, t_end, t_delta, t_delta_check, t_delta_abs, direction_inf, t_old, t_new, time_\n", - " cdef bool_cpp_t direction_flag\n", - " t_start = t_span[0]\n", - " t_end = t_span[1]\n", - " t_delta = t_end - t_start\n", - " t_delta_abs = fabs(t_delta)\n", - " t_delta_check = t_delta_abs\n", - " if t_delta >= 0.:\n", - " # Integration is moving forward in time.\n", - " direction_flag = True\n", - " direction_inf = INF\n", - " else:\n", - " # Integration is moving backwards in time.\n", - " direction_flag = False\n", - " direction_inf = -INF\n", - "\n", - " # Pull out information on t-eval\n", - " cdef Py_ssize_t len_teval\n", - " if t_eval is None:\n", - " len_teval = 0\n", - " else:\n", - " len_teval = t_eval.size\n", - "\n", - " # Pull out information on args\n", - " cdef bool_cpp_t use_args\n", - " if args is None:\n", - " use_args = False\n", - " else:\n", - " use_args = True\n", - "\n", - " # Set integration flags\n", - " cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\\n", - " store_extras_during_integration\n", - " success = False\n", - " step_accepted = False\n", - " step_rejected = False\n", - " step_error = False\n", - " run_interpolation = False\n", - " store_extras_during_integration = capture_extra\n", - " if len_teval > 0:\n", - " run_interpolation = True\n", - " if run_interpolation and not interpolate_extra:\n", - " # If y is eventually interpolated but the extra outputs are not being interpolated, then there is\n", - " # no point in storing the values during the integration. Turn off this functionality to save\n", - " # on computation.\n", - " store_extras_during_integration = False\n", - "\n", - " # # Determine integration parameters\n", - " # Check tolerances\n", - " if rtol < EPS_100:\n", - " rtol = EPS_100\n", - "\n", - " # atol_arr = np.asarray(atol, dtype=np.complex128)\n", - " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", - " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", - " # raise Exception\n", - "\n", - " # Determine maximum number of steps\n", - " cdef Py_ssize_t max_steps_touse\n", + " cdef const double[::1] y0_view\n", + " \n", + " # -- RK method information\n", + " cdef unsigned char rk_method\n", + " cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended\n", + " cdef double error_expo\n", + " cdef Py_ssize_t len_C\n", + " cdef double[::1] B_view, E_view, E3_view, E5_view, C_view\n", + " cdef double[:, ::1] A_view, K_view\n", + " cdef double[::1, :] K_T_view\n", + " \n", + " # -- Integration information\n", + " cdef public char status\n", + " cdef public str message\n", + " cdef public bool_cpp_t success\n", + " cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf\n", + " cdef bool_cpp_t direction_flag\n", + " cdef double rtol, atol\n", + " cdef double step_size, max_step_size\n", + " cdef double first_step\n", + " cdef Py_ssize_t expected_size, num_concats, max_steps\n", " cdef bool_cpp_t use_max_steps\n", - " if max_steps == 0:\n", - " use_max_steps = False\n", - " max_steps_touse = 0\n", - " elif max_steps < 0:\n", - " status = -8\n", - " raise AttributeError('Negative number of max steps provided.')\n", - " else:\n", - " use_max_steps = True\n", - " max_steps_touse = min(max_steps, MAX_INT_SIZE)\n", - "\n", - " # Expected size of output arrays.\n", - " cdef double temp_expected_size\n", - " cdef Py_ssize_t expected_size_to_use, num_concats\n", - " if expected_size == 0:\n", - " # CySolver will attempt to guess on a best size for the arrays.\n", - " temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol))\n", - " temp_expected_size = fmax(temp_expected_size, 100.)\n", - " temp_expected_size = fmin(temp_expected_size, 10_000_000.)\n", - " expected_size_to_use = temp_expected_size\n", - " else:\n", - " expected_size_to_use = expected_size\n", - " # This variable tracks how many times the storage arrays have been appended.\n", - " # It starts at 1 since there is at least one storage array present.\n", - " num_concats = 1\n", - "\n", - " # Initialize arrays that are based on y's size and type.\n", - " y_new = np.empty(y_size, dtype=DTYPE, order='C')\n", - " y_old = np.empty(y_size, dtype=DTYPE, order='C')\n", - " dydt_new = np.empty(y_size, dtype=DTYPE, order='C')\n", - " dydt_old = np.empty(y_size, dtype=DTYPE, order='C')\n", - "\n", - " # Setup memory views for these arrays\n", - " cdef double_numeric[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view\n", - " y_new_view = y_new\n", - " y_old_view = y_old\n", - " dydt_new_view = dydt_new\n", - " dydt_old_view = dydt_old\n", - "\n", - " # Store y0 into the y arrays\n", - " cdef double_numeric y_value\n", - " for i in range(y_size):\n", - " y_value = y0[i]\n", - " y_new_view[i] = y_value\n", - " y_old_view[i] = y_value\n", - "\n", - " # If extra output is true then the output of the diffeq will be larger than the size of y0.\n", - " # Determine that extra size by calling the diffeq and checking its size.\n", - " cdef Py_ssize_t extra_start, total_size, store_loop_size\n", - " extra_start = y_size\n", - " total_size = y_size + num_extra\n", - " # Create arrays based on this total size\n", - " diffeq_out = np.empty(total_size, dtype=DTYPE, order='C')\n", - " y0_plus_extra = np.empty(total_size, dtype=DTYPE, order='C')\n", - " extra_result = np.empty(num_extra, dtype=DTYPE, order='C')\n", - "\n", - " # Setup memory views\n", - " cdef double_numeric[:] diffeq_out_view, y0_plus_extra_view, extra_result_view\n", - " diffeq_out_view = diffeq_out\n", - " y0_plus_extra_view = y0_plus_extra\n", - " extra_result_view = extra_result\n", + " cdef bool_cpp_t recalc_firststep\n", + " \n", + " # -- Optional args info\n", + " cdef Py_ssize_t num_args\n", + " cdef double[::1] arg_array_view\n", + "\n", + " # -- Extra output info\n", + " cdef bool_cpp_t capture_extra\n", + " cdef Py_ssize_t num_extra\n", + "\n", + " # -- Interpolation info\n", + " cdef bool_cpp_t run_interpolation\n", + " cdef bool_cpp_t interpolate_extra\n", + " cdef Py_ssize_t len_t_eval\n", + " cdef double[::1] t_eval_view\n", + "\n", + " # -- Solution variables\n", + " cdef double[:, ::1] solution_y_view, solution_extra_view\n", + " cdef double[::1] solution_t_view\n", + " \n", "\n", - " # Capture the extra output for the initial condition.\n", - " if capture_extra:\n", - " if use_args:\n", - " diffeq(t_start, y_new, diffeq_out, *args)\n", + " def __init__(self,\n", + " (double, double) t_span,\n", + " const double[::1] y0,\n", + " tuple args = None,\n", + " double rtol = 1.e-6,\n", + " double atol = 1.e-8,\n", + " double max_step_size = MAX_STEP,\n", + " double first_step = 0.,\n", + " unsigned char rk_method = 1,\n", + " const double[::1] t_eval = None,\n", + " bool_cpp_t capture_extra = False,\n", + " Py_ssize_t num_extra = 0,\n", + " bool_cpp_t interpolate_extra = False,\n", + " Py_ssize_t expected_size = 0,\n", + " Py_ssize_t max_steps = 0,\n", + " bool_cpp_t auto_solve = True):\n", + "\n", + " # Setup loop variables\n", + " cdef Py_ssize_t i, j\n", + "\n", + " # Set integration information\n", + " self.status = -4 # Status code to indicate that integration has not started.\n", + " self.message = 'Integration has not started.'\n", + " self.success = False\n", + " self.recalc_firststep = False\n", + "\n", + " # Declare public variables to avoid memory access violations if solve() is not called.\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake\n", + " solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", + " solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", + " solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C')\n", + " self.solution_t_view = solution_t_fake\n", + " self.solution_extra_view = solution_extra_fake\n", + " self.solution_y_view = solution_y_fake\n", + "\n", + " # Determine y-size information\n", + " self.y_size = len(y0)\n", + " self.y_size_dbl = self.y_size\n", + " self.y_size_sqrt = sqrt(self.y_size_dbl)\n", + " # Store y0 values for later\n", + " self.y0_view = y0\n", + "\n", + " # Determine time domain information\n", + " self.t_start = t_span[0]\n", + " self.t_end = t_span[1]\n", + " self.t_delta = self.t_end - self.t_start\n", + " self.t_delta_abs = fabs(self.t_delta)\n", + "\n", + " if self.t_delta >= 0.:\n", + " # Integration is moving forward in time.\n", + " self.direction_flag = True\n", + " self.direction_inf = INF\n", " else:\n", - " diffeq(t_start, y_new, diffeq_out)\n", - "\n", - " # Extract the extra output from the function output.\n", - " for i in range(total_size):\n", - " if i < extra_start:\n", - " # Pull from y0\n", - " y0_plus_extra_view[i] = y0[i]\n", - " else:\n", - " # Pull from extra output\n", - " y0_plus_extra_view[i] = diffeq_out_view[i]\n", - " if store_extras_during_integration:\n", - " store_loop_size = total_size\n", + " # Integration is moving backwards in time.\n", + " self.direction_flag = False\n", + " self.direction_inf = -INF\n", + "\n", + " # # Determine integration parameters\n", + " # Add tolerances\n", + " self.rtol = rtol\n", + " self.atol = atol\n", + " if self.rtol < EPS_100:\n", + " self.rtol = EPS_100\n", + " # TODO: array based atol\n", + " # atol_arr = np.asarray(atol, dtype=)\n", + " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", + " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", + " # raise Exception\n", + "\n", + " # Determine maximum number of steps\n", + " if max_steps == 0:\n", + " self.use_max_steps = False\n", + " self.max_steps = 0\n", + " elif max_steps < 0:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Negative number of max steps provided.')\n", " else:\n", - " store_loop_size = y_size\n", - " else:\n", - " # No extra output\n", - " store_loop_size = y_size\n", - "\n", - " y0_to_store = np.empty(store_loop_size, dtype=DTYPE, order='C')\n", - " cdef double_numeric[:] y0_to_store_view\n", - " y0_to_store_view = y0_to_store\n", - " for i in range(store_loop_size):\n", - " if store_extras_during_integration:\n", - " y0_to_store_view[i] = y0_plus_extra_view[i]\n", + " self.use_max_steps = True\n", + " self.max_steps = min(max_steps, MAX_INT_SIZE)\n", + "\n", + " # Expected size of output arrays.\n", + " cdef double temp_expected_size\n", + " if expected_size == 0:\n", + " # CySolver will attempt to guess on a best size for the arrays.\n", + " temp_expected_size = 100. * self.t_delta_abs * fmax(1., (1.e-6 / rtol))\n", + " temp_expected_size = fmax(temp_expected_size, 100.)\n", + " temp_expected_size = fmin(temp_expected_size, 10_000_000.)\n", + " self.expected_size = temp_expected_size\n", " else:\n", - " y0_to_store_view[i] = y0[i]\n", - "\n", - " # # Determine RK scheme\n", - " cdef unsigned char rk_order, error_order\n", - " cdef Py_ssize_t rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended\n", - " cdef Py_ssize_t len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1\n", - " cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom\n", - "\n", - " if rk_method == 0:\n", - " # RK23 Method\n", - " rk_order = RK23_order\n", - " error_order = RK23_error_order\n", - " rk_n_stages = RK23_n_stages\n", - " len_C = RK23_LEN_C\n", - " len_B = RK23_LEN_B\n", - " len_E = RK23_LEN_E\n", - " len_E3 = RK23_LEN_E3\n", - " len_E5 = RK23_LEN_E5\n", - " len_A0 = RK23_LEN_A0\n", - " len_A1 = RK23_LEN_A1\n", - " elif rk_method == 1:\n", - " # RK45 Method\n", - " rk_order = RK45_order\n", - " error_order = RK45_error_order\n", - " rk_n_stages = RK45_n_stages\n", - " len_C = RK45_LEN_C\n", - " len_B = RK45_LEN_B\n", - " len_E = RK45_LEN_E\n", - " len_E3 = RK45_LEN_E3\n", - " len_E5 = RK45_LEN_E5\n", - " len_A0 = RK45_LEN_A0\n", - " len_A1 = RK45_LEN_A1\n", - " elif rk_method == 2:\n", - " # DOP853 Method\n", - " rk_order = DOP_order\n", - " error_order = DOP_error_order\n", - " rk_n_stages = DOP_n_stages\n", - " len_C = DOP_LEN_C\n", - " len_B = DOP_LEN_B\n", - " len_E = DOP_LEN_E\n", - " len_E3 = DOP_LEN_E3\n", - " len_E5 = DOP_LEN_E5\n", - " len_A0 = DOP_LEN_A0\n", - " len_A1 = DOP_LEN_A1\n", - "\n", - " rk_n_stages_extended = DOP_n_stages_extended\n", - " else:\n", - " status = -8\n", - " raise AttributeError(\n", - " 'Unexpected rk_method provided. Currently supported versions are:\\n'\n", - " '\\t0 = RK23\\n'\n", - " '\\t1 = RK34\\n'\n", - " '\\t2 = DOP853')\n", - "\n", - " rk_n_stages_plus1 = rk_n_stages + 1\n", - " error_expo = 1. / (error_order + 1.)\n", - "\n", - " # Build RK Arrays. Note that all are 1D except for A and K.\n", - " A = np.empty((len_A0, len_A1), dtype=DTYPE, order='C')\n", - " B = np.empty(len_B, dtype=DTYPE, order='C')\n", - " C = np.empty(len_C, dtype=np.float64, order='C') # C is always float no matter what y0 is.\n", - " E = np.empty(len_E, dtype=DTYPE, order='C')\n", - " E3 = np.empty(len_E3, dtype=DTYPE, order='C')\n", - " E5 = np.empty(len_E5, dtype=DTYPE, order='C')\n", - " K = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C') # It is important K be initialized with 0s\n", - "\n", - " # Setup memory views.\n", - " cdef double_numeric[:] B_view, E_view, E3_view, E5_view\n", - " cdef double_numeric[:, :] A_view, K_view\n", - " cdef double_numeric A_at_sj, B_at_j, error_dot_1, error_dot_2\n", - " cdef double[:] C_view\n", - " A_view = A\n", - " B_view = B\n", - " C_view = C\n", - " E_view = E\n", - " E3_view = E3\n", - " E5_view = E5\n", - " K_view = K\n", - "\n", - " # Populate values based on externally defined constants.\n", - " if rk_method == 0:\n", - " # RK23 Method\n", - " for i in range(len_A0):\n", - " for j in range(len_A1):\n", - " A_view[i, j] = RK23_A[i][j]\n", - " for i in range(len_B):\n", - " B_view[i] = RK23_B[i]\n", - " for i in range(len_C):\n", - " C_view[i] = RK23_C[i]\n", - " for i in range(len_E):\n", - " E_view[i] = RK23_E[i]\n", - " # Dummy Variables, set equal to E\n", - " E3_view[i] = RK23_E[i]\n", - " E5_view[i] = RK23_E[i]\n", - " elif rk_method == 1:\n", - " # RK45 Method\n", - " for i in range(len_A0):\n", - " for j in range(len_A1):\n", - " A_view[i, j] = RK45_A[i][j]\n", - " for i in range(len_B):\n", - " B_view[i] = RK45_B[i]\n", - " for i in range(len_C):\n", - " C_view[i] = RK45_C[i]\n", - " for i in range(len_E):\n", - " E_view[i] = RK45_E[i]\n", - " # Dummy Variables, set equal to E\n", - " E3_view[i] = RK45_E[i]\n", - " E5_view[i] = RK45_E[i]\n", - " else:\n", - " # DOP853 Method\n", - " for i in range(len_A0):\n", - " for j in range(len_A1):\n", - " A_view[i, j] = DOP_A_REDUCED[i][j]\n", - " for i in range(len_B):\n", - " B_view[i] = DOP_B[i]\n", - " for i in range(len_C):\n", - " C_view[i] = DOP_C_REDUCED[i]\n", - " for i in range(len_E):\n", - " E3_view[i] = DOP_E3[i]\n", - " E5_view[i] = DOP_E5[i]\n", - " E_view[i] = DOP_E5[i]\n", - " # Dummy Variables, set equal to E3\n", - " E_view[i] = DOP_E3[i]\n", - "\n", - " # Initialize variables for start of integration\n", - " if not capture_extra:\n", - " # If `capture_extra` is True then this step was already performed.\n", - " if use_args:\n", - " diffeq(t_start, y_new, diffeq_out, *args)\n", + " self.expected_size = expected_size\n", + " # This variable tracks how many times the storage arrays have been appended.\n", + " # It starts at 1 since there is at least one storage array present.\n", + " self.num_concats = 1\n", + "\n", + " # Determine optional arguments\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array\n", + " if args is None:\n", + " self.num_args = 0\n", + " # Even though there are no args, initialize the array to something to avoid seg faults\n", + " arg_array = np.empty(0, dtype=np.float64, order='C')\n", + " self.arg_array_view = arg_array\n", " else:\n", - " diffeq(t_start, y_new, diffeq_out)\n", - "\n", - " t_old = t_start\n", - " t_new = t_start\n", - " # Initialize dydt arrays.\n", - " for i in range(y_size):\n", - " dydt_new_view[i] = diffeq_out_view[i]\n", - " dydt_old_view[i] = dydt_new_view[i]\n", - " \n", - " # Setup storage arrays\n", - " # These arrays are built to fit a number of points equal to `expected_size_to_use`\n", - " # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.\n", - " cdef double_numeric[:, :] y_results_array_view, y_results_array_new_view, solution_y_view\n", - " cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view\n", - " y_results_array = np.empty((store_loop_size, expected_size_to_use), dtype=DTYPE, order='C')\n", - " time_domain_array = np.empty(expected_size_to_use, dtype=np.float64, order='C')\n", - " y_results_array_view = y_results_array\n", - " time_domain_array_view = time_domain_array\n", - "\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] scale_arr\n", - " cdef double[:] scale_view\n", - " cdef double scale\n", - " scale_arr = np.empty(y_size, dtype=np.float64, order='C')\n", - " scale_view = scale_arr\n", + " self.num_args = len(args)\n", + " arg_array = np.empty(self.num_args, dtype=np.float64, order='C')\n", + " self.arg_array_view = arg_array\n", + " for i in range(self.num_args):\n", + " self.arg_array_view[i] = args[i]\n", + "\n", + " # Initialize live variable arrays\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_new, y_old, dy_new, dy_old\n", + " y_new = np.empty(self.y_size, dtype=np.float64, order='C')\n", + " y_old = np.empty(self.y_size, dtype=np.float64, order='C')\n", + " dy_new = np.empty(self.y_size, dtype=np.float64, order='C')\n", + " dy_old = np.empty(self.y_size, dtype=np.float64, order='C')\n", + " self.y_new_view = y_new\n", + " self.y_old_view = y_old\n", + " self.dy_new_view = dy_new\n", + " self.dy_old_view = dy_old\n", + "\n", + " # Set current and old y variables equal to y0\n", + " for i in range(self.y_size):\n", + " self.y_new_view[i] = self.y0_view[i]\n", + " self.y_old_view[i] = self.y0_view[i]\n", + "\n", + " # Set current and old time variables equal to t0\n", + " self.t_old = self.t_start\n", + " self.t_new = self.t_start\n", + " # We already have one time step due to the initial conditions.\n", + " self.len_t = 1\n", + "\n", + " # Determine extra outputs\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_output_init, extra_output\n", + " self.capture_extra = capture_extra\n", + " self.num_extra = num_extra\n", + " if self.capture_extra:\n", + " extra_output_init = np.empty(self.num_extra, dtype=np.float64, order='C')\n", + " extra_output = np.empty(self.num_extra, dtype=np.float64, order='C')\n", + " self.extra_output_init_view = extra_output_init\n", + " self.extra_output_view = extra_output\n", + "\n", + " # We need to determine the extra outputs at the initial time step.\n", + " self.diffeq()\n", + " for i in range(num_extra):\n", + " self.extra_output_init_view[i] = self.extra_output_view[i]\n", + "\n", + " # Determine interpolation information\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array\n", + " if t_eval is None:\n", + " self.run_interpolation = False\n", + " self.interpolate_extra = False\n", + " self.len_t_eval = 0\n", + " else:\n", + " self.run_interpolation = True\n", + " self.interpolate_extra = interpolate_extra\n", + " self.len_t_eval = len(t_eval)\n", + "\n", + " t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", + " self.t_eval_view = t_eval_array\n", + " for i in range(self.len_t_eval):\n", + " self.t_eval_view[i] = t_eval[i]\n", + "\n", + " # Determine RK scheme and initalize memory views\n", + " self.rk_method = rk_method\n", + "\n", + " if rk_method == 0:\n", + " # RK23 Method\n", + " self.rk_order = RK23_order\n", + " self.error_order = RK23_error_order\n", + " self.rk_n_stages = RK23_n_stages\n", + " self.len_C = RK23_LEN_C\n", + " self.A_view = RK23_A\n", + " self.B_view = RK23_B\n", + " self.C_view = RK23_C\n", + " self.E_view = RK23_E\n", + " \n", + " # Unused for RK23 but initalize it anyways\n", + " self.E3_view = RK23_E\n", + " self.E5_view = RK23_E\n", + " elif rk_method == 1:\n", + " # RK45 Method\n", + " self.rk_order = RK45_order\n", + " self.error_order = RK45_error_order\n", + " self.rk_n_stages = RK45_n_stages\n", + " self.len_C = RK45_LEN_C\n", + " self.A_view = RK45_A\n", + " self.B_view = RK45_B\n", + " self.C_view = RK45_C\n", + " self.E_view = RK45_E\n", + " \n", + " # Unused for RK23 but initalize it anyways\n", + " self.E3_view = RK45_E\n", + " self.E5_view = RK45_E\n", + " elif rk_method == 2:\n", + " # DOP853 Method\n", + " self.rk_order = DOP_order\n", + " self.error_order = DOP_error_order\n", + " self.rk_n_stages = DOP_n_stages\n", + " self.len_C = DOP_LEN_C\n", + " self.A_view = DOP_A_REDUCED\n", + " self.B_view = DOP_B\n", + " self.C_view = DOP_C_REDUCED\n", + " self.E3_view = DOP_E3\n", + " self.E5_view = DOP_E5\n", + " self.rk_n_stages_extended = DOP_n_stages_extended\n", + " \n", + " # Unused for DOP853 but initalize it anyways\n", + " self.E_view = DOP_E3\n", + " else:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError(\n", + " 'Unexpected rk_method provided. Currently supported versions are:\\n'\n", + " '\\t0 = RK23\\n'\n", + " '\\t1 = RK34\\n'\n", + " '\\t2 = DOP853')\n", + "\n", + " self.rk_n_stages_plus1 = self.rk_n_stages + 1\n", + " self.error_expo = 1. / (self.error_order + 1.)\n", + "\n", + " # Initialize other RK-related Arrays\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] K\n", + " # It is important K be initialized with 0s\n", + " K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C')\n", + "\n", + " # Setup memory views.\n", + " self.K_view = K\n", + " self.K_T_view = self.K_view.T\n", + "\n", + " # Initialize dy_new_view for start of integration (important for first_step calculation)\n", + " if not self.capture_extra:\n", + " # If `capture_extra` is True then this step was already performed so we can skip it.\n", + " self.diffeq()\n", + "\n", + " for i in range(self.y_size):\n", + " self.dy_old_view[i] = self.dy_new_view[i]\n", + "\n", + " # Determine first step\n", + " self.first_step = first_step\n", + " if self.first_step == 0.:\n", + " self.step_size = self.calc_first_step()\n", + " else:\n", + " if self.first_step <= 0.:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", + " elif self.first_step > self.t_delta_abs:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", + " self.step_size = self.first_step\n", + " self.max_step_size = max_step_size\n", + " \n", + " # Set any constant parameters that the user has set\n", + " self.update_constants()\n", + "\n", + " # Run solver if requested\n", + " if auto_solve:\n", + " # We know for a fact that this is the first time solve will be called\n", + " # so we do not need to reset the state.\n", + " self._solve(reset=False)\n", + "\n", + "\n", + " cpdef void reset_state(self):\n", + " \"\"\" Resets the integrator to its initial state. \"\"\"\n", + " cdef Py_ssize_t i, j\n", + "\n", + " # Set current and old time variables equal to t0\n", + " self.t_old = self.t_start\n", + " self.t_new = self.t_start\n", + " self.len_t = 1\n", + "\n", + " # Reset y variables\n", + " for i in range(self.y_size):\n", + " # Set current and old y variables equal to y0\n", + " self.y_new_view[i] = self.y0_view[i]\n", + " self.y_old_view[i] = self.y0_view[i]\n", + "\n", + " for j in range(self.rk_n_stages_plus1):\n", + " # Reset RK variables\n", + " self.K_view[j, i] = 0.\n", + " \n", + " # Update any constant parameters that the user has set\n", + " self.update_constants()\n", "\n", + " # Make initial call to diffeq()\n", + " self.diffeq()\n", + " for i in range(self.y_size):\n", + " self.dy_old_view[i] = self.dy_new_view[i]\n", "\n", - " # Load initial conditions into output arrays\n", - " time_domain_array_view[0] = t_start\n", - " for i in range(store_loop_size):\n", - " if store_extras_during_integration:\n", - " y_results_array_view[i] = y0_plus_extra_view[i]\n", + " # Determine first step size\n", + " if self.first_step == 0. or self.recalc_firststep:\n", + " self.step_size = self.calc_first_step()\n", " else:\n", - " y_results_array_view[i] = y0[i]\n", + " if self.first_step <= 0.:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", + " elif self.first_step > self.t_delta_abs:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", + " self.step_size = self.first_step\n", + "\n", + " # Reset output storage\n", + " self.num_concats = 1\n", + "\n", + " # Reset public variables to clear any old solutions.\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake\n", + " solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", + " solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", + " solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C')\n", + " self.solution_t_view = solution_t_fake\n", + " self.solution_extra_view = solution_extra_fake\n", + " self.solution_y_view = solution_y_fake\n", + "\n", + " # Other flags and messages\n", + " self.success = False\n", + " self.status = -5 # status == -5 means that reset has been called but solve has not yet been called.\n", + " self.message = \"CySolver has been reset.\"\n", + "\n", + "\n", + " cdef double calc_first_step(self) noexcept nogil:\n", + " \"\"\" Determine initial step size. \"\"\"\n", + "\n", + " cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale\n", + " cdef double y_old_tmp\n", "\n", - " # # Determine size of first step.\n", - " cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1\n", - " \n", - " if first_step == 0.:\n", " # Select an initial step size based on the differential equation.\n", " # .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", " # Equations I: Nonstiff Problems\", Sec. II.4.\n", - " if y_size == 0:\n", + " if self.y_size == 0:\n", " step_size = INF\n", " else:\n", " # Find the norm for d0 and d1\n", " d0 = 0.\n", " d1 = 0.\n", - " for i in range(y_size):\n", - " scale = atol + dabs(y_old_view[i]) * rtol\n", + " for i in range(self.y_size):\n", + " y_old_tmp = self.y_old_view[i]\n", + " scale = self.atol + fabs(y_old_tmp) * self.rtol\n", "\n", - " d0_abs = dabs(y_old_view[i] / scale)\n", - " d1_abs = dabs(dydt_old_view[i] / scale)\n", + " d0_abs = fabs(y_old_tmp / scale)\n", + " d1_abs = fabs(self.dy_old_view[i] / scale)\n", " d0 += (d0_abs * d0_abs)\n", " d1 += (d1_abs * d1_abs)\n", "\n", - " d0 = sqrt(d0) / y_size_sqrt\n", - " d1 = sqrt(d1) / y_size_sqrt\n", + " d0 = sqrt(d0) / self.y_size_sqrt\n", + " d1 = sqrt(d1) / self.y_size_sqrt\n", "\n", " if d0 < 1.e-5 or d1 < 1.e-5:\n", " h0 = 1.e-6\n", " else:\n", " h0 = 0.01 * d0 / d1\n", "\n", - " if direction_flag:\n", + " if self.direction_flag:\n", " h0_direction = h0\n", " else:\n", " h0_direction = -h0\n", - " t_new = t_old + h0_direction\n", - " for i in range(y_size):\n", - " y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]\n", + " \n", + " self.t_new = self.t_old + h0_direction\n", + " for i in range(self.y_size):\n", + " self.y_new_view[i] = self.y_old_view[i] + h0_direction * self.dy_old_view[i]\n", "\n", - " if use_args:\n", - " diffeq(t_new, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(t_new, y_new, diffeq_out)\n", + " # Update dy_new_view\n", + " self.diffeq()\n", "\n", " # Find the norm for d2\n", " d2 = 0.\n", - " for i in range(y_size):\n", - " dydt_new_view[i] = diffeq_out_view[i]\n", - " scale = atol + dabs(y_old_view[i]) * rtol\n", - " d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)\n", + " for i in range(self.y_size):\n", + " scale = self.atol + fabs(self.y_old_view[i]) * self.rtol\n", + " d2_abs = fabs( (self.dy_new_view[i] - self.dy_old_view[i]) / scale)\n", " d2 += (d2_abs * d2_abs)\n", "\n", - " d2 = sqrt(d2) / (h0 * y_size_sqrt)\n", + " d2 = sqrt(d2) / (h0 * self.y_size_sqrt)\n", "\n", " if d1 <= 1.e-15 and d2 <= 1.e-15:\n", " h1 = max(1.e-6, h0 * 1.e-3)\n", " else:\n", - " h1 = (0.01 / max(d1, d2))**error_expo\n", - "\n", - " step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))\n", - " else:\n", - " if first_step <= 0.:\n", - " status = -8\n", - " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", - " elif first_step > t_delta_abs:\n", - " status = -8\n", - " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", - " step_size = first_step\n", - "\n", - " # # Main integration loop\n", - " cdef double min_step, step_factor, step\n", - " cdef double c\n", - " cdef double_numeric K_scale\n", - " cdef Py_ssize_t len_t\n", - " status = 0\n", - " len_t = 1 # There is an initial condition provided so the time length is already 1\n", - "\n", - " if y_size == 0:\n", - " status = -6\n", - "\n", - " while status == 0:\n", - " if t_new == t_end:\n", - " t_old = t_end\n", - " status = 1\n", - " break\n", + " h1 = (0.01 / max(d1, d2))**self.error_expo\n", "\n", - " if use_max_steps:\n", - " if len_t > max_steps_touse:\n", - " status = -2\n", - " break\n", - " else:\n", - " if len_t > MAX_INT_SIZE:\n", - " status = -3\n", - " break\n", + " step_size = max(10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old),\n", + " min(100. * h0, h1))\n", "\n", + " return step_size\n", + " \n", + " cdef void rk_step(self) noexcept nogil:\n", + " \n", + " # Initialize step variables\n", + " cdef Py_ssize_t s, i, j\n", + " cdef double min_step, step, step_factor, time_tmp, t_delta_check\n", + " cdef double C_at_s, A_at_sj, A_at_10, B_at_j\n", + " cdef double scale, K_scale, dy_tmp\n", + " cdef double error_norm3, error_norm5, error_norm, error_dot_1, error_dot_2, error_denom, error_pow\n", + " cdef bool_cpp_t step_accepted, step_rejected, step_error\n", + " \n", " # Run RK integration step\n", " # Determine step size based on previous loop\n", " # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)\n", - " min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)\n", + " min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old)\n", " # Look for over/undershoots in previous step size\n", - " if step_size > max_step_size:\n", - " step_size = max_step_size\n", - " elif step_size < min_step:\n", - " step_size = min_step\n", + " if self.step_size > self.max_step_size:\n", + " self.step_size = self.max_step_size\n", + " elif self.step_size < min_step:\n", + " self.step_size = min_step\n", "\n", " # Determine new step size\n", " step_accepted = False\n", " step_rejected = False\n", " step_error = False\n", "\n", + " # Optimization since this A is called consistently and does not change.\n", + " A_at_10 = self.A_view[1, 0]\n", + "\n", " # # Step Loop\n", " while not step_accepted:\n", "\n", - " if step_size < min_step:\n", - " step_error = True\n", - " status = -1\n", + " if self.step_size < min_step:\n", + " step_error = True\n", + " self.status = -1\n", " break\n", "\n", " # Move time forward for this particular step size\n", - " if direction_flag:\n", - " step = step_size\n", - " t_delta_check = t_new - t_end\n", + " if self.direction_flag:\n", + " step = self.step_size\n", + " t_delta_check = self.t_new - self.t_end\n", " else:\n", - " step = -step_size\n", - " t_delta_check = t_end - t_new\n", - " t_new = t_old + step\n", + " step = -self.step_size\n", + " t_delta_check = self.t_end - self.t_new\n", + " self.t_new = self.t_old + step\n", "\n", " # Check that we are not at the end of integration with that move\n", " if t_delta_check > 0.:\n", - " t_new = t_end\n", + " self.t_new = self.t_end\n", "\n", " # Correct the step if we were at the end of integration\n", - " step = t_new - t_old\n", - " if direction_flag:\n", - " step_size = step\n", + " step = self.t_new - self.t_old\n", + " if self.direction_flag:\n", + " self.step_size = step\n", " else:\n", - " step_size = -step\n", + " self.step_size = -step\n", "\n", " # Calculate derivative using RK method\n", - " for i in range(y_size):\n", - " K_view[0, i] = dydt_old_view[i]\n", - "\n", - " for s in range(1, len_C):\n", - " c = C_view[s]\n", - " time_ = t_old + c * step\n", "\n", - " # Dot Product (K, a) * step\n", - " for j in range(s):\n", - " for i in range(y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " y_new_view[i] = y_old_view[i]\n", + " # t_new must be updated for each loop of s in order to make the diffeq calls.\n", + " # But we need to return to its original value later on. Store in temp variable.\n", + " time_tmp = self.t_new\n", + " for s in range(1, self.len_C):\n", + " C_at_s = self.C_view[s]\n", "\n", - " y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)\n", + " # Update t_new so it can be used in the diffeq call.\n", + " self.t_new = self.t_old + C_at_s * step\n", "\n", - " if use_args:\n", - " diffeq(time_, y_new, diffeq_out, *args)\n", + " # Dot Product (K, a) * step\n", + " if s == 1:\n", + " for i in range(self.y_size):\n", + " # Set the first column of K\n", + " dy_tmp = self.dy_old_view[i]\n", + " self.K_view[0, i] = dy_tmp\n", + " \n", + " # Calculate y_new for s==1\n", + " self.y_new_view[i] = self.y_old_view[i] + (dy_tmp * A_at_10 * step)\n", " else:\n", - " diffeq(time_, y_new, diffeq_out)\n", + " for j in range(s):\n", + " A_at_sj = self.A_view[s, j]\n", + " for i in range(self.y_size):\n", + " if j == 0:\n", + " # Initialize\n", + " self.y_new_view[i] = self.y_old_view[i]\n", + "\n", + " self.y_new_view[i] += self.K_view[j, i] * A_at_sj * step\n", + " \n", + " # Call diffeq to update K with the new dydt\n", + " self.diffeq()\n", + "\n", + " for i in range(self.y_size):\n", + " self.K_view[s, i] = self.dy_new_view[i]\n", "\n", - " for i in range(y_size):\n", - " K_view[s, i] = diffeq_out_view[i]\n", + " # Restore t_new to its previous value.\n", + " self.t_new = time_tmp\n", "\n", " # Dot Product (K, B) * step\n", - " for j in range(rk_n_stages):\n", + " for j in range(self.rk_n_stages):\n", + " B_at_j = self.B_view[j]\n", " # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match\n", " # the shape of B.\n", - " for i in range(y_size):\n", + " for i in range(self.y_size):\n", " if j == 0:\n", " # Initialize\n", - " y_new_view[i] = y_old_view[i]\n", - " y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)\n", - "\n", - " if use_args:\n", - " diffeq(t_new, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(t_new, y_new, diffeq_out)\n", + " self.y_new_view[i] = self.y_old_view[i]\n", "\n", + " self.y_new_view[i] += self.K_view[j, i] * B_at_j * step\n", "\n", - " for i in range(store_loop_size):\n", - " if i < extra_start:\n", - " # Set diffeq results\n", - " dydt_new_view[i] = diffeq_out_view[i]\n", + " self.diffeq()\n", "\n", - " # Set last array of K equal to dydt\n", - " K_view[rk_n_stages, i] = dydt_new_view[i]\n", - "\n", - " else:\n", - " # Set extra results\n", - " extra_result_view[i - extra_start] = diffeq_out_view[i]\n", - "\n", - " if rk_method == 2:\n", + " # Check how well this step performed by calculating its error\n", + " if self.rk_method == 2:\n", " # Calculate Error for DOP853\n", - " # Find norms for each error\n", - " error_norm5 = 0.\n", - " error_norm3 = 0.\n", " # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale\n", - " for i in range(y_size):\n", - " scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol\n", - " for j in range(rk_n_stages_plus1):\n", + " error_norm3 = 0.\n", + " error_norm5 = 0.\n", + " for i in range(self.y_size):\n", + " # Find scale of y for error calculations\n", + " scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol\n", + "\n", + " # Set last array of K equal to dydt\n", + " self.K_view[self.rk_n_stages, i] = self.dy_new_view[i]\n", + " for j in range(self.rk_n_stages_plus1):\n", " if j == 0:\n", " # Initialize\n", " error_dot_1 = 0.\n", " error_dot_2 = 0.\n", "\n", - " K_scale = K_view[j, i] / scale\n", - " error_dot_1 += K_scale * E3_view[j]\n", - " error_dot_2 += K_scale * E5_view[j]\n", + " K_scale = self.K_T_view[i, j] / scale\n", + " error_dot_1 += K_scale * self.E3_view[j]\n", + " error_dot_2 += K_scale * self.E5_view[j]\n", "\n", - " error_norm3_abs = dabs(error_dot_1)\n", - " error_norm5_abs = dabs(error_dot_2)\n", + " # We need the absolute value but since we are taking the square, it is guaranteed to be positive.\n", + " # TODO: This will need to change if CySolver ever accepts complex numbers\n", + " # error_norm3_abs = fabs(error_dot_1) \n", + " # error_norm5_abs = fabs(error_dot_2)\n", "\n", - " error_norm3 += (error_norm3_abs * error_norm3_abs)\n", - " error_norm5 += (error_norm5_abs * error_norm5_abs)\n", + " error_norm3 += (error_dot_1 * error_dot_1)\n", + " error_norm5 += (error_dot_2 * error_dot_2)\n", "\n", " # Check if errors are zero\n", " if (error_norm5 == 0.) and (error_norm3 == 0.):\n", " error_norm = 0.\n", " else:\n", " error_denom = error_norm5 + 0.01 * error_norm3\n", - " error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)\n", + " error_norm = self.step_size * error_norm5 / sqrt(error_denom * self.y_size_dbl)\n", "\n", " else:\n", " # Calculate Error for RK23 and RK45\n", " # Dot Product (K, E) * step / scale\n", " error_norm = 0.\n", - " for i in range(y_size):\n", - " scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol\n", - " for j in range(rk_n_stages_plus1):\n", + " for i in range(self.y_size):\n", + " # Find scale of y for error calculations\n", + " scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol\n", + "\n", + " # Set last array of K equal to dydt\n", + " self.K_view[self.rk_n_stages, i] = self.dy_new_view[i]\n", + " for j in range(self.rk_n_stages_plus1):\n", " if j == 0:\n", " # Initialize\n", " error_dot_1 = 0.\n", "\n", - " K_scale = K_view[j, i] / scale\n", - " error_dot_1 += K_scale * E_view[j] * step\n", + " K_scale = self.K_T_view[i, j] / scale\n", + " error_dot_1 += K_scale * self.E_view[j] * step\n", "\n", - " error_norm_abs = dabs(error_dot_1)\n", - " error_norm += (error_norm_abs * error_norm_abs)\n", - " error_norm = sqrt(error_norm) / y_size_sqrt\n", + " # We need the absolute value but since we are taking the square, it is guaranteed to be positive.\n", + " # TODO: This will need to change if CySolver ever accepts complex numbers\n", + " # error_norm_abs = fabs(error_dot_1) \n", + " # error_norm5_abs = fabs(error_dot_2)\n", + " \n", + " error_norm += (error_dot_1 * error_dot_1)\n", + " error_norm = sqrt(error_norm) / self.y_size_sqrt\n", "\n", " if error_norm < 1.:\n", " # The error is low! Let's update this step for the next time loop\n", " if error_norm == 0.:\n", " step_factor = MAX_FACTOR\n", " else:\n", - " error_pow = error_norm**-error_expo\n", + " error_pow = pow(error_norm, -self.error_expo)\n", " step_factor = min(MAX_FACTOR, SAFETY * error_pow)\n", "\n", " if step_rejected:\n", @@ -20276,285 +10403,624 @@ " # not exasperate them.\n", " step_factor = min(step_factor, 1.)\n", "\n", - " step_size = step_size * step_factor\n", + " self.step_size = self.step_size * step_factor\n", " step_accepted = True\n", " else:\n", - " error_pow = error_norm**-error_expo\n", - " step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)\n", + " error_pow = pow(error_norm, -self.error_expo)\n", + " self.step_size = self.step_size * max(MIN_FACTOR, SAFETY * error_pow)\n", " step_rejected = True\n", "\n", " if step_error:\n", " # Issue with step convergence\n", - " status = -1\n", - " break\n", + " self.status = -1\n", " elif not step_accepted:\n", " # Issue with step convergence\n", - " status = -7\n", - " break\n", - "\n", - " # End of step loop. Update the _now variables\n", - " t_old = t_new\n", - " for i in range(y_size):\n", - " y_old_view[i] = y_new_view[i]\n", - " dydt_old_view[i] = dydt_new_view[i]\n", + " self.status = -7\n", + "\n", + " # End of step loop. Update the old variables\n", + " self.t_old = self.t_new\n", + " for i in range(self.y_size):\n", + " self.y_old_view[i] = self.y_new_view[i]\n", + " self.dy_old_view[i] = self.dy_new_view[i]\n", + "\n", + "\n", + " cpdef void solve(self, bool_cpp_t reset = True):\n", + " self._solve()\n", + "\n", + "\n", + " cdef void _solve(self, bool_cpp_t reset = True):\n", + " \"\"\" Perform Runge-Kutta integration on `self.diffeq` function.\"\"\"\n", + "\n", + " # Reset the solver's state (avoid issues if solve() is called multiple times).\n", + " if reset:\n", + " self.reset_state()\n", + "\n", + " # Setup loop variables\n", + " cdef Py_ssize_t i, j\n", + "\n", + " # Setup storage arrays\n", + " # These arrays are built to fit a number of points equal to `self.expected_size`\n", + " # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array, extra_array\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array\n", + " cdef double[:, ::1] y_results_array_view, extra_array_view\n", + " cdef double[::1] time_domain_array_view\n", + " y_results_array = np.empty((self.y_size, self.expected_size), dtype=np.float64, order='C')\n", + " time_domain_array = np.empty(self.expected_size, dtype=np.float64, order='C')\n", + " y_results_array_view = y_results_array\n", + " time_domain_array_view = time_domain_array\n", + " if self.capture_extra:\n", + " extra_array = np.empty((self.num_extra, self.expected_size), dtype=np.float64, order='C')\n", + " extra_array_view = extra_array\n", + "\n", + " # The following are unused unless the previous array size is too small to capture all of the data\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array_new, extra_array_new\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array_new\n", + " cdef double[:, ::1] y_results_array_new_view, extra_array_new_view\n", + " cdef double[::1] time_domain_array_new_view\n", + "\n", + " # Load initial conditions into output arrays\n", + " time_domain_array_view[0] = self.t_start\n", + " for i in range(self.y_size):\n", + " y_results_array_view[i, 0] = self.y0_view[i]\n", + " if self.capture_extra:\n", + " for i in range(self.num_extra):\n", + " extra_array_view[i, 0] = self.extra_output_init_view[i]\n", + "\n", + " # Reset live variables to their starting values.\n", + " # Set current and old y variables equal to y0\n", + " for i in range(self.y_size):\n", + " self.y_new_view[i] = self.y0_view[i]\n", + " self.y_old_view[i] = self.y0_view[i]\n", + " # Set current and old time variables equal to t0\n", + " self.t_old = self.t_start\n", + " self.t_new = self.t_start\n", + "\n", + " # # Main integration loop\n", + " self.status = 0\n", + " # There is an initial condition provided so the time length is already 1\n", + " self.len_t = 1\n", + "\n", + " if self.y_size == 0:\n", + " self.status = -6\n", + "\n", + " while self.status == 0:\n", + " if self.t_new == self.t_end:\n", + " self.t_old = self.t_end\n", + " self.status = 1\n", + " break\n", "\n", - " # Save data\n", - " if len_t >= (num_concats * expected_size_to_use): \n", - " # There is more data than we have room in our arrays. \n", - " # Build new arrays with more space.\n", - " # OPT: Note this is an expensive operation. \n", - " num_concats += 1\n", - " new_size = num_concats * expected_size_to_use\n", - " time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')\n", - " y_results_array_new = np.empty((store_loop_size, new_size), dtype=DTYPE, order='C')\n", - " time_domain_array_new_view = time_domain_array_new\n", - " y_results_array_new_view = y_results_array_new\n", + " if self.use_max_steps:\n", + " if self.len_t > self.max_steps:\n", + " self.status = -2\n", + " break\n", + " else:\n", + " if self.len_t > MAX_INT_SIZE:\n", + " self.status = -3\n", + " break\n", " \n", - " # Loop through time to fill in these new arrays with the old values\n", - " for i in range(len_t):\n", - " time_domain_array_new_view[i] = time_domain_array_view[i]\n", - " \n", - " for j in range(store_loop_size):\n", - " y_results_array_new_view[j, i] = y_results_array_view[j, i]\n", + " # Perform RK Step\n", + " self.rk_step()\n", " \n", - " # No longer need the old arrays. Change where the view is pointing and delete them.\n", - " y_results_array_view = y_results_array_new\n", - " time_domain_array_view = time_domain_array_new\n", - " # TODO: Delete the old arrays?\n", - " \n", - " # There should be room in the arrays to add new data.\n", - " time_domain_array_view[len_t] = t_new\n", - " # To match the format that scipy follows, we will take the transpose of y.\n", - " for i in range(store_loop_size):\n", - " if i < extra_start:\n", - " # Pull from y result\n", - " y_results_array_view[i, len_t] = y_new_view[i]\n", - " else:\n", - " # Pull from extra\n", - " y_results_array_view[i, len_t] = extra_result_view[i - extra_start]\n", - "\n", - " # Increase number of time points.\n", - " len_t += 1\n", - "\n", - " # # Clean up output.\n", - " if status == 1:\n", - " success = True\n", - "\n", - " # Create output arrays. To match the format that scipy follows, we will take the transpose of y.\n", - " if success:\n", - " # Build final output arrays.\n", - " # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.\n", - " # This process will remove that junk and leave only the wanted data.\n", - " solution_y = np.empty((store_loop_size, len_t), dtype=DTYPE, order='C')\n", - " solution_t = np.empty(len_t, dtype=np.float64, order='C')\n", - "\n", - " # Link memory views\n", - " solution_y_view = solution_y\n", - " solution_t_view = solution_t\n", - "\n", - " # Populate values\n", - " for i in range(len_t):\n", - " solution_t_view[i] = time_domain_array_view[i]\n", - " for j in range(store_loop_size):\n", - " solution_y_view[j, i] = y_results_array_view[j, i]\n", - " else:\n", - " # Build nan arrays\n", - " solution_y = np.nan * np.ones((store_loop_size, 1), dtype=DTYPE, order='C')\n", - " solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')\n", + " # Check is error occurred during step.\n", + " if self.status != 0:\n", + " break\n", "\n", - " # Link memory views\n", - " solution_y_view = solution_y\n", - " solution_t_view = solution_t\n", + " # Save data\n", + " if self.len_t >= (self.num_concats * self.expected_size):\n", + " # There is more data than we have room in our arrays.\n", + " # Build new arrays with more space.\n", + " # OPT: Note this is an expensive operation.\n", + " self.num_concats += 1\n", + " new_size = self.num_concats * self.expected_size\n", + " time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')\n", + " y_results_array_new = np.empty((self.y_size, new_size), dtype=np.float64, order='C')\n", + " time_domain_array_new_view = time_domain_array_new\n", + " y_results_array_new_view = y_results_array_new\n", + " if self.capture_extra:\n", + " extra_array_new = np.empty((self.num_extra, new_size), dtype=np.float64, order='C')\n", + " extra_array_new_view = extra_array_new\n", + "\n", + " # Loop through time to fill in these new arrays with the old values\n", + " for j in range(self.y_size):\n", + " for i in range(self.len_t):\n", + " if j == 0:\n", + " time_domain_array_new_view[i] = time_domain_array_view[i]\n", + " y_results_array_new_view[j, i] = y_results_array_view[j, i]\n", + "\n", + " if self.capture_extra:\n", + " for j in range(self.num_extra):\n", + " for i in range(self.len_t):\n", + " extra_array_new_view[j, i] = extra_array_view[j, i]\n", + "\n", + " # No longer need the old arrays. Change where the view is pointing and delete them.\n", + " y_results_array_view = y_results_array_new\n", + " time_domain_array_view = time_domain_array_new\n", + " # TODO: Delete the old arrays?\n", + " if self.capture_extra:\n", + " extra_array_view = extra_array_new\n", + "\n", + " # There should be room in the arrays to add new data.\n", + " time_domain_array_view[self.len_t] = self.t_new\n", + " # To match the format that scipy follows, we will take the transpose of y.\n", + " for i in range(self.y_size):\n", + " y_results_array_view[i, self.len_t] = self.y_new_view[i]\n", + "\n", + " if self.capture_extra:\n", + " for i in range(self.num_extra):\n", + " extra_array_view[i, self.len_t] = self.extra_output_view[i]\n", + "\n", + " # Increase number of time points.\n", + " self.len_t += 1\n", + "\n", + " # # Clean up output.\n", + " if self.status == 1:\n", + " self.success = True\n", + " else:\n", + " self.success = False\n", + "\n", + " # Create output arrays. To match the format that scipy follows, we will take the transpose of y.\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_out_array, y_results_out_array_bad\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_output_out_array, extra_output_out_array_bad\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_out_array, time_domain_out_array_bad\n", + "\n", + " if self.success:\n", + " # Build final output arrays.\n", + " # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.\n", + " # This process will remove that junk and leave only the wanted data.\n", + " y_results_out_array = np.empty((self.y_size, self.len_t), dtype=np.float64, order='C')\n", + " time_domain_out_array = np.empty(self.len_t, dtype=np.float64, order='C')\n", + " if self.capture_extra:\n", + " extra_output_out_array = np.empty((self.num_extra, self.len_t), dtype=np.float64, order='C')\n", + "\n", + " # Link memory views\n", + " self.solution_y_view = y_results_out_array\n", + " self.solution_t_view = time_domain_out_array\n", + " if self.capture_extra:\n", + " self.solution_extra_view = extra_output_out_array\n", + "\n", + " # Populate values\n", + " for j in range(self.y_size):\n", + " for i in range(self.len_t):\n", + " if j == 0:\n", + " self.solution_t_view[i] = time_domain_array_view[i]\n", + " self.solution_y_view[j, i] = y_results_array_view[j, i]\n", + " if self.capture_extra:\n", + " for j in range(self.num_extra):\n", + " for i in range(self.len_t):\n", + " self.solution_extra_view[j, i] = extra_array_view[j, i]\n", + " else:\n", + " # Build nan arrays\n", + " y_results_out_array_bad = np.nan * np.ones((self.y_size, 1), dtype=np.float64, order='C')\n", + " time_domain_out_array_bad = np.nan * np.ones(1, dtype=np.float64, order='C')\n", + " if self.capture_extra:\n", + " extra_output_out_array_bad = np.nan * np.ones((self.num_extra, 1), dtype=np.float64, order='C')\n", + "\n", + " # Link memory views\n", + " self.solution_y_view = y_results_out_array_bad\n", + " self.solution_t_view = time_domain_out_array_bad\n", + " if self.capture_extra:\n", + " self.solution_extra_view = extra_output_out_array_bad\n", + "\n", + " # Integration is complete. Check if interpolation was requested.\n", + " if self.success and self.run_interpolation:\n", + " self.interpolate()\n", + " \n", + " # Update integration message\n", + " if self.status == 1:\n", + " self.message = \"Integration completed without issue.\"\n", + " elif self.status == 0:\n", + " self.message = \"Integration is/was ongoing (perhaps it was interrupted?).\"\n", + " elif self.status == -1:\n", + " self.message = \"Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers.\"\n", + " elif self.status == -2:\n", + " self.message = \"Maximum number of steps (set by user) exceeded during integration.\"\n", + " elif self.status == -3:\n", + " self.message = \"Maximum number of steps (set by system architecture) exceeded during integration.\"\n", + " elif self.status == -6:\n", + " self.message = \"Integration never started: y-size is zero.\"\n", + " elif self.status == -7:\n", + " self.message = \"Error in step size calculation:\\n\\tError in step size acceptance.\"\n", + " \n", "\n", - " cdef double_numeric[:, :] y_results_reduced_view\n", - " cdef double_numeric[:] y_result_timeslice_view, y_result_temp_view, y_interp_view\n", "\n", - " if run_interpolation and success:\n", - " old_status = status\n", - " status = 2\n", + " cdef void interpolate(self):\n", + " \"\"\" Interpolate the results of a successful integration over the user provided time domain, `t_eval`.\"\"\"\n", " # User only wants data at specific points.\n", + " cdef char old_status\n", + " old_status = self.status\n", + " self.status = 2\n", + "\n", + " # Setup loop variables\n", + " cdef Py_ssize_t i, j\n", "\n", " # The current version of this function has not implemented sicpy's dense output.\n", " # Instead we use an interpolation.\n", " # OPT: this could be done inside the integration loop for performance gains.\n", - " y_results_reduced = np.empty((total_size, len_teval), dtype=DTYPE, order='C')\n", - " y_result_timeslice = np.empty(len_t, dtype=DTYPE, order='C')\n", - " y_result_temp = np.empty(len_teval, dtype=DTYPE, order='C')\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_reduced\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_result_timeslice, y_result_temp\n", + " y_results_reduced = np.empty((self.y_size, self.len_t_eval), dtype=np.float64, order='C')\n", + " y_result_timeslice = np.empty(self.len_t, dtype=np.float64, order='C')\n", + " y_result_temp = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", + "\n", + " cdef double[:, ::1] y_results_reduced_view\n", + " cdef double[::1] y_result_timeslice_view, y_result_temp_view\n", " y_results_reduced_view = y_results_reduced\n", " y_result_timeslice_view = y_result_timeslice\n", " y_result_temp_view = y_result_temp\n", "\n", - " for j in range(y_size):\n", - " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", + " # Create arrays for extra output which may or may not be required.\n", + " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_reduced\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_timeslice, extra_temp\n", + " cdef double[:, ::1] extra_reduced_view\n", + " cdef double[::1] extra_timeslice_view, extra_temp_view\n", + "\n", + " for j in range(self.y_size):\n", + " # np.interp only works on 1D arrays so we must loop through each of the y variables.\n", + "\n", " # # Set timeslice equal to the time values at this y_j\n", - " for i in range(len_t):\n", - " y_result_timeslice_view[i] = solution_y_view[j, i]\n", + " for i in range(self.len_t):\n", + " y_result_timeslice_view[i] = self.solution_y_view[j, i]\n", "\n", " # Perform numerical interpolation\n", - " if double_numeric is cython.doublecomplex:\n", - " interp_complex_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - " else:\n", - " interp_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", + " interp_array(\n", + " self.t_eval_view,\n", + " self.solution_t_view,\n", + " y_result_timeslice_view,\n", + " y_result_temp_view\n", + " )\n", "\n", " # Store result.\n", - " for i in range(len_teval):\n", + " for i in range(self.len_t_eval):\n", " y_results_reduced_view[j, i] = y_result_temp_view[i]\n", "\n", - " if capture_extra:\n", + " if self.capture_extra:\n", " # Right now if there is any extra output then it is stored at each time step used in the RK loop.\n", " # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?\n", " # or do we use the interpolation on y to find new values.\n", " # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.\n", - " if interpolate_extra:\n", + "\n", + " # Create extra output arrays\n", + " extra_reduced = np.empty((self.num_extra, self.len_t_eval), dtype=np.float64, order='C')\n", + " extra_timeslice = np.empty(self.len_t, dtype=np.float64, order='C')\n", + " extra_temp = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", + " extra_reduced_view = extra_reduced\n", + " extra_timeslice_view = extra_timeslice\n", + " extra_temp_view = extra_temp\n", + "\n", + " if self.interpolate_extra:\n", " # Continue the interpolation for the extra values.\n", - " for j in range(num_extra):\n", + " for j in range(self.num_extra):\n", " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", " # # Set timeslice equal to the time values at this y_j\n", - " for i in range(len_t):\n", - " y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]\n", + " for i in range(self.len_t):\n", + " extra_timeslice_view[i] = self.solution_extra_view[j, i]\n", "\n", " # Perform numerical interpolation\n", - " if double_numeric is cython.doublecomplex:\n", - " interp_complex_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - " else:\n", - " interp_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", + " interp_array(\n", + " self.t_eval_view,\n", + " self.solution_t_view,\n", + " extra_timeslice_view,\n", + " extra_temp_view\n", + " )\n", "\n", " # Store result.\n", - " for i in range(len_teval):\n", - " y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]\n", + " for i in range(self.len_t_eval):\n", + " extra_reduced_view[j, i] = extra_temp_view[i]\n", " else:\n", - " # Use y and t to recalculate the extra outputs\n", - " y_interp = np.empty(y_size, dtype=DTYPE)\n", - " y_interp_view = y_interp\n", - " for i in range(len_teval):\n", - " time_ = t_eval[i]\n", - " for j in range(y_size):\n", - " y_interp_view[j] = y_results_reduced_view[j, i]\n", + " # Use y and t to recalculate the extra outputs with self.diffeq\n", + " for i in range(self.len_t_eval):\n", + " # Set state variables\n", + " self.t_new = self.t_eval_view[i]\n", + " for j in range(self.y_size):\n", + " self.y_new_view[j] = y_results_reduced_view[j, i]\n", + "\n", + " # Call diffeq to recalculate extra outputs\n", + " self.diffeq()\n", + "\n", + " # Capture extras\n", + " for j in range(self.num_extra):\n", + " extra_reduced_view[j, i] = self.extra_output_view[j]\n", + "\n", + " # Replace the solution variables with the new interpolated ones\n", + " self.solution_t_view = self.t_eval_view\n", + " self.solution_y_view = y_results_reduced_view\n", + " if self.capture_extra:\n", + " self.solution_extra_view = extra_reduced_view\n", + "\n", + " self.status = old_status\n", + "\n", + "\n", + " cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = False):\n", + "\n", + " # Update time domain information\n", + " self.t_start = t_span[0]\n", + " self.t_end = t_span[1]\n", + " self.t_delta = self.t_end - self.t_start\n", + " self.t_delta_abs = fabs(self.t_delta)\n", + " if self.t_delta >= 0.:\n", + " self.direction_flag = True\n", + " self.direction_inf = INF\n", + " else:\n", + " self.direction_flag = False\n", + " self.direction_inf = -INF\n", + "\n", + " # A change to t-span will affect the first step's size\n", + " self.recalc_firststep = True\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + "\n", + " cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = False):\n", + "\n", + " # Check y-size information\n", + " cdef Py_ssize_t y_size_new\n", + " y_size_new = len(y0)\n", + "\n", + " if self.y_size != y_size_new:\n", + " # So many things need to update if ysize changes that the user might as well just\n", + " # create a new class instance.\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('New y0 must be the same size as the original y0 used to create CySolver class.'\n", + " 'Create new CySolver instance instead.')\n", + "\n", + " # Store y0 values for later\n", + " self.y0_view = y0\n", + "\n", + " # A change to y0 will affect the first step's size\n", + " self.recalc_firststep = True\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + "\n", + " cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = False):\n", + "\n", + " # Determine optional arguments\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array\n", + "\n", + " self.num_args = len(args)\n", + " arg_array = np.empty(self.num_args, dtype=np.float64, order='C')\n", + " self.arg_array_view = arg_array\n", + " for i in range(self.num_args):\n", + " self.arg_array_view[i] = args[i]\n", + "\n", + " # A change to args will affect the first step's size\n", + " self.recalc_firststep = True\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + "\n", + " cpdef void change_tols(self, double rtol = NAN, double atol = NAN, bool_cpp_t auto_reset_state = False):\n", + "\n", + " # Update tolerances\n", + " if not isnan(rtol):\n", + " self.rtol = rtol\n", + " if not isnan(atol):\n", + " self.atol = atol\n", + "\n", + " if self.rtol < EPS_100:\n", + " self.rtol = EPS_100\n", + " # TODO: array based atol\n", + " # atol_arr = np.asarray(atol, dtype=)\n", + " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", + " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", + " # raise Exception\n", + "\n", + " # A change to tolerances will affect the first step's size\n", + " self.recalc_firststep = True\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + "\n", + " cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = False):\n", + "\n", + " self.max_step_size = max_step_size\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + "\n", + " cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = False):\n", + "\n", + " self.first_step = first_step\n", + " if self.first_step == 0.:\n", + " self.step_size = self.calc_first_step()\n", + " else:\n", + " if self.first_step <= 0.:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", + " elif self.first_step > self.t_delta_abs:\n", + " self.status = -8\n", + " self.message = \"Attribute error.\"\n", + " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", + " self.step_size = self.first_step\n", + "\n", + " # If first step has already been reset then no need to call it again later.\n", + " self.recalc_firststep = False\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + "\n", + " cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = False):\n", + "\n", + " # Determine interpolation information\n", + " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array\n", + "\n", + " self.run_interpolation = True\n", + " self.len_t_eval = len(t_eval)\n", "\n", - " if use_args:\n", - " diffeq(time_, y_interp, diffeq_out, *args)\n", - " else:\n", - " diffeq(time_, y_interp, diffeq_out)\n", + " t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", + " self.t_eval_view = t_eval_array\n", + " for i in range(self.len_t_eval):\n", + " self.t_eval_view[i] = t_eval[i]\n", "\n", - " for j in range(num_extra):\n", - " y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]\n", + " if auto_reset_state:\n", + " self.reset_state()\n", "\n", - " # Replace the output y results and time domain with the new reduced one\n", - " solution_y = np.empty((total_size, len_teval), dtype=DTYPE, order='C')\n", - " solution_t = np.empty(len_teval, dtype=np.float64, order='C')\n", - " solution_y_view = solution_y\n", - " solution_t_view = solution_t\n", "\n", - " # Update output arrays\n", - " for i in range(len_teval):\n", - " solution_t_view[i] = t_eval[i]\n", - " for j in range(total_size):\n", - " # To match the format that scipy follows, we will take the transpose of y.\n", - " solution_y_view[j, i] = y_results_reduced_view[j, i]\n", - " status = old_status\n", + " cpdef void change_parameters(\n", + " self,\n", + " (double, double) t_span = EMPTY_T_SPAN,\n", + " const double[::1] y0 = None,\n", + " tuple args = None,\n", + " double rtol = NAN,\n", + " double atol = NAN,\n", + " double max_step_size = NAN,\n", + " double first_step = NAN,\n", + " const double[::1] t_eval = None,\n", + " bool_cpp_t auto_reset_state = True,\n", + " bool_cpp_t auto_solve = False):\n", + "\n", + " if not isnan(t_span[0]):\n", + " self.change_t_span(t_span, auto_reset_state=False)\n", + "\n", + " if y0 is not None:\n", + " self.change_y0(y0, auto_reset_state=False)\n", + "\n", + " if args is not None:\n", + " self.change_args(args, auto_reset_state=False)\n", + "\n", + " if not isnan(rtol) or not isnan(atol):\n", + " self.change_tols(rtol=rtol, atol=atol, auto_reset_state=False)\n", + "\n", + " if not isnan(max_step_size):\n", + " self.change_max_step_size(max_step_size, auto_reset_state=False)\n", + "\n", + " if not isnan(first_step):\n", + " self.change_first_step(first_step, auto_reset_state=False)\n", + "\n", + " if t_eval is not None:\n", + " self.change_t_eval(t_eval, auto_reset_state=False)\n", + "\n", + " # Now that everything has been set, reset the solver's state.\n", + " # If first step has already been reset then no need to call it again later.\n", + " if not isnan(first_step):\n", + " self.recalc_firststep = False\n", + "\n", + " if auto_reset_state:\n", + " self.reset_state()\n", + "\n", + " # User can choose to go ahead and rerun the solver with the new setup\n", + " if auto_solve:\n", + " # Tell solver to reset state if for some reason the user set reset to False but auto_solve to True,\n", + " # ^ This should probably be a warning. Don't see why you'd ever want to do that.\n", + " self._solve(reset=(not auto_reset_state))\n", + " \n", + " cdef void update_constants(self) noexcept nogil:\n", + " \n", + " # Nothing to update\n", + " pass\n", + " \n", + " cdef void diffeq(self) noexcept nogil:\n", + " # This is a template function that should be overriden by the user's subclass.\n", + "\n", + " # The diffeq can use live variables which are automatically updated before each call.\n", + " # self.t_new: The current \"time\" (of course, depending on your problem, it may not actually be _time_ per se).\n", + " # self.y_new_view[:]: The current y value(s) stored as an array.\n", + " # For example...\n", + " # ```python\n", + " # cdef double t_sin\n", + " # # You will want to import the c version of sin \"from libc.math cimport sin\" at the top of your file.\n", + " # t_sin = sin(self.t_new)\n", + " # y0 = self.y_new_view[0]\n", + " # y1 = self.y_new_view[1]\n", + " # ```\n", + "\n", + " # Can also use other optional global attributes like...\n", + " # self.arg_array_view (size of self.arg_array_view is self.num_args). For example...\n", + " # ```python\n", + " # cdef double a, b\n", + " # a = self.arg_array_view[0]\n", + " # b = self.arg_array_view[1]\n", + " # ```\n", + " # Currently, these args must be doubles (floats).\n", + "\n", + " # This function *must* set new values to the dy_new_view variable (size of array is self.y_size). For example...\n", + " # ```python\n", + " # self.dy_new_view[0] = b * t_sin - y1\n", + " # self.dy_new_view[1] = a * sin(y0)\n", + " # ```\n", + "\n", + " # CySolver can also set additional outputs that the user may want to capture without having to make new calls\n", + " # to the differential equation or its sub-methods. For example...\n", + " # ```python\n", + " # self.extra_output_view[0] = t_sin\n", + " # self.extra_output_view[1] = b * t_sin\n", + " # ```\n", + " # Currently, these additional outputs must be stored as doubles (floats).\n", + " # Note that if extra output is used then the variables `capture_extra` and `num_extra` must be set in CySolver's\n", + " # `__init__` method.\n", + "\n", + " # The default template simply sets all dy to 0.\n", + " cdef Py_ssize_t i\n", + " for i in range(self.y_size):\n", + " self.dy_new_view[i] = 0.\n", + "\n", + "\n", + " # Public accessed properties\n", + " @property\n", + " def solution_t(self):\n", + " # Need to convert the memory view back into a numpy array\n", + " return np.asarray(self.solution_t_view)\n", + "\n", + "\n", + " @property\n", + " def solution_y(self):\n", + " # Need to convert the memory view back into a numpy array\n", + " return np.asarray(self.solution_y_view)\n", + "\n", + "\n", + " @property\n", + " def solution_extra(self):\n", + " # Need to convert the memory view back into a numpy array\n", + " return np.asarray(self.solution_extra_view)\n", + "\n", + "\n", + " @property\n", + " def size_growths(self):\n", + " # How many times the output arrays had to grow during integration\n", + " return self.num_concats - 1\n", + "\n", + "from libc.math cimport sin \n", + "\n", + "cdef class CySolverPendulum(CySolver):\n", + " \n", + " cdef double coeff_1, coeff_2\n", + " \n", + " cdef void update_constants(self) noexcept nogil:\n", + " \n", + " cdef double l, m, g\n", " \n", - " # Set message\n", - " if status == 1:\n", - " message = \"Integration completed without issue.\"\n", - " elif status == 0:\n", - " message = \"Integration is/was ongoing (perhaps it was interrupted?).\"\n", - " elif status == -1:\n", - " message = \"Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers.\"\n", - " elif status == -2:\n", - " message = \"Maximum number of steps (set by user) exceeded during integration.\"\n", - " elif status == -3:\n", - " message = \"Maximum number of steps (set by system architecture) exceeded during integration.\"\n", - " elif status == -6:\n", - " message = \"Integration never started: y-size is zero.\"\n", - " elif status == -7:\n", - " message = \"Error in step size calculation:\\n\\tError in step size acceptance.\"\n", - " elif status == -8:\n", - " message = \"Attribute error.\"\n", + " l = self.arg_array_view[0]\n", + " m = self.arg_array_view[1]\n", + " g = self.arg_array_view[2]\n", + " self.coeff_1 = (-3. * g / (2. * l))\n", + " self.coeff_2 = (3. / (m * l**2))\n", + " \n", + " cdef void diffeq(self) noexcept nogil:\n", "\n", - " return solution_t, solution_y, success, message\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "0be43685", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "182\n" - ] - } - ], - "source": [ - "t_cy, y_cy, _, _ = cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print(t_cy.size)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "f4a356ce", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "182\n" - ] - } - ], - "source": [ - "t_cy, y_cy, _, _ = cyrk_ode_2(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print(t_cy.size)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "77ad57b6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "181\n" - ] - } - ], - "source": [ - "t_cy, y_cy, _, _ = cyrk_ode_3(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print(t_cy.size)" + " # Unpack y\n", + " cdef double y0, y1, torque\n", + " y0 = self.y_new_view[0]\n", + " y1 = self.y_new_view[1]\n", + "\n", + " # External torque\n", + " torque = 0.1 * sin(self.t_new)\n", + "\n", + " self.dy_new_view[0] = y1\n", + " self.dy_new_view[1] = self.coeff_1 * sin(y0) + self.coeff_2 * torque" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 36, "id": "b9c70e0e", "metadata": {}, "outputs": [ @@ -20575,7 +11041,7 @@ "source": [ "print('Working on Cython (class) integration...')\n", "# Solver = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "Solver = cyrk_ode(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", + "Solver = CySolverPendulum(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", "Solver.solve()\n", "print('Status', Solver.status)\n", "print('Success', Solver.success)\n", @@ -20588,7 +11054,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 37, "id": "735012fa", "metadata": {}, "outputs": [ @@ -20604,7 +11070,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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e++9mDRpEgYPHoydO3di6tSp+c7rTtajMD179gQAfPzxx7jiiity9//555/YsWMHJk6c6PW5HUVERKB+/frYs2ePR/fbsmULJk+ejLp162LAgAGmtAUArr/+ekyePBmVKlXyOMgAgJiYGPTo0QObN29Gq1at8v09vdGpUyfExsZi5syZGDhwoMuuo8aNG6Nhw4a5z4s79u7di0qVKqFatWrFbiORP5XY4GXPnj349NNPcfjw4dwU9KOPPoolS5Zg7ty5br8ZFEd6ejqefPJJDBo0COXLl7f88SgwdOzYETNmzMDIkSPRtm1bPPjgg2jevDmysrKwefNmzJo1Cy1atHAKXipUqIChQ4dixowZqFOnjtPPtJYtW+L333/HokWLUKNGDZQrV86j7Ezjxo1x//334+2330ZYWBj69OmD/fv345lnnkGtWrUwbtw4U35/QDInP/74Y4E/37hxI2JjY5GVlZU7Sd1HH32EqlWrYtGiRaYECNrYsWPx1Vdf4aqrrsK4cePQqlUr2O12HDx4ED///DMeeeQRdOjQodBzvPnmm+jSpQu6du2KBx98EHXr1kVKSgp2796NRYsWYdmyZR61qWzZsnj99ddx77334pprrsF9992HatWqYffu3diyZUtu1/R7772HPn364LrrrsNdd92FmjVr4syZM9ixYwc2bdqEL774wum8a9euRbdu3QqsoyEKFiU2eNm0aROUUmjUqJHT/oyMjNy09v79+4u8Ehs1apRXNTVZWVkYOHAg7HY7pk+f7vH9Kbjdd999aN++Pf7v//4PU6dORWJiIkqXLo1GjRph0KBBGD16dL773H777ZgxYwYefPBBhIXlL1d78803MWrUKAwcOBCpqano1q1bvmLTosyYMQOXXnopPvjgA7z77ruIjY1F7969MWXKFJc1Lt4aPHgw5syZgz///NMpy6P17t0bgGST4uLi0LJlS0ydOhV33303ypUrZ1o7AKBMmTJYuXIlXn75ZcyaNQv79u1DdHQ0ateujWuuuSbf0gOuNGvWDJs2bcILL7yAp59+GidOnECFChXQsGHD3LoXT91zzz2Ij4/H1KlTce+990Iphbp162LYsGG5x/To0QPr16/HSy+9hLFjx+Ls2bOoVKkSmjVrli87tWfPHvz111+YNGmSV+0hCiQ2ZUX5fgCy2WxYuHBh7tTpCxYswODB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/vprLFu2DPXq1fN3k0LS1Vdfjb/++gsJCQm5X+3atcPgwYORkJDAwMUknTt3zjfUf9euXahTp46fWhSaUlNTERbm/DEWHh7OodIWqlevHqpXr+70mZiZmYnly5f79DORmRc3jB8/HkOGDEG7du3QsWNHzJo1CwcPHsSIESP83bSQMWrUKHzyySf49ttvUa5cudxMV2xsLKKjo/3cutBRrly5fHVEZcqUQaVKlVhfZKJx48ahU6dOmDx5MgYMGID169dj1qxZmDVrlr+bFlL69++Pl156CbVr10bz5s2xefNmvPHGGxg+fLi/mxbUzp8/j927d+d+v2/fPiQkJCAuLg61a9fG2LFjMXnyZDRs2BANGzbE5MmTERMTg0GDBvmukT4b1xTk3n33XVWnTh0VERGhLr/8cg7hNRkAl19z5871d9NCHodKW2PRokWqRYsWKjIyUjVp0kTNmjXL300KOcnJyWrMmDGqdu3aKioqStWvX19NnDhRZWRk+LtpQe23335z+X48bNgwpZQMl3722WdV9erVVWRkpLrqqqvUX3/95dM22pRSynehEhEREVHxsOaFiIiIggqDFyIiIgoqDF6IiIgoqDB4ISIioqDC4IWIiIiCCoMXIiIiCioMXoiIiCioMHghIiKioMLghYiIiIIKgxciIiIKKgxeiIiIKKj8P6S3h6B/gt/WAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -20644,7 +11110,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 15, "id": "01538911", "metadata": {}, "outputs": [ @@ -20655,7 +11121,7 @@ "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[28], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mload_ext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mline_profiler\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "Cell \u001b[1;32mIn[15], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mload_ext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mline_profiler\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:2417\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[1;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[0;32m 2415\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[0;32m 2416\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m-> 2417\u001b[0m result \u001b[38;5;241m=\u001b[39m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 2419\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[0;32m 2420\u001b[0m \u001b[38;5;66;03m# when using magics with decodator @output_can_be_silenced\u001b[39;00m\n\u001b[0;32m 2421\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[0;32m 2422\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\extension.py:33\u001b[0m, in \u001b[0;36mExtensionMagics.load_ext\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m module_str:\n\u001b[0;32m 32\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m UsageError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMissing module name.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 33\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshell\u001b[38;5;241m.\u001b[39mextension_manager\u001b[38;5;241m.\u001b[39mload_extension(module_str)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124malready loaded\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 36\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m extension is already loaded. To reload it, use:\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m module_str)\n", "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\extensions.py:76\u001b[0m, in \u001b[0;36mExtensionManager.load_extension\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Load an IPython extension by its module name.\u001b[39;00m\n\u001b[0;32m 70\u001b[0m \n\u001b[0;32m 71\u001b[0m \u001b[38;5;124;03mReturns the string \"already loaded\" if the extension is already loaded,\u001b[39;00m\n\u001b[0;32m 72\u001b[0m \u001b[38;5;124;03m\"no load function\" if the module doesn't have a load_ipython_extension\u001b[39;00m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;124;03mfunction, or None if it succeeded.\u001b[39;00m\n\u001b[0;32m 74\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 75\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 76\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_load_extension(module_str)\n\u001b[0;32m 77\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mModuleNotFoundError\u001b[39;00m:\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m module_str \u001b[38;5;129;01min\u001b[39;00m BUILTINS_EXTS:\n", @@ -20672,90 +11138,6 @@ "%load_ext line_profiler" ] }, - { - "cell_type": "code", - "execution_count": 22, - "id": "d8e6a48b", - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'PendulumSolver' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[22], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtimeit\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPendulumSolver(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:2417\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[1;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[0;32m 2415\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[0;32m 2416\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m-> 2417\u001b[0m result \u001b[38;5;241m=\u001b[39m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 2419\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[0;32m 2420\u001b[0m \u001b[38;5;66;03m# when using magics with decodator @output_can_be_silenced\u001b[39;00m\n\u001b[0;32m 2421\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[0;32m 2422\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\execution.py:1170\u001b[0m, in \u001b[0;36mExecutionMagics.timeit\u001b[1;34m(self, line, cell, local_ns)\u001b[0m\n\u001b[0;32m 1168\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m index \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m 1169\u001b[0m number \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m10\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m index\n\u001b[1;32m-> 1170\u001b[0m time_number \u001b[38;5;241m=\u001b[39m timer\u001b[38;5;241m.\u001b[39mtimeit(number)\n\u001b[0;32m 1171\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m time_number \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.2\u001b[39m:\n\u001b[0;32m 1172\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\execution.py:158\u001b[0m, in \u001b[0;36mTimer.timeit\u001b[1;34m(self, number)\u001b[0m\n\u001b[0;32m 156\u001b[0m gc\u001b[38;5;241m.\u001b[39mdisable()\n\u001b[0;32m 157\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 158\u001b[0m timing \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minner(it, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtimer)\n\u001b[0;32m 159\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 160\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m gcold:\n", - "File \u001b[1;32m:1\u001b[0m, in \u001b[0;36minner\u001b[1;34m(_it, _timer)\u001b[0m\n", - "\u001b[1;31mNameError\u001b[0m: name 'PendulumSolver' is not defined" - ] - } - ], - "source": [ - "%timeit PendulumSolver(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "698b6e53", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "301 ms ± 68.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "%timeit nbrk_ode(pendulum_nb, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "67b12e97", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.21 s ± 90 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "%timeit cyrk_ode(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "49701a69", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.27 s ± 69.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "# 1.15s\n", - "# 1.19s\n", - "# 1.22s, 1.31s\n", - "# 1.18s, 1.23s\n", - "%timeit cyrk_ode_2(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, { "cell_type": "code", "execution_count": 41, @@ -20831,7 +11213,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 16, "id": "b8bbd48b", "metadata": {}, "outputs": [], @@ -20841,7 +11223,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 17, "id": "6993f48c", "metadata": {}, "outputs": [ @@ -20849,23 +11231,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "Thu Aug 17 20:06:57 2023 Profile.prof\n", + "Sat Aug 26 09:38:47 2023 Profile.prof\n", "\n", - " 1069361 function calls in 0.475 seconds\n", + " 18 function calls in 0.076 seconds\n", "\n", " Ordered by: internal time\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", - " 1 0.369 0.369 0.474 0.474 _cython_magic_b9f81bbb0c6aacc42d8ff47ce6ec11391e7d7910.pyx:510(_solve)\n", - " 1069340 0.105 0.000 0.105 0.000 _cython_magic_b9f81bbb0c6aacc42d8ff47ce6ec11391e7d7910.pyx:1237(diffeq)\n", - " 1 0.001 0.001 0.475 0.475 :1()\n", - " 1 0.000 0.000 0.474 0.474 _cython_magic_b9f81bbb0c6aacc42d8ff47ce6ec11391e7d7910.pyx:89(__init__)\n", - " 1 0.000 0.000 0.475 0.475 {built-in method builtins.exec}\n", + " 1 0.076 0.076 0.076 0.076 :1()\n", + " 1 0.000 0.000 0.076 0.076 {built-in method builtins.exec}\n", " 3 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath.implement_array_function}\n", - " 3 0.000 0.000 0.000 0.000 {built-in method numpy.empty}\n", " 3 0.000 0.000 0.000 0.000 numeric.py:150(ones)\n", " 3 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(copyto)\n", - " 1 0.000 0.000 0.000 0.000 _cython_magic_b9f81bbb0c6aacc42d8ff47ce6ec11391e7d7910.pyx:446(calc_first_step)\n", + " 3 0.000 0.000 0.000 0.000 {built-in method numpy.empty}\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", " 3 0.000 0.000 0.000 0.000 multiarray.py:1079(copyto)\n", "\n", @@ -20875,23 +11253,23 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 28, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "cProfile.runctx(\"PendulumSolver(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)\", globals(), locals(), \"Profile.prof\")\n", + "cProfile.runctx(\"CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)\", globals(), locals(), \"Profile.prof\")\n", "s = pstats.Stats(\"Profile.prof\")\n", "s.strip_dirs().sort_stats(\"time\").print_stats()" ] }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 39, "id": "2f31ae65", "metadata": {}, "outputs": [ @@ -20901,11 +11279,11 @@ "text": [ "Performance\n", "Cython (class - solve only)\n", - "74.9 ms ± 494 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", + "72.9 ms ± 5.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", "Cython (class - build)\n", - "45.4 µs ± 71.1 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", + "47 µs ± 7.4 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", "Cython (class - build and solve)\n", - "131 µs ± 286 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" + "73.8 ms ± 9.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], @@ -20922,8 +11300,20 @@ "# v0.6.2: 101us, 101us, 102us\n", "# v0.7.0: 100us, \n", "# ^^ 97.4us\n", - "\n", - "Solver = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=False)\n", + "# 118us, 123us\n", + "# 128us, 132us, 129us\n", + "\n", + "# Changing time size\n", + "# 85.4ms, 90.1ms\n", + "# 70.6ms, 70.5ms\n", + "# 82ms, 80.3ms, 83.3ms\n", + "# 88.3ms, 87.8ms\n", + "# 78.8ms\n", + "# 76.4 79.1ms\n", + "# 82.8ms, 85.4ms\n", + "# 65ms 67.6ms\n", + "# 74ms, 75.3ms, 72.2ms\n", + "Solver = CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=False)\n", "%timeit Solver.solve(reset=True)\n", "\n", "print('Cython (class - build)')\n", @@ -20935,8 +11325,14 @@ "# 22.6us, 23.1us, 22.8us\n", "# v0.6.2: 43.8us, 43.6us\n", "# v0.7.0: 43.8us,\n", + "# 60us, 59.7us\n", + "# 62.1us, 59.8us, 63.7us\n", "\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=False)\n", + "# Changing time size\n", + "# 61.7us, 59.7us\n", + "# 46.7us, 46.5us\n", + "\n", + "%timeit CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=False)\n", "\n", "print('Cython (class - build and solve)')\n", "# CyRK v0.6.0:\n", @@ -20947,8 +11343,20 @@ "# 103us, 102us, 102us\n", "# v0.6.2: 128us, 127us\n", "# v0.7.0: 126us\n", - "\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)" + "# 159us, 165us\n", + "# 166us, 167us, 170us\n", + "\n", + "# Changing time size\n", + "# 92ms, 84ms\n", + "# 70.2ms, 71.2ms\n", + "# 83ms, 77.7ms, 83.1ms\n", + "# 89ms, 84.1ms\n", + "# 76.9ms\n", + "# 81.5ms 78.8ms\n", + "# 78.3ms, 83.9ms\n", + "# 69ms 70ms\n", + "# 71.4ms, 70.5ms\n", + "%timeit CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)" ] }, { diff --git a/pyproject.toml b/pyproject.toml index 7540620..d50eacb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0dev5' +version = '0.7.0dev6' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 7d441d439c2938cd66c18152cb783d8db699e5c4 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sun, 27 Aug 2023 00:47:29 -0400 Subject: [PATCH 20/29] Updated cysolver diffeq examples. fixed duplicate declarations --- CyRK/cy/cysolver.pyx | 52 ---------------------- CyRK/cy/cysolvertest.pyx | 96 +++++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 88 deletions(-) diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 0451e93..f50fdad 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -34,58 +34,6 @@ cdef (double, double) EMPTY_T_SPAN = (NAN, NAN) cdef class CySolver: - # Class attributes - # -- Live variables - cdef double t_new, t_old - cdef Py_ssize_t len_t - cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view - cdef double[::1] extra_output_view, extra_output_init_view - - # -- Dependent (y0) variable information - cdef Py_ssize_t y_size - cdef double y_size_dbl, y_size_sqrt - cdef const double[::1] y0_view - - # -- RK method information - cdef unsigned char rk_method - cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended - cdef double error_expo - cdef Py_ssize_t len_C - cdef double[::1] B_view, E_view, E3_view, E5_view, C_view - cdef double[:, ::1] A_view, K_view - cdef double[::1, :] K_T_view - - # -- Integration information - cdef public char status - cdef public str message - cdef public bool_cpp_t success - cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf - cdef bool_cpp_t direction_flag - cdef double rtol, atol - cdef double step_size, max_step_size - cdef double first_step - cdef Py_ssize_t expected_size, num_concats, max_steps - cdef bool_cpp_t use_max_steps - cdef bool_cpp_t recalc_firststep - - # -- Optional args info - cdef Py_ssize_t num_args - cdef double[::1] arg_array_view - - # -- Extra output info - cdef bool_cpp_t capture_extra - cdef Py_ssize_t num_extra - - # -- Interpolation info - cdef bool_cpp_t run_interpolation - cdef bool_cpp_t interpolate_extra - cdef Py_ssize_t len_t_eval - cdef double[::1] t_eval_view - - # -- Solution variables - cdef double[:, ::1] solution_y_view, solution_extra_view - cdef double[::1] solution_t_view - def __init__(self, (double, double) t_span, diff --git a/CyRK/cy/cysolvertest.pyx b/CyRK/cy/cysolvertest.pyx index 8483ddc..3826225 100644 --- a/CyRK/cy/cysolvertest.pyx +++ b/CyRK/cy/cysolvertest.pyx @@ -12,8 +12,7 @@ from CyRK.cy.cysolver cimport CySolver cdef class CySolverTester(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef void diffeq(self) noexcept nogil: # Unpack y cdef double y0, y1 @@ -26,8 +25,7 @@ cdef class CySolverTester(CySolver): cdef class CySolverAccuracyTest(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef void diffeq(self) noexcept nogil: # Unpack y cdef double y0, y1 @@ -40,8 +38,7 @@ cdef class CySolverAccuracyTest(CySolver): cdef class CySolverExtraTest(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef void diffeq(self) noexcept nogil: # Unpack y cdef double y0, y1, extra_0, extra_1 @@ -57,41 +54,51 @@ cdef class CySolverExtraTest(CySolver): self.extra_output_view[0] = extra_0 self.extra_output_view[1] = extra_1 + cdef class CySolverLorenz(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef double a, b, c + + cdef void update_constants(self) noexcept nogil: + + self.a = self.arg_array_view[0] + self.b = self.arg_array_view[1] + self.c = self.arg_array_view[2] + + cdef void diffeq(self) noexcept nogil: # Unpack y - cdef double y0, y1, y2, a, b, c + cdef double y0, y1, y2 y0 = self.y_new_view[0] y1 = self.y_new_view[1] y2 = self.y_new_view[2] - a = self.arg_array_view[0] - b = self.arg_array_view[1] - c = self.arg_array_view[2] - self.dy_new_view[0] = a * (y1 - y0) - self.dy_new_view[1] = y0 * (b - y2) - y1 - self.dy_new_view[2] = y0 * y1 - c * y2 + self.dy_new_view[0] = self.a * (y1 - y0) + self.dy_new_view[1] = y0 * (self.b - y2) - y1 + self.dy_new_view[2] = y0 * y1 - self.c * y2 + cdef class CySolverLorenzExtra(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef double a, b, c + + cdef void update_constants(self) noexcept nogil: + + self.a = self.arg_array_view[0] + self.b = self.arg_array_view[1] + self.c = self.arg_array_view[2] + + cdef void diffeq(self) noexcept nogil: # Unpack y - cdef double y0, y1, y2, a, b, c, e_1, e_2, e_3 + cdef double y0, y1, y2, e_1, e_2, e_3 y0 = self.y_new_view[0] y1 = self.y_new_view[1] y2 = self.y_new_view[2] - a = self.arg_array_view[0] - b = self.arg_array_view[1] - c = self.arg_array_view[2] - e_1 = a - e_2 = (b - y2) - e_3 = c * y2 + e_1 = self.a + e_2 = (self.b - y2) + e_3 = self.c * y2 self.dy_new_view[0] = e_1 * (y1 - y0) self.dy_new_view[1] = y0 * e_2 - y1 @@ -104,25 +111,42 @@ cdef class CySolverLorenzExtra(CySolver): cdef class CySolverLotkavolterra(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef double a, b, c, d + + cdef void update_constants(self) noexcept nogil: + + self.a = self.arg_array_view[0] + self.b = self.arg_array_view[1] + self.c = self.arg_array_view[2] + self.d = self.arg_array_view[3] + + cdef void diffeq(self) noexcept nogil: # Unpack y - cdef double y0, y1, a, b, c, d + cdef double y0, y1 y0 = self.y_new_view[0] y1 = self.y_new_view[1] - a = self.arg_array_view[0] - b = self.arg_array_view[1] - c = self.arg_array_view[2] - d = self.arg_array_view[3] - self.dy_new_view[0] = a * y0 - b * y0 * y1 - self.dy_new_view[1] = -c * y1 + d * y0 * y1 + self.dy_new_view[0] = self.a * y0 - self.b * y0 * y1 + self.dy_new_view[1] = -self.c * y1 + self.d * y0 * y1 + cdef class CySolverPendulum(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef double coeff_1, coeff_2 + + cdef void update_constants(self) noexcept nogil: + + cdef double l, m, g + + l = self.arg_array_view[0] + m = self.arg_array_view[1] + g = self.arg_array_view[2] + + self.coeff_1 = (-3. * g / (2. * l)) + self.coeff_2 = (3. / (m * l**2)) + + cdef void diffeq(self) noexcept nogil: # Unpack y cdef double y0, y1, l, m, g, torque @@ -136,4 +160,4 @@ cdef class CySolverPendulum(CySolver): torque = 0.1 * sin(self.t_new) self.dy_new_view[0] = y1 - self.dy_new_view[1] = (-3. * g / (2. * l)) * sin(y0) + (3. / (m * l**2)) * torque + self.dy_new_view[1] = self.coeff_1 * sin(y0) + self.coeff_2 * torque From 9edfa5eca367261528658bba2bf21175c4306bcc Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sun, 27 Aug 2023 00:55:50 -0400 Subject: [PATCH 21/29] fixed issue with test that did not specify contiguous arrays --- CyRK/_test.py | 2 +- README.md | 9 ++++++--- pyproject.toml | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CyRK/_test.py b/CyRK/_test.py index f2fb711..37c547a 100644 --- a/CyRK/_test.py +++ b/CyRK/_test.py @@ -54,7 +54,7 @@ def test_cysolver(): from CyRK.cy.cysolvertest import CySolverTester # TODO: Currently CySolver only works with floats not complex - CySolverTesterInst = CySolverTester(time_span, np.asarray(np.real(initial_conds), dtype=np.float64)) + CySolverTesterInst = CySolverTester(time_span, np.asarray(np.real(initial_conds), dtype=np.float64, order='C')) CySolverTesterInst.solve() assert CySolverTesterInst.success diff --git a/README.md b/README.md index 9ab721c..cc530c4 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ def diffeq_nb(t, y): dy[1] = (0.02 * y[0] - 1.) * y[1] return dy -initial_conds = np.asarray((20., 20.), dtype=np.complex128) +initial_conds = np.asarray((20., 20.), dtype=np.complex128, order='C') time_span = (0., 50.) rtol = 1.0e-7 atol = 1.0e-8 @@ -146,8 +146,7 @@ from CyRK.cy.cysolver cimport CySolver cdef class MyCyRKDiffeq(CySolver): - @cython.exceptval(check=False) - cdef void diffeq(self): + cdef void diffeq(self) noexcept nogil: # Unpack dependent variables using the `self.y_new_view` variable. # In this example we have a system of two dependent variables, but any number can be used. @@ -176,6 +175,10 @@ Once you compile the differential equation it can be imported in a regular pytho """run.py""" from ODE import MyCyRKDiffeq +# It is important that any arrays passed to the CySolver are C-contiguous (set with numpy with "order=C") +# Also, currently, CySolver only works with floats/doubles. Not complex. +initial_conds = np.asarray((20., 20.), dtype=np.float64, order='C') + # Need to make an instance of the integrator. # The diffeq no longer needs to be passed to the class. MyCyRKDiffeqInst = MyCyRKDiffeq(time_span, initial_conds, args=(0.01, 0.02), rk_method=1, rtol=rtol, atol=atol, auto_solve=True) diff --git a/pyproject.toml b/pyproject.toml index d50eacb..f90755f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0dev6' +version = '0.7.0dev7' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 398c79caa6b487fe01086e043b46a22940f4b037 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sun, 27 Aug 2023 01:58:37 -0400 Subject: [PATCH 22/29] Updated performance --- Benchmarks/CyRK - SciPy Comparison.ipynb | 141 +++++++++++------- Benchmarks/CyRK_CySolver.pdf | Bin 13904 -> 11784 bytes .../CyRK_SciPy_Compare_pendulum_v0-7-0a1.png | Bin 0 -> 40930 bytes Benchmarks/CyRK_cyrk_ode.pdf | Bin 13904 -> 11784 bytes Benchmarks/CyRK_numba.pdf | Bin 13874 -> 11750 bytes Benchmarks/SciPy.pdf | Bin 13874 -> 11743 bytes CyRK/cy/cysolvertest.pyx | 5 +- Performance/cyrk_performance-DOP853.csv | 2 + Performance/cyrk_performance-RK23.csv | 2 + Performance/cyrk_performance-RK45.csv | 2 + README.md | 4 +- pyproject.toml | 2 +- 12 files changed, 101 insertions(+), 57 deletions(-) create mode 100644 Benchmarks/CyRK_SciPy_Compare_pendulum_v0-7-0a1.png diff --git a/Benchmarks/CyRK - SciPy Comparison.ipynb b/Benchmarks/CyRK - SciPy Comparison.ipynb index 05d7922..89e431c 100644 --- a/Benchmarks/CyRK - SciPy Comparison.ipynb +++ b/Benchmarks/CyRK - SciPy Comparison.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 11, "id": "971e366b", "metadata": {}, "outputs": [], @@ -32,32 +32,66 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 22, "id": "eff22823", "metadata": {}, "outputs": [], "source": [ - "from CyRK.cy.cysolvertest import CySolverTester\n", - "\n", - "initial_conds = np.asarray((20., 20.), dtype=np.float64)\n", - "time_span = (0., 50.)\n", "rtol = 1.0e-7\n", "atol = 1.0e-8\n", "\n", - "@njit\n", - "def diffeq(t, y, dy):\n", - " dy[0] = (1. - 0.01 * y[1]) * y[0]\n", - " dy[1] = (0.02 * y[0] - 1.) * y[1]\n", + "use_pendulum = True\n", + "\n", + "if use_pendulum:\n", + " from CyRK.cy.cysolvertest import CySolverPendulum as CySolverTester\n", + " time_span = (0., 10.)\n", + " args = (1., 1., 9.81)\n", + " initial_conds = np.asarray((0.01, 0.), dtype=np.float64, order='C')\n", + " \n", + " @njit\n", + " def diffeq(t, y, dy, l, m, g):\n", + "\n", + " # External torque\n", + " torque = 0.1 * np.sin(t)\n", + "\n", + " y0 = y[0] # Angular deflection [rad]\n", + " y1 = y[1] # Angular velocity [rad s-1]\n", + " dy[0] = y1\n", + " dy[1] = (-3. * g / (2. * l)) * np.sin(y0) + (3. / (m * l**2)) * torque\n", + " \n", + " @njit\n", + " def diffeq_scipy(t, y, l, m, g):\n", "\n", + " # External torque\n", + " torque = 0.1 * np.sin(t)\n", "\n", - "# Create helper function for scipy to work with this kind of diffeq\n", - "@njit\n", - "def diffeq_scipy(t, y):\n", + " y0 = y[0] # Angular deflection [rad]\n", + " y1 = y[1] # Angular velocity [rad s-1]\n", + " dy = np.empty_like(y)\n", + " dy[0] = y1\n", + " dy[1] = (-3. * g / (2. * l)) * np.sin(y0) + (3. / (m * l**2)) * torque\n", + " return dy\n", " \n", - " dy = np.zeros_like(y)\n", - " diffeq(t, y, dy)\n", + "else:\n", + " from CyRK.cy.cysolvertest import CySolverTester as CySolverTester\n", " \n", - " return dy\n", + " initial_conds = np.asarray((20., 20.), dtype=np.float64)\n", + " args = tuple()\n", + " time_span = (0., 50.)\n", + " @njit\n", + " def diffeq(t, y, dy):\n", + " dy[0] = (1. - 0.01 * y[1]) * y[0]\n", + " dy[1] = (0.02 * y[0] - 1.) * y[1]\n", + "\n", + "\n", + " # Create helper function for scipy to work with this kind of diffeq\n", + " @njit\n", + " def diffeq_scipy(t, y):\n", + "\n", + " dy = np.zeros_like(y)\n", + " diffeq(t, y, dy)\n", + "\n", + " return dy\n", "\n", "\n", "# Create plotting routine\n", @@ -88,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 23, "id": "bdae6603", "metadata": {}, "outputs": [ @@ -101,7 +135,7 @@ }, { "data": { - "image/png": "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U6NGjUq97Hk6Hn/8cXXppZeqo48+Wh133HHqF7/4hVqzZo0aMWKEaB3h8Vd/9Vfqox/9qDrssMPUYYcdpr7xjW+o7u5udfTRR4vGMR0nn3yyeuutt9TLL7+sbr/99r73Retojvnz56uVK1eqCRMm9B3jxo3Lis7pC1TU4/nnn1d33323671XXnlFfetb30q9bEU4Kjk869atU9dee23fv5uamtSWLVvUlVdemXp583yMGzdOKaXU6aefLlrHfGzatEn99V//tWgcwzFy5Ej12muvqQ9/+MPqmWeecTk8onU0x/z589Xvf//7qp+nqbNMacXEkCFDOOmkk1i4cKHr/YULF3LaaaelVKpiM23aNCZOnOjSvKenhyVLlojmIRk9ejQAmzdvBkTrOBg0aBAXXnghI0eO5LnnnhONY+Cuu+7il7/8JYsWLXK9L1pHy2GHHUZbWxtvvfUWDz74INOmTQPS11keHhoT48aNo7GxkY6ODtf7HR0dtLa2plSqYmPrWknzgw8+OI0iFYbbbruNZ599ltWrVwOidZRMnz6d5557jmHDhrFjxw7mzp3LH//4Rz7wgQ8AonFUXHjhhZx44onMmDFjwGdSn6PjhRde4HOf+xyvv/46EyZM4Ctf+QpLly7lmGOOSV1ncXhiRinl+ndDQ8OA94RoEc2j5Tvf+Q7HHXdcxYR70To8r732GieccAJjxozhk5/8JA888ACzZs3q+1w0Ds+UKVP413/9V84666yajzYQrcPzxBNP9L1etWoVzz33HG+++SaXXnopzz//PJCezjKlFRMbN26kt7d3QDRn/PjxA7xbIRrWr18PIJpHyB133MG5557Lhz70Idra2vreF62jY8+ePbz55pssX76cG264gRUrVvD3f//3onGEnHTSSUyYMIHly5ezZ88e9uzZw+zZs5k3bx579uzp01O0jp6uri5WrlzJYYcdlnqdFocnJvbs2cPy5cuZM2eO6/05c+awdOnSlEpVbN5++23a29tdmg8ZMoRZs2aJ5gG48847Of/88znjjDNYs2aN6zPROj4aGhoYOnSoaBwhixYtYvr06Zxwwgl9x+9+9zt+8IMfcMIJJ/DWW2+J1jHR1NTEUUcdRXt7eybqdOpZ3UU97GXpl19+uTryyCPVbbfdprZv364OOuig1MuW12PkyJHq+OOPV8cff7xSSqkvfvGL6vjjj+9b6n/ttdeqLVu2qE984hPqmGOOUT/4wQ9kaWmA46677lJbtmxRH/zgB13LS4cNG9Z3jWgd/vjmN7+pZs6cqQ4++GA1ffp09Y1vfEP19vaqM888UzSO+ei/Sku0jub4l3/5F/XBD35QTZ06VZ1yyinq5z//udq2bVtfv5eyzukLVOTjqquuUm+//bbavXu3WrZsmWtZrxz+j1mzZqlK3HfffX3XzJ8/X61bt07t2rVLLV68WB1zzDGplztvRzUuvfRS13Widbjj//7f/9tnHzo6OtSTTz7Z5+yIxvEe/R0e0Tqaw95Xp7u7W7333nvqpz/9qTrqqKMyoXOD9UIQBEEQBKGwSA6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwiMOjyAIgiAIhUccHkEQCs/tt9/OI488knYxBEFIEXF4BEEoPDNmzODFF19MuxiCIKSIPEtLEITC0tjYyM6dO2lqaup774UXXuDUU09NsVSCIKRBY9oFEARBiIu9e/cyc+ZMXnzxRY4//ng6OjrYvXt32sUSBCEFxOERBKGwKKWYNGkSGzdu5A9/+EPaxREEIUUkh0cQhELz/ve/nxUrVqRdDEEQUkYcHkEQCs0JJ5wgDo8gCOLwCIJQbI499liZzhIEQRweQRCKzaBBgzjuuOOYOHEiLS0taRdHEISUEIdHEIRC85WvfIULL7yQdevW8dWvfjXt4giCkBKyD48gCIIgCIVHIjyCIAiCIBQecXgEQRAEQSg84vAIgiAIglB4xOERBEEQBKHwiMMjCIIgCELhEYdHEARBEITCIw6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeP4/cZ4Fv1Dm5tcAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAGwCAYAAABb3Do8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHc0lEQVR4nO2deXxVxfn/3wkJyhIWZQkgEFEBQRFFQBDBDUvpV0Vs8duqtdRWvlh/XbSi1FpabcEuLrUubbWiUBXbqi1WVFzADRCDggvgAkQ0QJA1YcsC8/tjZnKy3Nz1rDfP+/Wa15zcO2fOc0/uPedznnnmmRxAIQiCIAiCIDRJbtAGCIIgCIIghB0RTIIgCIIgCAkQwSQIgiAIgpAAEUyCIAiCIAgJEMEkCIIgCIKQABFMgiAIgiAICRDBJAiCIAiCkIC8oA3IJrp3705FRUXQZgiCIAiCkAIFBQVs2rQpbhsRTC7RvXt3SktLgzZDEARBEIQ06NGjR1zRJILJJaxnqUePHuJlEgRBEISIUFBQQGlpacJ7twgml6moqBDBJAiCIAhZhgR9C4IgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRAYpgEQRAEoRnQunVrOnXqRE5OTtCm+IZSim3btrFv376M+xLBJAiCIAhZTE5ODpMnT+bMM88M2pTAWLx4MbNnz0YplXYfIpgEQRAEIYuZPHkyY8aM4YknnmDt2rXU1NQEbZJv5OXl0b9/fyZNmgTAQw89lH5fbhklCIIgCEK4aNOmDWeeeSZPPPEEzz77bNDmBMK6desAuOSSS5g3b17aw3MS9C0IgiAIWcqRRx4JwNq1awO2JFjs5+/UqVPafYhgEgRBEIQsxQZ4N6dhuFjYz59JwLsIJkEQBEEQhASIYBIEQRAEQUiACCZBEARBEIQEiGASBEHISlogE6EFwT1EMAmCIGQdLYCXgR3A1UDzyewsCF4hgkkQBCHr+AEwBigA7kWLp96BWiSEh9YBlVT5/PPPmTp1ar3XRowYwd69e+nVq1caPWaGCCZBEISsohtwq9l+AtgLnIUWTXLJb+60Rn8jgiipiqZly5YxdOjQeq/ddddd3HXXXWzcuDHF3jJHfj2CIAhZxe1AO2AZ8E1gELATOAYYFaBdgpAaDQXT5ZdfTq9evZg1axYAX/va11i7di0ff/wxV155pef2SESgIAhC1nAWWiQdBKYCClgP/BuYDHwDeC0o44QQsA9oE+CxU2HZsmX89re/pU2bNhw6dIiZM2fy85//nD179tCiRQvuuOMOzjrrLMrLy3nnnXd46qmn2Llzpye2gwgmQRCELOL7pv4rsLLO6/9EC6aLgR8Bh/w1SwgV6a2k5j/FxcUcPHiQU045hXPPPZft27fXLp47bNgwPvzwQzZt2gTAggUL+MpXvsK8efM8s0cEkyAIQlaQA5xjth9v8N5LwC50fNNI4A3/zBKENKmsrGTVqlVMnDiRq666ivPPPx+lFADdu3entLS0tu0XX3xBjx49PLVHYpgEQRCyghOALujw2mUN3qsG/mO2v+GnUYKQEcuWLeOHP/whL730Eq+88krt67HWhLNiyitEMAmCIGQF1rv0GlogNeSfpr4YycskRIWVK1dSU1PD9ddfX+/10tLSeh6lo446is2bN3tqiwgmQRCErOBcU7/cxPsvAruBHsAIXywShEy59NJLue+++/j444/rvb58+XJOOOEEunfvTtu2bRk/fjwvvPCCp7ZIDJMgCELkyUMnqgQdrxSLKmA+cDl6WG6JD3YJQurk5OTQuXNnrrzySvr168dFF13UqM3Bgwe57rrrWLRoEbm5ufzud79jx44dntoVSQ/T1KlTWb9+Pfv376e4uJhRo+LnFhk9ejTFxcXs37+fdevWMWXKlEZt2rdvzz333MOmTZvYv38/q1ev5qtf/apXH0EQBMFFhgNtgS+B9+K0+5epx3tukSCky+jRo9m8eTOXXXYZEydOpLy8PGa7Z555hn79+nHcccfxwAMPeG5X5DxMkyZN4q677uLqq6/mzTffZMqUKTz33HMMGDCAzz//vFH7oqIiFixYwAMPPMBll13G6aefzn333ceXX37JU089BUB+fj4vvvgiW7du5etf/zpffPEFPXv2pKKiwu+PJwiCkAY2fukVdO6lpnjT1H3RAmuPl0YJQlq8+uqrtGjRImgzYqKiVJYtW6buu+++eq+tXr1azZw5M2b72267Ta1evbrea/fff79asmRJ7d9TpkxRn376qcrLy0vajpYtW6qCgoLa0r17d6WUUgUFBYGfIylSpDS38poCpeD7SbTdaNqeHgK7pXhdevfurebMmaN69+4duC1hPQ8FBQVJ3b8jNSSXn5/PkCFDWLhwYb3XFy5cyMiRI2PuM2LEiEbtX3jhBU499VTy8rSD7YILLmDp0qXce++9bNmyhffff5/p06eTm9v06Zk+fTrl5eW1pW4+CEEQBP9oDZxmtpsK+K7Lu6Y+2RtzBCFLiZRg6tSpE3l5eZSVldV7vaysjMLCwpj7FBYWxmyfn59Pp06dAOjTpw9f//rXadGiBePHj+fXv/411113HTfddFOTtsyaNYt27drVFq8TZgmCIMTmRCAf2IxeBiURIpgEIR0iF8MENEpOlZOTEzdhVaz2dV/Pzc1l69atXHXVVRw6dIh33nmH7t27c/3113Prrbc26g+gqqqKqqqqTD6GIAiCC5xo6veTbC+CSRDSIVKCadu2bdTU1DTyJnXp0qWRF8myZcuWmO2rq6vZvn07AJs3b6a6uppDh5z1ldasWUO3bt3Iz8+nujpWEjhBEIQwcIKpUxVMA9GeKbm+CUIyRGpIrrq6mhUrVjB27Nh6r48dO5YlS2LnFFm6dGmj9ueddx7FxcXU1NQA8Oabb3LsscfWS7Xet29fNm3aJGJJEISQk6qHaSOwA2iJFk2CICRL4NHrqZRJkyapyspKNXnyZNW/f391xx13qIqKCtWrVy8FqJkzZ6pHHnmktn1RUZHas2ePuv3221X//v3V5MmTVWVlpZo4cWJtm6OOOkqVl5eru+++Wx133HFq/PjxasuWLepnP/tZ0nYlG2UvRYoUKe6WrQqUgiEp7POS2WdyCOyX4mWRWXKJz0MK9+/gP0iqZerUqWrDhg3qwIEDqri4WJ1xxhm1782ePVstWrSoXvvRo0erFStWqAMHDqj169erKVOmNOrztNNOU0uXLlX79+9Xn376qZo+fbrKzc1N2iYRTFKkSPG/dFWgFBxU0CqF/X5v9rs7BJ9BipdFBFPi85Ds/TtSMUyW+++/n/vvvz/me5MnT2702muvvcaQIUPi9rls2TJGjJD1lQRBiBJ2OO5TYH8K+71ragn8FoRkiVQMkyAIglCXVAO+LVYwnQTkxGsoCIJBBJMgCEJkSTXg2/IRsA8oAI511SJBcIvPP/+cqVOn1nttxIgR7N27l169evlujwgmQRCEyJKuYDpUZx8Zlmt+tA6opMayZcsYOnRovdfuuusu7rrrLjZu3Jhyf5kigkkQBCGS5OKkBfggjf0ljql50hrYG1BJTTQ1FEyXX345vXr1YtasWQA89dRT7Nixg3/+85+pnYI0EcEkCIIQSY5G34D2o4O+U6VuHJMghI9ly5Zx/PHH06ZNG1q1asXMmTP5+c9/zp49ewC4++67+fa3v+2bPZGcJSdEjdHAe8CugO0QhGzCDsetRg+xpcpaU0sMU/NiH9AmwGMnT3FxMQcPHuSUU07h3HPPZfv27Tz00EO17y9evJgxY8a4bWSTiGASPOQw4G/ApeiL+hDgQKAWCUL2kG78ksV6pYrQt4KaTA0SIkNqwiUoKisrWbVqFRMnTuSqq67i/PPPj7turNfIkJzgEUcCL6LFEsAAYFZw5ghC1tHX1GvS3H8z+saZD/g/40gQkmHZsmX88Ic/5KWXXuKVV14J1BYRTIIH5AAvAWegh+F+aV7/MXB2IBYJQvZxjKnXpbm/qrOvDMsJ4WTlypXU1NRw/fXXB22KCCbBC04HBgPlwEjgV4DNzP4w0D4QqwQhu8hUMIEzLHdchrYIgjdceuml3HfffXz88cdBmyIxTIIXTDL1UzjDBT8FxqKfZKcDNwZglyBkC22BLmbbDcEkHiYhPOTk5NC5c2euvPJK+vXrx0UXXRSz3fPPP88pp5xCmzZt+Pzzz7nooosoLi72zC4RTILL5AJfN9v/qPP6PuAm4AlgPCKYBCETrHfpS6Aig35EMAnhY/To0bzyyiusXbuWiRMnUl5eHrPduHHjfLVLBJPgMmcA3YAd6Dimurxs6hPRT8dbfbRLELKJPqZen2E/n5haBJMQHl599VVatGgRtBmNkBgmwWXscNzTQHWD97bjJMs7yzeLBCH7cCN+CRwPUx/kdiAI8ZFfiOAiLYg9HFcXOy1UZssJQvq4JZi+QOdGawn0zLAvQchuRDAJLjIGPdS2DUcYNcQOy53ji0WCkJ24JZgUzrCezJQThHiIYBJc5EJTP03TWYNfN+8dA/T2wyhByELcEkwggd/Zjc2MnZfXvEOW7efPJFO4CCbBRYab+uU4bfYAy822DMsJQurk4WTmFsEkxGf79u0A9O/fP2BLgsV+/m3btqXdR/OWnIKL5KOTVQK8naDty+iElmcDsz20SRCykV7oS/d+YIsL/Ylgymb27t3L4sWLmTRJT8hZu3YtNTXNZ93AvLw8+vfvz6RJk1i8eDH79qW/jp4IJsElBqEX291O4qnOrwA3I3FMgpAOdjhuPToGKVMktUC2M3u2fjC95JJLArYkOBYvXlx7HtJFBJPgEkNNnUyW1aXop+NuQH9grVdGCUIW4mb8EjgepmPQ60AGtxq8v5wMXISerPIX4LFgzfEQpRQPPfQQ8+bNo1OnTuTk5ARtkm8opdi2bVtGniWLCCbBJaxgWh63laYSeBM4F+1lEsEkCMnjtmD6HKgCDgeOMn9nM/nAC9TPBTcIeBbYHYhFfrFv3z42btwYtBmRRYK+BZcYZupE8UuWV009PG4rQRAa4rZgOghsMNvNYVjuQrRYOgA8CXwMdAB+FKBNQhQQwSS4QBvgeLOdrGB639THx20lCEJD3FoWpS7NKfB7qql/j060e5P5+ydA+0AsEqKBCCbBBU5BZ/n+guRn7aw29fHouAlBEJLDCia3PEx1++oTt1X06YeenXsQeMC89iTwAdrL9MNgzBIigQgmwQVs/FKy3iXQT8eVaO9UrwRtBUHQdAAKzLabsSifmTrbf4tXmfpZnFgtBdxqtn8CtPPbKCEiiGASXCCVgG/LQXTsAMAAd80RhKzFCpqt6Bgct7DiK5sF0+HAd8z2nxu89y/gQ6AjzpCdINRHBJPgAqkGfFvqDssJgpAYK2jcnsnWHATTJOAIdID7Cw3eOwTcbbbH+WmUECFEMAkZ0gEn7mFFivtawSQeJkFIjp6mdntquO2vBzoeMRuZZOoH0QKpIa+ZehiScUeIhQgmIUOsd2gjsCvFfUUwCUJqeOVhKkPHFLZAi6ZsIwe9HBPA8020+QjYAbTGWeZJEBxEMAkZYhd0TCf55BpTi2AShOTwysOkcERYNg7LDUDHJ+0BVjXRRgFLzPbIJtoIzRkRTEKGWA9TOoLpE6AGnfukm2sWCUL24pWHCbI7jul0U7+FnnDSFCKYhKYRwSRkSCYepiqchHniZRKExHjlYarbZzYKplGmfjNBOxFMQtOIYBIyxAqmNXFbNY0MywlCcuSi13oD8TClivUwvZGg3dtor3dPHHEqCBoRTEIGtMSZIZfuAroS+C0IyVGInr1VA2z2oH8rmHp70HeQFKKvUweBZQna7gPeNdviZRLqI4JJyIDj0LNqdpP8kigNEcEkCMlhPT+lxJ4WnynZmu3bepfeByqSaC/DckJsRDAJGZDpcBxI8kpBSBYv45fq9pttHiYrmBLFL1lEMAmxEcEkZEAmAd+Wj9BPy52BThlbJAjZi5cz5Or2W4CeuZotJBvwbbHtBqPXuhQEjQgmIQMySSlg2Q+UmG0ZlhOEprEeJq8E037gS7OdLcNyrYGTzXaigG9LKdrbloezTqYgiGASMsINDxNIHJMgJIMVMV4NydXtO1uG5Qahhc8mUhOaMiwnNEYEk5AmObgTwwSO4OqXYT+CkM147WGC7Av8PsHU76e431umPjluK6F5EUnBNHXqVNavX8/+/fspLi5m1KhRcduPHj2a4uJi9u/fz7p165gyZUqTbS+55BKUUjz99NNum51l9ECP71cD6zPsa4Ops+WpVhC8wE8PU7YIpoGm/iDF/eQhTmhM5ATTpEmTuOuuu/jNb37DySefzOuvv85zzz1Hz56xk4wVFRWxYMECXn/9dU4++WRmzpzJ3XffzcSJExu17dWrF3/4wx947bXXYvQk1MfGL32KzguTCSWmLsqwH0HIVg4HuphtLz1M2SaYrIfpwxT3+8jUxxHB26TgISpKZdmyZeq+++6r99rq1avVzJkzY7a/7bbb1OrVq+u9dv/996slS5bUey03N1e9/vrr6rvf/a6aPXu2evrpp+Pa0bJlS1VQUFBbunfvrpRSqqCgIPBz5E/5fwqUgidd6GuA6WtHCD6XFClhLMcqUAr2eHyci81x3gjBZ3ajbDKfZ1iK++UqOGD2LQrB55DiZSkoKEjq/h0p6Zyfn8+QIUNYuHBhvdcXLlzIyJGxg/NGjBjRqP0LL7zAqaeeSl5eXu1rv/jFL/jyyy956KGHkrJl+vTplJeX15bS0tIUP03UOdbUn7jQl42b6Eh2TWcWBLfwOqWAJZuCvo/AWdR7dbyGMTiEs85lX9csEqJNpARTp06dyMvLo6ysrN7rZWVlFBYWxtynsLAwZvv8/Hw6ddJ5f0aOHMmVV17J97///aRtmTVrFu3atastPXr0SPHTRB27JMo6F/raizOdORsu1ILgNvb68oXHx7EPL93Rs8uijI1fKgH2pLG/HZaTOCZBE8lfhFKq3t85OTmNXkvU3r7etm1b/v73v/P973+f7du3J21DVVUVVVVVKVidbVjBlGnAt6UEnbyyCHjPpT4FIVuwgslrT/aXwAF0zFQPHAEVRaxgSjV+ySKCSahPpATTtm3bqKmpaeRN6tKlSyMvkmXLli0x21dXV7N9+3YGDhzI0UcfzTPPPFP7fm6udrxVV1fTr18/1q93SxRkCznA0WbbTcE0FAn8FoRYdDe114JJoXMW9SF7BFOqM+QsIpiE+kRqSK66upoVK1YwduzYeq+PHTuWJUuWxNxn6dKljdqfd955FBcXU1NTw9q1aznhhBMYPHhwbZk/fz6LFi1i8ODBfP651zEDUaQQaIWeHefW+SkxdZFL/QlCNmE9TJt8OJYVZUf5cCwvSXeGnEUEk9CYwCPUUymTJk1SlZWVavLkyap///7qjjvuUBUVFapXr14KUDNnzlSPPPJIbfuioiK1Z88edfvtt6v+/furyZMnq8rKSjVx4sQmj5HMLLmGJdko++wopytQCta52OfVpk83Zt1JkZJtZakCpWCCD8d6zBzrJyH43JmUL83nOCXN/Y8w+ysFrUPweaR4VZK9f0dqSA7gH//4B0ceeSS/+MUv6NatGx988AHjx49n40Y9u6Nbt2706uXkECkpKWH8+PHceeed/OAHP2DTpk388Ic/5KmnngrqI2QBbscvgXiYBCEeQXiYojyRpQt6Me9DpL8SwQ5gm+mnL7DSFcuEaBO4usuG0rw8TDMUKAV/cbFPm4tpewg+n5Rwl45Kez/uUPC4gj8qyA+BXV6VHAXVCpSCHj4c78fmWI+H4LOnW84yn+GTDPt5w/QzKQSfSYpXJWs9TEIY8MLDZINLjwDaAeUu9i1kF38CLm3w2vvAgwHY4gdd0PNzDgGxJ7e4i01dEOUYpkxnyFk+Ak5H4pgEiFjQtxAWvBBMe9Hub5BcTELTHAVcYrb/CPzdbE8jey9ndoZcGZkvQ5QM2TAk56ZgAhFMAmTvFUbwFC8EE0gck5CYa9DelleAHwP/B2xHr/nVeH3I7MDP+CVwBFN3dAqRKGJXIvg4w37s/iKYBBFMQsq0wnniFcEk+EkbYIrZvsPUe9FDdAA3+m6RP/iVg8my2dSHoQOeo4gVTJ/GbZUY8TAJDiKYhBQpMvUuYKfLfZc0OIYg1GUy0AF9E1tQ5/V70MJpCHCu/2Z5jl9Zvi3VwJYGx44SLYGeZjtTwbQOOAgU4KxLJzRXRDAJKeLVcByIYBKaJhf4kdm+Cz1pxbIdJ+A7G71M1sPk15AcRDuOqQhogV4/LtMg+Spgg9kWL1NzRwSTkCIimIQgOBU9zLILmBPj/dvRAdHnkH3fH789THWPFcWZcm4Nx1nssFxfl/oToooIJiFF3F5Dri4lpi7yoG8h2owy9WJgX4z3PwfebtA2WwjCw2RTC0TRw+S2YPrE1Me51J8QVUQwCSnipYepYS6m+hQAk4DLTN29UQsheznD1G/EaWPfyzbBFKSHKcqCaZ1L/ZWYWtKdNHckcaWQIl4Kpj04SxH0Ricj1CGcU4GfU3/Ozn50NMttSJrL7MeKoESC6Xp0osFsoe5MtSBimKI4JHeMqd3yMNkHuV4x3+0DjESfqTxgnotHFsKFeJiEFCky9WfxGmWA7Vc/zbUFXkMLo05o5/gL6FWdWgHTzXYUL+tCsvRD//f3Ae/EabfE1CcAHb02yifszKwD6LXN/CIbPExuC6b6HqZ84BfAWmAuMAu4FR3x9EwdK4TsQQSTkAId0QNjABs9OoZzoW4JPA0MR8+D+h5wPDAOOBk4Hz1/5WjgJaCzRxYJQWOH495CT3lvim3o2xfoZ/5swO+klZaoxjC1wImzdEsw2WtdIdrjpx/QlgO/QgunZcDDwHPom+r/AK/j5BsXsgMRTEIKWJd0GfqJ1wucC/UcdFadPWiR9Dd0RhTLf4Ex6MtZP7TnqbVHVglBksxwnCXb4pj8TlppscfrgE4YGhV6oSXMAdw7Z9vReb4AetIamA8MBr5Ex1OOQGcJG4+eS/cuWl4tNu2E7EAEk5AC1iXtlXcJ7EWuLz24BJ0F5SKguInWn6NFVRna63SLh5YJQdGcBVMQAd8AFabUtSEK1A34VvEapogzLDcHfa0pQye7+GeDlp8AZ6M9UJ2AfxNrCosQRUQwCSlgBZNX8Utgbww9zEX6evRwWzw+QT/dgV5dbKg3hgmB0A0dxHsQWJpEeyuYhmKHT6JNECkFLFEclnM74NuiHxLPpxcXA5XoB7mmHh13AWPRsq03zkI+QrQRwSSkgB2S814wlXEU7wD3JrnXc+h161ugh+7yPbFN8B/rKVqF4/GIxzr0sh6HoZ//o06QgimKgd9upxSw6GveSeahcQqJ5Xs58B3gEHAlerhOiDYimIQU8H5I7hRzkS6lB1OpH7OUiB+jYwpOBP6f65YJwWCDt99MYR/rZcqG9AKFpt4ct5U3RDG1gNsz5Cz6mvcFvfg38EiSe72BnuEL8AASYxl1RDAJKeC9h+kOMwywmw4sT/Hysh1nJbEbkItTdjDI1E1FscXCiqtsiGOyaQW2xG3lDVH2MLkrmAaba94GenNdivvehM5a1x242lWrBL8RwSSkgLceprHAGCpom0Gw6SPoS2UX5OKUHQww9eoU9qnrYcpx1xzfsYIpSA9TlASTTazr3pBcS+B6I5jep3fKKXsP4ExGuQGdW06IJiKYhCQ5DGd4wBsP0w2mbp3Bhfog8GuzPQ3xMkWbI3C+c2tS2G8lOsnlEThBwFHkMJwEnEEKpqgsQtQFnc72EHr+rDtcDZxuHhJ30JN0RPjfgY/Rs+YkXCC6iGASkqSnqffiRcbhIeh15muA3RnGTvwdPXOuM/ADN4wTAsJ6l0pw8uAkQw2OwBoQr2HIsWLxAHreld/YQPOoCCYbMrCJ+AlOkycfuA7oQSk51KD9TYXxd4rBQXSSS4CfImkGoooIJiFJvE0pMM3UjwOVGQ4FHEQvUQDwE2TGXHSxYufDNPa1Q3hRFkxBxi+BI5i6EY2hTSuY3AsZ+Cb6sW0rB1G116X0FuGdh/5WHoFetUCIHiKYhCRx/2JkOQa42Gz/DnAj/8s89OW+GzpfihBF7MISqcQvWbJBMFlPRlCCaQt6eCsPPdwVdtyPsfypqf9Yr9/Yi/Am4hBwp9meSjQkqFAfEUxCknjnYfohOn/Ss8AHgBvBptXAX8z2NembJgSKGx6mKK/mFWTAN2hfbZnZjsKwnLuzeMehU5RUYK8lsRfhTYXH0IOrxwJfycQ4IRBEMAlJ4o2H6TDgMrP9p9pX3Zmd81e0cDoDOCmjnoRgcMPDdDzRvcwFmYPJEqU4JnevUdeb+gFgN+AIpvQ8TKCnIjxktuVBLnpE9Uoi+I43HqYL0WP6nwMv1r7qTsK8LcCTZluCv6NGRxwPSyoz5Cwb0MHSrcjEIxAsQccwQbQEk3tDcqeg14OrwUk86fSb2ffpflN/FTg6o54EvxHBJCSJNx6m75r6YfQYv8YKpkL0YF363GPqS9HrrgtRwQ7HfQbsSWP/g8BHDfqKGkEPyUG0cjG5NyT3f6Z+groJCjIfkgOdJ+559M13akY9CX4jgklIghyctALueZh6oZNVAsyu904Z+tmuBdA1o2O8CbyHzsf0vxn1JPhLJvFLFrtvVAWTDMklTyt0IhHI9KHucGCS2X6g3juZBX3X5c+mvoxMHwkFPxHBJCRBV3S00UGcJ87MuQL9BXwFPYDicAjnJpH5k60VY9/JuCfBPzKJX7JEPfBbhuSSx4qYcmzEUbpcCLRHPxq+Vu8d+7DYgUwzKS0AtqH/w+dk1JPgJyKYhCSwLuhNpLYcbtPkAJPN9t9itnBvKOBRdPD3cKB/xr0J/uCGhynKqQVycbyr4mFKjHvDcd829VxA1XtnH1rmQKbDctXo4T6AyzPqSfATEUxCEtjhOPfil85CBzzuAp6K2cK9ldK/BJ4z21dk3JvgD256mI4nellvjkTnPzoEbA3QjqjEMLkTY9kVZ7r/nJgtMs8RZ5lr6ouANhn3JviBCCYhCaxgcm99JvtUNQ89l6kx7l6oH65zXPnSh502OB6Nj+I1TMA6oAq93GnPBG3Dhh2O24aO5wsK62HqQrhz5rszQ+5SdEzRUvTySo1xb329t9Dry7UBJmbcm+AHcu8QksBdwdQSJ/v2o022cu9JDuC/6FtPD+BcV3p0myNJZ42q7KTI1NvJLB6lBn1LgugNy4Uh4Bv0/6DKbIf5++nOkJwdjnukyRZWQLpzXfq7qWVYLhqIYBKSwF3BNA4dVPkFehZbbNz1MFWjs+xCGIfleqEnG29GX/CfILqBym7Qx9TrXegrqoHfYQj4Bh3FE4U4psyH5E4ypRL4R5Ot3PMwgSOYziHcclTQiGASksBdwXSJqf9Jw6DKurgfO2G9WRegJyGHh1/hZInqhZ7UfH+TrbMfNwVTVFMLhCEHk8Vdr4o3ZD4kZ71LzwA7m2zl7rnYgB7+y0WG5aKACCYhCdwTTK3QggV0/FLT2BuFe89dy9EXqLbAeNd6zZQTcC7VZ6NDTmvQC7qcEJRRAeOFhylqgiksQ3IQfg9TLs7kkPSG5Fqg45cg3nAcuO1hAviXqb/uWo+CV4hgEhKQj3PxzlwwjUcLlg1oAdM0diiiPW76g+xU3vAksZyJ/hn+E1gELAT+bd77vyb2yXasYNoQt1VyRFUwhWVIDsIvmLqiIyNrSFdgfsX0shWdhbtp3Pe22eWbRqND64XwIoJJSEB39NekEj1BPzOsUHkibivQCej2me1u8RqmhD3u19DCLVhGAeejL/Q31Xn9PlN/mzBY6T9uepjWoafmtwM6udCfX4RpSM59r4q72PilUtLNE2d9vI+RaE6iPRdd0GkfMucz9MNjC5zJMOGiB7ACeBu4F+2LC/OMSe8QwSQkwA7HfUG8iKNkaIsWKpCMYALnZuGeYFqJnqhed2gwOK4z9YPUn8S8CFgLFOAMFDQXcnCWJHVDMFXi3OSOcaE/vwjjkFxYY5gyWxi8PTq7NzSVe6ku29CzBnNxM1wg3MNyv0EvR3wqcDU6VP36QC0KChFMQgLci186Hy1UPkYLl8S4H8cEjli7JG4rr8lDxywB/DXG+3a1qav9MSc0FKK/JTW4l/fLCq8oCSYZkkuezGbITUKvH/cB8G7C1go3l22yWMF0JmHzg56Ik/TgRzgRXlfjloctSohgEhLgnmCyT09NT9ltiL1ZuOdhAifYfBzO3DT/GYYeJtpGbPn4CHpIchAw0j+zAscOx23EvYSN60wdFcHUBmcoNkwepuwUTIlzLzXE/fOxAT3olQdMcK1XN7Axlv8A7gauQi+O3gPHL9d8iKRgmjp1KuvXr2f//v0UFxczatSouO1Hjx5NcXEx+/fvZ926dUyZMqXe+9/73vd47bXX2LFjBzt27ODFF19k6NChXn6ECOGOYGqNFijgPE0lxv0hOYA1wPvoMNEJrvacCmNN/TKxhzp34fjCwumo9wY345csURNM9vu+B9gbpCEGO6TZAf1LDhvppxQ4Bh1JeJB4SXQb4s1yMfa6GJ70AmcA/0P9GMsq4AGz/YMgjAqUyAmmSZMmcdddd/Gb3/yGk08+mddff53nnnuOnj1jL31QVFTEggULeP311zn55JOZOXMmd999NxMnOl/LM888k8cff5yzzjqLESNGsHHjRhYuXEj37mF9ovITdwTTOPSldj2wKum9vBmSgzAMy9l84y/GafOyqU/z2JYw4aVg6hO3VXgIU8A3QAVavEE4vUzpZ/m2g00vksrZ9sbj9m9Tn01Ypnr8wtQPoBPrWv6ClphnEb3Zp5mjolSWLVum7rvvvnqvrV69Ws2cOTNm+9tuu02tXr263mv333+/WrJkSZPHyM3NVbt371aXX355k21atmypCgoKakv37t2VUkoVFBQEfo7cLSsUKAVfy6ifR3Un6ncp7TfZHHuB65/rWGNPNahOvp/TAgXV5rP1jtPuGNNmv4L8EHwX/CiPmM98o4t9nmr6LA3B50umfMPY+2oIbLHlI2PT6BDY0rBsN7YNSGm/HFDr9Y7qmykdb5o53iOuf5aPjD1fD/yc1r1GHR3j/SfNe/eE4P+feSkoKEjq/h0pD1N+fj5Dhgxh4cKF9V5fuHAhI0fGjvMYMWJEo/YvvPACp556Knl5sYPWWrduTX5+Pjt27GjSlunTp1NeXl5bSktLm2wbbWxCuPQ9TC3Rjl2Ap1La05shOdDPSzZmwH8X+JnmyJ8Q/6l4HTrG6XD0og3NAS89TN0JW4732IQp4NsS1jimtsARZju1IblR6PmY5TjeneTwLs2CtWOC6z2nyhica9SGGO/fa+pvo2fzNg8iJZg6depEXl4eZWVl9V4vKyujsDD2sE1hYWHM9vn5+XTqFHs+wm233UZpaSkvvfRSk7bMmjWLdu3a1ZYePcI65TYTDsNJpZa+YDoXHd5cil6hO3m8E0wQZBJLOxzX9PfLwab3bC7Dcl4Ipp04i11EYVgubENyEN5cTHY4bgfOsGFy2GDvfwL7U9rTuzQL/zH1eIKeg5boGvUKTuqT/2miTfYRKcFkUUrV+zsnJ6fRa4nax3od4Prrr+eb3/wmEydOpLKyssk+q6qqqKioqFeyD+td2ku81ZUSYT04T6P9msljbxid0Wnd3MXO1huD3wtf2oDvePFLlmWmHu6RLWHicJwbspuCqW5/UQj8DlMOJktYczGlN0OuFTqdACSTe6kh3gR9g/61lwEd0Zm/gyOZhzqbE725PMxFTDBt27aNmpqaRt6kLl26NPIiWbZs2RKzfXV1Ndu3b6/3+nXXXcfPfvYzzjvvPN5//313jY8kmQd8t8CZfJracBzo4aiD6K+p+4sGfIaz8KV/89AKgePR2acXJdHe+uSag2AqMvVutMfATaIU+C1DcsnT29SpCaYL0V7vEuD1lI9pz0U73A7PPoRe/BeCHJbrDgw01rwSp91SU4tgCiXV1dWsWLGCsWPH1nt97NixLFmyJOY+S5cubdT+vPPOo7i4mJoaJ8/LT3/6U26++WbGjRvHihUr3Dc+kmQumEajE7FtA15Lee9D6Oct8GpYzuZk8m9Y7hRTr0anDkiEHZI7DjjSC4NChM3wXeJB31FKLRBGD1PYh+RSmyFnh+PmkKrXG/TQX7nZdv982GG5C+O28pJzTF1M/GuU9X6fjPYONw8Cj1BPpUyaNElVVlaqyZMnq/79+6s77rhDVVRUqF69eilAzZw5Uz3yiDN7oaioSO3Zs0fdfvvtqn///mry5MmqsrJSTZw4sbbN9ddfrw4cOKAmTpyounbtWlvatGnjepR9tMrPFCgFD6Xdx726A/Vg2jYUGxsym6XXVOkG6qCxsaev5/TvKeyzxuzz1RB8J7wsV5nPOd+Dvq80fbs/49L9UmZsHRQCW2w53dj0SQhsqVvmGrt+mvQ+3UDV6J3UsWkf1/4mz3T9Mx0Oao+x7+RAzqmdqfqbJNpuMm1HhuC7kH5J4f4dvLGplqlTp6oNGzaoAwcOqOLiYnXGGWfUvjd79my1aNGieu1Hjx6tVqxYoQ4cOKDWr1+vpkyZUu/9DRs2qFjMmDHDixMeoXK/AqXgV2ntnwtqk+5AjUvbhmeMDVd69jkXGxuv8+WcPmE+T/IXeHjY7PPLEHwnvCy3ms95rwd9n2n6/igEnzNeyTN2KgWdQ2CPLUcbm/aFwJa65TVj16Sk97nOnOA3MjruS+a4l3ryuZ40Nv4ykHNaaj7bmUm0tekFrgvBdyH9ktWCKYwlOwXTfxUZiJVReme1E1R+2jY8YGz4uWef8/+Mnct9Oac2n825Kewz1ezzfMDfB6+LFzmYbOlp+q5UkBuCz9pU6W7srFaQEwJ7bDnc2KUUdAiBPbaUGJuGJ73Pe+aDXJXRceeY417vyee63Nj4ru/nc4D5XHsVtEyi/fWm/T9D8F1Iv2RlHibBb2x8QHoxTBebej5QnbYN3qYWAHgSHVo+FK9DgtsCx5rt5POdO7ECw4AcVy0KFzZmLr01weJTil7WoWWd44QR+z0vQ1+jw8IBwE6SCUscUwucmWrJfWcGo5eTPUAqa1rGwruZcgDPohckGYwzFcIf7JJgy9G/l0TYa1PzCPwWwSTEIf2g7xwcwZT82nGx8G55FMuXOHNBvF0q5UT0T67UHDVZ3kdniumIDv7OVtxb6Lkxh3AS8IV5plwYczBZwjZTrjs6W1EVyc4otMHe80luykXTeJtmYQfwhtm+wJMjNMVJpn43yfbFaGl3FE4amuxFBJPQBG3Ri21COjewoejbXwWwMEHb+NgLoXceJvBrbbnBpl6Z4n416LzkkN1PcplnlY9PFGbKhXGGnEWLhAJ68Ct0tvxS9Py0f+PMrfKPuh7wxN64POBSs5167qWGWMHk3YPcv009wbMjxGKwqVcm2X4/jrc8m69NGhFMQhPYp/1dpJpBFxzv0rNA0+k/k8H7ITnQOaKq0c9X/Tw7in16S2U4zmIF04ku2RI2OqOnJh/CGe5wmygIpjDmYLJokfBTuvML9FnsjpYtF6JTHK4A+vpmT2pJK7+CzuZWBryQ8bHt/8c7wWTTC5yB9i37w2BTpxMyIIJJaLZkFk9iE0FmNhwHfgmmnTieMO+8TINNvTKNfdea2js5Fyz2+1ZGJhFv8bFDckfHbRUs4fUwnW2E7Fa6swz9OxkMnA78Ce1NPgUd/XK+LxalJpi+Y+rH0D7bzPBeMJWgZUse8DXPjlKXnmhpVoXOE5csNoHlCNctChsimIQmSD+eZDA6SmQf8FzGdtgL02E4Q4TeYIflvuVJ7y2AQWZ7ZRr7f2Tq/q5YEz68jF+y2OSGveK2CpZwepjuBi42Hqbn6c4IdND0KmAJ8EP0dIbXgPboGKGrPLeqt6kTJ63sjJMIcrYrx7b/n7ZAG1d6jIX1Mk3w7Ah1GWzqNaT20GI9TKegJ1VkLyKYhCZI/wZmvUvPoUVTZlTirGPnrZfpabS9/XDmirjHcegVrPbgDA2lghVMRwP5bhkVIrycIWexN9becVsFS/iCvv8X+H9AoRFM65oIdN6KjmOy69jfj7OOpDck72G6Av2reQs9hSJz9uKEKng/LPcV/MilbUMGVqa43zr0JJbD6/SRnYhgEpog/ZQCVjA96Zot/gzL7UGLJoDLXe/dXkjeQ8fppMom9KBHHuGOwUkXPz1M3Qnvk3C4huS64QigBUnMkqsBrgH+gr65PAac6Zl1yQum75n6QVeP7/2w3DvoX0Rb/AiqH2zqdGIsV5p6gCuWhBURTEITpHcDG4j20FQC/3XNFnth6upaj00x19TfxG0/jh2Oey+DPqyXKRvjmDLL+ZUc23B8nmHNxRSuIbkHgCPQk8cfrg3G70aifGBXoydSHIaOY/TmbCc3JDca/YvZg7N2pDt4L5jAz7Xl0vUwgRNjma0hAxoRTEITpCeY7Oy4hWh/iDvYBXi9F0wvoZ/tOwHjXO3Zzh1aG7dVfBzBdBhwHjATuAkdFNo5g56Dxw8PE4R7WK4jWmJAGATTt9DfqwPo/EUHKUN7R/NI9G07ZPZ/G71k9BO4/QDSHmhntuN/Z6x36XHSme8bD38E079NfQFe3rALSC+prkUEk9CsSS+mxL3ZcXXx58IEOuP3Y2b72/EapowVTB/FbRUfve9p9GMHemr0dODXaG/eF+bvFhkcIThEMDnepZ1kmowjU1oAvzLbt6LDgPWvwz68JE7YWAlMQicmGQHc5qqF1iP5JToXUGw64lyT3B2OA78836+iz2FXYLhnR7Ee8M/RaTNTRQST0Gw5Amhttr9Ieq++6CxB1ehZMu5hL9LeCyZwktqdj1vz8nJwMnR/nHYvvY1gyqE/rdHZih5CDyOuRkflzERP8i1K+yhBkIsTFyOCyUmKGByXof0NXwJ31XvHDssll+27BB1wDXAtbk6PT2447ir0VIuV6HQH7uLPg1wNsMBsezcsl0mOOHAE0zFoD2R2IoJJiEHdnDjJrCekscNxL5PpsgMN8S+GCXSU0XvowZFJrvTYE33ZriKZKdCxuAz4pxFMa+jHV9B5sa9Ee8IGmjY70DP8nsfPZHeZ0g19ka3G+6GoKAimYAO+WwA/N9u/o+FM19SXR5kP3Gm2H0QPd2dO4oDvPHQAOjQUfW7h34Pcv009wbMjWA9TuoLJTkrJJzsnpWhEMAkxSG94xC478E9XbQE/h+Qs1sv0HVd6s8Nx69DDGqlxEfAwMNB4p3ZxJAs5slG7R9GXvc/QQa5PEZUEBPb7Vkp6MwhTQQRTIqx3aStwX6N301tPbjrwIfoX/OeMrLMkFkzfQD9UbEHHL7mPf9el59GPW/3wasqH7TWVhJUNyf5hORFMQgxSn7F0EtrLcQA30wlY/Av6tvwdfYEagTPZNn3sxSj1+KVz0Bf7FsBj7Me54ce+bJaihz12o6dz35PyEYPAr/glcG6wYUxeGbxgykFPIoBY3iVId9HZSrQQq0Z7oi9L18BarOBtWjD9xNT3koqfPBX8E0wVaM89eDUsZx/q0g8ZEMEkNFNSv4HZC+B/0Tdrd7EXpi749ZUtwxF+UzPuLb2L0aloV7ydmj0FSCa1wIfop+tD6BiOM1I6ahD4KZis4OxJoqnx/hO8YDoXHW23E514sjGpxTDVZSXwS7N9D5mmGrCCN/YQ9+nooekDuOXRikXdUAHvv0s2vcBFrvfcFuf/+UkG/YhgEpolqd3ActF5i0B7ZtznS/TtvwXEGIryCjsccSl6EnP6pC6YOqJFUlv0bLhLsYNVyS2R8iI6eSDoJ+xwh2Fab4VXi+7WZRM6jLYlXidCTZ3gBdMUU8+lqSz96Q3JWX6LnpTQHj3MnL7MiD8k9zNTz0Vn3/KGraZuiR8Rg/9BXwNOw+28VnZCShmZPe5m+/JNIphCz+/QcuEt4Gb0sJf3pJZS4Ez0LW8HbqwdF4uDOJc9/+KY3kAvo9CGTFMMpC6YZqMHHT5Be4ucIYXkk1fehD5rJ+IEv4YTPwXTQZyZn2GLY7IiJJhZcoXoXD8Af22yVWaC6SA6i/5e4Gz0kiupk1/n+I2vUacD49HDf79Nq/9kqQK2m23vr0tbgNfN9jdc7dmN4TgQD5MQOEeiZ5UMA24BPkBfzAo8PWpqHiY7HPcPvIoVgCDimMDxMl2ddg+H4UzyTy6G6UfoOAWbx6Z+AlB7UUosmHYCN5jtX+HW7CQvsDc/PwQThDfwO1gP03fQUuRN9LBubKxg6kq6UwrWAdeZ7dtI5/baA33rOoDj5XGYaeq/kd6qjanh74QUu0D4Ja726pZg+hQtiTvg93XaL0QwhZxpwAnAd9HTcw8B30cLp5GeHDEX54k/sWBqhZNOwJvhOIv/M+VAf6Zy9EX97LR6OAZ9TncT6+LekFPRXkXQeWtWNmphRVdy+U5mAyvQOZF/mLB1UPjtWQmjYGprCgQhmHLQ1xWI510C7bO0j0Xp/xb/gvZGt0IvV5LawrJND8edh14K5QA64ab3+HtdehItSYahl+F2ByuYMolfAv2It8FsZ6eXSQRTyNmOftqbjfY6nIl+auqFjlNxf0HGrugx+YMkc+G+BH0zXgcscd2WuvibvNKyByfFwE/iNWyS5J/e2qO9dC3RqRkaT+kG7YXZi366T3zJVDhP3D9ADy+GDyvQm7Ngst6lCvT/11/OBfqg86clTguS2bCc5bvoX/VJwN0p7Rl7hlwuMMts34Nf3yZ/BdNWYLHZdm9Yzi0PE2T7sJwIpojxOjrXzrPoXNz/RY/Xu4cdjttEMjmDbJDoA+ibs3f4m7yyLn9En4n/AU5Jee/kUwr8DS2B1uOsf9UYhfMkeFyTreryb/Sl8AgcL0J46IjjXxDBFORwHGiPatMLjVjcEUxb0OvNWa958qkGYs+Quxb9+9yF17FLdfHf8+3+sJwIpmQRwRRB9gETgafRt5qn0PmC3CH5+KVB6Bkb1WgPmLcEMyQHemT+UbP9y5T3Tu5i9AP00GYVOm6pPG5r6/YuSsqCQzjDfNcRtmSW9qZbd6jHa+yNNky5mIITTIfjBHvPTWqP9HIxxeIVnDXr/gwMSGqvxkNy/XCG4K7Fy5lxDfH/uvQUep7nKTjL5aZPZ3TM0SHcifgSwSSEEHtj/Tc6rPjfuPW8nPwMOetdeppkonMyJZigb8uv0V6m84EhKe2ZOD7gZOB2s309OuYoPiWmLkrairno29xROCkgwoHfw3EgHqb6fBUdPVVCsuutpZ+LKRa/RocXtEFntE78X6kvmHLRayoebvb3/uGtLv4Lpu04SSwz9zLZ69NGdORXpohgEkJKDTo/zzvolI7/xY3Zc8l5mNrguND/Eq+hawTnYQItd2xQ+4yU9rTrKn0a890CdNzSYWjhmVwsR4mpi5K2ogr4k9m+Kum9/MDvGXLgfLcLCM+Ke/Y8+C+Y7HqJ/0h6D3eG5CyH0CL+Q/TV52USZciqv/DuH9ETYMoJYsg5mOuSHZbL/OEn80XB62MFUxHHczhfR09aCluK2HQRwRRx9qHd6ZvQX8yHM+4xOcH0LXSw9yfAooyPmQzBepigvpdpeFJ7HI5z6d8Qs8UDaLd6CToINjlKTF2U9B6gvxs16Dw14Xn+CyL30AGc71NYvEz2e+JvDqZW6O8zBCeYQHtNxqIHhY5Be5ya/qU7HqZfonOMHULH/X3R1C6eEYxgegodazYQPWMufdyMX4Kj2E4rE1DwJEX8E53Lbhv6wbqdK0cJDhFMWUApTt6eiaQ7m8uSWDDlAj812/fjdbC3xV6YOhFU3upPgUfM9l9JJhaoyNTlOAnuHK5Gu9SrTb0raUtKGvSfHFuABWY7eXHmNUEMyUH4huWCGZIbj/YWryeZoWCLezFMddmMnq33BVoIvI++ntXnCOxcz9/wRa239wd4seh3MtjrUmf8vC7tRq8EAJn+lt1JKZCLTkK6BjjOPByuoYhi9EzjI9Ce7VXoB7Yoo6RkXgoKCpRSShUUFARmw1RQClQ1qJFp91OqdDdDmmzzDXOc7aDa+Pb5chXUGNu6BXaOjwS11Xz+mxO2/6qxd2Wj9841/ycF6tqU7Whv+lUK2qS07wVmxy2g8gI6h/XL0+Zz/J/Px/2HOe4PQ3AOUPChsedsX4/7hPk+zEppv37G1p2e2HQsqHep/YKrf6GvOV1A9eZkBUp1ZlPt+zcF+n/LUVBtTOnu67HPNJ9/N6jWaffznrF9XNp2tAL1fJ3/1yjzm85hqgJ9nTkH1Drzfg36OhTc/6xxSeH+Hbyx2VDCIJgA9Sj6S/k5qM4p75+v4KDSXXRpst075hgzfP98m4xtgwM9x5eYz18JakDctlcbe5+u93p/UDtNH3PStmOH6XtASvvlgdpsjj0hwHPolLfM5zjf5+P+3hz39hCcg7r/z+N9O2ZrUHvNd+HklPYtMLYqBa09sS0f1K3om2udg6mnuVCBUsNYpr4AdWHg/zcUfGHMO8XX4+aA+tScl2+n3c9eY/uxae3fGtQrxoYKUFNAwR2mz9/Va1sAal6dtoMC/7/VsS3J+7cMyWUZV6Hdokehp8Kn9g/ujrPkwJcxW3wFPatrD04QsX8EG/hteQKddb0levZZ2yZb2sSSG2pf6YnOodUBvVZd0/mWElFi6qKU9qrBGVa8Mu1ju4kMyelYNxt87t+Q3Hh0LrdPgXdT2rMCfQUArxYwrkavnTkUuAt4z7z+iYlf2sdGBqAXpA2eYK5LCj07ENL9LXdBfwMOkey6oXVpi87WfhY66OA87ASgEtOifmLdCvREoRfNvs8QvQVURDBlGXuBr5t6LPqikzw2fukL9M+xMT839V/Ri+36S/CB35ap6EDGU9AX7cNitupj6vWAjhZ4w7y6DriITDIPlZi6KOU9Z5v6KwQ9RywX5ybTnAWTPQcHSCWSLVNssPfTae1tZzW6G8fUkHfRMZknoec0TjP/rw/4LEGuMj8J7kHuEfRElNEkm8a2LlbQlJLqlagFOvB8NDqeaiywtPZd+4DYeCWCGvSszI/Qoft/S+mowSOCKQtZjZMj6Rdo5Z8c8QO+LwFGoWfm3R6zhdeEw8ME+vY+Dv1kdTZ6hlGrRq0cD9NZ6CztvdAewDFkmlyvxNRFKe/5EXqNunxgQkY2ZEoX9KX3II4Y9oswJa/0P6VALs4KAc+k1YP7M+USoX1aTa8jFxzBXZdKgRfMdupepsYe8GT5LVok7UEH6tfP39W0YAL9SDABLdG+hl5BISqIYMpSHkVnzs0FHifZjLBNC6Y2wB/M9iz89wdowuNhAj2r6Hz09N4L0EL1gnot9AXjN2zgFbQ8WIF+Kss861CJqYvS2tvOKJoUt5XXWO/EFvSwgJ9YwdSFWFLXX/xPKXAaer7pDtJdA9J/waQRwdQQu1jyVcQLD4hFkalLUtrrUvSKAQBXAMWNWljBdARNJRJYC9xhtv9IqosvB4cIpizmx2g36RHopJaJh1+aFkw/Q8dFrQd+75J9qRMeD5PlNfQT0kb05ec/aM/Rc3RARyrBjyjhEHAverzfnWUbSkxdlNbeVjCdi/5+BEMQOZgsu02B4L1M/qcUsE/1z5HMipGxCEow2SHUz+K28pdgr0vPoL3GHUk1cWfqHqaT0bnjQOeleypmq704MbBFTfb1a/Sdpg8wLWkLgkUEUxZTiXZ9foZea+lfJMoUYm8c9QXTIJwnip+YfoPBepjCI5hAr4d1PPAbdBTKkUAXczHqyhaK2cdIdIK9CteOWmLqorT2/gQdH5JHkMNyQWT5rov1UgQdxxScYPpv2j3Y/9lRGduSPIfh/PbD6GEKxvN9COch9lpSWSsyNcHUCR3v1go9cWVG3NYlDY7RmL0495UbTP9hRwRTlrMVPWxUgY61eZh4oqnxOnJH4KxX9wx6dlhwBHthisc+dED8EegA1R+YC8WXbOBM4C3Xj1hi6s7YRH6pEvywXFAz5CxhCfz2VzD1Bk5EB+C+kKBt09ic2n4KJnusvQQx5aRpgvd8z0V/e45Cr8KQHMkLpjx0nGZvdE7wS0k0iB4/jsnyT/SQXmv0A2XYEcHUDHgf+F+ctefsU0Jj6g/JtQDmob/y69Dj1cES/IUpEfvRU6CXmRlyh9IIqEyOcpybRno3fCuYziGoYbkgh+SguQom6116E9iZdi/WC90zbit3sf+nMHmXIAzXpSp0+gXQw1uJ127LxRlRKEnY+vfocIIKtEd6d9zWkKxgArjN1P+PdB/9/EMEUzNhAfqLvh99wVxIw5tkKxyn6Oe0RYslOxNiAplcXN3CDskdgc6CFGbSn4GSPCWmLkprb5t/J4+Gwep+IYJJE4xgSn84DhwPk83d5gf2Bh+m+CVwBFM7tK8kGP6MFjIDgG8kbN0dfQ2tJtEKfJej42Ht9pqkrEleMD2N9lodQRCLJ6eGCKZmxLNoAbQTnR7gE3RMkpYe1t1dwcns5i10Pqcq9I/kA7+NjclOnHwhXYI0JAnCL5jASfx3ftxWXmGfyP1dP80hLILJv7QCbdCeAshUMG1B32zz8Cp5ZWPCOEMO9CPlXrMdXLhAOc7Msz+QSLrZ69NG4g2uDcGZhfcrUkkUaq97RQlbHgJ+Z7avI5UYLP8RwdTMeBM9rf1DtKK/A33bnWUuRsfwOe+gn1JKTdt/B2BnbBQ6KgvCGMdUH3tBWu/hMUpMXZR2DzYHz3k0lXzTS+yNdkvcVt4RBsGUj45DAz88bWej/8/r0FO70+cQjr1+DcuFdUgOwjAsB1p4bED/R26K27LI1CVNtuiC9v4cjo5d/VVKlth+E3uYQMdgbUI/tif2jgVHSoLpqKP8DPBrmqlTp7J+/Xr2799PcXExo0aNitt+9OjRFBcXs3//ftatW8eUKVMatZk4cSIffvghBw4c4MMPP2TChAkeWR88H6ADk69Ei6JuQCfzA+rHBg6gA/xOwYtg5UwJx4UpPjk4F6Rwe5jeQX8H2gJnZmpOSuTiCIWgBVMPdMReEFjhXw1s9/xoY02dfrB3XfyOYwrrkByE5bp0AGf47KfEy/4d3wPeCp0yoCdaWF9OU2s/NIX9H7UlmflvVeghRQjLkk1Nk/QCdXv27FG33HKLat3amwUXkymTJk1SlZWV6sorr1T9+/dXd955p6qoqFA9e/aM2b6oqEjt2bNH3Xnnnap///7qyiuvVJWVlWrixIm1bU477TRVXV2tbrzxRtWvXz914403qqqqKjVs2DDXF+8LWzkc1BhQJ3KrAqWO5R5VEAK7mi7/VaAUfDcEtjRVCo2NNQpaeHic881x3s6on/t1J+peX89R1zrnKDeg/1OOggPGjl4B2TDUHH+jL8dba/7XF7rS32PG9mt9OlcfmeONDuh/Fa88aWybGgJbUAvM//kV9ILbjdvMNvb+rNF7eaD+a/bfCapf2nbYRYmHJtX+KFAHzXGP8fl8pXD/Tr7TESNGqGXLlqnS0lL1ne98J5AvwrJly9R9991X77XVq1ermTNnxmx/2223qdWrV9d77f7771dLliyp/XvevHlqwYIF9do899xz6rHHHvPihKdRchTke3xu/65AKfhpIP/X5MuDxs7GP/TwlGHGxs88Ps5gc5wtGfUzXneiPvP1HFnbNwf8v/rY2HFGQMe/wBz/Lc+P1dP8n6tBtXOlz98a2+/06VztN8crCuh/Fa/ca2z7VQhsQR0Hao/5f98Ts81iY+83672eC2qO2W8vqNMzsuN1c4xJSe/zrDn2b3w+X8nev1Maklu6dCmnnXYaN954I7fccgvvvPMOY8aMSaWLjMjPz2fIkCEsXLiw3usLFy5k5MiRMfcZMWJEo/YvvPACp556Knl5eXHbNNUnQMuWLSkoKKhXvOFetKP1/zzq31Jk6hKPj5Mp4UxeWZ/4a/K5h+2/K5nMGnwFnUeqF3qo1h/s/y+o4ThL0HFM/s2Qs8Nxy8GlhWv9HJLrgo6mOUSiWV3BEI4hOcsnOLmSfmBKfYpMXVL7Sht0zNLl6BQ030DHvKaP7bsoTpv62MV4JxPcIHk80gr6njt3Ln379uWZZ57h2Wef5amnnuKYY45x27ZGdOrUiby8PMrK6i/UWVZWRmFh7C9qYWFhzPb5+fl06tQpbpum+gSYPn065eXltaW01KtsxQfQN0Ovl28oMvUGj4+TKeFNXung12ye7ehEEZDJqvEH0GkmwM/0AkHPkLMEne3bP8FkF+F+0bUe/RRM9je1CX07DxvhEkygZ7RNN9t/BG7GipA8nFnR+np/HPAG+vd/AJ23b0HGFth7SXKB36AnoWxF/yrGJ2gbBGnPksvJyWHhwoX89a9/5YILLuCDDz7gD3/4A23bprb8XzoopRrZ0vC1RO0bvp5qn7NmzaJdu3a1pUeP9G9Y8fHjCfgwnBtuiYfHcYPwXZga4+f0Z3cyLtvZcv6tHB70DDmL/X0FtZ6cPykFctAJSsERx5njp2Cy178wzpCDsF6XfgfchxZKtwCLgdH0NK/s50S2cD964fDB6E9xJvCkK0e3/6vkvx/VwCNme7IrNrhLSoJpypQpPPjgg6xatYrdu3fz0ksvcfrpp3Pvvfdy9dVXM3jwYFavXs2QIUM8MXbbtm3U1NQ08vx06dKlkYfIsmXLlpjtq6ur2b59e9w2TfUJUFVVRUVFRb3iDX4IJnuz2IMfM3Uyw/5Pwuxh8mtIDhzBlNlN63lTn4peC897ZEhOY4WjtykFTkbPVSpHD8m5Q90hYa+z5xSZusTj46RLOAUT6OG4y9D/+1HAL813vS8beQ8d7JGHztM3DDdnRqcnqOeYejw6FWiYSEkw3XTTTbRr145HHnmEM888k/bt2zN8+HB+9KMfMXv2bM4991zuv/9+Hn74YU+Mra6uZsWKFYwdO7be62PHjmXJkiUx91m6dGmj9ueddx7FxcXU1NTEbdNUn/5iVbqXT8BFpi7x8BhuEd4Lk4OfHiZ7UcrMw7QJvYROLnBuhhYlR9iG5ILyMPkzJGeH4xbh5oDWl+gBnFwcT5lX+JEINhPCfV16FO1B+iuwwgiYnnzOLnSKiTPQ3mV3H/HS+219gM4TeBhBLgzeNK5Gm3fp0kXV1NR4Fs1u0wpMnjxZ9e/fX91xxx2qoqJC9eqlpwXPnDlTPfLII7XtbVqB22+/XfXv319Nnjy5UVqBESNGqOrqajVt2jTVr18/NW3atBClFThCmYkDCg7z6LxeZfqf79n/zb3Svs75ODwE9sQqm419g3041q/Nsf6UcV+/Nyf2IV/O0WvG7m8E/L/qY+zYG9DxS83xT/H0OC+b/+3Vrvf9ibF/lMfnyaYT+V5A/6dEpaWxTynoGAJ74pWfKVCqFQ95fJy2dc5J25T2vdns+KxP58STtALJltGjvc2TMXXqVLVhwwZ14MABVVxcrM44w5kSPHv2bLVo0aJG9qxYsUIdOHBArV+/Xk2ZMqVRnxdffLFas2aNqqysVKtXr1YXXXSRVyc8jVKu9Penr0fndKbp/25P/2/uFTu9uHcIbGlY6l44j/DheP9njvV0xn2dawz/wpfzZKfze32jTeX/1cnnY+cqnYdKKejm2XFagTpgPuRxrve/yNj/TZf7bVg+NMc5x+f/USplu7Hx+BDYEq/cb+z0IwXCzrTOSV+9k6oCdYQP5yRQwdQci7eCaZUCpeArHtnvdwK6TEuJsXd4CGxpWPz2WHzNHK84474OA7VPd6YGem63fQg4NgT/M3+8PI2LTd55UHmZ4PQr5n9a4kn/c8xnmObxudprjtPH5/9RKsWKurNCYEu84qe3Lv1717t6R/U9H86JJ3mYhKDYYOrkp2emRlGD44SdMKcW8HuBUHeCvgEqgVfN9lcy7i0ebQCbtyzooG8ILrWAjfvZChz07Cg2fsm92XF18WOmXFf0UrKH8GciRbrY77JfixGni5+TUtL/fswz9SWu2ZI5IpgigRUyfTzq3wqxEo/6d5swB1j6LZjsBakLbiyfa9cY81Yw2f/bHlOCJqjUAv4EfNvpLO7lX6qLH4KpyNRfoCeeh5UwP8jVJRqC6R+mPgt9dQsDIpgigZcepsNxbmAlHvTvBWFOLeDnxQhgB24kr7RYwTQa/c3whrCkFLAE5WHyXjAVAieifTMve3IEPwRT2GfIWcJ8XbK0BTqabT+uUannYrJsAFagM0b5lx8uPiKYIsF6U3shmOxNohzY6UH/XiAepvq4k1oAYI3p7XC0aPKGsCSttATtYfIuB5P1Lq1AS2v3sd89L89dVDzgYb4uWaxw2QV4lTuwLpl9P/5jav9WIIiPCKZI4KWHKSpPb3UJ85Oc3x4mcDOOCfwYlgtLDiZL9nqYvB2OA0fEdELHpnlBVK5RURJMfl2fMvNAWsE0FmjlhjkZIoIpEpSY+gigvct9FzU4RhQI84Up2h4m8FMwhc3DJIIpdcpxfFdFHh3D9hsVwRTGBzmL34Ip/SE5gPfQd6bW+JVQNz4imCLBXvRMGnDfy1Rk6hKX+/US62EKs2Dy08PkbhzJy+g5WwNxS4I1JGxDcvai3hl/n2NtzJk3gulE9C9kL+DtmgUlpvZqFm9UhuTCfF2y+C2Y7KL0rdBeyNSZb+oL3TAnQ0QwRQav4piicjGqS1if5NrjTJcPYkjOHXmzE3jbbI+N1zBtwjYktwvtKQF/45js/8ub74r9370KVHlyBIuXIQO5OP+TqHiYOhPeW6vfgqkK57yk90BnBdP5BH9Wgz6+kDReXZRsqoKwX4zqYn+AbfEubiId7IX9S5yZa37g/kwlb4flwjYkB/6vKZeHcx68FUzeDcdZ7LWjyIO+uwMt0ekEShO0DZov0b7ZFmjRFEaCiLHMbFjuVfQjTRdguDsGpY0IpsjgVS6mvqb+2OV+vWSvKRAuL1MQFyNw28MEjmAaixcXibANyYH/cUzd0Ge2Cn2jdZfDgDFm23vBVGJqLyelbEQnRwgzh3D+l2G6LtUliGtUZg90NcBzZjvo2XIimCKDFx6mLkA79A99nYv9+kEYA7+DCPgGt5NXAixHP9UdAZzqSo+WXJw0dGEZkgP/PUxW3JaiV11wl9PRUSOb0Cu/e4uXHqaozJCzhD2OKUjBlP5vKyzpBUQwRQYvYpisd+kzvI5ycJ8wphYIIuAbdNTRPrOdefJK0AMLL5nt8+I1TJlO6CGLuk/jYcBvD5O9cX0Rt1W6+DccB/54mKIimML4IGfpiBPC4M33LjaZhww8jx6UHQAc64JF6SKCKTLUfYrLcanPKA7HWcJ4YbIXBL89TOBFHJNde8zdOCY7HGfjPcKC37mYrIcpmwRTByTtSRivSxZ7bfgSOODjcTOLYQLYDSw220F6mUQwRYbP0TeYVrj3Y4yyYAqzhykIwWQDYt3xMIETx3QaeuDWHcI2Q85SYmq/BZP73shOwBCz/VK8hq6xD+f36NUs3qh4mMJ4XbIEHTKQ2XD334Df4td3OjYimCJDDc4Xz62L0nGmjqJgCuOTXFBB3+CFYNoIfISez3WWa72GcYYcOIKpJ/oTe413HqZzTL0K5/btPSWmbu6zeMN4XbIEdX2yx+tOJpLjCeBGdDLLoBDBFClsHJNbM+WywcMUlgtTLs5NMDs8TOAMy7kXxxTGGXKg7TmAjq/yJl1nfbwTTP4Ox1m8CPxujXOTj8o1SgRTY7agH/jzCKfnLXlEMEUKe9Ho50JfuTjhc5+40J/fhC15ZSGQj74wBDHc5K1gci+BZViH5BRO4HeRD8fzLujbituFcVu5jRezeO31aTteLR3sPmG7LtUlKMF0COf37sfDiHeIYIoUH5naDcHUE70mfRXOjSJKhO1Jzl6MSgkmX4w3gmkxenbKcbh1KwzrkBw4w0pFHh+nBY6nzV3B1A/9TTwAvO5qz4koMXWRi31G0QMeNs93XYIMGbDfc3evT34jgilSrDV1fxf6svFLnxL+hHCxCFtwZVApBSzeCKY9wFKz7Y6XKVxDcm3Ra+a1BPwTTIVo0VSN21FG9n/0Bv7Og/LGwxRFwWS/10div1XhIQwxluJhEnzDCqbjyPxfF8WLUV3sjaYVbs7hSp8gUwqAc0HqhntpJzQ2FsYdwRT8kNzhwK/QQdG7gA/QK8n9n+eLyFrsTWMTbj+s2BQQ/sYvgXiYLDtxctp1idfQZ3Lweu3C+Li/GkEQiGCKFBvRz42Hk/n0Z3sximL8Eui12uyCqWHwMgWZUgD0k+1BdByVuxdqGwtzDtovkhnBDsmNAFYCvwAGoT/PXuxSItpLMoii2l+HN3gT8H0YzmzG5+I19ITP0OKvLemuSt+YKAomBWw122G4Llm6oD1eh9BC3W+88YD7jQimSHEI5+KR6bBcFC9GDQlTHFPQQ3IHcbxu7l6UitHPzR3JdJmU1jjeQP8F05Xooap+6Mv35eiJzm2BY4BnjJdkJ0UUo8WVN3gjmEah8zhvAt53tedkqMK5KbqVizmq16gwXZcs1gO+GT0xxW/EwyQEgh2WyzTwO8o5mCxhCrAMekgOvHqKOwS8bLYzG5az/6e9QEVGPaXKhcBf0Be8ucAJwN9xBgbXA48ZwVRKDw4jn+dwEkC6izcz5MaZ+nlXe00FNyelHIGOAwIdZxklwiyYgnqgk6BvIRDsRSkTD1M+TpxGlAVTmKbwBu1hAi/d3u4skxLMcNwoYB56+O0B4Nvo2KXGlAH7OUQLnuQo2qM/txtTLOrjTSxJdgkm6136HGedxKgQZsEUdIyleJgEX3Fjplwf9O2jgrDMVkqPsFyYDseJG8o+DxM4guk0MlktzP8Zcj2A+ej/0H+AqQn30Ck2vsvRLEH7OZ4w+7uH+0NyR6G9ZnUXTfYfLwRTFB/owjaDF4J/oLNxU63Qv6poIoIpcrhxUYp6wLclLBcmewPcg472CQrvBNNnwBp0rt5z0+7F/xlyf0XHXr0NfJNklvvVgd8HKGIi+hs2CPi9q1a5L5is5+8tgvwGuplYN8qCKSwPcnUJekiuEr3oL0R5WE4EU+SwgqkQvTp4OljvVBQvRnUJy4Up6IuRxduZKHbm1VfT7sHfIblvA+PRl+pvo+dVJqbE1EWUmf0ArkHHQWVOLjrUHNwUTMEPx4FzbToW99KefBS3VTgJy3WpLmG4RkU/8FsEU+TYg/PFS/dJ7mRTr8rcnEAJi4cp6JQCFm/jBKxgGhe3VTz8G5LrBtxltn+JM5CdmBJTFwF6KNJ6l/6MGxm/uuL2EjotcLx+wQomm/bkMNxLexLFh7owxVZawiSYxMMk+Eqmw3KnmPodF2wJkrA8yQUdH2Dx1sP0Onp+Ww/0MFXq+Dckdy96KK6YVIfTSkxdVPvKz9G/uEJ0wsvMsDeuLbiVtHIU2te8DVjhSo/pcghnmD+TYbkcoj2LN0yzd6H+UjxhmJQiHibBVzIJ/G6LczF61x1zAqPuk5y72a1TI+gZKBb7BNcenZHHXSqBRWY7PS+TP0NyZwEXoRcemUwycUt1KTF1Ue0rVeghOYD/R7pi0WL7LYnTJjXON/V/CcMiR27EWPZA5+yqxs3z5B/2+90O/TmCpjtaNFXh9lI8qSFDckIgWME0MI19T0L/27/ACcKLKvbH35JgZ16ExcO0Byf7eRjjmPwZkrvN1H9BL3uSGnZNtB7UXQvsJeAf6NvOvRlZZ9N5bIjbKhVsbNV813rMBDcnpawjVbkbDipwUiGEYViu7sLgKkA7op/tWwRTJLFDaemk1cuW4TjQT6DbzHa3eA09JiweJvAr8Pt0oCClPXNxUi94NyR3MTAMLR1vTauHL83euTSMw7nWvDMKmJS2he4Kpv7oEOtKnNQPweKmYIricJwlLPGVEI74JRAPkxAQK9FPXj1IXSjYgO9sEEzg3HyDFExhCfoGrwXTBvQtMZ9U0wsciU5KcAivPJt5wEyz/QecFb1SZ52p6y/xUQr8zmz/2hwvddwVTBeY+hV0fFnwuCGYbKhBlNOehCW+EsLzQCdB30Ig7ENnxYHUvUzWwxT1+CVL0IKpIzouDNxe6iI9vHd725lYqQ3L2f/PNrxay+pKtG9iK3B7Rj3ZpTgar4l2B9p3cBzwvbT6dlcw2filcAzHgSOYeuD8LlJlsKmjPIs3jIIpaA+TvTZ1xIsYSz8QwRRZik2dynKoh+HEPYmHyR3sxWgrekp10HgvmBaY+mukEmrv7Qy5w4EZZvsW9NBZ+jQtmPaa/jHHS+2yX3eYL3PB1AkYabafybg3t9iNMxzVN17DJsghO7zgIpgaU4HXMZZeI4IpsljBlIqH6UT0QMKXhMMb4gY25X73uK28IywB3xbvBdNi9GWvOzA06b28nSH3XbRkLkFn984MOyR3TMx3HzAtCoGfpNRvd3QgeTVu/P6+hr6Ar8D5r4cDG3uUjmA6Bj27bD+pZM8KH2GKYQrTNSragd8imCJLOh6mbHhya0hYPExBxwdYvL8gVeF4mSYkvZd3M+TygGlm+3doOZIZTXuYMP3/3Gz/lFTy7dvhuI24kQDgYlOHZzjOYsMFTkxjXxsysIpozpCziIcpNtEO/BbBFFlWoWNBCkn+5pht8UsQvGAK09Mb+PUE9x9TJ79ciHdDcpeiB7q2ALNd6dEKpqPRiQQa8wTwHjrj1XVJ9+te/FIHnPXj/plxb25jH8hOidsqNtkyizcsgukwnNmpYbhGRTvwWwRTZDmAk2UmWS9TtlyM6hIWwRQ2D1MhXv68F6A9TQNIduDFmyG5XGC62b4dt6LIvjA9tcR5Oq+PwomZ+hF6DmBi3BNME9DWvY/jzwkPNt94c057EpYhOStM9gE7gjTEEO1s3yKYIo29MCUjmPJwchRH/WJUl6AFU9iG5MrQnsc8vLxYl+Nk/U7Oy+TNkNzF6AnsO9BrvbmDwhE1sYflAP6N/iUV4AwJxsc9wXSJqZ/IuCcveB89cNmZpgRn02SLFzwsHqYwDceBDMkJAZJKHFN/9FyicmC9Zxb5jxVMrXFjadTUCduQ3CGci3WYhuW8GZL7manvJtOZcQ2xw3KxA78tvzD1NTgDH03jjmDqhJMDK5yCqRLH+52Kl6kX2ldXTTo52sOF9TC1IpjrksUKprBM8pEhOd/o0KEDc+bMYdeuXezatYs5c+bQvn37hPvNmDGD0tJS9u3bx6JFixgwYEDtex07duTuu+9m7dq17N27l88++4w//vGPtGsX5Jc8WVIRTGeY+h2CTY/vNvvRU5nBfy9TLs4PPyweJvArjskGG48gGV+W+0Ny49EZeyrQgsld4gd+W54FlqHl+o0J+3RHME1E+w/fwbEyfKQzLGe9Sx+gB3yjTN3rUpBeprB5mGRIzjcee+wxBg8ezLhx4xg3bhyDBw9m7ty5cfeZNm0a1157Lddccw1Dhw5ly5YtvPjii7Rtq5Oqde/ene7du/PTn/6UE088ke985zuMGzeOv/3tb358pAx5Dz023Qm9Rlw8LjL1s55aFAxBpRbohr51VeP1+mip4Y9gKgXeRl9Ezo/bshU6PBrcPE83mfp+YKdrvVqSE0zgeJmmEu8b2BLn/5GZYAr3cJwlE8GULSEDYYhjCptgsh6mLuj1AqKHikLp37+/UkqpYcOG1b42fPhwpZRSffv2bXK/TZs2qWnTptX+3bJlS7Vz50511VVXNbnP17/+dXXgwAHVokWLpO0rKChQSilVUFDg87l5SoFS8Ms4bToqqDbtjgn8f+l+edl8tm/5fNwR5rgbQnAO6pa7jV0zPT/Wz/SB1PNx2x1t7Nnr2nHHmOPuB1XoyWf7irH5/aTav2bsuafJNsea/vZkZFdvUAfNsYo8/t9mVoaaz1uWwj7PmH2uDoH9bpRXzef5RoA22HP6/RCcD1sOGJt6hcAWXZK9f0fGwzRixAh27drF8uXLa19766232LVrFyNHjoy5z9FHH023bt1YuNBZlrKqqopXX321yX0A2rdvT3l5OQcPNp0HpGXLlhQUFNQrwfC0qS+K0+Z8tCdkFU5SvmwiqMDvsAV8W/xLDme9HOcS7zna/eE46136m6u91qVuDFPifOY3m/r7NBXmbIfjSjKy6kq0R++ljHvymvfQntcuJD/8km0epjAEfofNwwRRHpaLjGAqLCxk69bGy2lu3bqVwsLYX0j7ellZWb3Xy8rKmtzniCOO4Oabb+Yvf/lLXHumT59OeXl5bSktDSrX7n/Rs6IGAX2aaDPR1E/5YpH/BCWYwhbwbfFPMK0DlqKzFf1vk63cnSE3FBiL/tb/3pUeY/GZOUIrkvlevYpeALclTlLL+mQev9QCndEcdLbxcFMJfGi2kxmWK0QPaB5Ei61sQARTbKIb+B24YJoxYwZKqbhlyBD9g1NKNdo/Jycn5ut1afh+U/sUFBTw7LPPsnr1an71q1/F7XPWrFm0a9eutvToEdQ/fyf6cg2x8y63wUlxJ4LJXcLqYfL3gvR3U1/WZAt3Z8jZmXF/R8sab6jB8eEkjmMCx8s0mVhz6zIXTOPR/9Ev0SkNwk8qcUx2FYK16LjMbCDoGKbWwBFmO0yCKboeprygDbjnnnuYN29e3DYlJSUMGjSIrl0bf/E6d+7cyINk2bJFK/zCwsLabYAuXbo02qdt27Y8//zz7Nmzh4suuoiamvgrqldVVVFVFZaZHE8D56CH5e5o8N5X0ekEPiH6U3WbQjxM9fF3vaZ/AHeh52r2J9YKYO4NyZ2Afiw4BNyWcW+J+BQtlo4DXkvYegk6oed44LfA1+u9m7lgusrUDxOVOWTvoAcRkxFMp5n6Xe/M8Z2gPUxWkJTjLHobBqKdiynwgKtkig36Hjp0aO1rw4YNSyro+/rrr6/9Oz8/v1HQd0FBgVqyZIlatGiRatWqladBY96UoxQoBQcVdGnw3mPmvdsC/x96V840n3GNz8ctNsf9WgjOQd3S2tilFPjzfZxvDnhrzPcfMLb8POPjPGqO8w9fzuOdxu7bk95nAKgaY+MZ9d57y/Q1IS1bjqrTb19fPrsb5RTzmXcraJmg7SrT9vIQ2O1WGW8+04qAjn+OOf4HITgXdcuPjF3zQmCLLincv4M3NtmyYMECtXLlSjV8+HA1fPhwtWrVKjV//vx6bdasWaMmTJhQ+/e0adPUzp071YQJE9TAgQPVo48+qkpLS1Xbtm0VoNq2bauWLl2qVq1apfr06aO6du1aW3Jzc7044R6V5QqUguvrvHaY0hcrpWCYx8cPsvQzn3G3z8fdao47KATnoGHZaWzr78vxJumDqfWgchq9b2fqXJnRMY7BEQ2DfTmH3zd2P5fSfvcbG5fXOxdfmr5OSsuWO02fr/jyud0qOQq+MJ/7K3Ha2RmEVQo6hMBut8pg87k2BXT875jjp/b99b5cbOx6IwS26JKVgqljx45q7ty5avfu3Wr37t1q7ty5qn379vXaKKXUFVdcUe+1GTNmqE2bNqn9+/erxYsXq4EDB9a+N2bMGNUUvXv39uKEe1T+T1F70TlTabFkUw5sVPriFfz/0JtSYD6nUtq74scxW9U5ZocQnIOG5QNj2zm+HK8VqN3mhIxq9P7bxpbMPHF/Nf3/17dzONLYvTGl/brUOReXgoLOpp+DSn9vUrOjC6h9pr+xvn12t8p95rPfH6fNNNPm+RDY62bpWuf/nnyKGvfKzeb4fw3Buahbhhu7wpOOJSsFU5hL8IIJBY8qUAq2K1hstvcr+Grg58f7ssd8Xr/yTB1njlcRgs8eq7xg7Pu2b8f8mz6g+nuj96yXYUjaffcCVWn6H+nbOexg7E59aPMGs+NGUIfVDhl/mpYdvzV9LfPtc7tZzjOfvVQ1/dC2zLRpOjdeNEuucvLfdQvg+H81x745BOeibrEhJFUqLA/yWZeHSUiG76IneR8BjEEvGvFV4LkgjfIJG/jtV7bv3qb2bp5WZvgb+A1wj6knUfe/kIMzSyj9WXK/RE/ZfwUdXO0Pu3CyyA+I064xd6Hn2PUEzmegefXDppo3yZHA1Wb7lpT3DgOL0QHH3dEJIRpyFDAcHcb/nxjvR5lDODPl/F6FAMK3jpxlCzp9RD7JrMAYJkQwZRWV6DlEH6F/qOegL1jNAb9ze4hgasi76AQX+cAPal89EmcybuM8aslwPPBtsz09bevSZbWpUxNMlegklgCdMhBMNwJt0RP0F6S8dxiowrH8whjvTzD1mzjiIpuwgtvvGbwQzhxMoFN22P91tHIxiWDKOraiJ1/3RK/01Vzwe6qqFUxhy8Fk8V8wAdxp6inolI/OjeJL9IUydX6NTtr4FLA8QVv3sSJnYNxWsXgJuBf40OzbKkXBdArwY7N9c5x24cd6jibEeO9iUz/pjym+E9Q6lxBewQRRTS0ggikrqUEvS9Cc8DsZmniYYvEMOvv3kdhElpklrRyGzlN/kKYyaHtNeh4my/XA+0YwTU9BMOWhl33JAx4n6oPqC9CepgHAiXVe7wycYbaf9tson/A7VMDSzhQIt2ASD5MgBIDfP0CbtFIEU10OAXeb7Z8AORkkrcyt09cjwJpMjUsLK3LSE0z76coujiSXg/yUtbVZyhNxIzAY2Ab8KK0jh4lynGG5eUAB2mf4O1MXE15PbaYENSRnvUs7CGfm9Ghm+xbBJGQJQQ3JhV0wdUXflPxjNnrBnuOBIRmsIzcFHQ5cTlDeJXA8TL3R0USpor1L7VhPKw7wG+DaBHt8F7jVbP8YPZgZfaaiv5MDgEfRyzZ/B+07/E1wZnlOUB4mex0Mo3cJZEhOEALFT49KLs4PPayCaSt6WLYFfi/NUAHYlRhPSXNIrhCYZbZ/lvLebrKzztGPT2N/LZh28WGt6LsdHZPUMkbr7+IsrHsnWlpkB1vQMUwHgPPRsUuV6AVk/h2YVd4TtIcprIIpGA94pohgErIE+8TSDe89Kt3Rc8GqCfJWHh+FY5v/T3H3oteU252mh+mPQHv0tIX7XbUsHayXKfXAb+rMkPsNOoAddIqAteiZdOeh5cMb6LilXOBPJPZERY9i9NpyoGX1OLJbLEFwQd9hF0zR9DAFvviuILhDGTrYPQ89DLUpfvOMsMNxX6CjdsJKKTrWyv+nuBr0DX+PuVEUsilpyXQ1OpfTQfSCs8Gf4Q/RKTrSiWOqn1LgZvSSvr9BL8f71watDwC/B36RjpmR4DGctCdhyw/kBfahpQv6Qe6gT8eNimASD5MgBMAhnIuT1z/CsAd8W4J1ez8HrDMepplspiCJfU5HJ30EuAFY6YVhKWMDv09IY9/GOZgeAY5D55R6E3gHeB89VHc02SyWLCtoHmIJnHQaLfA3SWPYBZO9NrVF+5KjgQgmIYvwy80b9oBvS/BxApuNYDqDTTxO/AvO8cC/0IOd89ACIhysMvWQFPfrBnREexU+qvfOfuA2YJTpdRDwU9IJjRfCTVDZvsMumA4A2812dIblRDAJWYRfAiEqgilot3cBysws68BmvgY8ROy5ZmPRi/oUAu/hRLqEg3fRAcpd0D6gZLHepU/N/kLzJIjA77ALJgjDA12qiGASsgjxMNUn6AuSvUHsZqrJBXMFenDqCnRSynOAv6Oz9LQHXgfOJmyZY6rQogngtBT2S39JFCGb8Dvw+wigtdkujdcwYKIX+C2CScgi/EqGJoIpOewNYjP/As4F1qMjwB4G3kIvH3IpOlT/YdNme8NuQsEyU4tgElLFxlb65WGy3qWthNuzGbQHPHVklpyQRfj1Awz7OnKWoAWTvUHoG8bL6LDp6eghuB7AYehFMR5ETzoPLyKYhHTx28MU9qSVluhl+xbBJGQRfrh4jwDamO2oCKY26AGv3T4f3womJ8XDfvQssOjNBLOC6WTgcHTQajwORy+fC07QuNA88VswRSF+CWRIThACxQ+PivUubSHc7m7QN/UdZjsIL5MzJBd9PkN/jny0aErESLRoKkWnqBSaL0ENyYVdMAXtAU8dEUxCFmGf5FqhPUFeEJX4JUuQF6XGHqZoY71MI5JoO9bUL3lkixAdxMMUG/EwCUKAVOIsVeqVQBDBlDzZ5GGC1OKYzjW1CCahYbZvr4maYDoS7Y0NPyKYhCzD66cWEUzJk60epkSC6Qic+KWXvTNHiAh+L4QdFcG0G9hrtqMxLCeCScgy/BJMYQ/4toRBMGWLh6kYnbW7J/HP51noS+sHZM9nF9JH4fwOe8Zr6AI5RGeWHERtWE4Ek5Bl2B9gr7it0sdmet7gUf9uE5RgagO0M9vZIhr24SQ/uCBOO4lfEhpixYvXwqAzOlnHIaLh2Y1WLiYRTEKWUWLq3vEaZcAxpl7nUf9uE5Rgst6lCmCPz8f2knmmvixOG4lfEhpihYHXHibb/2b0or9hJ1q5mEQwCVlGiam9EExH4nhNSuK0CxNBXZCyLeDbMg89LDeS2OvKHY0W1dXAqz7aJYQbv4aeohK/ZBEPkyAEiA3GLvKgb+td+oLEiQvDghVMXdE5hPwi2wK+LVuAV8z2t2K8f46pl5FdnjUhM6yA8drDZAXZF3FbhQfxMAlCgJSYugfuC4SoDccBbEMvHgv+rpaebQHfdXnU1JfGeE/il4RYiIcpNhL0LQgBUoZegKMF7v8I+5h6vcv9eonC8fL46fa2Q3LZ5mECeAr9HTue+lm/hwITzfbzfhslhBoRTLGRITlBCBivhuWi6GGCYAK/s9nDVAE8Y7avMXVr4O/o5TnnAcsDsEsIL1bAdMfb5JVRFUzdiMLStiKYhCykxNRuB35bD1PUBFMQT3HZGvRt+Zupv4sWSPcAfdE3qqlBGSWEFr+SV9qJCCUeHsNNvkTHg+YSBS+TCCYhC/HawxSlITkI1sOUjUNyAAvRwqgauASYbF6/AtgVkE1CeDmE98krD8P5jUclT5zCv4D4zBHBJGQhJaYucrHPw3HiD6LmYZIhOW/4Mzqr9xbz9+3AouDMEUKO13FMNlnvHmC7R8fwAiuYvEo27B7hHzQUhJQpMXWRi33avnYTrYsR+C+YWgEdzHY2CyaAN4ET0QHfLwRsixBuvE5eGbVVCCx2mSkRTIIQACWmdjOGKarDceC/YLLHqQDKfTpmkGwDngvaCCH0eL08SpGpRTB5hQzJCVlIiamPwr0ZKVGdIQf+C6aoJc8TBD/wekguagHfFhFMghAgZUAl2oHq1sUpqjPkwAm8bgV09OF4IpgEoTFeBzfLkJzXiGASshCF+zPlojwkV4keNgJ/vEwimAShMV57mIpMLYLJK0QwCVlKiandimOK8pAc+DssJ4JJEBpjfw9eJa+M6pCc9by1x1ncPJyIYBKylBJTF7nQVw7OxUgEU2JEMAlCY8rwLnllG6CL2S5xuW+v2YfjAQ+3l0kEk5CllJi6yIW+uqPzMFUTnSUHGiKCSRCC5RBOPKHbcUzWk74TnfokakRjWE4Ek5Cl2Bimo+O2Sg4b8P0ZcNCF/oLACiY/VgUXwSQIsfEqSWNUA74tVjCFO9u3CCYhS/nU1Me50FeUA74tfnmYWgJdzbYIJkGoT4mpi1zuN1sEk3iYXKNDhw7MmTOHXbt2sWvXLubMmUP79u0T7jdjxgxKS0vZt28fixYtYsCAAU22XbBgAUopLrzwQjdNF3znI1P3ANpm2Jf9vqzNsJ8g8Usw2UV39wM7PD6WIEQN+9DVJ26r1CkydYnL/fpFNJZHiZRgeuyxxxg8eDDjxo1j3LhxDB48mLlz58bdZ9q0aVx77bVcc801DB06lC1btvDiiy/Stm3jm+iPf/xjlFJemS/4ym50kCXoVeQzYaCpV2fYT5D4JZhkOE4QmsZ6gNwIFaiLeJj8QkWh9O/fXyml1LBhw2pfGz58uFJKqb59+za536ZNm9S0adNq/27ZsqXauXOnuuqqq+q1GzRokNq4caPq2rWrUkqpCy+8MCX7CgoKlFJKFRQUBH6upNjyqgKl4FsZ9lNi+hkVgs+UbjnSfAaloKWHx/lfc4xXQvCZpUgJWxmjQCn42OV+3zH9jg/BZ0ynnGbs3xDI8ZO9f0fGwzRixAh27drF8uXLa19766232LVrFyNHjoy5z9FHH023bt1YuHBh7WtVVVW8+uqr9fZp1aoVjz/+ONdccw1lZWWxumpEy5YtKSgoqFeEsGGH0Ppl0EdbnBkoH2ZmTqBsBw6Y7e7xGmaIeJgEoWk2mLo37g7wFJm6xMU+/cR6mI4izANf4bWsAYWFhWzdurXR61u3bqWwMHZOC/t6QxFUVlZWb58777yTJUuWMH/+/KTtmT59OuXl5bWltLQ08U6Cz9g4pkwEk41f2oyeshtl/BiWE8EkCE3zBTo9SUvc+x22x1nyqMSlPv1mC/q85AHdAralaQIXTDNmzEApFbcMGTIEIGZ8UU5OTsK4o4bv193n/PPP5+yzz+bHP/5xSnbPmjWLdu3a1ZYePfxa2FRIHjcEk41firJ3ySKCSRCC5RDupjyp208ZOglkFDmEc80IbxxTXtAG3HPPPcybNy9um5KSEgYNGkTXrl0bvde5c+cmh9G2bNkCaE+T3Qbo0qVL7T5nn302xxxzDLt27aq375NPPsnrr7/OWWedFbPvqqoqqqqq4totBI0VTH3R2brjC+vYWA+TCKbkEMEkCPHZAByLFjqvudBfkalLXOgrSDaiz0kRsDRYU5ogcMG0fft2tm/fnrDd0qVL6dChA0OHDuXtt98GYNiwYXTo0IElS5bE3GfDhg1s3ryZsWPHsnLlSgDy8/MZM2YMN9xwAwC33XYbDz74YL39PvjgA37yk5/wzDPPZPDJhODZAFQBrdEJ0TbGbx6TbPIwWRHjZXI4EUyCEB+bWsAtD5PNE7chbqvwsx4Yg/szCN0lBBHyyZUFCxaolStXquHDh6vhw4erVatWqfnz59drs2bNGjVhwoTav6dNm6Z27typJkyYoAYOHKgeffRRVVpaqtq2bdvkcWSWXDaVDxUoBWPT3P8zs//IEHyWTMvV5rM85VH/eQoOmmN0CcHnlSIljOUGBUrBHJf6+6vp75ch+GyZlJ+bz/Gg78dO9v4duIcpFS699FLuvvvu2llv8+fP55prrqnXpn///vWSWf7ud7+jVatW3HfffXTs2JG33nqL8847jz179vhquxAUH6GH1foBL6a4bwHOeHo2eJhKTF3kUf+F6LDIKuBLj44hCFFng6nd8qTYGM2P4rYKP14l9XSXECjL6BfxMIW1zFKgFNyTxr7Dzb5fhOBzuFEGmM+z3aP+bS6V9SH4rFKkhLUMVbh6XSkz/Z0cgs+WSRlhPof/uZiyLg+TIKRHJrmYsil+CZzZOUcA7TzoX+KXBCEx1pPSAzg8w746AF3M9scZ9hU09rz0BPKDNKRJRDAJWU4mqQWyTTDtBbaZ7d4e9C+CSRASsx2oMNuZ/g7tde0L9O87yti0CC0Ia2oBEUxClmMFU0+gTYr7ZptgAm/jmEQwCUJybDB1pnFM/U0d5YXB6xLuOCYRTEKWsxNnEd6B8RrGIBsFkx2W88LDZNMViGAShPi4lVogWwK+LSKYBCFgVph6aAr7tMfxmKx215xAKTF1kQd924t/SbxGgiDUepgyFQYimPxEBJPQDHjL1MNS2Mdm+P4cKHfXnEApMXWRB33bi9yGuK0EQbDC4Ji4rRIjQ3J+IoJJaAYsN3Uqguk0U69015TA8WpIrgA40myLYBKE+FiBc3wGfbRAL7EC2eNhcsvz5g0imIRmwNum7o8eakuGM039quvWBEuJqYtc7tcOx20DJCmsIMTHDvMfC7RMs48is+8+tCc8G3B72Rh3EcEkNAO2A+vMdjJxTLnAGWZ7sRcGBYj1MHUi9VmD8bAXuPVxWwmCALAJ2I1ezvW4NPuw8Usfo/MqZgPWw9QRnWMqXIhgEpoJqQzLDUL/YMvJviG5cvTMQXB3WM4KJhmOE4TksF6mAXFbNY2NX8qW4TiA/cBmsx2+YTkRTEIzIRXBNMbUbwAHvTEnUEpMXeRinyKYBCE1MhVM1sOULQHflvAGfotgEpoJdqbc8CTaWsG02BtTAqfE1EUu9imCSRBSwy3BlE0eJhDBJAiB8y5QAxTiJFiMRQ4w2mxnW8C3xcYxFbnYpwgmQUgNGZKLTXhnyolgEpoJB4D3zHa8YbkT0NPjK4B3vDYqIEpMLTFMghAcVjD1RQd/p0J7oKvZzjbBZCfoHBu3VRCIYBKaETaO6bQ4bc409Ztoj1Q2UmLqIpf664yecXcI2OhSn4KQ7XyOTsHRktQTWFrvUjYsutsQN3JUeYMIJqEZYYfYJqKH3mIxpkHbbMR6gTLNMmyx3qVSoMqlPgUh21HAGrOd6rCcTY+yyj1zQoMVTN2BdkEa0ggRTEIzYj56qK0PMCrG+zlkf8A3OC7vI9HpEzJFlkQRhPRIN47JhhW8FbdVNClHP3xB2LxMIpiEZsQ+4B9m+4oY75+ITui4Fyj2y6gA2It25UP6SfPqIvFLgpAe6QomO9s3GwUTOJ43EUyCECCPmPobQKsG70039Ytkb/yS5RNT93WhLxFMgpAe6Qimjji/27fjNYwwIpgEIQS8gc7z0Q64qM7rw4H/RQcu/yIAu/zmY1OLYBKE4LCCqT/J347tcNzHOFn7sw0RTIIQAhQwx2zXHZb7g6kfBt7306CAEMEkCMFTgp4pdzgwMMl9sjl+ySKCSRBCghVM5wIzge+hg8D3ATcHZZTPWMGUaQxTLtDLbItgEoTUOAQsNduxJqLEItvjl8ARTEcDhwVpSD1EMAnNkA3AXPTXfzrwgHn9D+hVxJsDbsUwHQXko9MJNJdzJwhu8rqpz0iyfXMQTGXo4cYWuOMFdwcRTEIz5QrgApygyVLg98GZ4zvr0QsLtwW6ZdCPHY77DP20LAhCarxh6mQEUx/0TN5KnJULspXwDcuJYBKaKQp4Bh0PMBT91LYnUIv8pRpnCC2TYTmJXxKEzFiG/j0eReLs+zZ+6V2yP0msDYgXwSQIIaIYJ1Fac8KNYTl7Mfs4bitBEJpiP7DCbCeKY2oOw3GWdLOge4cIJkFotrgxU+4EU3+QoS2C0JxJNo7JCqblcVtlBzIkJwhCaHBjppwIJkHInGQEUz5wstluTh6mvujg7+ARwSQIzZZMh+QKcFIKfJi5OYLQbHnT1Mejg7pjMQKdr2k7znqQ2cxn6FQvh+HeQuGZIYJJEJot1sN0DOldCmyivVJglxsGCUIzZQeOl/b0Jtp839RPe29OKFDAO2Z7WLyGviGCSRCaLZ8DB9BPcL0StI2FDMcJgnvY9AJfifHekcDXzfaf/TEnFCwz9YhArbCIYBKEZssh4FOz3T+N/a2HSQSTIGTOP019BdC5wXtXoIfjVuDMqGsOWMF0WqBWWEQwCUKzxq6bd1Ia+4qHSRDc4xX07LfWwI8avHeVqf/iq0XBYwXTIPR5CRYRTILQrHnX1Keksa8VTBLwLQjuMNPU1wDtzPaZQD+gHHg8AJuCpBT4AsgDhgRsiwgmQWjm2KDKVAXTkUCh2V4dr6EgCEkzH/0A0h6Yip5Of7V571Ga12oElvAMy4lgEoRmjfUwHYvzRJsMNn5pPbDXVYsEofmigFlm+1fo39Y3zN/NbTjOstTUIpgEQQiUHeh8JwCDU9hP4pcEwRvmoVN+HGbKPuABYFWQRgVIeGbKiWAShGaP9TKdHLdVfayHSeKXBMFdDgJjgLHoxXjb4gR9N0feQS9O3I300p+4hwgmQWj2pBPHJB4mQfCOLcBLaO+vCtiWoDkArDTbwQ7LiWAShGZPOh4mEUyCIPhFOIblRDAJQrPHepiORyfHS0Q34Aj00MFHXhklCIJgsIsTjw3UikgJpg4dOjBnzhx27drFrl27mDNnDu3bt0+434wZMygtLWXfvn0sWrSIAQMGNGpz2mmn8fLLL7Nnzx527tzJokWLOPzwZG4eghB1NgFb0blOTkyivfUufQJUemWUIAiCYSFQg46dPDowKyIlmB577DEGDx7MuHHjGDduHIMHD2bu3Llx95k2bRrXXnst11xzDUOHDmXLli28+OKLtG3btrbNaaedxvPPP8/ChQsZNmwYQ4cO5Z577uHQoUNefyRBCAmpxDGNMXWxR7YIgiDUZTeOl+l/gjQEFYXSv39/pZRSw4YNq31t+PDhSiml+vbt2+R+mzZtUtOmTav9u2XLlmrnzp3qqquuqn1t6dKl6pZbbsnIvoKCAqWUUgUFBYGfKylSUi8zFSgFf06ibbFpe3kI7JYiRUrzKFcouEfBMNf7Tvb+HRkP04gRI9i1axfLly+vfe2tt95i165djBw5MuY+Rx99NN26dWPhwoW1r1VVVfHqq6/W7tO5c2dOO+00tm7dyptvvsmWLVtYvHgxp59+elx7WrZsSUFBQb0iCNHFepgSBVV2xlmiYGG8hoIgCC7yCHrJmOWJGnpGZARTYWEhW7dubfT61q1bKSwsjLEHta+XlZXVe72srKz2vT59+gDwy1/+kgceeIBx48bxzjvv8PLLL3Psscc2ac/06dMpLy+vLaWlpWl9LkEIB4vQQdyDiJ/rxAZdrgTK4rQTBEHILgIXTDNmzEApFbcMGaKfaJVSjfbPycmJ+XpdGr5fd5/cXH0K/vKXv/Dwww+zcuVKrr32Wj766CO++93vNtnnrFmzaNeuXW3p0aNHSp9bEMLFduBNs31BnHZfMfUL3pojCIIQMvKCNuCee+5h3rx5cduUlJQwaNAgunbt2ui9zp07N/IgWbZs2QJoT5PdBujSpUvtPps3bwZg9er6C4iuWbOGXr2aftKuqqqiqqoqrt2CEC3mA6PRgumeGO/nAOeZ7ef9MkoQBCEUBC6Ytm/fzvbt2xO2W7p0KR06dGDo0KG8/fbbAAwbNowOHTqwZMmSmPts2LCBzZs3M3bsWFauXAlAfn4+Y8aM4YYbbgC0GCstLaVfv3719u3bty/PPfdcBp9MEKLGf4A/AGeiV0vf3eD9QUAhesX0NxEEQWhuhCD6PbmyYMECtXLlSjV8+HA1fPhwtWrVKjV//vx6bdasWaMmTJhQ+/e0adPUzp071YQJE9TAgQPVo48+qkpLS1Xbtm1r2/zoRz9Su3btUhdffLE65phj1C233KL27dun+vTp43qUvRQp4S6rFSgFl8R4b5p5b76Hx5ciRYoUf0sK9+/gjU22dOzYUc2dO1ft3r1b7d69W82dO1e1b9++XhullLriiivqvTZjxgy1adMmtX//frV48WI1cODARn3fcMMNauPGjWrPnj3qzTffVKeffrpXJ1yKlBCXWQqUgkdjvPeyee8HIbBTihQpUtwpyd6/c8yGkCEFBQWUl5fTrl07KioqgjZHENJkBLAE2IVOIVBjXm8D7ABaAscBnwZhnCAIguske/8OfJacIAhh4i10uoAOwP/Wef0WtFhah4glQRCaIyKYBEGowyHgQbP9AHAG8B3gWvPaDQHYJAiCEDyBz5ITBCFszEAvcjkBeAawi1D/CngyIJsEQRCCRTxMgiA04CDwTXTqgPbAYWih9KsgjRIEQQgU8TAJghCDA8D5wBNANXAFMj9EEITmjAgmQRCaYCdOZm9BEITmjQzJCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgCIIgJEAEkyAIgiAIQgLygjYg2ygoKAjaBEEQBEEQkiTZ+7YIJpewJ7y0tDRgSwRBEARBSJWCggIqKiqafD8HUP6Zk91079497slOh4KCAkpLS+nRo4frfQv1kXPtD3Ke/UHOsz/IefYHr89zQUEBmzZtittGPEwukuhkZ0JFRYX8GH1CzrU/yHn2BznP/iDn2R+8Os/J9ClB34IgCIIgCAkQwSQIgiAIgpAAEUwhp7Kykl/+8pdUVlYGbUrWI+faH+Q8+4OcZ3+Q8+wPYTjPEvQtCIIgCIKQAPEwCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDCFnKlTp7J+/Xr2799PcXExo0aNCtqkrOLGG29k+fLllJeXU1ZWxtNPP03fvn2DNivrufHGG1FKceeddwZtSlbSvXt35s6dy7Zt29i7dy/vvvsup5xyStBmZRUtWrTg1ltvZf369ezbt49169Zx8803k5OTE7RpkeaMM85g/vz5lJaWopTiwgsvbNRmxowZlJaWsm/fPhYtWsSAAQN8s09JCWeZNGmSqqysVFdeeaXq37+/uvPOO1VFRYXq2bNn4LZlS3nuuefUFVdcoQYMGKAGDRqknnnmGVVSUqJat24duG3ZWk499VS1fv16tXLlSnXnnXcGbk+2lQ4dOqgNGzaohx56SA0dOlT17t1bnX322apPnz6B25ZN5Wc/+5n68ssv1fjx41Xv3r3VxRdfrMrLy9UPf/jDwG2Lchk3bpy69dZb1UUXXaSUUurCCy+s9/60adPU7t271UUXXaQGDhyoHn/8cVVaWqratm3rh33BnyApscuyZcvUfffdV++11atXq5kzZwZuW7aWTp06KaWUOuOMMwK3JRtLmzZt1EcffaTOOecctWjRIhFMHpRZs2ap1157LXA7sr0888wz6sEHH6z32r/+9S81Z86cwG3LlhJLMG3atElNmzat9u+WLVuqnTt3qquuuspze2RILqTk5+czZMgQFi5cWO/1hQsXMnLkyICsyn7at28PwI4dOwK2JDu59957efbZZ3n55ZeDNiVrueCCCyguLuYf//gHZWVlvPPOO3zve98L2qys44033uCcc87huOOOA2DQoEGMGjWKBQsWBGxZ9nL00UfTrVu3evfFqqoqXn31VV/ui7L4bkjp1KkTeXl5lJWV1Xu9rKyMwsLCgKzKfu644w5ef/11Pvzww6BNyTouueQSTjnlFIYOHRq0KVlNnz59mDp1KnfccQczZ85k2LBh3H333VRWVjJ37tygzcsafvvb39K+fXvWrl3LwYMHadGiBTfddBPz5s0L2rSsxd77Yt0Xe/fu7fnxRTCFHKVUvb9zcnIavSa4wz333FP7lCi4y1FHHcUf//hHzjvvPFlCwmNyc3MpLi7mpptuAmDlypUMHDiQqVOnimBykUsuuYTLLruMb33rW3z44YcMHjyYu+66i02bNjFnzpygzctqgrovimAKKdu2baOmpqaRN6lLly6N1LWQOXfffTcXXHABo0ePprS0NGhzso4hQ4bQtWtXVqxYUftaXl4eo0eP5pprruGwww7j0KFDAVqYPWzevJnVq1fXe23NmjVcfPHFAVmUnfz+97/ntttu44knngDggw8+oHfv3kyfPl0Ek0ds2bIF0J4muw3+3RclhimkVFdXs2LFCsaOHVvv9bFjx7JkyZKArMpO/vSnPzFx4kTOPvtsSkpKgjYnK3n55Zc54YQTGDx4cG15++23efTRRxk8eLCIJRd588036devX73X+vbty2effRaQRdlJ69atG31vDx48SG6u3Fa9YsOGDWzevLnefTE/P58xY8b4dl8MPBJeSuxi0wpMnjxZ9e/fX91xxx2qoqJC9erVK3DbsqXce++9aufOnWr06NGqa9euteXwww8P3LZsLzJLzpty6qmnqqqqKjV9+nR1zDHHqG9+85tqz5496lvf+lbgtmVTmT17tvr8889r0wpMmDBBbd26Vd12222B2xbl0qZNG3XSSSepk046SSml1I9//GN10kkn1abTmTZtmtq5c6eaMGGCGjhwoHr00UclrYAUXaZOnao2bNigDhw4oIqLi2W6u8ulKa644orAbcv2IoLJu/K1r31Nvffee2r//v1q9erV6nvf+17gNmVbadu2rbrzzjtVSUmJ2rdvn/r000/VrbfeqvLz8wO3LcplzJgxMa/Js2fPrm0zY8YMtWnTJrV//361ePFiNXDgQF9syzEbgiAIgiAIQhPIYKsgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgJODOO+/k6aefDtoMQRACRASTIAhCAoYOHcry5cuDNkMQhACRteQEQRCaIC8vj71799KyZcva19566y1OO+20AK0SBCEI8oI2QBAEIawcPHiQUaNGsXz5ck466STKyso4cOBA0GYJghAAIpgEQRCaQClF9+7d2bZtG++9917Q5giCECASwyQIghCHk08+mVWrVgVthiAIASOCSRAEIQ6DBw8WwSQIgggmQRCEeJx44okyHCcIgggmQRCEeOTm5jJo0CC6detGu3btgjZHEISAEMEkCIIQh5///OdccsklbNq0iV/84hdBmyMIQkBIHiZBEARBEIQEiIdJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEBIpgEQRAEQRASIIJJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEB/x+168bdU72dAAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -112,14 +146,14 @@ ], "source": [ "# Scipy\n", - "scipy_solution = solve_ivp(diffeq_scipy, time_span, initial_conds, method='RK45', rtol=rtol, atol=atol)\n", + "scipy_solution = solve_ivp(diffeq_scipy, time_span, initial_conds, method='RK45', args=args, rtol=rtol, atol=atol)\n", "print('SciPy Solution')\n", "diff_plot(scipy_solution.t, scipy_solution.y, fig_name='SciPy')" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 24, "id": "86846611", "metadata": {}, "outputs": [ @@ -132,7 +166,7 @@ }, { "data": { - "image/png": "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U6NGjUq97Hk6Hn/8cXXppZeqo48+Wh133HHqF7/4hVqzZo0aMWKEaB3h8Vd/9Vfqox/9qDrssMPUYYcdpr7xjW+o7u5udfTRR4vGMR0nn3yyeuutt9TLL7+sbr/99r73Retojvnz56uVK1eqCRMm9B3jxo3Lis7pC1TU4/nnn1d33323671XXnlFfetb30q9bEU4Kjk869atU9dee23fv5uamtSWLVvUlVdemXp583yMGzdOKaXU6aefLlrHfGzatEn99V//tWgcwzFy5Ej12muvqQ9/+MPqmWeecTk8onU0x/z589Xvf//7qp+nqbNMacXEkCFDOOmkk1i4cKHr/YULF3LaaaelVKpiM23aNCZOnOjSvKenhyVLlojmIRk9ejQAmzdvBkTrOBg0aBAXXnghI0eO5LnnnhONY+Cuu+7il7/8JYsWLXK9L1pHy2GHHUZbWxtvvfUWDz74INOmTQPS11keHhoT48aNo7GxkY6ODtf7HR0dtLa2plSqYmPrWknzgw8+OI0iFYbbbruNZ599ltWrVwOidZRMnz6d5557jmHDhrFjxw7mzp3LH//4Rz7wgQ8AonFUXHjhhZx44onMmDFjwGdSn6PjhRde4HOf+xyvv/46EyZM4Ctf+QpLly7lmGOOSV1ncXhiRinl+ndDQ8OA94RoEc2j5Tvf+Q7HHXdcxYR70To8r732GieccAJjxozhk5/8JA888ACzZs3q+1w0Ds+UKVP413/9V84666yajzYQrcPzxBNP9L1etWoVzz33HG+++SaXXnopzz//PJCezjKlFRMbN26kt7d3QDRn/PjxA7xbIRrWr18PIJpHyB133MG5557Lhz70Idra2vreF62jY8+ePbz55pssX76cG264gRUrVvD3f//3onGEnHTSSUyYMIHly5ezZ88e9uzZw+zZs5k3bx579uzp01O0jp6uri5WrlzJYYcdlnqdFocnJvbs2cPy5cuZM2eO6/05c+awdOnSlEpVbN5++23a29tdmg8ZMoRZs2aJ5gG48847Of/88znjjDNYs2aN6zPROj4aGhoYOnSoaBwhixYtYvr06Zxwwgl9x+9+9zt+8IMfcMIJJ/DWW2+J1jHR1NTEUUcdRXt7eybqdOpZ3UU97GXpl19+uTryyCPVbbfdprZv364OOuig1MuW12PkyJHq+OOPV8cff7xSSqkvfvGL6vjjj+9b6n/ttdeqLVu2qE984hPqmGOOUT/4wQ9kaWmA46677lJbtmxRH/zgB13LS4cNG9Z3jWgd/vjmN7+pZs6cqQ4++GA1ffp09Y1vfEP19vaqM888UzSO+ei/Sku0jub4l3/5F/XBD35QTZ06VZ1yyinq5z//udq2bVtfv5eyzukLVOTjqquuUm+//bbavXu3WrZsmWtZrxz+j1mzZqlK3HfffX3XzJ8/X61bt07t2rVLLV68WB1zzDGplztvRzUuvfRS13Widbjj//7f/9tnHzo6OtSTTz7Z5+yIxvEe/R0e0Tqaw95Xp7u7W7333nvqpz/9qTrqqKMyoXOD9UIQBEEQBKGwSA6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwiMOjyAIgiAIhUccHkEQCs/tt9/OI488knYxBEFIEXF4BEEoPDNmzODFF19MuxiCIKSIPEtLEITC0tjYyM6dO2lqaup774UXXuDUU09NsVSCIKRBY9oFEARBiIu9e/cyc+ZMXnzxRY4//ng6OjrYvXt32sUSBCEFxOERBKGwKKWYNGkSGzdu5A9/+EPaxREEIUUkh0cQhELz/ve/nxUrVqRdDEEQUkYcHkEQCs0JJ5wgDo8gCOLwCIJQbI499liZzhIEQRweQRCKzaBBgzjuuOOYOHEiLS0taRdHEISUEIdHEIRC85WvfIULL7yQdevW8dWvfjXt4giCkBKyD48gCIIgCIVHIjyCIAiCIBQecXgEQRAEQSg84vAIgiAIglB4xOERBEEQBKHwiMMjCIIgCELhEYdHEARBEITCIw6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeP4/cZ4Fv1Dm5tcAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAGwCAYAAABb3Do8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHc0lEQVR4nO2deXxVxfn/3wkJyhIWZQkgEFEBQRFFQBDBDUvpV0Vs8duqtdRWvlh/XbSi1FpabcEuLrUubbWiUBXbqi1WVFzADRCDggvgAkQ0QJA1YcsC8/tjZnKy3Nz1rDfP+/Wa15zcO2fOc0/uPedznnnmmRxAIQiCIAiCIDRJbtAGCIIgCIIghB0RTIIgCIIgCAkQwSQIgiAIgpAAEUyCIAiCIAgJEMEkCIIgCIKQABFMgiAIgiAICRDBJAiCIAiCkIC8oA3IJrp3705FRUXQZgiCIAiCkAIFBQVs2rQpbhsRTC7RvXt3SktLgzZDEARBEIQ06NGjR1zRJILJJaxnqUePHuJlEgRBEISIUFBQQGlpacJ7twgml6moqBDBJAiCIAhZhgR9C4IgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRAYpgEQRAEoRnQunVrOnXqRE5OTtCm+IZSim3btrFv376M+xLBJAiCIAhZTE5ODpMnT+bMM88M2pTAWLx4MbNnz0YplXYfIpgEQRAEIYuZPHkyY8aM4YknnmDt2rXU1NQEbZJv5OXl0b9/fyZNmgTAQw89lH5fbhklCIIgCEK4aNOmDWeeeSZPPPEEzz77bNDmBMK6desAuOSSS5g3b17aw3MS9C0IgiAIWcqRRx4JwNq1awO2JFjs5+/UqVPafYhgEgRBEIQsxQZ4N6dhuFjYz59JwLsIJkEQBEEQhASIYBIEQRAEQUiACCZBEARBEIQEiGASBEHISlogE6EFwT1EMAmCIGQdLYCXgR3A1UDzyewsCF4hgkkQBCHr+AEwBigA7kWLp96BWiSEh9YBlVT5/PPPmTp1ar3XRowYwd69e+nVq1caPWaGCCZBEISsohtwq9l+AtgLnIUWTXLJb+60Rn8jgiipiqZly5YxdOjQeq/ddddd3HXXXWzcuDHF3jJHfj2CIAhZxe1AO2AZ8E1gELATOAYYFaBdgpAaDQXT5ZdfTq9evZg1axYAX/va11i7di0ff/wxV155pef2SESgIAhC1nAWWiQdBKYCClgP/BuYDHwDeC0o44QQsA9oE+CxU2HZsmX89re/pU2bNhw6dIiZM2fy85//nD179tCiRQvuuOMOzjrrLMrLy3nnnXd46qmn2Llzpye2gwgmQRCELOL7pv4rsLLO6/9EC6aLgR8Bh/w1SwgV6a2k5j/FxcUcPHiQU045hXPPPZft27fXLp47bNgwPvzwQzZt2gTAggUL+MpXvsK8efM8s0cEkyAIQlaQA5xjth9v8N5LwC50fNNI4A3/zBKENKmsrGTVqlVMnDiRq666ivPPPx+lFADdu3entLS0tu0XX3xBjx49PLVHYpgEQRCyghOALujw2mUN3qsG/mO2v+GnUYKQEcuWLeOHP/whL730Eq+88krt67HWhLNiyitEMAmCIGQF1rv0GlogNeSfpr4YycskRIWVK1dSU1PD9ddfX+/10tLSeh6lo446is2bN3tqiwgmQRCErOBcU7/cxPsvAruBHsAIXywShEy59NJLue+++/j444/rvb58+XJOOOEEunfvTtu2bRk/fjwvvPCCp7ZIDJMgCELkyUMnqgQdrxSLKmA+cDl6WG6JD3YJQurk5OTQuXNnrrzySvr168dFF13UqM3Bgwe57rrrWLRoEbm5ufzud79jx44dntoVSQ/T1KlTWb9+Pfv376e4uJhRo+LnFhk9ejTFxcXs37+fdevWMWXKlEZt2rdvzz333MOmTZvYv38/q1ev5qtf/apXH0EQBMFFhgNtgS+B9+K0+5epx3tukSCky+jRo9m8eTOXXXYZEydOpLy8PGa7Z555hn79+nHcccfxwAMPeG5X5DxMkyZN4q677uLqq6/mzTffZMqUKTz33HMMGDCAzz//vFH7oqIiFixYwAMPPMBll13G6aefzn333ceXX37JU089BUB+fj4vvvgiW7du5etf/zpffPEFPXv2pKKiwu+PJwiCkAY2fukVdO6lpnjT1H3RAmuPl0YJQlq8+uqrtGjRImgzYqKiVJYtW6buu+++eq+tXr1azZw5M2b72267Ta1evbrea/fff79asmRJ7d9TpkxRn376qcrLy0vajpYtW6qCgoLa0r17d6WUUgUFBYGfIylSpDS38poCpeD7SbTdaNqeHgK7pXhdevfurebMmaN69+4duC1hPQ8FBQVJ3b8jNSSXn5/PkCFDWLhwYb3XFy5cyMiRI2PuM2LE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q5kzZwZuW7aWTp06KaWUOuOMMwK3JRtLmzZt1EcffaTOOecctWjRIhFMHpRZs2ap1157LXA7sr0888wz6sEHH6z32r/+9S81Z86cwG3LlhJLMG3atElNmzat9u+WLVuqnTt3qquuuspze2RILqTk5+czZMgQFi5cWO/1hQsXMnLkyICsyn7at28PwI4dOwK2JDu59957efbZZ3n55ZeDNiVrueCCCyguLuYf//gHZWVlvPPOO3zve98L2qys44033uCcc87huOOOA2DQoEGMGjWKBQsWBGxZ9nL00UfTrVu3evfFqqoqXn31VV/ui7L4bkjp1KkTeXl5lJWV1Xu9rKyMwsLCgKzKfu644w5ef/11Pvzww6BNyTouueQSTjnlFIYOHRq0KVlNnz59mDp1KnfccQczZ85k2LBh3H333VRWVjJ37tygzcsafvvb39K+fXvWrl3LwYMHadGiBTfddBPz5s0L2rSsxd77Yt0Xe/fu7fnxRTCFHKVUvb9zcnIavSa4wz333FP7lCi4y1FHHcUf//hHzjvvPFlCwmNyc3MpLi7mpptuAmDlypUMHDiQqVOnimBykUsuuYTLLruMb33rW3z44YcMHjyYu+66i02bNjFnzpygzctqgrovimAKKdu2baOmpqaRN6lLly6N1LWQOXfffTcXXHABo0ePprS0NGhzso4hQ4bQtWtXVqxYUftaXl4eo0eP5pprruGwww7j0KFDAVqYPWzevJnVq1fXe23NmjVcfPHFAVmUnfz+97/ntttu44knngDggw8+oHfv3kyfPl0Ek0ds2bIF0J4muw3+3RclhimkVFdXs2LFCsaOHVvv9bFjx7JkyZKArMpO/vSnPzFx4kTOPvtsSkpKgjYnK3n55Zc54YQTGDx4cG15++23efTRRxk8eLCIJRd588036devX73X+vbty2effRaQRdlJ69atG31vDx48SG6u3Fa9YsOGDWzevLnefTE/P58xY8b4dl8MPBJeSuxi0wpMnjxZ9e/fX91xxx2qoqJC9erVK3DbsqXce++9aufOnWr06NGqa9euteXwww8P3LZsLzJLzpty6qmnqqqqKjV9+nR1zDHHqG9+85tqz5496lvf+lbgtmVTmT17tvr8889r0wpMmDBBbd26Vd12222B2xbl0qZNG3XSSSepk046SSml1I9//GN10kkn1abTmTZtmtq5c6eaMGGCGjhwoHr00UclrYAUXaZOnao2bNigDhw4oIqLi2W6u8ulKa644orAbcv2IoLJu/K1r31Nvffee2r//v1q9erV6nvf+17gNmVbadu2rbrzzjtVSUmJ2rdvn/r000/VrbfeqvLz8wO3LcplzJgxMa/Js2fPrm0zY8YMtWnTJrV//361ePFiNXDgQF9syzEbgiAIgiAIQhPIYKsgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgJODOO+/k6aefDtoMQRACRASTIAhCAoYOHcry5cuDNkMQhACRteQEQRCaIC8vj71799KyZcva19566y1OO+20AK0SBCEI8oI2QBAEIawcPHiQUaNGsXz5ck466STKyso4cOBA0GYJghAAIpgEQRCaQClF9+7d2bZtG++9917Q5giCECASwyQIghCHk08+mVWrVgVthiAIASOCSRAEIQ6DBw8WwSQIgggmQRCEeJx44okyHCcIgggmQRCEeOTm5jJo0CC6detGu3btgjZHEISAEMEkCIIQh5///OdccsklbNq0iV/84hdBmyMIQkBIHiZBEARBEIQEiIdJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEBIpgEQRAEQRASIIJJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEB/x+168bdU72dAAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -145,14 +179,14 @@ "# CyRK - numba implementation\n", "from CyRK import nbrk_ode\n", "time_domain_nb, y_results_nb, success_nb, message_nb = \\\n", - " nbrk_ode(diffeq_scipy, time_span, initial_conds, rk_method=1, rtol=rtol, atol=atol)\n", + " nbrk_ode(diffeq_scipy, time_span, initial_conds, rk_method=1, args=args, rtol=rtol, atol=atol)\n", "print('CyRK (numba) Solution')\n", "diff_plot(time_domain_nb, y_results_nb, fig_name='CyRK_numba')" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 25, "id": "1305b19c", "metadata": {}, "outputs": [ @@ -165,7 +199,7 @@ }, { "data": { - "image/png": "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6sILL1SHHXaYOvLII9Xvfvc7tWrVKjVixAiRdYTHX/zFX6iPf/zjavr06Wr69OnqW9/6lurt7VWHHXaYyDim49hjj1Vvvvmmeu6559Qtt9wy8L7IOvxx7bXXqhdeeEFNnDhx4Bg/fnyWZJy+kIp6PPXUU+r22293vffSSy+pb3/726m3rQhHtYBnzZo16sorrxz4d0tLi9q4caO69NJLU29vno/x48crpZQ68cQTRdYxH+vXr1d/8zd/IzKO4Rg5cqR69dVX1Z//+Z+rxx9/3BXwiKzDH9dee6364x//WPPvactYprRiYsiQIRxzzDEsXLjQ9f7ChQs54YQTUmpVsZk2bRqTJk1yybyvr48lS5aIzEMyZswYADZs2ACIrOOgubmZc845h5EjR/Lkk0+KjGPgtttu4/e//z2LFi1yvS+yjo7p06fT0dHBm2++yc9//nOmTZsGZEPG8vDQmBg/fjyDBw+mq6vL9X5XVxft7e0ptarY2HKtJvP9998/jSYVhptvvpknnniCF198ERBZR8mMGTN48sknGTZsGFu2bGHevHm8/PLLfPjDHwZExlFxzjnn8KEPfYiZM2fu8TfR52h4+umnueCCC3jttdeYOHEiX/3qV1m6dCmHH354JmQsAU/MKKVc/25qatrjPSFaRObR8oMf/IAjjzyyasG9yDo8r776KkcffTRtbW385V/+JXfffTezZ88e+LvIODz77LMP//zP/8ypp55a99EGIutwPPzwwwOvV65cyZNPPskbb7zBhRdeyFNPPQWkK2OZ0oqJdevW0d/fv0c2Z8KECXtEuEI0rF27FkBkHiG33norn/zkJ/noRz9KR0fHwPsi6+jYuXMnb7zxBsuXL+eaa65hxYoVfPGLXxQZR8gxxxzDxIkTWb58OTt37mTnzp3MmTOH+fPns3PnzgF5iqyjZdu2bbzwwgtMnz49E/osAU9M7Ny5k+XLlzN37lzX+3PnzmXp0qUptarYvPXWW3R2drpkPmTIEGbPni0yD8D3v/99zjrrLE4++WRWrVrl+pvIOj6ampoYOnSoyDhCFi1axIwZMzj66KMHjj/84Q/89Kc/5eijj+bNN98UWcdAS0sLhx56KJ2dnZnR59Qru4t62MvSL774YnXIIYeom2++WW3evFntt99+qbctr8fIkSPVUUcdpY466iillFJf+tKX1FFHHTWw1P/KK69UGzduVJ/61KfU4Ycfrn7605/K0tIAx2233aY2btyoTjrpJNcS02HDhg1cI7IOf1x//fVq1qxZav/991czZsxQ3/rWt1R/f7865ZRTRMYxH5WrtETW4Y/vfve76qSTTlJTp05Vxx13nHrggQfUpk2bBvq8DMg4fSEV+bjsssvUW2+9pXbs2KGWLVvmWtYrh/9j9uzZqhp33nnnwDXXXnutWrNmjdq+fbtavHixOvzww1Nvd96OWlx44YWu60TW4Y5//dd/HfAPXV1d6pFHHhkIdkTG8R6VAY/IOvxh76vT29ur3n33XfXrX/9aHXrooZmRcZP1QhAEQRAEobBIDY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHwSMAjCIIgCELhkYBHEARBEITCIwGPIAiCIAiFRwIeQRAKzy233MJ9992XdjMEQUgRCXgEQSg8M2fO5Jlnnkm7GYIgpIg8S0sQhMIyePBgtm7dSktLy8B7Tz/9NMcff3yKrRIEIQ0Gp90AQRCEuNi1axezZs3imWee4aijjqKrq4sdO3ak3SxBEFJAAh5BEAqLUorJkyezbt06nn/++bSbIwhCikgNjyAIheaDH/wgK1asSLsZgiCkjAQ8giAUmqOPPloCHkEQJOARBKHYHHHEETKdJQiCBDyCIBSb5uZmjjzySCZNmsTo0aPTbo4gCCkhAY8gCIXmq1/9Kueccw5r1qzha1/7WtrNEQQhJWQfHkEQBEEQCo9keARBEARBKDwS8AiCIAiCUHgk4BEEQRAEofBIwCMIgiAIQuGRgEcQBEEQhMIjAY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHw/P9y2vvEykvE7wAAAABJRU5ErkJggg==", + "image/png": "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aniMKCGCyTM6duzInDlz2L59O9u3b2fOnDl06NAh6X7Tp0+nrKyMPXv2sHDhQvr16xe37fz581FKceGFF7ppuuA7H5q6rwt9FZv6Axf6CoL9OCuDez0sJ4JJEJpSaupD0AuDu0WRqbcCO13s1y9EMHnGY489xoABAxg9ejSjR49mwIABzJ07N+E+U6dO5frrr+eaa65h0KBBbNy4kRdffJF27Zquq3XdddehlPLKfMFX3BJMPdEXuDrg4yz7ChK/4phsLIIIJkFw2IP29II7YQIW21cUA74haoIJ9Ny+0Jfi4mKllFKDBw+uf23IkCFKKaX69OkTd7/y8nI1derU+r9btWqltm3bpq666qpG7U488UT12Wefqa5duyqllLrwwgvTsq+wsFAppVRhYWHg50oKCjopUKa0zqKfc00fq0PwmbIp/zSf42oPj9HepXMuRUouliUKlIJxLvZ5jenzHyH4fJmUNsZ+pfT1Ixg7Ur1/R8bDNGzYMLZv386yZcvqX3vzzTfZvn07w4cPj7nPkUceSffu3VmwYEH9azU1Nbz66quN9mndujWPP/4411xzDRUVFbG6akKrVq0oLCxsVIQwsRntpobs4pj6m3pVduYEjh8eJjsctwWo8vA4ghBFbAykeJgc9uCkgAn/TLnICKZu3bqxadOmJq9v2rSJbt26xd0HaCKCKioqGu0za9YsFi9ezLx581K2Z9q0aezcubO+lJVJ3pnw4cawnAim1LF9y/+CIDTFiho3BVORqUtd7NNvojMsF7hgmj59OkqphGXgwIEAMeOL8vLyksYdHfh+w33OP/98zjrrLK677rq07J45cybt27evLz17RiO1e/PCDcFkJwisztKWoPHTwyTxS4LQFC8EU9Q9TBAlwRT4ind33303TzzxRMI2paWlnHjiiXTt2nRKdOfOneMOo23cqGcGdevWrX4boEuXLvX7nHXWWRx99NFs37690b7//Oc/ef311/nSl74Us++amhpqamoS2i0EjZuCSTxMyRHBJAjxEQ9TbKxgKgrSiJQJQeBX8mKDvgcNGlT/2uDBg1MK+p4yZUr93wUFBY2Cvrt27ar69+/fqCil1A9+8ANVVFTketCYFD/LWAVKwbIM9z/c7F+joCAEnyebcoz5LJUeHuN+c4xbQvB5pUgJWzlSgVKwx6X+DjH9KaWDp4P+fJmW68xn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", "text/plain": [ "
" ] @@ -177,7 +211,7 @@ "source": [ "# CyRK - Cython cyrk_ode\n", "from CyRK import cyrk_ode\n", - "time_domain, y_results, success, message = cyrk_ode(diffeq, time_span, initial_conds,\n", + "time_domain, y_results, success, message = cyrk_ode(diffeq, time_span, initial_conds, args=args, \n", " rk_method=1, rtol=rtol, atol=atol)\n", "print('CyRK (Cython - cyrk_ode) Solution')\n", "diff_plot(time_domain, y_results, fig_name='CyRK_cyrk_ode')" @@ -185,7 +219,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 26, "id": "7322927e", "metadata": {}, "outputs": [ @@ -198,7 +232,7 @@ }, { "data": { - "image/png": "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6sILL1SHHXaYOvLII9Xvfvc7tWrVKjVixAiRdYTHX/zFX6iPf/zjavr06Wr69OnqW9/6lurt7VWHHXaYyDim49hjj1Vvvvmmeu6559Qtt9wy8L7IOvxx7bXXqhdeeEFNnDhx4Bg/fnyWZJy+kIp6PPXUU+r22293vffSSy+pb3/726m3rQhHtYBnzZo16sorrxz4d0tLi9q4caO69NJLU29vno/x48crpZQ68cQTRdYxH+vXr1d/8zd/IzKO4Rg5cqR69dVX1Z//+Z+rxx9/3BXwiKzDH9dee6364x//WPPvactYprRiYsiQIRxzzDEsXLjQ9f7ChQs54YQTUmpVsZk2bRqTJk1yybyvr48lS5aIzEMyZswYADZs2ACIrOOgubmZc845h5EjR/Lkk0+KjGPgtttu4/e//z2LFi1yvS+yjo7p06fT0dHBm2++yc9//nOmTZsGZEPG8vDQmBg/fjyDBw+mq6vL9X5XVxft7e0ptarY2HKtJvP9998/jSYVhptvvpknnniCF198ERBZR8mMGTN48sknGTZsGFu2bGHevHm8/PLLfPjDHwZExlFxzjnn8KEPfYiZM2fu8TfR52h4+umnueCCC3jttdeYOHEiX/3qV1m6dCmHH354JmQsAU/MKKVc/25qatrjPSFaRObR8oMf/IAjjzyyasG9yDo8r776KkcffTRtbW385V/+JXfffTezZ88e+LvIODz77LMP//zP/8ypp55a99EGIutwPPzwwwOvV65cyZNPPskbb7zBhRdeyFNPPQWkK2OZ0oqJdevW0d/fv0c2Z8KECXtEuEI0rF27FkBkHiG33norn/zkJ/noRz9KR0fHwPsi6+jYuXMnb7zxBsuXL+eaa65hxYoVfPGLXxQZR8gxxxzDxIkTWb58OTt37mTnzp3MmTOH+fPns3PnzgF5iqyjZdu2bbzwwgtMnz49E/osAU9M7Ny5k+XLlzN37lzX+3PnzmXp0qUptarYvPXWW3R2drpkPmTIEGbPni0yD8D3v/99zjrrLE4++WRWrVrl+pvIOj6ampoYOnSoyDhCFi1axIwZMzj66KMHjj/84Q/89Kc/5eijj+bNN98UWcdAS0sLhx56KJ2dnZnR59Qru4t62MvSL774YnXIIYeom2++WW3evFntt99+qbctr8fIkSPVUUcdpY466iillFJf+tKX1FFHHTWw1P/KK69UGzduVJ/61KfU4Ycfrn7605/K0tIAx2233aY2btyoTjrpJNcS02HDhg1cI7IOf1x//fVq1qxZav/991czZsxQ3/rWt1R/f7865ZRTRMYxH5WrtETW4Y/vfve76qSTTlJTp05Vxx13nHrggQfUpk2bBvq8DMg4fSEV+bjsssvUW2+9pXbs2KGWLVvmWtYrh/9j9uzZqhp33nnnwDXXXnutWrNmjdq+fbtavHixOvzww1Nvd96OWlx44YWu60TW4Y5//dd/HfAPXV1d6pFHHhkIdkTG8R6VAY/IOvxh76vT29ur3n33XfXrX/9aHXrooZmRcZP1QhAEQRAEobBIDY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHwSMAjCIIgCELhkYBHEARBEITCIwGPIAiCIAiFRwIeQRAKzy233MJ9992XdjMEQUgRCXgEQSg8M2fO5Jlnnkm7GYIgpIg8S0sQhMIyePBgtm7dSktLy8B7Tz/9NMcff3yKrRIEIQ0Gp90AQRCEuNi1axezZs3imWee4aijjqKrq4sdO3ak3SxBEFJAAh5BEAqLUorJkyezbt06nn/++bSbIwhCikgNjyAIheaDH/wgK1asSLsZgiCkjAQ8giAUmqOPPloCHkEQJOARBKHYHHHEETKdJQiCBDyCIBSb5uZmjjzySCZNmsTo0aPTbo4gCCkhAY8gCIXmq1/9Kueccw5r1qzha1/7WtrNEQQhJWQfHkEQBEEQCo9keARBEARBKDwS8AiCIAiCUHgk4BEEQRAEofBIwCMIgiAIQuGRgEcQBEEQhMIjAY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHw/P9y2vvEykvE7wAAAABJRU5ErkJggg==", + "image/png": "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aniMKCGCyTM6duzInDlz2L59O9u3b2fOnDl06NAh6X7Tp0+nrKyMPXv2sHDhQvr16xe37fz581FKceGFF7ppuuA7H5q6rwt9FZv6Axf6CoL9OCuDez0sJ4JJEJpSaupD0AuDu0WRqbcCO13s1y9EMHnGY489xoABAxg9ejSjR49mwIABzJ07N+E+U6dO5frrr+eaa65h0KBBbNy4kRdffJF27Zquq3XdddehlPLKfMFX3BJMPdEXuDrg4yz7ChK/4phsLIIIJkFw2IP29II7YQIW21cUA74haoIJ9Ny+0Jfi4mKllFKDBw+uf23IkCFKKaX69OkTd7/y8nI1derU+r9btWqltm3bpq666qpG7U488UT12Wefqa5duyqllLrwwgvTsq+wsFAppVRhYWHg50oKCjopUKa0zqKfc00fq0PwmbIp/zSf42oPj9HepXMuRUouliUKlIJxLvZ5jenzHyH4fJmUNsZ+pfT1Ixg7Ur1/R8bDNGzYMLZv386yZcvqX3vzzTfZvn07w4cPj7nPkUceSffu3VmwYEH9azU1Nbz66quN9mndujWPP/4411xzDRUVFbG6akKrVq0oLCxsVIQwsRntpobs4pj6m3pVduYEjh8eJjsctwWo8vA4ghBFbAykeJgc9uCkgAn/TLnICKZu3bqxadOmJq9v2rSJbt26xd0HaCKCKioqGu0za9YsFi9ezLx581K2Z9q0aezcubO+lJVJ3pnw4cawnAim1LF9y/+CIDTFiho3BVORqUtd7NNvojMsF7hgmj59OkqphGXgwIEAMeOL8vLyksYdHfh+w33OP/98zjrrLK677rq07J45cybt27evLz17RiO1e/PCDcFkJwisztKWoPHTwyTxS4LQFC8EU9Q9TBAlwRT4ind33303TzzxRMI2paWlnHjiiXTt2nRKdOfOneMOo23cqGcGdevWrX4boEuXLvX7nHXWWRx99NFs37690b7//Oc/ef311/nSl74Us++amhpqamoS2i0EjZuCSTxMyRHBJAjxEQ9TbKxgKgrSiJQJQeBX8mKDvgcNGlT/2uDBg1MK+p4yZUr93wUFBY2Cvrt27ar69+/fqCil1A9+8ANVVFTketCYFD/LWAVKwbIM9z/c7F+joCAEnyebcoz5LJUeHuN+c4xbQvB5pUgJWzlSgVKwx6X+DjH9KaWDp4P+fJmW68xn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", "text/plain": [ "
" ] @@ -209,7 +243,7 @@ ], "source": [ "# CyRK - Cython CySolver\n", - "CySolverTesterInst = CySolverTester(time_span, initial_conds, rk_method=1, rtol=rtol, atol=atol, auto_solve=True)\n", + "CySolverTesterInst = CySolverTester(time_span, initial_conds, rk_method=1, args=args, rtol=rtol, atol=atol, auto_solve=True)\n", "print('CyRK (Cython - CySolver) Solution')\n", "diff_plot(time_domain, y_results, fig_name='CyRK_CySolver')" ] @@ -224,7 +258,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 27, "id": "5c43792b", "metadata": { "scrolled": false @@ -355,10 +389,10 @@ " \n", " print(f'Working on end_time = {end_time:0.1e}.')\n", " print(f'\\tNumba Pre-Compile')\n", - " _ = nbrk_ode(diffeq_scipy, time_s, initial_conds, rk_method=1, rtol=rtol, atol=atol)\n", + " _ = nbrk_ode(diffeq_scipy, time_s, initial_conds, rk_method=1, args=args, rtol=rtol, atol=atol)\n", " \n", " print('\\tWorking on SciPy')\n", - " sci_timer = timeit.Timer(lambda: solve_ivp(diffeq_scipy, time_s, initial_conds, method='RK45', rtol=rtol, atol=atol))\n", + " sci_timer = timeit.Timer(lambda: solve_ivp(diffeq_scipy, time_s, initial_conds, method='RK45', args=args, rtol=rtol, atol=atol))\n", " scipy_time_list = list()\n", " for i in range(REPEATS):\n", " N, T = sci_timer.autorange()\n", @@ -369,7 +403,7 @@ " print('\\tFinished SciPy.')\n", " \n", " print('\\tWorking on numba')\n", - " nb_timer = timeit.Timer(lambda: nbrk_ode(diffeq_scipy, time_s, initial_conds, rk_method=1, rtol=rtol, atol=atol))\n", + " nb_timer = timeit.Timer(lambda: nbrk_ode(diffeq_scipy, time_s, initial_conds, rk_method=1, args=args, rtol=rtol, atol=atol))\n", " nb_times_list = list()\n", " for i in range(REPEATS):\n", " N, T = nb_timer.autorange()\n", @@ -380,7 +414,7 @@ " print('\\tFinished numba.')\n", " \n", " print('\\tWorking on cython - cyrk_ode')\n", - " cy_timer = timeit.Timer(lambda: cyrk_ode(diffeq, time_s, initial_conds, rk_method=1, rtol=rtol, atol=atol))\n", + " cy_timer = timeit.Timer(lambda: cyrk_ode(diffeq, time_s, initial_conds, rk_method=1, args=args, rtol=rtol, atol=atol))\n", " cy_times_list = list()\n", " for i in range(REPEATS):\n", " N, T = cy_timer.autorange()\n", @@ -391,7 +425,7 @@ " print('\\tFinished cython - cyrk_ode.')\n", " \n", " print('\\tWorking on cython - CySolver')\n", - " cysolver_timer = timeit.Timer(lambda: CySolverTester(time_s, initial_conds, rk_method=1, rtol=rtol, atol=atol, auto_solve=True))\n", + " cysolver_timer = timeit.Timer(lambda: CySolverTester(time_s, initial_conds, rk_method=1, args=args, rtol=rtol, atol=atol, auto_solve=True))\n", " cysolver_times_list = list()\n", " for i in range(REPEATS):\n", " N, T = cysolver_timer.autorange()\n", @@ -406,13 +440,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 28, "id": "b8ad4501", "metadata": {}, "outputs": [ { "data": { - "image/png": "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9vY1SuwAYNGiRYrFfc3MzPDJJ5/g/v37AKCVJzpYWlqiY8eOiveOjo7o3r07MjIykJiYCD8/P2zbtg1hYWE4f/48pk6dCgcHB/zwww+1Om7ZS7FERMYtECVLmqwE8PhEiiSUJHVc6qTeiwZwvWT2a/cB3RFxJsLgL7/WRWondt9//z1WrlyJZcuW4erVq+UmT1y9erXSz4aGhuKpp55SvD937hw6dOhQro4m9enTB6dOnVK8X7FiBYCSma5eXl7YvXs3mjdvjs8//xy2traIjIzEiBEjkJCQUKvj8lIsEVFZgQAOQCodhO7dhyMiIghy+SlwpM6ACEASL4FdF7uSiRJM6nRO7cRu165dAKD0bNjSZ71WN3ni+eefr0EXayckJAQSSdXr5qxduxZr167VUY+IiIyZHBJJCOzsLHDlSgiY1BFpltqJnaOjozb6YXB4KZaIiIh0Te3ErraXKI0FL8USERGRrqmU2L344os4cuQIioqK8OKLL1ZZ99ChQxrpGBERERGpR6XEbv/+/WjdujXS0tKUlgUpq7p77IwJL8USERGRrqmUdchkMjRs2FDxurKNSd1/AgIC4OzsDBcXF313hYiIiIyEysNJsbGxaNGihUYOOmzYMDz33HOK9z4+PggPD8eOHTvQpEkTjRyDiIiIyNionNhVt2SIOpYtW4bGjUseCv3000/ju+++w+HDh9GhQwf4+flp7DhERERExkQv104dHR1x7do1AMBLL72E3377DZ988gl69uyJw4cP66NLRERERPWeWond5MmT8eDBgyrrfP/999W2U1BQoHh82NChQ7F161YAQEZGhmIkr77j5AkiIiLSNbUSu/feew/FxcWV7hdCqJTYnTlzBn5+fjh79ixcXFzwyiuvAACefPJJJCUlqdOlOovr2BEREZGuqZXY9enTB2lpabU+6PTp0xEQEIDx48fD29sbt2/fBgD873//Q1BQUK3bJyIiIjJGKid2QmjuSb6JiYkVLnQ8e/ZsjR2DiIhI36QSwK2zgGu7ZOR2Fjh1DZBr7uuUqByVE7vazoq1srJCdna24nVVSusRERHVVx59gFWeQNtmcgDhmNMfSLwL+G4FAsP03TsyVCondl988UW1Eyeqcu/ePdja2iItLQ2ZmZkVjgBKJBKDeXoFJ08QERkvjz7A3pnly+2alpSP92dyR9qhcga1aNGi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", + "image/png": "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RQghhKhOrH7GLiwsDI1GU+QYP368oc3ixYvx9PSkVq1adOrUifDw8EocsRm8gFGgahe6F+mO/HJMz6/MEhQUhFKKLl268NNPP3H27FlOnTrFggUL6NatGwBLly5l8+bNRp/T6XQkJiYafe2vX7/OxYsXDQtMfvzxRx566KFiz2tvb8/atWvp1asXPj4+t0zqZs+eTWxsLFlZWSQkJLBw4cJbxpSens7y5cuLbH1zM19fX5RSRiuYvb29UUrRrFkzIH/278qVKzz88MOcPn2a9PR01q5di6OjI2PHjiU6Oprk5GQ+++wzw/2XBZydnfn+++9JS0sjISGhyKba06ZN4/jx41y7do0LFy6waNEim1stK4QQ4tasPrGrLBa/FKsBBt70unAdN+rL+bJsvXr1GDhwIIsWLSIjI6NIfcHq3iVLljBw4ECjhSmDBg2idu3arFmzpti+PT09GThwIDk5RVd/1K5dm19++YU2bdowcOBATp8+XeIYR4wYwbRp03jhhRe45557GDZsGCdOnLhtbG+//TZt27ZlxIgRt217K46OjvznP//hiSeeYODAgfTq1Yv169czaNAgBg0axJgxY5gwYQIjR440+tyMGTM4fvw4HTp0YM6cOSxYsIB+/foZ6vV6Pf/5z3+477778PPzo0+fPnzyySdlGqsQQgjrYvWXYiuLxS/FNgNutfWd5kZ9MyCm/E579913o9Vqb5lYQf42MX/88Qdjxoxh7ty5AIwfP561a9eSnp5uaDd48GDS0tLQ6XSGfXqmTZtWpL8333yTtLQ0WrduTXZ2dpH6gnvtADw8PPj777/ZuXMnubm5xMXFcejQodvGlpiYyMKFC/nggw/YsGHDbduXxN7e3vD8YYB169YxZswY7rzzTtLT04mKimL37t307t3bKMndt28fH3/8MQBnz57lwQcfZNq0aezcuRPAaNYxJiaGN998k8WLFzNp0qRSj1UIIYR1kRm76qp2ObczUcEeY6ZsRbFkyRLDZdeGDRvy8MMPs2zZMqM2u3fvpl27dnTt2pXPPvuMkJAQPv/88yJ9bd++HScnJ2bNmnXb865duxYHBwfOnz/P119/zbBhw0zetfvjjz+mYcOGPPPMMya1L056errR00kuXrxITEyMUUJ78eJFGjVqZPS5AwcOFHl/8/2KvXr1Yvv27cTHx5OamsqqVatwcXHB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viileOihhzh06BDXr1+nZ8+eRc7dvHlzzp49S1BQkElPIHn00Uc5efIkWVlZREdHM3nyZKP6hg0bsmnTJjIyMjh//nyxif8dd9zBV199xcWLF7l69Sq7du3i/vvvN2qzadMmhg0bRq1atW47JiGEqI4ksaumtBpYOPbf10Z1WkBB4Jjyvyxbr149Bg4cyKJFi8jIyChSf/XqVQCWLFnCwIEDady4saFu0KBB1K5dmzVr1hTbt6enJwMHDiQnJ6dIXe3atfnll19o06YNAwcO5PTp0yWOccSIEUybNo0XXniBe+65h2HDhnHixIkS2z/11FPs3LmTo0ePFqnLzc0lIyODtWvXotPpGDJkiKGuQYMGDB48mOXLl/Pjjz8yb948Tp48SePGjWncuDE//vijoe3s2bNZs2YN999/P1u2bOH777+nXr16ADRp0oQtW7Zw6NAhvL29mThxIs8++yxvvPGG0Vj8/PxIT0+na9euvPLKK7z11lv069evxLh8fHw4c+YMaWlphjInJyfCwsJo0qQJQ4YMwdvbm08++QStVktsbCw7d+40SrwBxo8fz4oVK4zKPvnkE2bOnImXlxfHjx83qmvTpg379u1j7dq1+Pv7o5TxHx6FdejQgTVr1vDf//6Xtm3b8vbbbzNr1iyjxHjFihU0b96cPn36MHLkSPz9/WnUqJFRP7/88guNGzdm0KBBdOzYkd9//51du3YZvs4AERER2NnZyf6SQgirpuSw3OHs7KyUUsrZ2blIXbNmzdSqVatUs2bNzO7X1wulvr/94etVvvF07txZKaXUsGHDbtv25MmTasaMGYb369evV8uWLTO8X758ucrJyVFpaWkqIyNDFZg6dapRP9HR0SorK0tdunRJNWzYUNWpU+eW5502bZo6ffq0qlGjhkkxpaenq8DAwNu2W7Rokfrll18M7//zn/+oP//80/B+9uzZ6siRI0U+p5RS7777ruG9o6OjysvLUwMGDFCAev/991VUVJTRZyZOnKhSU1OVRqNRgAoPD1d79uwxavPbb7+pOXPmlDjeBQsWqJ07dxqVPf/88+rq1auqXr16xX7mscceU5cvX1b29vYKUPfff7/Ky8sz/Iz6+voqpZQaMmSI0ecKYu/WrZtKSkpSL730ksk/U999953atm2bUVlgYKA6efKkAtQ999yjlFKqS5cuhvqWLVsqpZQKCAhQgOrdu7dKSUkxjLvgOHv2rHr++eeNyi5fvqzGjh1b7FjK8m+ytIdOp1ODBw9WOp2uws5Z2YetxWxb8WqVVttHtW//idJq+yjQVoExVf/v8a1yicKHzNhVU651y7edqQouq91uFgbyZ+0KZn8aNmzIww8/zLJly4za7N69m3bt2tG1a1c+++wzQkJC+Pzzz4v0tX37dpycnJg1a9Ztz7t27VocHBw4f/48X3/9NcOGDbvlfWAajcakeL755hseeughmjRpAhQ/k1WSm2e1MjIySEtLM8w4eXl5ceDAAaP2+/btw9nZmaZNmxbbB0BiYmKRWaubOTg4kJWVZVTWrl07jhw5wpUrV4r9zIYNG8jNzWX48OEAPPPMM+zevZvY2FijdsVdBvfw8GDnzp28//77fPrppyWOqzAvL68i97z99ttv3HPPPWi1Wry8vMjJyTE65x9//GEUQ8eOHalduzaXL18mLS3NcHh6enLXXXcZ9Z2ZmYmjo6PJ4xNCmGo4EINev4sjR2ag1+8CYm6Ui4oiiV01lZhSvu1MdfbsWfR6vUkLJFatWkWLFi3o1q0bTz/9NDExMezdu9eoTXp6OufOnePEiRMEBARQs2bNYu8d27VrF0OGDGHChAl88skntzxvfHw8LVu2ZNKkSWRmZhIUFMSePXtKXN165swZk+I5evQox44dY+zYsbRv3562bduanNgVvryslEKrzf/nV1xiWVwCfas+ipOUlGR0GRLyk5rbjfPbb79l/Pjx2NnZMXr06CLJOOR/3wq7dOkSBw8e5IknnsDZ2fmW57nZreK/+fWtkm+tVktiYiLt2rUzOlq2bMncuXON2tavX59Lly6ZPD4hhCmGA+sAt0LlbjfKJbmrKJLYVVPhp/NXv+r1xdfr9XAhKb9debpy5Qrbtm1j0qRJxc561KlTx/A6OTmZDRs2MH78eMaPH8/y5ctv2/8777zDyy+/jKura5G6nTt3MnjwYJ566im++OKLW/aTlZXF5s2bCQgIoFevXnTv3p22bdsW23b16tX069ePdu3aFanT6XRGcRbMQj7zzDPs3LmT+Ph4Q112dnapVoieOnWqyD5z3bt3JzU1lYSEBLP7K3DkyBFatWplVHb8+HHatWtXJOG72ZIlS+jXrx/+/v7Y2dmxfv16k86XmZnJ4MGDycrKYtu2bdSuXdukz506dYoePXoYlXXp0oUzZ86g1+uJiorCzs6OTp3+XQ107733GsXw+++/07hxY3Jzczl37pzRcfnyZUO7Fi1a4ODgUOW2pRGietMCC296XbgOILCYOmEJ8lW2EEtvUKxX+VuaoMl/bVSnzy+f+m3RuvLg7++PTqfj4MGDPProo9x99920atWKKVOmFLmkuGTJEvz8/PDy8mLlypW37TssLIzIyMgSL7nu3r2bxx9/HD8/PxYtWlRsGz8/P5555hnatGmDp6cnY8aMISMjo8jlxAKBgYHs27ePXbt24e/vz/3334+npyePPfaY4ZJgge+//x43Nzeef/75IjNZMTExeHp64u3tTYMGDYqsoC1JUFAQ7u7ufP7557Rs2ZIhQ4bwzjvvMH/+fJMuEZdk9+7dODk50aZNG0PZDz/8wN9//82GDRvo3r07np6ePProo4bVzACnT5/m119/5eOPP+aHH34ocjn3VjIyMnj44YfJzc1l69atODk53fYzn376KX379uWNN97gnnvuYezYsTz//PPMmzcPyJ9R3bp1K9988w1dunShQ4cOLFmyxGjxzs6dOzlw4AAbNmzgoYceolmzZjzwwAO89957Rqt8e/bsyblz5zh//rzJMQkhbqcn4E7JKYUW8LjRTlSESr/p0JoPSy2eKDiGd0IlfKExWjARuzC/3JJxNW7cWH3++eeGhQ1xcXFqw4YNytfXt0jb6Oho9fPPPxcpX758uQoODi5S/uSTT6qsrCzVtGlTw+cLbpIHVJ06dVTPnj1VamqqWrx4cZHPDx06VB04cEClpKSotLQ0tX//ftWnT59bxmNvb69effVVdezYMZWRkaGSkpJUeHi4Gjt2bJGbYVeuXKmSkpKK3Khvb2+v1q5dq5KTk5VSSvn5+SnIXzwxdOhQo7ZXrlwx1APKx8dH/fbbbyorK0v99ddfas6cOUbnDQ8PVwsWLDDqIzg4WC1fvvyWca1evVp9+OGHRmUeHh5q7dq1KiUlRV27dk0dPHhQde7c2ajN+PHjlVJKderUyai8YPFE4QUshReOODk5qb1796qwsDDl6Oh425+nRx99VJ08eVJdv35dxcTEqNdff92o/s4771SbN29WmZmZKiYmRj399NNFfi5q166tFi5cqOLj49X169dVbGys+vbbbw0/R4AKCQlRr776aonjkMUTErPEW5rjCQXKhOOJ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", "text/plain": [ "
" ] @@ -444,22 +478,29 @@ "ax.errorbar(end_times, cy_times, yerr=cy_errors, c='orange', label=\"CyRK's Cython (cyrk_ode)\", fmt='o')\n", "ax.errorbar(end_times, cysolver_times, yerr=cysolver_errors, c='#ffa8a9', label=\"CyRK's Cython (CySolver)\", fmt='o')\n", "\n", - "ax.set(ylabel='Average Time [ms]\\n(Lower is Better)', xlabel='Integration Domain Size', xscale='log', yscale='log',\n", - " title=f'CyRK v{version} vs. SciPy')\n", + "if use_pendulum:\n", + " title_name = f'CyRK v{version}\\n(Pendulum DiffEq)'\n", + "else:\n", + " title_name = f'CyRK v{version}\\n(Predator-Prey DiffEq)'\n", + "\n", + "ax.set(ylabel='Average Time [ms]\\n(Lower is Better)', xlabel='Integration Domain Size', xscale='log', yscale='log')\n", "ax.set_xticks((1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5))\n", "ax.grid(alpha=0.3)\n", "# ax.set_xlim(ax.get_xlim()[::-1])\n", "\n", "ax.legend(loc='best')\n", - "ax.set(title=f'CyRK v{version}')\n", + "ax.set(title=title_name)\n", "fig.tight_layout()\n", - "fig.savefig(f'CyRK_SciPy_Compare_v{version_filesafe}.png')\n", + "if use_pendulum:\n", + " fig.savefig(f'CyRK_SciPy_Compare_pendulum_v{version_filesafe}.png')\n", + "else:\n", + " fig.savefig(f'CyRK_SciPy_Compare_predprey_v{version_filesafe}.png')\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 29, "id": "697a88bd", "metadata": { "scrolled": true @@ -469,15 +510,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "end_time-1.0e-03: Numba=7.243x; Cython(cryk_ode)=5.702x; Cython(CySolver)=3.392x; NbCy=1.270x; NbCyS=2.135x\n", - "end_time-1.0e-02: Numba=8.358x; Cython(cryk_ode)=5.794x; Cython(CySolver)=3.477x; NbCy=1.442x; NbCyS=2.403x\n", - "end_time-1.0e-01: Numba=14.333x; Cython(cryk_ode)=7.790x; Cython(CySolver)=5.606x; NbCy=1.840x; NbCyS=2.557x\n", - "end_time-1.0e+00: Numba=31.499x; Cython(cryk_ode)=17.577x; Cython(CySolver)=15.219x; NbCy=1.792x; NbCyS=2.070x\n", - "end_time-1.0e+01: Numba=87.411x; Cython(cryk_ode)=26.348x; Cython(CySolver)=109.390x; NbCy=3.318x; NbCyS=0.799x\n", - "end_time-1.0e+02: Numba=94.580x; Cython(cryk_ode)=26.605x; Cython(CySolver)=243.903x; NbCy=3.555x; NbCyS=0.388x\n", - "end_time-1.0e+03: Numba=106.131x; Cython(cryk_ode)=30.681x; Cython(CySolver)=373.961x; NbCy=3.459x; NbCyS=0.284x\n", - "end_time-1.0e+04: Numba=103.674x; Cython(cryk_ode)=28.543x; Cython(CySolver)=424.916x; NbCy=3.632x; NbCyS=0.244x\n", - "end_time-1.0e+05: Numba=99.546x; Cython(cryk_ode)=34.986x; Cython(CySolver)=411.983x; NbCy=2.845x; NbCyS=0.242x\n" + "end_time-1.0e-03: Numba=10.771x; Cython(cryk_ode)=6.249x; Cython(CySolver)=4.908x; NbCy=1.724x; NbCyS=2.195x\n", + "end_time-1.0e-02: Numba=10.663x; Cython(cryk_ode)=6.149x; Cython(CySolver)=4.777x; NbCy=1.734x; NbCyS=2.232x\n", + "end_time-1.0e-01: Numba=19.416x; Cython(cryk_ode)=9.867x; Cython(CySolver)=9.324x; NbCy=1.968x; NbCyS=2.082x\n", + "end_time-1.0e+00: Numba=56.385x; Cython(cryk_ode)=20.103x; Cython(CySolver)=41.238x; NbCy=2.805x; NbCyS=1.367x\n", + "end_time-1.0e+01: Numba=101.481x; Cython(cryk_ode)=25.821x; Cython(CySolver)=184.171x; NbCy=3.930x; NbCyS=0.551x\n", + "end_time-1.0e+02: Numba=109.941x; Cython(cryk_ode)=25.669x; Cython(CySolver)=302.513x; NbCy=4.283x; NbCyS=0.363x\n", + "end_time-1.0e+03: Numba=105.245x; Cython(cryk_ode)=25.829x; Cython(CySolver)=331.665x; NbCy=4.075x; NbCyS=0.317x\n", + "end_time-1.0e+04: Numba=93.565x; Cython(cryk_ode)=26.020x; Cython(CySolver)=344.069x; NbCy=3.596x; NbCyS=0.272x\n", + "end_time-1.0e+05: Numba=92.019x; Cython(cryk_ode)=27.482x; Cython(CySolver)=341.997x; NbCy=3.348x; NbCyS=0.269x\n" ] } ], diff --git a/Benchmarks/CyRK_CySolver.pdf b/Benchmarks/CyRK_CySolver.pdf index 06ae649a328fc665114302b46adbcb85bffb21dc..2289bc7833fc05f9648c99344d9e5cc8bf6e8cc8 100644 GIT binary patch delta 6007 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 literal 0 HcmV?d00001 diff --git a/Benchmarks/CyRK_cyrk_ode.pdf b/Benchmarks/CyRK_cyrk_ode.pdf index 5cd90bc7ff411c1fbbf4117378f45bbc779ba000..2289bc7833fc05f9648c99344d9e5cc8bf6e8cc8 100644 GIT binary patch delta 6007 zcmZWpbzBr&vjzk~kPan;rP(ER*FPW!3F7BYKfHwC6uM5m6Vhe5$P^bN=ikf zL+SLQ@Atd+zMu2g%$zyTGc)J;oiUdf^Xf*DTHhu*i9d3Xv-+j6~ zUS3{4nVroAd!Aj=G`Kfb2ao1jo$Lv|i{6?qtgEIBIsI~~C*G?XyJK)4~ z4%>Q>v0`cE)SK1IYWrcuZYHq#;=;ni(1l>b>|ma-?U(^C>-Z(rx$|k zdPDY(2CW)pA`%EEg7ve4Cy#9TfF;bXsM&YfbD~FZNBD zS!bWClQmf6A6mhrnGc zhRoi>$IEM5kx`r@)U$m*JTsywBQ`?LbPvVsoPJDS)}8kpa&LR4-u(FSV-9xVQi^J0 zHnDES@W-!z&Vo1V<4sBr&zqb&h%tJ6&m%1#^rt5oN0lwN&UN3`(ccKmio6LPH#2Q@ej{G zt5PZ~Ygu2j)1Qpe0}`=r$Ad`id^0>r(>mHT#tGv2VY{Q$P$?EMW4@aNC{G@wcIm4y zl4C^OzJNwF)V?ly@3s^BkPB?N)bKi83B=@V0a&{ovTyPx9-xd326Ag<@CFt8nT4ku z8uQG~GV1Y?bZ&0S@O1WbDB>cd=jN`R|HY+zNYEE;x9?TlgcuU3?4Ctb&W?Yac_pg6Jl04{r*5!Yee7AxNZCn;aSoWeO)M4r96Y zh)V(@PouKQ5R{bbnv&EFOCn7&r_RtH8iIUNl(Z`)H_F34iX7NMnp6|ZYkWD|(<4_? zd|PRkGs#jTZ;+l08W{0k2D@Z{_JKvGu%vpWPs|Iy2t6LCEaDDhAiQ^P`@rU+FF&v*%fm~V!5sC$aNmEhfr3rwl&t*+ zp_ZIA8No9-PV&eYKSua-qWE+Y$%zJ{*PUJazM>DXs_Zf0RIH!sUuSy`yU}CyKWI+4 z`A)jW&_80oF%mUJ!cS$-l)yD^vo66;^N2$BnS9aRP~w5Uj;esHd;%7pp2~jR=Gn(U znx4m-!8f1!&oE1Auv0sTFPQHIN9!k?%5H>PO7YfyNI{|xh|dkQY!h{o;!-(FEI__ys)9Fj(&+69q#H^M(OzxEW6HDjlzXd2n{ z%%l9t<^4CWxMF#pGYl3r@A?>LS5Df{2Y%HTJnXphVo26lKAp z9L|Y(?@zD!sgPX~i{EqpmEY0VsZGo>&F-XABC436dvGAfX%hLhvni8SqJYqJrBv6x zi~X3Saz=yzQx~Me*!4F3m#sD=>&r=p2nzAx{%)MPlCrf;H34UtNgn4ZD3JcBJZge* zj1f2I9>&IGYpe^+`*3}}!t4>iqu&r4-h4k);y5Mafkx$akZ72mP^(qaWNqfa*}n@c>6BfCM`gUDNRwo?ci zrzL8NpsQex;O(++vLNg#zB!M@TV6HXKfgJAZ_;HQoSY$b&p{(;=FLoLf{llkU~F14 zI+!)Fb{78@Cf~;@Bt{`K8>gpLz~>LB84nKTAo*P6bdD1TwFz!Ykj$g1)xI_2vq5Dv5xjD4xSu5698`k?r8Wa9 zYriX5vQ0oaui(RHgg+)PjYxPuZ{h<-dgyiJ7{tSZ(3_n~W9nEI@yyP zpy&p>Z{hd5DT`EswnkX4$ZGvtrNz^l1JoZKnn%=m_Y?K0&nWGy-xkl+ii9~-TlgZAMu1cG@JslP9ncltMi9BoPcE@ zRr`U6Ian{VaFMmM&3-1>QN8%?eDoA*9z|NU)_!rMJol8*opAo zF|kn2?MUBiqj>f5NC|IGwT0<=r=MDy7inkVR}QqnSAwu;`CANjUwrNalUUfw`{)xF zDXpsIz>U@XzPVkw^*LYmIYd?B9u zB?BQ7?}~-&DM*0LWS{i#obim3b~=vfn&sq$PiLEzR>P{e1OkEC;*D=8ye2Ru=2<8Y zo_AA7B_UZd(UaiN?{alTrR!VN;rw3}P70U{(jvEsy=V@xYVf*M6`6Vnweq_5?b&QP zo_-=GDpo!louSYkPq|=H8%M*;p0AChmTNpvG<{idb;=WBsyDM*HvB#KPnt8uA}gfT zV9PHrs2cF7d~ii%>w43lhV@k6Ha(Pzs92ySSDQaFPzoit5Fqa&y39Item}=vGwrxe zp@}|YkEl<;LJ&<~-`=qCR82sbzsQz1W+e=K_j;bp<|#T0UC~Hl34*kt=UPE#{tE9b zcPa)Lbj5)_3JnG`9RXi_jBG;q%;bb(49*?zjl6gd%2!vjG_s-tXN#-$d!PbAmOrn_ zAgV=4Tev-lqzw%m#{J*9gQidhs=STGXGWhyg&>pqq@eEuo{ zK+LWft9{p=mwtx*i9GT9a|)k{diZqQ6R;WfeLaRd!ToytP1;NWj1I*`9+UGBCGhsD&JW~TC~PQH@QV{y`@3fv{+|5 zeFC;sg)_uhv|lVdL8+-s;-%JXxtYv*!T=8LGEC<6v{th=_vTDGM_jT5$A>+mYnQBSMgHJ)L60T9iHF|*Y+~a;?n5#mn`G@v_9*s6TVXQ zr93Yd7H&?Jf5ea#Jjje__So}jj<-0@n_0ttv#E+_5PW&#<{66+%`HKR15l(rhRZ(o zY=5oM$)r=fdUmVWo*NkpT=xS$7A5a7D)UTKdKN|x(r#oOK;QP_eMgUsEJdZXe-_^x zD_rO3C$;+aq|jhzSowfIS|PiLQbhFm96@ApM5a< zntjS}&Nw;4^B1|P-?dua&Ivrq3-G=jBQu0Mm@MQ@_up*zbuiT!{n#j6T+Th{y~+h- z-E=i%xpO=bHJ*)?$x2KhF(ZV9C-r8%`A*D3oPoa6CMi zI=j})b>EoMuQtm;LU2?jGyN&irJtCIq}JidGInpvyq*;0cHbNAg|cz|?cpR?$O+-X zNJy;)i#N$Nn3xC-%fgA(Rd?%_C7E5JGtV2}eKs1PYcSt(=I*SZTMBB474Crq4?KCj ztZqT$8QI@xS!pI&6eMJ3nh_B5=5ai?bi-WQHhY5wTBrtjN989OG#jK?GFO48_V-T7MR0{u@{Bz8pc8tt8Hh|_(?ELQW%A^Z> zl(^gE&)8))ST~dgJ7TRaW}Tn5r1E*z#D}`_&g-TTbSPWOq=!b`Mo8a*)+Kt@bl9iG zi=;qySyOKJ4MnALO;;CGIy)YSDG;b;%4|`FwcAipPabvlU1PfNYN3J`J9E?-b3CiJ zRg8b+;w|--a8hHZTWqqEw!>v7douqO3IZnB0AOP+TPKtq8UWVwu|@yMD7$;P0>HRQ0X9+%l$!(k0RSdOihIby&br#B~njO($r+`8@{ibW-Now~S`NGM{h`TqS*8LcaV1YQe>gum-j_P^^gk$6 zAlhp%DC9~(99WSn2@wgC%#H$^WD9q-M)u0e9=Bdei1sbL2E=*^2sRm4Z~e$UTiE%{ zjO~cKMt&i2D|1M<`-q{IZd9;JWt6&6kd#n|R?0X7OwaLgbbnR6#6vAN)QF^!j=3dV z6))WBn3%N?2GCxS?RjGh)x8$RHSO)_NfPVD6N`O;ZOK{Wt$2~YFJ+Q3xQJ6P9J`}= zZxz3Lpj$Q1LiHpsBVA1~DQzRTMt(o4ElE;ZMY#Xrrf95d0TIs%Ya#bg7oB)@FF}ia z=7hnjbq8xSFwTgqwuIH?rx|U^i#rudj5CmhL5QAh{+DW^kKb)kVcW|~B2^tRTRJ$4 zPLJ(W*{-+WO|0np30Tunn{|^Ba@lW_02#Wmelm20Wiv5%SLk@%B z`h+i-!OFsdiYO-=LmxdGH*Y~#M>ijD09536A+8ImLI4xSk;6hc5fI_4KL;rYf%8Hj zyg-1o^zUEE-PVcJ-wS0=3IV{NxEdH33qiuK$bTEa4M6(G5r&8$g#XHk3SagAUv-G9 zssG9${>DRyT@CfGyH|neRnHKd6`Y+AE-DPcMZmeRa1rFy#Q!c75fy>_m4m~6U%s;c zZ5kp1`I|%(0l9jCf7ii9VSnMlk;vb}VgCgv28aAbA}0Jd2@(nWdox#){5P>E0{#~s z0xJCf8vMNVlI6E+nQ&_KFeId#8d$juXz6$8sW)rceuPT*>Gz?{~EyaLOLY)L$rfc_@(J2$%Wf)P`EUF_qiu)mC5PwPRQw?=rl}M zY+L`Bx4zu7D9aAm0J_gVtf!(JVP(ko@_9VJz6x7vUhAU@-R#afsuh0R zJr<5J2sR)E1cV-elj}5$dV9ONP@S!>f;&n#)vP(=!u&ff<6QOn&f8q=>l^3Tii#9# zha-)yK7J2GNR|-r|kklK7cQhI8g_hlx0fYv*_6(}O4jP?!kd=>SmDJ< z7sX9<F()o-jOl8CO-%ok$UWoea+Do`_ytg)k#`sU<}eV0-20zftR z$)g>_!sX&5Iuakt7-7k9iE9=~$P1g1n3;Y<8Bu->TCW{a-BD6u&^3Bs^U}~fnu-q@ z1j55F${hyc;wl|>9jr_7#)3@iaWh+3D|tGNYUY(j?6Z$)ak>TLWb(92r;p^q)p-9% z%y0al7QY0UjHKMoSbQ4Jfo~Cy%Peq8)zUZAE1atz-B(Qo2h=8bS{QO_Cn9Dii5(Gjs{C zVjs<54@2y}$YPuv4p82ln8s^-YE;Xoe}xxh@Tzw^gs5(Q7|7$Itt(alh z08`%A2oET}*qLrM_y&U9P^90eg;lsGzA)G%WNB<9=Xdf2HknE}7`Gq4x z-N-nH5ZUNQ78-^QZZI*^!?_r!{|Z<-p{H$BmO^?eK@Hi?P)xYs0^ViCjfdpgAF7V2 z`VYK&z!v!I-OI)I%_w=-VnYK3e|vCCR16QR@F)FuC_K1sQkBb=!o=UCxtgJg3e%Os zn5&fH#8(wkH<8VZsdeLnh8YB`QOsCkQ5X%ik_$uVY7r~Ed$Y*ZmTy9oZAjE=4lGyU z4%s0rsgXK$pQsqJJ%QG8eKsXx0aP4+T4Hk|tREb236jj;s4?1-MGQiuVa%#5XFS}y zHrue)S9!86d_)-0P^M11@PCp1hIRXOe>hKZTJ(oX=#B0P5`8CBMJ^`HGOfB=auk70 zi7C#IKaF;Bjf8g!>be0!LD&1ivBvQ{>v60*8>26_C7D4&rHViS;TMGUUctg|u(R}} zcsgd`Bezg07tc^EZ!(J+TW?cx`2?mye?cERguBnjZ`H8(Xm$+jlcTyM;6_2?6wY%H zk<=uIPF*QsmUT?-iHtKaEzh54rlSo=jce8*xZ8Zs94ijkI}7h-px_}QU(xWDw2Q;# z1?L5!TB7qS2TKCjXr_6vb>YO7JS_M_UJ`k*GTziWu@Z1HEK-ON?9o^dn{rf*uJ#b3 zD?G&ix@ZBh;gHsh6UATP`=1^}2PXsNtAwcpQR~4Q_};HYAG-(06HiRY2LsMFRwNLh zW+A$%LC!cWpME-VP^3s$2!`J!j;d)5Cj~di@Rc7m3Ks)x5nW236bA>P#Li2wr)d{V zbwN#tTn~lc6P%$B75&FS7=H4-{R5RICH50PcM%=MeU!_| zLIGhyr1FfMs<2^dA)CMVhe#L38yZ3)>ITWXIBJ?bYAYA8hz~l-Mc3rJ?)mHvV?0`T za&;APS)^^ic#-adY~ho>jfiA9o;m@RW!f7m9+qM^*gn@xscD@~|DluU#fX6r)Q$uV zt=aA}OS`bIqQglFGGwMqI?Rj~ESiiCN)G5~36?>W#+9bjav$CdG>CYug5hW=Xok>w z;hD!Q5HhF{-ttDGI8_^`Q&X?=IHmX0Q+&yw3YS_2T>s3~&`_=ho2itj^AHyVrt9J5 zm)figbvGC~d_*9e4gGFK%hm%=oz2P?1nUO36@g+=GuLM}X;X0S@ZQiUvqHa-$2Hp{M;4Gek;F1?$FpS2k(M@o7Wa#2@D; z6RIO2cJ`No<1A2Fj*%PfyL>MmSuz^LSpC5*;A8Q@Ti)6OU6DTv7sXy>*^D;26ZmwN zly5~0-QUOA)Pt^)gHl`_MPvMGCDip(Vc$c=RqGgSWu;rsgxI_bj$0^E`~*I`dERo8D5sT9r_R z1>P{q<(<(r(F*HVealdC#37hqS1=e&L{e>m^B%tOY{C}7Jk_4xwCadL~s!$w%mMy`4M80h@Os#QWy>~ zvNiMBP~JM(X6Vt7bOpph+9_KZ1+2i!LO=mACDodrf4)RCt#Z$Q#Sx2gY$&%=vz5W= z*C}gR(14x`R9oH};{5;`N#ma3PJ+6RQj@eJpGEEcwzzzXJbVv=OT2nCF5PCR5-T`6 zhW~EV@WAE+ET=;KHKV0dr{!LyG3=YZdQBB${{a)54xN;Ek(9GKJ$5;pY{A!;0Z_zx zq!9C1yv*981ETJgDHblB{wT}G@oeo=JuJ&?bov!3lM=?6D6Uu@Vdi4PtVCvInMj8n zwWNe}kVpgU;5n4_wccN6?ZwxEKra`OOAScerpjQcv*3QsZ%79R;@EPH2z;sj@0)w*g zG?bQ!e{!`Kl*4qHb?}UDD5ge@<;bosC~O#K5!bc35H_O*%IHeg2)N=Z#`+DzpooGW zjScZqbrii~$PzGag8Vq3egDoBet`siFvXwffp4BnepxVumjMy(j~GW}7@vnfvTshy z^}fhBJDx@|EbFQeIqC03`sjcv+R8Dw6-Ie|4`N?s(R!?}C2(eQMuhkiO!G}wKC;@8 zk*E=t*72f;Qu55~aez@SXkznyZ*!cIZ(DpmjmVVlfxnkAk*Ri|igE_3mkvrW6}db{ z_pgbh5J@bH^gWjjT)eszxPu|O3bw^UqSijaxMiWA`7$0caWfxgi>5gFI#cNkC0LOX zn|Vakybj`yWS~E|Oa}BthIY}S!N>QBFMP0@#o-e26|M@ZO|7? znf9I7X|>pd@Ub^}-q0yyWD8tHd{_oZE^;A6E4)TcnZSrlRB2K8OG2a6$eYn9zT zB*7b85?YybEEVuZ^mJmvgh4viJu(Ib-PKV7$T)+kh1j{?J9vDh<(w<} zJtRjRsY$_ONap-$8PAY?eSc2@R_Pep6VunW09MA`Z7zAz-a*^{pxxt!ZH0t?RETR- zNt%#VDr1y@X4Zh2*O8!iM)IuJCoemNZ2w|)yKO&>&PDRVTxgkl$-1XK4Q(j^o4;FU z0SN0}3WOjc$qSY?P6egibLQfa5!z$eg|n(<#?WE>w3ZOcsAeTiUuOQEzl63F1o7-@ zzfQErh*6V2Fv}F=*-HiIo5p66rhlaG`RsGPUJQQwX@6rX7`v%410$p!iOxfsj7(R6 z2U>UP${b@1>e->P4zb{D;>M^Sf=JhF0z{c2+hZt@$6EjJtXzk?AUtr9j{fAVaAaCN z#(!7gN#qPA$i(^^S#jW#6Q&!js}DMB#*$6a>?jvgubzNoRTHyOMxbIQvEokVfqAXj z_TZB0nrvN+hBZdZu!)!Jb^Mm2YlgS$bwqNduutpu+WsMYo$o@Bqi%$xomkuu+zBd^Uizt6#I9;tXR5TlMSN60NF{pUBReZ-gKDvb;TlcR+X!- zqJG*0G-;6e9C#_%?On+olWnv71Rz}!bN9Qxk|VDZDXDqMo{FnM&(#`uuocOg)_fkh zUb=ij_S{upxL*41{_8-W)i3RRq2=+=^^!*e&+Ux8>XV#rD1N*Ad{%8!boQd(bPx$LoHQ$yC7W6!#Kf@(h$v=Nuv{)YBBNVbNQXmOjI zd;qisBCW1Wh|Bgu0`Vsj$6$?^5B2!H;sL4b`oq zf@pU?YW5?W>CU)wy61pJZy4cdY3Fh82X8T9Esk$;w`YIg{4QfyUw(J*e>jTPXgF>_ zdT`JmK55L@NnJNkEfk_%IZ5?h`<@fD_FOZE`XZBg_Pbo`GXi&`awUKU?rz8G-w9qa zf{1O_EKe_?r~QeRFJ?tgI}?^-vCGduC%Q%Kd@ug~6^IqHIq4T926whEG4Bl;SzB?c z4*H$%S0FvpG^I77fej^)&=3NTE07)+nc8n%=51s|W*i_VF7w40XZMlaw8@cTj|Wpm zs+y168&k#{m%BS{zW?|mq;KELQNK`@Zk*cPn%V40zpRn*?7qf{$UJimTijqQUio>P9t~UCpHa=&1hVr2J!Q)6;n#E_ixSs_UWd{S;`38LZo{}J5nLE+I+N+ zVS1=sMh0Yb9=Dv+s1Jm0#EPM*9T;OP-Agg4IqfdO6UT)F_Y8-1@&Cje@8t^SQ;}KPh51+WO z4zQ&}5p#^#_32l88>iQ*bG9tFLVK3vCl%<vgyGoPyaQ{#g%|^D|UJ zs$xZbkQu7Tq@3MC243nr|I2fRle&qIwt!U+AmC|{3uVc1^HTv^9w)B)N*5nP9+iAx z9=Sfu4AoHV`XGnP+UZd>HZqJB#^2>IGRzE4DFc_4G!;|Cy{W;&LJG<@I`owbCxYIz z>E`uX-}5|suun!oc{y|2r&&-!Wtj-4yu$qufcETWV}(R4dJZif7e;vZ1n4_-o0-R; z-cH@Inh=~M!bjU(RO0n9`K}_lo6_uO<14*SOVv#>sY4NyeT*92mExzdm{CA=gT)-c9IOt=UI;q1u}{GyM<7k$DMTCLVdIM z3m13Njk3~si|cC5<_jE{gHAXnQ6E~8+fVC;;huk#Ufk|~LwZ!Ia31Rgaa^kE`}DPu zaJ-lVrJvnerV!lId|e^t7v#tRaK4G)kAK|zR&i0H_!<#QM&(<9DGuy=OTT4!ein|L zwe8bhwyAROV7#)#b{;br0Le2%v45lkL#z4Njn53>`DCrrfS3dJ<TNr=2Qx|_D-Y!#KMv1=)DV$VuD*yy_{Gc%c5wZ|cMf40d5jxhD zMt&APHmDU3RJ-yFvvf8QE$>EOPRtH!oo}oj+GbKvGMX4H)GN)|rQHgxZH6~$<#vCqtTx$t#I!>2`%l5lC> zYRvzKuJTRus+U6Z(fQ-mTH)+1k4+d_VREdx!Od>ci4?BDHJ*M*;Sawcchyx)dAg}x(0v3eYyo-A;LZJ_7 zDG*N)-+h@ILJ#4ELn@DlBqeL2V6X*~F$>;)rEuncBJ#^!Xx8$IA6$4z-lbGkzEvrF zZ!D%4PBfl_c_x@+jipuDdd|z7m*U)pNEXrn$B_g5+4lo`W8qFB1-1gJD>1tE_pSzO zRZ-yb0a#xxj1|dSpMJaA4@nT*Z^8Az|q{!dd z`B|81y?YMq0`7%}RnDFUZ*ED-F-9MC(~(W>Oq^YuAOpmxkoUw@kSLN^h(8H7EC(m( zUthRXcFw^l%vh0ZU2u^33WdZs%;Z=xMc#b1(ay(h85W-tik|K~v)W6{Q ziJoUmNBdsCQ`01$JSP6&5cNgrtG`>oq6{jpH?x~E*(C=(8}{BJk>s*y08M-{Z*P;! z<=X8;W%l!Y6n8rxSJC z{=2$czcBz;7T-Gl2D<3uUcmlK`FU;I+#DInv40<=lNcL9M2cO_P7Z>GB$DD(yHQ}m zKwfa(LUO6Fu~=O!oJ>v0SdOm^hESrja(fL?F#7mt^d^S>DQRr23F zo>$@j2YW64_kDzXyYOK-_kJ#`E93v(gpCcv_4g1qb};yF9*CEN=Rcx(xk3M* z(^~&_2J!N6|ED1c#PN4SHV`K#$KPT=+~B{5uyKIEka`x9S9@4h?Co91UoHM;r9Rl1 iy)Mq{_}AifJDgpNoLv6h4K@yTc1~m(8c9Vdif8 diff --git a/Benchmarks/CyRK_numba.pdf b/Benchmarks/CyRK_numba.pdf index 2c68d1a18fba79e42713856aa298685dcd98074f..0595b3c9a541fa763a3db740d4a964b145e2dbc1 100644 GIT binary patch delta 5960 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 XvG(%$&oqFA!7vd*PEI9lWy1dlQKV7f diff --git a/Benchmarks/SciPy.pdf b/Benchmarks/SciPy.pdf index 5415f9c836da59fa943dfb3e7d3f676d45ef8bb7..478ce1c7baf3b3ebbb4c49a5d4e0d778cc0ed0d0 100644 GIT binary patch delta 5953 zcmZWpWmuGLwfrl+=UnI0=hwdXz4uysuV-C%x!assX*3}^qrb!)PlrF;HJ-7*e^l2jmjWlz+8_`z zQ8oc|($eyBKD~duy(?t|IXsYlxpE^)`HjDdu8)t;c!BrU>y@m=_i%MCqk8T{~g^nGvYjhOlC=*jZxzKg+r<7v-rHt*T>E?jJOvhHWu#^zuO ze^1<)!QkfQm1maX*XCsXld&E?H!IoF;9G%OLFn0#GMVz=_kjYH)oc|zYz4i<=~2g_0wHW%$r@CRK75dGQU`%6oCZtUA=7tg!g z)1|#Lf!Av1%zxm6<2i}v(C7YjcTU@zy8dbIbgvgzJ$JFU zE;j9WG1JtL5MZDPdDv$*mN)+so$r{dU`qA2N;dPR&v9c;yyWKFebZf$4gAid8Bo8> z-cUf6-ABGFnIY9Jt-Xc@+TY1eD}qWp$@$H$eViEEEZDoQ7s`!gOc2MZ~ zwIGe@<}YsO$&jg$13c5A3zx;upnYV$BUi6<>Inl!(rf(H}$wN zWDa5AxvZz4F4$HS! zC0(y3a}x@+9`MG>JCyE3{RlVLeW#x0 zO=b3~GqRNlBmXrfZIMO$P0NEVK$J}xkxhl)OL=ePPGWf<{m5v&B)XMRZRN)#b^6Un z)mqN8>ur6b5S4^bxPur)*^p9_(Qy7*Fk+NneicqN!@uQ25e|7VFK1uRSX5FpW zicEIFs`EcqCr<80gXEHlZiX@95Dd=uU#ODvw|N{~QNAl>gcVSGZ=Z3&R^FrT%M>>m z9zk!r-#*cO_VnFz#*u4fRFm^@&f4dkunm(g1^IG6 z&1ODP%0Qd} zuTd0nM54OzT^D4Ri8mi z!-2jJe6#j?J}FQIN}-2VVFO7Guk&U|beam5c{itKbb`?c(V09=7C4DuzwB5QLQ|b-EVhCvcx#P&{Kj*Sr8woBsBZt-F)xx4?id;euIm! zIbVWS<)H6zc+RMn#cLs_f^WAG=BTk~o7v|vj+5gzB1z_$Zl)g@cTVn@{c8PiCB@mFZiskvbYrdKwo;{6eqG`W4VU1P zy|;H!BXBPEI%$ zV~1T1sSAIkC#{L*4owLO+p4peoRkQ6uHy=ot|ayzE~d-W7w*e|l?3j(2sKKXa!JQ!ob`Wz|q>~fGjl0=KB z1rlJWK*3TI0h%pNy7^L+^gv%Ved4WcAXHJGNuJwfA;2`aR_RXo{8U$~nbzlMeR)#9 zuG|)06p{be+jcIJeT50&nK%e{!;;#*YbCL- zv3{Y=$@AV-7_~u?S8RoLm+X;sAZNliEo(6~txW%<*O_2f=uwv{t4G#I(-ps`LdDi) zj$ip>TaPM}z=F!f>8yt)M>XV;zODIUjhqC*WM-uy0H3j7JI-_&@6HLDJ*hG@ z%}XyOXqcNI+a0~ncicLnSoJ?Iv%_r%wBM$wPQ04ZUy(A|Nn+$aYB9%+R)3R~&2U=2 zCw$I7V*H#}M$)5Io{#tr#%r~W`woc^uuzkoKb?qc{`v-vunFbI`%W~_2UJZbLs|W6vgY=pG*e5PhP*d#%915n=vv-&<4(L;Ko# zCsDyIxUF=bParesO5(U5Q%%dQ7+nt)E0M#;y$rcVb}$y!5aYcnQ!_4=)1VeKY2TNQ z$d%Hl;*MqK&svy~pbEvxs4pxc4)c#WL)!~W2;vR0JA6%@^ahs-JJZNR_!0q}5_iI0 zH!+8-)F{7j@`w?w_@0)Sv<;1;jn;jU(+Z`|PoXPOe0ni+no}nlohwdHrx^<>*$@Ut z{TQb9iuW+`{1C^yF%|YuuB6u)O{f~ZE*Nch^Yf?#Enzt*NU{hsOMT}7xzr&wwZCL` zk<(rdgzlPpa(!(UOWK=Y@UN%?!7a4_?Ds0t5>z`Qy%Tp6=Mf@)Eg5Lv{T_VxEOZ;L zOU<}4+St|qu$=Z6!80mAT+j~iW6O?Wm#B<~QKgX;$fV@h*FtQsJijJ z8=ZNd$AvI}^TtaUdJkK7QD2(@0K(GQ0^?`eF6mp-uLF1%Xm`Jv zo-veE@Mjg;^l(}h2rd&dboCjr-O7C&T}0(*{6$ZvI58Miw)?9~2`x=Q#GRtiN_5of z^eYD)!B!p{!dMq^ZgitfvGDy8;$rPe{{0)@V+O{%0FB`legP>+iuV1loQ_7{09yY1 zj`M;k7OA}wl0vX{bFU+lMYm}ENT&MUiG1*2zy$*=&JlM`y9UfuDMn3x)j%bO^vsdW z4q=$3HVQ+qPvu)8&}*r$K>ojsmNM5;6ZCqfEUGiX)vL@DueWy&$8ZYKz+d&Xh(Vn) zYlr6E38ewwR4Gv%8qhRV_;a}?c%?9eKIFSDsd8jmyLph2Cq&)+h>hq5DMO?1yLV}1 zm=wj4)5VBI>`EeJ4DXxw$h`-|z)ogK*G*_y>n6MJLHkS$o!MygiOC0Axg4-JR`PtE z>u~D;(HxB+$SuCFb5_{tfU@*GDX>Z}1ZZRwztlZ*8BC3a4*2F-VUOPgjUHli@=5Gt z%wq<1`3~Vrk@?IU6)3gtnzNz$9i_nWuXP7Q^*OOB5Bh!9vi%r|MvM5Y&}*{=5==bx zZ_H34kt_f-#KVfzZRh7^*d9aaNYhvy$F!hzc9mZB`*TYY;R2V(h@bn00wH7V=A_X- z*U)rTt*dIcM6GpgdKp`vI3DijmBtb2NAJkkNU4z2QNB?5+@_d4fL}0qTEweJiZw6D zq)1V;|L|#9@kp<*TRvkMd6I3oFPd`&-O#{qR79|dKAZfJV~EL+HFWHXF}RBo)mxt6 z70u%nr^~D6n-;X<84r{5q)X5?P=1MGwX2zW+oCdR018|F=Hu@&^`K_1MDuK{g5tIc zrqFd(X>`p+kIY?`wuGo%I$UnkQl$_M_=ewYiZnbD-<3YuO;^di*Z5S!G9^aU=%rW5 zrq0_8^zF6Q{gVQHeV!jDu1r`vHQ1YRT%01%L#|S2-P_aVC^OI3s5@rt=1a?p_i?S? zbKH}P1v3qL14qVdzL-w3>$XHmd{*oT~LD)5a;jw(o&8kzhmf}yhhTB8+qi$g_aiY(BaXN5zhwu&g= zmbs{=p{|4NcjH|S<$5*`DzPT23!e8~!*`$eKeiiw*TKhP-8rTtH$+kOv~sPJ(nFTP z6+ODT65qF7a34F7$SRtp+p5VtNd7h?-}nhz_no#6gH^t5S{$$m_?NkYWnJP zP3xqrjGlgjV zTF~gi^rmI8PNOKt*TcQSs-4N|E+ZWf79Bei)MId+Sn+uGy-~<@nNTAxw!G7)`~}jp zkLa_M3J6>*wAiLbw{R$Q9n?oertNS{X>nt1K`+xNrvcm9XDlOF$sC`hKTFwv!tN?_ zB*HY;d~rN6eTZ(tXLO=}_z2g8EVavKqBG78?I?_ze+4+sH&s~WOnTEbvX8D3p%F_@ z$}L3XY?E>ZSw2M=iJKXbI?$$!js)S?d;7sBu#9$jo$S;jGYc(-vW=>X{lQOak;YG^ zr$E(UP0Vtv?Ep7U^WZH&~64?Hh7EOWeY5MxYKFLMa~Y6-mh~mA&b~ zk?onSS4m+^=VjcsQo!-%eEBKv`3sJt9mF}j7Q<_{{CGL&Z(uaraN_BzWKba35C!@O4DLy+UDC3+ z{_t6MwPmrH^t&KYGt+ec$oiN#9@(my)GdxG3zTRXoK{V4zI2a>1iM=KL<9N~97 zCU&Bh*dciEb@YI>mZWud>Vn$WX%ip1V%FN40aPe^@`RUm#d=8BzV10{+O*%N0ZEo4 zzjRmOM?H11YFS4ISoU?CKtPUgDN9C!Dx}qhmTuy(y^EOT4B0>n&2#0fxX<~r(pEVx z+Ra<0kz_)98!tK0PT%IX{dyw190C#K2%D-4cUhPBrNlMudR1k~K~{6zF^xQUHbZ|e zdw|$|U0WA>I}|_+;bV*XC!^|#bO(rGYJ}M-wCz0{QBDAeBn8Hrm4jyi3wa(YF*vzWmtaiabjW{Aw|8gwPYAYXtKZ*U~U^0=&c!F!0hh zoM_mkaY#XA(}Myv^4K4`1G|NVF-@1op>Jf=23ju&h?$INHI4C1W7`+a*bjNi6u%^F zX7m~051DWbgCZqrgLKs*6eRleGWXNP7&*rV_g3%Zdue8c8k1Es+-i8DLGZ-o=qei) z0?=EL|5$GeHXsh;{_O4ikSq$x8->nAH)PK773F5{$(W?~&SA8$L#%goRtfPvc#Ss} z8pm(a(=?Tzr>+N=Dei^0JeQVL19d;%5RY=tA?00R!}9cXFx)BaBx-QT7<AZexoO zh&86f<+Hi%n9(QavKB2cPXfR60ui>^^QEL?%eMAmTT2VDlD5cAeT+rB*H(&QzaQDK z)A=o?p09R{&mXJhm0iE)3~z~S$+U#yEqCc9saqoLUS|kX**Wp%1;j_S3}xc5HXl3L zO!s$b48I3OP}qAs@J1o+ZQOrHp0+L&U`bpFzak+K1c=)e;386|5L0$`aIi<(d)V1~ z1Iz$Wae$bYJ<{3p0RRdIhy~aqJpp2#9+z%G`FR3hV1Sr|rwUm*w`( zj!r0?mheqdqklpG7yl_jR6+_H~tR+SmNK~Zy+%IcTDjQ3s~~s{6FLn zAf^y>c1uhZB%*BZVsp<2VdLQ~;_mF>;|&1Aeivfifz^m0Aj~#6luH75`S!rTB0wk~ z5XdJ0kd^)4#UCN<9VmbR2pEHbh&ch_z{^>Fe*g~v#XkWE2!jCs&PiM@^GBTo=#ux( z9OQ32377;%5DF)O!o(#p4p4416n3fUe|G|5;=s#w{|oJM5Xno`{>TAgmva4gPF!3Z z{AUgdga3sGg+qUDfxhhizjc9<5b?iABtd_Zz$GOAmH-O+dl(7eUw9HAiT^j?Z~n_q z0s{F<1qm4FPwjyc;^Kem43v<7|J4fz!9jnj0EYqp>;(Z4aPj~5lTb(-XE%E!g|zhL z1Lz!Je`yVXn1QD!3UG<`+rAne4xRwWzlTd7d82HQsDE4p0s+Ag3LYL6T~&(z0qq3M Ah5!Hn delta 8191 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 diff --git a/CyRK/cy/cysolvertest.pyx b/CyRK/cy/cysolvertest.pyx index 3826225..a9006ec 100644 --- a/CyRK/cy/cysolvertest.pyx +++ b/CyRK/cy/cysolvertest.pyx @@ -149,12 +149,9 @@ cdef class CySolverPendulum(CySolver): cdef void diffeq(self) noexcept nogil: # Unpack y - cdef double y0, y1, l, m, g, torque + cdef double y0, y1, torque y0 = self.y_new_view[0] y1 = self.y_new_view[1] - l = self.arg_array_view[0] - m = self.arg_array_view[1] - g = self.arg_array_view[2] # External torque torque = 0.1 * sin(self.t_new) diff --git a/Performance/cyrk_performance-DOP853.csv b/Performance/cyrk_performance-DOP853.csv index 2951469..99d390e 100644 --- a/Performance/cyrk_performance-DOP853.csv +++ b/Performance/cyrk_performance-DOP853.csv @@ -11,3 +11,5 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.5.3, 29/03/2023 18:54:36,1.1012,0.0167,#N/A,#N/A,0.2044,0.0082,10.7259,0.0116,#N/A,#N/A,1.877,0.0371,0.5242,0.0063,#N/A,#N/A,0.1105,0.0049,4.8917,0.1128,#N/A,#N/A,0.8805,0.011,1.6723,0.0122,#N/A,#N/A,0.3094,0.0068,21.78,0.0313,#N/A,#N/A,4.0337,0.1086,2.0237,0.0332,#N/A,#N/A,0.5803,0.0223,26.9174,0.4865,#N/A,#N/A,7.6904,0.1039 0.6.0.dev3, 27/07/2023 16:34:21, 1.1226, 0.0190, 0.1162, 0.0008, 0.1791, 0.0025, 11.0750, 0.0218, 0.6586, 0.0008, 1.5557, 0.0078, 0.5142, 0.0022, 0.0931, 0.0006, 0.1035, 0.0012, 4.9625, 0.0442, 0.4232, 0.0004, 0.8202, 0.0061, 1.6115, 0.0232, 0.1726, 0.0005, 0.2734, 0.0018, 22.0793, 0.2389, 1.7130, 0.0386, 3.5447, 0.0375, 1.9516, 0.0485, 0.1859, 0.0016, 0.4922, 0.0014, 26.6386, 0.4357, 1.7423, 0.0134, 6.7022, 0.0442 0.6.0a4, 27/07/2023 19:01:55, 1.1085, 0.0280, 0.1259, 0.0038, 0.1928, 0.0068, 10.5592, 0.1295, 0.7260, 0.0161, 1.9403, 0.1159, 0.5095, 0.0229, 0.0981, 0.0039, 0.1154, 0.0031, 5.1162, 0.2334, 0.4771, 0.0345, 0.9215, 0.0410, 1.5993, 0.0191, 0.1972, 0.0056, 0.3029, 0.0043, 21.7690, 0.3977, 1.8171, 0.0565, 3.9987, 0.0936, 1.9748, 0.1240, 0.2101, 0.0042, 0.5470, 0.0321, 25.2882, 0.2939, 1.9768, 0.0476, 7.2745, 0.1060 +0.7.0.dev7, 27/08/2023 01:13:33, 1.0344, 0.0015, 0.0966, 0.0002, 0.1670, 0.0005, 10.2972, 0.0150, 0.5214, 0.0006, 1.5239, 0.0135, 0.4878, 0.0017, 0.0772, 0.0001, 0.0991, 0.0005, 4.5979, 0.0411, 0.3331, 0.0003, 0.8044, 0.0036, 1.4902, 0.0025, 0.1425, 0.0003, 0.2587, 0.0039, 20.1369, 0.0811, 1.2903, 0.0119, 3.3198, 0.0182, 1.7607, 0.0080, 0.1521, 0.0002, 0.4969, 0.0036, 24.0781, 0.1145, 1.3241, 0.0021, 6.6531, 0.0005 +0.7.0a1, 27/08/2023 01:23:48, 1.0094, 0.0030, 0.0955, 0.0002, 0.1660, 0.0003, 10.0515, 0.1271, 0.5152, 0.0038, 1.6281, 0.1728, 0.4916, 0.0152, 0.0772, 0.0003, 0.1002, 0.0004, 4.5604, 0.0592, 0.3398, 0.0057, 0.7978, 0.0034, 1.5030, 0.0145, 0.1439, 0.0036, 0.2601, 0.0077, 20.6049, 0.3711, 1.2741, 0.0087, 3.3549, 0.0756, 1.7522, 0.0166, 0.1538, 0.0012, 0.4985, 0.0037, 23.7129, 0.0492, 1.3207, 0.0154, 6.6875, 0.0549 diff --git a/Performance/cyrk_performance-RK23.csv b/Performance/cyrk_performance-RK23.csv index c011758..28256c1 100644 --- a/Performance/cyrk_performance-RK23.csv +++ b/Performance/cyrk_performance-RK23.csv @@ -11,3 +11,5 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.5.3, 29/03/2023 18:52:55,60.0504,92.5845,#N/A,#N/A,0.977,0.0467,64.0294,1.744,#N/A,#N/A,11.0573,0.6993,3.9994,0.0556,#N/A,#N/A,0.6373,0.0171,40.7177,1.2901,#N/A,#N/A,6.3661,0.082,55.8262,84.3719,#N/A,#N/A,1.0868,0.018,120.5543,2.1751,#N/A,#N/A,24.5811,0.6446,58.4356,86.3555,#N/A,#N/A,1228.348,2124.0493,147.4642,0.8251,#N/A,#N/A,41.4584,0.5506 0.6.0.dev3, 27/07/2023 16:32:01, 57.1791, 87.5186, 0.3494, 0.0037, 0.8585, 0.0057, 63.9107, 0.2997, 3.0236, 0.0515, 9.3455, 0.1826, 4.1405, 0.0975, 0.2908, 0.0022, 0.6355, 0.0140, 40.3881, 0.2355, 2.4721, 0.0113, 6.8997, 0.2983, 7.1722, 0.1723, 0.4408, 0.0036, 0.9994, 0.0144, 120.0959, 0.8422, 6.7832, 0.0889, 20.7693, 0.1457, 59.6151, 87.9523, 0.5158, 0.0192, 1295.4767, 2240.3460, 148.6622, 1.4348, 8.6331, 0.0093, 36.2625, 0.2111 0.6.0a4, 27/07/2023 18:59:35, 58.6676, 93.5182, 0.3900, 0.0126, 0.9633, 0.0266, 45.5975, 1.1797, 3.1403, 0.0138, 10.5973, 0.2912, 55.7416, 91.5188, 0.3192, 0.0082, 0.6436, 0.0150, 28.7644, 0.9448, 2.6510, 0.0471, 6.7978, 0.2528, 56.1384, 88.3532, 0.4677, 0.0044, 1.0281, 0.0150, 85.8300, 3.9745, 7.5308, 0.1815, 23.5595, 0.4995, 58.8041, 91.3233, 0.5090, 0.0065, 1386.0843, 2397.3464, 106.3878, 1.1220, 8.5241, 0.3540, 38.2326, 0.7181 +0.7.0.dev7, 27/08/2023 01:11:14, 4.8113, 0.1391, 0.3115, 0.0004, 0.8552, 0.0036, 45.1068, 0.6880, 2.6107, 0.0100, 9.8739, 0.6100, 2.8775, 0.0067, 0.2522, 0.0009, 0.6097, 0.0030, 28.9372, 0.8937, 2.0232, 0.0052, 6.1300, 0.1653, 4.9043, 0.0304, 0.3955, 0.0062, 0.9908, 0.0052, 82.1498, 1.0284, 5.9321, 0.0159, 20.9002, 0.4163, 5.8702, 0.1321, 0.4181, 0.0009, 1183.0684, 2046.0616, 100.8534, 0.6015, 8.7392, 0.1784, 35.7355, 0.3580 +0.7.0a1, 27/08/2023 01:21:31, 4.5590, 0.0620, 0.3149, 0.0066, 0.8748, 0.0195, 43.6144, 0.1123, 2.6232, 0.0313, 9.2402, 0.1733, 2.8469, 0.0036, 0.2520, 0.0032, 0.6048, 0.0044, 27.8211, 0.1951, 2.0357, 0.0363, 6.3501, 0.0787, 4.8713, 0.0372, 0.3889, 0.0021, 1.0088, 0.0276, 81.8194, 0.1423, 5.8619, 0.0337, 20.3528, 0.1749, 5.7740, 0.0594, 0.4174, 0.0006, 1139.2328, 1970.1475, 100.0822, 0.6212, 7.8009, 0.0816, 36.2940, 1.2287 diff --git a/Performance/cyrk_performance-RK45.csv b/Performance/cyrk_performance-RK45.csv index 1516575..b5330b5 100644 --- a/Performance/cyrk_performance-RK45.csv +++ b/Performance/cyrk_performance-RK45.csv @@ -11,3 +11,5 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.5.3, 29/03/2023 18:53:59,1.495,0.022,#N/A,#N/A,0.2382,0.0043,14.346,0.2391,#N/A,#N/A,2.1512,0.0124,1.0725,0.0588,#N/A,#N/A,0.1908,0.0059,9.9641,0.2233,#N/A,#N/A,1.6407,0.0169,2.098,0.0337,#N/A,#N/A,0.3471,0.0034,30.948,0.4268,#N/A,#N/A,5.0067,0.1861,2.4647,0.0475,#N/A,#N/A,0.6474,0.0015,37.4663,0.932,#N/A,#N/A,9.5284,0.2498 0.6.0.dev3, 27/07/2023 16:33:27, 1.4976, 0.0078, 0.1263, 0.0020, 0.2183, 0.0048, 14.6415, 0.1659, 0.7735, 0.0326, 2.1201, 0.1075, 1.0564, 0.0226, 0.1215, 0.0014, 0.1799, 0.0041, 10.1866, 0.1168, 0.7128, 0.0174, 1.5160, 0.0183, 2.0563, 0.0244, 0.1735, 0.0048, 0.3245, 0.0064, 30.8844, 1.3249, 1.7317, 0.0159, 4.3405, 0.0464, 2.4736, 0.0144, 0.1848, 0.0019, 0.5841, 0.0089, 36.2224, 0.1844, 1.8375, 0.0131, 8.4909, 0.0345 0.6.0a4, 27/07/2023 19:01:00, 1.3026, 0.0252, 0.1270, 0.0003, 0.2370, 0.0077, 13.1688, 0.2770, 0.7357, 0.0104, 2.0835, 0.0676, 0.9441, 0.0522, 0.1292, 0.0056, 0.1934, 0.0100, 8.5366, 0.0426, 0.7844, 0.0494, 1.6277, 0.0193, 1.7297, 0.0254, 0.1885, 0.0038, 0.3590, 0.0067, 25.4444, 0.1438, 2.2064, 0.1480, 5.1500, 0.1446, 2.1667, 0.1251, 0.2131, 0.0095, 0.6540, 0.0405, 32.0478, 1.1447, 2.0710, 0.0607, 9.6978, 0.4326 +0.7.0.dev7, 27/08/2023 01:12:37, 1.2641, 0.0062, 0.1031, 0.0019, 0.2173, 0.0053, 12.2412, 0.0395, 0.5690, 0.0008, 1.9169, 0.0142, 0.8811, 0.0057, 0.0958, 0.0004, 0.1712, 0.0007, 8.4969, 0.0834, 0.5321, 0.0026, 1.4975, 0.0028, 1.6713, 0.0148, 0.1467, 0.0011, 0.3058, 0.0012, 26.5646, 1.9359, 1.5104, 0.0006, 4.2413, 0.0166, 2.0245, 0.0408, 0.1609, 0.0097, 0.5685, 0.0021, 29.3066, 0.1643, 1.5506, 0.0036, 8.2832, 0.0310 +0.7.0a1, 27/08/2023 01:22:52, 1.2283, 0.0057, 0.1010, 0.0001, 0.2117, 0.0010, 11.9199, 0.0385, 0.5796, 0.0084, 1.8945, 0.0104, 0.8679, 0.0094, 0.0958, 0.0005, 0.1726, 0.0033, 8.2955, 0.0659, 0.5338, 0.0010, 1.4996, 0.0135, 1.6907, 0.0290, 0.1458, 0.0004, 0.3058, 0.0036, 24.5503, 0.1658, 1.5368, 0.0370, 4.3002, 0.1004, 2.0103, 0.0434, 0.1557, 0.0013, 0.5757, 0.0059, 28.7147, 0.0734, 1.5439, 0.0018, 8.2652, 0.0295 diff --git a/README.md b/README.md index cc530c4..bf26a48 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,11 @@ functionality of [scipy's solve_ivp](https://docs.scipy.org/doc/scipy/reference/ Currently, CyRK's [numba](https://numba.discourse.group/) (njit-safe) implementation is **10-100x faster** than scipy's solve_ivp function. The [cython](https://cython.org/) `cyrk_ode` function that works with python (or numba) functions is **5-40x faster** than scipy. -The [cython](https://cython.org/) `CySolver` class that works with cython-based cdef classes is **5-400x faster** than scipy. +The [cython](https://cython.org/) `CySolver` class that works with cython-based cdef classes is **5-430x faster** than scipy. An additional benefit of the two cython implementations is that they are pre-compiled. This avoids most of the start-up performance hit experienced by just-in-time compilers like numba. -CyRK Performance +CyRK Performance ## Installation diff --git a/pyproject.toml b/pyproject.toml index f90755f..707089c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0dev7' +version = '0.7.0a1' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From c745d9ff4cd4eb1724c4a19c274b7ce6353448a3 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sun, 27 Aug 2023 02:00:48 -0400 Subject: [PATCH 23/29] change to ubuntu tests --- .github/workflows/push_tests_ubun.yml | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push_tests_ubun.yml b/.github/workflows/push_tests_ubun.yml index 4a79f92..99c43c7 100644 --- a/.github/workflows/push_tests_ubun.yml +++ b/.github/workflows/push_tests_ubun.yml @@ -42,7 +42,7 @@ jobs: - name: Install Dependencies run: | python -m pip install --upgrade pip - python -m pip install pytest pytest-cov + python -m pip install pytest pytest-cov cython - name: Install package run: | python -m pip install . -v diff --git a/pyproject.toml b/pyproject.toml index 707089c..d1983ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0a1' +version = '0.7.0a2' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 67358c2a6f7dfa07e1dd9b6939472ab414d1a735 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Sun, 27 Aug 2023 18:42:12 -0400 Subject: [PATCH 24/29] Can now use arrays for tols. Addressing Issue #31 --- CHANGES.md | 4 + CyRK/cy/cyrk.pyx | 54 +++++-- CyRK/cy/cysolver.pxd | 38 ++++- CyRK/cy/cysolver.pyx | 144 ++++++++++++------ CyRK/nb/nbrk.py | 61 ++++++-- Tests/C_Cython_Tests/test_a_cython.py | 74 ++++++++- .../test_e_cysolver_change_param.py | 17 +++ Tests/D_Numba_Tests/test_a_numba.py | 19 ++- pyproject.toml | 2 +- 9 files changed, 323 insertions(+), 90 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 56bfdfe..87c38ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,10 @@ Major Changes - Added `noexcept` to pure cython functions to avoid a potential python error check. New Features +- Added the ability to pass arrayed versions of rtol and atol to both the numba and cython-based solvers (cyrk_ode and CySolver). + - For both solvers, you can pass the optional argument "rtols" and/or "atols". These must be C-contiguous numpy arrays with float64 dtypes. They must have the same size as y0. + - Added tests to check functionality for all solvers. + - This resolves [https://github.com/jrenaud90/CyRK/issues/31][Issue 31]. - Added new optional argument to all solvers `max_steps` which allows the user to control how many steps the solver is allowed to take. - If exceeded the integration with fail (softly). - Defaults to 95% of `sys.maxsize` (depends on system architecture). diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index e4c1149..5bf51dc 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -89,6 +89,8 @@ def cyrk_ode( tuple args = None, double rtol = 1.e-6, double atol = 1.e-8, + double[::1] rtols = None, + double[::1] atols = None, double max_step_size = MAX_STEP, double first_step = 0., unsigned char rk_method = 1, @@ -241,15 +243,43 @@ def cyrk_ode( # on computation. store_extras_during_integration = False - # # Determine integration parameters - # Check tolerances - if rtol < EPS_100: - rtol = EPS_100 + # # Determine integration tolerances + cdef double rtol_tmp, atol_tmp + use_arg_arrays = False + use_atol_array = False + cdef np.ndarray[np.float64_t, ndim=1, mode='c'] rtol_array, atol_array + rtol_array = np.empty(y_size, dtype=np.float64, order='C') + atol_array = np.empty(y_size, dtype=np.float64, order='C') + cdef double[::1] rtols_view, atols_view + rtols_view = rtol_array + atols_view = atol_array + + if rtols is not None: + # Using arrayed rtol + if len(rtols) != y_size: + raise AttributeError('rtols must be the same size as y0.') + for i in range(y_size): + rtol_tmp = rtols[i] + if rtol_tmp < EPS_100: + rtol_tmp = EPS_100 + rtols_view[i] = rtol_tmp + else: + # Using constant rtol + # Check tolerances + if rtol < EPS_100: + rtol = EPS_100 + for i in range(y_size): + rtols_view[i] = rtol - # atol_arr = np.asarray(atol, dtype=np.complex128) - # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size: - # # atol must be either the same for all y or must be provided as an array, one for each y. - # raise Exception + if atols is not None: + # Using arrayed atol + if len(atols) != y_size: + raise AttributeError('atols must be the same size as y0.') + for i in range(y_size): + atols_view[i] = atols[i] + else: + for i in range(y_size): + atols_view[i] = atol # Determine maximum number of steps cdef Py_ssize_t max_steps_touse @@ -522,8 +552,8 @@ def cyrk_ode( d0 = 0. d1 = 0. for i in range(y_size): - scale = atol + dabs(y_old_view[i]) * rtol + scale = atols_view[i] + dabs(y_old_view[i]) * rtols_view[i] d0_abs = dabs(y_old_view[i] / scale) d1_abs = dabs(dydt_old_view[i] / scale) d0 += (d0_abs * d0_abs) @@ -554,7 +584,7 @@ def cyrk_ode( d2 = 0. for i in range(y_size): dydt_new_view[i] = diffeq_out_view[i] - scale = atol + dabs(y_old_view[i]) * rtol + scale = atols_view[i] + dabs(y_old_view[i]) * rtols_view[i] d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale) d2 += (d2_abs * d2_abs) @@ -697,9 +727,7 @@ def cyrk_ode( if i < extra_start: # Set diffeq results dydt_new_view[i] = diffeq_out_view[i] - - # Find scale of y for error calculations - scale_view[i] = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol + scale_view[i] = atols_view[i] + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtols_view[i] # Set last array of K equal to dydt K_view[rk_n_stages, i] = dydt_new_view[i] diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index 68b28fb..5e9f647 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -38,7 +38,7 @@ cdef class CySolver: cdef public bool_cpp_t success cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf cdef bool_cpp_t direction_flag - cdef double rtol, atol + cdef double[::1] rtols_view, atols_view cdef double step_size, max_step_size cdef double first_step cdef Py_ssize_t expected_size, num_concats, max_steps @@ -65,20 +65,48 @@ cdef class CySolver: # Class functions cpdef void reset_state(self) + cdef double calc_first_step(self) noexcept nogil + cdef void rk_step(self) noexcept nogil + cpdef void solve(self, bool_cpp_t reset = *) + cdef void _solve(self, bool_cpp_t reset = *) + cdef void interpolate(self) + cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = *) + cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = *) + cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = *) - cpdef void change_tols(self, double rtol = *, double atol = *, bool_cpp_t auto_reset_state = *) + + cpdef void change_tols(self, double rtol = *, + double atol = *, + double[::1] rtols = *, + double[::1] atols = *, + bool_cpp_t auto_reset_state = *) + cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = *) + cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = *) + cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = *) - cpdef void change_parameters(self, (double, double) t_span = *, const double[::1] y0 = *, tuple args = *, - double rtol = *, double atol = *, double max_step_size = *, double first_step = *, - const double[::1] t_eval = *, bool_cpp_t auto_reset_state = *, bool_cpp_t auto_solve = *) + + cpdef void change_parameters(self, (double, double) t_span = *, + const double[::1] y0 = *, + tuple args = *, + double rtol = *, + double atol = *, + double[::1] rtols = *, + double[::1] atols = *, + double max_step_size = *, + double first_step = *, + const double[::1] t_eval = *, + bool_cpp_t auto_reset_state = *, + bool_cpp_t auto_solve = *) + cdef void update_constants(self) noexcept nogil + cdef void diffeq(self) noexcept nogil diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index f50fdad..abb93b5 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -36,21 +36,23 @@ cdef class CySolver: def __init__(self, - (double, double) t_span, - const double[::1] y0, - tuple args = None, - double rtol = 1.e-6, - double atol = 1.e-8, - double max_step_size = MAX_STEP, - double first_step = 0., - unsigned char rk_method = 1, - const double[::1] t_eval = None, - bool_cpp_t capture_extra = False, - Py_ssize_t num_extra = 0, - bool_cpp_t interpolate_extra = False, - Py_ssize_t expected_size = 0, - Py_ssize_t max_steps = 0, - bool_cpp_t auto_solve = True): + (double, double) t_span, + const double[::1] y0, + tuple args = None, + double rtol = 1.e-6, + double atol = 1.e-8, + double[::1] rtols = None, + double[::1] atols = None, + double max_step_size = MAX_STEP, + double first_step = 0., + unsigned char rk_method = 1, + const double[::1] t_eval = None, + bool_cpp_t capture_extra = False, + Py_ssize_t num_extra = 0, + bool_cpp_t interpolate_extra = False, + Py_ssize_t expected_size = 0, + Py_ssize_t max_steps = 0, + bool_cpp_t auto_solve = True): # Setup loop variables cdef Py_ssize_t i, j @@ -93,17 +95,40 @@ cdef class CySolver: self.direction_flag = False self.direction_inf = -INF - # # Determine integration parameters - # Add tolerances - self.rtol = rtol - self.atol = atol - if self.rtol < EPS_100: - self.rtol = EPS_100 - # TODO: array based atol - # atol_arr = np.asarray(atol, dtype=) - # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size: - # # atol must be either the same for all y or must be provided as an array, one for each y. - # raise Exception + # # Determine integration tolerances + cdef double rtol_tmp + cdef np.ndarray[np.float64_t, ndim=1, mode='c'] rtol_array, atol_array + rtol_array = np.empty(self.y_size, dtype=np.float64, order='C') + atol_array = np.empty(self.y_size, dtype=np.float64, order='C') + self.rtols_view = rtol_array + self.atols_view = atol_array + + if rtols is not None: + # Using arrayed rtol + if len(rtols) != self.y_size: + raise AttributeError('rtols must be the same size as y0.') + for i in range(self.y_size): + rtol_tmp = rtols[i] + if rtol_tmp < EPS_100: + rtol_tmp = EPS_100 + self.rtols_view[i] = rtol_tmp + else: + # Using constant rtol + # Check tolerances + if rtol < EPS_100: + rtol = EPS_100 + for i in range(self.y_size): + self.rtols_view[i] = rtol + + if atols is not None: + # Using arrayed atol + if len(atols) != self.y_size: + raise AttributeError('atols must be the same size as y0.') + for i in range(self.y_size): + self.atols_view[i] = atols[i] + else: + for i in range(self.y_size): + self.atols_view[i] = atol # Determine maximum number of steps if max_steps == 0: @@ -376,7 +401,8 @@ cdef class CySolver: d1 = 0. for i in range(self.y_size): y_old_tmp = self.y_old_view[i] - scale = self.atol + fabs(y_old_tmp) * self.rtol + + scale = self.atols_view[i] + fabs(y_old_tmp) * self.rtols_view[i] d0_abs = fabs(y_old_tmp / scale) d1_abs = fabs(self.dy_old_view[i] / scale) @@ -406,7 +432,8 @@ cdef class CySolver: # Find the norm for d2 d2 = 0. for i in range(self.y_size): - scale = self.atol + fabs(self.y_old_view[i]) * self.rtol + + scale = self.atols_view[i] + fabs(self.y_old_view[i]) * self.rtols_view[i] d2_abs = fabs( (self.dy_new_view[i] - self.dy_old_view[i]) / scale) d2 += (d2_abs * d2_abs) @@ -539,7 +566,8 @@ cdef class CySolver: error_norm5 = 0. for i in range(self.y_size): # Find scale of y for error calculations - scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol + scale = (self.atols_view[i] + + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtols_view[i]) # Set last array of K equal to dydt self.K_view[self.rk_n_stages, i] = self.dy_new_view[i] @@ -574,7 +602,8 @@ cdef class CySolver: error_norm = 0. for i in range(self.y_size): # Find scale of y for error calculations - scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol + scale = (self.atols_view[i] + + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtols_view[i]) # Set last array of K equal to dydt self.K_view[self.rk_n_stages, i] = self.dy_new_view[i] @@ -998,21 +1027,44 @@ cdef class CySolver: self.reset_state() - cpdef void change_tols(self, double rtol = NAN, double atol = NAN, bool_cpp_t auto_reset_state = False): + cpdef void change_tols(self, double rtol = NAN, double atol = NAN, + double[::1] rtols = None, double[::1] atols = None, + bool_cpp_t auto_reset_state = False): # Update tolerances - if not isnan(rtol): - self.rtol = rtol - if not isnan(atol): - self.atol = atol - - if self.rtol < EPS_100: - self.rtol = EPS_100 - # TODO: array based atol - # atol_arr = np.asarray(atol, dtype=) - # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size: - # # atol must be either the same for all y or must be provided as an array, one for each y. - # raise Exception + cdef double rtol_tmp + cdef np.ndarray[np.float64_t, ndim=1, mode='c'] rtol_array, atol_array + rtol_array = np.empty(self.y_size, dtype=np.float64, order='C') + atol_array = np.empty(self.y_size, dtype=np.float64, order='C') + self.rtols_view = rtol_array + self.atols_view = atol_array + + if rtols is not None: + # Using arrayed rtol + if len(rtols) != self.y_size: + raise AttributeError('rtols must be the same size as y0.') + for i in range(self.y_size): + rtol_tmp = rtols[i] + if rtol_tmp < EPS_100: + rtol_tmp = EPS_100 + self.rtols_view[i] = rtol_tmp + elif not isnan(rtol): + # Using constant rtol + # Check tolerances + if rtol < EPS_100: + rtol = EPS_100 + for i in range(self.y_size): + self.rtols_view[i] = rtol + + if atols is not None: + # Using arrayed atol + if len(atols) != self.y_size: + raise AttributeError('atols must be the same size as y0.') + for i in range(self.y_size): + self.atols_view[i] = atols[i] + elif not isnan(atol): + for i in range(self.y_size): + self.atols_view[i] = atol # A change to tolerances will affect the first step's size self.recalc_firststep = True @@ -1076,6 +1128,8 @@ cdef class CySolver: tuple args = None, double rtol = NAN, double atol = NAN, + double[::1] rtols = None, + double[::1] atols = None, double max_step_size = NAN, double first_step = NAN, const double[::1] t_eval = None, @@ -1091,8 +1145,8 @@ cdef class CySolver: if args is not None: self.change_args(args, auto_reset_state=False) - if not isnan(rtol) or not isnan(atol): - self.change_tols(rtol=rtol, atol=atol, auto_reset_state=False) + if (not isnan(rtol)) or (not isnan(atol)) or (rtols is not None) or (atols is not None): + self.change_tols(rtol=rtol, atol=atol, rtols=rtols, atols=atols, auto_reset_state=False) if not isnan(max_step_size): self.change_max_step_size(max_step_size, auto_reset_state=False) diff --git a/CyRK/nb/nbrk.py b/CyRK/nb/nbrk.py index 323127d..6070766 100644 --- a/CyRK/nb/nbrk.py +++ b/CyRK/nb/nbrk.py @@ -85,11 +85,21 @@ def _norm(x): @njit(cache=False, fastmath=False) def nbrk_ode( - diffeq: callable, t_span: Tuple[float, float], y0: np.ndarray, args: tuple = tuple(), - rtol: float = 1.e-6, atol: float = 1.e-8, - max_step_size: float = np.inf, first_step: float = None, - rk_method: int = 1, t_eval: np.ndarray = EMPTY_ARR, - capture_extra: bool = False, interpolate_extra: bool = False, max_steps: int = 0 + diffeq: callable, + t_span: Tuple[float, float], + y0: np.ndarray, + args: tuple = tuple(), + rtol: float = 1.e-6, + atol: float = 1.e-8, + rtols: np.ndarray = EMPTY_ARR, + atols: np.ndarray = EMPTY_ARR, + max_step_size: float = np.inf, + first_step: float = None, + rk_method: int = 1, + t_eval: np.ndarray = EMPTY_ARR, + capture_extra: bool = False, + interpolate_extra: bool = False, + max_steps: int = 0 ): """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. @@ -291,14 +301,33 @@ def nbrk_ode( error_expo = 1. / (error_order + 1.) - # Check tolerances - if rtol < 100. * EPS: - rtol = 100. * EPS + # Setup tolerances + rtol_array = np.empty(y_size, dtype=np.float64) + rtol_size = rtols.size + if rtol_size > 0: + if rtol_size != y_size: + raise AttributeError('rtols must be the same size as y0.') + for i in range(y_size): + rtol_ = rtols[i] + if rtol_ < (100 * EPS): + rtol_ = (100 * EPS) + rtol_array[i] = rtol_ + else: + if rtol < (100 * EPS): + rtol = (100 * EPS) + for i in range(y_size): + rtol_array[i] = rtol - atol = np.asarray(atol) - if atol.ndim > 0 and atol.shape != (y_size,): - # atol must be either the same for all y or must be provided as an array, one for each y. - raise Exception + atol_array = np.empty(y_size, dtype=np.float64) + atol_size = atols.size + if atol_size > 0: + if atol_size != y_size: + raise AttributeError('atols must be the same size as y0.') + for i in range(y_size): + atol_array[i] = atols[i] + else: + for i in range(y_size): + atol_array[i] = atol # Determine maximum number of steps if max_steps == 0: @@ -358,7 +387,7 @@ def nbrk_ode( d0 = 0. d1 = 0. for i in range(y_size): - scale = atol + np.abs(y_old[i]) * rtol + scale = atol_array[i] + np.abs(y_old[i]) * rtol_array[i] d0_abs = np.abs(y_old[i] / scale) d1_abs = np.abs(dydt_old[i] / scale) @@ -383,7 +412,7 @@ def nbrk_ode( d2 = 0. for i in range(y_size): - scale = atol + np.abs(y_old[i]) * rtol + scale = atol_array[i] + np.abs(y_old[i]) * rtol_array[i] d2_abs = np.abs((dydt1[i] - dydt_old[i]) / scale) d2 += (d2_abs * d2_abs) d2 = np.sqrt(d2) / (h0 * y_size_sqrt) @@ -506,7 +535,7 @@ def nbrk_ode( # Dot Product (K, E5) / Scale and (K, E3) / scale for i in range(y_size): # Check how well this step performed - scale = atol + np.maximum(np.abs(y_old[i]), np.abs(y_new[i])) * rtol + scale = atol_array[i] + np.maximum(np.abs(y_old[i]), np.abs(y_new[i])) * rtol_array[i] for j in range(rk_n_stages_plus1): if j == 0: # Initialize @@ -543,7 +572,7 @@ def nbrk_ode( # Dot Product (K, E) * step / scale for i in range(y_size): # Check how well this step performed. - scale = atol + max(np.abs(y_old[i]), np.abs(y_new[i])) * rtol + scale = atol_array[i] + max(np.abs(y_old[i]), np.abs(y_new[i])) * rtol_array[i] for j in range(rk_n_stages_plus1): if j == 0: # Initialize diff --git a/Tests/C_Cython_Tests/test_a_cython.py b/Tests/C_Cython_Tests/test_a_cython.py index e66ae33..5579978 100644 --- a/Tests/C_Cython_Tests/test_a_cython.py +++ b/Tests/C_Cython_Tests/test_a_cython.py @@ -17,13 +17,16 @@ def diffeq_args(t, y, dy, a, b): dy[0] = (1. - a * y[1]) * y[0] dy[1] = (b * y[0] - 1.) * y[1] -initial_conds = np.asarray((20., 20.), dtype=np.float64) -initial_conds_complex = np.asarray((20. + 0.01j, 20. - 0.01j), dtype=np.complex128) +initial_conds = np.asarray((20., 20.), dtype=np.float64, order='C') +initial_conds_complex = np.asarray((20. + 0.01j, 20. - 0.01j), dtype=np.complex128, order='C') time_span = (0., 10.) time_span_large = (0., 1000.) rtol = 1.0e-7 atol = 1.0e-8 +rtols = np.asarray((1.0e-7, 1.0e-8), dtype=np.float64, order='C') +atols = np.asarray((1.0e-8, 1.0e-9), dtype=np.float64, order='C') + def test_cyrk_test(): """Check that the builtin test function for the cyrk integrator is working""" @@ -39,7 +42,9 @@ def test_cysolver_test(): @pytest.mark.parametrize('complex_valued', (True, False)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_basic_integration_cyrk_ode(rk_method, complex_valued): +@pytest.mark.parametrize('use_rtol_array', (True, False)) +@pytest.mark.parametrize('use_atol_array', (True, False)) +def test_basic_integration_cyrk_ode(use_atol_array, use_rtol_array, rk_method, complex_valued): """Check that the cython function solver is able to run with its default arguments""" if complex_valued: @@ -47,8 +52,18 @@ def test_basic_integration_cyrk_ode(rk_method, complex_valued): else: initial_conds_to_use = initial_conds + if use_atol_array: + atols_use = atols + else: + atols_use = None + if use_rtol_array: + rtols_use = rtols + else: + rtols_use = None + time_domain, y_results, success, message = \ - cyrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method) + cyrk_ode(diffeq, time_span, initial_conds_to_use, + rk_method=rk_method, rtol=rtol, atol=atol, rtols=rtols_use, atols=atols_use) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -69,7 +84,9 @@ def test_basic_integration_cyrk_ode(rk_method, complex_valued): @pytest.mark.parametrize('complex_valued', (False,)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_basic_integration_CySolverTester(rk_method, complex_valued): +@pytest.mark.parametrize('use_rtol_array', (True, False)) +@pytest.mark.parametrize('use_atol_array', (True, False)) +def test_basic_integration_CySolverTester(use_atol_array, use_rtol_array, rk_method, complex_valued): """Check that the cython class solver is able to run with its default arguments""" if complex_valued: @@ -77,7 +94,18 @@ def test_basic_integration_CySolverTester(rk_method, complex_valued): else: initial_conds_to_use = initial_conds - CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, auto_solve=True) + if use_atol_array: + atols_use = atols + else: + atols_use = None + if use_rtol_array: + rtols_use = rtols + else: + rtols_use = None + + CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, + rtol=rtol, atol=atol, rtols=rtols_use, atols=atols_use, + rk_method=rk_method, auto_solve=True) # Check that the ndarrays make sense assert type(CySolverTesterInst.solution_t) == np.ndarray @@ -137,7 +165,8 @@ def test_different_tols_CySolverTester(rk_method, complex_valued): else: initial_conds_to_use = initial_conds - CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, rtol=1.0e-10, atol=1.0e-12, auto_solve=True) + CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, + rtol=1.0e-10, atol=1.0e-12, auto_solve=True) # Check that the ndarrays make sense assert type(CySolverTesterInst.solution_t) == np.ndarray @@ -622,4 +651,33 @@ def test_maxsteps_CySolverTester(rk_method, complex_valued): time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_steps=4) assert not CySolverTesterInst.success - assert CySolverTesterInst.status == -2 \ No newline at end of file + assert CySolverTesterInst.status == -2 + +def test_bad_tols_cyrk(): + + # Too many rtols and atols + bad_rtols = np.asarray((1.0e-6, 1.0e-7, 1.0e-8), dtype=np.float64, order='C') + bad_atols = np.asarray((1.0e-7, 1.0e-8, 1.0e-9), dtype=np.float64, order='C') + + with pytest.raises(AttributeError): + time_domain, y_results, success, message = \ + cyrk_ode(diffeq, time_span_large, initial_conds, rk_method=1, rtols=bad_rtols) + + with pytest.raises(AttributeError): + time_domain, y_results, success, message = \ + cyrk_ode(diffeq, time_span_large, initial_conds, rk_method=1, atols=bad_atols) + + +def test_bad_tols_CySolver(): + + # Too many rtols and atols + bad_rtols = np.asarray((1.0e-6, 1.0e-7, 1.0e-8), dtype=np.float64, order='C') + bad_atols = np.asarray((1.0e-7, 1.0e-8, 1.0e-9), dtype=np.float64, order='C') + + with pytest.raises(AttributeError): + CySolverTesterInst = CySolverTester(time_span_large, initial_conds, + rk_method=1, rtols=bad_rtols, auto_solve=True) + + with pytest.raises(AttributeError): + CySolverTesterInst = CySolverTester(time_span_large, initial_conds, + rk_method=1, atols=bad_atols, auto_solve=True) \ No newline at end of file diff --git a/Tests/C_Cython_Tests/test_e_cysolver_change_param.py b/Tests/C_Cython_Tests/test_e_cysolver_change_param.py index 11a18cb..99583cf 100644 --- a/Tests/C_Cython_Tests/test_e_cysolver_change_param.py +++ b/Tests/C_Cython_Tests/test_e_cysolver_change_param.py @@ -11,6 +11,8 @@ rtol = 1.0e-7 atol = 1.0e-8 +rtols = np.asarray((1.0e-7, 1.0e-8), dtype=np.float64, order='C') +atols = np.asarray((1.0e-8, 1.0e-9), dtype=np.float64, order='C') @pytest.mark.parametrize('complex_valued', (False,)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) @@ -65,6 +67,11 @@ def test_CySolverTester_change_param(rk_method, complex_valued): assert solution_4_t.size == 10 assert solution_4_y.shape == (2, 10) + # Check changing rtols/atols array + CySolverTesterInst.change_parameters(rtols=rtols, atols=atols) + CySolverTesterInst.solve() + assert CySolverTesterInst.success + # Check that the correct error is raised when an incorrect y0 is provided y0_bad = np.asarray((-10., 0., 10.), dtype=np.float64) # Should only have 2 values with pytest.raises(AttributeError): @@ -73,3 +80,13 @@ def test_CySolverTester_change_param(rk_method, complex_valued): # Check again with the wrapper change function with pytest.raises(AttributeError): CySolverTesterInst.change_parameters(y0=y0_bad) + + # Check changing rtol/atol to a bad array + # Too many rtols and atols + bad_rtols = np.asarray((1.0e-6, 1.0e-7, 1.0e-8), dtype=np.float64, order='C') + bad_atols = np.asarray((1.0e-7, 1.0e-8, 1.0e-9), dtype=np.float64, order='C') + # Check again with the wrapper change function + with pytest.raises(AttributeError): + CySolverTesterInst.change_parameters(rtols=bad_rtols) + with pytest.raises(AttributeError): + CySolverTesterInst.change_parameters(atols=bad_atols) diff --git a/Tests/D_Numba_Tests/test_a_numba.py b/Tests/D_Numba_Tests/test_a_numba.py index 1b25114..caa5fd4 100644 --- a/Tests/D_Numba_Tests/test_a_numba.py +++ b/Tests/D_Numba_Tests/test_a_numba.py @@ -29,6 +29,9 @@ def diffeq(t, y): rtol = 1.0e-7 atol = 1.0e-8 +rtols = np.asarray((1.0e-7, 1.0e-8), dtype=np.float64, order='C') +atols = np.asarray((1.0e-8, 1.0e-9), dtype=np.float64, order='C') + def test_nbrk_test(): """Check that the builtin test function for the nbrk integrator is working""" @@ -38,7 +41,9 @@ def test_nbrk_test(): @pytest.mark.parametrize('complex_valued', (True, False)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_basic_integration(rk_method, complex_valued): +@pytest.mark.parametrize('use_rtol_array', (True, False)) +@pytest.mark.parametrize('use_atol_array', (True, False)) +def test_basic_integration(use_atol_array, use_rtol_array, rk_method, complex_valued): """Check that the numba solver is able to run with its default arguments""" if complex_valued: @@ -46,8 +51,18 @@ def test_basic_integration(rk_method, complex_valued): else: initial_conds_to_use = initial_conds + tol_dict = dict() + if use_atol_array: + tol_dict['atols'] = atols + else: + tol_dict['atol'] = atol + if use_rtol_array: + tol_dict['rtols'] = rtols + else: + tol_dict['rtol'] = rtol + time_domain, y_results, success, message = \ - nbrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method) + nbrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, **tol_dict) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray diff --git a/pyproject.toml b/pyproject.toml index d1983ab..405dc28 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0a2' +version = '0.7.0a3' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 3fd7466386b30555d4911008f5d2584e3ac4f92f Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Mon, 28 Aug 2023 08:33:31 -0400 Subject: [PATCH 25/29] updated performance and readme --- Benchmarks/CyRK - SciPy Comparison.ipynb | 48 +++++++++--------- Benchmarks/CyRK_CySolver.pdf | Bin 11784 -> 13904 bytes .../CyRK_SciPy_Compare_pendulum_v0-7-0a1.png | Bin 40930 -> 0 bytes Benchmarks/CyRK_cyrk_ode.pdf | Bin 11784 -> 13904 bytes Benchmarks/CyRK_numba.pdf | Bin 11750 -> 13874 bytes Benchmarks/SciPy.pdf | Bin 11743 -> 13874 bytes .../CyRK_SciPy_Compare_v0-6-0a4.png | Bin .../CyRK_SciPy_Compare_v0-6-2-dev4.png | Bin Performance/cyrk_performance-DOP853.csv | 1 + Performance/cyrk_performance-RK23.csv | 2 + Performance/cyrk_performance-RK45.csv | 1 + README.md | 6 ++- pyproject.toml | 2 +- 13 files changed, 33 insertions(+), 27 deletions(-) delete mode 100644 Benchmarks/CyRK_SciPy_Compare_pendulum_v0-7-0a1.png rename Benchmarks/{ => archive}/CyRK_SciPy_Compare_v0-6-0a4.png (100%) rename Benchmarks/{ => archive}/CyRK_SciPy_Compare_v0-6-2-dev4.png (100%) diff --git a/Benchmarks/CyRK - SciPy Comparison.ipynb b/Benchmarks/CyRK - SciPy Comparison.ipynb index 89e431c..c098f87 100644 --- a/Benchmarks/CyRK - SciPy Comparison.ipynb +++ b/Benchmarks/CyRK - SciPy Comparison.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 1, "id": "971e366b", "metadata": {}, "outputs": [], @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 2, "id": "eff22823", "metadata": {}, "outputs": [], @@ -40,7 +40,7 @@ "rtol = 1.0e-7\n", "atol = 1.0e-8\n", "\n", - "use_pendulum = True\n", + "use_pendulum = False\n", "\n", "if use_pendulum:\n", " from CyRK.cy.cysolvertest import CySolverPendulum as CySolverTester\n", @@ -122,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 3, "id": "bdae6603", "metadata": {}, "outputs": [ @@ -135,7 +135,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAGwCAYAAABb3Do8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHc0lEQVR4nO2deXxVxfn/3wkJyhIWZQkgEFEBQRFFQBDBDUvpV0Vs8duqtdRWvlh/XbSi1FpabcEuLrUubbWiUBXbqi1WVFzADRCDggvgAkQ0QJA1YcsC8/tjZnKy3Nz1rDfP+/Wa15zcO2fOc0/uPedznnnmmRxAIQiCIAiCIDRJbtAGCIIgCIIghB0RTIIgCIIgCAkQwSQIgiAIgpAAEUyCIAiCIAgJEMEkCIIgCIKQABFMgiAIgiAICRDBJAiCIAiCkIC8oA3IJrp3705FRUXQZgiCIAiCkAIFBQVs2rQpbhsRTC7RvXt3SktLgzZDEARBEIQ06NGjR1zRJILJJaxnqUePHuJlEgRBEISIUFBQQGlpacJ7twgml6moqBDBJAiCIAhZhgR9C4IgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRAYpgEQRAEoRnQunVrOnXqRE5OTtCm+IZSim3btrFv376M+xLBJAiCIAhZTE5ODpMnT+bMM88M2pTAWLx4MbNnz0YplXYfIpgEQRAEIYuZPHkyY8aM4YknnmDt2rXU1NQEbZJv5OXl0b9/fyZNmgTAQw89lH5fbhklCIIgCEK4aNOmDWeeeSZPPPEEzz77bNDmBMK6desAuOSSS5g3b17aw3MS9C0IgiAIWcqRRx4JwNq1awO2JFjs5+/UqVPafYhgEgRBEIQsxQZ4N6dhuFjYz59JwLsIJkEQBEEQhASIYBIEQRAEQUiACCZBEARBEIQEiGASBEHISlogE6EFwT1EMAmCIGQdLYCXgR3A1UDzyewsCF4hgkkQBCHr+AEwBigA7kWLp96BWiSEh9YBlVT5/PPPmTp1ar3XRowYwd69e+nVq1caPWaGCCZBEISsohtwq9l+AtgLnIUWTXLJb+60Rn8jgiipiqZly5YxdOjQeq/ddddd3HXXXWzcuDHF3jJHfj2CIAhZxe1AO2AZ8E1gELATOAYYFaBdgpAaDQXT5ZdfTq9evZg1axYAX/va11i7di0ff/wxV155pef2SESgIAhC1nAWWiQdBKYCClgP/BuYDHwDeC0o44QQsA9oE+CxU2HZsmX89re/pU2bNhw6dIiZM2fy85//nD179tCiRQvuuOMOzjrrLMrLy3nnnXd46qmn2Llzpye2gwgmQRCELOL7pv4rsLLO6/9EC6aLgR8Bh/w1SwgV6a2k5j/FxcUcPHiQU045hXPPPZft27fXLp47bNgwPvzwQzZt2gTAggUL+MpXvsK8efM8s0cEkyAIQlaQA5xjth9v8N5LwC50fNNI4A3/zBKENKmsrGTVqlVMnDiRq666ivPPPx+lFADdu3entLS0tu0XX3xBjx49PLVHYpgEQRCyghOALujw2mUN3qsG/mO2v+GnUYKQEcuWLeOHP/whL730Eq+88krt67HWhLNiyitEMAmCIGQF1rv0GlogNeSfpr4YycskRIWVK1dSU1PD9ddfX+/10tLSeh6lo446is2bN3tqiwgmQRCErOBcU7/cxPsvAruBHsAIXywShEy59NJLue+++/j444/rvb58+XJOOOEEunfvTtu2bRk/fjwvvPCCp7ZIDJMgCELkyUMnqgQdrxSLKmA+cDl6WG6JD3YJQurk5OTQuXNnrrzySvr168dFF13UqM3Bgwe57rrrWLRoEbm5ufzud79jx44dntoVSQ/T1KlTWb9+Pfv376e4uJhRo+LnFhk9ejTFxcXs37+fdevWMWXKlEZt2rdvzz333MOmTZvYv38/q1ev5qtf/apXH0EQBMFFhgNtgS+B9+K0+5epx3tukSCky+jRo9m8eTOXXXYZEydOpLy8PGa7Z555hn79+nHcccfxwAMPeG5X5DxMkyZN4q677uLqq6/mzTffZMqUKTz33HMMGDCAzz//vFH7oqIiFixYwAMPPMBll13G6aefzn333ceXX37JU089BUB+fj4vvvgiW7du5etf/zpffPEFPXv2pKKiwu+PJwiCkAY2fukVdO6lpnjT1H3RAmuPl0YJQlq8+uqrtGjRImgzYqKiVJYtW6buu+++eq+tXr1azZw5M2b72267Ta1evbrea/fff79asmRJ7d9TpkxRn376qcrLy0vajpYtW6qCgoLa0r17d6WUUgUFBYGfIylSpDS38poCpeD7SbTdaNqeHgK7pXhdevfurebMmaN69+4duC1hPQ8FBQVJ3b8jNSSXn5/PkCFDWLhwYb3XFy5cyMiRI2PuM2LE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q5kzZwZuW7aWTp06KaWUOuOMMwK3JRtLmzZt1EcffaTOOecctWjRIhFMHpRZs2ap1157LXA7sr0888wz6sEHH6z32r/+9S81Z86cwG3LlhJLMG3atElNmzat9u+WLVuqnTt3qquuuspze2RILqTk5+czZMgQFi5cWO/1hQsXMnLkyICsyn7at28PwI4dOwK2JDu59957efbZZ3n55ZeDNiVrueCCCyguLuYf//gHZWVlvPPOO3zve98L2qys44033uCcc87huOOOA2DQoEGMGjWKBQsWBGxZ9nL00UfTrVu3evfFqqoqXn31VV/ui7L4bkjp1KkTeXl5lJWV1Xu9rKyMwsLCgKzKfu644w5ef/11Pvzww6BNyTouueQSTjnlFIYOHRq0KVlNnz59mDp1KnfccQczZ85k2LBh3H333VRWVjJ37tygzcsafvvb39K+fXvWrl3LwYMHadGiBTfddBPz5s0L2rSsxd77Yt0Xe/fu7fnxRTCFHKVUvb9zcnIavSa4wz333FP7lCi4y1FHHcUf//hHzjvvPFlCwmNyc3MpLi7mpptuAmDlypUMHDiQqVOnimBykUsuuYTLLruMb33rW3z44YcMHjyYu+66i02bNjFnzpygzctqgrovimAKKdu2baOmpqaRN6lLly6N1LWQOXfffTcXXHABo0ePprS0NGhzso4hQ4bQtWtXVqxYUftaXl4eo0eP5pprruGwww7j0KFDAVqYPWzevJnVq1fXe23NmjVcfPHFAVmUnfz+97/ntttu44knngDggw8+oHfv3kyfPl0Ek0ds2bIF0J4muw3+3RclhimkVFdXs2LFCsaOHVvv9bFjx7JkyZKArMpO/vSnPzFx4kTOPvtsSkpKgjYnK3n55Zc54YQTGDx4cG15++23efTRRxk8eLCIJRd588036devX73X+vbty2effRaQRdlJ69atG31vDx48SG6u3Fa9YsOGDWzevLnefTE/P58xY8b4dl8MPBJeSuxi0wpMnjxZ9e/fX91xxx2qoqJC9erVK3DbsqXce++9aufOnWr06NGqa9euteXwww8P3LZsLzJLzpty6qmnqqqqKjV9+nR1zDHHqG9+85tqz5496lvf+lbgtmVTmT17tvr8889r0wpMmDBBbd26Vd12222B2xbl0qZNG3XSSSepk046SSml1I9//GN10kkn1abTmTZtmtq5c6eaMGGCGjhwoHr00UclrYAUXaZOnao2bNigDhw4oIqLi2W6u8ulKa644orAbcv2IoLJu/K1r31Nvffee2r//v1q9erV6nvf+17gNmVbadu2rbrzzjtVSUmJ2rdvn/r000/VrbfeqvLz8wO3LcplzJgxMa/Js2fPrm0zY8YMtWnTJrV//361ePFiNXDgQF9syzEbgiAIgiAIQhPIYKsgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgJODOO+/k6aefDtoMQRACRASTIAhCAoYOHcry5cuDNkMQhACRteQEQRCaIC8vj71799KyZcva19566y1OO+20AK0SBCEI8oI2QBAEIawcPHiQUaNGsXz5ck466STKyso4cOBA0GYJghAAIpgEQRCaQClF9+7d2bZtG++9917Q5giCECASwyQIghCHk08+mVWrVgVthiAIASOCSRAEIQ6DBw8WwSQIgggmQRCEeJx44okyHCcIgggmQRCEeOTm5jJo0CC6detGu3btgjZHEISAEMEkCIIQh5///OdccsklbNq0iV/84hdBmyMIQkBIHiZBEARBEIQEiIdJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEBIpgEQRAEQRASIIJJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEB/x+168bdU72dAAAAAABJRU5ErkJggg==", + "image/png": "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U6NGjUq97Hk6Hn/8cXXppZeqo48+Wh133HHqF7/4hVqzZo0aMWKEaB3h8Vd/9Vfqox/9qDrssMPUYYcdpr7xjW+o7u5udfTRR4vGMR0nn3yyeuutt9TLL7+sbr/99r73Retojvnz56uVK1eqCRMm9B3jxo3Lis7pC1TU4/nnn1d33323671XXnlFfetb30q9bEU4Kjk869atU9dee23fv5uamtSWLVvUlVdemXp583yMGzdOKaXU6aefLlrHfGzatEn99V//tWgcwzFy5Ej12muvqQ9/+MPqmWeecTk8onU0x/z589Xvf//7qp+nqbNMacXEkCFDOOmkk1i4cKHr/YULF3LaaaelVKpiM23aNCZOnOjSvKenhyVLlojmIRk9ejQAmzdvBkTrOBg0aBAXXnghI0eO5LnnnhONY+Cuu+7il7/8JYsWLXK9L1pHy2GHHUZbWxtvvfUWDz74INOmTQPS11keHhoT48aNo7GxkY6ODtf7HR0dtLa2plSqYmPrWknzgw8+OI0iFYbbbruNZ599ltWrVwOidZRMnz6d5557jmHDhrFjxw7mzp3LH//4Rz7wgQ8AonFUXHjhhZx44onMmDFjwGdSn6PjhRde4HOf+xyvv/46EyZM4Ctf+QpLly7lmGOOSV1ncXhiRinl+ndDQ8OA94RoEc2j5Tvf+Q7HHXdcxYR70To8r732GieccAJjxozhk5/8JA888ACzZs3q+1w0Ds+UKVP413/9V84666yajzYQrcPzxBNP9L1etWoVzz33HG+++SaXXnopzz//PJCezjKlFRMbN26kt7d3QDRn/PjxA7xbIRrWr18PIJpHyB133MG5557Lhz70Idra2vreF62jY8+ePbz55pssX76cG264gRUrVvD3f//3onGEnHTSSUyYMIHly5ezZ88e9uzZw+zZs5k3bx579uzp01O0jp6uri5WrlzJYYcdlnqdFocnJvbs2cPy5cuZM2eO6/05c+awdOnSlEpVbN5++23a29tdmg8ZMoRZs2aJ5gG48847Of/88znjjDNYs2aN6zPROj4aGhoYOnSoaBwhixYtYvr06Zxwwgl9x+9+9zt+8IMfcMIJJ/DWW2+J1jHR1NTEUUcdRXt7eybqdOpZ3UU97GXpl19+uTryyCPVbbfdprZv364OOuig1MuW12PkyJHq+OOPV8cff7xSSqkvfvGL6vjjj+9b6n/ttdeqLVu2qE984hPqmGOOUT/4wQ9kaWmA46677lJbtmxRH/zgB13LS4cNG9Z3jWgd/vjmN7+pZs6cqQ4++GA1ffp09Y1vfEP19vaqM888UzSO+ei/Sku0jub4l3/5F/XBD35QTZ06VZ1yyinq5z//udq2bVtfv5eyzukLVOTjqquuUm+//bbavXu3WrZsmWtZrxz+j1mzZqlK3HfffX3XzJ8/X61bt07t2rVLLV68WB1zzDGplztvRzUuvfRS13Widbjj//7f/9tnHzo6OtSTTz7Z5+yIxvEe/R0e0Tqaw95Xp7u7W7333nvqpz/9qTrqqKMyoXOD9UIQBEEQBKGwSA6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwiMOjyAIgiAIhUccHkEQCs/tt9/OI488knYxBEFIEXF4BEEoPDNmzODFF19MuxiCIKSIPEtLEITC0tjYyM6dO2lqaup774UXXuDUU09NsVSCIKRBY9oFEARBiIu9e/cyc+ZMXnzxRY4//ng6OjrYvXt32sUSBCEFxOERBKGwKKWYNGkSGzdu5A9/+EPaxREEIUUkh0cQhELz/ve/nxUrVqRdDEEQUkYcHkEQCs0JJ5wgDo8gCOLwCIJQbI499liZzhIEQRweQRCKzaBBgzjuuOOYOHEiLS0taRdHEISUEIdHEIRC85WvfIULL7yQdevW8dWvfjXt4giCkBKyD48gCIIgCIVHIjyCIAiCIBQecXgEQRAEQSg84vAIgiAIglB4xOERBEEQBKHwiMMjCIIgCELhEYdHEARBEITCIw6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeP4/cZ4Fv1Dm5tcAAAAASUVORK5CYII=", "text/plain": [ "

" ] @@ -153,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 4, "id": "86846611", "metadata": {}, "outputs": [ @@ -166,7 +166,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAGwCAYAAABb3Do8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHc0lEQVR4nO2deXxVxfn/3wkJyhIWZQkgEFEBQRFFQBDBDUvpV0Vs8duqtdRWvlh/XbSi1FpabcEuLrUubbWiUBXbqi1WVFzADRCDggvgAkQ0QJA1YcsC8/tjZnKy3Nz1rDfP+/Wa15zcO2fOc0/uPedznnnmmRxAIQiCIAiCIDRJbtAGCIIgCIIghB0RTIIgCIIgCAkQwSQIgiAIgpAAEUyCIAiCIAgJEMEkCIIgCIKQABFMgiAIgiAICRDBJAiCIAiCkIC8oA3IJrp3705FRUXQZgiCIAiCkAIFBQVs2rQpbhsRTC7RvXt3SktLgzZDEARBEIQ06NGjR1zRJILJJaxnqUePHuJlEgRBEISIUFBQQGlpacJ7twgml6moqBDBJAiCIAhZhgR9C4IgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRAYpgEQRAEoRnQunVrOnXqRE5OTtCm+IZSim3btrFv376M+xLBJAiCIAhZTE5ODpMnT+bMM88M2pTAWLx4MbNnz0YplXYfIpgEQRAEIYuZPHkyY8aM4YknnmDt2rXU1NQEbZJv5OXl0b9/fyZNmgTAQw89lH5fbhklCIIgCEK4aNOmDWeeeSZPPPEEzz77bNDmBMK6desAuOSSS5g3b17aw3MS9C0IgiAIWcqRRx4JwNq1awO2JFjs5+/UqVPafYhgEgRBEIQsxQZ4N6dhuFjYz59JwLsIJkEQBEEQhASIYBIEQRAEQUiACCZBEARBEIQEiGASBEHISlogE6EFwT1EMAmCIGQdLYCXgR3A1UDzyewsCF4hgkkQBCHr+AEwBigA7kWLp96BWiSEh9YBlVT5/PPPmTp1ar3XRowYwd69e+nVq1caPWaGCCZBEISsohtwq9l+AtgLnIUWTXLJb+60Rn8jgiipiqZly5YxdOjQeq/ddddd3HXXXWzcuDHF3jJHfj2CIAhZxe1AO2AZ8E1gELATOAYYFaBdgpAaDQXT5ZdfTq9evZg1axYAX/va11i7di0ff/wxV155pef2SESgIAhC1nAWWiQdBKYCClgP/BuYDHwDeC0o44QQsA9oE+CxU2HZsmX89re/pU2bNhw6dIiZM2fy85//nD179tCiRQvuuOMOzjrrLMrLy3nnnXd46qmn2Llzpye2gwgmQRCELOL7pv4rsLLO6/9EC6aLgR8Bh/w1SwgV6a2k5j/FxcUcPHiQU045hXPPPZft27fXLp47bNgwPvzwQzZt2gTAggUL+MpXvsK8efM8s0cEkyAIQlaQA5xjth9v8N5LwC50fNNI4A3/zBKENKmsrGTVqlVMnDiRq666ivPPPx+lFADdu3entLS0tu0XX3xBjx49PLVHYpgEQRCyghOALujw2mUN3qsG/mO2v+GnUYKQEcuWLeOHP/whL730Eq+88krt67HWhLNiyitEMAmCIGQF1rv0GlogNeSfpr4YycskRIWVK1dSU1PD9ddfX+/10tLSeh6lo446is2bN3tqiwgmQRCErOBcU7/cxPsvAruBHsAIXywShEy59NJLue+++/j444/rvb58+XJOOOEEunfvTtu2bRk/fjwvvPCCp7ZIDJMgCELkyUMnqgQdrxSLKmA+cDl6WG6JD3YJQurk5OTQuXNnrrzySvr168dFF13UqM3Bgwe57rrrWLRoEbm5ufzud79jx44dntoVSQ/T1KlTWb9+Pfv376e4uJhRo+LnFhk9ejTFxcXs37+fdevWMWXKlEZt2rdvzz333MOmTZvYv38/q1ev5qtf/apXH0EQBMFFhgNtgS+B9+K0+5epx3tukSCky+jRo9m8eTOXXXYZEydOpLy8PGa7Z555hn79+nHcccfxwAMPeG5X5DxMkyZN4q677uLqq6/mzTffZMqUKTz33HMMGDCAzz//vFH7oqIiFixYwAMPPMBll13G6aefzn333ceXX37JU089BUB+fj4vvvgiW7du5etf/zpffPEFPXv2pKKiwu+PJwiCkAY2fukVdO6lpnjT1H3RAmuPl0YJQlq8+uqrtGjRImgzYqKiVJYtW6buu+++eq+tXr1azZw5M2b72267Ta1evbrea/fff79asmRJ7d9TpkxRn376qcrLy0vajpYtW6qCgoLa0r17d6WUUgUFBYGfIylSpDS38poCpeD7SbTdaNqeHgK7pXhdevfurebMmaN69+4duC1hPQ8FBQVJ3b8jNSSXn5/PkCFDWLhwYb3XFy5cyMiRI2PuM2LE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q5kzZwZuW7aWTp06KaWUOuOMMwK3JRtLmzZt1EcffaTOOecctWjRIhFMHpRZs2ap1157LXA7sr0888wz6sEHH6z32r/+9S81Z86cwG3LlhJLMG3atElNmzat9u+WLVuqnTt3qquuuspze2RILqTk5+czZMgQFi5cWO/1hQsXMnLkyICsyn7at28PwI4dOwK2JDu59957efbZZ3n55ZeDNiVrueCCCyguLuYf//gHZWVlvPPOO3zve98L2qys44033uCcc87huOOOA2DQoEGMGjWKBQsWBGxZ9nL00UfTrVu3evfFqqoqXn31VV/ui7L4bkjp1KkTeXl5lJWV1Xu9rKyMwsLCgKzKfu644w5ef/11Pvzww6BNyTouueQSTjnlFIYOHRq0KVlNnz59mDp1KnfccQczZ85k2LBh3H333VRWVjJ37tygzcsafvvb39K+fXvWrl3LwYMHadGiBTfddBPz5s0L2rSsxd77Yt0Xe/fu7fnxRTCFHKVUvb9zcnIavSa4wz333FP7lCi4y1FHHcUf//hHzjvvPFlCwmNyc3MpLi7mpptuAmDlypUMHDiQqVOnimBykUsuuYTLLruMb33rW3z44YcMHjyYu+66i02bNjFnzpygzctqgrovimAKKdu2baOmpqaRN6lLly6N1LWQOXfffTcXXHABo0ePprS0NGhzso4hQ4bQtWtXVqxYUftaXl4eo0eP5pprruGwww7j0KFDAVqYPWzevJnVq1fXe23NmjVcfPHFAVmUnfz+97/ntttu44knngDggw8+oHfv3kyfPl0Ek0ds2bIF0J4muw3+3RclhimkVFdXs2LFCsaOHVvv9bFjx7JkyZKArMpO/vSnPzFx4kTOPvtsSkpKgjYnK3n55Zc54YQTGDx4cG15++23efTRRxk8eLCIJRd588036devX73X+vbty2effRaQRdlJ69atG31vDx48SG6u3Fa9YsOGDWzevLnefTE/P58xY8b4dl8MPBJeSuxi0wpMnjxZ9e/fX91xxx2qoqJC9erVK3DbsqXce++9aufOnWr06NGqa9euteXwww8P3LZsLzJLzpty6qmnqqqqKjV9+nR1zDHHqG9+85tqz5496lvf+lbgtmVTmT17tvr8889r0wpMmDBBbd26Vd12222B2xbl0qZNG3XSSSepk046SSml1I9//GN10kkn1abTmTZtmtq5c6eaMGGCGjhwoHr00UclrYAUXaZOnao2bNigDhw4oIqLi2W6u8ulKa644orAbcv2IoLJu/K1r31Nvffee2r//v1q9erV6nvf+17gNmVbadu2rbrzzjtVSUmJ2rdvn/r000/VrbfeqvLz8wO3LcplzJgxMa/Js2fPrm0zY8YMtWnTJrV//361ePFiNXDgQF9syzEbgiAIgiAIQhPIYKsgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgCIIgJEAEkyAIgiAIQgJEMAmCIAiCICRABJMgCIIgCEICRDAJgiAIgiAkQASTIAiCIAhCAkQwCYIgJODOO+/k6aefDtoMQRACRASTIAhCAoYOHcry5cuDNkMQhACRteQEQRCaIC8vj71799KyZcva19566y1OO+20AK0SBCEI8oI2QBAEIawcPHiQUaNGsXz5ck466STKyso4cOBA0GYJghAAIpgEQRCaQClF9+7d2bZtG++9917Q5giCECASwyQIghCHk08+mVWrVgVthiAIASOCSRAEIQ6DBw8WwSQIgggmQRCEeJx44okyHCcIgggmQRCEeOTm5jJo0CC6detGu3btgjZHEISAEMEkCIIQh5///OdccsklbNq0iV/84hdBmyMIQkBIHiZBEARBEIQEiIdJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEBIpgEQRAEQRASIIJJEARBEAQhASKYBEEQBEEQEiCCSRAEQRAEIQEimARBEARBEBIggkkQBEEQBCEB/x+168bdU72dAAAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAGwCAYAAACtlb+kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACEUElEQVR4nO2deZxdVZXvv5VUKmNVEghJZQASkDkMAqGRDiYiQcQWDPoAQQWablp8vLToaxponxFb5UkzpEFom/cQaJ+iqNAoCgYCibRhMEFiEmQQCIRKpcxcSSqpSiX7/bHPqX1O1R3OPK7v53M+5+bec0/t+8vea6+99tr7NAAKQRAEQRCEAjMo7QIIgiAIgiDEjTg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwtOYdgGyxKRJk9i+fXvaxRAEQRAEwQfNzc2sW7eu5jXi8FhMmjSJtra2tIshCIIgCEIAJk+eXNPpEYfHwo7sTJ48WaI8giAIgpATmpubaWtrq9t3i8PTj+3bt4vDIwiCIAgFQ5KWBUEQBEEoPOLwCIIgCIJQeMThEQRBEASh8EgOjyAIgiDkgBEjRjBu3DgaGhrSLkpiKKXYuHEjXV1doe8lDo8gCIIgZJiGhgYuv/xyZs+enXZRUmPx4sXcd999KKUC30McHkEQBEHIMJdffjmzZs3ixz/+Ma+++iq9vb1pFykxGhsbOfLII7ngggsA+N73vhf8XlEVShAEQRCEaBk5ciSzZ8/mxz/+Mb/85S/TLk4qvPnmmwBceOGF/OhHPwo8vSVJy4IgCIKQUfbff38AXn311ZRLki727x83blzge4jDIwiCIAgZxU5QLtM0ViXs3x8mYVscHkEQBEEQCo84PIIgCIIgFB5xeARBEARBKDzi8JSGwch/txPRQhAEoUyI1S8Fk4FNwPfTLkhG+BTQDVycdkEywl3Ae8DUlMuRBYYCLwNPAuXZzbY604HNwD+mXZCMcBWwAfjLtAuSEQ4BjkYPqLOPODyl4BPAaHQH/750i5IJbkVvQfUDpFMD+ALaKf5u2gXJAO8HjgfORLebsnMVMBb438D4lMuSBe4GxgH/lWopRqR0uBmErhvDgYkVy7l27Vquuuoq13sf+MAH2LlzJwcddFCg3x4GcXhKgdPJ+evUSpFNPpx2AVJmiuP1HCqZtXJxjOP11amVIjsc4Hh9eWqlyCbvT+WvjgB2pnS4rcMwx+v9K5b1+eefZ8aMGa73FixYwIIFC3j33Xd9//awiMNTCk5wvD4prUJkhGHoaIbNcWkVJCMc63g9CJnWmu54fXhqpcgOTgew7HpM7vfvw1IpRXYY7njdSKVprf4Oz2c/+1kOOuggbrrpJgA+9rGP8eqrr/L6669zxRVXxFxeebRESXB26v0bbdnoP988pdqFJWF6v39PAV5JoyAZwdnBT0TXlb0plSVtmnB36mVvK8f0+/eBqZSiCxiZyl/Wf9swvN+nTcAu1zvPP/883/72txk5ciT79u3jW9/6Fl/5ylfYsWMHgwcP5rbbbuNDH/oQnZ2dvPTSSzz88MNs2bIltvKLw1N4hgH7Of5ddqPV30iV3QE8pN+/y14/DnW8Hgy0Am0plSVtDgSGOP4tdcNNenoEe5JU1Azt9+8h9Hd4li1bxt69eznxxBM588wz2bRpU9/DP0855RRWr17NunXrAPjVr37FRz7yEX70ox/FVmJxeApP/7nV0ejxwc4UypIF9uv377IbcdHDTSU9yurw9NcinYhGdpC24qa/+9A04Iru7m5WrFjB+eefz5VXXsnHP/5xlFIATJo0ibY207bee+89Jk+OdwAqOTyFx3Z4OoBO63WZoxq2Hq9Z5zJrAcaI23qU2YgPBsZYr209ytzJ928rzUBLSmXJAnZbsR/iWea6ASY1YLd1HujwgJ7WmjdvHk899RRPP/103/uVnollO0NxIQ5P4bEb6Sb0XitQ7k7e1uMP1nkS5V6a3l+PMjs8YxyvV1rnMuth14216L14QPQAaSs2doTHnsYaUvGql19+md7eXv7hH/7B9X5bW5srojNlyhTa29tjKKdBHJ7CY4/SNmFC82VuqLYer6CTUYdQ7v1FxIgbbC22AWus16KHdnbswVKZoxr928pEyp0VYv92O6OocoTnkksu4e677+b11193vf/iiy8yffp0Jk2axKhRozjnnHP49a9/HV9xKff/VkmwO/jNgJ39LhEe+DOwHq3FFPSUXxnpb8SlQ5MO3qa/HschDiDoKa0edAc/ER0BKxsNmMi4HeExDk9DQwMHHHAAV1xxBUcccQRz584dcIe9e/fy5S9/mWeeeYZBgwZx8803s3nz5gHXRYk4PIXHOaW13npdeVfMcuCMeLWjHZ7W9IqTKkMwORmrrfMY6/09aRQoZZwdvN1WxqVUlizg1MPuzA6ocm0ZsPXYiB4wTUHXjzI6PLbroNCP6XG+Bx/84Ad5+umnefXVVzn//PPp7OzsfwMAfvGLX/CLX/wi1pI6EYen8Dg7+I3W6/6rDcqE04hvsl6PTaksaWP/7n3AO9bZ3i7+z2kVKkWc0VB7pCltxe3wiB6mfkyhvHrYrkOvdTjfgyVLljB4cPaeryU5PIXH6fDYU1plbaTg1qPsnZr9u7eijdbWfu+XDWc0tOx1AwZ28M73yojoYbCdmb24N+bMnpPjRByewjPGOm9BGimY3y56uA248yx6iBYgejgZiYlyiR7uCI9CR4dBHB4hZUZZ5+1IIx2EefxdJxLxsvN37Pn1steP0da5E6PFKKqtPik+th7bMG2lrNO/Y6zzHnSSbtlthzPCA5WmtbKIODyFx3Z4diJGy/ms351IB2/XjR3Wuex62E8o2oF2emxjXtb24tRD6oZG2orGdh3syI7dViTCI6SKs1NzNtIybrZna7EXvTuorUfZOzT7MSNlN+JOPRQyincOlqRuaKStaCTCI2QSZ0O1Dfhg9DbxZUOMlhuJ8LgRPdw420vZtZC64aZ/hEccHiETOBvqbswmUWWMaojRciMOoBvRwzAYGGa9dkaHRzjeLxNSN9zIlJaQSaShGvprUfYpi2p5CWV0hkHyNJyMdLzeic5pskfxZawfYkfd2K6DTGkJmWEQYsSdVIvwjKXcOU1ixDWih8G2G3sxO+mWeYAg0WE3diRHprSEzOBclWQ3VDFaAyM8gzFLtMuEjFrdiB6G/h08lFsPqRtuZEpLyBx2I92Hzt+Bck9b9I92dWMMWBkNV7VR6/4Vri0DooehfwcP5e7kqzk8w3APLMuCt6TltWvXctVVV7ne+8AHPsDOnTs56KCDYi1hJcThKTSVRmkS4XEb8a3WeTTlo78R32adyxjtAtHDSf/BAZS7rfS3HTswnX0a9WNESodN/2XplSM8zz//PDNmzHC9t2DBAhYsWMC7774b8LcHRxyeQlNplGbvqlvmZelOI27rIZ1aubVw7sItelQeHGy3zmI7NGnVjxHo/5c0DruNeJvS6u/wfPazn+Wggw7ipptuAuDhhx9m8+bN/OQnPwkuhw/E4Sk0lSI8YsQrO4Cih9FiKOV7nEL/Xbih3HWj1mBJ9NCUWY9qDo/bpXj++ec56qijGDlyJMOHD+db3/oWX/nKV9ixQ/dJd9xxB5/73OcSKTFkPaVaCIl08G4qjdJk1OoO09u0ABuTLU6qOPPd7L2qpG7IYMkmSxGvLtzbBiT9t2HgsvTKDw9dtmwZe/fu5cQTT+TMM89k06ZNfO973+v7fPHixcyaNSvOArsQh6fQiNFyIw6gm/71Y5/1ehTldXikbmikrbjJmi3tqn9JrPRflm47Pg3WoQDo7u5mxYoVnH/++Vx55ZV8/OMfRymVbFEdyJRWocnSqCQLSKfmplanVrb6IR28G2krbkQPN/2ntPY5PhuYxzNv3jyeeuopnn766SQKVxVxeAqNvQX8Lsd7ZW6kdp6Gc3RUZj3EiBtECzeihxtxiA1Ot8Hp6FROXH755Zfp7e3lH/7hH+IuWF1Sd3g+//nPs2LFCrZt28a2bdtYunQpZ599tuua+fPn09bWRldXF8888wxHH3206/OmpibuuOMONmzYwI4dO3j00UeZPHlykj8jowy3zuLwaMQBdCN6GGppMYzyJXHbtqPS4KBs0T+QtuLEuSt9fYfnkksu4e677+b111+Pu2B1Sd3hee+997juuus4+eSTOfnkk3n66ad59NFH+5yaa6+9li996UtcffXVzJgxg/Xr1/Pkk08yatSovnssWLCAuXPnctFFFzFz5kxGjRrFY489xqBBqf+8lLEb6W7He2VtpFBbj7IZ8cGYFD6pH5U7tO2O12WrH5Xaiq1H2eoGyODRid2v9s/FMSu1GhoaGD9+PNdffz1HHHEE8+fPr3inJ554gp/85Cecc845rF27lpNPPjmuQvehsnZs2rRJ/fVf/7UC1Lp169S1117b91lTU5PasmWLuvLKKxWgWlpaVHd3t7rgggv6rpk4caLq7e1VZ511lue/2dzcrJRSqrm5OfXfH90xX4FScJfjvWnWe9szUL6kj99av/08x3uft977aQbKl+QxyvrdSsEwx/s/s977uwyUMcnjfOt3/6bf+zus96dloIxJHt+1fvdXHO+dZr33egbKl/TxlvXbT3G89zXrve/E+rcPPvhg9R//8R/q4IMPzoAOKBiq4CQFJ/R7/0jr/dFq1qxZau/evWr16tXqlFNOieTv1tLBa/+dqRDIoEGDuPDCCxk5ciTPPfcc06ZNY+LEiSxcuLDvmp6eHpYsWcJpp50GwEknnURTU5Prmvb2dlatWtV3TSWamppobm52HcWj1ihtFBkI8CWMRLwMwxyvux2vyzqKr1Q3oLwRQIlouJGIl8Ge0trX730zpbVkyRIGDx7MMcccw4svvphg2WqTiR5v+vTpbN++ne7ubr773e8yd+5c/vjHP9La2gpAR0eH6/qOjo6+z1pbW+nu7mbr1q1Vr6nE9ddfT2dnZ9/R1tYW7Y/KBLbRqtTBgxhxKK8Rd9YN5XhfOng3Za0fMjhwI7bDUG9KK7sPEM2Ew/Paa69xwgkncOqpp/Jv//ZvPPDAAxx11FF9n/dft9/Q0FB3LX+9a2666SZaWlr6jmImOVfKS+jBjOjL1lDFiBvqRTRED43oYbC1GE75tnAT22HovyTdRhweT+zZs4c333yT5cuXc8MNN7BixQr+/u//nvXr1wMMiNSMHz++L+qzfv16hg4dypgxY6peU4menh62b9/uOopHpQgPyCheRmnSwfdH9HBTqa1IErc4PFB/SisTbkVFMlmyhoYGhg4dyttvv017eztz5szp+2zIkCHMmjWLpUuXArB8+XJ6enpc17S2tjJ9+vS+a8pLpQgPlHfuWVZpGWQKx001PaStGPZi9qEpkx5DHa+THyzZMxWNjVmJqlWb0qr8eImosH9/mJ2aU1fwm9/8Jo8//jhr166lubmZiy66iNmzZ/ftxbNgwQJuuOEG3njjDd544w1uuOEGurq6+OEPfwhAZ2cn9957L7feeiubNm1i8+bN3HLLLaxcuZKnnnoqzZ+WAWTU6qbWqLUF55boxada3ZAO3k1Z20qt+jGScukx3PE6+QjPpk2bADjyyCN58803Y/1b3khnSuvII48EYOPG4I+8Sd3hmTBhAt///veZOHEi27Zt4w9/+ANnn312n7Ny8803M3z4cO6++27Gjh3LCy+8wFlnndX3tFWAa665ht7eXh566CGGDx/OokWLuOyyy9i3r/9/SNmQUbyhATNSq5bEPQp32L7ISAfvRlZpuallO1opV/2w68ZeoNfxfjJ1Y+fOnSxevJgLLrgAgFdffZXe3t4634qTscAEtOPbXeH9EUQ5cGxsbOTII4/kggsuYPHixXR1BX+OWOoOz9/8zd/UvebGG2/kxhtvrPp5d3c38+bNY968eVEWrQBIp2ZwhqWdenSjE7mb0HqUxeGp5wxLB68pY1sBsR1O6qUGjEB3pfE5Iffddx8AF154YWx/wzvNwH7oXbg3ON4fCYxD15nq+bNBWbx4cZ8OQUnd4RHiRDo1gzMsXUmPcWgjXsTtCSohHZob0cON6GGotvijfxL3lthKoJTie9/7Hj/60Y8YN24cDQ0N9b8UG58DbgB+Afwvx/sfBO4BVgJXRvbXlFJs3LgxVGTHRhyeQiN5GgZbi17MXLON0+EpC9KhuRE93EjEy1CtbuxB6zMcrUd8Do9NV1cX7777bux/pzY9aE06gXcc779tvd/S7/3skMlVWkJUiNEyVNMCyh3xqrUqKc1RZNLIKi03ktNkqDalBeW2pfkbHIjDU2hk1GqopgWUs1OrVzdAJ3GXBWkrbiQ6bKjWwUM560c1BzD7WojDU2gkh8fgJcKT3YYaPdWM1m50qB7KqYdENGAIZmlx/jq16Kk1WCpj/ajXVkaS1d2WxeEpNDJKM3gxWmXSw8uotUxGXKZ/Dc4Hy0rES6a0+uM1iTt7iMNTaEZYZzHiEuHpjziAbmRKy+B0eLr7fVZGPWoNDso8eOxvS/c43hOHR0iUJsdrMeISlu5PLQewzEa82qi1mfIkccvgwI0MDtzkN6dJHJ7C4iUsLR28JtuNNB7EiLupN6U1CJ2bUAZkcOBGprTc5HcBiDg8hcW50V5Pv8/K3Ej7h+gh6400HsThcVNNj12YHXTLoofUDTf5jWjEQ34dQHF4Ckul50bZlLGDr6VHthtpPEin5kb0MEjOihupG27y6wCKw1NY7A6+UkTDrpRNuJ8xVWS86JHNRhoPMm3hRvQwyODAjdQNN/m1peLwFBY7ablSpdzheJ3Nihk9+W2k8WDr0X+6E0SP/pRND2krbqRuuMlv/RCHp7DUqpT7cK8+KQP5baTxUMshLtu0xRDHa9HDW1spUxK3tBU3tepHtvUQh6ew1KqUkPWKGT219LAjXmVx/sCb0SqLHs5pXdHDdPCVIhq7MA/fLYse0lbceNEjm4+lEYensHh1eMrSUGuFpcumBYgRdyIOj5t6tqNsAwRpK27ya0vF4Sks4vC48RKWHgY0JlOc1BEjbrC12AOoCp+XVY96tiObo/jokbbixostzaYe4vAUllpeOMgozYnzGTBlM+KV6kdZ64a0FY0MltxIW3GTXwdQHJ7CIqM0N7X06MUsOc1mQ40eL6M0qRuasupRzQHMdqcWPV7aShPu5PciIw6PkDlqNVLIesWMHhm1usmv0YoeaStuRA83XqPDZdCjAePY5S/iJQ5PYZEO3o0kYroRh8cgbcWNtBU3tfTYS9afEB4tzodS5y86LA5PYREj7kbC9G7yu7Q0eqRuuBHb4Ub0MOR7RaM4PIVFGqkbr2H6snTytfZasbUoy+Zy0lbcSE6TG3GIDU6HR5alC5lBjLgb0cMw2Dqgsh5d6N24oRx6yBSOm1rOMJSrrUD9wVKZ6ocfO9oQf3F8Ig5PYZGltm7E4THUC0tDueqHRP/cSFtxIxEvg1dnGLIYHRaHp7CIEXcjRtzgxeEpU/2QuuFG9HAjehjqabGbLD96RByewiKN1I1MWxhsLfZhjFN/ylQ/JEfDjdgON6KHoZ4WkOXBkjg8hUUaqRvp1Az1on9QLj28tpWhlGNzOZkOdyO2w+DH4cmeHuLwFBZxeNzIZmqGfBut6PEa/YNy6CHT4W7EdhjqOX+QZT3E4Sks4vC4kcRDgzg8burpUbZHj4jtcDPMOst0eN6jw+LwFBavYekydPAgRtyJF4enjEbcy6i1DO1F2orBOYUpeuR9sCQOT2HxarRkczlNdhtp9PgJS0sHrylj/ZC2Iisa+5PvwZI4PIWlXuhxJ2ZzuTI1VEnEzHtYOnrE4XHjZ+PB7G0uFy31dhaGctWNfA+WxOEpLPn2xKNlENBovZZRq3Tw/RE93PhJ4i56dNjWohczQOxPmepGvgdL4vAUFjHihnpP+IXyaAFSN/ojeripp8cuzP5N2RvFR0u+O/joyXdbEYensOS7YkaLzMO7kbrhxkvSclmioSD1w4lEyt3ku26Iw1NY8l0xo8Xp8Oypco2txTDM9FdRyfdeGtGT791jo0fqh0HsqJt86yEOT2HxYrTKMjKxtdhd45oybS7nJUxfpm0L8m3Eo0emcQziDLvJdzRUHJ7C4sdoFb2henH+yrS5nHTwbkQPN6KHwU+0qwl3vmARybcDKA5PYZFRmsGLFlAePaRDcyN6uJG8FYOfaCgUX498txVxeAqLn91js1cxo0UcHjdSN9yIHoZBwGDrdT73WokWLx38XqDLel30+pHv/K7UHZ7rrruOF198kc7OTjo6OnjkkUc4/PDDXdfcd999KKVcx3PPPee6pqmpiTvuuIMNGzawY8cOHn30USZPnpzkT8kYYsQNXrSA8unhdZRW9M3l/Iziy1I3IK+j+GjxOlgqW/3IZ91I3eGZNWsWd911F6eeeipz5syhsbGRhQsXMmLECNd1jz/+OK2trX3HOeec4/p8wYIFzJ07l4suuoiZM2cyatQoHnvsMQYNSv0npoQ4PAa/Dk/RR61+6gYUf3M5eZaWwenwiO2QwVJ/8t2vpL7+9qMf/ajr35dffjkbNmzgpJNO4tlnn+17v7u7m46Ojor3aGlp4YorruCzn/0sixYtAuAzn/kMa9eu5cwzz2ThwoUDvtPU1MTQoWa5cnNz9v5zwiGrtAxitNx40cPeXG4wupPfUePavJNvIx4tToen2hYOUD49ZLCk8bNKaxQ6OqxiLZEfMhf+GD16NACbN292vT979mw6Ojp47bXXuOeeezjggAP6PjvppJNoampyOTbt7e2sWrWK0047reLfuf766+ns7Ow72traYvg1aeF3Hl6MlkYcQDeih0HaihvRw43oYXBGh7PlAGbO4bntttt49tlnWb16dd97jz/+OJdccglnnHEGX/7yl5kxYwZPP/00TU1a/NbWVrq7u9m6davrXh0dHbS2tlb8OzfddBMtLS19R7HyffyGpbNVKaNHjJYb0cONODwGL5FhEGe4P2WpH1702I3e5gOy1rekPqXl5Dvf+Q7HHXccM2fOdL3/0EMP9b1evXo1y5Yt45133uFjH/sYjzzySNX7NTQ0oFTlcFpPTw89PfUqcV6ReXg3YrTciB5uxOExyBSOG2krbvzoMRatR3usJfJDZiI8d9xxB+eeey4f+tCH6k4vrV+/nnfeeYfDDjus799Dhw5lzJgxruvGjx9fNe+n2Mg8vBsxWm5EDzd+8hKKvrmc1A03Mv3rJt/1IxMOz5133sn555/PGWecwZo1a+pev99++3HggQfS3q49x+XLl9PT08OcOXP6rmltbWX69OksXbo0rmJnGLtS7qF2wlg2K2X0yKjVTb6NVvT4zUsosh5SN9yIHm7yrUfqU1p33XUXF198Meeddx7bt29nwoQJAGzbto3du3czcuRIvva1r/Gzn/2M9vZ2pk6dyre+9S02btzYN53V2dnJvffey6233sqmTZvYvHkzt9xyCytXruSpp55K8+elRL4rZfSIHm7EAXTjRY+96JVrw9F6bIq7UCkhbcWNtBU3+d6XKHWH5wtf+AIAS5Yscb1/2WWX8cADD7B3716OPfZYPve5zzFmzBja29t55plnuPDCC9mxwyyVveaaa+jt7eWhhx5i+PDhLFq0iMsuu4x9+/Yl+nuyQZAwbLaWD0aLhKXdSGKqGz+d2nCKrYc4PG5EDzf51iN1h6ehofYurrt37+bss8+ue5/u7m7mzZvHvHnzoipajvH7KAWAEcDOeIqTOvlupNEjerjxo8d4iq2HDA7cSFtxk++IVyZyeISo8Vopu9Cheih2QxWj5Ub0MAxxvBY9gnVoRX70iLQVN/nWQxyeQuK1UkI5Rmpep3Cy2UijJ99GK1q8buEA5WgrfusGFPvRI9JW3ORbD3F4CokfhyebFTNa8t1Io0f0MPhxeMqkR73pcOfmcmXQQ5xhTb5thzg8hUQcHjf5nneOHtHDYGuxDzO9W40y6SG2QyNtxU2+HUBxeAqJTGm58dtIh+LO7Sga+TZa0SIdvBvRw02+IxrRk289xOEpJGK03ATJSxA9pG70R/RwIw6xoQx1A/Ie8RKHp5AEMeLZqpjR4lUPe3M5KLbhEiNuEIfHjejhxm9bGYJZJFFE8m07xOEpJGK03Igebvzu01QGLSSioZHBkhu/079Q3PoxCLN1nzg8QmaQDt6N6OEm36O0aJG64Ub0cONVj33ofc2guHrkf88qcXgKiRgtNzJqdSObyxm87tEEUjf6I7bDTdHrR/73rBKHp5CI0XIj0xZuZHM5g9fpPZC20h/Rw03R9XA6PHvqXJtNLcThKSTSwbsRo2XwMw+/m+I/ekTqhhuxHW6kfhhsLfZQ/0HTthYjyZKbkZ2SCBEiYXo3YrQMfubhofh6SN1wI3q4ET0MQbSALEWHxeEpJNJI3YgeBj/z8FAePSSioZGcFTdiOwx+BtLdmGmv7OghDk8hkUbqRvQw+JmHh/LoIXVDI3q4EYfY4EcLyGL9EIenkIjRciN6GPzMw0PxR/FB6sYQ3I5jkZC24kYiXgZxeIRMIkbLTZBRmhgtTdHrR5C6AaIHFL9uQLB8yKLq4dd2ZC/iJQ5PIZEwrBsx4ob8G61o8aPHXoq/uZzYDjdiOwxBB0vZGTyKw1NIgoZhi7q5nBgtg0R43IgebqStuJEIjyH/bUUcnkKS/+WD0SKbyxnyb7SiRSJebmRLC0Oj47U4PEWwHeLwFBI/HfwuZHM5J9lrpNGSf6MVLaKHG4kOG/xu4VB0Zzj/bUUcnkKS/4oZLeLwGPI/Dx8tooeboNHhIuohe1a5yX+/Ig5PIcl/xYwWWaVlkLrhRvRw40ePbG4uFx1Oh6fXw/VlcYa9zBxAFiNe4vAUEjHihkZMNZdRmr8cDSi+HtJW3EhOk8FvBy91w032HEBxeAqJGC1D0LB0U7/vFgWpG27E4XEjehhECzf510McnkKS/4oZHUETD6HYekjd0IgD6Cb/o/jokLbiJv96iMNTSMRoGfzOwxd9c7n8G61oET3ciB6GoM5wIzAs+uKkTv7rhjg8hST/FTM6/M7DQzn0EGdYI3q4kbwVQ1CHB0QPyGLdEIenkOS/YkaHXy2g2NMWUjfciB5uRA+DXy32ATut10V0iPM//SsOTyERo2UI4vAUeRQfJqJR5M3lpK1o8t+pRUcY2yF6ZFELcXgKSf4rZnSI0XITtG6AOIBQ7LrRAAyxXoseMh3en/xP/4rDU0hklGYQh8eNXyPejUn2LrIe0laMswN57tSiQ2yHm6AOz0iy4mpkoxRCxOTfE48OMVpuRA83EuEx+N3CAcqhh+T/afIfHRaHp5DIbroG6eDdSE6TGxkcGJwOz56qV7mRtuJG9DD0OK7Nhh7i8BQOmYd3I6M0N2LE3cgybIOtRS96xZEXyqCHDA40+bel4vAUjjDz8NmolNEiRsuNODxugkZ4hmAiqUVB6oYb0cNN/vUQh6dwyDy8m/w30mgRPdzI5nKG/I/go0Xaipv8Dx7F4SkcQRweMVpuxGi5kfph2EdxHz2S/w4tWsR2uMm/HuLwFA67Uu7F/zx8dpYPRkf+G2m0iB5uRA+DaOFGBgdu8l8/ita7CaEqJWinp0jkv5FGi4zi3YgeBmkrbkQPN35X/0LW9Ejd4bnuuut48cUX6ezspKOjg0ceeYTDDz98wHXz58+nra2Nrq4unnnmGY4++mjX501NTdxxxx1s2LCBHTt28OijjzJ58uSkfkaGCLI76G6Ku7mcjNLchDHiLRGXJQuIHoYwWkh0WNNpncV2aMThcTFr1izuuusuTj31VObMmUNjYyMLFy5kxIgRfddce+21fOlLX+Lqq69mxowZrF+/nieffJJRo8wIa8GCBcydO5eLLrqImTNnMmrUKB577DEGDUr9JyZMkEoJYsSdbLPORdMCwhlx0UNT1PoRpm6A6AHSVvpj6zE64rIER2XpGDdunFJKqdNPP73vvXXr1qlrr722799NTU1qy5Yt6sorr1SAamlpUd3d3eqCCy7ou2bixImqt7dXnXXWWZ7+bnNzs1JKqebm5tQ1CHecoEApWOvze29b3zslA78hyuNa63d9z8d3DrO+sy0D5Y/6eMr6bRf6+M4XrO/8JAPlj/IYZP0upWCsj+89an3nbzPwG6I8zrZ+1+98fq/L+t7BGfgNUR63Wb/rmz6+M9P6zmsZKH/Ux2rrt83y8Z2vW9+5M9ayee2/Mxf+GD16NACbN28GYNq0aUycOJGFCxf2XdPT08OSJUs47bTTADjppJNoampyXdPe3s6qVav6rulPU1MTzc3NrqMYBI3w2KPW0RGWJQuEHcFnromEJIweRa0bIHqA2I7+SFtxk/9oaOas+W233cazzz7L6tWrAWhtbQWgo6PDdV1HR0ffZ62trXR3d7N169aq1/Tn+uuvp7Ozs+9oa2uL+JekhRgtN0ES7bY5XhfFEbbJv9GKDnF43ARpK1D8+pHvKZzoyL8DmCmH5zvf+Q7HHXccn/70pwd8ppRy/buhoWHAe/2pdc1NN91ES0tL31GcBGdxeNwE0aMbk/QtRrz4dQO8PzsKpIPvT9HrR5C2Mgx3/SoC+bcdmXF47rjjDs4991w+9KEPuaIt69evBxgQqRk/fnxf1Gf9+vUMHTqUMWPGVL2mPz09PWzfvt11FIOgRquoIxMx4m7yb7SiQ+qGG7EdbsImcYseWasbmXB47rzzTs4//3zOOOMM1qxZ4/rs7bffpr29nTlz5vS9N2TIEGbNmsXSpUsBWL58OT09Pa5rWltbmT59et815UGMuBvRw02QaYtsGa3okLrhRvRwE0SPfciKVyfZqhuNaRfgrrvu4uKLL+a8885j+/btTJgwAYBt27axe/duQC85v+GGG3jjjTd44403uOGGG+jq6uKHP/whAJ2dndx7773ceuutbNq0ic2bN3PLLbewcuVKnnrqqdR+WzqI0XIjergJY7RGoE1Gb41r84TUDTeih5swejRTXD387PGWrenf1B2eL3zhCwAsWbLE9f5ll13GAw88AMDNN9/M8OHDufvuuxk7diwvvPACZ511Fjt2mAf5XXPNNfT29vLQQw8xfPhwFi1axGWXXca+fV4fr1AUwhqtbFTM6JAwvZsowvSboitOqgRN0pW64UZshxupH4ZsOcOpOzwNDQ2errvxxhu58cYbq37e3d3NvHnzmDdvXlRFyykySnMjergJosde9O7To9CdWlEcHung3UhbcSN6GIY4XgdxeIYAw4FdkZUoCJnI4RGixB61+ll1AsVspCCdWn/EiBtECzeihxvRwxB0C4ed6AETZEEPcXgKR5B5VihmIwUxWv2RML1B6oYbqRtuZLBkCOrwQJbqhzg8hcOO8IjDoxE93EgnbwirRRN6v5WiIHXDjUTLDXbd2GcdfsiOHuLwFA4xWm4k4mVwjtJEj+DO8A6M0Rc9ilk3ILjtyE5EIzqC1g3IUsRLHJ7CEbRiFrGRgqzEcRImLJ0doxUdQQcHCrPXShHrh9QNjTiAhigcnvT1EIencIRtpEMd9ygCYfUokhF3/r+KES/KqDU6pIN3I3oYgjrDkKXBozg8hSNoxXQ+WqNIRlym+AzOnITaz6EbSHaMVnSEMeJFrh9Bo8NFshsgES8nEuERMknQirmPYnZqMkozSAfvphhGPDrCdvCD0Xs1FQWxHYZi2A5xeApHMSpmdEjSskE6eDeih5ugeuzCrGQSPWTg2J/sRLzE4SkcYsTdBE1azk4jjQ6pG25kcOCmGJ1adMh0uKEYtkMcnsIRNKIBWaqY0RE2LN0IjIyuOKkSRQdfpA4tjBEvYt6KOIAG2cLBjSQtC5kkaEQDpKE66cI8FbwonVoxRmnRIXq4icIBLIoeUWzhMAqd11QEitFWxOEpHMWomNEhRtxQjFFadEhEw43oYYhiCweA5gjKkgWK0a+Iw1M4pFMzDMKMsPLdUKOhGEYrOkQPN6KHIcwWDnswTwUvih7FmA4Xh6dwSOKhwTlKk1FrdHWjKGZDOng3YjsMYTp4KN7gsRhtpSiWS+hDwtKGMGFpKJ4eUdQNKM5eK9JW3IgehjAdPBRPjzCLYbLj/InDUziK4YlHgzPx0O8Tj6F4eoSpGz3Abuu16FHMVVqS72YQh8dNFIthhgNDoilOQMThKRzi8BjCGq2idWoSpncjEQ03YjsMYdtK0ab4onCGIe36IQ5P4RAjbpBRmhvRw4108G7EdhikrbgJUzf2YZ7VKA6PEClixA1RjdKKoocYcTdRtJUR6M0pi4DYDkNU0WHRQ5ONiJc4PIVDRmkG6eDdiAPoJootHKAYegwmmi0cijKFI23FTTEcQF8Oz5QpU+IqhxAZMkozhFlZAMXToxijtOgIo8deYIf1ugh6hNlZGLLSoUWHDJbcFMMB9OXwvPrqq3z9619nxIgRcZVHCE0Uz9IqSpg+zMoCkA6+P9KpuSmSHrKFgxsZHLgphgPoy+GZM2cOZ511Fm+88QaXXXZZTEUSwjHMOgfp5Lc7XhehoUqH5qYYo7ToED0MzghPb9WrqlMkLUDqRn9K6PA899xznHrqqVx33XV8/etf56WXXmLWrFlxlU3wjXOPgyAVsxfYab0uQkOVKS03xTBa0SF6GGwtdte8qjq2Fk2YQVeekcGSm2Is0w+UtPz973+fww8/nF/84hf88pe/5OGHH+bQQw+NumyCb8LOw0MxjbhooZFRqxtxeAxhtdiBXn4MaXdq0SB1w00x9Ai8SquhoYGFCxdyzz33cO6557Jq1SpuueUWRo0qyrbz+eKTwGdDz8NDVipmGIYA/wgcKREeAA4CbgaGF8RoheVM4J8AcQA1VwMfCa2FwkQ1xoQtUmq0AN8AJkndAOAY4NvA4IJsWuorM/Xv/u7vmDFjBjNmzOCoo45i7969/OEPf+Cuu+7i5Zdf5pJLLuGVV15h7ty5LF++PK4yC/04A/gp0E4T3wf0CpJ9tb5Sg/w31JuBLwKTGco8IHgj3Wqdh6LD9EHD/ekxCPgtMAV4hKE8BwR3eLZa5zFhi5UaBwFPWq//haFWzSivHp8G7gReYii/BoJrAVqPMeRZjweATwAbGcoCoMx1Yxjwe/QA8t8ZyltAcD22WOcxocsVBl8Ozz/90z/x/PPP88ADD/D888+zbNkyenpMZ3Lfffdx/fXXc//993PsscdGXlihMt+2zt2hR/BgKubYEPdIjwPQzg5AU2g9tqOdx8FoPdpDlS0N/hva2YEoRq35rhsA8x2vw49a869H9LZjKnnV42i0swMwJrQedt0YjR52BB2ApseVmKzQ/UM7PFutc7p1w5fDc9BBB9W95t577+Wf//mfAxdI8McI4P3W62iM1lbrnE+jdarjdU/oKS3QeuyPHpnkz+E53fE6fP3Yap3HBC1O6nzQ8XpvyfWYChxove4J7fxB3vVwtpXwemxxvB4DbA54n/RwLkdSkekxJnB5oiDynZb//Oc/c8YZZ0R9W6EKJ6LjDzswjbQhlNHKRsUMygzr3Imzg49Cj3w6gCdb561E4fDkW4sxwPus11uAnpLrEW3dgKLosYUo9OjFbEw5JkSp0sPWYxtRDpZyFOHxym9+85s4bitU4BTrvBAYYVXKRrrZE/iO+TZatsPzA6KK8ORXjyHACdbrHxPlqHWkdffgtSwNbAP+J+AN1xYO5ZzSstvKz9BTFqBtR5BdeDT51sOuHw8RZcRrFHnUYzw6320fOj+0KIMleZZWzrEb6e+AtVYjbZKIhquRNpZUj+nodOvNwNNEYbS2YXIR8qfHSdZ5GfBmJCsa81s3wLSVpcB6y3YMK2lbGYpuLxBVBw951sNuK68BfyAKB3CrdR4TvFARIA5PzjncOr8CrLUa6dCSNtKxwDjr9VJgm6VHS0n1OMI6rwLeJgqjpTCr+PKnx5HWeSXwlsvhybcRD4pTjzZLj5ElbSvvQ093bEGvarQdnuEl1eMo67wSWEOUEZ7BQHPwgoVEHJ6cY2/3+CdgndWhlbWR2vkZbegF5JssPUaXXI8/4TZajSVNarf1eBNYY9WNQfQSfAVNfuvGcGCS9fpPmAjPyEiSlvOnh21H3wR2AZ2WHvuVNOLl7FfeJgqHZzdmW48xwQsWEnF4coy9dgjgLaDdqpQjStpInR08wCZLj3BGa6t1zp8eTiO+Adht6TE+EgdwTIh7pIPTiL8baTS0BT1yzQ+HWOct1rHe0qO5pHXD6QwDbLH0GFdSPZy24x1MdHh4zm2pODw5xm6k76F952iM1lbrnO8OHmCr1Uj3L6nR6m/Euyw9JpXQIR4BTLRev4mZ/h1GNw2B77rV8XpM4LukgdP5A9hg6VHWaGh/27Et0sFBfvX4E+4Vr5Nzroc4PDmmv9HaFElYOv8dvK1Hp9VIx+S8kQalvxG3IzzROID50sOOaGxGuymbHQn+wfcU34vZMj9fevR3hrdZeowqoTMMA9tKV990eL4jGkEYDBxsvbb12NM3eMz3Pk3i8OSY/kbL7uBHRdKhDQdXYmf2GRjRsEet5TPi/SMaYMLS4YxWPvXo36H1Oqa0xlX8hle2Wucxoe6SNP312BHplFa+6gYMHDzusvQYW0I9DkJvOrEbWAc4H0p9QM71EIcnx9i7pK6xzjscS0uDP8LVfpwC5LGhgtFjt6VHGSM8U63zVswv2FPiCM9U6/x23zsmwhPO4cmnHtOs81vWeWckKxq3Wucx5KlrGYSJaNj1Y3df/l/5psPtuvE2el2mc+AbzuFZh07ASO8xG7FsPCgkg/2MpDbrvMcxat0fs8+nPxTmcQpjgfVhipgYgzARjfes8+6+UVr5wtK2M7zW8V5vJHkJW61zPvV4t++dqCI8+XR4+tePLseU1lCCrsVxPk6hBXeOU3aZgI5o7MWOaJhoaBlXaQ20HSbCMyGUHn8b4rvRkLobfvrpp/Pzn/+ctrY2lFKcd955rs/vu+8+lFKu47nnnnNd09TUxB133MGGDRvYsWMHjz76KJMnT07yZ6SC/Qvf63unvEZ8Atp73wt0WO919xmt8kU0bGfYGK1B7LPGNweUMMdroBEvb1uBgfWju99gKRh7gJ3W6/zoYdeNdZjY9p5IV2nlRwuoZDvs7Sz2cIAV88krqTs8I0eOZMWKFVx99dVVr3n88cdpbW3tO8455xzX5wsWLGDu3LlcdNFFzJw5k1GjRvHYY48xaFDqPy9W+kd4nGH64EYL8thQbeevHWO0ehxh6eA1of/jFPJBrVFaawmNeDU9wreVrdZ5TKi7JMkoTGnFAazUwRuHJ9wUzlbrnB8tIM7BQfqkPqX1xBNP8MQTT9S8pru7m46OjoqftbS0cMUVV/DZz36WRYsWAfCZz3yGtWvXcuaZZ7Jw4cKK32tqamLoUDM32dyc3u6PQRiBaUbRR3i2Wuf8NNSBzp+ZwhlGD2OBTYHuvM3xegx6R5vsU81oAUwUh4cyd/C2Flsw8Zhoc5qmkEc9nA7PXkuP6KKhDZCT6EitwUHeHZ5chEBmz55NR0cHr732Gvfccw8HHHBA32cnnXQSTU1NLsemvb2dVatWcdppp1W95/XXX09nZ2ff0dbWVvXaLGJHNHZgFsZKhMft8Nh6hOvU9mEcwP0C3yVpas/Dh3nop1038qPFYAbmd0Xn8Gy2zvnRo1IHTyRTWpDH+mHr8Z7jvb2OR20E37bArhvpPk7BLwP1KE6EJ/MOz+OPP84ll1zCGWecwZe//GVmzJjB008/TVOTNuCtra10d3ezdetW1/c6OjpobW2tet+bbrqJlpaWviNvOT8D83cgOqNlN9T8OTyV9AjvANqxofwZ8f4RjSa6OaDC9d7JnxYT0V1ODya/K7pRa/4cHjsa6m4rUemRv/pRzwEMrkc30GW9DmeBkqRaDk8RHJ7Up7Tq8dBDD/W9Xr16NcuWLeOdd97hYx/7GI888kjV7zU0NKBU9RBiT08PPT1hwpXpUjmiEVXFtI1W/hpp9BEe0J3aoeTRiJtOzXRoI9C7LO0KdGe7gx9l3TP7bcjWog3npEJ520p8HTzk0QGsrIfbAXyToGxCJyDsh3NThKwyEjPMrTSlFW6wlD6Zj/D0Z/369bzzzjscdthhff8eOnQoY8aMcV03fvz4qnk/RaBWBx/dqDU/RrxexKtMndpotOGCymFpCNMdbcOkheejU6sc0TDRv3C/In8dfC09htId8pfkq61AfdsRLs6dL1tq141tOLc1MVo0k4MoSQ1y5/Dst99+HHjggbS3twOwfPlyenp6mDNnTt81ra2tTJ8+naVLl6ZVzNip10iDzztDHsPSlR1A06mF0yNfnZr9FOwtOKM4WoshlsMTXA9F3vI07Pydda53TfQvmraSjw4NTP2oNliKpq3kQ48GTP0wegzGfhhs2WxpvboBeoelvJK6szZy5Eje97739f172rRpHH/88WzevJnNmzfzta99jZ/97Ge0t7czdepUvvWtb7Fx48a+6azOzk7uvfdebr31VjZt2sTmzZu55ZZbWLlyJU899VRaPyt26kV4ymbEKzuAplML10jzpYdtwNtd72otGi2jFb5+jCMvethG3O3wRDU4yFcHD9Xqh9Ej3ANl8tXBj0NvNrGPgfld+lW5HMBadcM5WNpMPknd4Tn55JNZvHhx379vv/12AO6//36uuuoqjj32WD73uc8xZswY2tvbeeaZZ7jwwgvZscME3K655hp6e3t56KGHGD58OIsWLeKyyy5j3770trCOm3gjPPlqpM4pnGo5TWWM8FTq4AeHjvBA3vSo5QA2WY9hGYyZqPOH3cEPI0xmVJLUcwCHhbp7vmyHXTc2AL197w51vCpnhCc+25EuqTs8S5YsoaGhoernZ599dt17dHd3M2/ePObNmxdl0TJNMhGefDRSW4vN6AfeGcoZ8ao1ShscWYQH8qJHvQ4edJh+C0HYgd5heAhaj/dqX54yjdCXeFrNASyT7ajVVgAa6S3V4LHW4KAhEtuRLrnL4RG00bIX3Mcb4RmLPZedZSpHuxqxq3fZIl6VO3httAZJhMdCt5Vo9MhPJz8B3Sr2ABtdn5QzOlyrrTSymwbKUzeg9uCgwTE4yCvi8OSQVozR+rPrE2O0RhHmP9c5Qzsm8F2SolbCMsioVeM2WhLh0Z3avkhGrfnp5O26sZ7++/5GleBfnLYS7eAg+3UDkrAd6SIOTw6xIxrr6G+0osqm34vZXTj7DbVWwjLIqFVj61GuDn4YZl+RSqPWfSWL8FSuGxDdqjW7bjSSh1hA7WholNO/2a8bUFsPJVNaQhpU3nQQTFSjXCOTWpswwl4a2RvRKq18GK3Ky7CjrBv50cPWogvnI1ggHocn+22l8gge+q/SCr5Sazdmd+H81I/4Ihr5saNQWw8lER4hDSpP4YDtie8p2cikVgJ3NIl2ttFqJg9PTLdHafEZrfwY8XoRjd6SRbzq6RHNXit516Ocg4Nm9P7pUNl2RDM4SBdxeHLIwI2ybHTF3FPSTq1yhCcKLbaid+qArBuuFvRG9lB5pcXeSDq0/BjxehGN3pJ1avX06BE9iHYKx7kAJNvdra3FNkyMTuO2HeLwCIlSeQQP/Y1WWTbbqz2FoxvpcMLEZpy7C2dbD7tubKX/jjBRjtLy5wxXi2hEEw0tgh66fnSXrH7Ush3RRkMHhb5T3NSrG9EMDtJFHJ4cUs+I7y7RlFYjMN56XXmU1t33Thn0qGzAIdopnHxoARLR6E9lPcxQYFeJ6sf+mFR+91MX3YODcAPHPcB2x1/MLtUH0lEODtJFHJ4cUs+Il2mUZu8r0oveLdVgprTsPbnLoEe96F80ozRbi+HWkV3qjVqjiYbmo25AvZyVctkOW4s/o90Sg3sKpxEzTRyMfETLqw+W3LYj+2vvqiMOTw6pF+HZFWmeRj4a6cB9RcwybHt1TnOov2Rv0xbuuetx49VojRrwuR+2Y08V5kWPaqPWHut3hNMjH3VjMNWiocbh2VUiPeoNHPfR3Ze5VwbbUW+wZOeGhtMiXcThyRnV9xWB/hGeMhiteiN4Z4QnXEO140cH1LwqbbyGpcMbrXzpUa+tlKFuVI+G2oODXrqsLr4MevixHeFsqa1Htm1pvcFBdLYjPcThyRl2pdyFzqY3mI32dkVSMfNhtOpFNKC7bwa9DA5gPT3sKZzhhH1oSL70qDf9G01b2Z8sP4ql3i7L0Q8O8lo3THTYth3RRHiybUu9Tv+Gs6PpIg5Pzqg/KoHd1iM0y+Dw1ItoRGe08qGH1yRdKL4ewzBps/US/MNp4XwUS3YTdetNhTvbSjSDg+zWDfAW4RHbAdEODtJFHJ6cUX0EP6zv1a5IR63jgOpPs0+b6kbLTqbdVSqjVa9T29eXtRJVmD67etgP2B0YDQXbiO+OZNS6F5Pzll096nVo0sHbmC0tyhTx8rr6dxg6kTuPiMOTM6pHNEwHH828sz1KayTLCxGrGy3bAdwdcVg620arukMctQOYfT2qG3Cw68euSKKhkIdOrboeUbeV7GsBXiI8u0sT8RpFtV2Wwa4f3VZbgfxGecThyRn1IzxRGa0ezNOHsttQvRjxaBMPs6tF9a3hIb5OLbt6VHeGwdajKzKHJ/udWvKDg6Gh7xQn1fUoX3TYtqOdwM4Bn+r6sbcvHprfPB5xeHJG9QiPbbSiaqSQp4YqU1rureF3Dfi0fKP46m2lAePwaKXCG/Ds14/kosO7MN1mdvVIzgHMflupPTiI2pamhzg8OaN+Bx9VI4WsG/FGTMmSG7WOJKub7VV+pphNXFOe2awbUP+ZcwA7rQjPYML+r+anUxuoR9RtBbKux36YWuDFASz6Ki0v07/R1o90EIcnZ3iZ0oqmQ4OsG63q+4pA9I20k6xvtpes0cq2MwxeBgew0xELK2+nFscIPtt6VN9lGSq1lWimw0cT5ol+cVLbdkTtAKaHODw5o/6UVpReeLaNVvV9RSD6iAZkvZOvXjcgvim+bDp/4CW/qxfYWwoHcDB6gABJ5P9B1vVIdnCwFV3XIKvtxa8eksMjxE7tXZYHdmjhN5cTo+Um2w5gsnrYWuxHVs2Il8EBUAoH0I6G7sH8zxlM/l9ZosNeIxrR1A1F1rctkCktIXNU32UZKlVKKPaoNflGWgwjHk2nZhvwQWT1eWtepnCAUuQ02VrUjobK4EAzMD1AbAdI0rKQKF4b6R6IeHO5bDbS5FcWiANocG62l736MZxa0dA4IzzFqBvRRYezVzfAfwdflunwgXo0YmpClA5gOojDkyOqJyxD/1FrGZ4BI1NabkQPg91WdmJ2kzLE0VaK1cFDORzAWns0laWtgJcNSyFaBzAdxOHJEV4bKZRj1FrbAYxz1Vo29Ug+LJ1dPbw6fxD14CCbm+0lHx3OdgcvbcXQgt5sA2rlu0F0jx5JD3F4coTXDh6iMuJ/ts7jQ90lLpJdlQTQYZ2zp8cYzC8eqMcQTFOP0gG09ZhQ86o08OPwRLfZnl3T8qZHHBGv7NYNSCOHJ7t62FpsodKGpXHUjfQQhydH+DFa0Rhxu5EOJ4tV3O8UTvjN5Ww9WmtelQa2FpvA8Tx0m8ph6TIY8eQ6eNApwZDl+pHcYCm7WjTgffAY3RROXttK5cFB9noDb4jDkyOSn9LahcmAyFZDrb3LMjj1cD4bJhojni0twKvR2gf0SAcfS1uBonRq0UZ4sjdYOgBtP/ZhSukmjuhw3m2Hu25IDo8QO8lPaUFWoxq1d1kGp9FSRB3xyq7Rqj29V74Ovt50J5RDDz8LHqIZxWd3is+uGx3otYYDKWd0ONloaDqIw5MjxIgbnFoM3FcE4h+1toS6U9T4cYYlhycuPbIZ8RqCyTpLdhSfzU6+dt0Apy3tcrxb1Jym5GcO0kMcnpxQe5dl+wqIvmJm04jX3oMHyjbFl84UTjbrBqQdDc1W3bD/d7qBzRWviDunKVt61G4rgzHPu9qNIioH0K4bI8iauyARHiFz2Aa8i0q7LEPZRvF+RmlQ/E4tiNEaQdjN5bKpBaRlxLOpR/22Ui4H0JszDNHq0UXWp/iSjYamgzg8OaF+RKNcK0/8RniKPm0RJMIDUa7iy84U3yhMaZIN02d7CsdvWym6Hsk6PJDPiJdEeIQUkFGaGz9haSi7Hm6j1UNUm8tlc4rPdoY7MZ23mzi2cIB8dmhQrVMrpx62He1Br+MSB1DjtqPhHz2SDuLw5IT0HJ48RzSgLBEvP0YL4jDi2enUZHDgRvRw42fxB8SRxJ0dPfZD7w0O/qKhkM8ojzg8OcHvlFbRc3hq6+HeDh2KbcT3B5qs1+srXuFelg7FdgDT7+CzNcWXfr5bduoG+B8cFHlKy9ZiIybq68ZdN5yPHhGHR4gNifC48RuWLnKY3tZiA9ogDcTWY+CotYgOYP2clbg6+GxO8fm1HdFF/7LXVgZjSuNl+heK7QDWTuCGWg5gHhOXxeHJCekswwbTSIein9iUPvV3WR5otIo8D++3Q4Ni77UStIMfjDs2GIzsOoD1Izxx7cOTHS3Go/+fq29YGmeEJ3t6+I3+Qb4Tl8XhyQnphaW7ga3W62w01Pq7LIvRchOnA5i9UbxfPZyJzeV2iOOa0srOFJ+txXrs2G9/4sx3y2NbidOWJo84PDkh6Kg1mrBjtoy4312WoRzz8OkYrWzVDfCvh/PRI0WbAh6GTkyFanoMdbyOOjrsnOLLhh5hIhrljIYOzP/L8wNEU3d4Tj/9dH7+85/T1taGUorzzjtvwDXz58+nra2Nrq4unnnmGY4++mjX501NTdxxxx1s2LCBHTt28OijjzJ58uSkfkLsDMPsslw/L8FttMJvLgdZM+LeE7jjmMKxtXD+r6RLumFp+39hUs2rkiSIEY9ej4k1r0qK+huWOp8QFeWztGyypUe6gwP7r2ZDC/CzR1McDmDypO7wjBw5khUrVnD11VdX/Pzaa6/lS1/6EldffTUzZsxg/fr1PPnkk4waZeResGABc+fO5aKLLmLmzJmMGjWKxx57jEGDUv95kTDFOu+gmtEahKmY+tng0W0uB6ahZsOJtPV4r+oVI6yzeRJOdEa8BzORlg097FKkk8PTZp2z4/BkQ49s1Y36Hdpe9CRx1B1a3vRIwhkeCowLfbcoCNNW8hjhaUy7AE888QRPPPFE1c+/+MUv8s1vfpNHHnkEgEsvvZSOjg4uvvhi7rnnHlpaWrjiiiv47Gc/y6JFiwD4zGc+w9q1aznzzDNZuHBhIr8jTg60zmurXuEcpelO3t5crgldMSs7Sl7JltGy9ajv8OzseyfaRroOnTY9GVgVyR3DUL9+xOkA2nVjAtqc9Ia+Yxj2x7SGtqpXDawf0euRjbZiDw781I3+0eHKTxT3Sv71iK5u9KKntSag9dgY+o5hCWI78uzwZDoEMm3aNCZOnOhyWnp6eliyZAmnnXYaACeddBJNTU2ua9rb21m1alXfNZVoamqiubnZdWSV+hGNkY7XxR+1hjHi0fwv500Pu37E4QBuQLvWg8jClKetxZ+xd2CqhK1HHPUjW3WjfodWXQsoXnTYewc/sK0ULeLViGmx9fuWOBzA5Mm0w9Paqv87Ojo6XO93dHT0fdba2kp3dzdbt26tek0lrr/+ejo7O/uOtrbq48G08ddITRpvUUet3o14XBGe7OgxFL3UFvxN8UWnh8KE6tPXo37dgHgjgNmpGxCsg+/B7OcUnR7ZmPIM4wAWzXZMQjsAPegBQmXidgCTJdMOj41S7rU4DQ0NA97rT71rbrrpJlpaWvqOLCc5e4/wdLneLboRD9LBF22UZteNLmBz1auqO4DR6JGdUbw3h6d6pxZdRKMlkruFxbvt2Ol6t6jR4TARnmgdnvQdQKcdrd5Txj14TJZMOzzr1+sVMf0jNePHj++L+qxfv56hQ4cyZsyYqtdUoqenh+3bt7uOrBKkkUIcDk/6jbQBYzr9RHjsaFcjUWwulx09/EU04gpLZ0eP+h18E2bdYhw5PDswS7HT1yNIjgYUc7A0FvNrq8fz457CyY4eYQcH4vBEzNtvv017eztz5szpe2/IkCHMmjWLpUuXArB8+XJ6enpc17S2tjJ9+vS+a/JOkIgGxDFqTX91wQFWKfZRa2VB9Q4eimXE63fwUKYpPu9TFlCGaYsg078Q12CpIfTdwmBrUTu/K+4pnOxEQ73ZjjgT/JMn9VVaI0eO5H3ve1/fv6dNm8bxxx/P5s2bWbt2LQsWLOCGG27gjTfe4I033uCGG26gq6uLH/7whwB0dnZy7733cuutt7Jp0yY2b97MLbfcwsqVK3nqqafS+lmREiQpFaKsmHvQZmI8aa8usLVYT631QANHJfbmcqPQelTeodkr2TFa2Ril5bGD78FZg6LX4yjS1qMJsz2m3whPtBsx7gOGoIcr1bNF4iZsW7Gjw7sJQ57aCsQ7/Zs8qTs8J598MosXL+779+233w7A/fffz+WXX87NN9/M8OHDufvuuxk7diwvvPACZ511Fjt2mDH7NddcQ29vLw899BDDhw9n0aJFXHbZZezbV3nz8DwxHL3UFtIMS4NuqLbDsyKSOwYhaFIqaD1GEWVewgS0Ia/8yM4kCJukW7ScprDTv0XSw/7ru/CX3wVR6tGLdnJa0VGe9ByeoBENpzLNlM3hiTunKVlSd3iWLFlCQ0PtUOeNN97IjTfeWPXz7u5u5s2bx7x586IuXurYlXI7JjNgIHEnLYNuqO8n7YZaP9oF1fSIbtS6ER0UH4reNfXd0HcMStAprWjD0tmJeAVN8C9inkbQ/C6Iw3a0ovV4OZI7BiFoRCPa6LBdN8ah7Uf1ybW4qa/HYMyjRySHR0gAbx18eUat9fOZIP4kbshKJx+0U7O1GEkURiAbScvO/C4/mw5CMaf4/HXwoocmblu6BfOYhnTbi7/93YqRwyMOT8bx18HLqFWTVMQLsq9HA7XC0hDlFF8zaZpBW4sOak0yJlE3suEMhxksie1IYrCUnsPThNl0sP70716ckag85/CIw5NxvDk85RmlBZ2Hh7hWW6RntLzldw187Aho82U7BeH16AK2Wq/Tqx/Zi4amO4L3ZzviWuEJWXMAw+hRFFvqzO+qvgSlthbRPJg6WcThyTgHW+c1Na9Kah4e0jZath7v1LwqCaNlm80pNa+KE2d+V/VnpTnD0rtcn0Q7ik9fj4Osc7r5XWC0mEiaXYI/PeIcLKVfNxoIN6UVT/04sOZVcRJFagDkL8ojDk/GmWqd19S8KolRmp2Ye1DNq+KkEWMy19S8MgmjZetxcM2r4mSqdV5T8yqnM+zeTzXaTi0veiTRwa9Hx9AaSXOAMNU6v13zqiQGS/bwJL26MQG9pLyXcNPh0djS9PWYap3X1LyqshbRPnokWcThyThTrfOamlclkYhpN9IxwOhI7uiXKejx8i50nkZ1kojwrLHOUyO5WxDsv7ym5lWVO3goqx5JTGkpTLeal04tzsGBXYL0tXiPek9/T9KWpq/HmppX1bcdEuERIqMBE08JMoUTrdHqwizITKehTrXOtbWAZDq1vBityiN4KKsetZ3hIZiFuOGw9Zha66LY2A/T7mtvmhD3Lu2g3Yx96Hyy8XWujYep1nlNzauGYqYgk4h4Ta11UazYf3lNzasq21HI79J0cXgyzER0Nn0vtZbZQjKjEki7U5tqndfUvTKJML1digm4E4OTY2q/klQmqQhPXhyeym2l/+Zy4bFLkW5bWUe9nV6SmOLbg0lczrLtGOF4Hefg0S5F1ttK5cEBiMMjxMBU67wWr2HYOEdpkPa0hf1Xa0d4Km+WBVEbra2YrSDTyWuaap3X1LyqeoQnHiM+NZK7+aUZs2ItSDR0H6bLL4IDONU6r6l7ZVKDJbskUyO7ox/sv7qmxjXVHjsCceVDjiat9ICp1nlNzauqR3jyuhePODwZZqp1XlP3ytph+mg2l3OWJMtG3DlKk4hX8hGeyaSxgbv9P7AJ9yqSgdQP00c7xTc1krv5xf6r9ad/k8h3c5Yky20lqSkcZ3rA1Eju6IfBmFVaa2peWT/CIzk8QmRMtc5r6l5Ze+NBKIYR97ZE326k++gfzC/SqHUYesrTWYrKJNXBd6D1Hkway4+nWuc1da9MKkxvlyTLHTwks6IR0rYd9l8NEv2DOG1H8vXDHpL0AO01r0xqsJQc4vBkGG97zoCpdu6xrXNzufIYcbv73jHgk+hHJemNWu1JtO3UejAkJGfEFWnqMdU6r6l7ZXUjHm0nb2txEHr5QbJMtc5r6l5Zf3O5vEeHG/A7WIp7+hey0Fbeof9GFf2pv+BBHB4hMqZa5zV1r2yxzgMfLxptJ2+XZGokd/ODM25Q2wG0tRg4sVGkUav9F9fUvbKyMwzFMuLeOjSopUf0G3XuReeTtda5NnqmWuc1Na8ajOnU3HpEv7lcenXD3oNnL/U22rN/adx2FLLg8NTenwmStR3JIA5PhplqndfUvTIpI2430nG4d/CNnynoMGw3elu36ti/tLrRKkJYemq/ElSnvjNchCk++y+uqXGNpn5biaZT68V0r1mtH85fGnd0OP3BwXv0T0XuT/XBUnw5TVMju6NX7L+4pu6V9W2p5PAIkeAMw9aOaDRZB8TviTsnUJI14lOtc/0wbFLOn10ayHtEo0ij1jV1r0zSAUxHD+978Nha7KbS41bjmeJrBsZGckevTLXOa+pemaTtsEuTh7aShB7JIA5PRpmMDobvod5W6M4qVz1vJe8jk0Otc5gwrP1OI1FtLrfGOk9Cb1mXHIf0K0F10nAAp0Z2R69EoUdRpvimWed2tCtTnepaON+NxiHejdkfPR091tS9srozXJS6AUaPoLmhznfE4REi4X3W+W3q7cFjN9KuilcWZWRi6/FG3SurG63oN5fbgNZ9EEk/CNDW4091r0zSiK+xzsnWjbHoqAbAm3WvLr4DGEXdgOJMeXrXI41o6AEknR5wmHXOlu1IBnF4Mor/RlrbaEW/+eC0WhdFThRGK/rN5cDocUitiyLHu9FKsoO3428Hk+RePHbdeI/+z4PvTwPJ5iXYeqRTN+oPDrxFeKKvH4fWvCpq/OtRvW5E9+iRbcAW63VytnQE5nG2YeqH5PAIkeI9opG00bLH0O+reVXUROHwON+NTg+7RIfVvCpKxqH3Z91HNBGN6IzWOrTL0UiSo3jvzl/1JF3nO9HVDbv1Hh7ZHb3gP8JTua1EP4q39UiurUA0ekQfHQZ43TonVz9sV3Mzxt2qTpL5bskgDk9GiWIED3EYreQbKUTv8ETXySevh1033qPec5IgWaOlSKNT8z/duYdK2S3xtZWDMAsL4se/7UgqOpx83RiF2aAzjB7xRIez3FZAcniExMhuRMNuKoeSVPUZjy7/XrwkLSedl5Ce0apfN8BLku4ootwaL3k9ohocRF83Oqy7DibJaS3/DmDStiO5umFHNDagJ5Fq402PPDuAUdsOcXiESIgqLB19I30XHVcYRlKJurY5eBe9HXptko54ZX2UVn9pKZTFiCcd/YOk9WhBDxAgughP9BGvA4Hhkd21FsE6+OIOlrznMw3DrDyVfXiEGJmITi7rxc/SwaQaqTNzJJmGGtWoxPlu9Eb8EJJK1PUe0YBa9WM3ZiO2PE/xRbGCD+IK0yerh63FeiptUtGfpHN4NmP28UomB9B7Bw/JR7zSayvenWGotd1JdA+mToY8lbU02JXyHSptB9afpCMakJYR99bBJx3xWodemp5coq53PYajp1OgqNMWY9BJ3BAugdv5brRtJVk94hgc5DniFWWEJ77ocGukd62F/yXpO6i01Ws80eH4EYcng0SVWOZ8Nx6HJ39GK55EXbtkyTiA3ketttFyply6ic+IH0wSibp23bDdztokHdGApDv4YBGNJCNeWdYjaQewE/iz9Tr+iNdwzPMIwyzRB53U0NvvyjwgDk8GyXZEA5JebisOoGF/dFQD4K26V9fWwvlJtIm6nWjTEv9+K8HqRlKrkiCttpLN6V8oQnQ4Hgcwfj3stPktmInF6qRhO+JHHJ4MYld9MVqaYDkrxRzFO5ek195kD/wYrbxOW0RZN+x3nU+nC4/dVqaQRKKuPz2KHfEaiX7oC3jRYwg6URfSyfFKrq1EEf2DfCYui8OTQY62zq94unqMda686DJeozWVuJ8hNQm9yV4vXo34aOuc5Cg+OQfwSOv8qqera3dozk/y2qkdZZ1fr3mVjbcOHvKbqGvr8Zqnq4udw3OEdf4zsLXu1c7/8WI6gLbt8NZWJMIjJMAQTNX35vDYTx6uHKSMp1K2o5t/I3Fvi247f2/gJYF7JMYBq7yPaN47+GOss7+6UX1P1bwntdv1Y7Wnq2vrsQ+TB5TH+jEe/UyxvXh1eGrrEW9biT9R11/dGGOdd1Dt6YV5tx3B2srWqlfkcS8ecXgyxvvQXXYn0ObpG96MVvTLB5OZe/YX7bK16KFakm68YemDiHvaIpge1R2eePU4ouZVYRns+AtRODwQdwTwyJpXhcV2ht+i3lPSbdJweDrRi+Yh7voRbHBQPbslz3UDoh8sSYRHCI2/Dg28Gi2I+pm8f7TOx9S8Kiz+Gqn9zOykIxobgI3o5nRUnWvD4W+UZutR34hHq4dduumR3rU/h6CzLnbiZb8q8GPEW6peEYRV1jlePfzZjkGY6d/KesQ3gk+mfvjTo77tiKduvIqesB+LyTiKHqdlitoBFIdHCEzUDk83ZnfiaBvqSut8bKR37U/UEQ0702l01SuCEr8eIzE7/WRbj1fR0wL7Y55kFD123fgjlXYKqUR9I77VOkerh+3wZKmtjMaY/8r1Y6t1HknUW2omazuiiv5ttc5jApanMj2YKE98ehyMjj3vxsvqTvDiAG61zmMClyp5xOHJGP6M1gjMepL6FXNs1SuCkE+HZ6t1HhOwPNWx9Yhv1GqP0DrwsqwUvOhhfxJt3diNmfKMTw//gwPvRjyetnIEcSb529FQfx38Tqo9sGVrhaujIf6I13DMMmx/EZ76zvCYYEWqQfx62HXjVXSuWn28244xAcuUBuLwZIxgHXwvtTaSj6dTs434kcT1SIUJmCRMbysL0urgIQkH0N+IFbwY8Tzr4W+6E9KrH2vRsbQhxJm3EvXgYB8mAjgmYJkqE3/dOALduW2wjvqUw3b4bytp2I74EIcnQziTMKMyWs5Po62Y76ITEJuIy4jbjTSqJEznJ8Mwu25EQ/zTFlFPdzo/id5oJaeHNwewAdNtp2HE49VjHHAA2knxtmVB/Q4N4tLD/h+biJ72jB5pK27yEw2NF3F4MsQhwFB0kPldT99I0+GBuBuq/4iGt0Q7e0v0eML0kzDGIlr8TVmAnym++Eat8YTpB2HWtUSVs+L8JG962HXjbbxsSAleOjSIq37sxGSSxKuH/w6+vjPsrEnRYNeNoyO/s00ctkMiPEIo7A7+VfwmYabl8MQbio1jlAZxGfEd6O4G4jLicYzS4puHt+vGMcRhZqah8zR2AWs8fcP+3+6iWs4KJJHjla+2En/9yNpgqf7gAKJOan8LXS+HEcfmlA34XaEFfqa0xgQoU1qIw5MhjrPOUUY0IIlRfDxGy75rlB2889M86TECvyu0IN15eNuIDyeOZ2rFkYTp/DS+aGhWIhppTmlB3NHh4BGe6vXDmSkZrR6KOJfqH4xeadcNvOnpG0Mwuw3JlJYQE++3zi95/kbaRjy+Dr4Bo8fvPX8rbT3iM+LHoxvrOvSOP/Vx5qzUj/A496iOhn2Y7iZ6I27XjRWev5GVDn4acTx9yNbjD56/keaUFsQ5xdeM2bfYux5p14/4bOkJ1vkVqu0h3R/nr6v8yCKQKS0hJCda5/w5PFOJepefw9DdQhdet8mH7OhxXM2rgmDXjeWev9GCToOHWno4nzgWnx7HR35n/3qkHf3bjNk7Pdr6MQjTqXnXIytt5Vii7oZOsM7vAJs8fysrekTfVk6yzsHqRvX4qTOnqSFAudJAHJ6MsD869AjwsudvHWCda4/542ukWzB73L6/1oW+cY7gvY1KwKz4qG3m4tPDNiknEPVSfdtoeXeG7Q6+Cx3Mrsw+4hzF23qcHPmd/Q8O0o5oQFx6HIGe8tyB1ydhg5ckXYgzT+M1dPJyM1Gv8vRfNyD9+pG/tmJ/Opj87LaceYdn/vz5KKVcR3t7+4Br2tra6Orq4plnnuHoo4+ucrfsYnfwb1Dr+bT9GW+d/1zzqnhDj7+zzqdEetdgRmuCde6oedVW6xy9Hn+y7j6cqEP1/vWwtahdNyDO+hFP3RgPTEE7a96ntOy2Urtu5LGt2M7w7/GazwTp2469mNo8I9I7+x8cjMBMM6alx0toTQ5EP1g1Ovzr4a1udGO2C8nLtFbmHR6AVatW0dra2ncce6yZ57z22mv50pe+xNVXX82MGTNYv349Tz75JKNGRT9PHidxdvD2GC6exdIvWue0HZ7hmHFG7YYanx4K06lFZ8SHYpIw/Rut2nUDTDwsej1WoFdEHYCJX4bHrht2jMAb3hxAW4tmzB7m0WG3lWg7+Dhth61HPLvlZEUPu63sot5wMz49dmJy3qLTYxL6f7oXP4MDb3UDzNxCPPUjenLh8PT29tLR0dF3bNxopnC++MUv8s1vfpNHHnmE1atXc+mllzJixAguvvjimvdsamqiubnZdaRJMKPlzRO31Rrn695eyZrR2o07M2Ug9s6r8egR/Sj+WPQE2QbgPc/f8h7hsevHATWvCkI3Jm00Oj385++An+ifvU9T9EZ8mXU+nCgnifyP4MFr/YivbkAcbWUEZn8m7/XDewefjO2IzpbadeOPeN28FbJhO+IhFw7PYYcdRltbG2+99RYPPvgg06ZNA2DatGlMnDiRhQsX9l3b09PDkiVLOO2002re8/rrr6ezs7PvaGtrq3l93PhfoQVeR/F2I92POP7Dl6MD6QdjGko4DkaXtQc/S/S9RzTibaTRO4DhOrS0jXhW9PBWPxRmFB99/diMWRgcTa6GczWj9w5+GGaRgTfbEW/dOJ6o4mnHo3NK1uGl5ttkpYOP3gGMc3AAcdeP6Mm8w/PCCy/wuc99jo985CP87d/+La2trSxdupT99tuP1lY919nR4f6P6ejo6PusGjfddBMtLS19x+TJk2P7DfVoRo/5wM8S7KGYUaK3KZxBxDFtsYOoQ7F2I10J7PH8Le9GK5lR2nT0eDM84aJ/aTuA8RnxuBzAPEVE34e2H7vw+kgJMHWjm1rLjsGtRfQrcd62/sJQolq5FnfdkMGBm3jbSvRk3uF54oknePjhh1m1ahWLFi3iYx/7GACXXnpp3zVKufclbmhoGPBef3p6eti+fbvrSIsTrPO7+FlGaXdPPbj3AB1IL8bpyUOnlu8Ofh16+fFgolq5lu9Rmm3ETyIKc7MfZgPGl319078eeWgrdofmbzWjf+evkah3F7axp/mi6eTz3cGvRDuh+xHVZp1JDQ5kSismurq6WLlyJYcddhjr168HGBDNGT9+/ICoT5b5gHVeVvOq/niPaEBSnVo0RvxU6xysg087wgOmU/uL0HcaitmKLI4cDYjbaL2KjgKOwmxwHxx7IuhP1ItNOHFGQ9Pu1KJtK7abEFeH1oPJiIt3CjgfesTbVvZgYvzh9ZgITEYnHLzs65tZGSxFT+4cnqamJo466ija29t5++23aW9vZ86cOX2fDxkyhFmzZrF06dIUS+mPv7TOz/r6lvdRCcTdUF+wzqdiNrsLRiPG4fkvX9/0P0obRhx73gI8Z51nhr7TDHR3vR7zpC5vZMVo7cPUj9ND381W9Le+vuU9GgpxOzwvWeWYhH5ccDhsPfxZO+91A+LWw24r4evGGMxmEM/VuG4gWRosRaeH3a/8AT+rGSE707/Rk3mH51/+5V/44Ac/yNSpUznllFP46U9/SktLCw888AAACxYs4IYbbuATn/gExxxzDPfffz9dXV388Ic/TLnk3mjAVEx/RjxYhCceh2cFuiMZTdhpnOPRTsgW/DwHB/zo0WUdEFdDXWydZxE288E2e/6cYcjOFB8YPWaHvpOthz9nOEttZRfGAZwd6k4jMFMWcQ6W4tXjt+hJ90PRe9AEx7ajr+H1f9rGfwc/Cj1gip7F1nl26DsFsx3BoqEypRURU6ZM4cEHH+S1117j4Ycfpqenh1NPPZV3330XgJtvvpkFCxZw9913s2zZMiZPnsxZZ53Fjh076tw5GxyJXv7ahZ+EZTCbU/kzWvGN4n9jvf5QqDs5R/Denhhv40+PeBvqS+j9PPYj7LNxbD38dfBDMOnpWRi1LrbOs0PdZQhmktCfEc9SRAOi0uMv0BHRtej8P+/4cwDj1WM7ZvJ6Vqg7BWsr4Kd+dKLjcxCXHr9B29OjCLvqNZjDYzvD3qKhMqUVMZ/+9KeZPHkyQ4cOZcqUKXzqU5/ij3/8o+uaG2+8kUmTJjF8+HBmz57N6tXeFzOnjd1In8fs/+GNg6yzN1MXvyf+jHWeHeouwY2WPz3ibai9mF8Q3AEcBNibK/gzWlOs8y68pMHbdWMsUT8Qw+ZFqywTCJPHcxJ6e8kN+Hm+GpjIgbddjOKNaEBUDk/w6J8/PZKzHeEGS8H1sNuLt61J4nUAt2IyboI7gC2YdW/+bKmtxTpPV8uUluCL8B38OzWvsonfiNtG63TCdJvB9GjAGPHiOIDT0cHl7fh56jOYXY29abEZs8InHj16MBO2swPfJWlneHzNq8LwHHo1zoGEWY2TlB52HCg+PRZb59mB7zAMk7Dsz+HZD5PJt9bTN+z6Ec2uY5VYbJ2DO4AfQGdTvgm017nWjW07vPUrdt0YR9jszWQQhydl7HnnuI3Weusc7VNanPwBHU1oxiwO9ceh6PJ1E2TFWhO62/Y2MrGNwERff8cPi63zBwmax+NMSPW+5Bj8Gi2FqR/x6zE78B2Cd/D+9LBrUHxahM/jGYxZ3ek/opE1Pew8nkMwds0fM9AWoB14y9c37b/Xgde9iOPXY7F1nh34DnZb8V83/A+ke9GORHwOYHSIw5MiE9Gd/F70lJY//I3i7UYa3/aKClhivQ42MrEb6e+o9XzvSthatOHVNbD1mOTr7/jhJfSM/37oVGz/JDWChyT0WGydZxPEAWwgjBEP1lb2R6dwxsNi6xysrZyASe73N4E/AhPH86dHfHVjB2aIMzvQHcLXDW8dPCShx7PoPJ4jCepWBUvuhyCDJXvwGJ8e0SEOT4p82Dq/jJ8npINeDWVvDe8tDGvPTsdbKZ+2zh8J9G1bj7hHJZCE0dqL6dQ+GugOs61zMYz4i+haPh6ztsg709EOyE78JveD3/qxFR2DgThH8Yus80cIYoZnW+el+E3ut6d+t+F1J6P46wbAU9b5nEDfnm2d4+7gIQk9tmIcQP+2YxhBk/vB7+AAkqof0SAOT4qcbZ2f8P1N24BvwJjm2theeDNx7T0D8EvrPBO/D7FowLhJv/b9d/03UtsBjPeBIr+wzuf6/ubx6M52B373FIFsOoB7MDXdvx52W1mM3+T+Rsz/cpaM+G/R2VPjMJNT3rG7wSd9fzOLHTyYtnI2ej2ed0Zg0nv965HFtgJGj4/7/uZstNOzFnjd97ezWj+iQRyelBiE6eCDOzzeDfhOzHguvoq5Bp3L04jfkcmJ6LH/dvxuogbZnMIBeMw6n4rfGW5bvacxy2C9k9VRWnAH0Nbjcd/fnIzOeOnGz+Mkk4kA/sp67U+PkZgpC/96+K8b9mBpJCauHD2/Q2eSjUbnvXlnNnrqcQ1+nidmk/W2chZ+d/wJ3lZAHB4hFk5Ej+22ESZ/x9t0lk0yUY2fW2d/RtwewT+FnweG2gQ3WhOJ46GINusxW+d/zNc3wxmtrI5af4Xu6E/AzyZzzZgcDf96OJ1h75M/yehhtxV/o/gz0Am6bxFkBO+/buxC5wpBnHoozADBn+0oZge/Al1nR6D/x71j21L/eoxBtzYI4hCLwyNUxdnB+wvRAxxhnd/w9a1kjfjZaLPsjeDTe2CeNf+m52+sR6cFNqFzQ+LDvwPYgtl/x78eU9Ajwj143WcFkqobmzDL07138h9GT3K8jt8VOKCfJw56/O+dZPT4NTp+dxRwmOdvhevgs6xHsGmccHrY2wJ4f3CLrUUrcQ6WIEhE9BC0NdyDyRLzjq3FeryuWAOJ8AgeCNfBH22d/1jzqv4kUzGXWX+pBa8rLsZgshj86zEEY8S9P4yiF7OHRDIO4Bz0tnn1ORM9KfgqfrslMHXjDfy40skZLVuP8zx/I1yHZuvhby1TMnp0YhLbvXdq0ejh78EtySUu7wKm4XWH8sPQ3XQ3ZsmEd1rRuYZ78RMr60APloYQ94Z7TgfQm2tl143/wu9CGIBjrHMW60Y0iMOTAvthHpAZzOGxd6v1VzHtKa0pNa8Ki8J0ahd6+sYcdJbFK/jdIh+0yWtEdx7edkq1sa8OtvOHV1ai4xIj8NrJp9Gh2VpMIK5nBNn8p3U+A695TeEGB8GMuK3HwTWvioL/tM4Xe7r6SGAquoN/pvalFRiMiQ77cwCT0aMLWGi99qaH3Vaexe8DMsG0lTfxsxHGXsw0Trx6PINesTUJr4PHNGyHHUeO145Ggzg8KXA+2vT8Hj+TDjYtmCwcfxEeO2gb/hnN9fh/1vkCdKpjbf6bdf5FzauqEayRgtFjWqC/64fvW+fL6l7ZCHzCev3LGtdVJ5gem9AuI8RtxN9Ep6U3ApfUvXoG2pDuxMRC/BFMD3vqLP668WP0tNaJmGd9V+eT1vlpzANwvXMoOr13J36HFsnp8R/W+bN46Z5sPZJsK5CUHj3o+gFwad2rR6OjwxBWD3/OsG1Hx2IeO5pVxOFJATvu8aNA37ajO22YLsobdiON3+H5LXpKZRTavavOKOCvrNc/rnVhVYJFuyBJPWwjfib1Ar8fRofJO0i2g4ck9XjAOtc34hdZ50fxk1VgMwrjvgVzeCbjJxMtCJsxrr53PYK1FedUuL/de5KrG4+hNZmM2ZmrMpMx67l+EuhvBYv+QRpt5ZPUGzx+Au3OriLIL4KgenRhdmqP3yEOhzg8CTMes7fqQ4HuYHfw/qI74G6k8SbbAdxvnS+redXH0ZktrxNkQzkI08HbKc7xG6230E9BHgx8puaVdof2E/w+TsImDw7Pj9Huy3HoFVuVaSCqwUE7Zp2RNzag90AaRBLTWnan9hlqPZHoGHQMqBszEeYPu0Pz/3Dl5OpGD/Cg9bq2A3iBdf4NfiezbYJFNCBJPZ5DW8dRmHhWZWzbEaytjEBPlkK2bUc4xOFJmE+hTdoLBElIBZPM579SvotOYx1GnDvI2nwfndp3BrW6jHAjVjBGPLgDGPzxjX6wO7XLql4xFJhrvQ5mtCaiA8v+kjBtkjNa29AxG6ilx0z0KH4rQTajhDAjeEhSj8fRKfSt6H1XKnOR42pveyT3J3xE40D8bgsYBLutzKXWzj+fts7B2grkI8IDJkJc3QEch5nOCqbHkWh34M+YRyt7RxweoSLhRqxg0p1/5/ubezG7TcRfMddiFkZ+vuIVozEJqcH0aMEYreW+v51sI/0JOnfiKKrtq3E2WpO1BNl8EUzdeAW/TyODpPW43zpfitn7w43dwT9MkM0XwWyw/3KgbyenRy/wA+v1/6h6VbgRPITRowM9dZFMxOt36Do8Arii4hWHovO79gI/DfQ3DkVvSNFNkMFScvmQ4B48Vs7z+iQ6K+53+Nmcw8kp1nlFoG8nFy0Phzg8CfI+9JzzPoLOOQ/FPIk8WJdoV8xkohp3WuerqDRS+zQ6PyL4nPNfoKvwm/jZRdfmXbTBHE4SEa/twL3W6+sqXvE56/wQfjMsbOzde35b86pqJFs3fo3uaMYAfzfg06GYKYvg0b9weiQbAbwTXRs/ip7qc/MBtP3YSdDk/lZ0d7SPIFudQtJ63G6dv0SlmJI9MbwIPf3on7+0zssJMzg4CO1oxMu7wM+s19dWvMK2HcGdYVuPPLSV4IjDkyB2nONXBJ1zPhHdFXQQZAs2gD9Z5yNqXhUVj6HdmdFop8fNf7fO/yfw/e0OLZjz14sZqR0ZuAx+uM36q3Po/wDNAzGL1r8X+P7hjJa9jeVh1MokiQoF3Gy9vob+qcEXosP072AeK+mP0ZjRcDA97EnBo2peFRVvY7L6/nHAp3Zb+TFBVmeBqRsr8bvYwcbWI5m28h/oHV6m0H+J+hCMi5xWW2lHD2Ea8bNlZBi+bZ0/Tf8F4CegLWEPJk7on3B6JNtWgiMOT0IMBy63Xt8d+C729nzBOnjQ7gd43dYrLArTUK/BucPL6ejuaCdmxt4/4UbwoM0/JKXHO5iETHen9ndoJ+Npgka7wkf/1qATdYdhtnKMlx+gN2aYhF6GbLA7+H9DxyT8cyravP0Js8WkP+y2Un+xeFTYDuCFmARSvdDB3rrhO4HvHa5Dg6RtRw+wwHp9Lc5lFnPREdn16OnOYESnRzL1Yzna9W9ER70Mdlv5KUHi3KDVnIaOMAaL/tlp31PI/tJ0JQequblZKaVUc3NzLPe/DJQC9SaoQYHv80ulb/M/A5djplWONYlp26jgbavc/73v/R9Z5fhu4PsOVbDduu9xgcv3dasc9ySmx3SrzHsVHKkA1QSqwyrH+YHvO8u6b3uo8j1vleNTienxJavcrysYogA1wyrDblDjAt/3m9Z97w9cttFWOZT1Ohk9Hrf+5Hf73vsnqwxLQ913mXXfiwPf41NWOZ5PTIsWBVutcn+y7/0lVjm+Fvi+4+z/VgUHBC7fPdZNvp6YHmdaZd6hYIIC1FhQXVY5Tgt834us+74UqnxrrHLMTEwPc/jov5MvXBaPuB2eZVZl+IfA9xitoFvp2xwZuBxjMEa8JTF9r7L+5AYF+6mJoHqsMhwX+J4ft+75roKGwGX7b1Y5nktMCxQ8YpX91wpQF1tlWAtqcOB73mHd875QZfs/hO1M/B6jFHRYZf+yAtQDVhkeCHXfV617fjpU+d4lbGfi95hplbtXwftVo1UvlFVPgt3zYMc9xwcu25FWObaDakhMj69bZX9bwXB1rFWGPaAmBb7n31r3XBaqbPOssjycmBYoeM4q+wMKUF+2yvBSqHs+ZN3zplBl+4VVls8nqoc+xOGJTzDfx0etirAT1P6B73OJ0rdZHbo8thH/y8T0HaxghVX+f1cLrL+/JNQ9H7Dud3uosqVjxA9RsEuBUg18Uq20yvBPge/XoKDN0uOcUGX7e9Iw4pdZZd+uDmRynzM8I/D9jrXut0tphyp42X5JGkb8h1b5l6rLaFAK1Hp0JDDY/b5s3W9RqHINRkfdFKhDE9NihIJ3rPLfqB60/v6PQ93z19b9/jFU2T5kleVPidaNk5WODivVxEzVZpXhilD67rT0ODFU2W6yynJ3onroQxye+ATzffyWQUqB+pdQ93lYgVJ6xBOuPI/qG6kvJqrxX1rlV2oJf6EUqDMC32uIgi3W/f4yVLkGo50dBeqYRPX4mgKlRvCu2s5ItZkw0yZ2VGCLgqZQ5bKnPNsS1aJBwW8VKHUKDyoF6olQ97OjAo+ELps95XlfonpMUtCpQKmbuUwpUF8Kdb/nLT0+H7psL1h6fDpRPc5XoFQDu9SfOCRkZHh/BXssPQ4JVa4xmGh58IFskOO7CpQaxwq1h8FqDWGc4U9ZP+HN0OWypzyXJ6qFPsThiU8wX8fJzFaH8Zp6iSPU+MD32V9BlwKl4PjQZfpHfSP1k8R1vk+BUsewUv2KESHuc56lxToVZjrLPp6y9PjbRLUYpuAtBUpdyXfV9aHudZelxwOhyzUMM914cKJ6nKD0lItSP+GTIaI7DQpes/QInq9iH2dbWryWqBYoO7dpLJvU8xyshgW+zyGWFnuVnfcR5rjN0uPOxPXQUZmZ/Eb9PxpD3OfvLD2WR1KuVZYef5WoFvsp2KhAqa/yNXV5qHv9zNLjf4cu12RLi15QIxOuH+LwxCeYr2MGTyhQajyrlU7CC3KfbygibKT2KH5dwhofzAGqlXUKlDqAH4a41wuWHuEbKaQ1ikd9hDNVQ194+tKA92lVxhk+I5Jy2YnLyY7iUefyvxUoNYxOBUcEvI89Yt2iIHxbHoMZxQdPoPZ/DKdRnWDV8wP4ndJJ+kHudY9V/McjKVdao/jjOES1WAnMY7k14H0aFfzJ0uOLkZTLznn7VsJ6nMfF1u9QahAfDXifo5U9PaYXU4Qv1xqrULMT1kMcnvgE83XszwQ1mrVK14PHFL5HJ2MUbLO+/4lIyjQMVDdJz8WjngT1G2aqwfRYv+fLAe7zEeu7O1WYFRbOwx7Fv5mgFgeA2gjq63zF+j1dCk4JcK/brO//V2Rls0fx/5agHmeD2sNgNYunrd+zWsFYn/dpULDS+v5XIyvbakuPuQnqcSuodzhQjWWD9XvuU/6jmVMVfW3tA5GUaxJmFJ/UoodGUL8H9UhfZFcpndPo916XWd9drwgVYTbH5VaB/ivBunEoemXWVX2R3c0q2ADhQev7P42sbD+09PhqgnqAODxxChbgOEmZUfjPlL88C7tS/0FFMX1jH8/om6r/kZC+l1p/rwvU/vwP6zf5HWkNUyb5+ZbIyjYKk4x5REJ62IZhGQ2qgZ9bv2mrglN93OdoZerVnMjKdo5VtncS0mKU9bcUqK8xXsF71m96SenpXK/3utL63halVzVGU74FVtn+T0J6zEA7FArUyZyp7Kk+Ha3xYwN+an3viUjL94pVtqS2LrjO+nsbQQ3nJus39Sp/U5ZjlUl+/lJkZTsQ4wDul5Aei6y/+RhNyqzaaldwlI/7/KUy0Z3g23r0P/7aKtsLCWlhH+LwxCdYwOMcZa/M0QZonIfvXGBdH22HBjoJUoFamIC240Ftsv7e/+x73zZcSsE/K72Sq969/q91/XoVZnltpeOJAeWL7/gYxkieCApGKlhs/bZOBed6uM8oBX+0vhNthzYMvaJQgTo2AT3+FRNhGwFKO3Lt1m9bpbyNXk9Upn1F16EB6kzMFHDcK/mGgPqD9fe+3/f+xco4PQ8qb1N1f29d363Crr7pf3zbKt/9CdSNw0Htsv7eZ0DBIGXswF6lB0z1nMAGpaPrSukprWiiO/bxslW+SxLQ4wrrb+0ANQ2U7kdetn5bh9L7cdW7zwRlVnXeH2n5WjFTwBMS0MM+xOGJT7AQx4eV3jTK9sjPV9Ub62XKGPBvRF6Ww/SNVTd686q4fnMjZkSynP77zHzV+n1KwVJVfR65SdkrE7ThjyZXxXlcbRXktzFqAXpEuN76W992fTZcwUKHHv+uqk/ZTVFm5c27ypvz7O+wV/LFHZo+1/xg9WHXZ4crE+nZqeBqVT0y+iFl9vL5TxVlJBS0E9JplfHUmPWwnb8/03/lzwXKrC56U+lN6Krd58uOa/974LJUO07HRFyCrw6qfwxH2wwF6nHXZw0K/k2ZqvO4gvdVuU+zgh9b13WpKBZ99D++YRXkpzHXjWMw9fAa12f7KbOx5F6lcxurRTiPUHoQYQ8mRkZezhetMv5dzHo4D3F44hMs5HG8MhXOzlW4XmkDNkvBpUrvl2F//lPlLfrh//i99Ufmxfh7F1h/oxPU0RWvuViZJeZKwa+U3qhwptIO4v9UZtXNXqU7vujLORG9mZkCdVRMWjgN+O+tf7uvaVLwbYcWXUqPZi9RcJqCs5Xed2iz9fkmFSzvp/5xiVWItwmzM3jtw2nA76h4zUTldgLfU3oH5Y9Z9eOTSndmdvTjJRXlVJbzuJ/4p7Xs0btCO4IDr/lLZXYtV0on7/9PBbOt40plpjiU0k5B9OUcjNkM8b/FqIe9G3sHqCkVr7lKmSndXqVt5d9YOp2p9IDKnsbqVnBhLOW0N0PsRufmxfE39kNHQBWop6nUJkcq+D+O//ttCu5UOon/NKXbzHeV2Z2+TelBRfRltTdDTHJaSxye+ASL4BiqdNRmq8LYuH5Hr4L/paIerTqPq6w/tjqm+1/p+EHn1bz2QAU/UqbjqnRsVDphOb7/l0esP3ZbDPcejN4sTaEN+EE1r5+tTASn2rFM6aTUeLQYBmqz9cfOjuH+49Ebtil0BLCx6rUNCr6gTLSn2vE9pXO84tHDXtm4g3iSdWdhFhLU3oCyRcG/KtPRVzp2K738Oh4twKxsfCqm+8/HOBG1N0g9SsEv6tSNdxX8Rax62Csbr43h3kMxUfI3qbfnz7nKJO5XOxapqFMCnMc4TF0+IUbNnYc4PPEJFuHRorQxf1DpKMYfld6Abb7STkC8f78Fs+le1CtQnM7OfM/fO8T67Y8rHbb/g9L7b1yhwu6Y6+WwV2vtQM9FR3XfRujbIbYHP8+amaX0KqznlM49+L1VVz6q4or6OQ97tVa4ZzgNPCaB+qN177fwumlbk9KRru8pHSF9VcGLSke8op+mqHTYe67Mj/i+H8bkTHnfQXicgmuUXgTxhtKR4t8oHfFpjV2LgzER0ah3bP8qxnb8jefvTVd6ELlI6bayQmlH6GKlp4vj1eMyq7zriXYPmuHoPEuFjoZ62xy1QWkbcaeC31n14yWlV/rNVnEOou3DXpTxs5j/jn2IwxOfYIU6bkRXzFeJbj7+eozBiiNaEuex1Cr3v0d0v2ZMPkw3qE9k4Dd6PVoxHfEnI7rnUZjIzhqS3RYh7PFJTMczMaJ7fgqTlPsrCLHBYPLHv1vl/i3RTHsORi/HV9ZxXQZ+o9ejEdQbVrm/FtE9DwD1G+ue20F9MAO/0+txFGalYRKPMBKHJz7BCnU0Y5Jobw95r7HoZzAp6/jfGfh9fg87IVOhl2eHudexaEdSoTu1j2Xg9/k97KmLPxM+6nURJqL4J+pN62XzeM4q/0LCrdhqAnULpq49QrwJwHEckx3/n/8Y8l6t6NwUW48vZuD3+T3sTRn3gDol5L1Ow+RJbQX1gQz8Pr+HvSnjm8S/Z5M4PPEJVrjD3ndFoR8e6ff7Degk1w7rHrvxE4rO3nG79Tu2gfqLAN8fid551X5Ew7uEN4BpHU3oJzErdKJ1kL1GpoH6OaaOPUV8yZ1xH4ejpzwVqHsI5vScgZnSU+jVeoMD3CcLh73x3l6CPc29EdQX0J26QkfPooompnHYU9fr0Q8m9vv9/dAP39xr3ecV4ltEEfcxGr3oQYFajL3lRDyHODzxCVbIYz7GAN+Dt6XqI9Fz16sc310F6uQM/J4wx1DMaLML1H/HW4c0GdT/Qi/XtfV4mGQfSRDHcSiodkzOzWyP3zsJ1PcwuR7d6HB/Xjt3+/gUJlz/a1BTPXxnCHrl1WJM3WinXjJ/Po5/w+28eclhGYN2dN5yfPcFktv4M66jBTNA2IreO8iLU3yopZ29alGh286oDPymMMeJGGd2Jaj3x/R3xOGJT7DCHv+EGVlsQzs+F6Iz7Q9BjzTmoMPNj2DC2QrUFvSc+5AM/I4ojhGgHnP8vrfQ+218FL28/lD0E5vPQ+dBPevQTqGnsiovLc7ncSQm90aht9K/Bp1XcJh1nIIe5d+JO4Kh0Bs7BhnxZvW4AJPf1I1+EO/laGf/EHTHPRu9F8n/A7XBocVu9DL80Rn4HVEcDZjtJ5T1W+8EdT66jUxDt5mPolcx/Qqzs7lCR0OuIr7tD5I+9ke3D/v3rUYPhM5Et4FD0Tb1fFA3YfatsY+X0Kv20v4dUR1/gRkw7SWe3CxxeOITrNDHbMzOoV6O19Dz90k9VyfJowEd3fmzDz0Wo53Eohhv59EC6juYqbp6Rxd6tUbwJ59n+zgKHeHxWjfaQd2MXqWWdtnjOM4F9boPPVagN/wcuB9V/o9G9OKNbR616EVvrpjsU9eTO8ajHX+Fzk+K+v5e++8G60XpaW5uprOzk5aWFrZv3552cVKlAZgFnA+cAhwEtADdwDrgT8BSYBHwUkplTJIRwCeAs4ETgVZgCLAbeAd4FVgCPAm8m04RE2UicBG6jhwDHGC9vx14C1gBLAaeAjpTKF/SnABcAJwGHAKMBfYAG4E3gRfQejwL7E2lhMkxGDgLOA84GZgCjES3lTbgdeC36LqxOqUyJkkL8Em0JicAE9Aa7QTWAK+gbcdCoCOVEibL+9D9R9R47b/F4bEQh0cQBEEQ8ofX/ntQgmUSBEEQBEFIhUI5PFdddRVvvfUWu3btYtmyZcycOTPtIgmCIAiCkAEK4/BccMEFLFiwgG9+85u8//3v59lnn+Xxxx/nwAMPTLtogiAIgiCkTGFyeJ5//nleeuklvvCFL/S998orr/Cf//mf3HDDDXW/Lzk8giAIgpA/SpXDM2TIEE466SQWLlzoen/hwoWcdtppFb/T1NREc3Oz6xAEQRAEoZgUwuEZN24cjY2NdHS4F/Z1dHTQ2tpa8TvXX389nZ2dfUdbW1sSRRUEQRAEIQUK4fDYKOWenWtoaBjwns1NN91ES0tL3zF58uQkiigIgiAIQgo0pl2AKNi4cSO9vb0Dojnjx48fEPWx6enpoaenJ4niCYIgCIKQMoWI8OzZs4fly5czZ84c1/tz5sxh6dKlKZVKEARBEISsUIgID8Btt93G97//fZYtW8Zzzz3HlVdeyUEHHcR3v/vdtIsmCIIgCELKFMbheeihh9h///356le/ysSJE1m1ahXnnHMO775bhqcbCYIgCIJQi8LswxMW2YdHEARBEPJHqfbhEQRBEARBqIU4PIIgCIIgFJ7C5PBEhey4LAiCIAj5wWu/LQ6PhS2Y7LgsCIIgCPmjubm5Zg6PJC07mDRpUuQJy83NzbS1tTF58mRJho4Z0ToZROdkEJ2TQXROhrh1bm5uZt26dTWvkQiPg3pihWH79u3SmBJCtE4G0TkZROdkEJ2TIS6dvdxTkpYFQRAEQSg84vAIgiAIglB4xOGJme7ubr72ta/R3d2ddlEKj2idDKJzMojOySA6J0MWdJakZUEQBEEQCo9EeARBEARBKDzi8AiCIAiCUHjE4REEQRAEofCIwyMIgiAIQuERhydmrrrqKt566y127drFsmXLmDlzZtpFyjWnn346P//5z2lra0MpxXnnnTfgmvnz59PW1kZXVxfPPPMMRx99dAolzTfXXXcdL774Ip2dnXR0dPDII49w+OGHD7hOtA7H5z//eVasWMG2bdvYtm0bS5cu5eyzz3ZdIxpHz3XXXYdSittvv931vmgdnvnz56OUch3t7e0DrklLZyVHPMcFF1yguru71RVXXKGOPPJIdfvtt6vt27erAw88MPWy5fU4++yz1T//8z+ruXPnKqWUOu+881yfX3vttWrbtm1q7ty56phjjlEPPvigamtrU6NGjUq97Hk6Hn/8cXXppZeqo48+Wh133HHqF7/4hVqzZo0aMWKEaB3h8Vd/9Vfqox/9qDrssMPUYYcdpr7xjW+o7u5udfTRR4vGMR0nn3yyeuutt9TLL7+sbr/99r73Retojvnz56uVK1eqCRMm9B3jxo3Lis7pC1TU4/nnn1d33323671XXnlFfetb30q9bEU4Kjk869atU9dee23fv5uamtSWLVvUlVdemXp583yMGzdOKaXU6aefLlrHfGzatEn99V//tWgcwzFy5Ej12muvqQ9/+MPqmWeecTk8onU0x/z589Xvf//7qp+nqbNMacXEkCFDOOmkk1i4cKHr/YULF3LaaaelVKpiM23aNCZOnOjSvKenhyVLlojmIRk9ejQAmzdvBkTrOBg0aBAXXnghI0eO5LnnnhONY+Cuu+7il7/8JYsWLXK9L1pHy2GHHUZbWxtvvfUWDz74INOmTQPS11keHhoT48aNo7GxkY6ODtf7HR0dtLa2plSqYmPrWknzgw8+OI0iFYbbbruNZ599ltWrVwOidZRMnz6d5557jmHDhrFjxw7mzp3LH//4Rz7wgQ8AonFUXHjhhZx44onMmDFjwGdSn6PjhRde4HOf+xyvv/46EyZM4Ctf+QpLly7lmGOOSV1ncXhiRinl+ndDQ8OA94RoEc2j5Tvf+Q7HHXdcxYR70To8r732GieccAJjxozhk5/8JA888ACzZs3q+1w0Ds+UKVP413/9V84666yajzYQrcPzxBNP9L1etWoVzz33HG+++SaXXnopzz//PJCezjKlFRMbN26kt7d3QDRn/PjxA7xbIRrWr18PIJpHyB133MG5557Lhz70Idra2vreF62jY8+ePbz55pssX76cG264gRUrVvD3f//3onGEnHTSSUyYMIHly5ezZ88e9uzZw+zZs5k3bx579uzp01O0jp6uri5WrlzJYYcdlnqdFocnJvbs2cPy5cuZM2eO6/05c+awdOnSlEpVbN5++23a29tdmg8ZMoRZs2aJ5gG48847Of/88znjjDNYs2aN6zPROj4aGhoYOnSoaBwhixYtYvr06Zxwwgl9x+9+9zt+8IMfcMIJJ/DWW2+J1jHR1NTEUUcdRXt7eybqdOpZ3UU97GXpl19+uTryyCPVbbfdprZv364OOuig1MuW12PkyJHq+OOPV8cff7xSSqkvfvGL6vjjj+9b6n/ttdeqLVu2qE984hPqmGOOUT/4wQ9kaWmA46677lJbtmxRH/zgB13LS4cNG9Z3jWgd/vjmN7+pZs6cqQ4++GA1ffp09Y1vfEP19vaqM888UzSO+ei/Sku0jub4l3/5F/XBD35QTZ06VZ1yyinq5z//udq2bVtfv5eyzukLVOTjqquuUm+//bbavXu3WrZsmWtZrxz+j1mzZqlK3HfffX3XzJ8/X61bt07t2rVLLV68WB1zzDGplztvRzUuvfRS13Widbjj//7f/9tnHzo6OtSTTz7Z5+yIxvEe/R0e0Tqaw95Xp7u7W7333nvqpz/9qTrqqKMyoXOD9UIQBEEQBKGwSA6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeMThEQRBEASh8IjDIwiCIAhC4RGHRxAEQRCEwiMOjyAIgiAIhUccHkEQCs/tt9/OI488knYxBEFIEXF4BEEoPDNmzODFF19MuxiCIKSIPEtLEITC0tjYyM6dO2lqaup774UXXuDUU09NsVSCIKRBY9oFEARBiIu9e/cyc+ZMXnzxRY4//ng6OjrYvXt32sUSBCEFxOERBKGwKKWYNGkSGzdu5A9/+EPaxREEIUUkh0cQhELz/ve/nxUrVqRdDEEQUkYcHkEQCs0JJ5wgDo8gCOLwCIJQbI499liZzhIEQRweQRCKzaBBgzjuuOOYOHEiLS0taRdHEISUEIdHEIRC85WvfIULL7yQdevW8dWvfjXt4giCkBKyD48gCIIgCIVHIjyCIAiCIBQecXgEQRAEQSg84vAIgiAIglB4xOERBEEQBKHwiMMjCIIgCELhEYdHEARBEITCIw6PIAiCIAiFRxweQRAEQRAKjzg8giAIgiAUHnF4BEEQBEEoPOLwCIIgCIJQeP4/cZ4Fv1Dm5tcAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -186,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 5, "id": "1305b19c", "metadata": {}, "outputs": [ @@ -199,7 +199,7 @@ }, { "data": { - "image/png": "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aniMKCGCyTM6duzInDlz2L59O9u3b2fOnDl06NAh6X7Tp0+nrKyMPXv2sHDhQvr16xe37fz581FKceGFF7ppuuA7H5q6rwt9FZv6Axf6CoL9OCuDez0sJ4JJEJpSaupD0AuDu0WRqbcCO13s1y9EMHnGY489xoABAxg9ejSjR49mwIABzJ07N+E+U6dO5frrr+eaa65h0KBBbNy4kRdffJF27Zquq3XdddehlPLKfMFX3BJMPdEXuDrg4yz7ChK/4phsLIIIJkFw2IP29II7YQIW21cUA74haoIJ9Ny+0Jfi4mKllFKDBw+uf23IkCFKKaX69OkTd7/y8nI1derU+r9btWqltm3bpq666qpG7U488UT12Wefqa5duyqllLrwwgvTsq+wsFAppVRhYWHg50oKCjopUKa0zqKfc00fq0PwmbIp/zSf42oPj9HepXMuRUouliUKlIJxLvZ5jenzHyH4fJmUNsZ+pfT1Ixg7Ur1/R8bDNGzYMLZv386yZcvqX3vzzTfZvn07w4cPj7nPkUceSffu3VmwYEH9azU1Nbz66quN9mndujWPP/4411xzDRUVFbG6akKrVq0oLCxsVIQwsRntpobs4pj6m3pVduYEjh8eJjsctwWo8vA4ghBFbAykeJgc9uCkgAn/TLnICKZu3bqxadOmJq9v2rSJbt26xd0HaCKCKioqGu0za9YsFi9ezLx581K2Z9q0aezcubO+lJVJ3pnw4cawnAim1LF9y/+CIDTFiho3BVORqUtd7NNvojMsF7hgmj59OkqphGXgwIEAMeOL8vLyksYdHfh+w33OP/98zjrrLK677rq07J45cybt27evLz17RiO1e/PCDcFkJwisztKWoPHTwyTxS4LQFC8EU9Q9TBAlwRT4ind33303TzzxRMI2paWlnHjiiXTt2nRKdOfOneMOo23cqGcGdevWrX4boEuXLvX7nHXWWRx99NFs37690b7//Oc/ef311/nSl74Us++amhpqamoS2i0EjZuCSTxMyRHBJAjxEQ9TbKxgKgrSiJQJQeBX8mKDvgcNGlT/2uDBg1MK+p4yZUr93wUFBY2Cvrt27ar69+/fqCil1A9+8ANVVFTketCYFD/LWAVKwbIM9z/c7F+joCAEnyebcoz5LJUeHuN+c4xbQvB5pUgJWzlSgVKwx6X+DjH9KaWDp4P+fJmW68xn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", + "image/png": "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6sILL1SHHXaYOvLII9Xvfvc7tWrVKjVixAiRdYTHX/zFX6iPf/zjavr06Wr69OnqW9/6lurt7VWHHXaYyDim49hjj1Vvvvmmeu6559Qtt9wy8L7IOvxx7bXXqhdeeEFNnDhx4Bg/fnyWZJy+kIp6PPXUU+r22293vffSSy+pb3/726m3rQhHtYBnzZo16sorrxz4d0tLi9q4caO69NJLU29vno/x48crpZQ68cQTRdYxH+vXr1d/8zd/IzKO4Rg5cqR69dVX1Z//+Z+rxx9/3BXwiKzDH9dee6364x//WPPvactYprRiYsiQIRxzzDEsXLjQ9f7ChQs54YQTUmpVsZk2bRqTJk1yybyvr48lS5aIzEMyZswYADZs2ACIrOOgubmZc845h5EjR/Lkk0+KjGPgtttu4/e//z2LFi1yvS+yjo7p06fT0dHBm2++yc9//nOmTZsGZEPG8vDQmBg/fjyDBw+mq6vL9X5XVxft7e0ptarY2HKtJvP9998/jSYVhptvvpknnniCF198ERBZR8mMGTN48sknGTZsGFu2bGHevHm8/PLLfPjDHwZExlFxzjnn8KEPfYiZM2fu8TfR52h4+umnueCCC3jttdeYOHEiX/3qV1m6dCmHH354JmQsAU/MKKVc/25qatrjPSFaRObR8oMf/IAjjzyyasG9yDo8r776KkcffTRtbW385V/+JXfffTezZ88e+LvIODz77LMP//zP/8ypp55a99EGIutwPPzwwwOvV65cyZNPPskbb7zBhRdeyFNPPQWkK2OZ0oqJdevW0d/fv0c2Z8KECXtEuEI0rF27FkBkHiG33norn/zkJ/noRz9KR0fHwPsi6+jYuXMnb7zxBsuXL+eaa65hxYoVfPGLXxQZR8gxxxzDxIkTWb58OTt37mTnzp3MmTOH+fPns3PnzgF5iqyjZdu2bbzwwgtMnz49E/osAU9M7Ny5k+XLlzN37lzX+3PnzmXp0qUptarYvPXWW3R2drpkPmTIEGbPni0yD8D3v/99zjrrLE4++WRWrVrl+pvIOj6ampoYOnSoyDhCFi1axIwZMzj66KMHjj/84Q/89Kc/5eijj+bNN98UWcdAS0sLhx56KJ2dnZnR59Qru4t62MvSL774YnXIIYeom2++WW3evFntt99+qbctr8fIkSPVUUcdpY466iillFJf+tKX1FFHHTWw1P/KK69UGzduVJ/61KfU4Ycfrn7605/K0tIAx2233aY2btyoTjrpJNcS02HDhg1cI7IOf1x//fVq1qxZav/991czZsxQ3/rWt1R/f7865ZRTRMYxH5WrtETW4Y/vfve76qSTTlJTp05Vxx13nHrggQfUpk2bBvq8DMg4fSEV+bjsssvUW2+9pXbs2KGWLVvmWtYrh/9j9uzZqhp33nnnwDXXXnutWrNmjdq+fbtavHixOvzww1Nvd96OWlx44YWu60TW4Y5//dd/HfAPXV1d6pFHHhkIdkTG8R6VAY/IOvxh76vT29ur3n33XfXrX/9aHXrooZmRcZP1QhAEQRAEobBIDY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHwSMAjCIIgCELhkYBHEARBEITCIwGPIAiCIAiFRwIeQRAKzy233MJ9992XdjMEQUgRCXgEQSg8M2fO5Jlnnkm7GYIgpIg8S0sQhMIyePBgtm7dSktLy8B7Tz/9NMcff3yKrRIEIQ0Gp90AQRCEuNi1axezZs3imWee4aijjqKrq4sdO3ak3SxBEFJAAh5BEAqLUorJkyezbt06nn/++bSbIwhCikgNjyAIheaDH/wgK1asSLsZgiCkjAQ8giAUmqOPPloCHkEQJOARBKHYHHHEETKdJQiCBDyCIBSb5uZmjjzySCZNmsTo0aPTbo4gCCkhAY8gCIXmq1/9Kueccw5r1qzha1/7WtrNEQQhJWQfHkEQBEEQCo9keARBEARBKDwS8AiCIAiCUHgk4BEEQRAEofBIwCMIgiAIQuGRgEcQBEEQhMIjAY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHw/P9y2vvEykvE7wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -219,7 +219,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 6, "id": "7322927e", "metadata": {}, "outputs": [ @@ -232,7 +232,7 @@ }, { "data": { - "image/png": "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aniMKCGCyTM6duzInDlz2L59O9u3b2fOnDl06NAh6X7Tp0+nrKyMPXv2sHDhQvr16xe37fz581FKceGFF7ppuuA7H5q6rwt9FZv6Axf6CoL9OCuDez0sJ4JJEJpSaupD0AuDu0WRqbcCO13s1y9EMHnGY489xoABAxg9ejSjR49mwIABzJ07N+E+U6dO5frrr+eaa65h0KBBbNy4kRdffJF27Zquq3XdddehlPLKfMFX3BJMPdEXuDrg4yz7ChK/4phsLIIIJkFw2IP29II7YQIW21cUA74haoIJ9Ny+0Jfi4mKllFKDBw+uf23IkCFKKaX69OkTd7/y8nI1derU+r9btWqltm3bpq666qpG7U488UT12Wefqa5duyqllLrwwgvTsq+wsFAppVRhYWHg50oKCjopUKa0zqKfc00fq0PwmbIp/zSf42oPj9HepXMuRUouliUKlIJxLvZ5jenzHyH4fJmUNsZ+pfT1Ixg7Ur1/R8bDNGzYMLZv386yZcvqX3vzzTfZvn07w4cPj7nPkUceSffu3VmwYEH9azU1Nbz66quN9mndujWPP/4411xzDRUVFbG6akKrVq0oLCxsVIQwsRntpobs4pj6m3pVduYEjh8eJjsctwWo8vA4ghBFbAykeJgc9uCkgAn/TLnICKZu3bqxadOmJq9v2rSJbt26xd0HaCKCKioqGu0za9YsFi9ezLx581K2Z9q0aezcubO+lJVJ3pnw4cawnAim1LF9y/+CIDTFiho3BVORqUtd7NNvojMsF7hgmj59OkqphGXgwIEAMeOL8vLyksYdHfh+w33OP/98zjrrLK677rq07J45cybt27evLz17RiO1e/PCDcFkJwisztKWoPHTwyTxS4LQFC8EU9Q9TBAlwRT4ind33303TzzxRMI2paWlnHjiiXTt2nRKdOfOneMOo23cqGcGdevWrX4boEuXLvX7nHXWWRx99NFs37690b7//Oc/ef311/nSl74Us++amhpqamoS2i0EjZuCSTxMyRHBJAjxEQ9TbKxgKgrSiJQJQeBX8mKDvgcNGlT/2uDBg1MK+p4yZUr93wUFBY2Cvrt27ar69+/fqCil1A9+8ANVVFTketCYFD/LWAVKwbIM9z/c7F+joCAEnyebcoz5LJUeHuN+c4xbQvB5pUgJWzlSgVKwx6X+DjH9KaWDp4P+fJmW68xn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", + "image/png": "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6sILL1SHHXaYOvLII9Xvfvc7tWrVKjVixAiRdYTHX/zFX6iPf/zjavr06Wr69OnqW9/6lurt7VWHHXaYyDim49hjj1Vvvvmmeu6559Qtt9wy8L7IOvxx7bXXqhdeeEFNnDhx4Bg/fnyWZJy+kIp6PPXUU+r22293vffSSy+pb3/726m3rQhHtYBnzZo16sorrxz4d0tLi9q4caO69NJLU29vno/x48crpZQ68cQTRdYxH+vXr1d/8zd/IzKO4Rg5cqR69dVX1Z//+Z+rxx9/3BXwiKzDH9dee6364x//WPPvactYprRiYsiQIRxzzDEsXLjQ9f7ChQs54YQTUmpVsZk2bRqTJk1yybyvr48lS5aIzEMyZswYADZs2ACIrOOgubmZc845h5EjR/Lkk0+KjGPgtttu4/e//z2LFi1yvS+yjo7p06fT0dHBm2++yc9//nOmTZsGZEPG8vDQmBg/fjyDBw+mq6vL9X5XVxft7e0ptarY2HKtJvP9998/jSYVhptvvpknnniCF198ERBZR8mMGTN48sknGTZsGFu2bGHevHm8/PLLfPjDHwZExlFxzjnn8KEPfYiZM2fu8TfR52h4+umnueCCC3jttdeYOHEiX/3qV1m6dCmHH354JmQsAU/MKKVc/25qatrjPSFaRObR8oMf/IAjjzyyasG9yDo8r776KkcffTRtbW385V/+JXfffTezZ88e+LvIODz77LMP//zP/8ypp55a99EGIutwPPzwwwOvV65cyZNPPskbb7zBhRdeyFNPPQWkK2OZ0oqJdevW0d/fv0c2Z8KECXtEuEI0rF27FkBkHiG33norn/zkJ/noRz9KR0fHwPsi6+jYuXMnb7zxBsuXL+eaa65hxYoVfPGLXxQZR8gxxxzDxIkTWb58OTt37mTnzp3MmTOH+fPns3PnzgF5iqyjZdu2bbzwwgtMnz49E/osAU9M7Ny5k+XLlzN37lzX+3PnzmXp0qUptarYvPXWW3R2drpkPmTIEGbPni0yD8D3v/99zjrrLE4++WRWrVrl+pvIOj6ampoYOnSoyDhCFi1axIwZMzj66KMHjj/84Q/89Kc/5eijj+bNN98UWcdAS0sLhx56KJ2dnZnR59Qru4t62MvSL774YnXIIYeom2++WW3evFntt99+qbctr8fIkSPVUUcdpY466iillFJf+tKX1FFHHTWw1P/KK69UGzduVJ/61KfU4Ycfrn7605/K0tIAx2233aY2btyoTjrpJNcS02HDhg1cI7IOf1x//fVq1qxZav/991czZsxQ3/rWt1R/f7865ZRTRMYxH5WrtETW4Y/vfve76qSTTlJTp05Vxx13nHrggQfUpk2bBvq8DMg4fSEV+bjsssvUW2+9pXbs2KGWLVvmWtYrh/9j9uzZqhp33nnnwDXXXnutWrNmjdq+fbtavHixOvzww1Nvd96OWlx44YWu60TW4Y5//dd/HfAPXV1d6pFHHhkIdkTG8R6VAY/IOvxh76vT29ur3n33XfXrX/9aHXrooZmRcZP1QhAEQRAEobBIDY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHwSMAjCIIgCELhkYBHEARBEITCIwGPIAiCIAiFRwIeQRAKzy233MJ9992XdjMEQUgRCXgEQSg8M2fO5Jlnnkm7GYIgpIg8S0sQhMIyePBgtm7dSktLy8B7Tz/9NMcff3yKrRIEIQ0Gp90AQRCEuNi1axezZs3imWee4aijjqKrq4sdO3ak3SxBEFJAAh5BEAqLUorJkyezbt06nn/++bSbIwhCikgNjyAIheaDH/wgK1asSLsZgiCkjAQ8giAUmqOPPloCHkEQJOARBKHYHHHEETKdJQiCBDyCIBSb5uZmjjzySCZNmsTo0aPTbo4gCCkhAY8gCIXmq1/9Kueccw5r1qzha1/7WtrNEQQhJWQfHkEQBEEQCo9keARBEARBKDwS8AiCIAiCUHgk4BEEQRAEofBIwCMIgiAIQuGRgEcQBEEQhMIjAY8gCIIgCIVHAh5BEARBEAqPBDyCIAiCIBQeCXgEQRAEQSg8EvAIgiAIglB4JOARBEEQBKHw/P9y2vvEykvE7wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -258,7 +258,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 7, "id": "5c43792b", "metadata": { "scrolled": false @@ -440,13 +440,13 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 8, "id": "b8ad4501", "metadata": {}, "outputs": [ { "data": { - "image/png": "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RQghhKhOrH7GLiwsDI1GU+QYP368oc3ixYvx9PSkVq1adOrUifDw8EocsRm8gFGgahe6F+mO/HJMz6/MEhQUhFKKLl268NNPP3H27FlOnTrFggUL6NatGwBLly5l8+bNRp/T6XQkJiYafe2vX7/OxYsXDQtMfvzxRx566KFiz2tvb8/atWvp1asXPj4+t0zqZs+eTWxsLFlZWSQkJLBw4cJbxpSens7y5cuLbH1zM19fX5RSRiuYvb29UUrRrFkzIH/278qVKzz88MOcPn2a9PR01q5di6OjI2PHjiU6Oprk5GQ+++wzw/2XBZydnfn+++9JS0sjISGhyKba06ZN4/jx41y7do0LFy6waNEim1stK4QQ4tasPrGrLBa/FKsBBt70unAdN+rL+bJsvXr1GDhwIIsWLSIjI6NIfcHq3iVLljBw4ECjhSmDBg2idu3arFmzpti+PT09GThwIDk5RVd/1K5dm19++YU2bdowcOBATp8+XeIYR4wYwbRp03jhhRe45557GDZsGCdOnLhtbG+//TZt27ZlxIgRt217K46OjvznP//hiSeeYODAgfTq1Yv169czaNAgBg0axJgxY5gwYQIjR440+tyMGTM4fvw4HTp0YM6cOSxYsIB+/foZ6vV6Pf/5z3+477778PPzo0+fPnzyySdlGqsQQgjrYvWXYiuLxS/FNgNutfWd5kZ9MyCm/E579913o9Vqb5lYQf42MX/88Qdjxoxh7ty5AIwfP561a9eSnp5uaDd48GDS0tLQ6XSGfXqmTZtWpL8333yTtLQ0WrduTXZ2dpH6gnvtADw8PPj777/ZuXMnubm5xMXFcejQodvGlpiYyMKFC/nggw/YsGHDbduXxN7e3vD8YYB169YxZswY7rzzTtLT04mKimL37t307t3bKMndt28fH3/8MQBnz57lwQcfZNq0aezcuRPAaNYxJiaGN998k8WLFzNp0qRSj1UIIYR1kRm76qp2ObczUcEeY6ZsRbFkyRLDZdeGDRvy8MMPs2zZMqM2u3fvpl27dnTt2pXPPvuMkJAQPv/88yJ9bd++HScnJ2bNmnXb865duxYHBwfOnz/P119/zbBhw0zetfvjjz+mYcOGPPPMMya1L056errR00kuXrxITEyMUUJ78eJFGjVqZPS5AwcOFHl/8/2KvXr1Yvv27cTHx5OamsqqVatwcXHB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viileOihhzh06BDXr1+nZ8+eRc7dvHlzzp49S1BQkElPIHn00Uc5efIkWVlZREdHM3nyZKP6hg0bsmnTJjIyMjh//nyxif8dd9zBV199xcWLF7l69Sq7du3i/vvvN2qzadMmhg0bRq1atW47JiGEqI4ksaumtBpYOPbf10Z1WkBB4Jjyvyxbr149Bg4cyKJFi8jIyChSf/XqVQCWLFnCwIEDady4saFu0KBB1K5dmzVr1hTbt6enJwMHDiQnJ6dIXe3atfnll19o06YNAwcO5PTp0yWOccSIEUybNo0XXniBe+65h2HDhnHixIkS2z/11FPs3LmTo0ePFqnLzc0lIyODtWvXotPpGDJkiKGuQYMGDB48mOXLl/Pjjz8yb948Tp48SePGjWncuDE//vijoe3s2bNZs2YN999/P1u2bOH777+nXr16ADRp0oQtW7Zw6NAhvL29mThxIs8++yxvvPGG0Vj8/PxIT0+na9euvPLKK7z11lv069evxLh8fHw4c+YMaWlphjInJyfCwsJo0qQJQ4YMwdvbm08++QStVktsbCw7d+40SrwBxo8fz4oVK4zKPvnkE2bOnImXlxfHjx83qmvTpg379u1j7dq1+Pv7o5TxHx6FdejQgTVr1vDf//6Xtm3b8vbbbzNr1iyjxHjFihU0b96cPn36MHLkSPz9/WnUqJFRP7/88guNGzdm0KBBdOzYkd9//51du3YZvs4AERER2NnZyf6SQgirpuSw3OHs7KyUUsrZ2blIXbNmzdSqVatUs2bNzO7X1wulvr/94etVvvF07txZKaXUsGHDbtv25MmTasaMGYb369evV8uWLTO8X758ucrJyVFpaWkqIyNDFZg6dapRP9HR0SorK0tdunRJNWzYUNWpU+eW5502bZo6ffq0qlGjhkkxpaenq8DAwNu2W7Rokfrll18M7//zn/+oP//80/B+9uzZ6siRI0U+p5RS7777ruG9o6OjysvLUwMGDFCAev/991VUVJTRZyZOnKhSU1OVRqNRgAoPD1d79uwxavPbb7+pOXPmlDjeBQsWqJ07dxqVPf/88+rq1auqXr16xX7mscceU5cvX1b29vYKUPfff7/Ky8sz/Iz6+voqpZQaMmSI0ecKYu/WrZtKSkpSL730ksk/U999953atm2bUVlgYKA6efKkAtQ999yjlFKqS5cuhvqWLVsqpZQKCAhQgOrdu7dKSUkxjLvgOHv2rHr++eeNyi5fvqzGjh1b7FjK8m+ytIdOp1ODBw9WOp2uws5Z2YetxWxb8WqVVttHtW//idJq+yjQVoExVf/v8a1yicKHzNhVU651y7edqQouq91uFgbyZ+0KZn8aNmzIww8/zLJly4za7N69m3bt2tG1a1c+++wzQkJC+Pzzz4v0tX37dpycnJg1a9Ztz7t27VocHBw4f/48X3/9NcOGDbvlfWAajcakeL755hseeughmjRpAhQ/k1WSm2e1MjIySEtLM8w4eXl5ceDAAaP2+/btw9nZmaZNmxbbB0BiYmKRWaubOTg4kJWVZVTWrl07jhw5wpUrV4r9zIYNG8jNzWX48OEAPPPMM+zevZvY2FijdsVdBvfw8GDnzp28//77fPrppyWOqzAvL68i97z99ttv3HPPPWi1Wry8vMjJyTE65x9//GEUQ8eOHalduzaXL18mLS3NcHh6enLXXXcZ9Z2ZmYmjo6PJ4xNCmGo4EINev4sjR2ag1+8CYm6Ui4oiiV01lZhSvu1MdfbsWfR6vUkLJFatWkWLFi3o1q0bTz/9NDExMezdu9eoTXp6OufOnePEiRMEBARQs2bNYu8d27VrF0OGDGHChAl88skntzxvfHw8LVu2ZNKkSWRmZhIUFMSePXtKXN165swZk+I5evQox44dY+zYsbRv3562bduanNgVvryslEKrzf/nV1xiWVwCfas+ipOUlGR0GRLyk5rbjfPbb79l/Pjx2NnZMXr06CLJOOR/3wq7dOkSBw8e5IknnsDZ2fmW57nZreK/+fWtkm+tVktiYiLt2rUzOlq2bMncuXON2tavX59Lly6ZPD4hhCmGA+sAt0LlbjfKJbmrKJLYVVPhp/NXv+r1xdfr9XAhKb9debpy5Qrbtm1j0qRJxc561KlTx/A6OTmZDRs2MH78eMaPH8/y5ctv2/8777zDyy+/jKura5G6nTt3MnjwYJ566im++OKLW/aTlZXF5s2bCQgIoFevXnTv3p22bdsW23b16tX069ePdu3aFanT6XRGcRbMQj7zzDPs3LmT+Ph4Q112dnapVoieOnWqyD5z3bt3JzU1lYSEBLP7K3DkyBFatWplVHb8+HHatWtXJOG72ZIlS+jXrx/+/v7Y2dmxfv16k86XmZnJ4MGDycrKYtu2bdSuXdukz506dYoePXoYlXXp0oUzZ86g1+uJiorCzs6OTp3+XQ107733GsXw+++/07hxY3Jzczl37pzRcfnyZUO7Fi1a4ODgUOW2pRGietMCC296XbgOILCYOmEJ8lW2EEtvUKxX+VuaoMl/bVSnzy+f+m3RuvLg7++PTqfj4MGDPProo9x99920atWKKVOmFLmkuGTJEvz8/PDy8mLlypW37TssLIzIyMgSL7nu3r2bxx9/HD8/PxYtWlRsGz8/P5555hnatGmDp6cnY8aMISMjo8jlxAKBgYHs27ePXbt24e/vz/3334+npyePPfaY4ZJgge+//x43Nzeef/75IjNZMTExeHp64u3tTYMGDYqsoC1JUFAQ7u7ufP7557Rs2ZIhQ4bwzjvvMH/+fJMuEZdk9+7dODk50aZNG0PZDz/8wN9//82GDRvo3r07np6ePProo4bVzACnT5/m119/5eOPP+aHH34ocjn3VjIyMnj44YfJzc1l69atODk53fYzn376KX379uWNN97gnnvuYezYsTz//PPMmzcPyJ9R3bp1K9988w1dunShQ4cOLFmyxGjxzs6dOzlw4AAbNmzgoYceolmzZjzwwAO89957Rqt8e/bsyblz5zh//rzJMQkhbqcn4E7JKYUW8LjRTlSESr/p0JoPSy2eKDiGd0IlfKExWjARuzC/3JJxNW7cWH3++eeGhQ1xcXFqw4YNytfXt0jb6Oho9fPPPxcpX758uQoODi5S/uSTT6qsrCzVtGlTw+cLbpIHVJ06dVTPnj1VamqqWrx4cZHPDx06VB04cEClpKSotLQ0tX//ftWnT59bxmNvb69effVVdezYMZWRkaGSkpJUeHi4Gjt2bJGbYVeuXKmSkpKK3Khvb2+v1q5dq5KTk5VSSvn5+SnIXzwxdOhQo7ZXrlwx1APKx8dH/fbbbyorK0v99ddfas6cOUbnDQ8PVwsWLDDqIzg4WC1fvvyWca1evVp9+OGHRmUeHh5q7dq1KiUlRV27dk0dPHhQde7c2ajN+PHjlVJKderUyai8YPFE4QUshReOODk5qb1796qwsDDl6Oh425+nRx99VJ08eVJdv35dxcTEqNdff92o/s4771SbN29WmZmZKiYmRj399NNFfi5q166tFi5cqOLj49X169dVbGys+vbbbw0/R4AKCQlRr776aonjkMUTErPEW5rjCQXKhOOJ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", + "image/png": "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", "text/plain": [ "
" ] @@ -500,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 9, "id": "697a88bd", "metadata": { "scrolled": true @@ -510,15 +510,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "end_time-1.0e-03: Numba=10.771x; Cython(cryk_ode)=6.249x; Cython(CySolver)=4.908x; NbCy=1.724x; NbCyS=2.195x\n", - "end_time-1.0e-02: Numba=10.663x; Cython(cryk_ode)=6.149x; Cython(CySolver)=4.777x; NbCy=1.734x; NbCyS=2.232x\n", - "end_time-1.0e-01: Numba=19.416x; Cython(cryk_ode)=9.867x; Cython(CySolver)=9.324x; NbCy=1.968x; NbCyS=2.082x\n", - "end_time-1.0e+00: Numba=56.385x; Cython(cryk_ode)=20.103x; Cython(CySolver)=41.238x; NbCy=2.805x; NbCyS=1.367x\n", - "end_time-1.0e+01: Numba=101.481x; Cython(cryk_ode)=25.821x; Cython(CySolver)=184.171x; NbCy=3.930x; NbCyS=0.551x\n", - "end_time-1.0e+02: Numba=109.941x; Cython(cryk_ode)=25.669x; Cython(CySolver)=302.513x; NbCy=4.283x; NbCyS=0.363x\n", - "end_time-1.0e+03: Numba=105.245x; Cython(cryk_ode)=25.829x; Cython(CySolver)=331.665x; NbCy=4.075x; NbCyS=0.317x\n", - "end_time-1.0e+04: Numba=93.565x; Cython(cryk_ode)=26.020x; Cython(CySolver)=344.069x; NbCy=3.596x; NbCyS=0.272x\n", - "end_time-1.0e+05: Numba=92.019x; Cython(cryk_ode)=27.482x; Cython(CySolver)=341.997x; NbCy=3.348x; NbCyS=0.269x\n" + "end_time-1.0e-03: Numba=10.269x; Cython(cryk_ode)=6.316x; Cython(CySolver)=4.597x; NbCy=1.626x; NbCyS=2.234x\n", + "end_time-1.0e-02: Numba=10.356x; Cython(cryk_ode)=6.308x; Cython(CySolver)=4.638x; NbCy=1.642x; NbCyS=2.233x\n", + "end_time-1.0e-01: Numba=14.636x; Cython(cryk_ode)=7.817x; Cython(CySolver)=6.779x; NbCy=1.872x; NbCyS=2.159x\n", + "end_time-1.0e+00: Numba=28.605x; Cython(cryk_ode)=13.384x; Cython(CySolver)=14.547x; NbCy=2.137x; NbCyS=1.966x\n", + "end_time-1.0e+01: Numba=90.358x; Cython(cryk_ode)=28.422x; Cython(CySolver)=115.414x; NbCy=3.179x; NbCyS=0.783x\n", + "end_time-1.0e+02: Numba=113.148x; Cython(cryk_ode)=27.252x; Cython(CySolver)=311.789x; NbCy=4.152x; NbCyS=0.363x\n", + "end_time-1.0e+03: Numba=116.315x; Cython(cryk_ode)=26.986x; Cython(CySolver)=419.783x; NbCy=4.310x; NbCyS=0.277x\n", + "end_time-1.0e+04: Numba=99.076x; Cython(cryk_ode)=26.626x; Cython(CySolver)=442.357x; NbCy=3.721x; NbCyS=0.224x\n", + "end_time-1.0e+05: Numba=94.681x; Cython(cryk_ode)=33.062x; Cython(CySolver)=443.274x; NbCy=2.864x; NbCyS=0.214x\n" ] } ], diff --git a/Benchmarks/CyRK_CySolver.pdf b/Benchmarks/CyRK_CySolver.pdf index 2289bc7833fc05f9648c99344d9e5cc8bf6e8cc8..31bf3d5033b8a8d28e9690eee17a42c6ffc1ca61 100644 GIT binary patch delta 8226 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 delta 6007 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 diff --git a/Benchmarks/CyRK_cyrk_ode.pdf b/Benchmarks/CyRK_cyrk_ode.pdf index 2289bc7833fc05f9648c99344d9e5cc8bf6e8cc8..31bf3d5033b8a8d28e9690eee17a42c6ffc1ca61 100644 GIT binary patch delta 8226 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 delta 6007 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 X$J)#1Khppf2E#-MIXRWIl?neJaG6o> delta 5960 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 Ah5!Hn diff --git a/Benchmarks/CyRK_SciPy_Compare_v0-6-0a4.png b/Benchmarks/archive/CyRK_SciPy_Compare_v0-6-0a4.png similarity index 100% rename from Benchmarks/CyRK_SciPy_Compare_v0-6-0a4.png rename to Benchmarks/archive/CyRK_SciPy_Compare_v0-6-0a4.png diff --git a/Benchmarks/CyRK_SciPy_Compare_v0-6-2-dev4.png b/Benchmarks/archive/CyRK_SciPy_Compare_v0-6-2-dev4.png similarity index 100% rename from Benchmarks/CyRK_SciPy_Compare_v0-6-2-dev4.png rename to Benchmarks/archive/CyRK_SciPy_Compare_v0-6-2-dev4.png diff --git a/Performance/cyrk_performance-DOP853.csv b/Performance/cyrk_performance-DOP853.csv index 99d390e..7fa85f8 100644 --- a/Performance/cyrk_performance-DOP853.csv +++ b/Performance/cyrk_performance-DOP853.csv @@ -13,3 +13,4 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 19:01:55, 1.1085, 0.0280, 0.1259, 0.0038, 0.1928, 0.0068, 10.5592, 0.1295, 0.7260, 0.0161, 1.9403, 0.1159, 0.5095, 0.0229, 0.0981, 0.0039, 0.1154, 0.0031, 5.1162, 0.2334, 0.4771, 0.0345, 0.9215, 0.0410, 1.5993, 0.0191, 0.1972, 0.0056, 0.3029, 0.0043, 21.7690, 0.3977, 1.8171, 0.0565, 3.9987, 0.0936, 1.9748, 0.1240, 0.2101, 0.0042, 0.5470, 0.0321, 25.2882, 0.2939, 1.9768, 0.0476, 7.2745, 0.1060 0.7.0.dev7, 27/08/2023 01:13:33, 1.0344, 0.0015, 0.0966, 0.0002, 0.1670, 0.0005, 10.2972, 0.0150, 0.5214, 0.0006, 1.5239, 0.0135, 0.4878, 0.0017, 0.0772, 0.0001, 0.0991, 0.0005, 4.5979, 0.0411, 0.3331, 0.0003, 0.8044, 0.0036, 1.4902, 0.0025, 0.1425, 0.0003, 0.2587, 0.0039, 20.1369, 0.0811, 1.2903, 0.0119, 3.3198, 0.0182, 1.7607, 0.0080, 0.1521, 0.0002, 0.4969, 0.0036, 24.0781, 0.1145, 1.3241, 0.0021, 6.6531, 0.0005 0.7.0a1, 27/08/2023 01:23:48, 1.0094, 0.0030, 0.0955, 0.0002, 0.1660, 0.0003, 10.0515, 0.1271, 0.5152, 0.0038, 1.6281, 0.1728, 0.4916, 0.0152, 0.0772, 0.0003, 0.1002, 0.0004, 4.5604, 0.0592, 0.3398, 0.0057, 0.7978, 0.0034, 1.5030, 0.0145, 0.1439, 0.0036, 0.2601, 0.0077, 20.6049, 0.3711, 1.2741, 0.0087, 3.3549, 0.0756, 1.7522, 0.0166, 0.1538, 0.0012, 0.4985, 0.0037, 23.7129, 0.0492, 1.3207, 0.0154, 6.6875, 0.0549 +0.7.0, 28/08/2023 08:29:01, 1.0224, 0.0008, 0.0986, 0.0006, 0.1744, 0.0018, 10.0994, 0.1099, 0.5046, 0.0014, 1.5733, 0.0027, 0.4890, 0.0005, 0.0800, 0.0001, 0.0976, 0.0003, 4.5293, 0.0052, 0.3316, 0.0009, 0.7844, 0.0014, 1.4739, 0.0026, 0.1394, 0.0003, 0.2633, 0.0004, 20.0847, 0.0148, 1.2127, 0.0008, 3.4104, 0.0069, 1.7507, 0.0028, 0.1507, 0.0005, 0.4917, 0.0128, 23.9211, 0.1061, 1.2659, 0.0059, 6.4690, 0.0317 diff --git a/Performance/cyrk_performance-RK23.csv b/Performance/cyrk_performance-RK23.csv index 28256c1..d9fa032 100644 --- a/Performance/cyrk_performance-RK23.csv +++ b/Performance/cyrk_performance-RK23.csv @@ -13,3 +13,5 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 18:59:35, 58.6676, 93.5182, 0.3900, 0.0126, 0.9633, 0.0266, 45.5975, 1.1797, 3.1403, 0.0138, 10.5973, 0.2912, 55.7416, 91.5188, 0.3192, 0.0082, 0.6436, 0.0150, 28.7644, 0.9448, 2.6510, 0.0471, 6.7978, 0.2528, 56.1384, 88.3532, 0.4677, 0.0044, 1.0281, 0.0150, 85.8300, 3.9745, 7.5308, 0.1815, 23.5595, 0.4995, 58.8041, 91.3233, 0.5090, 0.0065, 1386.0843, 2397.3464, 106.3878, 1.1220, 8.5241, 0.3540, 38.2326, 0.7181 0.7.0.dev7, 27/08/2023 01:11:14, 4.8113, 0.1391, 0.3115, 0.0004, 0.8552, 0.0036, 45.1068, 0.6880, 2.6107, 0.0100, 9.8739, 0.6100, 2.8775, 0.0067, 0.2522, 0.0009, 0.6097, 0.0030, 28.9372, 0.8937, 2.0232, 0.0052, 6.1300, 0.1653, 4.9043, 0.0304, 0.3955, 0.0062, 0.9908, 0.0052, 82.1498, 1.0284, 5.9321, 0.0159, 20.9002, 0.4163, 5.8702, 0.1321, 0.4181, 0.0009, 1183.0684, 2046.0616, 100.8534, 0.6015, 8.7392, 0.1784, 35.7355, 0.3580 0.7.0a1, 27/08/2023 01:21:31, 4.5590, 0.0620, 0.3149, 0.0066, 0.8748, 0.0195, 43.6144, 0.1123, 2.6232, 0.0313, 9.2402, 0.1733, 2.8469, 0.0036, 0.2520, 0.0032, 0.6048, 0.0044, 27.8211, 0.1951, 2.0357, 0.0363, 6.3501, 0.0787, 4.8713, 0.0372, 0.3889, 0.0021, 1.0088, 0.0276, 81.8194, 0.1423, 5.8619, 0.0337, 20.3528, 0.1749, 5.7740, 0.0594, 0.4174, 0.0006, 1139.2328, 1970.1475, 100.0822, 0.6212, 7.8009, 0.0816, 36.2940, 1.2287 +0.7.0, 28/08/2023 08:23:02, 4.5637, 0.0104, 0.2957, 0.0003, 0.8637, 0.0096, 44.2261, 0.0394, 2.4364, 0.0053, 8.9717, 0.1593, 2.8994, 0.0131, 0.2411, 0.0004, 0.6071, 0.0010, 28.0574, 0.0866, 1.9065, 0.0005, 6.0870, 0.1789, 4.8884, 0.0142, 0.3639, 0.0002, 0.9789, 0.0052, 82.2106, 0.3076, 5.4401, 0.0197, 21.1634, 0.5805, 5.7788, 0.0064, 0.3938, 0.0038, 1250.9109, 2163.6112, 100.3653, 0.4706, 6.0790, 0.0704, 35.0585, 0.4175 +0.7.0, 28/08/2023 08:26:42, 4.5843, 0.0213, 0.2983, 0.0025, 0.8635, 0.0071, 44.2802, 0.0616, 2.4359, 0.0088, 9.1258, 0.2414, 2.8860, 0.0064, 0.2425, 0.0010, 0.6111, 0.0018, 28.0934, 0.0882, 1.9215, 0.0136, 6.1117, 0.1291, 4.8439, 0.0115, 0.3643, 0.0015, 0.9899, 0.0117, 81.7951, 0.0920, 5.4709, 0.0957, 20.9155, 0.4702, 5.7952, 0.0131, 0.3927, 0.0007, 1190.7543, 2059.3947, 100.5784, 0.2858, 7.8631, 0.0435, 35.0543, 0.2799 diff --git a/Performance/cyrk_performance-RK45.csv b/Performance/cyrk_performance-RK45.csv index b5330b5..b168d58 100644 --- a/Performance/cyrk_performance-RK45.csv +++ b/Performance/cyrk_performance-RK45.csv @@ -13,3 +13,4 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 19:01:00, 1.3026, 0.0252, 0.1270, 0.0003, 0.2370, 0.0077, 13.1688, 0.2770, 0.7357, 0.0104, 2.0835, 0.0676, 0.9441, 0.0522, 0.1292, 0.0056, 0.1934, 0.0100, 8.5366, 0.0426, 0.7844, 0.0494, 1.6277, 0.0193, 1.7297, 0.0254, 0.1885, 0.0038, 0.3590, 0.0067, 25.4444, 0.1438, 2.2064, 0.1480, 5.1500, 0.1446, 2.1667, 0.1251, 0.2131, 0.0095, 0.6540, 0.0405, 32.0478, 1.1447, 2.0710, 0.0607, 9.6978, 0.4326 0.7.0.dev7, 27/08/2023 01:12:37, 1.2641, 0.0062, 0.1031, 0.0019, 0.2173, 0.0053, 12.2412, 0.0395, 0.5690, 0.0008, 1.9169, 0.0142, 0.8811, 0.0057, 0.0958, 0.0004, 0.1712, 0.0007, 8.4969, 0.0834, 0.5321, 0.0026, 1.4975, 0.0028, 1.6713, 0.0148, 0.1467, 0.0011, 0.3058, 0.0012, 26.5646, 1.9359, 1.5104, 0.0006, 4.2413, 0.0166, 2.0245, 0.0408, 0.1609, 0.0097, 0.5685, 0.0021, 29.3066, 0.1643, 1.5506, 0.0036, 8.2832, 0.0310 0.7.0a1, 27/08/2023 01:22:52, 1.2283, 0.0057, 0.1010, 0.0001, 0.2117, 0.0010, 11.9199, 0.0385, 0.5796, 0.0084, 1.8945, 0.0104, 0.8679, 0.0094, 0.0958, 0.0005, 0.1726, 0.0033, 8.2955, 0.0659, 0.5338, 0.0010, 1.4996, 0.0135, 1.6907, 0.0290, 0.1458, 0.0004, 0.3058, 0.0036, 24.5503, 0.1658, 1.5368, 0.0370, 4.3002, 0.1004, 2.0103, 0.0434, 0.1557, 0.0013, 0.5757, 0.0059, 28.7147, 0.0734, 1.5439, 0.0018, 8.2652, 0.0295 +0.7.0, 28/08/2023 08:28:05, 1.2537, 0.0035, 0.1024, 0.0002, 0.2137, 0.0034, 12.0294, 0.0153, 0.5540, 0.0004, 1.9540, 0.0390, 0.8906, 0.0117, 0.0988, 0.0001, 0.1713, 0.0016, 8.3772, 0.0180, 0.5321, 0.0004, 1.4879, 0.0026, 1.6809, 0.0168, 0.1395, 0.0004, 0.3041, 0.0006, 24.5483, 0.1731, 1.3808, 0.0023, 4.2016, 0.0188, 1.9830, 0.0024, 0.1512, 0.0002, 0.5836, 0.0124, 29.2957, 0.0392, 1.4399, 0.0028, 8.1456, 0.0258 diff --git a/README.md b/README.md index bf26a48..2dcd8d1 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The [cython](https://cython.org/) `CySolver` class that works with cython-based An additional benefit of the two cython implementations is that they are pre-compiled. This avoids most of the start-up performance hit experienced by just-in-time compilers like numba. -CyRK Performance +CyRK Performance ## Installation @@ -201,6 +201,8 @@ MyCyRKDiffeqInst.solution_extra # Extra output that was captured during integra All three integrators can take the following optional inputs: - `rtol`: Relative Tolerance (default is 1.0e-6). - `atol`: Absolute Tolerance (default is 1.0e-8). +- `rtols`: A numpy ndarray of relative tolerances set for each y0 (default is None; e.g., use `rtol` for each). +- `atols`: A numpy ndarray of absolute tolerances set for each y0 (default is None; e.g., use `atol` for each). - `max_step_size`: Maximum step size (default is +infinity). - `first_step`: Initial step size (default is 0). - If 0, then the solver will try to determine an ideal value. @@ -214,7 +216,7 @@ All three integrators can take the following optional inputs: - `2` - "DOP853" Explicit Runge-Kutta method of order 8. - `capture_extra` and `interpolate_extra`: CyRK has the capability of capturing additional parameters during integration. Please see `Documentation\Extra Output.md` for more details. - `max_steps`: Maximum number of steps the solver is allowed to use. Defaults to system architecture's max size for ints. -- + ### Additional Arguments for `cyrk_ode` and `CySolver` - `num_extra` : The number of extra outputs the integrator should expect. - Please see `Documentation\Extra Output.md` for more details. diff --git a/pyproject.toml b/pyproject.toml index 405dc28..1abbd2d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0a3' +version = '0.7.0' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 1bfbef46b470257d6c1098ff73e4cf08328aa8f6 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Mon, 28 Aug 2023 09:01:56 -0400 Subject: [PATCH 26/29] refactored max_steps to max_num_steps --- CHANGES.md | 3 +-- CyRK/cy/cyrk.pyx | 23 +++++++++++------------ CyRK/cy/cysolver.pxd | 4 ++-- CyRK/cy/cysolver.pyx | 12 ++++++------ CyRK/nb/nbrk.py | 20 ++++++++++---------- README.md | 4 ++-- pyproject.toml | 2 +- 7 files changed, 33 insertions(+), 35 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 87c38ff..84a4895 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,14 +13,13 @@ New Features - For both solvers, you can pass the optional argument "rtols" and/or "atols". These must be C-contiguous numpy arrays with float64 dtypes. They must have the same size as y0. - Added tests to check functionality for all solvers. - This resolves [https://github.com/jrenaud90/CyRK/issues/31][Issue 31]. -- Added new optional argument to all solvers `max_steps` which allows the user to control how many steps the solver is allowed to take. +- Added new optional argument to all solvers `max_num_steps` which allows the user to control how many steps the solver is allowed to take. - If exceeded the integration with fail (softly). - Defaults to 95% of `sys.maxsize` (depends on system architecture). - New `CySolver.update_constants` method allows for significant speed boosts for certain differential equations. - See test diffeqs, which have been updated to use this feature, for examples. Other Changes -- Refactored `max_step` to `max_step_size` argument for all solvers to avoid confusion with new `max_steps` argument. - Improved documentation for `CySolver`'s `diffeq` method template. - To make more logical sense with the wording, `CySolver.size_growths` now gives one less than the solver's growths attribute. - Cleaned up status codes and created new status code description document under "Documentation/Status and Error Codes.md" diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index 5bf51dc..13e1e9f 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -91,7 +91,7 @@ def cyrk_ode( double atol = 1.e-8, double[::1] rtols = None, double[::1] atols = None, - double max_step_size = MAX_STEP, + double max_step = MAX_STEP, double first_step = 0., unsigned char rk_method = 1, double[:] t_eval = None, @@ -99,7 +99,7 @@ def cyrk_ode( Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, Py_ssize_t expected_size = 0, - Py_ssize_t max_steps = 0 + Py_ssize_t max_num_steps = 0 ): """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. @@ -117,7 +117,7 @@ def cyrk_ode( Integration relative tolerance used to determine optimal step size. atol : float = 1.e-8 Integration absolute tolerance used to determine optimal step size. - max_step_size : float = np.inf + max_step : float = np.inf Maximum allowed step size. first_step : float = None Initial step size. If `None`, then the function will attempt to determine an appropriate initial step. @@ -151,7 +151,7 @@ def cyrk_ode( The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve. If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended. It is better to overshoot than undershoot this guess. - max_steps : int = 0 + max_num_steps : int = 0 Maximum number of steps integrator is allowed to take. If set to 0 (the default) then an infinite number of steps are allowed. @@ -282,16 +282,15 @@ def cyrk_ode( atols_view[i] = atol # Determine maximum number of steps - cdef Py_ssize_t max_steps_touse cdef bool_cpp_t use_max_steps - if max_steps == 0: + if max_num_steps == 0: use_max_steps = False - max_steps_touse = 0 - elif max_steps < 0: + max_num_steps = 0 + elif max_num_steps < 0: raise AttributeError('Negative number of max steps provided.') else: use_max_steps = True - max_steps_touse = min(max_steps, MAX_INT_SIZE) + max_num_steps = min(max_num_steps, MAX_INT_SIZE) # Expected size of output arrays. cdef double temp_expected_size @@ -627,7 +626,7 @@ def cyrk_ode( break if use_max_steps: - if len_t > max_steps_touse: + if len_t > max_num_steps: status = -2 message = "Maximum number of steps (set by user) exceeded during integration." break @@ -642,8 +641,8 @@ def cyrk_ode( # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old) # Look for over/undershoots in previous step size - if step_size > max_step_size: - step_size = max_step_size + if step_size > max_step: + step_size = max_step elif step_size < min_step: step_size = min_step diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index 5e9f647..c370a21 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -39,9 +39,9 @@ cdef class CySolver: cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf cdef bool_cpp_t direction_flag cdef double[::1] rtols_view, atols_view - cdef double step_size, max_step_size + cdef double step_size, max_step cdef double first_step - cdef Py_ssize_t expected_size, num_concats, max_steps + cdef Py_ssize_t expected_size, num_concats, max_num_steps cdef bool_cpp_t use_max_steps cdef bool_cpp_t recalc_firststep diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index abb93b5..1c36493 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -43,7 +43,7 @@ cdef class CySolver: double atol = 1.e-8, double[::1] rtols = None, double[::1] atols = None, - double max_step_size = MAX_STEP, + double max_step = MAX_STEP, double first_step = 0., unsigned char rk_method = 1, const double[::1] t_eval = None, @@ -51,7 +51,7 @@ cdef class CySolver: Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, Py_ssize_t expected_size = 0, - Py_ssize_t max_steps = 0, + Py_ssize_t max_num_steps = 0, bool_cpp_t auto_solve = True): # Setup loop variables @@ -131,16 +131,16 @@ cdef class CySolver: self.atols_view[i] = atol # Determine maximum number of steps - if max_steps == 0: + if max_num_steps == 0: self.use_max_steps = False self.max_steps = 0 - elif max_steps < 0: + elif max_num_steps < 0: self.status = -8 self.message = "Attribute error." raise AttributeError('Negative number of max steps provided.') else: self.use_max_steps = True - self.max_steps = min(max_steps, MAX_INT_SIZE) + self.max_steps = min(max_num_steps, MAX_INT_SIZE) # Expected size of output arrays. cdef double temp_expected_size @@ -724,7 +724,7 @@ cdef class CySolver: break if self.use_max_steps: - if self.len_t > self.max_steps: + if self.len_t > self.max_num_steps: self.status = -2 break else: diff --git a/CyRK/nb/nbrk.py b/CyRK/nb/nbrk.py index 6070766..811db15 100644 --- a/CyRK/nb/nbrk.py +++ b/CyRK/nb/nbrk.py @@ -93,13 +93,13 @@ def nbrk_ode( atol: float = 1.e-8, rtols: np.ndarray = EMPTY_ARR, atols: np.ndarray = EMPTY_ARR, - max_step_size: float = np.inf, + max_step: float = np.inf, first_step: float = None, rk_method: int = 1, t_eval: np.ndarray = EMPTY_ARR, capture_extra: bool = False, interpolate_extra: bool = False, - max_steps: int = 0 + max_num_steps: int = 0 ): """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. @@ -117,7 +117,7 @@ def nbrk_ode( Integration relative tolerance used to determine optimal step size. atol : float = 1.e-8 Integration absolute tolerance used to determine optimal step size. - max_step_size : float = np.inf + max_step : float = np.inf Maximum allowed step size. first_step : float = None Initial step size. If `None`, then the function will attempt to determine an appropriate initial step. @@ -135,7 +135,7 @@ def nbrk_ode( interpolate_extra : bool = False If True, then extra output will be interpolated (along with y) at t_eval. Otherwise, y will be interpolated and then differential equation will be called to find the output at each t in t_eval. - max_steps : int = 0 + max_num_steps : int = 0 Maximum number of steps integrator is allowed to take. If set to 0 (the default) then an infinite number of steps are allowed. @@ -330,9 +330,9 @@ def nbrk_ode( atol_array[i] = atol # Determine maximum number of steps - if max_steps == 0: + if max_num_steps == 0: use_max_steps = False - elif max_steps < 0: + elif max_num_steps < 0: raise AttributeError('Negative number of max steps provided.') else: use_max_steps = True @@ -362,7 +362,7 @@ def nbrk_ode( # Find first step size first_step_found = False if first_step is not None: - step_size = max_step_size + step_size = max_step if first_step < 0.: status = -8 message = "Attribute error." @@ -441,7 +441,7 @@ def nbrk_ode( break if use_max_steps: - if len_t > max_steps: + if len_t > max_num_steps: status = -7 message = "Maximum number of steps (set by user) exceeded during integration." break @@ -453,8 +453,8 @@ def nbrk_ode( min_step = next_after # Look for over/undershoots in previous step size - if step_size > max_step_size: - step_size = max_step_size + if step_size > max_step: + step_size = max_step elif step_size < min_step: step_size = min_step diff --git a/README.md b/README.md index 2dcd8d1..414f94b 100644 --- a/README.md +++ b/README.md @@ -203,7 +203,7 @@ All three integrators can take the following optional inputs: - `atol`: Absolute Tolerance (default is 1.0e-8). - `rtols`: A numpy ndarray of relative tolerances set for each y0 (default is None; e.g., use `rtol` for each). - `atols`: A numpy ndarray of absolute tolerances set for each y0 (default is None; e.g., use `atol` for each). -- `max_step_size`: Maximum step size (default is +infinity). +- `max_step`: Maximum step size (default is +infinity). - `first_step`: Initial step size (default is 0). - If 0, then the solver will try to determine an ideal value. - `args`: Python tuple of additional arguments passed to the `diffeq`. @@ -215,7 +215,7 @@ All three integrators can take the following optional inputs: - `1` - "RK45" Explicit Runge-Kutta method of order 5(4). - `2` - "DOP853" Explicit Runge-Kutta method of order 8. - `capture_extra` and `interpolate_extra`: CyRK has the capability of capturing additional parameters during integration. Please see `Documentation\Extra Output.md` for more details. -- `max_steps`: Maximum number of steps the solver is allowed to use. Defaults to system architecture's max size for ints. +- `max_num_steps`: Maximum number of steps the solver is allowed to use. Defaults to system architecture's max size for ints. ### Additional Arguments for `cyrk_ode` and `CySolver` - `num_extra` : The number of extra outputs the integrator should expect. diff --git a/pyproject.toml b/pyproject.toml index 1abbd2d..29826dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0' +version = '0.7.0a5' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 048a804771ae537e77a6936a2be3a81efbe650d5 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Mon, 28 Aug 2023 11:22:22 -0400 Subject: [PATCH 27/29] fixed bugs introduced in last refactor --- CyRK/cy/cysolver.pxd | 4 ++-- CyRK/cy/cysolver.pyx | 22 ++++++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index c370a21..5371d42 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -88,7 +88,7 @@ cdef class CySolver: double[::1] atols = *, bool_cpp_t auto_reset_state = *) - cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = *) + cpdef void change_max_step(self, double max_step, bool_cpp_t auto_reset_state = *) cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = *) @@ -101,7 +101,7 @@ cdef class CySolver: double atol = *, double[::1] rtols = *, double[::1] atols = *, - double max_step_size = *, + double max_step = *, double first_step = *, const double[::1] t_eval = *, bool_cpp_t auto_reset_state = *, diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 1c36493..a4054f5 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -6,6 +6,7 @@ cimport cython import sys import numpy as np cimport numpy as np + np.import_array() from libcpp cimport bool as bool_cpp_t @@ -32,6 +33,7 @@ cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize) cdef (double, double) EMPTY_T_SPAN = (NAN, NAN) +# noinspection PyUnresolvedReferences cdef class CySolver: @@ -133,14 +135,14 @@ cdef class CySolver: # Determine maximum number of steps if max_num_steps == 0: self.use_max_steps = False - self.max_steps = 0 + self.max_num_steps = 0 elif max_num_steps < 0: self.status = -8 self.message = "Attribute error." raise AttributeError('Negative number of max steps provided.') else: self.use_max_steps = True - self.max_steps = min(max_num_steps, MAX_INT_SIZE) + self.max_num_steps = min(max_num_steps, MAX_INT_SIZE) # Expected size of output arrays. cdef double temp_expected_size @@ -312,7 +314,7 @@ cdef class CySolver: self.message = "Attribute error." raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') self.step_size = self.first_step - self.max_step_size = max_step_size + self.max_step = max_step # Set any constant parameters that the user has set self.update_constants() @@ -464,8 +466,8 @@ cdef class CySolver: # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large) min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old) # Look for over/undershoots in previous step size - if self.step_size > self.max_step_size: - self.step_size = self.max_step_size + if self.step_size > self.max_step: + self.step_size = self.max_step elif self.step_size < min_step: self.step_size = min_step @@ -1073,9 +1075,9 @@ cdef class CySolver: self.reset_state() - cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = False): + cpdef void change_max_step(self, double max_step, bool_cpp_t auto_reset_state = False): - self.max_step_size = max_step_size + self.max_step = max_step if auto_reset_state: self.reset_state() @@ -1130,7 +1132,7 @@ cdef class CySolver: double atol = NAN, double[::1] rtols = None, double[::1] atols = None, - double max_step_size = NAN, + double max_step = NAN, double first_step = NAN, const double[::1] t_eval = None, bool_cpp_t auto_reset_state = True, @@ -1148,8 +1150,8 @@ cdef class CySolver: if (not isnan(rtol)) or (not isnan(atol)) or (rtols is not None) or (atols is not None): self.change_tols(rtol=rtol, atol=atol, rtols=rtols, atols=atols, auto_reset_state=False) - if not isnan(max_step_size): - self.change_max_step_size(max_step_size, auto_reset_state=False) + if not isnan(max_step): + self.change_max_step(max_step, auto_reset_state=False) if not isnan(first_step): self.change_first_step(first_step, auto_reset_state=False) From 6f3f818923901aab79e227a48beb7a0fa8c89057 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Mon, 28 Aug 2023 15:45:38 -0400 Subject: [PATCH 28/29] docstring updates other tweaks --- CHANGES.md | 6 +- CyRK/_test.py | 6 +- CyRK/cy/cyrk.pyx | 136 +- CyRK/cy/cysolver.pxd | 58 +- CyRK/cy/cysolver.pyx | 806 +- CyRK/nb/nbrk.py | 8 +- Documentation/Extra Output.md | 6 +- Performance/Differential Equation Check.ipynb | 4 +- Performance/cyrk_performance-DOP853.csv | 1 - Performance/cyrk_performance-RK23.csv | 2 - Performance/cyrk_performance-RK45.csv | 1 - README.md | 10 +- Tests/C_Cython_Tests/test_a_cython.py | 168 +- .../C_Cython_Tests/test_b_cy_extra_output.py | 66 +- Tests/C_Cython_Tests/test_c_cy_readonly.py | 16 +- .../C_Cython_Tests/test_d_cysolver_resolve.py | 12 +- .../test_e_cysolver_change_param.py | 16 +- Tests/Cython Class Experiments.ipynb | 11462 -------------- Tests/Cython Experiments.ipynb | 12646 ---------------- Tests/D_Numba_Tests/test_a_numba.py | 10 +- pyproject.toml | 2 +- 21 files changed, 870 insertions(+), 24572 deletions(-) delete mode 100644 Tests/Cython Class Experiments.ipynb delete mode 100644 Tests/Cython Experiments.ipynb diff --git a/CHANGES.md b/CHANGES.md index 84a4895..b7c983e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,13 +18,14 @@ New Features - Defaults to 95% of `sys.maxsize` (depends on system architecture). - New `CySolver.update_constants` method allows for significant speed boosts for certain differential equations. - See test diffeqs, which have been updated to use this feature, for examples. - +co Other Changes -- Improved documentation for `CySolver`'s `diffeq` method template. +- Improved documentation for most functions and classes. - To make more logical sense with the wording, `CySolver.size_growths` now gives one less than the solver's growths attribute. - Cleaned up status codes and created new status code description document under "Documentation/Status and Error Codes.md" - Fixed compile warning related to NPY_NO_DEPRECATED_API. - Converted RK variable lengths to Py_ssize_t types. +- Changed default tolerances to match scipy: rtol=1.0e-3, atol=1.0e-6. Performance - Various minor performance gains for cython-based solvers. @@ -35,6 +36,7 @@ Bug Fixes: - Fixed potential seg fault when accessing `CySolver`'s arg_array_view. - Fixed potential issue where `CySolver`'s first step size may not be reset when variables that affect it are. - Fixed missed declaration in `cyrk_ode`. +- Fixed bug where the state reset flag was not being passed from `CySolver.solve` wrapper method. #### v0.6.2 New Features diff --git a/CyRK/_test.py b/CyRK/_test.py index 37c547a..dcf0905 100644 --- a/CyRK/_test.py +++ b/CyRK/_test.py @@ -58,8 +58,8 @@ def test_cysolver(): CySolverTesterInst.solve() assert CySolverTesterInst.success - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert type(CySolverTesterInst.solution_y) == np.ndarray - assert CySolverTesterInst.solution_y.shape[0] == 2 + assert type(CySolverTesterInst.t) == np.ndarray + assert type(CySolverTesterInst.y) == np.ndarray + assert CySolverTesterInst.y.shape[0] == 2 print("CyRK's CySolver was tested successfully.") \ No newline at end of file diff --git a/CyRK/cy/cyrk.pyx b/CyRK/cy/cyrk.pyx index 13e1e9f..0b5ac19 100644 --- a/CyRK/cy/cyrk.pyx +++ b/CyRK/cy/cyrk.pyx @@ -32,7 +32,7 @@ cdef double EPS_100 = EPS * 100. cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize) -cdef double cabs(double complex value) noexcept nogil: +cdef double cabs(double complex value) nogil: # REVERT noexcept nogil: """ Absolute value function for complex-valued inputs. Parameters @@ -59,7 +59,7 @@ ctypedef fused double_numeric: double complex -cdef double dabs(double_numeric value) noexcept nogil: +cdef double dabs(double_numeric value) nogil: # REVERT noexcept nogil: """ Absolute value function for either float or complex-valued inputs. Checks the type of value and either utilizes `cabs` (for double complex) or `fabs` (for floats). @@ -87,8 +87,8 @@ def cyrk_ode( (double, double) t_span, const double_numeric[:] y0, tuple args = None, - double rtol = 1.e-6, - double atol = 1.e-8, + double rtol = 1.e-3, + double atol = 1.e-6, double[::1] rtols = None, double[::1] atols = None, double max_step = MAX_STEP, @@ -101,34 +101,52 @@ def cyrk_ode( Py_ssize_t expected_size = 0, Py_ssize_t max_num_steps = 0 ): - """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator. + """ + cyrk_ode: A Runge-Kutta Solver Implemented in Cython. Parameters ---------- diffeq : callable - An njit-compiled function that defines the derivatives of the problem. - t_span : Tuple[float, float] - A tuple of the beginning and end of the integration domain's dependent variables. - y0 : np.ndarray - 1D array of the initial values of the problem at t_span[0] - args : tuple = tuple() - Any additional arguments that are passed to dffeq. - rtol : float = 1.e-6 - Integration relative tolerance used to determine optimal step size. - atol : float = 1.e-8 - Integration absolute tolerance used to determine optimal step size. - max_step : float = np.inf + A python or njit-ed numba differential equation. + Format should follow: + ``` + def diffeq(t, y, dy, arg_1, arg_2, ...): + dy[0] = y[0] * t + .... + ``` + t_span : (double, double) + Values of independent variable at beginning and end of integration. + y0 : double[::1] + Initial values for the dependent y variables at `t_span[0]`. + args : tuple or None, default=None + Additional arguments used by the differential equation. + None (default) will tell the solver to not use additional arguments. + rk_method : int, default=1 + Runge-Kutta method that will be used. Currently implemented models: + 0: ‘RK23’: Explicit Runge-Kutta method of order 3(2). + 1: ‘RK45’ (default): Explicit Runge-Kutta method of order 5(4). + 2: ‘DOP853’: Explicit Runge-Kutta method of order 8. + rtol : double, default=1.0e-3 + Relative tolerance using in local error calculation. + atol : double, default=1.0e-6 + Absolute tolerance using in local error calculation. + rtols : double[::1], default=None + np.ndarray of relative tolerances, one for each dependent y variable. + None (default) will use the same tolerance (set by `rtol`) for each y variable. + atols : double[::1], default=None + np.ndarray of absolute tolerances, one for each dependent y variable. + None (default) will use the same tolerance (set by `atol`) for each y variable. + max_step : double, default=+Inf Maximum allowed step size. - first_step : float = None - Initial step size. If `None`, then the function will attempt to determine an appropriate initial step. - rk_method : int = 1 - The type of RK method used for integration - 0 = RK23 - 1 = RK45 - 2 = DOP853 - t_eval : np.ndarray = None - If provided, then the function will interpolate the integration results to provide them at the - requested t-steps. + first_step : double, default=0 + First step's size (after `t_span[0]`). + If set to 0 (the default) then the solver will attempt to guess a suitable initial step size. + max_num_steps : Py_ssize_t, default=0 + Maximum number of step sizes allowed before solver will auto fail. + If set to 0 (the default) then the maximum number of steps will be equal to max integer size + allowed on system architecture. + t_eval : double[::1], default=None + If not set to None, then a final interpolation will be performed on the solution to fit it to this array. capture_extra : bool = False If True, then additional output from the differential equation will be collected (but not used to determine integration error). @@ -144,16 +162,16 @@ def cyrk_ode( ``` num_extra : int = 0 The number of extra outputs the integrator should expect. With the previous example there is 1 extra output. - interpolate_extra : bool = False - If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each - step in `t_eval`. - expected_size : int = 0 - The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve. - If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended. - It is better to overshoot than undershoot this guess. - max_num_steps : int = 0 - Maximum number of steps integrator is allowed to take. - If set to 0 (the default) then an infinite number of steps are allowed. + interpolate_extra : bool_cpp_t, default=False + Flag if interpolation should be run on extra parameters. + If set to False when `run_interpolation=True`, then interpolation will be run on solution's y, t. These will + then be used to recalculate extra parameters rather than an interpolation on the extra parameters captured + during integration. + expected_size : Py_ssize_t, default=0 + Anticipated size of integration range, i.e., how many steps will be required. + Used to build temporary storage arrays for the solution results. + If set to 0 (the default), then the solver will attempt to guess on a suitable expected size based on the + relative tolerances and size of the integration domain. Returns ------- @@ -165,7 +183,6 @@ def cyrk_ode( Final integration success flag. message : str Any integration messages, useful if success=False. - """ # Setup loop variables cdef Py_ssize_t s, i, j @@ -244,7 +261,6 @@ def cyrk_ode( store_extras_during_integration = False # # Determine integration tolerances - cdef double rtol_tmp, atol_tmp use_arg_arrays = False use_atol_array = False cdef np.ndarray[np.float64_t, ndim=1, mode='c'] rtol_array, atol_array @@ -259,10 +275,10 @@ def cyrk_ode( if len(rtols) != y_size: raise AttributeError('rtols must be the same size as y0.') for i in range(y_size): - rtol_tmp = rtols[i] - if rtol_tmp < EPS_100: - rtol_tmp = EPS_100 - rtols_view[i] = rtol_tmp + rtol = rtols[i] + if rtol < EPS_100: + rtol = EPS_100 + rtols_view[i] = rtol else: # Using constant rtol # Check tolerances @@ -282,21 +298,18 @@ def cyrk_ode( atols_view[i] = atol # Determine maximum number of steps - cdef bool_cpp_t use_max_steps if max_num_steps == 0: - use_max_steps = False - max_num_steps = 0 + max_num_steps = MAX_INT_SIZE elif max_num_steps < 0: raise AttributeError('Negative number of max steps provided.') else: - use_max_steps = True max_num_steps = min(max_num_steps, MAX_INT_SIZE) # Expected size of output arrays. cdef double temp_expected_size cdef Py_ssize_t expected_size_to_use, num_concats if expected_size == 0: - # CySolver will attempt to guess on a best size for the arrays. + # CySolver will attempt to guess the best size for the output arrays. temp_expected_size = 100. * t_delta_abs * fmax(1., (1.e-6 / rtol)) temp_expected_size = fmax(temp_expected_size, 100.) temp_expected_size = fmin(temp_expected_size, 10_000_000.) @@ -333,15 +346,15 @@ def cyrk_ode( extra_start = y_size total_size = y_size + num_extra # Create arrays based on this total size - diffeq_out = np.empty(total_size, dtype=DTYPE, order='C') - y0_plus_extra = np.empty(total_size, dtype=DTYPE, order='C') - extra_result = np.empty(num_extra, dtype=DTYPE, order='C') + diffeq_out = np.empty(total_size, dtype=DTYPE, order='C') + y0_plus_extra = np.empty(total_size, dtype=DTYPE, order='C') + extra_result = np.empty(num_extra, dtype=DTYPE, order='C') # Setup memory views cdef double_numeric[:] diffeq_out_view, y0_plus_extra_view, extra_result_view - diffeq_out_view = diffeq_out - y0_plus_extra_view = y0_plus_extra - extra_result_view = extra_result + diffeq_out_view = diffeq_out + y0_plus_extra_view = y0_plus_extra + extra_result_view = extra_result # Capture the extra output for the initial condition. if capture_extra: @@ -529,7 +542,6 @@ def cyrk_ode( scale_arr = np.empty(y_size, dtype=np.float64, order='C') scale_view = scale_arr - # Load initial conditions into output arrays time_domain_array_view[0] = t_start for i in range(store_loop_size): @@ -625,16 +637,14 @@ def cyrk_ode( status = 1 break - if use_max_steps: - if len_t > max_num_steps: - status = -2 - message = "Maximum number of steps (set by user) exceeded during integration." - break - else: - if len_t > MAX_INT_SIZE: + if len_t > max_num_steps: + if max_num_steps == MAX_INT_SIZE: status = -3 message = "Maximum number of steps (set by system architecture) exceeded during integration." - break + else: + status = -2 + message = "Maximum number of steps (set by user) exceeded during integration." + break # Run RK integration step # Determine step size based on previous loop diff --git a/CyRK/cy/cysolver.pxd b/CyRK/cy/cysolver.pxd index 5371d42..4bd5e0a 100644 --- a/CyRK/cy/cysolver.pxd +++ b/CyRK/cy/cysolver.pxd @@ -11,39 +11,20 @@ cdef double EPS_100 cdef class CySolver: - # Class attributes - # -- Live variables - cdef double t_new, t_old - cdef Py_ssize_t len_t - cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view - cdef double[::1] extra_output_view, extra_output_init_view + # Class attributes + + # -- Solution variables + cdef double[:, ::1] solution_y_view, solution_extra_view + cdef double[::1] solution_t_view # -- Dependent (y0) variable information cdef Py_ssize_t y_size cdef double y_size_dbl, y_size_sqrt cdef const double[::1] y0_view - # -- RK method information - cdef unsigned char rk_method - cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended - cdef double error_expo - cdef Py_ssize_t len_C - cdef double[::1] B_view, E_view, E3_view, E5_view, C_view - cdef double[:, ::1] A_view, K_view - cdef double[::1, :] K_T_view - - # -- Integration information - cdef public char status - cdef public str message - cdef public bool_cpp_t success + # -- Time information cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf cdef bool_cpp_t direction_flag - cdef double[::1] rtols_view, atols_view - cdef double step_size, max_step - cdef double first_step - cdef Py_ssize_t expected_size, num_concats, max_num_steps - cdef bool_cpp_t use_max_steps - cdef bool_cpp_t recalc_firststep # -- Optional args info cdef Py_ssize_t num_args @@ -53,15 +34,36 @@ cdef class CySolver: cdef bool_cpp_t capture_extra cdef Py_ssize_t num_extra + # -- Integration information + cdef readonly char status + cdef readonly str message + cdef public bool_cpp_t success + cdef double[::1] rtols_view, atols_view + cdef double first_step, max_step + cdef Py_ssize_t max_num_steps + cdef Py_ssize_t expected_size, num_concats, + cdef bool_cpp_t recalc_first_step + # -- Interpolation info cdef bool_cpp_t run_interpolation cdef bool_cpp_t interpolate_extra cdef Py_ssize_t len_t_eval cdef double[::1] t_eval_view - # -- Solution variables - cdef double[:, ::1] solution_y_view, solution_extra_view - cdef double[::1] solution_t_view + # -- RK method information + cdef unsigned char rk_method + cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended + cdef double error_expo + cdef Py_ssize_t len_C + cdef double[::1] B_view, E_view, E3_view, E5_view, C_view + cdef double[:, ::1] A_view, K_view + cdef double[::1, :] K_T_view + + # -- Live variables + cdef double t_new, t_old, step_size + cdef Py_ssize_t len_t + cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view + cdef double[::1] extra_output_init_view, extra_output_view # Class functions cpdef void reset_state(self) diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index a4054f5..61ff874 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -35,69 +35,313 @@ cdef (double, double) EMPTY_T_SPAN = (NAN, NAN) # noinspection PyUnresolvedReferences cdef class CySolver: - + """ + CySolver: A Object-Oriented Runge-Kutta Solver Implemented in Cython. + + This class provides basic functionality to solve systems of ordinary differential equations using a Runge-Kutta + scheme. Users can cimport this extension and build their own solvers by overriding its diffeq and update_constants + methods. Users can also expand on its __init__ or other methods for more complex problems. + + Class attributes are defined, with types, in cysolver.pxd. + + Note: "Time" is used throughout this class's variable names and documentation. It is a placeholder for the + independent variable that the ODE's derivatives are taken with respect to. Instead of time it could be, for example, + distance. We choose to use time as a generic placeholder term. + + Attributes + ---------- + solution_y_view : double[:, ::1] + Memoryview of final solution for dependent variables. + See Also: The public property method, `CySolver.y` + solution_extra_view : double[:, ::1] + Memoryview of the final solution for any extra parameters captured during integration. + See Also: The public property method, `CySolver.extra` + solution_t_view : double[::1] + Memoryview of the final independent domain found during integration. + See Also: The public property method, `CySolver.t` + y_size : Py_ssize_t + Number of dependent variables in system of ODEs. + y_size_dbl : double + Floating point version of y_size. + y_size_sqrt : double + Square-root of y_size. + y0_view : double[::1] + Memoryview of dependent variable initial conditions (y0 at t_start). + t_start : double + Value of independent variable at beginning of integration (t0). + t_end : double + End value of independent variable. + t_delta : double + Independent variable domain for integration: t_end - t_start. + t_delta may be negative or positive depending on if integration is forwards or backwards. + t_delta_abs : double + Absolute value of t_delta. + direction_inf : double + Direction of integration. If forward then this = +Inf; -Inf otherwise. + direction_flag : bool_cpp_t + If True, then integration is in the forward direction. + num_args : Py_ssize_t + Number of additional arguments that the `diffeq` method requires. + arg_array_view double[::1] + Memoryview of additional arguments used in the `diffeq` method. + capture_extra bool_cpp_t + Flag used if extra parameters should be captured during integration. + num_extra Py_ssize_t + Number of extra parameters that should be captured during integration. + status : char; public + Numerical flag to indicate status of integrator. + See "Status and Error Codes.md" in the documentation for more information. + message : str; public + Verbal message to accompany `self.status` explaining the state (and potential errors) of the integrator. + success : bool_cpp_t; public + Flag indicating if the integration was successful or not. + rtols_view : double[::1] + Memoryview of relative tolerances for each dependent y variable. + atols_view : double[::1] + Memoryview of absolute tolerances for each dependent y variable. + first_step : double + Absolute size of the first step to be taken after t_start. + max_step : double + Maximum absolute step sized allowed. + max_num_steps : Py_ssize_t + Maximum number of steps allowed before integration auto fails. + expected_size : Py_ssize_t + Anticipated size of integration range, i.e., how many steps will be required. + Used to build temporary storage arrays for the solution results. + num_concats : Py_ssize_t + Number of concatenations that were required during integration. + If `expected_size` is too small then it will be expanded as needed. This variable tracks how many expansions + were required. + See Also: `CySolver.growths` + recalc_first_step : bool_cpp_t + If True, then the `first_step` size is recalculated when `reset_state` is called. + Flag used when parameters are changed without reinitializing CySolver. + run_interpolation : bool_cpp_t + Flag if a final interpolation should be run once integration is completed successfully. + interpolate_extra : bool_cpp_t + Flag if interpolation should be run on extra parameters. + If set to False when `run_interpolation=True`, then interpolation will be run on solution's y, t. These will + then be used to recalculate extra parameters rather than an interpolation on the extra parameters captured + during integration. + len_t_eval : Py_ssize_t + Length of user requested independent domain, `t_eval`. + t_eval_view : double[::1] + Memoryview of user requested independent domain, `t_eval`. + rk_method : unsigned char + Runge-Kutta method that will be used. Currently implemented models: + 0: ‘RK23’: Explicit Runge-Kutta method of order 3(2). + 1: ‘RK45’ (default): Explicit Runge-Kutta method of order 5(4). + 2: ‘DOP853’: Explicit Runge-Kutta method of order 8. + rk_order : Py_ssize_t + Runge-Kutta step power. + error_order : Py_ssize_t + Runge-Kutta error power. + rk_n_stages : Py_ssize_t + Number of Runge-Kutta stages performed for each RK step. + rk_n_stages_plus1 : Py_ssize_t + One more than `rk_n_stages`. + rk_n_stages_extended : Py_ssize_t + An extended version of `rk_n_stages` used for DOP853 method. + error_expo : double + Exponential used during error calculation. Utilizes `error_order`. + len_C : Py_ssize_t + Size of the RK C array. + B_view : double[::1] + Memoryview of the RK B parameter. + E_view : double[::1] + Memoryview of the RK E parameter. + E3_view : double[::1] + Memoryview of the RK E3 parameter. + E5_view : double[::1] + Memoryview of the RK E5 parameter. + C_view : double[::1] + Memoryview of the RK C parameter. + A_view : double[:, ::1] + Memoryview of the RK A parameter. + K_view : double[:, ::1] + Memoryview of the RK K parameter. + K_T_view : double[:, ::1] + Memoryview of the RK K parameter's transpose. + t_new : double + Current value of the independent variable used during integration. + t_old : double + Value of the independent variable at the previous step. + step_size : double + Current step's absolute size. + len_t : Py_ssize_t + Number of steps taken. + y_new_view : double[::1] + Current Memoryview of the dependent y variables. + y_old_view : double[::1] + Memoryview of the dependent y variables at the previous step. + y_new_view : double[::1] + Current Memoryview of dy/dt. + y_old_view : double[::1] + Memoryview of dy/dt at the previous step. + extra_output_init_view : double[::1] + Memoryview of extra outputs at the initial step (t=t0; y=y0). + Extra outputs are parameters captured during diffeq calculation. + extra_output_view : double[::1] + Current Memoryview of extra outputs (at t_new). + Extra outputs are parameters captured during diffeq calculation. + + Methods + reset_state() + Resets the class' state variables so that integration can be rerun. + calc_first_step() + Calculates the first step's size. + rk_step() + Performs a Runge-Kutta step calculation including local error determination. + solve(reset=True) + Public wrapper to the private solve method which calculates the integral of the user-provided system of ODEs. + If reset=True, `reset_state()` will be called before integration starts. + _solve() + Calculates the integral of the user-provided system of ODEs. + If reset=True, `reset_state()` will be called before integration starts. + interpolate() + Performs a final interpolation to fit solution results into a user requested independent variable domain. + change_t_span(t_span, auto_reset_state=False) + Public method to change the independent variable limits (start and stop points of integration). + change_y0(y0, auto_reset_state=False) + Public method to change the initial conditions. + change_args(args, auto_reset_state=False) + Public method to change additional arguments used during integration. + change_tols(rtol=NAN, atol=NAN, rtols=None, atols=None, auto_reset_state=False) + Public method to change relative and absolute tolerances and/or their arrays. + change_max_step(max_step, auto_reset_state=False) + Public method to change maximum allowed step size. + change_first_step(first_step, auto_reset_state=False) + Public method to change first step's size. + change_t_eval(t_eval, auto_reset_state=False) + Public method to change user requested independent domain, `t_eval`. + change_parameters(*, auto_reset_state=True, auto_solve=False) + Public method to change one or more parameters which have their own `change_*` method. + update_constants() + Method that is called during `reset_state` to change any constant parameters used by `diffeq`. + This method is expected to be overriden by user constructed subclasses. + diffeq() + The system of differential equations that will be solved by the integrator. + This method is expected to be overriden by user constructed subclasses. + """ def __init__(self, (double, double) t_span, const double[::1] y0, tuple args = None, - double rtol = 1.e-6, - double atol = 1.e-8, + unsigned char rk_method = 1, + double rtol = 1.e-3, + double atol = 1.e-6, double[::1] rtols = None, double[::1] atols = None, double max_step = MAX_STEP, double first_step = 0., - unsigned char rk_method = 1, + Py_ssize_t max_num_steps = 0, const double[::1] t_eval = None, bool_cpp_t capture_extra = False, Py_ssize_t num_extra = 0, bool_cpp_t interpolate_extra = False, Py_ssize_t expected_size = 0, - Py_ssize_t max_num_steps = 0, bool_cpp_t auto_solve = True): - - # Setup loop variables + """ + Initialize new CySolver instance. + + Parameters + ---------- + t_span : (double, double) + Values of independent variable at beginning and end of integration. + y0 : double[::1] + Initial values for the dependent y variables at `t_span[0]`. + args : tuple or None, default=None + Additional arguments used by the differential equation. + None (default) will tell the solver to not use additional arguments. + rk_method : int, default=1 + Runge-Kutta method that will be used. Currently implemented models: + 0: ‘RK23’: Explicit Runge-Kutta method of order 3(2). + 1: ‘RK45’ (default): Explicit Runge-Kutta method of order 5(4). + 2: ‘DOP853’: Explicit Runge-Kutta method of order 8. + rtol : double, default=1.0e-3 + Relative tolerance using in local error calculation. + atol : double, default=1.0e-6 + Absolute tolerance using in local error calculation. + rtols : double[::1], default=None + np.ndarray of relative tolerances, one for each dependent y variable. + None (default) will use the same tolerance (set by `rtol`) for each y variable. + atols : double[::1], default=None + np.ndarray of absolute tolerances, one for each dependent y variable. + None (default) will use the same tolerance (set by `atol`) for each y variable. + max_step : double, default=+Inf + Maximum allowed step size. + first_step : double, default=0 + First step's size (after `t_span[0]`). + If set to 0 (the default) then the solver will attempt to guess a suitable initial step size. + max_num_steps : Py_ssize_t, default=0 + Maximum number of step sizes allowed before solver will auto fail. + If set to 0 (the default) then the maximum number of steps will be equal to max integer size + allowed on system architecture. + t_eval : double[::1], default=None + If not set to None, then a final interpolation will be performed on the solution to fit it to this array. + capture_extra : bool = False + If True, then additional output from the differential equation will be collected (but not used to determine + integration error). + Example: + ``` + def diffeq(t, y, dy): + a = ... some function of y and t. + dy[0] = a**2 * sin(t) - y[1] + dy[1] = a**3 * cos(t) + y[0] + + # Storing extra output in dy even though it is not part of the diffeq. + dy[2] = a + ``` + num_extra : int = 0 + The number of extra outputs the integrator should expect. With the previous example there is 1 extra output. + interpolate_extra : bool_cpp_t, default=False + Flag if interpolation should be run on extra parameters. + If set to False when `run_interpolation=True`, then interpolation will be run on solution's y, t. These will + then be used to recalculate extra parameters rather than an interpolation on the extra parameters captured + during integration. + expected_size : Py_ssize_t, default=0 + Anticipated size of integration range, i.e., how many steps will be required. + Used to build temporary storage arrays for the solution results. + If set to 0 (the default), then the solver will attempt to guess on a suitable expected size based on the + relative tolerances and size of the integration domain. + auto_solve : bool_cpp_t, default=True + If set to True, then the solver's `solve` method will be called at the end of initialization. + Otherwise, the user will have to call `solver_instance = CySolver(...); solver_instance.solve()` + to perform integration. + """ + + # Loop variables cdef Py_ssize_t i, j # Set integration information self.status = -4 # Status code to indicate that integration has not started. self.message = 'Integration has not started.' self.success = False - self.recalc_firststep = False + self.recalc_first_step = False - # Declare public variables to avoid memory access violations if solve() is not called. - cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake - cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake - solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C') - solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C') - solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C') - self.solution_t_view = solution_t_fake - self.solution_extra_view = solution_extra_fake - self.solution_y_view = solution_y_fake - - # Determine y-size information - self.y_size = len(y0) - self.y_size_dbl = self.y_size + # Store y0 values and determine y-size information + self.y0_view = y0 + self.y_size = self.y0_view.size + self.y_size_dbl = self.y_size self.y_size_sqrt = sqrt(self.y_size_dbl) - # Store y0 values for later - self.y0_view = y0 # Determine time domain information self.t_start = t_span[0] self.t_end = t_span[1] self.t_delta = self.t_end - self.t_start - self.t_delta_abs = fabs(self.t_delta) - if self.t_delta >= 0.: # Integration is moving forward in time. self.direction_flag = True self.direction_inf = INF + self.t_delta_abs = self.t_delta else: # Integration is moving backwards in time. self.direction_flag = False self.direction_inf = -INF + self.t_delta_abs = -self.t_delta - # # Determine integration tolerances + # Determine integration tolerances cdef double rtol_tmp cdef np.ndarray[np.float64_t, ndim=1, mode='c'] rtol_array, atol_array rtol_array = np.empty(self.y_size, dtype=np.float64, order='C') @@ -106,42 +350,42 @@ cdef class CySolver: self.atols_view = atol_array if rtols is not None: - # Using arrayed rtol + # User provided an arrayed version of rtol. if len(rtols) != self.y_size: - raise AttributeError('rtols must be the same size as y0.') + raise AttributeError('rtol array must be the same size as y0.') for i in range(self.y_size): rtol_tmp = rtols[i] + # Check that the tolerances are not too small. if rtol_tmp < EPS_100: rtol_tmp = EPS_100 self.rtols_view[i] = rtol_tmp else: - # Using constant rtol - # Check tolerances + # No array provided. Use the same rtol for all ys. + # Check that the tolerances are not too small. if rtol < EPS_100: rtol = EPS_100 for i in range(self.y_size): self.rtols_view[i] = rtol if atols is not None: - # Using arrayed atol + # User provided an arrayed version of atol. if len(atols) != self.y_size: - raise AttributeError('atols must be the same size as y0.') + raise AttributeError('atol array must be the same size as y0.') for i in range(self.y_size): self.atols_view[i] = atols[i] else: + # No array provided. Use the same atol for all ys. for i in range(self.y_size): self.atols_view[i] = atol # Determine maximum number of steps if max_num_steps == 0: - self.use_max_steps = False - self.max_num_steps = 0 + self.max_num_steps = MAX_INT_SIZE elif max_num_steps < 0: self.status = -8 self.message = "Attribute error." raise AttributeError('Negative number of max steps provided.') else: - self.use_max_steps = True self.max_num_steps = min(max_num_steps, MAX_INT_SIZE) # Expected size of output arrays. @@ -183,31 +427,22 @@ cdef class CySolver: self.dy_new_view = dy_new self.dy_old_view = dy_old - # Set current and old y variables equal to y0 - for i in range(self.y_size): - self.y_new_view[i] = self.y0_view[i] - self.y_old_view[i] = self.y0_view[i] - - # Set current and old time variables equal to t0 - self.t_old = self.t_start - self.t_new = self.t_start - # We already have one time step due to the initial conditions. - self.len_t = 1 - # Determine extra outputs cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_output_init, extra_output self.capture_extra = capture_extra - self.num_extra = num_extra + # To avoid memory access violations we need to set the extra output arrays no matter if they are used. + # If not used, just set them to size zero. if self.capture_extra: - extra_output_init = np.empty(self.num_extra, dtype=np.float64, order='C') - extra_output = np.empty(self.num_extra, dtype=np.float64, order='C') - self.extra_output_init_view = extra_output_init - self.extra_output_view = extra_output - - # We need to determine the extra outputs at the initial time step. - self.diffeq() - for i in range(num_extra): - self.extra_output_init_view[i] = self.extra_output_view[i] + if num_extra == 0: + self.status = -8 + raise AttributeError('Capture extra set to True, but number of extra set to 0.') + self.num_extra = num_extra + else: + self.num_extra = 0 + extra_output_init = np.empty(self.num_extra, dtype=np.float64, order='C') + extra_output = np.empty(self.num_extra, dtype=np.float64, order='C') + self.extra_output_init_view = extra_output_init + self.extra_output_view = extra_output # Determine interpolation information cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array @@ -225,9 +460,8 @@ cdef class CySolver: for i in range(self.len_t_eval): self.t_eval_view[i] = t_eval[i] - # Determine RK scheme and initalize memory views + # Determine RK scheme and initialize RK memory views self.rk_method = rk_method - if rk_method == 0: # RK23 Method self.rk_order = RK23_order @@ -269,7 +503,7 @@ cdef class CySolver: self.E5_view = DOP_E5 self.rk_n_stages_extended = DOP_n_stages_extended - # Unused for DOP853 but initalize it anyways + # Unused for DOP853 but initialize it anyways self.E_view = DOP_E3 else: self.status = -8 @@ -287,47 +521,26 @@ cdef class CySolver: cdef np.ndarray[np.float64_t, ndim=2, mode='c'] K # It is important K be initialized with 0s K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C') - - # Setup memory views. self.K_view = K self.K_T_view = self.K_view.T - # Initialize dy_new_view for start of integration (important for first_step calculation) - if not self.capture_extra: - # If `capture_extra` is True then this step was already performed so we can skip it. - self.diffeq() - - for i in range(self.y_size): - self.dy_old_view[i] = self.dy_new_view[i] - - # Determine first step + # Store user provided step information self.first_step = first_step - if self.first_step == 0.: - self.step_size = self.calc_first_step() - else: - if self.first_step <= 0.: - self.status = -8 - self.message = "Attribute error." - raise AttributeError('Error in user-provided step size: Step size must be a positive number.') - elif self.first_step > self.t_delta_abs: - self.status = -8 - self.message = "Attribute error." - raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.') - self.step_size = self.first_step - self.max_step = max_step + self.max_step = max_step - # Set any constant parameters that the user has set - self.update_constants() + # Parameters are initialized but may not be set to correct values. + # Call reset state to ensure everything is ready. + self.reset_state() # Run solver if requested if auto_solve: - # We know for a fact that this is the first time solve will be called - # so we do not need to reset the state. + # We know for a fact that this is the first time solve will be called and we just reset the Sovler's state + # So we can safely tell the solve method not to reset. self._solve(reset=False) cpdef void reset_state(self): - """ Resets the integrator to its initial state. """ + """ Resets the class' state variables so that integration can be rerun. """ cdef Py_ssize_t i, j # Set current and old time variables equal to t0 @@ -335,7 +548,7 @@ cdef class CySolver: self.t_new = self.t_start self.len_t = 1 - # Reset y variables + # Reset y variables back to initial conditions for i in range(self.y_size): # Set current and old y variables equal to y0 self.y_new_view[i] = self.y0_view[i] @@ -350,11 +563,18 @@ cdef class CySolver: # Make initial call to diffeq() self.diffeq() + + # Store first dydt for i in range(self.y_size): self.dy_old_view[i] = self.dy_new_view[i] - # Determine first step size - if self.first_step == 0. or self.recalc_firststep: + # Store extra outputs for the first time step + if self.capture_extra: + for i in range(self.num_extra): + self.extra_output_init_view[i] = self.extra_output_view[i] + + # Determine first step's size + if self.first_step == 0. or self.recalc_first_step: self.step_size = self.calc_first_step() else: if self.first_step <= 0.: @@ -370,7 +590,8 @@ cdef class CySolver: # Reset output storage self.num_concats = 1 - # Reset public variables to clear any old solutions. + # Reset public variables to clear any old solutions + # and to avoid memory access violations if solve() is not called. cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C') @@ -380,21 +601,22 @@ cdef class CySolver: self.solution_extra_view = solution_extra_fake self.solution_y_view = solution_y_fake - # Other flags and messages + # Other integration flags and messages self.success = False self.status = -5 # status == -5 means that reset has been called but solve has not yet been called. self.message = "CySolver has been reset." cdef double calc_first_step(self) noexcept nogil: - """ Determine initial step size. """ + """ + Select an initial step size based on the differential equation. + .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential + Equations I: Nonstiff Problems", Sec. II.4. + """ cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale cdef double y_old_tmp - # Select an initial step size based on the differential equation. - # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential - # Equations I: Nonstiff Problems", Sec. II.4. if self.y_size == 0: step_size = INF else: @@ -451,12 +673,13 @@ cdef class CySolver: return step_size + cdef void rk_step(self) noexcept nogil: + """ Performs a Runge-Kutta step calculation including local error determination. """ # Initialize step variables cdef Py_ssize_t s, i, j cdef double min_step, step, step_factor, time_tmp, t_delta_check - cdef double C_at_s, A_at_sj, A_at_10, B_at_j cdef double scale, K_scale, dy_tmp cdef double error_norm3, error_norm5, error_norm, error_dot_1, error_dot_2, error_denom, error_pow cdef bool_cpp_t step_accepted, step_rejected, step_error @@ -476,12 +699,13 @@ cdef class CySolver: step_rejected = False step_error = False - # Optimization since this A is called consistently and does not change. + # Optimization variables + cdef double C_at_s, A_at_sj, A_at_10, B_at_j + # Define a very specific A now since it is called consistently and does not change. A_at_10 = self.A_view[1, 0] # # Step Loop while not step_accepted: - if self.step_size < min_step: step_error = True self.status = -1 @@ -500,18 +724,19 @@ cdef class CySolver: if t_delta_check > 0.: self.t_new = self.t_end - # Correct the step if we were at the end of integration + # If we are, correct the step so that it just hits the end of integration. step = self.t_new - self.t_old if self.direction_flag: self.step_size = step else: self.step_size = -step - # Calculate derivative using RK method + # # Calculate derivative using RK method # t_new must be updated for each loop of s in order to make the diffeq calls. # But we need to return to its original value later on. Store in temp variable. time_tmp = self.t_new + for s in range(1, self.len_C): C_at_s = self.C_view[s] @@ -620,7 +845,6 @@ cdef class CySolver: # We need the absolute value but since we are taking the square, it is guaranteed to be positive. # TODO: This will need to change if CySolver ever accepts complex numbers # error_norm_abs = fabs(error_dot_1) - # error_norm5_abs = fabs(error_dot_2) error_norm += (error_dot_1 * error_dot_1) error_norm = sqrt(error_norm) / self.y_size_sqrt @@ -652,19 +876,34 @@ cdef class CySolver: # Issue with step convergence self.status = -7 - # End of step loop. Update the old variables + # End of step loop. Update the 'old' variables self.t_old = self.t_new for i in range(self.y_size): - self.y_old_view[i] = self.y_new_view[i] + self.y_old_view[i] = self.y_new_view[i] self.dy_old_view[i] = self.dy_new_view[i] cpdef void solve(self, bool_cpp_t reset = True): - self._solve() + """ + Public wrapper to the private solve method which calculates the integral of the user-provided system of ODEs. + + Parameters + ---------- + reset : bool_cpp_t, default=True + If True, `reset_state()` will be called before integration starts. + """ + self._solve(reset=reset) cdef void _solve(self, bool_cpp_t reset = True): - """ Perform Runge-Kutta integration on `self.diffeq` function.""" + """ + Calculates the integral of the user-provided system of ODEs. + + Parameters + ---------- + reset : bool_cpp_t, default=True + If True, `reset_state()` will be called before integration starts. + """ # Reset the solver's state (avoid issues if solve() is called multiple times). if reset: @@ -702,61 +941,52 @@ cdef class CySolver: for i in range(self.num_extra): extra_array_view[i, 0] = self.extra_output_init_view[i] - # Reset live variables to their starting values. - # Set current and old y variables equal to y0 - for i in range(self.y_size): - self.y_new_view[i] = self.y0_view[i] - self.y_old_view[i] = self.y0_view[i] - # Set current and old time variables equal to t0 - self.t_old = self.t_start - self.t_new = self.t_start - # # Main integration loop - self.status = 0 - # There is an initial condition provided so the time length is already 1 - self.len_t = 1 + self.status = 0 if self.y_size == 0: self.status = -6 while self.status == 0: + + # Check that integration is not complete. if self.t_new == self.t_end: self.t_old = self.t_end self.status = 1 break - if self.use_max_steps: - if self.len_t > self.max_num_steps: - self.status = -2 - break - else: - if self.len_t > MAX_INT_SIZE: + # Check that maximum number of steps has not been exceeded. + if self.len_t > self.max_num_steps: + if self.max_num_steps == MAX_INT_SIZE: self.status = -3 - break + else: + self.status = -2 + break - # Perform RK Step + # # Perform RK Step self.rk_step() - # Check is error occurred during step. + # Check if an error occurred during step calculations before storing data. if self.status != 0: break - # Save data + # Store data if self.len_t >= (self.num_concats * self.expected_size): - # There is more data than we have room in our arrays. + # There is more data then we have room in our arrays. # Build new arrays with more space. # OPT: Note this is an expensive operation. self.num_concats += 1 new_size = self.num_concats * self.expected_size + time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C') - y_results_array_new = np.empty((self.y_size, new_size), dtype=np.float64, order='C') + y_results_array_new = np.empty((self.y_size, new_size), dtype=np.float64, order='C') time_domain_array_new_view = time_domain_array_new - y_results_array_new_view = y_results_array_new + y_results_array_new_view = y_results_array_new if self.capture_extra: extra_array_new = np.empty((self.num_extra, new_size), dtype=np.float64, order='C') extra_array_new_view = extra_array_new - # Loop through time to fill in these new arrays with the old values + # Fill in these new arrays with the old values (new values will be added later) for j in range(self.y_size): for i in range(self.len_t): if j == 0: @@ -768,14 +998,14 @@ cdef class CySolver: for i in range(self.len_t): extra_array_new_view[j, i] = extra_array_view[j, i] - # No longer need the old arrays. Change where the view is pointing and delete them. + # No longer need the old arrays. Change where the memory-views are pointing y_results_array_view = y_results_array_new time_domain_array_view = time_domain_array_new # TODO: Delete the old arrays? if self.capture_extra: extra_array_view = extra_array_new - # There should be room in the arrays to add new data. + # There is room to add this step's results to our storage arrays. time_domain_array_view[self.len_t] = self.t_new # To match the format that scipy follows, we will take the transpose of y. for i in range(self.y_size): @@ -785,10 +1015,10 @@ cdef class CySolver: for i in range(self.num_extra): extra_array_view[i, self.len_t] = self.extra_output_view[i] - # Increase number of time points. + # Increase number of independent variable points. self.len_t += 1 - # # Clean up output. + # Integration has stopped. Check if it was successful. if self.status == 1: self.success = True else: @@ -800,9 +1030,9 @@ cdef class CySolver: cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_out_array, time_domain_out_array_bad if self.success: - # Build final output arrays. + # Load values into output arrays. # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size. - # This process will remove that junk and leave only the wanted data. + # This process will remove that junk and leave only the valid data. y_results_out_array = np.empty((self.y_size, self.len_t), dtype=np.float64, order='C') time_domain_out_array = np.empty(self.len_t, dtype=np.float64, order='C') if self.capture_extra: @@ -817,6 +1047,8 @@ cdef class CySolver: # Populate values for j in range(self.y_size): for i in range(self.len_t): + # Since this loop is only going to len_t, it will cut off any extraneous data the storage arrays + # hold beyond that point. if j == 0: self.solution_t_view[i] = time_domain_array_view[i] self.solution_y_view[j, i] = y_results_array_view[j, i] @@ -825,8 +1057,10 @@ cdef class CySolver: for i in range(self.len_t): self.solution_extra_view[j, i] = extra_array_view[j, i] else: + # Integration was not successful. But we still need to build solution arrays so that accessing the solution + # will not cause access violations. # Build nan arrays - y_results_out_array_bad = np.nan * np.ones((self.y_size, 1), dtype=np.float64, order='C') + y_results_out_array_bad = np.nan * np.ones((self.y_size, 1), dtype=np.float64, order='C') time_domain_out_array_bad = np.nan * np.ones(1, dtype=np.float64, order='C') if self.capture_extra: extra_output_out_array_bad = np.nan * np.ones((self.num_extra, 1), dtype=np.float64, order='C') @@ -858,20 +1092,17 @@ cdef class CySolver: self.message = "Error in step size calculation:\n\tError in step size acceptance." - cdef void interpolate(self): - """ Interpolate the results of a successful integration over the user provided time domain, `t_eval`.""" + """ Interpolate the results of a successful integration over the user provided time domain, `t_eval`. """ # User only wants data at specific points. cdef char old_status old_status = self.status - self.status = 2 + self.status = 2 # Interpolation is being performed. # Setup loop variables cdef Py_ssize_t i, j - # The current version of this function has not implemented sicpy's dense output. - # Instead we use an interpolation. - # OPT: this could be done inside the integration loop for performance gains. + # TODO: The current version of CySolver has not implemented sicpy's dense output. Instead we use an interpolation. cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_reduced cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_result_timeslice, y_result_temp y_results_reduced = np.empty((self.y_size, self.len_t_eval), dtype=np.float64, order='C') @@ -891,8 +1122,7 @@ cdef class CySolver: cdef double[::1] extra_timeslice_view, extra_temp_view for j in range(self.y_size): - # np.interp only works on 1D arrays so we must loop through each of the y variables. - + # The interpolation function only works on 1D arrays, so we must loop through each of the y variables. # # Set timeslice equal to the time values at this y_j for i in range(self.len_t): y_result_timeslice_view[i] = self.solution_y_view[j, i] @@ -911,9 +1141,11 @@ cdef class CySolver: if self.capture_extra: # Right now if there is any extra output then it is stored at each time step used in the RK loop. - # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras? - # or do we use the interpolation on y to find new values. + # We have to make a choice: + # - Do we interpolate the extra values that were stored? + # - Or do we use the interpolated t, y values to find new extra parameters at those specific points. # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate. + # This decision is set by the user with the `interpolate_extra` flag. # Create extra output arrays extra_reduced = np.empty((self.num_extra, self.len_t_eval), dtype=np.float64, order='C') @@ -967,35 +1199,58 @@ cdef class CySolver: cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = False): + """ + Public method to change the independent variable limits (start and stop points of integration). + + Parameters + ---------- + t_span : (double, double) + New t_span to use during integration. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ # Update time domain information self.t_start = t_span[0] self.t_end = t_span[1] self.t_delta = self.t_end - self.t_start - self.t_delta_abs = fabs(self.t_delta) if self.t_delta >= 0.: self.direction_flag = True self.direction_inf = INF + self.t_delta_abs = self.t_delta else: self.direction_flag = False self.direction_inf = -INF + self.t_delta_abs = -self.t_delta # A change to t-span will affect the first step's size - self.recalc_firststep = True + self.recalc_first_step = True if auto_reset_state: self.reset_state() cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = False): + """ + Public method to change the initial conditions. + + Note: the size of y0 can not be different from the original y0 used to instantiate the class instance. + + Parameters + ---------- + y0 : double[::1] + New dependent variable initial conditions. + Must be the same size as the original y0. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ # Check y-size information cdef Py_ssize_t y_size_new y_size_new = len(y0) if self.y_size != y_size_new: - # So many things need to update if ysize changes that the user might as well just - # create a new class instance. + # So many things need to update if ysize changes that the user should just create a new class instance. self.status = -8 self.message = "Attribute error." raise AttributeError('New y0 must be the same size as the original y0 used to create CySolver class.' @@ -1005,13 +1260,23 @@ cdef class CySolver: self.y0_view = y0 # A change to y0 will affect the first step's size - self.recalc_firststep = True + self.recalc_first_step = True if auto_reset_state: self.reset_state() cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = False): + """ + Public method to change additional arguments used during integration. + + Parameters + ---------- + args : tuple + New tuple of additional arguments. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ # Determine optional arguments cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array @@ -1023,7 +1288,7 @@ cdef class CySolver: self.arg_array_view[i] = args[i] # A change to args will affect the first step's size - self.recalc_firststep = True + self.recalc_first_step = True if auto_reset_state: self.reset_state() @@ -1032,58 +1297,112 @@ cdef class CySolver: cpdef void change_tols(self, double rtol = NAN, double atol = NAN, double[::1] rtols = None, double[::1] atols = None, bool_cpp_t auto_reset_state = False): + """ + Public method to change relative and absolute tolerances and/or their arrays. + + Parameters + ---------- + rtol : double, default=NAN + New relative tolerance for all dependent y variables. + if NAN (the default), then no change will be made. + atol : double, default=NAN + New absolute tolerance for all dependent y variables. + if NAN (the default), then no change will be made. + rtols : double[::1] + Numpy ndarray of relative tolerances, one for each dependent y variable. + if None (the default), then no change will be made. + atols : double[::1] + Numpy ndarray of absolute tolerances, one for each dependent y variable. + if None (the default), then no change will be made. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ + + # This is one of the few change functions where nothing might change. + # Track if updates need to be made + cdef bool_cpp_t something_changed + something_changed = False # Update tolerances cdef double rtol_tmp cdef np.ndarray[np.float64_t, ndim=1, mode='c'] rtol_array, atol_array - rtol_array = np.empty(self.y_size, dtype=np.float64, order='C') - atol_array = np.empty(self.y_size, dtype=np.float64, order='C') - self.rtols_view = rtol_array - self.atols_view = atol_array - if rtols is not None: - # Using arrayed rtol - if len(rtols) != self.y_size: - raise AttributeError('rtols must be the same size as y0.') - for i in range(self.y_size): - rtol_tmp = rtols[i] - if rtol_tmp < EPS_100: - rtol_tmp = EPS_100 - self.rtols_view[i] = rtol_tmp - elif not isnan(rtol): - # Using constant rtol - # Check tolerances - if rtol < EPS_100: - rtol = EPS_100 - for i in range(self.y_size): - self.rtols_view[i] = rtol + if rtols is not None or not isnan(rtol): + # Change to rtol + something_changed = True + rtol_array = np.empty(self.y_size, dtype=np.float64, order='C') + self.rtols_view = rtol_array - if atols is not None: - # Using arrayed atol - if len(atols) != self.y_size: - raise AttributeError('atols must be the same size as y0.') - for i in range(self.y_size): - self.atols_view[i] = atols[i] - elif not isnan(atol): - for i in range(self.y_size): - self.atols_view[i] = atol + if rtols is not None: + # Using arrayed rtol + if len(rtols) != self.y_size: + raise AttributeError('rtols must be the same size as y0.') + for i in range(self.y_size): + rtol_tmp = rtols[i] + if rtol_tmp < EPS_100: + rtol_tmp = EPS_100 + self.rtols_view[i] = rtol_tmp + elif not isnan(rtol): + # Using constant rtol + # Check tolerances + if rtol < EPS_100: + rtol = EPS_100 + for i in range(self.y_size): + self.rtols_view[i] = rtol + + if atols is not None or not isnan(atol): + # Change to atol + something_changed = True + atol_array = np.empty(self.y_size, dtype=np.float64, order='C') + self.atols_view = atol_array + + if atols is not None: + # Using arrayed atol + if len(atols) != self.y_size: + raise AttributeError('atols must be the same size as y0.') + for i in range(self.y_size): + self.atols_view[i] = atols[i] + elif not isnan(atol): + for i in range(self.y_size): + self.atols_view[i] = atol - # A change to tolerances will affect the first step's size - self.recalc_firststep = True + if something_changed: + # A change to tolerances will affect the first step's size + self.recalc_first_step = True - if auto_reset_state: - self.reset_state() + if auto_reset_state: + self.reset_state() cpdef void change_max_step(self, double max_step, bool_cpp_t auto_reset_state = False): - - self.max_step = max_step + """ + Public method to change maximum allowed step size. + + Parameters + ---------- + max_step : double + New maximum step size used during integration. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ + + self.max_step = fabs(max_step) if auto_reset_state: self.reset_state() cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = False): + """ + Public method to change first step's size. + + Parameters + ---------- + first_step : double + New first step's size. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ self.first_step = first_step if self.first_step == 0.: @@ -1100,19 +1419,29 @@ cdef class CySolver: self.step_size = self.first_step # If first step has already been reset then no need to call it again later. - self.recalc_firststep = False + self.recalc_first_step = False if auto_reset_state: self.reset_state() cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = False): + """ + Public method to change user requested independent domain, `t_eval`. + + Parameters + ---------- + t_eval : double[:] + New independent domain at which solution will be interpolated. + auto_reset_state : bool_cpp_t, default=False + If True, then the `reset_state` method will be called once parameter is changed. + """ # Determine interpolation information cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array self.run_interpolation = True - self.len_t_eval = len(t_eval) + self.len_t_eval = t_eval.size t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C') self.t_eval_view = t_eval_array @@ -1123,8 +1452,7 @@ cdef class CySolver: self.reset_state() - cpdef void change_parameters( - self, + cpdef void change_parameters(self, (double, double) t_span = EMPTY_T_SPAN, const double[::1] y0 = None, tuple args = None, @@ -1137,35 +1465,70 @@ cdef class CySolver: const double[::1] t_eval = None, bool_cpp_t auto_reset_state = True, bool_cpp_t auto_solve = False): + """ + Public method to change one or more parameters which have their own `change_*` method. + + See other `change_*` methods for more detailed documentation. + + Parameters + ---------- + t_span + y0 + args + rtol + atol + rtols + atols + max_step + first_step + t_eval + auto_reset_state : bool_cpp_t, default=True + If True, then the `reset_state` method will be called once parameter is changed. + auto_solve : bool_cpp_t, default=False + If True, then the `solve` method will be called after all parameters have been changed and the state reset. + """ + + # This is one of the few change functions where nothing might change. + # Track if updates need to be made + cdef bool_cpp_t something_changed + something_changed = False if not isnan(t_span[0]): + something_changed = True self.change_t_span(t_span, auto_reset_state=False) if y0 is not None: + something_changed = True self.change_y0(y0, auto_reset_state=False) if args is not None: + something_changed = True self.change_args(args, auto_reset_state=False) if (not isnan(rtol)) or (not isnan(atol)) or (rtols is not None) or (atols is not None): + something_changed = True self.change_tols(rtol=rtol, atol=atol, rtols=rtols, atols=atols, auto_reset_state=False) if not isnan(max_step): + something_changed = True self.change_max_step(max_step, auto_reset_state=False) if not isnan(first_step): + something_changed = True self.change_first_step(first_step, auto_reset_state=False) if t_eval is not None: + something_changed = True self.change_t_eval(t_eval, auto_reset_state=False) # Now that everything has been set, reset the solver's state. - # If first step has already been reset then no need to call it again later. - if not isnan(first_step): - self.recalc_firststep = False + if something_changed: + # If first step has already been reset then no need to call it again later. + if not isnan(first_step): + self.recalc_first_step = False - if auto_reset_state: - self.reset_state() + if auto_reset_state: + self.reset_state() # User can choose to go ahead and rerun the solver with the new setup if auto_solve: @@ -1174,8 +1537,41 @@ cdef class CySolver: self._solve(reset=(not auto_reset_state)) cdef void update_constants(self) noexcept nogil: + # This is a template method that should be overriden by a user's subclass (if needed). + + # Example of usage: + # If the diffeq function has an equation of the form dy = (2. * a - sin(b)) * y * sin(t) + # then only the "y" and "sin(t)" change with each time step. The other coefficient could be precalculated to + # save on computation steps. This method assists with that process. + # First: + # Define a class attribute for the coefficient: + # ```python + # cdef class MySolver(CySolver): + # cdef double coeff_1 + # ... + # ``` + # Second: + # Override this method to populate the value of `coeff_1`: + # ```python + # ... + # cdef void update_constants(self) noexcept nogil: + # a = self.arg_array_view[0] + # b = self.arg_array_view[1] + # self.coeff_1 = (2. * a - sin(b)) + # ... + # ``` + # Third: + # Update the diffeq method to utilize this new coefficient variable. + # ```python + # ... + # cdef void diffeq(self) noexcept nogil: + # self.dy_new_view[0] = self.ceoff_1 * self.y_new_view[0] * sin(self.t_new) + # ... + # ``` + # + # The `Coeff_1` variable will only be recalculated if the additional arguments are changed. - # Nothing to update + # Base class method does nothing. pass cdef void diffeq(self) noexcept nogil: @@ -1226,24 +1622,24 @@ cdef class CySolver: # Public accessed properties @property - def solution_t(self): + def t(self): # Need to convert the memory view back into a numpy array return np.asarray(self.solution_t_view) @property - def solution_y(self): + def y(self): # Need to convert the memory view back into a numpy array return np.asarray(self.solution_y_view) @property - def solution_extra(self): + def extra(self): # Need to convert the memory view back into a numpy array return np.asarray(self.solution_extra_view) @property - def size_growths(self): + def growths(self): # How many times the output arrays had to grow during integration return self.num_concats - 1 diff --git a/CyRK/nb/nbrk.py b/CyRK/nb/nbrk.py index 811db15..54b7456 100644 --- a/CyRK/nb/nbrk.py +++ b/CyRK/nb/nbrk.py @@ -89,8 +89,8 @@ def nbrk_ode( t_span: Tuple[float, float], y0: np.ndarray, args: tuple = tuple(), - rtol: float = 1.e-6, - atol: float = 1.e-8, + rtol: float = 1.e-3, + atol: float = 1.e-6, rtols: np.ndarray = EMPTY_ARR, atols: np.ndarray = EMPTY_ARR, max_step: float = np.inf, @@ -113,9 +113,9 @@ def nbrk_ode( 1D array of the initial values of the problem at t_span[0] args : tuple = tuple() Any additional arguments that are passed to dffeq. - rtol : float = 1.e-6 + rtol : float = 1.e-3 Integration relative tolerance used to determine optimal step size. - atol : float = 1.e-8 + atol : float = 1.e-6 Integration absolute tolerance used to determine optimal step size. max_step : float = np.inf Maximum allowed step size. diff --git a/Documentation/Extra Output.md b/Documentation/Extra Output.md index bc2070a..68ed275 100644 --- a/Documentation/Extra Output.md +++ b/Documentation/Extra Output.md @@ -174,9 +174,9 @@ CySolverTesterInst.solution_t # Time domain CySolverTesterInst.solution_y # y dependent variables # Extra output that was captured during integration. -CySolverTesterInst.solution_extra -print(CySolverTesterInst.solution_extra[0, :]) -print(CySolverTesterInst.solution_extra[1, :]) +CySolverTesterInst.extra +print(CySolverTesterInst.extra[0, :]) +print(CySolverTesterInst.extra[1, :]) ``` ## Additional Considerations When Using `t_eval` diff --git a/Performance/Differential Equation Check.ipynb b/Performance/Differential Equation Check.ipynb index e7c50dd..e2b0b4c 100644 --- a/Performance/Differential Equation Check.ipynb +++ b/Performance/Differential Equation Check.ipynb @@ -128,12 +128,12 @@ " time_span = timespans[0]\n", " CySolverInst = CySolverClass(time_span, y0, args_, rk_method=1)\n", " CySolverInst.solve()\n", - " y_len = CySolverInst.solution_y.shape[0]\n", + " y_len = CySolverInst.y.shape[0]\n", " \n", " \n", " fig, ax = plt.subplots()\n", " for i in range(y_len):\n", - " ax.plot(CySolverInst.solution_t, np.real(CySolverInst.solution_y[i, :]), label=f'$y_{i}$')\n", + " ax.plot(CySolverInst.solution_t, np.real(CySolverInst.y[i, :]), label=f'$y_{i}$')\n", " ax.set(title=f'{diffeq_name} - CySolver', xlabel='Time')\n", " ax.legend(loc='best')" ] diff --git a/Performance/cyrk_performance-DOP853.csv b/Performance/cyrk_performance-DOP853.csv index 7fa85f8..99d390e 100644 --- a/Performance/cyrk_performance-DOP853.csv +++ b/Performance/cyrk_performance-DOP853.csv @@ -13,4 +13,3 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 19:01:55, 1.1085, 0.0280, 0.1259, 0.0038, 0.1928, 0.0068, 10.5592, 0.1295, 0.7260, 0.0161, 1.9403, 0.1159, 0.5095, 0.0229, 0.0981, 0.0039, 0.1154, 0.0031, 5.1162, 0.2334, 0.4771, 0.0345, 0.9215, 0.0410, 1.5993, 0.0191, 0.1972, 0.0056, 0.3029, 0.0043, 21.7690, 0.3977, 1.8171, 0.0565, 3.9987, 0.0936, 1.9748, 0.1240, 0.2101, 0.0042, 0.5470, 0.0321, 25.2882, 0.2939, 1.9768, 0.0476, 7.2745, 0.1060 0.7.0.dev7, 27/08/2023 01:13:33, 1.0344, 0.0015, 0.0966, 0.0002, 0.1670, 0.0005, 10.2972, 0.0150, 0.5214, 0.0006, 1.5239, 0.0135, 0.4878, 0.0017, 0.0772, 0.0001, 0.0991, 0.0005, 4.5979, 0.0411, 0.3331, 0.0003, 0.8044, 0.0036, 1.4902, 0.0025, 0.1425, 0.0003, 0.2587, 0.0039, 20.1369, 0.0811, 1.2903, 0.0119, 3.3198, 0.0182, 1.7607, 0.0080, 0.1521, 0.0002, 0.4969, 0.0036, 24.0781, 0.1145, 1.3241, 0.0021, 6.6531, 0.0005 0.7.0a1, 27/08/2023 01:23:48, 1.0094, 0.0030, 0.0955, 0.0002, 0.1660, 0.0003, 10.0515, 0.1271, 0.5152, 0.0038, 1.6281, 0.1728, 0.4916, 0.0152, 0.0772, 0.0003, 0.1002, 0.0004, 4.5604, 0.0592, 0.3398, 0.0057, 0.7978, 0.0034, 1.5030, 0.0145, 0.1439, 0.0036, 0.2601, 0.0077, 20.6049, 0.3711, 1.2741, 0.0087, 3.3549, 0.0756, 1.7522, 0.0166, 0.1538, 0.0012, 0.4985, 0.0037, 23.7129, 0.0492, 1.3207, 0.0154, 6.6875, 0.0549 -0.7.0, 28/08/2023 08:29:01, 1.0224, 0.0008, 0.0986, 0.0006, 0.1744, 0.0018, 10.0994, 0.1099, 0.5046, 0.0014, 1.5733, 0.0027, 0.4890, 0.0005, 0.0800, 0.0001, 0.0976, 0.0003, 4.5293, 0.0052, 0.3316, 0.0009, 0.7844, 0.0014, 1.4739, 0.0026, 0.1394, 0.0003, 0.2633, 0.0004, 20.0847, 0.0148, 1.2127, 0.0008, 3.4104, 0.0069, 1.7507, 0.0028, 0.1507, 0.0005, 0.4917, 0.0128, 23.9211, 0.1061, 1.2659, 0.0059, 6.4690, 0.0317 diff --git a/Performance/cyrk_performance-RK23.csv b/Performance/cyrk_performance-RK23.csv index d9fa032..28256c1 100644 --- a/Performance/cyrk_performance-RK23.csv +++ b/Performance/cyrk_performance-RK23.csv @@ -13,5 +13,3 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 18:59:35, 58.6676, 93.5182, 0.3900, 0.0126, 0.9633, 0.0266, 45.5975, 1.1797, 3.1403, 0.0138, 10.5973, 0.2912, 55.7416, 91.5188, 0.3192, 0.0082, 0.6436, 0.0150, 28.7644, 0.9448, 2.6510, 0.0471, 6.7978, 0.2528, 56.1384, 88.3532, 0.4677, 0.0044, 1.0281, 0.0150, 85.8300, 3.9745, 7.5308, 0.1815, 23.5595, 0.4995, 58.8041, 91.3233, 0.5090, 0.0065, 1386.0843, 2397.3464, 106.3878, 1.1220, 8.5241, 0.3540, 38.2326, 0.7181 0.7.0.dev7, 27/08/2023 01:11:14, 4.8113, 0.1391, 0.3115, 0.0004, 0.8552, 0.0036, 45.1068, 0.6880, 2.6107, 0.0100, 9.8739, 0.6100, 2.8775, 0.0067, 0.2522, 0.0009, 0.6097, 0.0030, 28.9372, 0.8937, 2.0232, 0.0052, 6.1300, 0.1653, 4.9043, 0.0304, 0.3955, 0.0062, 0.9908, 0.0052, 82.1498, 1.0284, 5.9321, 0.0159, 20.9002, 0.4163, 5.8702, 0.1321, 0.4181, 0.0009, 1183.0684, 2046.0616, 100.8534, 0.6015, 8.7392, 0.1784, 35.7355, 0.3580 0.7.0a1, 27/08/2023 01:21:31, 4.5590, 0.0620, 0.3149, 0.0066, 0.8748, 0.0195, 43.6144, 0.1123, 2.6232, 0.0313, 9.2402, 0.1733, 2.8469, 0.0036, 0.2520, 0.0032, 0.6048, 0.0044, 27.8211, 0.1951, 2.0357, 0.0363, 6.3501, 0.0787, 4.8713, 0.0372, 0.3889, 0.0021, 1.0088, 0.0276, 81.8194, 0.1423, 5.8619, 0.0337, 20.3528, 0.1749, 5.7740, 0.0594, 0.4174, 0.0006, 1139.2328, 1970.1475, 100.0822, 0.6212, 7.8009, 0.0816, 36.2940, 1.2287 -0.7.0, 28/08/2023 08:23:02, 4.5637, 0.0104, 0.2957, 0.0003, 0.8637, 0.0096, 44.2261, 0.0394, 2.4364, 0.0053, 8.9717, 0.1593, 2.8994, 0.0131, 0.2411, 0.0004, 0.6071, 0.0010, 28.0574, 0.0866, 1.9065, 0.0005, 6.0870, 0.1789, 4.8884, 0.0142, 0.3639, 0.0002, 0.9789, 0.0052, 82.2106, 0.3076, 5.4401, 0.0197, 21.1634, 0.5805, 5.7788, 0.0064, 0.3938, 0.0038, 1250.9109, 2163.6112, 100.3653, 0.4706, 6.0790, 0.0704, 35.0585, 0.4175 -0.7.0, 28/08/2023 08:26:42, 4.5843, 0.0213, 0.2983, 0.0025, 0.8635, 0.0071, 44.2802, 0.0616, 2.4359, 0.0088, 9.1258, 0.2414, 2.8860, 0.0064, 0.2425, 0.0010, 0.6111, 0.0018, 28.0934, 0.0882, 1.9215, 0.0136, 6.1117, 0.1291, 4.8439, 0.0115, 0.3643, 0.0015, 0.9899, 0.0117, 81.7951, 0.0920, 5.4709, 0.0957, 20.9155, 0.4702, 5.7952, 0.0131, 0.3927, 0.0007, 1190.7543, 2059.3947, 100.5784, 0.2858, 7.8631, 0.0435, 35.0543, 0.2799 diff --git a/Performance/cyrk_performance-RK45.csv b/Performance/cyrk_performance-RK45.csv index b168d58..b5330b5 100644 --- a/Performance/cyrk_performance-RK45.csv +++ b/Performance/cyrk_performance-RK45.csv @@ -13,4 +13,3 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 19:01:00, 1.3026, 0.0252, 0.1270, 0.0003, 0.2370, 0.0077, 13.1688, 0.2770, 0.7357, 0.0104, 2.0835, 0.0676, 0.9441, 0.0522, 0.1292, 0.0056, 0.1934, 0.0100, 8.5366, 0.0426, 0.7844, 0.0494, 1.6277, 0.0193, 1.7297, 0.0254, 0.1885, 0.0038, 0.3590, 0.0067, 25.4444, 0.1438, 2.2064, 0.1480, 5.1500, 0.1446, 2.1667, 0.1251, 0.2131, 0.0095, 0.6540, 0.0405, 32.0478, 1.1447, 2.0710, 0.0607, 9.6978, 0.4326 0.7.0.dev7, 27/08/2023 01:12:37, 1.2641, 0.0062, 0.1031, 0.0019, 0.2173, 0.0053, 12.2412, 0.0395, 0.5690, 0.0008, 1.9169, 0.0142, 0.8811, 0.0057, 0.0958, 0.0004, 0.1712, 0.0007, 8.4969, 0.0834, 0.5321, 0.0026, 1.4975, 0.0028, 1.6713, 0.0148, 0.1467, 0.0011, 0.3058, 0.0012, 26.5646, 1.9359, 1.5104, 0.0006, 4.2413, 0.0166, 2.0245, 0.0408, 0.1609, 0.0097, 0.5685, 0.0021, 29.3066, 0.1643, 1.5506, 0.0036, 8.2832, 0.0310 0.7.0a1, 27/08/2023 01:22:52, 1.2283, 0.0057, 0.1010, 0.0001, 0.2117, 0.0010, 11.9199, 0.0385, 0.5796, 0.0084, 1.8945, 0.0104, 0.8679, 0.0094, 0.0958, 0.0005, 0.1726, 0.0033, 8.2955, 0.0659, 0.5338, 0.0010, 1.4996, 0.0135, 1.6907, 0.0290, 0.1458, 0.0004, 0.3058, 0.0036, 24.5503, 0.1658, 1.5368, 0.0370, 4.3002, 0.1004, 2.0103, 0.0434, 0.1557, 0.0013, 0.5757, 0.0059, 28.7147, 0.0734, 1.5439, 0.0018, 8.2652, 0.0295 -0.7.0, 28/08/2023 08:28:05, 1.2537, 0.0035, 0.1024, 0.0002, 0.2137, 0.0034, 12.0294, 0.0153, 0.5540, 0.0004, 1.9540, 0.0390, 0.8906, 0.0117, 0.0988, 0.0001, 0.1713, 0.0016, 8.3772, 0.0180, 0.5321, 0.0004, 1.4879, 0.0026, 1.6809, 0.0168, 0.1395, 0.0004, 0.3041, 0.0006, 24.5483, 0.1731, 1.3808, 0.0023, 4.2016, 0.0188, 1.9830, 0.0024, 0.1512, 0.0002, 0.5836, 0.0124, 29.2957, 0.0392, 1.4399, 0.0028, 8.1456, 0.0258 diff --git a/README.md b/README.md index 414f94b..723c0a7 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ from CyRK.cy.cysolver cimport CySolver cdef class MyCyRKDiffeq(CySolver): - cdef void diffeq(self) noexcept nogil: + cdef void diffeq(self) nogil: # REVERT noexcept nogil: # Unpack dependent variables using the `self.y_new_view` variable. # In this example we have a system of two dependent variables, but any number can be used. @@ -190,10 +190,10 @@ MyCyRKDiffeqInst = MyCyRKDiffeq(time_span, initial_conds, args=(0.01, 0.02), rk_ # Once complete, you can access the results via... MyCyRKDiffeqInst.success # True / False MyCyRKDiffeqInst.message # Note about integration -MyCyRKDiffeqInst.solution_t # Time domain -MyCyRKDiffeqInst.solution_y # y dependent variables -MyCyRKDiffeqInst.solution_extra # Extra output that was captured during integration. -# See Documentation/Extra Output.md for more information on `solution_extra` +MyCyRKDiffeqInst.t # Time domain +MyCyRKDiffeqInst.y # y dependent variables +MyCyRKDiffeqInst.extra # Extra output that was captured during integration. +# See Documentation/Extra Output.md for more information on `extra` ``` ## Optional Arguments diff --git a/Tests/C_Cython_Tests/test_a_cython.py b/Tests/C_Cython_Tests/test_a_cython.py index 5579978..6fd8da4 100644 --- a/Tests/C_Cython_Tests/test_a_cython.py +++ b/Tests/C_Cython_Tests/test_a_cython.py @@ -108,16 +108,16 @@ def test_basic_integration_CySolverTester(use_atol_array, use_rtol_array, rk_met rk_method=rk_method, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -169,16 +169,16 @@ def test_different_tols_CySolverTester(rk_method, complex_valued): rtol=1.0e-10, atol=1.0e-12, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -187,7 +187,7 @@ def test_different_tols_CySolverTester(rk_method, complex_valued): @pytest.mark.parametrize('complex_valued', (True, False)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_max_step_size(rk_method, complex_valued): +def test_max_step(rk_method, complex_valued): """Check that the cython function solver is able to run with different maximum step size""" if complex_valued: @@ -196,7 +196,7 @@ def test_max_step_size(rk_method, complex_valued): initial_conds_to_use = initial_conds time_domain, y_results, success, message = \ - cyrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step_size=time_span[1] / 2.) + cyrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step=time_span[1] / 2.) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -217,7 +217,7 @@ def test_max_step_size(rk_method, complex_valued): @pytest.mark.parametrize('complex_valued', (False,)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_max_step_size_CySolverTester(rk_method, complex_valued): +def test_max_step_CySolverTester(rk_method, complex_valued): """Check that the cython class solver is able to run with different maximum step size""" if complex_valued: @@ -225,19 +225,19 @@ def test_max_step_size_CySolverTester(rk_method, complex_valued): else: initial_conds_to_use = initial_conds - CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, max_step_size=time_span[1] / 2., auto_solve=True) + CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, max_step=time_span[1] / 2., auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -287,16 +287,16 @@ def test_first_step_CySolverTester(rk_method, complex_valued): CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, first_step=0.01, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -346,16 +346,16 @@ def test_large_end_value_CySolverTester(rk_method, complex_valued): CySolverTesterInst = CySolverTester(time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -410,16 +410,16 @@ def test_teval_CySolverTester(rk_method, complex_valued): CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, t_eval=t_eval, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -469,16 +469,16 @@ def test_args_CySolverTester(rk_method, complex_valued): CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=rk_method, args=(0.01, 0.02), auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -560,28 +560,28 @@ def correct_answer(t, c1_, c2_): # CyRK.CySolver CySolverAccuracyTestInst = CySolverAccuracyTest(time_span_, y0, rk_method=rk_method, rtol=1.0e-8, atol=1.0e-9, auto_solve=True) - real_answer = correct_answer(CySolverAccuracyTestInst.solution_t, c1, c2) + real_answer = correct_answer(CySolverAccuracyTestInst.t, c1, c2) if rk_method == 0: - assert np.allclose(CySolverAccuracyTestInst.solution_y, real_answer, rtol=1.0e-3, atol=1.0e-6) + assert np.allclose(CySolverAccuracyTestInst.y, real_answer, rtol=1.0e-3, atol=1.0e-6) elif rk_method == 1: - assert np.allclose(CySolverAccuracyTestInst.solution_y, real_answer, rtol=1.0e-4, atol=1.0e-7) + assert np.allclose(CySolverAccuracyTestInst.y, real_answer, rtol=1.0e-4, atol=1.0e-7) else: - assert np.allclose(CySolverAccuracyTestInst.solution_y, real_answer, rtol=1.0e-5, atol=1.0e-8) + assert np.allclose(CySolverAccuracyTestInst.y, real_answer, rtol=1.0e-5, atol=1.0e-8) # Check the accuracy of the results # import matplotlib.pyplot as plt # fig, ax = plt.subplots() - # ax.plot(CySolverAccuracyTestInst.solution_t, CySolverAccuracyTestInst.solution_y[0], 'r', label='CyRK') - # ax.plot(CySolverAccuracyTestInst.solution_t, CySolverAccuracyTestInst.solution_y[1], 'r:') - # ax.plot(CySolverAccuracyTestInst.solution_t, real_answer[0], 'b', label='Analytic') - # ax.plot(CySolverAccuracyTestInst.solution_t, real_answer[1], 'b:') + # ax.plot(CySolverAccuracyTestInst.t, CySolverAccuracyTestInst.y[0], 'r', label='CyRK') + # ax.plot(CySolverAccuracyTestInst.t, CySolverAccuracyTestInst.y[1], 'r:') + # ax.plot(CySolverAccuracyTestInst.t, real_answer[0], 'b', label='Analytic') + # ax.plot(CySolverAccuracyTestInst.t, real_answer[1], 'b:') # plt.show() @pytest.mark.parametrize('complex_valued', (True, False)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_maxsteps(rk_method, complex_valued): - """Check that the cython function cyrk_ode can use max_steps argument """ +def test_max_num_steps(rk_method, complex_valued): + """Check that the cython function cyrk_ode can use max_num_steps argument """ if complex_valued: initial_conds_to_use = initial_conds_complex @@ -590,7 +590,7 @@ def test_maxsteps(rk_method, complex_valued): # First test a number of max steps which is fine. time_domain, y_results, success, message = \ - cyrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=1000000) + cyrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_num_steps=1000000) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -611,15 +611,15 @@ def test_maxsteps(rk_method, complex_valued): # Now test an insufficient number of steps time_domain, y_results, success, message = \ - cyrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=4) + cyrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_num_steps=4) assert not success assert message == "Maximum number of steps (set by user) exceeded during integration." @pytest.mark.parametrize('complex_valued', (False,)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_maxsteps_CySolverTester(rk_method, complex_valued): - """Check that the cython class solver is able to run using the DOP853 method. Using a larger ending time value """ +def test_max_num_steps_CySolverTester(rk_method, complex_valued): + """Check that the cython class solver correctly uses the max_num_steps argument. """ if complex_valued: initial_conds_to_use = initial_conds_complex @@ -627,19 +627,19 @@ def test_maxsteps_CySolverTester(rk_method, complex_valued): initial_conds_to_use = initial_conds # First test a number of max steps which is fine. - CySolverTesterInst = CySolverTester(time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_steps=1000000) + CySolverTesterInst = CySolverTester(time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_num_steps=1000000) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool @@ -648,7 +648,7 @@ def test_maxsteps_CySolverTester(rk_method, complex_valued): # Now test an insufficient number of steps CySolverTesterInst = CySolverTester( - time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_steps=4) + time_span_large, initial_conds_to_use, rk_method=rk_method, auto_solve=True, max_num_steps=4) assert not CySolverTesterInst.success assert CySolverTesterInst.status == -2 diff --git a/Tests/C_Cython_Tests/test_b_cy_extra_output.py b/Tests/C_Cython_Tests/test_b_cy_extra_output.py index b3b2d35..3149996 100644 --- a/Tests/C_Cython_Tests/test_b_cy_extra_output.py +++ b/Tests/C_Cython_Tests/test_b_cy_extra_output.py @@ -51,17 +51,17 @@ def test_extra_output_integration_CySolver(): CySolverExtraTestInst = CySolverExtraTest(time_span, initial_conds_float, capture_extra=True, num_extra=2, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverExtraTestInst.solution_t) == np.ndarray - assert CySolverExtraTestInst.solution_t.dtype == np.float64 - assert CySolverExtraTestInst.solution_y.dtype == np.float64 - assert CySolverExtraTestInst.solution_extra.dtype == np.float64 - assert CySolverExtraTestInst.solution_t.size > 1 - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_y[0].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_y[1].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_extra[0].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_extra[1].size - assert CySolverExtraTestInst.solution_y.shape[0] == 2 - assert CySolverExtraTestInst.solution_extra.shape[0] == 2 + assert type(CySolverExtraTestInst.t) == np.ndarray + assert CySolverExtraTestInst.t.dtype == np.float64 + assert CySolverExtraTestInst.y.dtype == np.float64 + assert CySolverExtraTestInst.extra.dtype == np.float64 + assert CySolverExtraTestInst.t.size > 1 + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.y[0].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.y[1].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.extra[0].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.extra[1].size + assert CySolverExtraTestInst.y.shape[0] == 2 + assert CySolverExtraTestInst.extra.shape[0] == 2 # Check that the other output makes sense assert type(CySolverExtraTestInst.success) == bool @@ -108,17 +108,17 @@ def test_extra_output_integration_teval_no_extra_interpolation_CySolver(): capture_extra=True, num_extra=2, interpolate_extra=False, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverExtraTestInst.solution_t) == np.ndarray - assert CySolverExtraTestInst.solution_t.dtype == np.float64 - assert CySolverExtraTestInst.solution_y.dtype == np.float64 - assert CySolverExtraTestInst.solution_extra.dtype == np.float64 - assert CySolverExtraTestInst.solution_t.size > 1 - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_y[0].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_y[1].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_extra[0].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_extra[1].size - assert CySolverExtraTestInst.solution_y.shape[0] == 2 - assert CySolverExtraTestInst.solution_extra.shape[0] == 2 + assert type(CySolverExtraTestInst.t) == np.ndarray + assert CySolverExtraTestInst.t.dtype == np.float64 + assert CySolverExtraTestInst.y.dtype == np.float64 + assert CySolverExtraTestInst.extra.dtype == np.float64 + assert CySolverExtraTestInst.t.size > 1 + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.y[0].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.y[1].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.extra[0].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.extra[1].size + assert CySolverExtraTestInst.y.shape[0] == 2 + assert CySolverExtraTestInst.extra.shape[0] == 2 # Check that the other output makes sense assert type(CySolverExtraTestInst.success) == bool @@ -165,17 +165,17 @@ def test_extra_output_integration_teval_with_extra_interpolation_CySolver(): capture_extra=True, num_extra=2, interpolate_extra=True, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverExtraTestInst.solution_t) == np.ndarray - assert CySolverExtraTestInst.solution_t.dtype == np.float64 - assert CySolverExtraTestInst.solution_y.dtype == np.float64 - assert CySolverExtraTestInst.solution_extra.dtype == np.float64 - assert CySolverExtraTestInst.solution_t.size > 1 - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_y[0].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_y[1].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_extra[0].size - assert CySolverExtraTestInst.solution_t.size == CySolverExtraTestInst.solution_extra[1].size - assert CySolverExtraTestInst.solution_y.shape[0] == 2 - assert CySolverExtraTestInst.solution_extra.shape[0] == 2 + assert type(CySolverExtraTestInst.t) == np.ndarray + assert CySolverExtraTestInst.t.dtype == np.float64 + assert CySolverExtraTestInst.y.dtype == np.float64 + assert CySolverExtraTestInst.extra.dtype == np.float64 + assert CySolverExtraTestInst.t.size > 1 + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.y[0].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.y[1].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.extra[0].size + assert CySolverExtraTestInst.t.size == CySolverExtraTestInst.extra[1].size + assert CySolverExtraTestInst.y.shape[0] == 2 + assert CySolverExtraTestInst.extra.shape[0] == 2 # Check that the other output makes sense assert type(CySolverExtraTestInst.success) == bool diff --git a/Tests/C_Cython_Tests/test_c_cy_readonly.py b/Tests/C_Cython_Tests/test_c_cy_readonly.py index 0fdaa99..2db376a 100644 --- a/Tests/C_Cython_Tests/test_c_cy_readonly.py +++ b/Tests/C_Cython_Tests/test_c_cy_readonly.py @@ -71,16 +71,16 @@ def test_readonly_y0_CySolver(complex_valued): CySolverTesterInst = CySolverTester(time_span, initial_conds_to_use, rk_method=1, auto_solve=True) # Check that the ndarrays make sense - assert type(CySolverTesterInst.solution_t) == np.ndarray - assert CySolverTesterInst.solution_t.dtype == np.float64 + assert type(CySolverTesterInst.t) == np.ndarray + assert CySolverTesterInst.t.dtype == np.float64 if complex_valued: - assert CySolverTesterInst.solution_y.dtype == np.complex128 + assert CySolverTesterInst.y.dtype == np.complex128 else: - assert CySolverTesterInst.solution_y.dtype == np.float64 - assert CySolverTesterInst.solution_t.size > 1 - assert CySolverTesterInst.solution_t.size == CySolverTesterInst.solution_y[0].size - assert len(CySolverTesterInst.solution_y.shape) == 2 - assert CySolverTesterInst.solution_y[0].size == CySolverTesterInst.solution_y[1].size + assert CySolverTesterInst.y.dtype == np.float64 + assert CySolverTesterInst.t.size > 1 + assert CySolverTesterInst.t.size == CySolverTesterInst.y[0].size + assert len(CySolverTesterInst.y.shape) == 2 + assert CySolverTesterInst.y[0].size == CySolverTesterInst.y[1].size # Check that the other output makes sense assert type(CySolverTesterInst.success) == bool diff --git a/Tests/C_Cython_Tests/test_d_cysolver_resolve.py b/Tests/C_Cython_Tests/test_d_cysolver_resolve.py index 3636a34..9dd7ef3 100644 --- a/Tests/C_Cython_Tests/test_d_cysolver_resolve.py +++ b/Tests/C_Cython_Tests/test_d_cysolver_resolve.py @@ -26,20 +26,20 @@ def test_CySolverTester_resolve(rk_method, complex_valued): # Solve once CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_1_t = np.copy(CySolverTesterInst.solution_t) - solution_1_y = np.copy(CySolverTesterInst.solution_y) + solution_1_t = np.copy(CySolverTesterInst.t) + solution_1_y = np.copy(CySolverTesterInst.y) # Solve twice CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_2_t = np.copy(CySolverTesterInst.solution_t) - solution_2_y = np.copy(CySolverTesterInst.solution_y) + solution_2_t = np.copy(CySolverTesterInst.t) + solution_2_y = np.copy(CySolverTesterInst.y) # Solve thrice CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_3_t = np.copy(CySolverTesterInst.solution_t) - solution_3_y = np.copy(CySolverTesterInst.solution_y) + solution_3_t = np.copy(CySolverTesterInst.t) + solution_3_y = np.copy(CySolverTesterInst.y) # Check outputs # 1 and 2 diff --git a/Tests/C_Cython_Tests/test_e_cysolver_change_param.py b/Tests/C_Cython_Tests/test_e_cysolver_change_param.py index 99583cf..69441c5 100644 --- a/Tests/C_Cython_Tests/test_e_cysolver_change_param.py +++ b/Tests/C_Cython_Tests/test_e_cysolver_change_param.py @@ -30,8 +30,8 @@ def test_CySolverTester_change_param(rk_method, complex_valued): # Solve once CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_1_t = np.copy(CySolverTesterInst.solution_t) - solution_1_y = np.copy(CySolverTesterInst.solution_y) + solution_1_t = np.copy(CySolverTesterInst.t) + solution_1_y = np.copy(CySolverTesterInst.y) assert solution_1_t[0] == 0. assert solution_1_t[-1] == 10. @@ -39,8 +39,8 @@ def test_CySolverTester_change_param(rk_method, complex_valued): CySolverTesterInst.change_t_span((0., 1.)) CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_2_t = np.copy(CySolverTesterInst.solution_t) - solution_2_y = np.copy(CySolverTesterInst.solution_y) + solution_2_t = np.copy(CySolverTesterInst.t) + solution_2_y = np.copy(CySolverTesterInst.y) assert solution_2_t[0] == 0. assert solution_2_t[-1] == 1. @@ -48,8 +48,8 @@ def test_CySolverTester_change_param(rk_method, complex_valued): CySolverTesterInst.change_parameters(rtol=1.0e-11, atol=1.0e-12) CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_3_t = np.copy(CySolverTesterInst.solution_t) - solution_3_y = np.copy(CySolverTesterInst.solution_y) + solution_3_t = np.copy(CySolverTesterInst.t) + solution_3_y = np.copy(CySolverTesterInst.y) assert solution_3_t[0] == 0. assert solution_3_t[-1] == 1. # Due to the lower tolerances, we expect this solution to be larger than the previous ones. @@ -60,8 +60,8 @@ def test_CySolverTester_change_param(rk_method, complex_valued): CySolverTesterInst.change_t_eval(t_eval) CySolverTesterInst.solve() assert CySolverTesterInst.success - solution_4_t = np.copy(CySolverTesterInst.solution_t) - solution_4_y = np.copy(CySolverTesterInst.solution_y) + solution_4_t = np.copy(CySolverTesterInst.t) + solution_4_y = np.copy(CySolverTesterInst.y) assert solution_4_t[0] == 0. assert solution_4_t[-1] == 0.5 assert solution_4_t.size == 10 diff --git a/Tests/Cython Class Experiments.ipynb b/Tests/Cython Class Experiments.ipynb deleted file mode 100644 index 8cba0a4..0000000 --- a/Tests/Cython Class Experiments.ipynb +++ /dev/null @@ -1,11462 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "968743f3", - "metadata": {}, - "outputs": [], - "source": [ - "import cython\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from numba import njit\n", - "from CyRK import nb2cy, cyrk_ode, nbrk_ode" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "5c7be204", - "metadata": {}, - "outputs": [], - "source": [ - "RTOL = 1.0e-7\n", - "ATOL = 1.0e-8\n", - "\n", - "pendulum_y0 = np.asarray((0.01, 0.), dtype=np.float64)\n", - "pendulum_args = (1., 1., 9.81) # length [m], mass [kg], acceleration due to gravity [m s-2]\n", - "pendulum_time_span_1 = (0., 10.)\n", - "pendulum_time_span_2 = (0., 100.)\n", - "\n", - "pendulum_time_span_10 = (0., 10000.)\n", - "\n", - "@njit(cache=True)\n", - "def pendulum_nb(t, y, l, m, g):\n", - "\n", - " # External torque\n", - " torque = 0.1 * np.sin(t)\n", - "\n", - " y0 = y[0] # Angular deflection [rad]\n", - " y1 = y[1] # Angular velocity [rad s-1]\n", - " dy = np.empty_like(y)\n", - " dy[0] = y1\n", - " dy[1] = (-3. * g / (2. * l)) * np.sin(y0) + (3. / (m * l**2)) * torque\n", - " return dy\n", - "\n", - "\n", - "pendulum_cy = nb2cy(pendulum_nb, use_njit=True, cache_njit=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "59a5b145", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Working on Cython (function) integration...\n", - "182\n", - "Done.\n", - "Working on Numba integration...\n", - "Done.\n" - ] - } - ], - "source": [ - "print('Working on Cython (function) integration...')\n", - "t_cy, y_cy, _, _ = cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print(t_cy.size)\n", - "print('Done.')\n", - "print('Working on Numba integration...')\n", - "t_nb, y_nb, _, _ = nbrk_ode(pendulum_nb, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print('Done.')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "8c5e71aa", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Performance\n", - "Cython (function)\n", - "1.29 ms ± 39.6 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", - "\n", - "Numba\n", - "298 µs ± 68.4 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "print('Performance')\n", - "print('Cython (function)')\n", - "# v0.5.3: 1.19ms, 1.2ms, 1.2ms\n", - "# v0.6.2: 1.02ms, 1.02ms\n", - "\n", - "%timeit cyrk_ode(pendulum_cy, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "\n", - "print('\\nNumba')\n", - "# v0.5.3: 199us, 201us, 200us\n", - "# v0.6.2: 187us, 188us\n", - "\n", - "%timeit nbrk_ode(pendulum_nb, pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "f1f28e08", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig_cy, ax_cy = plt.subplots()\n", - "ax_cy.plot(t_cy, y_cy[0], 'r')\n", - "ax_cy.plot(t_cy, y_cy[1], 'b')\n", - "ax_cy.set(title='Cython (function)')\n", - "fig_nb, ax_nb = plt.subplots()\n", - "ax_nb.plot(t_nb, y_nb[0], 'r')\n", - "ax_nb.plot(t_nb, y_nb[1], 'b')\n", - "ax_nb.set(title='Numba')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "aa05194e", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext Cython" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "2b171d90", - "metadata": {}, - "outputs": [], - "source": [ - "# cython: linetrace=True\n", - "# cython: binding=True\n", - "# distutils: define_macros=CYTHON_TRACE_NOGIL=1" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "988b829a", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Content of stdout:\n", - "_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cpp\r\n", - "C:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cpp(44377): warning C4551: function call missing argument list\r\n", - " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cp311-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.cp311-win_amd64.exp\r\n", - "Generating code\r\n", - "Finished generating code" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - " \n", - " Cython: _cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.pyx\n", - " \n", - "\n", - "\n", - "

Generated by Cython 3.0.0

\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", - "

\n", - "
+0001: # distutils: language = c++
\n", - "
  __pyx_t_19 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_19);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_19) < 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;\n",
-       "
 0002: # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False
\n", - "
 0003: 
\n", - "
 0004: import cython
\n", - "
 0005: cimport openmp
\n", - "
 0006: cimport cython
\n", - "
+0007: import sys
\n", - "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_sys, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_7) < 0) __PYX_ERR(0, 7, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
+0008: import numpy as np
\n", - "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 8, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 0009: cimport numpy as np
\n", - "
+0010: np.import_array()
\n", - "
  __pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error)\n",
-       "
 0011: from libcpp cimport bool as bool_cpp_t
\n", - "
 0012: from libc.math cimport sqrt, fabs, nextafter, fmax, fmin, isnan, NAN, pow
\n", - "
 0013: 
\n", - "
 0014: import cython.parallel as cp
\n", - "
 0015: from cython.parallel import parallel, prange
\n", - "
 0016: 
\n", - "
 0017: 
\n", - "
 0018: from CyRK.array.interp cimport interp_array
\n", - "
 0019: from CyRK.rk.rk cimport (
\n", - "
 0020:     RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,
\n", - "
 0021:     RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,
\n", - "
 0022:     RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,
\n", - "
 0023:     RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,
\n", - "
 0024:     DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,
\n", - "
 0025:     DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)
\n", - "
 0026: 
\n", - "
 0027: # # Integration Constants
\n", - "
 0028: # Multiply steps computed from asymptotic behaviour of errors by this.
\n", - "
+0029: cdef double SAFETY = 0.9
\n", - "
  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_SAFETY = 0.9;\n",
-       "
+0030: cdef double MIN_FACTOR = 0.2  # Minimum allowed decrease in a step size.
\n", - "
  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MIN_FACTOR = 0.2;\n",
-       "
+0031: cdef double MAX_FACTOR = 10.  # Maximum allowed increase in a step size.
\n", - "
  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_FACTOR = 10.;\n",
-       "
+0032: cdef double MAX_STEP = np.inf
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 32, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_inf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_STEP = __pyx_t_10;\n",
-       "
+0033: cdef double INF = np.inf
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_inf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 33, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF = __pyx_t_10;\n",
-       "
+0034: cdef double EPS = np.finfo(np.float64).eps
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_finfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_eps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS = __pyx_t_10;\n",
-       "
+0035: cdef double EPS_10 = EPS * 10.
\n", - "
  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_10 = (__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS * 10.);\n",
-       "
+0036: cdef double EPS_100 = EPS * 100.
\n", - "
  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100 = (__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS * 100.);\n",
-       "
+0037: cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize)
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sys); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_maxsize); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 37, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyNumber_Int(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 37, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_INT_SIZE = __pyx_t_11;\n",
-       "
 0038: 
\n", - "
+0039: cdef (double, double) EMPTY_T_SPAN = (NAN, NAN)
\n", - "
  __pyx_t_12.f0 = NAN;\n",
-       "  __pyx_t_12.f1 = NAN;\n",
-       "  __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EMPTY_T_SPAN = __pyx_t_12;\n",
-       "/* … */\n",
-       "struct __pyx_ctuple_double__and_double {\n",
-       "  double f0;\n",
-       "  double f1;\n",
-       "};\n",
-       "
 0040: 
\n", - "
+0041: cdef class CySolver:
\n", - "
struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver {\n",
-       "  PyObject_HEAD\n",
-       "  struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_vtab;\n",
-       "  double t_new;\n",
-       "  double t_old;\n",
-       "  Py_ssize_t len_t;\n",
-       "  __Pyx_memviewslice y_new_view;\n",
-       "  __Pyx_memviewslice y_old_view;\n",
-       "  __Pyx_memviewslice dy_new_view;\n",
-       "  __Pyx_memviewslice dy_old_view;\n",
-       "  __Pyx_memviewslice extra_output_view;\n",
-       "  __Pyx_memviewslice extra_output_init_view;\n",
-       "  Py_ssize_t y_size;\n",
-       "  double y_size_dbl;\n",
-       "  double y_size_sqrt;\n",
-       "  __Pyx_memviewslice y0_view;\n",
-       "  unsigned char rk_method;\n",
-       "  Py_ssize_t rk_order;\n",
-       "  Py_ssize_t error_order;\n",
-       "  Py_ssize_t rk_n_stages;\n",
-       "  Py_ssize_t rk_n_stages_plus1;\n",
-       "  Py_ssize_t rk_n_stages_extended;\n",
-       "  double error_expo;\n",
-       "  Py_ssize_t len_C;\n",
-       "  __Pyx_memviewslice B_view;\n",
-       "  __Pyx_memviewslice E_view;\n",
-       "  __Pyx_memviewslice E3_view;\n",
-       "  __Pyx_memviewslice E5_view;\n",
-       "  __Pyx_memviewslice C_view;\n",
-       "  __Pyx_memviewslice A_view;\n",
-       "  __Pyx_memviewslice K_view;\n",
-       "  __Pyx_memviewslice K_T_view;\n",
-       "  char status;\n",
-       "  PyObject *message;\n",
-       "  bool success;\n",
-       "  double t_start;\n",
-       "  double t_end;\n",
-       "  double t_delta;\n",
-       "  double t_delta_abs;\n",
-       "  double direction_inf;\n",
-       "  bool direction_flag;\n",
-       "  double rtol;\n",
-       "  double atol;\n",
-       "  double step_size;\n",
-       "  double max_step_size;\n",
-       "  double first_step;\n",
-       "  Py_ssize_t expected_size;\n",
-       "  Py_ssize_t num_concats;\n",
-       "  Py_ssize_t max_steps;\n",
-       "  bool use_max_steps;\n",
-       "  bool recalc_firststep;\n",
-       "  Py_ssize_t num_args;\n",
-       "  __Pyx_memviewslice arg_array_view;\n",
-       "  bool capture_extra;\n",
-       "  Py_ssize_t num_extra;\n",
-       "  bool run_interpolation;\n",
-       "  bool interpolate_extra;\n",
-       "  Py_ssize_t len_t_eval;\n",
-       "  __Pyx_memviewslice t_eval_view;\n",
-       "  __Pyx_memviewslice solution_y_view;\n",
-       "  __Pyx_memviewslice solution_extra_view;\n",
-       "  __Pyx_memviewslice solution_t_view;\n",
-       "};\n",
-       "/* … */\n",
-       "struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver {\n",
-       "  void (*reset_state)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, int __pyx_skip_dispatch);\n",
-       "  double (*calc_first_step)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *);\n",
-       "  void (*rk_step)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *);\n",
-       "  void (*solve)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_solve *__pyx_optional_args);\n",
-       "  void (*_solve)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver__solve *__pyx_optional_args);\n",
-       "  void (*interpolate)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *);\n",
-       "  void (*change_t_span)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, __pyx_ctuple_double__and_double, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_span *__pyx_optional_args);\n",
-       "  void (*change_y0)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, __Pyx_memviewslice, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0 *__pyx_optional_args);\n",
-       "  void (*change_args)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args *__pyx_optional_args);\n",
-       "  void (*change_tols)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols *__pyx_optional_args);\n",
-       "  void (*change_max_step_size)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, double, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size *__pyx_optional_args);\n",
-       "  void (*change_first_step)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, double, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step *__pyx_optional_args);\n",
-       "  void (*change_t_eval)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, __Pyx_memviewslice, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval *__pyx_optional_args);\n",
-       "  void (*change_parameters)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters *__pyx_optional_args);\n",
-       "  void (*update_constants)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *);\n",
-       "  void (*diffeq)(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *);\n",
-       "};\n",
-       "static struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver;\n",
-       "\n",
-       "
 0042: 
\n", - "
 0043:     # Class attributes    
\n", - "
 0044:     # -- Live variables
\n", - "
 0045:     cdef double t_new, t_old
\n", - "
 0046:     cdef Py_ssize_t len_t
\n", - "
 0047:     cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view
\n", - "
 0048:     cdef double[::1] extra_output_view, extra_output_init_view
\n", - "
 0049: 
\n", - "
 0050:     # -- Dependent (y0) variable information
\n", - "
 0051:     cdef Py_ssize_t y_size
\n", - "
 0052:     cdef double y_size_dbl, y_size_sqrt
\n", - "
 0053:     cdef const double[::1] y0_view
\n", - "
 0054: 
\n", - "
 0055:     # -- RK method information
\n", - "
 0056:     cdef unsigned char rk_method
\n", - "
 0057:     cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended
\n", - "
 0058:     cdef double error_expo
\n", - "
 0059:     cdef Py_ssize_t len_C
\n", - "
 0060:     cdef double[::1] B_view, E_view, E3_view, E5_view, C_view
\n", - "
 0061:     cdef double[:, ::1] A_view, K_view
\n", - "
 0062:     cdef double[::1, :] K_T_view
\n", - "
 0063: 
\n", - "
 0064:     # -- Integration information
\n", - "
+0065:     cdef public char status
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_char(__pyx_v_self->status); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __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_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.status.__get__\", __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",
-       "/* Python wrapper */\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__set__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status_2__set__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), ((PyObject *)__pyx_v_value));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static int __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6status_2__set__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_value) {\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__set__\", 0);\n",
-       "  __pyx_t_1 = __Pyx_PyInt_As_char(__pyx_v_value); if (unlikely((__pyx_t_1 == (char)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L1_error)\n",
-       "  __pyx_v_self->status = __pyx_t_1;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_r = 0;\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.status.__set__\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = -1;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
+0066:     cdef public str message
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __Pyx_INCREF(__pyx_v_self->message);\n",
-       "  __pyx_r = __pyx_v_self->message;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__set__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_2__set__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), ((PyObject *)__pyx_v_value));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static int __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_2__set__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_value) {\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__set__\", 0);\n",
-       "  if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"unicode\", __pyx_v_value))) __PYX_ERR(0, 66, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __pyx_v_value;\n",
-       "  __Pyx_INCREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "  __Pyx_DECREF(__pyx_v_self->message);\n",
-       "  __pyx_v_self->message = ((PyObject*)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_r = 0;\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.message.__set__\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = -1;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_5__del__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_5__del__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__del__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_4__del__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static int __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7message_4__del__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__del__\", 0);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "  __Pyx_DECREF(__pyx_v_self->message);\n",
-       "  __pyx_v_self->message = ((PyObject*)Py_None);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_r = 0;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
+0067:     cdef public bool_cpp_t success
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->success); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __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_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.success.__get__\", __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",
-       "/* Python wrapper */\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__set__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success_2__set__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), ((PyObject *)__pyx_v_value));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static int __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7success_2__set__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_value) {\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__set__\", 0);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error)\n",
-       "  __pyx_v_self->success = __pyx_t_1;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_r = 0;\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.success.__set__\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = -1;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 0068:     cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf
\n", - "
 0069:     cdef bool_cpp_t direction_flag
\n", - "
 0070:     cdef double rtol, atol
\n", - "
 0071:     cdef double step_size, max_step_size
\n", - "
 0072:     cdef double first_step
\n", - "
 0073:     cdef Py_ssize_t expected_size, num_concats, max_steps
\n", - "
 0074:     cdef bool_cpp_t use_max_steps
\n", - "
 0075:     cdef bool_cpp_t recalc_firststep
\n", - "
 0076: 
\n", - "
 0077:     # -- Optional args info
\n", - "
 0078:     cdef Py_ssize_t num_args
\n", - "
 0079:     cdef double[::1] arg_array_view
\n", - "
 0080: 
\n", - "
 0081:     # -- Extra output info
\n", - "
 0082:     cdef bool_cpp_t capture_extra
\n", - "
 0083:     cdef Py_ssize_t num_extra
\n", - "
 0084: 
\n", - "
 0085:     # -- Interpolation info
\n", - "
 0086:     cdef bool_cpp_t run_interpolation
\n", - "
 0087:     cdef bool_cpp_t interpolate_extra
\n", - "
 0088:     cdef Py_ssize_t len_t_eval
\n", - "
 0089:     cdef double[::1] t_eval_view
\n", - "
 0090: 
\n", - "
 0091:     # -- Solution variables
\n", - "
 0092:     cdef double[:, ::1] solution_y_view, solution_extra_view
\n", - "
 0093:     cdef double[::1] solution_t_view
\n", - "
 0094: 
\n", - "
 0095: 
\n", - "
+0096:     def __init__(self,
\n", - "
/* Python wrapper */\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "static int __pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  double __pyx_v_max_step_size;\n",
-       "  double __pyx_v_first_step;\n",
-       "  unsigned char __pyx_v_rk_method;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_capture_extra;\n",
-       "  Py_ssize_t __pyx_v_num_extra;\n",
-       "  bool __pyx_v_interpolate_extra;\n",
-       "  Py_ssize_t __pyx_v_expected_size;\n",
-       "  Py_ssize_t __pyx_v_max_steps;\n",
-       "  bool __pyx_v_auto_solve;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__init__ (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step_size,&__pyx_n_s_first_step,&__pyx_n_s_rk_method,&__pyx_n_s_t_eval,&__pyx_n_s_capture_extra,&__pyx_n_s_num_extra,&__pyx_n_s_interpolate_extra,&__pyx_n_s_expected_size,&__pyx_n_s_max_steps,&__pyx_n_s_auto_solve,0};\n",
-       "    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = -1;\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static int __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver___init__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step_size, double __pyx_v_first_step, unsigned char __pyx_v_rk_method, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_capture_extra, Py_ssize_t __pyx_v_num_extra, bool __pyx_v_interpolate_extra, Py_ssize_t __pyx_v_expected_size, Py_ssize_t __pyx_v_max_steps, bool __pyx_v_auto_solve) {\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  PyArrayObject *__pyx_v_solution_extra_fake = 0;\n",
-       "  PyArrayObject *__pyx_v_solution_y_fake = 0;\n",
-       "  PyArrayObject *__pyx_v_solution_t_fake = 0;\n",
-       "  double __pyx_v_temp_expected_size;\n",
-       "  PyArrayObject *__pyx_v_arg_array = 0;\n",
-       "  PyArrayObject *__pyx_v_y_new = 0;\n",
-       "  PyArrayObject *__pyx_v_y_old = 0;\n",
-       "  PyArrayObject *__pyx_v_dy_new = 0;\n",
-       "  PyArrayObject *__pyx_v_dy_old = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_output_init = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_output = 0;\n",
-       "  PyArrayObject *__pyx_v_t_eval_array = 0;\n",
-       "  PyArrayObject *__pyx_v_K = 0;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_K;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_K;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_arg_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_arg_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_dy_new;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_dy_new;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_dy_old;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_dy_old;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_output;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_output;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_output_init;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_output_init;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_solution_extra_fake;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_solution_extra_fake;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_solution_t_fake;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_solution_t_fake;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_solution_y_fake;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_solution_y_fake;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_t_eval_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_t_eval_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_new;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_new;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_old;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_old;\n",
-       "  int __pyx_r;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__init__\", 0);\n",
-       "  __pyx_pybuffer_solution_extra_fake.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_solution_extra_fake.refcount = 0;\n",
-       "  __pyx_pybuffernd_solution_extra_fake.data = NULL;\n",
-       "  __pyx_pybuffernd_solution_extra_fake.rcbuffer = &__pyx_pybuffer_solution_extra_fake;\n",
-       "  __pyx_pybuffer_solution_y_fake.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_solution_y_fake.refcount = 0;\n",
-       "  __pyx_pybuffernd_solution_y_fake.data = NULL;\n",
-       "  __pyx_pybuffernd_solution_y_fake.rcbuffer = &__pyx_pybuffer_solution_y_fake;\n",
-       "  __pyx_pybuffer_solution_t_fake.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_solution_t_fake.refcount = 0;\n",
-       "  __pyx_pybuffernd_solution_t_fake.data = NULL;\n",
-       "  __pyx_pybuffernd_solution_t_fake.rcbuffer = &__pyx_pybuffer_solution_t_fake;\n",
-       "  __pyx_pybuffer_arg_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_arg_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_arg_array.data = NULL;\n",
-       "  __pyx_pybuffernd_arg_array.rcbuffer = &__pyx_pybuffer_arg_array;\n",
-       "  __pyx_pybuffer_y_new.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_new.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_new.data = NULL;\n",
-       "  __pyx_pybuffernd_y_new.rcbuffer = &__pyx_pybuffer_y_new;\n",
-       "  __pyx_pybuffer_y_old.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_old.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_old.data = NULL;\n",
-       "  __pyx_pybuffernd_y_old.rcbuffer = &__pyx_pybuffer_y_old;\n",
-       "  __pyx_pybuffer_dy_new.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_dy_new.refcount = 0;\n",
-       "  __pyx_pybuffernd_dy_new.data = NULL;\n",
-       "  __pyx_pybuffernd_dy_new.rcbuffer = &__pyx_pybuffer_dy_new;\n",
-       "  __pyx_pybuffer_dy_old.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_dy_old.refcount = 0;\n",
-       "  __pyx_pybuffernd_dy_old.data = NULL;\n",
-       "  __pyx_pybuffernd_dy_old.rcbuffer = &__pyx_pybuffer_dy_old;\n",
-       "  __pyx_pybuffer_extra_output_init.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_output_init.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_output_init.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_output_init.rcbuffer = &__pyx_pybuffer_extra_output_init;\n",
-       "  __pyx_pybuffer_extra_output.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_output.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_output.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_output.rcbuffer = &__pyx_pybuffer_extra_output;\n",
-       "  __pyx_pybuffer_t_eval_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_t_eval_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_t_eval_array.data = NULL;\n",
-       "  __pyx_pybuffernd_t_eval_array.rcbuffer = &__pyx_pybuffer_t_eval_array;\n",
-       "  __pyx_pybuffer_K.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_K.refcount = 0;\n",
-       "  __pyx_pybuffernd_K.data = NULL;\n",
-       "  __pyx_pybuffernd_K.rcbuffer = &__pyx_pybuffer_K;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_r = 0;\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_12, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_t_25);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_27, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_K.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dy_new.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dy_old.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_new.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_old.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.__init__\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = -1;\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_K.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dy_new.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dy_old.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_new.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_old.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_solution_extra_fake);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_solution_y_fake);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_solution_t_fake);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_arg_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_new);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_old);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_dy_new);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_dy_old);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_output_init);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_output);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_t_eval_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_K);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 0097:                  (double, double) t_span,
\n", - "
 0098:                  const double[::1] y0,
\n", - "
+0099:                  tuple args = None,
\n", - "
    values[2] = ((PyObject*)Py_None);\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__init__\", 0, 2, 15, 1); __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
-       "          if (value) { values[2] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[3] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size);\n",
-       "          if (value) { values[5] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
-       "          if (value) { values[6] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rk_method);\n",
-       "          if (value) { values[7] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
-       "          if (value) { values[8] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_capture_extra);\n",
-       "          if (value) { values[9] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_extra);\n",
-       "          if (value) { values[10] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interpolate_extra);\n",
-       "          if (value) { values[11] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expected_size);\n",
-       "          if (value) { values[12] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_steps);\n",
-       "          if (value) { values[13] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_solve);\n",
-       "          if (value) { values[14] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"__init__\") < 0)) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 15: values[14] = __Pyx_Arg_VARARGS(__pyx_args, 14);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L3_error)\n",
-       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[1], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 98, __pyx_L3_error)\n",
-       "    __pyx_v_args = ((PyObject*)values[2]);\n",
-       "    if (values[3]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = ((double)1.e-6);\n",
-       "    }\n",
-       "    if (values[4]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = ((double)1.e-8);\n",
-       "    }\n",
-       "    if (values[5]) {\n",
-       "      __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_step_size = __pyx_k__17;\n",
-       "    }\n",
-       "    if (values[6]) {\n",
-       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_first_step = ((double)0.);\n",
-       "    }\n",
-       "    if (values[7]) {\n",
-       "      __pyx_v_rk_method = __Pyx_PyInt_As_unsigned_char(values[7]); if (unlikely((__pyx_v_rk_method == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rk_method = ((unsigned char)1);\n",
-       "    }\n",
-       "    if (values[8]) {\n",
-       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[8], 0); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 105, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_eval = __pyx_k__18;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "    }\n",
-       "    if (values[9]) {\n",
-       "      __pyx_v_capture_extra = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_capture_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error)\n",
-       "    } else {\n",
-       "
 0100:                  double rtol = 1.e-6,
\n", - "
 0101:                  double atol = 1.e-8,
\n", - "
+0102:                  double max_step_size = MAX_STEP,
\n", - "
  __pyx_k__17 = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_STEP;\n",
-       "
 0103:                  double first_step = 0.,
\n", - "
 0104:                  unsigned char rk_method = 1,
\n", - "
+0105:                  const double[::1] t_eval = None,
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 105, __pyx_L1_error)\n",
-       "  __pyx_k__18 = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
+0106:                  bool_cpp_t capture_extra = False,
\n", - "
      __pyx_v_capture_extra = ((bool)0);\n",
-       "    }\n",
-       "    if (values[10]) {\n",
-       "      __pyx_v_num_extra = __Pyx_PyIndex_AsSsize_t(values[10]); if (unlikely((__pyx_v_num_extra == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 107, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_num_extra = ((Py_ssize_t)0);\n",
-       "    }\n",
-       "    if (values[11]) {\n",
-       "      __pyx_v_interpolate_extra = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_interpolate_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 108, __pyx_L3_error)\n",
-       "    } else {\n",
-       "
 0107:                  Py_ssize_t num_extra = 0,
\n", - "
+0108:                  bool_cpp_t interpolate_extra = False,
\n", - "
      __pyx_v_interpolate_extra = ((bool)0);\n",
-       "    }\n",
-       "    if (values[12]) {\n",
-       "      __pyx_v_expected_size = __Pyx_PyIndex_AsSsize_t(values[12]); if (unlikely((__pyx_v_expected_size == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_expected_size = ((Py_ssize_t)0);\n",
-       "    }\n",
-       "    if (values[13]) {\n",
-       "      __pyx_v_max_steps = __Pyx_PyIndex_AsSsize_t(values[13]); if (unlikely((__pyx_v_max_steps == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_steps = ((Py_ssize_t)0);\n",
-       "    }\n",
-       "    if (values[14]) {\n",
-       "      __pyx_v_auto_solve = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_auto_solve == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 111, __pyx_L3_error)\n",
-       "    } else {\n",
-       "
 0109:                  Py_ssize_t expected_size = 0,
\n", - "
 0110:                  Py_ssize_t max_steps = 0,
\n", - "
+0111:                  bool_cpp_t auto_solve = True):
\n", - "
      __pyx_v_auto_solve = ((bool)1);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"__init__\", 0, 2, 15, __pyx_nargs); __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.__init__\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return -1;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 99, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver___init__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step_size, __pyx_v_first_step, __pyx_v_rk_method, __pyx_v_t_eval, __pyx_v_capture_extra, __pyx_v_num_extra, __pyx_v_interpolate_extra, __pyx_v_expected_size, __pyx_v_max_steps, __pyx_v_auto_solve);\n",
-       "
 0112: 
\n", - "
 0113:         # Setup loop variables
\n", - "
 0114:         cdef Py_ssize_t i, j
\n", - "
 0115: 
\n", - "
 0116:         # Set integration information
\n", - "
+0117:         self.status  = -4  # Status code to indicate that integration has not started.
\n", - "
  __pyx_v_self->status = -4;\n",
-       "
+0118:         self.message = 'Integration has not started.'
\n", - "
  __Pyx_INCREF(__pyx_kp_u_Integration_has_not_started);\n",
-       "  __Pyx_GIVEREF(__pyx_kp_u_Integration_has_not_started);\n",
-       "  __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "  __Pyx_DECREF(__pyx_v_self->message);\n",
-       "  __pyx_v_self->message = __pyx_kp_u_Integration_has_not_started;\n",
-       "
+0119:         self.success = False
\n", - "
  __pyx_v_self->success = 0;\n",
-       "
+0120:         self.recalc_firststep = False
\n", - "
  __pyx_v_self->recalc_firststep = 0;\n",
-       "
 0121: 
\n", - "
 0122:         # Declare public variables to avoid memory access violations if solve() is not called.
\n", - "
 0123:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake
\n", - "
 0124:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake
\n", - "
+0125:         solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__19 = PyTuple_Pack(2, __pyx_int_1, __pyx_int_1); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__19);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__19);\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 125, __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_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__20, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __pyx_t_6 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer, (PyObject*)__pyx_v_solution_extra_fake, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      }\n",
-       "      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_solution_extra_fake.diminfo[0].strides = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_solution_extra_fake.diminfo[0].shape = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_solution_extra_fake.diminfo[1].strides = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_solution_extra_fake.diminfo[1].shape = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_v_solution_extra_fake = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_tuple__19); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 125, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__20);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__20);\n",
-       "
+0126:         solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__20, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  __pyx_t_6 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer, (PyObject*)__pyx_v_solution_y_fake, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);\n",
-       "      }\n",
-       "      __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_solution_y_fake.diminfo[0].strides = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_solution_y_fake.diminfo[0].shape = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_solution_y_fake.diminfo[1].strides = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_solution_y_fake.diminfo[1].shape = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 126, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_v_solution_y_fake = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+0127:         solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__21, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __pyx_t_11 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer, (PyObject*)__pyx_v_solution_t_fake, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      }\n",
-       "      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_solution_t_fake.diminfo[0].strides = __pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_solution_t_fake.diminfo[0].shape = __pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_11 = 0;\n",
-       "  __pyx_v_solution_t_fake = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 127, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__21);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__21);\n",
-       "
+0128:         self.solution_t_view = solution_t_fake
\n", - "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_solution_t_fake), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 128, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_t_view, 0);\n",
-       "  __pyx_v_self->solution_t_view = __pyx_t_12;\n",
-       "  __pyx_t_12.memview = NULL;\n",
-       "  __pyx_t_12.data = NULL;\n",
-       "
+0129:         self.solution_extra_view = solution_extra_fake
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_solution_extra_fake), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 129, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_extra_view, 0);\n",
-       "  __pyx_v_self->solution_extra_view = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
+0130:         self.solution_y_view = solution_y_fake
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_solution_y_fake), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 130, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_y_view, 0);\n",
-       "  __pyx_v_self->solution_y_view = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
 0131: 
\n", - "
 0132:         # Determine y-size information
\n", - "
+0133:         self.y_size = len(y0)
\n", - "
  __pyx_t_14 = __Pyx_MemoryView_Len(__pyx_v_y0); \n",
-       "  __pyx_v_self->y_size = __pyx_t_14;\n",
-       "
+0134:         self.y_size_dbl = <double>self.y_size
\n", - "
  __pyx_v_self->y_size_dbl = ((double)__pyx_v_self->y_size);\n",
-       "
+0135:         self.y_size_sqrt = sqrt(self.y_size_dbl)
\n", - "
  __pyx_v_self->y_size_sqrt = sqrt(__pyx_v_self->y_size_dbl);\n",
-       "
 0136:         # Store y0 values for later
\n", - "
+0137:         self.y0_view = y0
\n", - "
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->y0_view, 0);\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __pyx_v_self->y0_view = __pyx_v_y0;\n",
-       "
 0138: 
\n", - "
 0139:         # Determine time domain information
\n", - "
+0140:         self.t_start = t_span[0]
\n", - "
  __pyx_v_self->t_start = __pyx_v_t_span.f0;\n",
-       "
+0141:         self.t_end   = t_span[1]
\n", - "
  __pyx_v_self->t_end = __pyx_v_t_span.f1;\n",
-       "
+0142:         self.t_delta = self.t_end - self.t_start
\n", - "
  __pyx_v_self->t_delta = (__pyx_v_self->t_end - __pyx_v_self->t_start);\n",
-       "
+0143:         self.t_delta_abs = fabs(self.t_delta)
\n", - "
  __pyx_v_self->t_delta_abs = fabs(__pyx_v_self->t_delta);\n",
-       "
 0144: 
\n", - "
+0145:         if self.t_delta >= 0.:
\n", - "
  __pyx_t_15 = (__pyx_v_self->t_delta >= 0.);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
 0146:             # Integration is moving forward in time.
\n", - "
+0147:             self.direction_flag = True
\n", - "
    __pyx_v_self->direction_flag = 1;\n",
-       "
+0148:             self.direction_inf  = INF
\n", - "
    __pyx_v_self->direction_inf = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF;\n",
-       "
 0149:         else:
\n", - "
 0150:             # Integration is moving backwards in time.
\n", - "
+0151:             self.direction_flag = False
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_self->direction_flag = 0;\n",
-       "
+0152:             self.direction_inf  = -INF
\n", - "
    __pyx_v_self->direction_inf = (-__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF);\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
 0153: 
\n", - "
 0154:         # # Determine integration parameters
\n", - "
 0155:         # Add tolerances
\n", - "
+0156:         self.rtol = rtol
\n", - "
  __pyx_v_self->rtol = __pyx_v_rtol;\n",
-       "
+0157:         self.atol = atol
\n", - "
  __pyx_v_self->atol = __pyx_v_atol;\n",
-       "
+0158:         if self.rtol < EPS_100:
\n", - "
  __pyx_t_15 = (__pyx_v_self->rtol < __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0159:             self.rtol = EPS_100
\n", - "
    __pyx_v_self->rtol = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100;\n",
-       "
 0160:         # TODO: array based atol
\n", - "
 0161:         #     atol_arr = np.asarray(atol, dtype=)
\n", - "
 0162:         #     if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:
\n", - "
 0163:         #         # atol must be either the same for all y or must be provided as an array, one for each y.
\n", - "
 0164:         #         raise Exception
\n", - "
 0165: 
\n", - "
 0166:         # Determine maximum number of steps
\n", - "
+0167:         if max_steps == 0:
\n", - "
  __pyx_t_15 = (__pyx_v_max_steps == 0);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L5;\n",
-       "  }\n",
-       "
+0168:             self.use_max_steps = False
\n", - "
    __pyx_v_self->use_max_steps = 0;\n",
-       "
+0169:             self.max_steps = 0
\n", - "
    __pyx_v_self->max_steps = 0;\n",
-       "
+0170:         elif max_steps < 0:
\n", - "
  __pyx_t_15 = (__pyx_v_max_steps < 0);\n",
-       "  if (unlikely(__pyx_t_15)) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0171:             self.status = -8
\n", - "
    __pyx_v_self->status = -8;\n",
-       "
+0172:             self.message = "Attribute error."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+0173:             raise AttributeError('Negative number of max steps provided.')
\n", - "
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __PYX_ERR(0, 173, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_u_Negative_number_of_max_steps_pro); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 173, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__22);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__22);\n",
-       "
 0174:         else:
\n", - "
+0175:             self.use_max_steps = True
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_self->use_max_steps = 1;\n",
-       "
+0176:             self.max_steps = min(max_steps, MAX_INT_SIZE)
\n", - "
    __pyx_t_14 = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_INT_SIZE;\n",
-       "    __pyx_t_16 = __pyx_v_max_steps;\n",
-       "    if ((__pyx_t_14 < __pyx_t_16)) {\n",
-       "      __pyx_t_17 = __pyx_t_14;\n",
-       "    } else {\n",
-       "      __pyx_t_17 = __pyx_t_16;\n",
-       "    }\n",
-       "    __pyx_v_self->max_steps = __pyx_t_17;\n",
-       "  }\n",
-       "  __pyx_L5:;\n",
-       "
 0177: 
\n", - "
 0178:         # Expected size of output arrays.
\n", - "
 0179:         cdef double temp_expected_size
\n", - "
+0180:         if expected_size == 0:
\n", - "
  __pyx_t_15 = (__pyx_v_expected_size == 0);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "
 0181:             # CySolver will attempt to guess on a best size for the arrays.
\n", - "
+0182:             temp_expected_size = 100. * self.t_delta_abs * fmax(1., (1.e-6 / rtol))
\n", - "
    __pyx_v_temp_expected_size = ((100. * __pyx_v_self->t_delta_abs) * fmax(1., (1.e-6 / __pyx_v_rtol)));\n",
-       "
+0183:             temp_expected_size = fmax(temp_expected_size, 100.)
\n", - "
    __pyx_v_temp_expected_size = fmax(__pyx_v_temp_expected_size, 100.);\n",
-       "
+0184:             temp_expected_size = fmin(temp_expected_size, 10_000_000.)
\n", - "
    __pyx_v_temp_expected_size = fmin(__pyx_v_temp_expected_size, 10000000.);\n",
-       "
+0185:             self.expected_size = <Py_ssize_t>temp_expected_size
\n", - "
    __pyx_v_self->expected_size = ((Py_ssize_t)__pyx_v_temp_expected_size);\n",
-       "
 0186:         else:
\n", - "
+0187:             self.expected_size = <Py_ssize_t>expected_size
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_self->expected_size = ((Py_ssize_t)__pyx_v_expected_size);\n",
-       "  }\n",
-       "  __pyx_L6:;\n",
-       "
 0188:         # This variable tracks how many times the storage arrays have been appended.
\n", - "
 0189:         # It starts at 1 since there is at least one storage array present.
\n", - "
+0190:         self.num_concats = 1
\n", - "
  __pyx_v_self->num_concats = 1;\n",
-       "
 0191: 
\n", - "
 0192:         # Determine optional arguments
\n", - "
 0193:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array
\n", - "
+0194:         if args is None:
\n", - "
  __pyx_t_15 = (__pyx_v_args == ((PyObject*)Py_None));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L7;\n",
-       "  }\n",
-       "
+0195:             self.num_args = 0
\n", - "
    __pyx_v_self->num_args = 0;\n",
-       "
 0196:             # Even though there are no args, initialize the array to something to avoid seg faults
\n", - "
+0197:             arg_array = np.empty(0, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 197, __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_ERR(0, 197, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__23, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    __pyx_t_18 = ((PyArrayObject *)__pyx_t_5);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_7 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_arg_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);\n",
-       "        }\n",
-       "        __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_arg_array.diminfo[0].strides = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arg_array.diminfo[0].shape = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_18 = 0;\n",
-       "    __pyx_v_arg_array = ((PyArrayObject *)__pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 197, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__23);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__23);\n",
-       "
+0198:             self.arg_array_view = arg_array
\n", - "
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_arg_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 198, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->arg_array_view, 0);\n",
-       "    __pyx_v_self->arg_array_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
 0199:         else:
\n", - "
+0200:             self.num_args = len(args)
\n", - "
  /*else*/ {\n",
-       "    if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
-       "      __PYX_ERR(0, 200, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_17 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 200, __pyx_L1_error)\n",
-       "    __pyx_v_self->num_args = __pyx_t_17;\n",
-       "
+0201:             arg_array = np.empty(self.num_args, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->num_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_GIVEREF(__pyx_t_5);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "    __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    __pyx_t_18 = ((PyArrayObject *)__pyx_t_2);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_7 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_arg_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "        }\n",
-       "        __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_arg_array.diminfo[0].strides = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arg_array.diminfo[0].shape = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 201, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_18 = 0;\n",
-       "    __pyx_v_arg_array = ((PyArrayObject *)__pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+0202:             self.arg_array_view = arg_array
\n", - "
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_arg_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 202, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->arg_array_view, 0);\n",
-       "    __pyx_v_self->arg_array_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0203:             for i in range(self.num_args):
\n", - "
    __pyx_t_17 = __pyx_v_self->num_args;\n",
-       "    __pyx_t_14 = __pyx_t_17;\n",
-       "    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_14; __pyx_t_16+=1) {\n",
-       "      __pyx_v_i = __pyx_t_16;\n",
-       "
+0204:                 self.arg_array_view[i] = args[i]
\n", - "
      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "        __PYX_ERR(0, 204, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_19 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_v_args, __pyx_v_i)); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 204, __pyx_L1_error)\n",
-       "      __pyx_t_20 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->arg_array_view.data) + __pyx_t_20)) )) = __pyx_t_19;\n",
-       "    }\n",
-       "  }\n",
-       "  __pyx_L7:;\n",
-       "
 0205: 
\n", - "
 0206:         # Initialize live variable arrays
\n", - "
 0207:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_new, y_old, dy_new, dy_old
\n", - "
+0208:         y_new  = np.empty(self.y_size, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  __pyx_t_21 = ((PyArrayObject *)__pyx_t_4);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_new.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_new.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_new.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_new, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);\n",
-       "      }\n",
-       "      __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_y_new.diminfo[0].strides = __pyx_pybuffernd_y_new.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_new.diminfo[0].shape = __pyx_pybuffernd_y_new.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 208, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_v_y_new = ((PyArrayObject *)__pyx_t_4);\n",
-       "  __pyx_t_4 = 0;\n",
-       "
+0209:         y_old  = np.empty(self.y_size, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  __pyx_t_21 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_old.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_old.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_old.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_old, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      }\n",
-       "      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_y_old.diminfo[0].strides = __pyx_pybuffernd_y_old.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_old.diminfo[0].shape = __pyx_pybuffernd_y_old.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 209, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_v_y_old = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+0210:         dy_new = np.empty(self.y_size, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  __pyx_t_21 = ((PyArrayObject *)__pyx_t_5);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dy_new.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dy_new.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dy_new.rcbuffer->pybuffer, (PyObject*)__pyx_v_dy_new, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);\n",
-       "      }\n",
-       "      __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_dy_new.diminfo[0].strides = __pyx_pybuffernd_dy_new.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dy_new.diminfo[0].shape = __pyx_pybuffernd_dy_new.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 210, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_v_dy_new = ((PyArrayObject *)__pyx_t_5);\n",
-       "  __pyx_t_5 = 0;\n",
-       "
+0211:         dy_old = np.empty(self.y_size, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  __pyx_t_21 = ((PyArrayObject *)__pyx_t_2);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dy_old.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dy_old.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dy_old.rcbuffer->pybuffer, (PyObject*)__pyx_v_dy_old, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      }\n",
-       "      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_dy_old.diminfo[0].strides = __pyx_pybuffernd_dy_old.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dy_old.diminfo[0].shape = __pyx_pybuffernd_dy_old.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 211, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_v_dy_old = ((PyArrayObject *)__pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+0212:         self.y_new_view  = y_new
\n", - "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_y_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 212, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->y_new_view, 0);\n",
-       "  __pyx_v_self->y_new_view = __pyx_t_12;\n",
-       "  __pyx_t_12.memview = NULL;\n",
-       "  __pyx_t_12.data = NULL;\n",
-       "
+0213:         self.y_old_view  = y_old
\n", - "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_y_old), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 213, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->y_old_view, 0);\n",
-       "  __pyx_v_self->y_old_view = __pyx_t_12;\n",
-       "  __pyx_t_12.memview = NULL;\n",
-       "  __pyx_t_12.data = NULL;\n",
-       "
+0214:         self.dy_new_view = dy_new
\n", - "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_dy_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 214, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->dy_new_view, 0);\n",
-       "  __pyx_v_self->dy_new_view = __pyx_t_12;\n",
-       "  __pyx_t_12.memview = NULL;\n",
-       "  __pyx_t_12.data = NULL;\n",
-       "
+0215:         self.dy_old_view = dy_old
\n", - "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_dy_old), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->dy_old_view, 0);\n",
-       "  __pyx_v_self->dy_old_view = __pyx_t_12;\n",
-       "  __pyx_t_12.memview = NULL;\n",
-       "  __pyx_t_12.data = NULL;\n",
-       "
 0216: 
\n", - "
 0217:         # Set current and old y variables equal to y0
\n", - "
+0218:         for i in range(self.y_size):
\n", - "
  __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_14 = __pyx_t_17;\n",
-       "  for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_14; __pyx_t_16+=1) {\n",
-       "    __pyx_v_i = __pyx_t_16;\n",
-       "
+0219:             self.y_new_view[i] = self.y0_view[i]
\n", - "
    __pyx_t_20 = __pyx_v_i;\n",
-       "    __pyx_t_22 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_22)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_20)) )));\n",
-       "
+0220:             self.y_old_view[i] = self.y0_view[i]
\n", - "
    __pyx_t_20 = __pyx_v_i;\n",
-       "    __pyx_t_22 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_22)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_20)) )));\n",
-       "  }\n",
-       "
 0221: 
\n", - "
 0222:         # Set current and old time variables equal to t0
\n", - "
+0223:         self.t_old = self.t_start
\n", - "
  __pyx_t_19 = __pyx_v_self->t_start;\n",
-       "  __pyx_v_self->t_old = __pyx_t_19;\n",
-       "
+0224:         self.t_new = self.t_start
\n", - "
  __pyx_t_19 = __pyx_v_self->t_start;\n",
-       "  __pyx_v_self->t_new = __pyx_t_19;\n",
-       "
 0225:         # We already have one time step due to the initial conditions.
\n", - "
+0226:         self.len_t = 1
\n", - "
  __pyx_v_self->len_t = 1;\n",
-       "
 0227: 
\n", - "
 0228:         # Determine extra outputs
\n", - "
 0229:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_output_init, extra_output
\n", - "
+0230:         self.capture_extra = capture_extra
\n", - "
  __pyx_v_self->capture_extra = __pyx_v_capture_extra;\n",
-       "
+0231:         self.num_extra     = num_extra
\n", - "
  __pyx_v_self->num_extra = __pyx_v_num_extra;\n",
-       "
+0232:         if self.capture_extra:
\n", - "
  __pyx_t_15 = (__pyx_v_self->capture_extra != 0);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0233:             extra_output_init = np.empty(self.num_extra, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    __pyx_t_23 = ((PyArrayObject *)__pyx_t_4);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer);\n",
-       "      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_7 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_output_init, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);\n",
-       "        }\n",
-       "        __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_extra_output_init.diminfo[0].strides = __pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_output_init.diminfo[0].shape = __pyx_pybuffernd_extra_output_init.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 233, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_23 = 0;\n",
-       "    __pyx_v_extra_output_init = ((PyArrayObject *)__pyx_t_4);\n",
-       "    __pyx_t_4 = 0;\n",
-       "
+0234:             extra_output      = np.empty(self.num_extra, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_GIVEREF(__pyx_t_4);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);\n",
-       "    __pyx_t_4 = 0;\n",
-       "    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    __pyx_t_23 = ((PyArrayObject *)__pyx_t_1);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output.rcbuffer->pybuffer);\n",
-       "      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_7 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_output, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "        }\n",
-       "        __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_extra_output.diminfo[0].strides = __pyx_pybuffernd_extra_output.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_output.diminfo[0].shape = __pyx_pybuffernd_extra_output.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 234, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_23 = 0;\n",
-       "    __pyx_v_extra_output = ((PyArrayObject *)__pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "
+0235:             self.extra_output_init_view = extra_output_init
\n", - "
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_extra_output_init), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 235, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->extra_output_init_view, 0);\n",
-       "    __pyx_v_self->extra_output_init_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0236:             self.extra_output_view      = extra_output
\n", - "
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_extra_output), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 236, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->extra_output_view, 0);\n",
-       "    __pyx_v_self->extra_output_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
 0237: 
\n", - "
 0238:             # We need to determine the extra outputs at the initial time step.
\n", - "
+0239:             self.diffeq()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
+0240:             for i in range(num_extra):
\n", - "
    __pyx_t_17 = __pyx_v_num_extra;\n",
-       "    __pyx_t_14 = __pyx_t_17;\n",
-       "    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_14; __pyx_t_16+=1) {\n",
-       "      __pyx_v_i = __pyx_t_16;\n",
-       "
+0241:                 self.extra_output_init_view[i] = self.extra_output_view[i]
\n", - "
      __pyx_t_20 = __pyx_v_i;\n",
-       "      __pyx_t_22 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->extra_output_init_view.data) + __pyx_t_22)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->extra_output_view.data) + __pyx_t_20)) )));\n",
-       "    }\n",
-       "
 0242: 
\n", - "
 0243:         # Determine interpolation information
\n", - "
 0244:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array
\n", - "
+0245:         if t_eval is None:
\n", - "
  __pyx_t_15 = (((PyObject *) __pyx_v_t_eval.memview) == Py_None);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L15;\n",
-       "  }\n",
-       "
+0246:             self.run_interpolation = False
\n", - "
    __pyx_v_self->run_interpolation = 0;\n",
-       "
+0247:             self.interpolate_extra = False
\n", - "
    __pyx_v_self->interpolate_extra = 0;\n",
-       "
+0248:             self.len_t_eval = 0
\n", - "
    __pyx_v_self->len_t_eval = 0;\n",
-       "
 0249:         else:
\n", - "
+0250:             self.run_interpolation = True
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_self->run_interpolation = 1;\n",
-       "
+0251:             self.interpolate_extra = interpolate_extra
\n", - "
    __pyx_v_self->interpolate_extra = __pyx_v_interpolate_extra;\n",
-       "
+0252:             self.len_t_eval = len(t_eval)
\n", - "
    __pyx_t_17 = __Pyx_MemoryView_Len(__pyx_v_t_eval); \n",
-       "    __pyx_v_self->len_t_eval = __pyx_t_17;\n",
-       "
 0253: 
\n", - "
+0254:             t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    __pyx_t_24 = ((PyArrayObject *)__pyx_t_5);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
-       "      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_7 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_t_eval_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);\n",
-       "        }\n",
-       "        __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_t_eval_array.diminfo[0].strides = __pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_t_eval_array.diminfo[0].shape = __pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 254, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_24 = 0;\n",
-       "    __pyx_v_t_eval_array = ((PyArrayObject *)__pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "
+0255:             self.t_eval_view = t_eval_array
\n", - "
    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_t_eval_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 255, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->t_eval_view, 0);\n",
-       "    __pyx_v_self->t_eval_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0256:             for i in range(self.len_t_eval):
\n", - "
    __pyx_t_17 = __pyx_v_self->len_t_eval;\n",
-       "    __pyx_t_14 = __pyx_t_17;\n",
-       "    for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_14; __pyx_t_16+=1) {\n",
-       "      __pyx_v_i = __pyx_t_16;\n",
-       "
+0257:                 self.t_eval_view[i] = t_eval[i]
\n", - "
      __pyx_t_20 = __pyx_v_i;\n",
-       "      __pyx_t_22 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->t_eval_view.data) + __pyx_t_22)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_t_eval.data) + __pyx_t_20)) )));\n",
-       "    }\n",
-       "  }\n",
-       "  __pyx_L15:;\n",
-       "
 0258: 
\n", - "
 0259:         # Determine RK scheme and initalize memory views
\n", - "
+0260:         self.rk_method = rk_method
\n", - "
  __pyx_v_self->rk_method = __pyx_v_rk_method;\n",
-       "
 0261: 
\n", - "
+0262:         if rk_method == 0:
\n", - "
  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "
 0263:             # RK23 Method
\n", - "
+0264:             self.rk_order    = RK23_order
\n", - "
    __pyx_v_self->rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
-       "
+0265:             self.error_order = RK23_error_order
\n", - "
    __pyx_v_self->error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
-       "
+0266:             self.rk_n_stages = RK23_n_stages
\n", - "
    __pyx_v_self->rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
-       "
+0267:             self.len_C       = RK23_LEN_C
\n", - "
    __pyx_v_self->len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
-       "
+0268:             self.A_view  = RK23_A
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)3), ((Py_ssize_t)3)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"c\", (char *) __pyx_v_4CyRK_2rk_2rk_RK23_A); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->A_view, 0);\n",
-       "    __pyx_v_self->A_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
+0269:             self.B_view  = RK23_B
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK23_B); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->B_view, 0);\n",
-       "    __pyx_v_self->B_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0270:             self.C_view  = RK23_C
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)3)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK23_C); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->C_view, 0);\n",
-       "    __pyx_v_self->C_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0271:             self.E_view  = RK23_E
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 271, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK23_E); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 271, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 271, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E_view, 0);\n",
-       "    __pyx_v_self->E_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
 0272: 
\n", - "
 0273:             # Unused for RK23 but initalize it anyways
\n", - "
+0274:             self.E3_view = RK23_E
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 274, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK23_E); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 274, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 274, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E3_view, 0);\n",
-       "    __pyx_v_self->E3_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0275:             self.E5_view = RK23_E
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK23_E); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E5_view, 0);\n",
-       "    __pyx_v_self->E5_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0276:         elif rk_method == 1:
\n", - "
    break;\n",
-       "    case 2:\n",
-       "
 0277:             # RK45 Method
\n", - "
+0278:             self.rk_order    = RK45_order
\n", - "
    __pyx_v_self->rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
-       "
+0279:             self.error_order = RK45_error_order
\n", - "
    __pyx_v_self->error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
-       "
+0280:             self.rk_n_stages = RK45_n_stages
\n", - "
    __pyx_v_self->rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
-       "
+0281:             self.len_C       = RK45_LEN_C
\n", - "
    __pyx_v_self->len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
-       "
+0282:             self.A_view  = RK45_A
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)6), ((Py_ssize_t)5)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"c\", (char *) __pyx_v_4CyRK_2rk_2rk_RK45_A); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->A_view, 0);\n",
-       "    __pyx_v_self->A_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
+0283:             self.B_view  = RK45_B
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 283, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK45_B); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 283, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 283, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->B_view, 0);\n",
-       "    __pyx_v_self->B_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0284:             self.C_view  = RK45_C
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK45_C); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->C_view, 0);\n",
-       "    __pyx_v_self->C_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0285:             self.E_view  = RK45_E
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)7)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK45_E); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 285, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 285, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E_view, 0);\n",
-       "    __pyx_v_self->E_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
 0286: 
\n", - "
 0287:             # Unused for RK23 but initalize it anyways
\n", - "
+0288:             self.E3_view = RK45_E
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)7)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK45_E); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 288, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E3_view, 0);\n",
-       "    __pyx_v_self->E3_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0289:             self.E5_view = RK45_E
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)7)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_RK45_E); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 289, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E5_view, 0);\n",
-       "    __pyx_v_self->E5_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0290:         elif rk_method == 2:
\n", - "
    break;\n",
-       "    default:\n",
-       "
 0291:             # DOP853 Method
\n", - "
+0292:             self.rk_order    = DOP_order
\n", - "
    __pyx_v_self->rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
-       "
+0293:             self.error_order = DOP_error_order
\n", - "
    __pyx_v_self->error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
-       "
+0294:             self.rk_n_stages = DOP_n_stages
\n", - "
    __pyx_v_self->rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
-       "
+0295:             self.len_C       = DOP_LEN_C
\n", - "
    __pyx_v_self->len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
-       "
+0296:             self.A_view  = DOP_A_REDUCED
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)12), ((Py_ssize_t)12)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 296, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"c\", (char *) __pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 296, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 296, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->A_view, 0);\n",
-       "    __pyx_v_self->A_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
+0297:             self.B_view  = DOP_B
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 297, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)12)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_DOP_B); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 297, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 297, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->B_view, 0);\n",
-       "    __pyx_v_self->B_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0298:             self.C_view  = DOP_C_REDUCED
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)12)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 298, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 298, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 298, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->C_view, 0);\n",
-       "    __pyx_v_self->C_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0299:             self.E3_view = DOP_E3
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 299, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)13)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_DOP_E3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 299, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 299, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E3_view, 0);\n",
-       "    __pyx_v_self->E3_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0300:             self.E5_view = DOP_E5
\n", - "
    __pyx_t_1 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_5 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)13)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 300, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_5, sizeof(double), PyBytes_AS_STRING(__pyx_t_1), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_DOP_E5); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 300, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 300, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E5_view, 0);\n",
-       "    __pyx_v_self->E5_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
+0301:             self.rk_n_stages_extended = DOP_n_stages_extended
\n", - "
    __pyx_v_self->rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
-       "
 0302: 
\n", - "
 0303:             # Unused for DOP853 but initalize it anyways
\n", - "
+0304:             self.E_view  = DOP_E3
\n", - "
    __pyx_t_5 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 304, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_1 = Py_BuildValue((char*) \"(\"  __PYX_BUILD_PY_SSIZE_T  \")\", ((Py_ssize_t)13)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_25 = __pyx_array_new(__pyx_t_1, sizeof(double), PyBytes_AS_STRING(__pyx_t_5), (char *) \"fortran\", (char *) __pyx_v_4CyRK_2rk_2rk_DOP_E3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 304, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF((PyObject *)__pyx_t_25);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_t_25), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 304, __pyx_L1_error)\n",
-       "    __Pyx_DECREF((PyObject *)__pyx_t_25); __pyx_t_25 = 0;\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->E_view, 0);\n",
-       "    __pyx_v_self->E_view = __pyx_t_12;\n",
-       "    __pyx_t_12.memview = NULL;\n",
-       "    __pyx_t_12.data = NULL;\n",
-       "
 0305:         else:
\n", - "
+0306:             self.status = -8
\n", - "
    __pyx_v_self->status = -8;\n",
-       "
+0307:             self.message = "Attribute error."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+0308:             raise AttributeError(
\n", - "
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 308, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_Raise(__pyx_t_5, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __PYX_ERR(0, 308, __pyx_L1_error)\n",
-       "    break;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_u_Unexpected_rk_method_provided_Cu); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 308, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__24);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__24);\n",
-       "
 0309:                 'Unexpected rk_method provided. Currently supported versions are:\\n'
\n", - "
 0310:                 '\\t0 = RK23\\n'
\n", - "
 0311:                 '\\t1 = RK34\\n'
\n", - "
 0312:                 '\\t2 = DOP853')
\n", - "
 0313: 
\n", - "
+0314:         self.rk_n_stages_plus1 = self.rk_n_stages + 1
\n", - "
  __pyx_v_self->rk_n_stages_plus1 = (__pyx_v_self->rk_n_stages + 1);\n",
-       "
+0315:         self.error_expo        = 1. / (<double>self.error_order + 1.)
\n", - "
  __pyx_v_self->error_expo = (1. / (((double)__pyx_v_self->error_order) + 1.));\n",
-       "
 0316: 
\n", - "
 0317:         # Initialize other RK-related Arrays
\n", - "
 0318:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] K
\n", - "
 0319:         # It is important K be initialized with 0s
\n", - "
+0320:         K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->rk_n_stages_plus1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_3);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_3 = 0;\n",
-       "  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  __pyx_t_26 = ((PyArrayObject *)__pyx_t_2);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_K.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_K.rcbuffer->pybuffer, (PyObject*)__pyx_t_26, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_K.rcbuffer->pybuffer, (PyObject*)__pyx_v_K, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      }\n",
-       "      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_K.diminfo[0].strides = __pyx_pybuffernd_K.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_K.diminfo[0].shape = __pyx_pybuffernd_K.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_K.diminfo[1].strides = __pyx_pybuffernd_K.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_K.diminfo[1].shape = __pyx_pybuffernd_K.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 320, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_26 = 0;\n",
-       "  __pyx_v_K = ((PyArrayObject *)__pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "
 0321: 
\n", - "
 0322:         # Setup memory views.
\n", - "
+0323:         self.K_view   = K
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_K), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 323, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->K_view, 0);\n",
-       "  __pyx_v_self->K_view = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
+0324:         self.K_T_view = self.K_view.T
\n", - "
  __pyx_t_27 = __pyx_v_self->K_view;\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_t_27, 1);\n",
-       "  if (unlikely((__pyx_memslice_transpose(&__pyx_t_27) < 0))) __PYX_ERR(0, 324, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->K_T_view, 0);\n",
-       "  __pyx_v_self->K_T_view = __pyx_t_27;\n",
-       "  __pyx_t_27.memview = NULL;\n",
-       "  __pyx_t_27.data = NULL;\n",
-       "
 0325: 
\n", - "
 0326:         # Initialize dy_new_view for start of integration (important for first_step calculation)
\n", - "
+0327:         if not self.capture_extra:
\n", - "
  __pyx_t_15 = (!(__pyx_v_self->capture_extra != 0));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 0328:             # If `capture_extra` is True then this step was already performed so we can skip it.
\n", - "
+0329:             self.diffeq()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
 0330: 
\n", - "
+0331:         for i in range(self.y_size):
\n", - "
  __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_14 = __pyx_t_17;\n",
-       "  for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_14; __pyx_t_16+=1) {\n",
-       "    __pyx_v_i = __pyx_t_16;\n",
-       "
+0332:             self.dy_old_view[i] = self.dy_new_view[i]
\n", - "
    __pyx_t_20 = __pyx_v_i;\n",
-       "    __pyx_t_22 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_22)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_20)) )));\n",
-       "  }\n",
-       "
 0333: 
\n", - "
 0334:         # Determine first step
\n", - "
+0335:         self.first_step = first_step
\n", - "
  __pyx_v_self->first_step = __pyx_v_first_step;\n",
-       "
+0336:         if self.first_step == 0.:
\n", - "
  __pyx_t_15 = (__pyx_v_self->first_step == 0.);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L21;\n",
-       "  }\n",
-       "
+0337:             self.step_size = self.calc_first_step()
\n", - "
    __pyx_v_self->step_size = ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->calc_first_step(__pyx_v_self);\n",
-       "
 0338:         else:
\n", - "
+0339:             if self.first_step <= 0.:
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_15 = (__pyx_v_self->first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_15)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0340:                 self.status = -8
\n", - "
      __pyx_v_self->status = -8;\n",
-       "
+0341:                 self.message = "Attribute error."
\n", - "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "      __Pyx_DECREF(__pyx_v_self->message);\n",
-       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+0342:                 raise AttributeError('Error in user-provided step size: Step size must be a positive number.')
\n", - "
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __PYX_ERR(0, 342, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 342, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__25);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__25);\n",
-       "
+0343:             elif self.first_step > self.t_delta_abs:
\n", - "
    __pyx_t_15 = (__pyx_v_self->first_step > __pyx_v_self->t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_15)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0344:                 self.status = -8
\n", - "
      __pyx_v_self->status = -8;\n",
-       "
+0345:                 self.message = "Attribute error."
\n", - "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "      __Pyx_DECREF(__pyx_v_self->message);\n",
-       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+0346:                 raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')
\n", - "
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size_2); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 346, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__26);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__26);\n",
-       "
+0347:             self.step_size = self.first_step
\n", - "
    __pyx_t_19 = __pyx_v_self->first_step;\n",
-       "    __pyx_v_self->step_size = __pyx_t_19;\n",
-       "  }\n",
-       "  __pyx_L21:;\n",
-       "
+0348:         self.max_step_size = max_step_size
\n", - "
  __pyx_v_self->max_step_size = __pyx_v_max_step_size;\n",
-       "
 0349: 
\n", - "
 0350:         # Set any constant parameters that the user has set
\n", - "
+0351:         self.update_constants()
\n", - "
  ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->update_constants(__pyx_v_self);\n",
-       "
 0352: 
\n", - "
 0353:         # Run solver if requested
\n", - "
+0354:         if auto_solve:
\n", - "
  __pyx_t_15 = (__pyx_v_auto_solve != 0);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 0355:             # We know for a fact that this is the first time solve will be called
\n", - "
 0356:             #  so we do not need to reset the state.
\n", - "
+0357:             self._solve(reset=False)
\n", - "
    __pyx_t_28.__pyx_n = 1;\n",
-       "    __pyx_t_28.reset = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->_solve(__pyx_v_self, &__pyx_t_28); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 357, __pyx_L1_error)\n",
-       "
 0358: 
\n", - "
 0359: 
\n", - "
+0360:     cpdef void reset_state(self):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_reset_state(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, int __pyx_skip_dispatch) {\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  PyArrayObject *__pyx_v_solution_extra_fake = 0;\n",
-       "  PyArrayObject *__pyx_v_solution_y_fake = 0;\n",
-       "  PyArrayObject *__pyx_v_solution_t_fake = 0;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_solution_extra_fake;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_solution_extra_fake;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_solution_t_fake;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_solution_t_fake;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_solution_y_fake;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_solution_y_fake;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"reset_state\", 0);\n",
-       "  __pyx_pybuffer_solution_extra_fake.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_solution_extra_fake.refcount = 0;\n",
-       "  __pyx_pybuffernd_solution_extra_fake.data = NULL;\n",
-       "  __pyx_pybuffernd_solution_extra_fake.rcbuffer = &__pyx_pybuffer_solution_extra_fake;\n",
-       "  __pyx_pybuffer_solution_y_fake.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_solution_y_fake.refcount = 0;\n",
-       "  __pyx_pybuffernd_solution_y_fake.data = NULL;\n",
-       "  __pyx_pybuffernd_solution_y_fake.rcbuffer = &__pyx_pybuffer_solution_y_fake;\n",
-       "  __pyx_pybuffer_solution_t_fake.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_solution_t_fake.refcount = 0;\n",
-       "  __pyx_pybuffernd_solution_t_fake.data = NULL;\n",
-       "  __pyx_pybuffernd_solution_t_fake.rcbuffer = &__pyx_pybuffer_solution_t_fake;\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_reset_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state)) {\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;\n",
-       "        __pyx_t_5 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
-       "          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
-       "          if (likely(__pyx_t_4)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
-       "            __Pyx_INCREF(__pyx_t_4);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_3, function);\n",
-       "            __pyx_t_5 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[1] = {__pyx_t_4, };\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);\n",
-       "          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_17);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_23, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_24, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.reset_state\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_solution_extra_fake);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_solution_y_fake);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_solution_t_fake);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "PyDoc_STRVAR(__pyx_doc_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_2reset_state, \" Resets the integrator to its initial state. \");\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state = {\"reset_state\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_2reset_state};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"reset_state (wrapper)\", 0);\n",
-       "  if (unlikely(__pyx_nargs > 0)) {\n",
-       "    __Pyx_RaiseArgtupleInvalid(\"reset_state\", 1, 0, 0, __pyx_nargs); return NULL;}\n",
-       "  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, \"reset_state\", 0))) return NULL;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_2reset_state(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_2reset_state(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"reset_state\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_reset_state(__pyx_v_self, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __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_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.reset_state\", __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__50 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__50);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__50);\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_3reset_state, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_reset_state, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_reset_state, __pyx_t_7) < 0) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_reset_state, 360, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 360, __pyx_L1_error)\n",
-       "
 0361:         """ Resets the integrator to its initial state. """
\n", - "
 0362:         cdef Py_ssize_t i, j
\n", - "
 0363: 
\n", - "
 0364:         # Set current and old time variables equal to t0
\n", - "
+0365:         self.t_old = self.t_start
\n", - "
  __pyx_t_6 = __pyx_v_self->t_start;\n",
-       "  __pyx_v_self->t_old = __pyx_t_6;\n",
-       "
+0366:         self.t_new = self.t_start
\n", - "
  __pyx_t_6 = __pyx_v_self->t_start;\n",
-       "  __pyx_v_self->t_new = __pyx_t_6;\n",
-       "
+0367:         self.len_t = 1
\n", - "
  __pyx_v_self->len_t = 1;\n",
-       "
 0368: 
\n", - "
 0369:         # Reset y variables
\n", - "
+0370:         for i in range(self.y_size):
\n", - "
  __pyx_t_7 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_8 = __pyx_t_7;\n",
-       "  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {\n",
-       "    __pyx_v_i = __pyx_t_9;\n",
-       "
 0371:             # Set current and old y variables equal to y0
\n", - "
+0372:             self.y_new_view[i] = self.y0_view[i]
\n", - "
    __pyx_t_10 = __pyx_v_i;\n",
-       "    __pyx_t_11 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_11)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_10)) )));\n",
-       "
+0373:             self.y_old_view[i] = self.y0_view[i]
\n", - "
    __pyx_t_10 = __pyx_v_i;\n",
-       "    __pyx_t_11 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_11)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_10)) )));\n",
-       "
 0374: 
\n", - "
+0375:             for j in range(self.rk_n_stages_plus1):
\n", - "
    __pyx_t_12 = __pyx_v_self->rk_n_stages_plus1;\n",
-       "    __pyx_t_13 = __pyx_t_12;\n",
-       "    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {\n",
-       "      __pyx_v_j = __pyx_t_14;\n",
-       "
 0376:                 # Reset RK variables
\n", - "
+0377:                 self.K_view[j, i] = 0.
\n", - "
      __pyx_t_10 = __pyx_v_j;\n",
-       "      __pyx_t_11 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_10 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_11)) )) = 0.;\n",
-       "    }\n",
-       "  }\n",
-       "
 0378: 
\n", - "
 0379:         # Update any constant parameters that the user has set
\n", - "
+0380:         self.update_constants()
\n", - "
  ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->update_constants(__pyx_v_self);\n",
-       "
 0381: 
\n", - "
 0382:         # Make initial call to diffeq()
\n", - "
+0383:         self.diffeq()
\n", - "
  ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
+0384:         for i in range(self.y_size):
\n", - "
  __pyx_t_7 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_8 = __pyx_t_7;\n",
-       "  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {\n",
-       "    __pyx_v_i = __pyx_t_9;\n",
-       "
+0385:             self.dy_old_view[i] = self.dy_new_view[i]
\n", - "
    __pyx_t_11 = __pyx_v_i;\n",
-       "    __pyx_t_10 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_10)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_11)) )));\n",
-       "  }\n",
-       "
 0386: 
\n", - "
 0387:         # Determine first step size
\n", - "
+0388:         if self.first_step == 0. or self.recalc_firststep:
\n", - "
  __pyx_t_16 = (__pyx_v_self->first_step == 0.);\n",
-       "  if (!__pyx_t_16) {\n",
-       "  } else {\n",
-       "    __pyx_t_15 = __pyx_t_16;\n",
-       "    goto __pyx_L10_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_16 = (__pyx_v_self->recalc_firststep != 0);\n",
-       "  __pyx_t_15 = __pyx_t_16;\n",
-       "  __pyx_L10_bool_binop_done:;\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "    goto __pyx_L9;\n",
-       "  }\n",
-       "
+0389:             self.step_size = self.calc_first_step()
\n", - "
    __pyx_v_self->step_size = ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->calc_first_step(__pyx_v_self);\n",
-       "
 0390:         else:
\n", - "
+0391:             if self.first_step <= 0.:
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_15 = (__pyx_v_self->first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_15)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0392:                 self.status = -8
\n", - "
      __pyx_v_self->status = -8;\n",
-       "
+0393:                 self.message = "Attribute error."
\n", - "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "      __Pyx_DECREF(__pyx_v_self->message);\n",
-       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+0394:                 raise AttributeError('Error in user-provided step size: Step size must be a positive number.')
\n", - "
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __PYX_ERR(0, 394, __pyx_L1_error)\n",
-       "
+0395:             elif self.first_step > self.t_delta_abs:
\n", - "
    __pyx_t_15 = (__pyx_v_self->first_step > __pyx_v_self->t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_15)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0396:                 self.status = -8
\n", - "
      __pyx_v_self->status = -8;\n",
-       "
+0397:                 self.message = "Attribute error."
\n", - "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "      __Pyx_DECREF(__pyx_v_self->message);\n",
-       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+0398:                 raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')
\n", - "
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __PYX_ERR(0, 398, __pyx_L1_error)\n",
-       "
+0399:             self.step_size = self.first_step
\n", - "
    __pyx_t_6 = __pyx_v_self->first_step;\n",
-       "    __pyx_v_self->step_size = __pyx_t_6;\n",
-       "  }\n",
-       "  __pyx_L9:;\n",
-       "
 0400: 
\n", - "
 0401:         # Reset output storage
\n", - "
+0402:         self.num_concats = 1
\n", - "
  __pyx_v_self->num_concats = 1;\n",
-       "
 0403: 
\n", - "
 0404:         # Reset public variables to clear any old solutions.
\n", - "
 0405:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake
\n", - "
 0406:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake
\n", - "
+0407:         solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_17);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_17) < 0) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__20, __pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_17);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  __pyx_t_18 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer);\n",
-       "    __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_5 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer, (PyObject*)__pyx_v_solution_extra_fake, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21);\n",
-       "      }\n",
-       "      __pyx_t_19 = __pyx_t_20 = __pyx_t_21 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_solution_extra_fake.diminfo[0].strides = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_solution_extra_fake.diminfo[0].shape = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_solution_extra_fake.diminfo[1].strides = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_solution_extra_fake.diminfo[1].shape = __pyx_pybuffernd_solution_extra_fake.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 407, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_18 = 0;\n",
-       "  __pyx_v_solution_extra_fake = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+0408:         solution_y_fake     = np.nan * np.ones((1, 1), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_17);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__20, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyNumber_Multiply(__pyx_t_17, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  __pyx_t_18 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer);\n",
-       "    __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_5 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer, (PyObject*)__pyx_v_solution_y_fake, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_21, __pyx_t_20, __pyx_t_19);\n",
-       "      }\n",
-       "      __pyx_t_21 = __pyx_t_20 = __pyx_t_19 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_solution_y_fake.diminfo[0].strides = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_solution_y_fake.diminfo[0].shape = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_solution_y_fake.diminfo[1].strides = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_solution_y_fake.diminfo[1].shape = __pyx_pybuffernd_solution_y_fake.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 408, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_18 = 0;\n",
-       "  __pyx_v_solution_y_fake = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+0409:         solution_t_fake     = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_17);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_tuple__21, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  __pyx_t_22 = ((PyArrayObject *)__pyx_t_1);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer);\n",
-       "    __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer, (PyObject*)__pyx_t_22, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_5 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer, (PyObject*)__pyx_v_solution_t_fake, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21);\n",
-       "      }\n",
-       "      __pyx_t_19 = __pyx_t_20 = __pyx_t_21 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_solution_t_fake.diminfo[0].strides = __pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_solution_t_fake.diminfo[0].shape = __pyx_pybuffernd_solution_t_fake.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 409, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_22 = 0;\n",
-       "  __pyx_v_solution_t_fake = ((PyArrayObject *)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+0410:         self.solution_t_view     = solution_t_fake
\n", - "
  __pyx_t_23 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_solution_t_fake), PyBUF_WRITABLE); if (unlikely(!__pyx_t_23.memview)) __PYX_ERR(0, 410, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_t_view, 0);\n",
-       "  __pyx_v_self->solution_t_view = __pyx_t_23;\n",
-       "  __pyx_t_23.memview = NULL;\n",
-       "  __pyx_t_23.data = NULL;\n",
-       "
+0411:         self.solution_extra_view = solution_extra_fake
\n", - "
  __pyx_t_24 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_solution_extra_fake), PyBUF_WRITABLE); if (unlikely(!__pyx_t_24.memview)) __PYX_ERR(0, 411, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_extra_view, 0);\n",
-       "  __pyx_v_self->solution_extra_view = __pyx_t_24;\n",
-       "  __pyx_t_24.memview = NULL;\n",
-       "  __pyx_t_24.data = NULL;\n",
-       "
+0412:         self.solution_y_view     = solution_y_fake
\n", - "
  __pyx_t_24 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_solution_y_fake), PyBUF_WRITABLE); if (unlikely(!__pyx_t_24.memview)) __PYX_ERR(0, 412, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_y_view, 0);\n",
-       "  __pyx_v_self->solution_y_view = __pyx_t_24;\n",
-       "  __pyx_t_24.memview = NULL;\n",
-       "  __pyx_t_24.data = NULL;\n",
-       "
 0413: 
\n", - "
 0414:         # Other flags and messages
\n", - "
+0415:         self.success = False
\n", - "
  __pyx_v_self->success = 0;\n",
-       "
+0416:         self.status = -5  # status == -5 means that reset has been called but solve has not yet been called.
\n", - "
  __pyx_v_self->status = -5;\n",
-       "
+0417:         self.message = "CySolver has been reset."
\n", - "
  __Pyx_INCREF(__pyx_kp_u_CySolver_has_been_reset);\n",
-       "  __Pyx_GIVEREF(__pyx_kp_u_CySolver_has_been_reset);\n",
-       "  __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "  __Pyx_DECREF(__pyx_v_self->message);\n",
-       "  __pyx_v_self->message = __pyx_kp_u_CySolver_has_been_reset;\n",
-       "
 0418: 
\n", - "
 0419: 
\n", - "
+0420:     cdef double calc_first_step(self) noexcept nogil:
\n", - "
static double __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_calc_first_step(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  double __pyx_v_step_size;\n",
-       "  double __pyx_v_d0;\n",
-       "  double __pyx_v_d1;\n",
-       "  double __pyx_v_d2;\n",
-       "  double __pyx_v_d0_abs;\n",
-       "  double __pyx_v_d1_abs;\n",
-       "  double __pyx_v_d2_abs;\n",
-       "  double __pyx_v_h0;\n",
-       "  double __pyx_v_h1;\n",
-       "  double __pyx_v_scale;\n",
-       "  double __pyx_v_y_old_tmp;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  double __pyx_v_h0_direction;\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 0421:         """ Determine initial step size. """
\n", - "
 0422: 
\n", - "
 0423:         cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale
\n", - "
 0424:         cdef double y_old_tmp
\n", - "
 0425: 
\n", - "
 0426:         # Select an initial step size based on the differential equation.
\n", - "
 0427:         # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
\n", - "
 0428:         #        Equations I: Nonstiff Problems", Sec. II.4.
\n", - "
+0429:         if self.y_size == 0:
\n", - "
  __pyx_t_1 = (__pyx_v_self->y_size == 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
+0430:             step_size = INF
\n", - "
    __pyx_v_step_size = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF;\n",
-       "
 0431:         else:
\n", - "
 0432:             # Find the norm for d0 and d1
\n", - "
+0433:             d0 = 0.
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_d0 = 0.;\n",
-       "
+0434:             d1 = 0.
\n", - "
    __pyx_v_d1 = 0.;\n",
-       "
+0435:             for i in range(self.y_size):
\n", - "
    __pyx_t_2 = __pyx_v_self->y_size;\n",
-       "    __pyx_t_3 = __pyx_t_2;\n",
-       "    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {\n",
-       "      __pyx_v_i = __pyx_t_4;\n",
-       "
+0436:                 y_old_tmp = self.y_old_view[i]
\n", - "
      __pyx_t_5 = __pyx_v_i;\n",
-       "      __pyx_v_y_old_tmp = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_5)) )));\n",
-       "
+0437:                 scale = self.atol + fabs(y_old_tmp) * self.rtol
\n", - "
      __pyx_v_scale = (__pyx_v_self->atol + (fabs(__pyx_v_y_old_tmp) * __pyx_v_self->rtol));\n",
-       "
 0438: 
\n", - "
+0439:                 d0_abs = fabs(y_old_tmp / scale)
\n", - "
      __pyx_v_d0_abs = fabs((__pyx_v_y_old_tmp / __pyx_v_scale));\n",
-       "
+0440:                 d1_abs = fabs(self.dy_old_view[i] / scale)
\n", - "
      __pyx_t_5 = __pyx_v_i;\n",
-       "      __pyx_v_d1_abs = fabs(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_5)) ))) / __pyx_v_scale));\n",
-       "
+0441:                 d0 += (d0_abs * d0_abs)
\n", - "
      __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
-       "
+0442:                 d1 += (d1_abs * d1_abs)
\n", - "
      __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
-       "    }\n",
-       "
 0443: 
\n", - "
+0444:             d0 = sqrt(d0) / self.y_size_sqrt
\n", - "
    __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_self->y_size_sqrt);\n",
-       "
+0445:             d1 = sqrt(d1) / self.y_size_sqrt
\n", - "
    __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_self->y_size_sqrt);\n",
-       "
 0446: 
\n", - "
+0447:             if d0 < 1.e-5 or d1 < 1.e-5:
\n", - "
    __pyx_t_6 = (__pyx_v_d0 < 1.e-5);\n",
-       "    if (!__pyx_t_6) {\n",
-       "    } else {\n",
-       "      __pyx_t_1 = __pyx_t_6;\n",
-       "      goto __pyx_L7_bool_binop_done;\n",
-       "    }\n",
-       "    __pyx_t_6 = (__pyx_v_d1 < 1.e-5);\n",
-       "    __pyx_t_1 = __pyx_t_6;\n",
-       "    __pyx_L7_bool_binop_done:;\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L6;\n",
-       "    }\n",
-       "
+0448:                 h0 = 1.e-6
\n", - "
      __pyx_v_h0 = 1.e-6;\n",
-       "
 0449:             else:
\n", - "
+0450:                 h0 = 0.01 * d0 / d1
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
-       "    }\n",
-       "    __pyx_L6:;\n",
-       "
 0451: 
\n", - "
+0452:             if self.direction_flag:
\n", - "
    __pyx_t_1 = (__pyx_v_self->direction_flag != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L9;\n",
-       "    }\n",
-       "
+0453:                 h0_direction = h0
\n", - "
      __pyx_v_h0_direction = __pyx_v_h0;\n",
-       "
 0454:             else:
\n", - "
+0455:                 h0_direction = -h0
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_h0_direction = (-__pyx_v_h0);\n",
-       "    }\n",
-       "    __pyx_L9:;\n",
-       "
 0456: 
\n", - "
+0457:             self.t_new = self.t_old + h0_direction
\n", - "
    __pyx_v_self->t_new = (__pyx_v_self->t_old + __pyx_v_h0_direction);\n",
-       "
+0458:             for i in range(self.y_size):
\n", - "
    __pyx_t_2 = __pyx_v_self->y_size;\n",
-       "    __pyx_t_3 = __pyx_t_2;\n",
-       "    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {\n",
-       "      __pyx_v_i = __pyx_t_4;\n",
-       "
+0459:                 self.y_new_view[i] = self.y_old_view[i] + h0_direction * self.dy_old_view[i]
\n", - "
      __pyx_t_5 = __pyx_v_i;\n",
-       "      __pyx_t_7 = __pyx_v_i;\n",
-       "      __pyx_t_8 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_8)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_5)) ))) + (__pyx_v_h0_direction * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_7)) )))));\n",
-       "    }\n",
-       "
 0460: 
\n", - "
 0461:             # Update dy_new_view
\n", - "
+0462:             self.diffeq()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
 0463: 
\n", - "
 0464:             # Find the norm for d2
\n", - "
+0465:             d2 = 0.
\n", - "
    __pyx_v_d2 = 0.;\n",
-       "
+0466:             for i in range(self.y_size):
\n", - "
    __pyx_t_2 = __pyx_v_self->y_size;\n",
-       "    __pyx_t_3 = __pyx_t_2;\n",
-       "    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {\n",
-       "      __pyx_v_i = __pyx_t_4;\n",
-       "
+0467:                 scale = self.atol + fabs(self.y_old_view[i]) * self.rtol
\n", - "
      __pyx_t_7 = __pyx_v_i;\n",
-       "      __pyx_v_scale = (__pyx_v_self->atol + (fabs((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_7)) )))) * __pyx_v_self->rtol));\n",
-       "
+0468:                 d2_abs = fabs( (self.dy_new_view[i] - self.dy_old_view[i]) / scale)
\n", - "
      __pyx_t_7 = __pyx_v_i;\n",
-       "      __pyx_t_5 = __pyx_v_i;\n",
-       "      __pyx_v_d2_abs = fabs((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_7)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_5)) )))) / __pyx_v_scale));\n",
-       "
+0469:                 d2 += (d2_abs * d2_abs)
\n", - "
      __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
-       "    }\n",
-       "
 0470: 
\n", - "
+0471:             d2 = sqrt(d2) / (h0 * self.y_size_sqrt)
\n", - "
    __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_self->y_size_sqrt));\n",
-       "
 0472: 
\n", - "
+0473:             if d1 <= 1.e-15 and d2 <= 1.e-15:
\n", - "
    __pyx_t_6 = (__pyx_v_d1 <= 1.e-15);\n",
-       "    if (__pyx_t_6) {\n",
-       "    } else {\n",
-       "      __pyx_t_1 = __pyx_t_6;\n",
-       "      goto __pyx_L15_bool_binop_done;\n",
-       "    }\n",
-       "    __pyx_t_6 = (__pyx_v_d2 <= 1.e-15);\n",
-       "    __pyx_t_1 = __pyx_t_6;\n",
-       "    __pyx_L15_bool_binop_done:;\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L14;\n",
-       "    }\n",
-       "
+0474:                 h1 = max(1.e-6, h0 * 1.e-3)
\n", - "
      __pyx_t_9 = (__pyx_v_h0 * 1.e-3);\n",
-       "      __pyx_t_10 = 1.e-6;\n",
-       "      if ((__pyx_t_9 > __pyx_t_10)) {\n",
-       "        __pyx_t_11 = __pyx_t_9;\n",
-       "      } else {\n",
-       "        __pyx_t_11 = __pyx_t_10;\n",
-       "      }\n",
-       "      __pyx_v_h1 = __pyx_t_11;\n",
-       "
 0475:             else:
\n", - "
+0476:                 h1 = (0.01 / max(d1, d2))**self.error_expo
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_11 = __pyx_v_d2;\n",
-       "      __pyx_t_9 = __pyx_v_d1;\n",
-       "      if ((__pyx_t_11 > __pyx_t_9)) {\n",
-       "        __pyx_t_10 = __pyx_t_11;\n",
-       "      } else {\n",
-       "        __pyx_t_10 = __pyx_t_9;\n",
-       "      }\n",
-       "      __pyx_v_h1 = pow((0.01 / __pyx_t_10), __pyx_v_self->error_expo);\n",
-       "    }\n",
-       "    __pyx_L14:;\n",
-       "
 0477: 
\n", - "
+0478:             step_size = max(10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old),
\n", - "
    __pyx_t_9 = (10. * fabs((nextafter(__pyx_v_self->t_old, __pyx_v_self->direction_inf) - __pyx_v_self->t_old)));\n",
-       "
+0479:                             min(100. * h0, h1))
\n", - "
    __pyx_t_10 = __pyx_v_h1;\n",
-       "    __pyx_t_11 = (100. * __pyx_v_h0);\n",
-       "    if ((__pyx_t_10 < __pyx_t_11)) {\n",
-       "      __pyx_t_9 = __pyx_t_10;\n",
-       "    } else {\n",
-       "      __pyx_t_9 = __pyx_t_11;\n",
-       "    }\n",
-       "    __pyx_t_10 = __pyx_t_9;\n",
-       "/* … */\n",
-       "    if ((__pyx_t_10 > __pyx_t_9)) {\n",
-       "      __pyx_t_11 = __pyx_t_10;\n",
-       "    } else {\n",
-       "      __pyx_t_11 = __pyx_t_9;\n",
-       "    }\n",
-       "    __pyx_v_step_size = __pyx_t_11;\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
 0480: 
\n", - "
+0481:         return step_size
\n", - "
  __pyx_r = __pyx_v_step_size;\n",
-       "  goto __pyx_L0;\n",
-       "
 0482: 
\n", - "
+0483:     cdef void rk_step(self) noexcept nogil:
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_rk_step(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  Py_ssize_t __pyx_v_s;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  double __pyx_v_min_step;\n",
-       "  double __pyx_v_step;\n",
-       "  double __pyx_v_step_factor;\n",
-       "  double __pyx_v_time_tmp;\n",
-       "  double __pyx_v_t_delta_check;\n",
-       "  double __pyx_v_C_at_s;\n",
-       "  double __pyx_v_A_at_sj;\n",
-       "  double __pyx_v_A_at_10;\n",
-       "  double __pyx_v_B_at_j;\n",
-       "  double __pyx_v_scale;\n",
-       "  double __pyx_v_K_scale;\n",
-       "  double __pyx_v_dy_tmp;\n",
-       "  double __pyx_v_error_norm3;\n",
-       "  double __pyx_v_error_norm5;\n",
-       "  double __pyx_v_error_norm;\n",
-       "  double __pyx_v_error_dot_1;\n",
-       "  double __pyx_v_error_dot_2;\n",
-       "  double __pyx_v_error_denom;\n",
-       "  double __pyx_v_error_pow;\n",
-       "  bool __pyx_v_step_accepted;\n",
-       "  bool __pyx_v_step_rejected;\n",
-       "  bool __pyx_v_step_error;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "}\n",
-       "
 0484: 
\n", - "
 0485:         # Initialize step variables
\n", - "
 0486:         cdef Py_ssize_t s, i, j
\n", - "
 0487:         cdef double min_step, step, step_factor, time_tmp, t_delta_check
\n", - "
 0488:         cdef double C_at_s, A_at_sj, A_at_10, B_at_j
\n", - "
 0489:         cdef double scale, K_scale, dy_tmp
\n", - "
 0490:         cdef double error_norm3, error_norm5, error_norm, error_dot_1, error_dot_2, error_denom, error_pow
\n", - "
 0491:         cdef bool_cpp_t step_accepted, step_rejected, step_error
\n", - "
 0492: 
\n", - "
 0493:         # Run RK integration step
\n", - "
 0494:         # Determine step size based on previous loop
\n", - "
 0495:         # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)
\n", - "
+0496:         min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old)
\n", - "
  __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_self->t_old, __pyx_v_self->direction_inf) - __pyx_v_self->t_old)));\n",
-       "
 0497:         # Look for over/undershoots in previous step size
\n", - "
+0498:         if self.step_size > self.max_step_size:
\n", - "
  __pyx_t_1 = (__pyx_v_self->step_size > __pyx_v_self->max_step_size);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
+0499:             self.step_size = self.max_step_size
\n", - "
    __pyx_t_2 = __pyx_v_self->max_step_size;\n",
-       "    __pyx_v_self->step_size = __pyx_t_2;\n",
-       "
+0500:         elif self.step_size < min_step:
\n", - "
  __pyx_t_1 = (__pyx_v_self->step_size < __pyx_v_min_step);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
+0501:             self.step_size = min_step
\n", - "
    __pyx_v_self->step_size = __pyx_v_min_step;\n",
-       "
 0502: 
\n", - "
 0503:         # Determine new step size
\n", - "
+0504:         step_accepted = False
\n", - "
  __pyx_v_step_accepted = 0;\n",
-       "
+0505:         step_rejected = False
\n", - "
  __pyx_v_step_rejected = 0;\n",
-       "
+0506:         step_error    = False
\n", - "
  __pyx_v_step_error = 0;\n",
-       "
 0507: 
\n", - "
 0508:         # Optimization since this A is called consistently and does not change.
\n", - "
+0509:         A_at_10 = self.A_view[1, 0]
\n", - "
  __pyx_t_3 = 1;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_v_A_at_10 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->A_view.data + __pyx_t_3 * __pyx_v_self->A_view.strides[0]) )) + __pyx_t_4)) )));\n",
-       "
 0510: 
\n", - "
 0511:         # # Step Loop
\n", - "
+0512:         while not step_accepted:
\n", - "
  while (1) {\n",
-       "    __pyx_t_1 = (!(__pyx_v_step_accepted != 0));\n",
-       "    if (!__pyx_t_1) break;\n",
-       "
 0513: 
\n", - "
+0514:             if self.step_size < min_step:
\n", - "
    __pyx_t_1 = (__pyx_v_self->step_size < __pyx_v_min_step);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0515:                 step_error  = True
\n", - "
      __pyx_v_step_error = 1;\n",
-       "
+0516:                 self.status = -1
\n", - "
      __pyx_v_self->status = -1;\n",
-       "
+0517:                 break
\n", - "
      goto __pyx_L5_break;\n",
-       "
 0518: 
\n", - "
 0519:             # Move time forward for this particular step size
\n", - "
+0520:             if self.direction_flag:
\n", - "
    __pyx_t_1 = (__pyx_v_self->direction_flag != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L7;\n",
-       "    }\n",
-       "
+0521:                 step = self.step_size
\n", - "
      __pyx_t_2 = __pyx_v_self->step_size;\n",
-       "      __pyx_v_step = __pyx_t_2;\n",
-       "
+0522:                 t_delta_check = self.t_new - self.t_end
\n", - "
      __pyx_v_t_delta_check = (__pyx_v_self->t_new - __pyx_v_self->t_end);\n",
-       "
 0523:             else:
\n", - "
+0524:                 step = -self.step_size
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_step = (-__pyx_v_self->step_size);\n",
-       "
+0525:                 t_delta_check = self.t_end - self.t_new
\n", - "
      __pyx_v_t_delta_check = (__pyx_v_self->t_end - __pyx_v_self->t_new);\n",
-       "    }\n",
-       "    __pyx_L7:;\n",
-       "
+0526:             self.t_new = self.t_old + step
\n", - "
    __pyx_v_self->t_new = (__pyx_v_self->t_old + __pyx_v_step);\n",
-       "
 0527: 
\n", - "
 0528:             # Check that we are not at the end of integration with that move
\n", - "
+0529:             if t_delta_check > 0.:
\n", - "
    __pyx_t_1 = (__pyx_v_t_delta_check > 0.);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0530:                 self.t_new = self.t_end
\n", - "
      __pyx_t_2 = __pyx_v_self->t_end;\n",
-       "      __pyx_v_self->t_new = __pyx_t_2;\n",
-       "
 0531: 
\n", - "
 0532:                 # Correct the step if we were at the end of integration
\n", - "
+0533:                 step = self.t_new - self.t_old
\n", - "
      __pyx_v_step = (__pyx_v_self->t_new - __pyx_v_self->t_old);\n",
-       "
+0534:                 if self.direction_flag:
\n", - "
      __pyx_t_1 = (__pyx_v_self->direction_flag != 0);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "        goto __pyx_L9;\n",
-       "      }\n",
-       "
+0535:                     self.step_size = step
\n", - "
        __pyx_v_self->step_size = __pyx_v_step;\n",
-       "
 0536:                 else:
\n", - "
+0537:                     self.step_size = -step
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_self->step_size = (-__pyx_v_step);\n",
-       "      }\n",
-       "      __pyx_L9:;\n",
-       "
 0538: 
\n", - "
 0539:             # Calculate derivative using RK method
\n", - "
 0540: 
\n", - "
 0541:             # t_new must be updated for each loop of s in order to make the diffeq calls.
\n", - "
 0542:             # But we need to return to its original value later on. Store in temp variable.
\n", - "
+0543:             time_tmp = self.t_new
\n", - "
    __pyx_t_2 = __pyx_v_self->t_new;\n",
-       "    __pyx_v_time_tmp = __pyx_t_2;\n",
-       "
+0544:             for s in range(1, self.len_C):
\n", - "
    __pyx_t_5 = __pyx_v_self->len_C;\n",
-       "    __pyx_t_6 = __pyx_t_5;\n",
-       "    for (__pyx_t_7 = 1; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {\n",
-       "      __pyx_v_s = __pyx_t_7;\n",
-       "
+0545:                 C_at_s = self.C_view[s]
\n", - "
      __pyx_t_4 = __pyx_v_s;\n",
-       "      __pyx_v_C_at_s = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->C_view.data) + __pyx_t_4)) )));\n",
-       "
 0546: 
\n", - "
 0547:                 # Update t_new so it can be used in the diffeq call.
\n", - "
+0548:                 self.t_new = self.t_old + C_at_s * step
\n", - "
      __pyx_v_self->t_new = (__pyx_v_self->t_old + (__pyx_v_C_at_s * __pyx_v_step));\n",
-       "
 0549: 
\n", - "
 0550:                 # Dot Product (K, a) * step
\n", - "
+0551:                 if s == 1:
\n", - "
      __pyx_t_1 = (__pyx_v_s == 1);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "        goto __pyx_L12;\n",
-       "      }\n",
-       "
+0552:                     for i in range(self.y_size):
\n", - "
        __pyx_t_8 = __pyx_v_self->y_size;\n",
-       "        __pyx_t_9 = __pyx_t_8;\n",
-       "        for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {\n",
-       "          __pyx_v_i = __pyx_t_10;\n",
-       "
 0553:                         # Set the first column of K
\n", - "
+0554:                         dy_tmp = self.dy_old_view[i]
\n", - "
          __pyx_t_4 = __pyx_v_i;\n",
-       "          __pyx_v_dy_tmp = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_4)) )));\n",
-       "
+0555:                         self.K_view[0, i] = dy_tmp
\n", - "
          __pyx_t_4 = 0;\n",
-       "          __pyx_t_3 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_4 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_3)) )) = __pyx_v_dy_tmp;\n",
-       "
 0556: 
\n", - "
 0557:                         # Calculate y_new for s==1
\n", - "
+0558:                         self.y_new_view[i] = self.y_old_view[i] + (dy_tmp * A_at_10 * step)
\n", - "
          __pyx_t_3 = __pyx_v_i;\n",
-       "          __pyx_t_4 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_4)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_3)) ))) + ((__pyx_v_dy_tmp * __pyx_v_A_at_10) * __pyx_v_step));\n",
-       "        }\n",
-       "
 0559:                 else:
\n", - "
+0560:                     for j in range(s):
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_8 = __pyx_v_s;\n",
-       "        __pyx_t_9 = __pyx_t_8;\n",
-       "        for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {\n",
-       "          __pyx_v_j = __pyx_t_10;\n",
-       "
+0561:                         A_at_sj = self.A_view[s, j]
\n", - "
          __pyx_t_3 = __pyx_v_s;\n",
-       "          __pyx_t_4 = __pyx_v_j;\n",
-       "          __pyx_v_A_at_sj = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->A_view.data + __pyx_t_3 * __pyx_v_self->A_view.strides[0]) )) + __pyx_t_4)) )));\n",
-       "
+0562:                         for i in range(self.y_size):
\n", - "
          __pyx_t_11 = __pyx_v_self->y_size;\n",
-       "          __pyx_t_12 = __pyx_t_11;\n",
-       "          for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {\n",
-       "            __pyx_v_i = __pyx_t_13;\n",
-       "
+0563:                             if j == 0:
\n", - "
            __pyx_t_1 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "            }\n",
-       "
 0564:                                 # Initialize
\n", - "
+0565:                                 self.y_new_view[i] = self.y_old_view[i]
\n", - "
              __pyx_t_4 = __pyx_v_i;\n",
-       "              __pyx_t_3 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_3)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_4)) )));\n",
-       "
 0566: 
\n", - "
+0567:                             self.y_new_view[i] += self.K_view[j, i] * A_at_sj * step
\n", - "
            __pyx_t_4 = __pyx_v_j;\n",
-       "            __pyx_t_3 = __pyx_v_i;\n",
-       "            __pyx_t_14 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_14)) )) += (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_4 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_3)) ))) * __pyx_v_A_at_sj) * __pyx_v_step);\n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "      __pyx_L12:;\n",
-       "
 0568: 
\n", - "
 0569:                 # Call diffeq to update K with the new dydt
\n", - "
+0570:                 self.diffeq()
\n", - "
      ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
 0571: 
\n", - "
+0572:                 for i in range(self.y_size):
\n", - "
      __pyx_t_8 = __pyx_v_self->y_size;\n",
-       "      __pyx_t_9 = __pyx_t_8;\n",
-       "      for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {\n",
-       "        __pyx_v_i = __pyx_t_10;\n",
-       "
+0573:                     self.K_view[s, i] = self.dy_new_view[i]
\n", - "
        __pyx_t_3 = __pyx_v_i;\n",
-       "        __pyx_t_4 = __pyx_v_s;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_4 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_14)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_3)) )));\n",
-       "      }\n",
-       "    }\n",
-       "
 0574: 
\n", - "
 0575:             # Restore t_new to its previous value.
\n", - "
+0576:             self.t_new = time_tmp
\n", - "
    __pyx_v_self->t_new = __pyx_v_time_tmp;\n",
-       "
 0577: 
\n", - "
 0578:             # Dot Product (K, B) * step
\n", - "
+0579:             for j in range(self.rk_n_stages):
\n", - "
    __pyx_t_5 = __pyx_v_self->rk_n_stages;\n",
-       "    __pyx_t_6 = __pyx_t_5;\n",
-       "    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {\n",
-       "      __pyx_v_j = __pyx_t_7;\n",
-       "
+0580:                 B_at_j = self.B_view[j]
\n", - "
      __pyx_t_3 = __pyx_v_j;\n",
-       "      __pyx_v_B_at_j = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->B_view.data) + __pyx_t_3)) )));\n",
-       "
 0581:                 # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match
\n", - "
 0582:                 #  the shape of B.
\n", - "
+0583:                 for i in range(self.y_size):
\n", - "
      __pyx_t_8 = __pyx_v_self->y_size;\n",
-       "      __pyx_t_9 = __pyx_t_8;\n",
-       "      for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {\n",
-       "        __pyx_v_i = __pyx_t_10;\n",
-       "
+0584:                     if j == 0:
\n", - "
        __pyx_t_1 = (__pyx_v_j == 0);\n",
-       "        if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "        }\n",
-       "
 0585:                         # Initialize
\n", - "
+0586:                         self.y_new_view[i] = self.y_old_view[i]
\n", - "
          __pyx_t_3 = __pyx_v_i;\n",
-       "          __pyx_t_14 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_14)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_3)) )));\n",
-       "
 0587: 
\n", - "
+0588:                     self.y_new_view[i] += self.K_view[j, i] * B_at_j * step
\n", - "
        __pyx_t_3 = __pyx_v_j;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_4 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_4)) )) += (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_3 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_14)) ))) * __pyx_v_B_at_j) * __pyx_v_step);\n",
-       "      }\n",
-       "    }\n",
-       "
 0589: 
\n", - "
+0590:             self.diffeq()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
 0591: 
\n", - "
 0592:             # Check how well this step performed by calculating its error
\n", - "
+0593:             if self.rk_method == 2:
\n", - "
    __pyx_t_1 = (__pyx_v_self->rk_method == 2);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L27;\n",
-       "    }\n",
-       "
 0594:                 # Calculate Error for DOP853
\n", - "
 0595:                 # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale
\n", - "
+0596:                 error_norm3 = 0.
\n", - "
      __pyx_v_error_norm3 = 0.;\n",
-       "
+0597:                 error_norm5 = 0.
\n", - "
      __pyx_v_error_norm5 = 0.;\n",
-       "
+0598:                 for i in range(self.y_size):
\n", - "
      __pyx_t_5 = __pyx_v_self->y_size;\n",
-       "      __pyx_t_6 = __pyx_t_5;\n",
-       "      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {\n",
-       "        __pyx_v_i = __pyx_t_7;\n",
-       "
 0599:                     # Find scale of y for error calculations
\n", - "
+0600:                     scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_2 = fabs((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_14)) ))));\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_15 = fabs((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_14)) ))));\n",
-       "        if ((__pyx_t_2 > __pyx_t_15)) {\n",
-       "          __pyx_t_16 = __pyx_t_2;\n",
-       "        } else {\n",
-       "          __pyx_t_16 = __pyx_t_15;\n",
-       "        }\n",
-       "        __pyx_v_scale = (__pyx_v_self->atol + (__pyx_t_16 * __pyx_v_self->rtol));\n",
-       "
 0601: 
\n", - "
 0602:                     # Set last array of K equal to dydt
\n", - "
+0603:                     self.K_view[self.rk_n_stages, i] = self.dy_new_view[i]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_3 = __pyx_v_self->rk_n_stages;\n",
-       "        __pyx_t_4 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_3 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_4)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_14)) )));\n",
-       "
+0604:                     for j in range(self.rk_n_stages_plus1):
\n", - "
        __pyx_t_8 = __pyx_v_self->rk_n_stages_plus1;\n",
-       "        __pyx_t_9 = __pyx_t_8;\n",
-       "        for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {\n",
-       "          __pyx_v_j = __pyx_t_10;\n",
-       "
+0605:                         if j == 0:
\n", - "
          __pyx_t_1 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "          }\n",
-       "
 0606:                             # Initialize
\n", - "
+0607:                             error_dot_1 = 0.
\n", - "
            __pyx_v_error_dot_1 = 0.;\n",
-       "
+0608:                             error_dot_2 = 0.
\n", - "
            __pyx_v_error_dot_2 = 0.;\n",
-       "
 0609: 
\n", - "
+0610:                         K_scale = self.K_T_view[i, j] / scale
\n", - "
          __pyx_t_14 = __pyx_v_i;\n",
-       "          __pyx_t_4 = __pyx_v_j;\n",
-       "          __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_self->K_T_view.data) + __pyx_t_14)) ) + __pyx_t_4 * __pyx_v_self->K_T_view.strides[1]) ))) / __pyx_v_scale);\n",
-       "
+0611:                         error_dot_1 += K_scale * self.E3_view[j]
\n", - "
          __pyx_t_4 = __pyx_v_j;\n",
-       "          __pyx_v_error_dot_1 = (__pyx_v_error_dot_1 + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->E3_view.data) + __pyx_t_4)) )))));\n",
-       "
+0612:                         error_dot_2 += K_scale * self.E5_view[j]
\n", - "
          __pyx_t_4 = __pyx_v_j;\n",
-       "          __pyx_v_error_dot_2 = (__pyx_v_error_dot_2 + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->E5_view.data) + __pyx_t_4)) )))));\n",
-       "        }\n",
-       "
 0613: 
\n", - "
 0614:                     # We need the absolute value but since we are taking the square, it is guaranteed to be positive.
\n", - "
 0615:                     # TODO: This will need to change if CySolver ever accepts complex numbers
\n", - "
 0616:                     # error_norm3_abs = fabs(error_dot_1)                  
\n", - "
 0617:                     # error_norm5_abs = fabs(error_dot_2)
\n", - "
 0618: 
\n", - "
+0619:                     error_norm3 += (error_dot_1 * error_dot_1)
\n", - "
        __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_dot_1 * __pyx_v_error_dot_1));\n",
-       "
+0620:                     error_norm5 += (error_dot_2 * error_dot_2)
\n", - "
        __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_dot_2 * __pyx_v_error_dot_2));\n",
-       "      }\n",
-       "
 0621: 
\n", - "
 0622:                 # Check if errors are zero
\n", - "
+0623:                 if (error_norm5 == 0.) and (error_norm3 == 0.):
\n", - "
      __pyx_t_17 = (__pyx_v_error_norm5 == 0.);\n",
-       "      if (__pyx_t_17) {\n",
-       "      } else {\n",
-       "        __pyx_t_1 = __pyx_t_17;\n",
-       "        goto __pyx_L34_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_17 = (__pyx_v_error_norm3 == 0.);\n",
-       "      __pyx_t_1 = __pyx_t_17;\n",
-       "      __pyx_L34_bool_binop_done:;\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "        goto __pyx_L33;\n",
-       "      }\n",
-       "
+0624:                     error_norm = 0.
\n", - "
        __pyx_v_error_norm = 0.;\n",
-       "
 0625:                 else:
\n", - "
+0626:                     error_denom = error_norm5 + 0.01 * error_norm3
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
-       "
+0627:                     error_norm = self.step_size * error_norm5 / sqrt(error_denom * self.y_size_dbl)
\n", - "
        __pyx_v_error_norm = ((__pyx_v_self->step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_self->y_size_dbl)));\n",
-       "      }\n",
-       "      __pyx_L33:;\n",
-       "
 0628: 
\n", - "
 0629:             else:
\n", - "
 0630:                 # Calculate Error for RK23 and RK45
\n", - "
 0631:                 # Dot Product (K, E) * step / scale
\n", - "
+0632:                 error_norm = 0.
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_error_norm = 0.;\n",
-       "
+0633:                 for i in range(self.y_size):
\n", - "
      __pyx_t_5 = __pyx_v_self->y_size;\n",
-       "      __pyx_t_6 = __pyx_t_5;\n",
-       "      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {\n",
-       "        __pyx_v_i = __pyx_t_7;\n",
-       "
 0634:                     # Find scale of y for error calculations
\n", - "
+0635:                     scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol
\n", - "
        __pyx_t_4 = __pyx_v_i;\n",
-       "        __pyx_t_16 = fabs((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_4)) ))));\n",
-       "        __pyx_t_4 = __pyx_v_i;\n",
-       "        __pyx_t_2 = fabs((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_4)) ))));\n",
-       "        if ((__pyx_t_16 > __pyx_t_2)) {\n",
-       "          __pyx_t_15 = __pyx_t_16;\n",
-       "        } else {\n",
-       "          __pyx_t_15 = __pyx_t_2;\n",
-       "        }\n",
-       "        __pyx_v_scale = (__pyx_v_self->atol + (__pyx_t_15 * __pyx_v_self->rtol));\n",
-       "
 0636: 
\n", - "
 0637:                     # Set last array of K equal to dydt
\n", - "
+0638:                     self.K_view[self.rk_n_stages, i] = self.dy_new_view[i]
\n", - "
        __pyx_t_4 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_self->rk_n_stages;\n",
-       "        __pyx_t_3 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->K_view.data + __pyx_t_14 * __pyx_v_self->K_view.strides[0]) )) + __pyx_t_3)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_4)) )));\n",
-       "
+0639:                     for j in range(self.rk_n_stages_plus1):
\n", - "
        __pyx_t_8 = __pyx_v_self->rk_n_stages_plus1;\n",
-       "        __pyx_t_9 = __pyx_t_8;\n",
-       "        for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {\n",
-       "          __pyx_v_j = __pyx_t_10;\n",
-       "
+0640:                         if j == 0:
\n", - "
          __pyx_t_1 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "          }\n",
-       "
 0641:                             # Initialize
\n", - "
+0642:                             error_dot_1 = 0.
\n", - "
            __pyx_v_error_dot_1 = 0.;\n",
-       "
 0643: 
\n", - "
+0644:                         K_scale = self.K_T_view[i, j] / scale
\n", - "
          __pyx_t_4 = __pyx_v_i;\n",
-       "          __pyx_t_3 = __pyx_v_j;\n",
-       "          __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ ((char *) (((double *) __pyx_v_self->K_T_view.data) + __pyx_t_4)) ) + __pyx_t_3 * __pyx_v_self->K_T_view.strides[1]) ))) / __pyx_v_scale);\n",
-       "
+0645:                         error_dot_1 += K_scale * self.E_view[j] * step
\n", - "
          __pyx_t_3 = __pyx_v_j;\n",
-       "          __pyx_v_error_dot_1 = (__pyx_v_error_dot_1 + ((__pyx_v_K_scale * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->E_view.data) + __pyx_t_3)) )))) * __pyx_v_step));\n",
-       "        }\n",
-       "
 0646: 
\n", - "
 0647:                     # We need the absolute value but since we are taking the square, it is guaranteed to be positive.
\n", - "
 0648:                     # TODO: This will need to change if CySolver ever accepts complex numbers
\n", - "
 0649:                     # error_norm_abs = fabs(error_dot_1)                 
\n", - "
 0650:                     # error_norm5_abs = fabs(error_dot_2)
\n", - "
 0651: 
\n", - "
+0652:                     error_norm += (error_dot_1 * error_dot_1)
\n", - "
        __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_dot_1 * __pyx_v_error_dot_1));\n",
-       "      }\n",
-       "
+0653:                 error_norm = sqrt(error_norm) / self.y_size_sqrt
\n", - "
      __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_self->y_size_sqrt);\n",
-       "    }\n",
-       "    __pyx_L27:;\n",
-       "
 0654: 
\n", - "
+0655:             if error_norm < 1.:
\n", - "
    __pyx_t_1 = (__pyx_v_error_norm < 1.);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L41;\n",
-       "    }\n",
-       "
 0656:                 # The error is low! Let's update this step for the next time loop
\n", - "
+0657:                 if error_norm == 0.:
\n", - "
      __pyx_t_1 = (__pyx_v_error_norm == 0.);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "        goto __pyx_L42;\n",
-       "      }\n",
-       "
+0658:                     step_factor = MAX_FACTOR
\n", - "
        __pyx_v_step_factor = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_FACTOR;\n",
-       "
 0659:                 else:
\n", - "
+0660:                     error_pow = pow(error_norm, -self.error_expo)
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_self->error_expo));\n",
-       "
+0661:                     step_factor = min(MAX_FACTOR, SAFETY * error_pow)
\n", - "
        __pyx_t_15 = (__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_SAFETY * __pyx_v_error_pow);\n",
-       "        __pyx_t_16 = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_FACTOR;\n",
-       "        if ((__pyx_t_15 < __pyx_t_16)) {\n",
-       "          __pyx_t_2 = __pyx_t_15;\n",
-       "        } else {\n",
-       "          __pyx_t_2 = __pyx_t_16;\n",
-       "        }\n",
-       "        __pyx_v_step_factor = __pyx_t_2;\n",
-       "      }\n",
-       "      __pyx_L42:;\n",
-       "
 0662: 
\n", - "
+0663:                 if step_rejected:
\n", - "
      __pyx_t_1 = (__pyx_v_step_rejected != 0);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
 0664:                     # There were problems with this step size on the previous step loop. Make sure factor does
\n", - "
 0665:                     #    not exasperate them.
\n", - "
+0666:                     step_factor = min(step_factor, 1.)
\n", - "
        __pyx_t_2 = 1.;\n",
-       "        __pyx_t_15 = __pyx_v_step_factor;\n",
-       "        if ((__pyx_t_2 < __pyx_t_15)) {\n",
-       "          __pyx_t_16 = __pyx_t_2;\n",
-       "        } else {\n",
-       "          __pyx_t_16 = __pyx_t_15;\n",
-       "        }\n",
-       "        __pyx_v_step_factor = __pyx_t_16;\n",
-       "
 0667: 
\n", - "
+0668:                 self.step_size = self.step_size * step_factor
\n", - "
      __pyx_v_self->step_size = (__pyx_v_self->step_size * __pyx_v_step_factor);\n",
-       "
+0669:                 step_accepted = True
\n", - "
      __pyx_v_step_accepted = 1;\n",
-       "
 0670:             else:
\n", - "
+0671:                 error_pow = pow(error_norm, -self.error_expo)
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_self->error_expo));\n",
-       "
+0672:                 self.step_size = self.step_size * max(MIN_FACTOR, SAFETY * error_pow)
\n", - "
      __pyx_t_16 = (__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_SAFETY * __pyx_v_error_pow);\n",
-       "      __pyx_t_2 = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MIN_FACTOR;\n",
-       "      if ((__pyx_t_16 > __pyx_t_2)) {\n",
-       "        __pyx_t_15 = __pyx_t_16;\n",
-       "      } else {\n",
-       "        __pyx_t_15 = __pyx_t_2;\n",
-       "      }\n",
-       "      __pyx_v_self->step_size = (__pyx_v_self->step_size * __pyx_t_15);\n",
-       "
+0673:                 step_rejected = True
\n", - "
      __pyx_v_step_rejected = 1;\n",
-       "    }\n",
-       "    __pyx_L41:;\n",
-       "  }\n",
-       "  __pyx_L5_break:;\n",
-       "
 0674: 
\n", - "
+0675:         if step_error:
\n", - "
  __pyx_t_1 = (__pyx_v_step_error != 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    goto __pyx_L44;\n",
-       "  }\n",
-       "
 0676:             # Issue with step convergence
\n", - "
+0677:             self.status = -1
\n", - "
    __pyx_v_self->status = -1;\n",
-       "
+0678:         elif not step_accepted:
\n", - "
  __pyx_t_1 = (!(__pyx_v_step_accepted != 0));\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "  __pyx_L44:;\n",
-       "
 0679:             # Issue with step convergence
\n", - "
+0680:             self.status = -7
\n", - "
    __pyx_v_self->status = -7;\n",
-       "
 0681: 
\n", - "
 0682:         # End of step loop. Update the _now variables
\n", - "
+0683:         self.t_old = self.t_new
\n", - "
  __pyx_t_15 = __pyx_v_self->t_new;\n",
-       "  __pyx_v_self->t_old = __pyx_t_15;\n",
-       "
+0684:         for i in range(self.y_size):
\n", - "
  __pyx_t_5 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_6 = __pyx_t_5;\n",
-       "  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {\n",
-       "    __pyx_v_i = __pyx_t_7;\n",
-       "
+0685:             self.y_old_view[i] = self.y_new_view[i]
\n", - "
    __pyx_t_3 = __pyx_v_i;\n",
-       "    __pyx_t_4 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_4)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_3)) )));\n",
-       "
+0686:             self.dy_old_view[i] = self.dy_new_view[i]
\n", - "
    __pyx_t_3 = __pyx_v_i;\n",
-       "    __pyx_t_4 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_old_view.data) + __pyx_t_4)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_3)) )));\n",
-       "  }\n",
-       "
 0687: 
\n", - "
 0688: 
\n", - "
+0689:     cpdef void solve(self, bool_cpp_t reset = True):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_solve(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_solve *__pyx_optional_args) {\n",
-       "  bool __pyx_v_reset = ((bool)1);\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"solve\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_reset = __pyx_optional_args->reset;\n",
-       "    }\n",
-       "  }\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_solve); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve)) {\n",
-       "        __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_reset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {\n",
-       "          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);\n",
-       "          if (likely(__pyx_t_5)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);\n",
-       "            __Pyx_INCREF(__pyx_t_5);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_4, function);\n",
-       "            __pyx_t_6 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);\n",
-       "          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solve\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve = {\"solve\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  bool __pyx_v_reset;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"solve (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reset,0};\n",
-       "    PyObject* values[1] = {0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reset);\n",
-       "          if (value) { values[0] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"solve\") < 0)) __PYX_ERR(0, 689, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    if (values[0]) {\n",
-       "      __pyx_v_reset = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reset == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_reset = ((bool)1);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"solve\", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 689, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solve\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_4solve(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_reset);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_4solve(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, bool __pyx_v_reset) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"solve\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.reset = __pyx_v_reset;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->solve(__pyx_v_self, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solve\", __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__52 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_reset); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__52);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__52);\n",
-       "  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_solve, 689, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_5solve, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_solve, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__54);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_solve, __pyx_t_7) < 0) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__54 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 689, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__54);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__54);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_solve {\n",
-       "  int __pyx_n;\n",
-       "  bool reset;\n",
-       "};\n",
-       "
+0690:         self._solve()
\n", - "
  ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->_solve(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 690, __pyx_L1_error)\n",
-       "
 0691: 
\n", - "
 0692: 
\n", - "
+0693:     cdef void _solve(self, bool_cpp_t reset = True):
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver__solve(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver__solve *__pyx_optional_args) {\n",
-       "  bool __pyx_v_reset = ((bool)1);\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  PyArrayObject *__pyx_v_y_results_array = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_array = 0;\n",
-       "  PyArrayObject *__pyx_v_time_domain_array = 0;\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyArrayObject *__pyx_v_y_results_array_new = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_array_new = 0;\n",
-       "  PyArrayObject *__pyx_v_time_domain_array_new = 0;\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  Py_ssize_t __pyx_v_new_size;\n",
-       "  PyArrayObject *__pyx_v_y_results_out_array = 0;\n",
-       "  PyArrayObject *__pyx_v_y_results_out_array_bad = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_output_out_array = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_output_out_array_bad = 0;\n",
-       "  PyArrayObject *__pyx_v_time_domain_out_array = 0;\n",
-       "  PyArrayObject *__pyx_v_time_domain_out_array_bad = 0;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_array_new;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_array_new;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_output_out_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_output_out_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_output_out_array_bad;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_output_out_array_bad;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_time_domain_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_time_domain_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_time_domain_array_new;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_time_domain_array_new;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_time_domain_out_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_time_domain_out_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_time_domain_out_array_bad;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_time_domain_out_array_bad;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_results_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_results_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_results_array_new;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_results_array_new;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_results_out_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_results_out_array;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_results_out_array_bad;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_results_out_array_bad;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"_solve\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_reset = __pyx_optional_args->reset;\n",
-       "    }\n",
-       "  }\n",
-       "  __pyx_pybuffer_y_results_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_results_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_results_array.data = NULL;\n",
-       "  __pyx_pybuffernd_y_results_array.rcbuffer = &__pyx_pybuffer_y_results_array;\n",
-       "  __pyx_pybuffer_extra_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_array.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_array.rcbuffer = &__pyx_pybuffer_extra_array;\n",
-       "  __pyx_pybuffer_time_domain_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_time_domain_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_time_domain_array.data = NULL;\n",
-       "  __pyx_pybuffernd_time_domain_array.rcbuffer = &__pyx_pybuffer_time_domain_array;\n",
-       "  __pyx_pybuffer_y_results_array_new.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_results_array_new.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_results_array_new.data = NULL;\n",
-       "  __pyx_pybuffernd_y_results_array_new.rcbuffer = &__pyx_pybuffer_y_results_array_new;\n",
-       "  __pyx_pybuffer_extra_array_new.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_array_new.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_array_new.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_array_new.rcbuffer = &__pyx_pybuffer_extra_array_new;\n",
-       "  __pyx_pybuffer_time_domain_array_new.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_time_domain_array_new.refcount = 0;\n",
-       "  __pyx_pybuffernd_time_domain_array_new.data = NULL;\n",
-       "  __pyx_pybuffernd_time_domain_array_new.rcbuffer = &__pyx_pybuffer_time_domain_array_new;\n",
-       "  __pyx_pybuffer_y_results_out_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_results_out_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_results_out_array.data = NULL;\n",
-       "  __pyx_pybuffernd_y_results_out_array.rcbuffer = &__pyx_pybuffer_y_results_out_array;\n",
-       "  __pyx_pybuffer_y_results_out_array_bad.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_results_out_array_bad.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_results_out_array_bad.data = NULL;\n",
-       "  __pyx_pybuffernd_y_results_out_array_bad.rcbuffer = &__pyx_pybuffer_y_results_out_array_bad;\n",
-       "  __pyx_pybuffer_extra_output_out_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_output_out_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_output_out_array.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_output_out_array.rcbuffer = &__pyx_pybuffer_extra_output_out_array;\n",
-       "  __pyx_pybuffer_extra_output_out_array_bad.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_output_out_array_bad.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_output_out_array_bad.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_output_out_array_bad.rcbuffer = &__pyx_pybuffer_extra_output_out_array_bad;\n",
-       "  __pyx_pybuffer_time_domain_out_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_time_domain_out_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_time_domain_out_array.data = NULL;\n",
-       "  __pyx_pybuffernd_time_domain_out_array.rcbuffer = &__pyx_pybuffer_time_domain_out_array;\n",
-       "  __pyx_pybuffer_time_domain_out_array_bad.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_time_domain_out_array_bad.refcount = 0;\n",
-       "  __pyx_pybuffernd_time_domain_out_array_bad.data = NULL;\n",
-       "  __pyx_pybuffernd_time_domain_out_array_bad.rcbuffer = &__pyx_pybuffer_time_domain_out_array_bad;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 1);\n",
-       "  __Pyx_XDECREF(__pyx_t_31);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver._solve\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_results_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_time_domain_array);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_results_array_new);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_array_new);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_time_domain_array_new);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_results_out_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_results_out_array_bad);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_output_out_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_output_out_array_bad);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_time_domain_out_array);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_time_domain_out_array_bad);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver__solve {\n",
-       "  int __pyx_n;\n",
-       "  bool reset;\n",
-       "};\n",
-       "
 0694:         """ Perform Runge-Kutta integration on `self.diffeq` function."""
\n", - "
 0695: 
\n", - "
 0696:         # Reset the solver's state (avoid issues if solve() is called multiple times).
\n", - "
+0697:         if reset:
\n", - "
  __pyx_t_1 = (__pyx_v_reset != 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0698:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 698, __pyx_L1_error)\n",
-       "
 0699: 
\n", - "
 0700:         # Setup loop variables
\n", - "
 0701:         cdef Py_ssize_t i, j
\n", - "
 0702: 
\n", - "
 0703:         # Setup storage arrays
\n", - "
 0704:         # These arrays are built to fit a number of points equal to `self.expected_size`
\n", - "
 0705:         # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.
\n", - "
 0706:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array, extra_array
\n", - "
 0707:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array
\n", - "
 0708:         cdef double[:, ::1] y_results_array_view, extra_array_view
\n", - "
 0709:         cdef double[::1] time_domain_array_view
\n", - "
+0710:         y_results_array        = np.empty((self.y_size, self.expected_size), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->expected_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_array.rcbuffer->pybuffer);\n",
-       "    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_8 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_results_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "      }\n",
-       "      __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_y_results_array.diminfo[0].strides = __pyx_pybuffernd_y_results_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_results_array.diminfo[0].shape = __pyx_pybuffernd_y_results_array.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y_results_array.diminfo[1].strides = __pyx_pybuffernd_y_results_array.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y_results_array.diminfo[1].shape = __pyx_pybuffernd_y_results_array.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 710, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_v_y_results_array = ((PyArrayObject *)__pyx_t_6);\n",
-       "  __pyx_t_6 = 0;\n",
-       "
+0711:         time_domain_array      = np.empty(self.expected_size, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->expected_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_6);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  __pyx_t_12 = ((PyArrayObject *)__pyx_t_2);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer);\n",
-       "    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_8 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_time_domain_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "      }\n",
-       "      __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_time_domain_array.diminfo[0].strides = __pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_time_domain_array.diminfo[0].shape = __pyx_pybuffernd_time_domain_array.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 711, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_12 = 0;\n",
-       "  __pyx_v_time_domain_array = ((PyArrayObject *)__pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+0712:         y_results_array_view   = y_results_array
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_y_results_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 712, __pyx_L1_error)\n",
-       "  __pyx_v_y_results_array_view = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
+0713:         time_domain_array_view = time_domain_array
\n", - "
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_time_domain_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 713, __pyx_L1_error)\n",
-       "  __pyx_v_time_domain_array_view = __pyx_t_14;\n",
-       "  __pyx_t_14.memview = NULL;\n",
-       "  __pyx_t_14.data = NULL;\n",
-       "
+0714:         if self.capture_extra:
\n", - "
  __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0715:             extra_array      = np.empty((self.num_extra, self.expected_size), dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->expected_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_4);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_4 = 0;\n",
-       "    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GIVEREF(__pyx_t_5);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "    __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    __pyx_t_7 = ((PyArrayObject *)__pyx_t_3);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_array.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "        }\n",
-       "        __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_extra_array.diminfo[0].strides = __pyx_pybuffernd_extra_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_array.diminfo[0].shape = __pyx_pybuffernd_extra_array.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_extra_array.diminfo[1].strides = __pyx_pybuffernd_extra_array.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_extra_array.diminfo[1].shape = __pyx_pybuffernd_extra_array.rcbuffer->pybuffer.shape[1];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 715, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_v_extra_array = ((PyArrayObject *)__pyx_t_3);\n",
-       "    __pyx_t_3 = 0;\n",
-       "
+0716:             extra_array_view = extra_array
\n", - "
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_extra_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 716, __pyx_L1_error)\n",
-       "    __pyx_v_extra_array_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
 0717: 
\n", - "
 0718:         # The following are unused unless the previous array size is too small to capture all of the data
\n", - "
 0719:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array_new, extra_array_new
\n", - "
 0720:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array_new
\n", - "
 0721:         cdef double[:, ::1] y_results_array_new_view, extra_array_new_view
\n", - "
 0722:         cdef double[::1] time_domain_array_new_view
\n", - "
 0723: 
\n", - "
 0724:         # Load initial conditions into output arrays
\n", - "
+0725:         time_domain_array_view[0] = self.t_start
\n", - "
  __pyx_t_15 = __pyx_v_self->t_start;\n",
-       "  __pyx_t_16 = 0;\n",
-       "  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_time_domain_array_view.data) + __pyx_t_16)) )) = __pyx_t_15;\n",
-       "
+0726:         for i in range(self.y_size):
\n", - "
  __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_18 = __pyx_t_17;\n",
-       "  for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "    __pyx_v_i = __pyx_t_19;\n",
-       "
+0727:             y_results_array_view[i, 0] = self.y0_view[i]
\n", - "
    __pyx_t_16 = __pyx_v_i;\n",
-       "    __pyx_t_20 = __pyx_v_i;\n",
-       "    __pyx_t_21 = 0;\n",
-       "    *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_20 * __pyx_v_y_results_array_view.strides[0]) )) + __pyx_t_21)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_16)) )));\n",
-       "  }\n",
-       "
+0728:         if self.capture_extra:
\n", - "
  __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0729:             for i in range(self.num_extra):
\n", - "
    __pyx_t_17 = __pyx_v_self->num_extra;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "      __pyx_v_i = __pyx_t_19;\n",
-       "
+0730:                 extra_array_view[i, 0] = self.extra_output_init_view[i]
\n", - "
      __pyx_t_16 = __pyx_v_i;\n",
-       "      __pyx_t_21 = __pyx_v_i;\n",
-       "      __pyx_t_20 = 0;\n",
-       "      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_array_view.data + __pyx_t_21 * __pyx_v_extra_array_view.strides[0]) )) + __pyx_t_20)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->extra_output_init_view.data) + __pyx_t_16)) )));\n",
-       "    }\n",
-       "
 0731: 
\n", - "
 0732:         # Reset live variables to their starting values.
\n", - "
 0733:         # Set current and old y variables equal to y0
\n", - "
+0734:         for i in range(self.y_size):
\n", - "
  __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_18 = __pyx_t_17;\n",
-       "  for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "    __pyx_v_i = __pyx_t_19;\n",
-       "
+0735:             self.y_new_view[i] = self.y0_view[i]
\n", - "
    __pyx_t_16 = __pyx_v_i;\n",
-       "    __pyx_t_20 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_20)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_16)) )));\n",
-       "
+0736:             self.y_old_view[i] = self.y0_view[i]
\n", - "
    __pyx_t_16 = __pyx_v_i;\n",
-       "    __pyx_t_20 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_old_view.data) + __pyx_t_20)) )) = (*((double const  *) ( /* dim=0 */ ((char *) (((double const  *) __pyx_v_self->y0_view.data) + __pyx_t_16)) )));\n",
-       "  }\n",
-       "
 0737:         # Set current and old time variables equal to t0
\n", - "
+0738:         self.t_old = self.t_start
\n", - "
  __pyx_t_15 = __pyx_v_self->t_start;\n",
-       "  __pyx_v_self->t_old = __pyx_t_15;\n",
-       "
+0739:         self.t_new = self.t_start
\n", - "
  __pyx_t_15 = __pyx_v_self->t_start;\n",
-       "  __pyx_v_self->t_new = __pyx_t_15;\n",
-       "
 0740: 
\n", - "
 0741:         # # Main integration loop
\n", - "
+0742:         self.status  = 0
\n", - "
  __pyx_v_self->status = 0;\n",
-       "
 0743:         # There is an initial condition provided so the time length is already 1
\n", - "
+0744:         self.len_t = 1
\n", - "
  __pyx_v_self->len_t = 1;\n",
-       "
 0745: 
\n", - "
+0746:         if self.y_size == 0:
\n", - "
  __pyx_t_1 = (__pyx_v_self->y_size == 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0747:             self.status = -6
\n", - "
    __pyx_v_self->status = -6;\n",
-       "
 0748: 
\n", - "
+0749:         while self.status == 0:
\n", - "
  while (1) {\n",
-       "    __pyx_t_1 = (__pyx_v_self->status == 0);\n",
-       "    if (!__pyx_t_1) break;\n",
-       "
+0750:             if self.t_new == self.t_end:
\n", - "
    __pyx_t_1 = (__pyx_v_self->t_new == __pyx_v_self->t_end);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0751:                 self.t_old = self.t_end
\n", - "
      __pyx_t_15 = __pyx_v_self->t_end;\n",
-       "      __pyx_v_self->t_old = __pyx_t_15;\n",
-       "
+0752:                 self.status = 1
\n", - "
      __pyx_v_self->status = 1;\n",
-       "
+0753:                 break
\n", - "
      goto __pyx_L14_break;\n",
-       "
 0754: 
\n", - "
+0755:             if self.use_max_steps:
\n", - "
    __pyx_t_1 = (__pyx_v_self->use_max_steps != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      goto __pyx_L16;\n",
-       "    }\n",
-       "
+0756:                 if self.len_t > self.max_steps:
\n", - "
      __pyx_t_1 = (__pyx_v_self->len_t > __pyx_v_self->max_steps);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+0757:                     self.status = -2
\n", - "
        __pyx_v_self->status = -2;\n",
-       "
+0758:                     break
\n", - "
        goto __pyx_L14_break;\n",
-       "
 0759:             else:
\n", - "
+0760:                 if self.len_t > MAX_INT_SIZE:
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_1 = (__pyx_v_self->len_t > __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_MAX_INT_SIZE);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_L16:;\n",
-       "
+0761:                     self.status = -3
\n", - "
        __pyx_v_self->status = -3;\n",
-       "
+0762:                     break
\n", - "
        goto __pyx_L14_break;\n",
-       "
 0763: 
\n", - "
 0764:             # Perform RK Step
\n", - "
+0765:             self.rk_step()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->rk_step(__pyx_v_self);\n",
-       "
 0766: 
\n", - "
 0767:             # Check is error occurred during step.
\n", - "
+0768:             if self.status != 0:
\n", - "
    __pyx_t_1 = (__pyx_v_self->status != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0769:                 break
\n", - "
      goto __pyx_L14_break;\n",
-       "
 0770: 
\n", - "
 0771:             # Save data
\n", - "
+0772:             if self.len_t >= (self.num_concats * self.expected_size):
\n", - "
    __pyx_t_1 = (__pyx_v_self->len_t >= (__pyx_v_self->num_concats * __pyx_v_self->expected_size));\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 0773:                 # There is more data than we have room in our arrays.
\n", - "
 0774:                 # Build new arrays with more space.
\n", - "
 0775:                 # OPT: Note this is an expensive operation.
\n", - "
+0776:                 self.num_concats += 1
\n", - "
      __pyx_v_self->num_concats = (__pyx_v_self->num_concats + 1);\n",
-       "
+0777:                 new_size = self.num_concats * self.expected_size
\n", - "
      __pyx_v_new_size = (__pyx_v_self->num_concats * __pyx_v_self->expected_size);\n",
-       "
+0778:                 time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "      __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_4);\n",
-       "      __Pyx_GIVEREF(__pyx_t_3);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);\n",
-       "      __pyx_t_3 = 0;\n",
-       "      __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      __pyx_t_22 = ((PyArrayObject *)__pyx_t_2);\n",
-       "      {\n",
-       "        __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer);\n",
-       "        __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer, (PyObject*)__pyx_t_22, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "        if (unlikely(__pyx_t_8 < 0)) {\n",
-       "          PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer, (PyObject*)__pyx_v_time_domain_array_new, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "            Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "            __Pyx_RaiseBufferFallbackError();\n",
-       "          } else {\n",
-       "            PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "          }\n",
-       "          __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "        }\n",
-       "        __pyx_pybuffernd_time_domain_array_new.diminfo[0].strides = __pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_time_domain_array_new.diminfo[0].shape = __pyx_pybuffernd_time_domain_array_new.rcbuffer->pybuffer.shape[0];\n",
-       "        if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 778, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_22 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, ((PyArrayObject *)__pyx_t_2));\n",
-       "      __pyx_t_2 = 0;\n",
-       "
+0779:                 y_results_array_new = np.empty((self.y_size, new_size), dtype=np.float64, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_4);\n",
-       "      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_GIVEREF(__pyx_t_2);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_4);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);\n",
-       "      __pyx_t_2 = 0;\n",
-       "      __pyx_t_4 = 0;\n",
-       "      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_4);\n",
-       "      __Pyx_GIVEREF(__pyx_t_5);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "      __pyx_t_5 = 0;\n",
-       "      __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      __pyx_t_23 = ((PyArrayObject *)__pyx_t_6);\n",
-       "      {\n",
-       "        __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer);\n",
-       "        __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "        if (unlikely(__pyx_t_8 < 0)) {\n",
-       "          PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_results_array_new, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "            Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "            __Pyx_RaiseBufferFallbackError();\n",
-       "          } else {\n",
-       "            PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "          }\n",
-       "          __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "        }\n",
-       "        __pyx_pybuffernd_y_results_array_new.diminfo[0].strides = __pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_results_array_new.diminfo[0].shape = __pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y_results_array_new.diminfo[1].strides = __pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y_results_array_new.diminfo[1].shape = __pyx_pybuffernd_y_results_array_new.rcbuffer->pybuffer.shape[1];\n",
-       "        if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 779, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_23 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, ((PyArrayObject *)__pyx_t_6));\n",
-       "      __pyx_t_6 = 0;\n",
-       "
+0780:                 time_domain_array_new_view = time_domain_array_new
\n", - "
      __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_time_domain_array_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 780, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "      __pyx_v_time_domain_array_new_view = __pyx_t_14;\n",
-       "      __pyx_t_14.memview = NULL;\n",
-       "      __pyx_t_14.data = NULL;\n",
-       "
+0781:                 y_results_array_new_view = y_results_array_new
\n", - "
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_y_results_array_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 781, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "      __pyx_v_y_results_array_new_view = __pyx_t_13;\n",
-       "      __pyx_t_13.memview = NULL;\n",
-       "      __pyx_t_13.data = NULL;\n",
-       "
+0782:                 if self.capture_extra:
\n", - "
      __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+0783:                     extra_array_new = np.empty((self.num_extra, new_size), dtype=np.float64, order='C')
\n", - "
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_5);\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_new_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __Pyx_GIVEREF(__pyx_t_6);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);\n",
-       "        __Pyx_GIVEREF(__pyx_t_4);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);\n",
-       "        __pyx_t_6 = 0;\n",
-       "        __pyx_t_4 = 0;\n",
-       "        __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __Pyx_GIVEREF(__pyx_t_3);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);\n",
-       "        __pyx_t_3 = 0;\n",
-       "        __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        __pyx_t_23 = ((PyArrayObject *)__pyx_t_2);\n",
-       "        {\n",
-       "          __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer);\n",
-       "          __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "          if (unlikely(__pyx_t_8 < 0)) {\n",
-       "            PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_array_new, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "              Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "              __Pyx_RaiseBufferFallbackError();\n",
-       "            } else {\n",
-       "              PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "            }\n",
-       "            __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "          }\n",
-       "          __pyx_pybuffernd_extra_array_new.diminfo[0].strides = __pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_array_new.diminfo[0].shape = __pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_extra_array_new.diminfo[1].strides = __pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_extra_array_new.diminfo[1].shape = __pyx_pybuffernd_extra_array_new.rcbuffer->pybuffer.shape[1];\n",
-       "          if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 783, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_23 = 0;\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_extra_array_new, ((PyArrayObject *)__pyx_t_2));\n",
-       "        __pyx_t_2 = 0;\n",
-       "
+0784:                     extra_array_new_view = extra_array_new
\n", - "
        __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_extra_array_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 784, __pyx_L1_error)\n",
-       "        __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_array_new_view, 1);\n",
-       "        __pyx_v_extra_array_new_view = __pyx_t_13;\n",
-       "        __pyx_t_13.memview = NULL;\n",
-       "        __pyx_t_13.data = NULL;\n",
-       "
 0785: 
\n", - "
 0786:                 # Loop through time to fill in these new arrays with the old values
\n", - "
+0787:                 for j in range(self.y_size):
\n", - "
      __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
-       "
+0788:                     for i in range(self.len_t):
\n", - "
        __pyx_t_24 = __pyx_v_self->len_t;\n",
-       "        __pyx_t_25 = __pyx_t_24;\n",
-       "        for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {\n",
-       "          __pyx_v_i = __pyx_t_26;\n",
-       "
+0789:                         if j == 0:
\n", - "
          __pyx_t_1 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "          }\n",
-       "
+0790:                             time_domain_array_new_view[i] = time_domain_array_view[i]
\n", - "
            __pyx_t_16 = __pyx_v_i;\n",
-       "            __pyx_t_20 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_time_domain_array_new_view.data) + __pyx_t_20)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_time_domain_array_view.data) + __pyx_t_16)) )));\n",
-       "
+0791:                         y_results_array_new_view[j, i] = y_results_array_view[j, i]
\n", - "
          __pyx_t_16 = __pyx_v_j;\n",
-       "          __pyx_t_20 = __pyx_v_i;\n",
-       "          __pyx_t_21 = __pyx_v_j;\n",
-       "          __pyx_t_27 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_21 * __pyx_v_y_results_array_new_view.strides[0]) )) + __pyx_t_27)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_16 * __pyx_v_y_results_array_view.strides[0]) )) + __pyx_t_20)) )));\n",
-       "        }\n",
-       "      }\n",
-       "
 0792: 
\n", - "
+0793:                 if self.capture_extra:
\n", - "
      __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+0794:                     for j in range(self.num_extra):
\n", - "
        __pyx_t_17 = __pyx_v_self->num_extra;\n",
-       "        __pyx_t_18 = __pyx_t_17;\n",
-       "        for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "          __pyx_v_j = __pyx_t_19;\n",
-       "
+0795:                         for i in range(self.len_t):
\n", - "
          __pyx_t_24 = __pyx_v_self->len_t;\n",
-       "          __pyx_t_25 = __pyx_t_24;\n",
-       "          for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {\n",
-       "            __pyx_v_i = __pyx_t_26;\n",
-       "
+0796:                             extra_array_new_view[j, i] = extra_array_view[j, i]
\n", - "
            __pyx_t_20 = __pyx_v_j;\n",
-       "            __pyx_t_16 = __pyx_v_i;\n",
-       "            __pyx_t_27 = __pyx_v_j;\n",
-       "            __pyx_t_21 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_array_new_view.data + __pyx_t_27 * __pyx_v_extra_array_new_view.strides[0]) )) + __pyx_t_21)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_array_view.data + __pyx_t_20 * __pyx_v_extra_array_view.strides[0]) )) + __pyx_t_16)) )));\n",
-       "          }\n",
-       "        }\n",
-       "
 0797: 
\n", - "
 0798:                 # No longer need the old arrays. Change where the view is pointing and delete them.
\n", - "
+0799:                 y_results_array_view = y_results_array_new
\n", - "
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_y_results_array_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "      __pyx_v_y_results_array_view = __pyx_t_13;\n",
-       "      __pyx_t_13.memview = NULL;\n",
-       "      __pyx_t_13.data = NULL;\n",
-       "
+0800:                 time_domain_array_view = time_domain_array_new
\n", - "
      __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_time_domain_array_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "      __pyx_v_time_domain_array_view = __pyx_t_14;\n",
-       "      __pyx_t_14.memview = NULL;\n",
-       "      __pyx_t_14.data = NULL;\n",
-       "
 0801:                 # TODO: Delete the old arrays?
\n", - "
+0802:                 if self.capture_extra:
\n", - "
      __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "      if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+0803:                     extra_array_view = extra_array_new
\n", - "
        __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_extra_array_new), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 803, __pyx_L1_error)\n",
-       "        __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_array_view, 1);\n",
-       "        __pyx_v_extra_array_view = __pyx_t_13;\n",
-       "        __pyx_t_13.memview = NULL;\n",
-       "        __pyx_t_13.data = NULL;\n",
-       "
 0804: 
\n", - "
 0805:             # There should be room in the arrays to add new data.
\n", - "
+0806:             time_domain_array_view[self.len_t] = self.t_new
\n", - "
    __pyx_t_15 = __pyx_v_self->t_new;\n",
-       "    __pyx_t_16 = __pyx_v_self->len_t;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_time_domain_array_view.data) + __pyx_t_16)) )) = __pyx_t_15;\n",
-       "
 0807:             # To match the format that scipy follows, we will take the transpose of y.
\n", - "
+0808:             for i in range(self.y_size):
\n", - "
    __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "      __pyx_v_i = __pyx_t_19;\n",
-       "
+0809:                 y_results_array_view[i, self.len_t] = self.y_new_view[i]
\n", - "
      __pyx_t_16 = __pyx_v_i;\n",
-       "      __pyx_t_20 = __pyx_v_i;\n",
-       "      __pyx_t_21 = __pyx_v_self->len_t;\n",
-       "      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_20 * __pyx_v_y_results_array_view.strides[0]) )) + __pyx_t_21)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_16)) )));\n",
-       "    }\n",
-       "
 0810: 
\n", - "
+0811:             if self.capture_extra:
\n", - "
    __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0812:                 for i in range(self.num_extra):
\n", - "
      __pyx_t_17 = __pyx_v_self->num_extra;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_i = __pyx_t_19;\n",
-       "
+0813:                     extra_array_view[i, self.len_t] = self.extra_output_view[i]
\n", - "
        __pyx_t_16 = __pyx_v_i;\n",
-       "        __pyx_t_21 = __pyx_v_i;\n",
-       "        __pyx_t_20 = __pyx_v_self->len_t;\n",
-       "        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_array_view.data + __pyx_t_21 * __pyx_v_extra_array_view.strides[0]) )) + __pyx_t_20)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->extra_output_view.data) + __pyx_t_16)) )));\n",
-       "      }\n",
-       "
 0814: 
\n", - "
 0815:             # Increase number of time points.
\n", - "
+0816:             self.len_t += 1
\n", - "
    __pyx_v_self->len_t = (__pyx_v_self->len_t + 1);\n",
-       "  }\n",
-       "  __pyx_L14_break:;\n",
-       "
 0817: 
\n", - "
 0818:         # # Clean up output.
\n", - "
+0819:         if self.status == 1:
\n", - "
  __pyx_t_1 = (__pyx_v_self->status == 1);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    goto __pyx_L38;\n",
-       "  }\n",
-       "
+0820:             self.success = True
\n", - "
    __pyx_v_self->success = 1;\n",
-       "
 0821:         else:
\n", - "
+0822:             self.success = False
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_self->success = 0;\n",
-       "  }\n",
-       "  __pyx_L38:;\n",
-       "
 0823: 
\n", - "
 0824:         # Create output arrays. To match the format that scipy follows, we will take the transpose of y.
\n", - "
 0825:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_out_array, y_results_out_array_bad
\n", - "
 0826:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_output_out_array, extra_output_out_array_bad
\n", - "
 0827:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_out_array, time_domain_out_array_bad
\n", - "
 0828: 
\n", - "
+0829:         if self.success:
\n", - "
  __pyx_t_1 = (__pyx_v_self->success != 0);\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    goto __pyx_L39;\n",
-       "  }\n",
-       "
 0830:             # Build final output arrays.
\n", - "
 0831:             # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.
\n", - "
 0832:             # This process will remove that junk and leave only the wanted data.
\n", - "
+0833:             y_results_out_array = np.empty((self.y_size, self.len_t), dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->len_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_4);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_4 = 0;\n",
-       "    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GIVEREF(__pyx_t_5);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "    __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    __pyx_t_28 = ((PyArrayObject *)__pyx_t_6);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_28, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_results_out_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "        }\n",
-       "        __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_y_results_out_array.diminfo[0].strides = __pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_results_out_array.diminfo[0].shape = __pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y_results_out_array.diminfo[1].strides = __pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y_results_out_array.diminfo[1].shape = __pyx_pybuffernd_y_results_out_array.rcbuffer->pybuffer.shape[1];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 833, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_28 = 0;\n",
-       "    __pyx_v_y_results_out_array = ((PyArrayObject *)__pyx_t_6);\n",
-       "    __pyx_t_6 = 0;\n",
-       "
+0834:             time_domain_out_array = np.empty(self.len_t, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->len_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GIVEREF(__pyx_t_6);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);\n",
-       "    __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    __pyx_t_29 = ((PyArrayObject *)__pyx_t_2);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_29, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_time_domain_out_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "        }\n",
-       "        __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_time_domain_out_array.diminfo[0].strides = __pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_time_domain_out_array.diminfo[0].shape = __pyx_pybuffernd_time_domain_out_array.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 834, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_29 = 0;\n",
-       "    __pyx_v_time_domain_out_array = ((PyArrayObject *)__pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+0835:             if self.capture_extra:
\n", - "
    __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0836:                 extra_output_out_array = np.empty((self.num_extra, self.len_t), dtype=np.float64, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->len_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_4);\n",
-       "      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_GIVEREF(__pyx_t_2);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_4);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);\n",
-       "      __pyx_t_2 = 0;\n",
-       "      __pyx_t_4 = 0;\n",
-       "      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_4);\n",
-       "      __Pyx_GIVEREF(__pyx_t_5);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "      __pyx_t_5 = 0;\n",
-       "      __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      __pyx_t_30 = ((PyArrayObject *)__pyx_t_3);\n",
-       "      {\n",
-       "        __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer);\n",
-       "        __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_30, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "        if (unlikely(__pyx_t_8 < 0)) {\n",
-       "          PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_output_out_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "            Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "            __Pyx_RaiseBufferFallbackError();\n",
-       "          } else {\n",
-       "            PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "          }\n",
-       "          __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "        }\n",
-       "        __pyx_pybuffernd_extra_output_out_array.diminfo[0].strides = __pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_output_out_array.diminfo[0].shape = __pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_extra_output_out_array.diminfo[1].strides = __pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_extra_output_out_array.diminfo[1].shape = __pyx_pybuffernd_extra_output_out_array.rcbuffer->pybuffer.shape[1];\n",
-       "        if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 836, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_30 = 0;\n",
-       "      __pyx_v_extra_output_out_array = ((PyArrayObject *)__pyx_t_3);\n",
-       "      __pyx_t_3 = 0;\n",
-       "
 0837: 
\n", - "
 0838:             # Link memory views
\n", - "
+0839:             self.solution_y_view = y_results_out_array
\n", - "
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_y_results_out_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 839, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_y_view, 0);\n",
-       "    __pyx_v_self->solution_y_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
+0840:             self.solution_t_view = time_domain_out_array
\n", - "
    __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_time_domain_out_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 840, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_t_view, 0);\n",
-       "    __pyx_v_self->solution_t_view = __pyx_t_14;\n",
-       "    __pyx_t_14.memview = NULL;\n",
-       "    __pyx_t_14.data = NULL;\n",
-       "
+0841:             if self.capture_extra:
\n", - "
    __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0842:                 self.solution_extra_view = extra_output_out_array
\n", - "
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_extra_output_out_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 842, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_extra_view, 0);\n",
-       "      __pyx_v_self->solution_extra_view = __pyx_t_13;\n",
-       "      __pyx_t_13.memview = NULL;\n",
-       "      __pyx_t_13.data = NULL;\n",
-       "
 0843: 
\n", - "
 0844:             # Populate values
\n", - "
+0845:             for j in range(self.y_size):
\n", - "
    __pyx_t_17 = __pyx_v_self->y_size;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "      __pyx_v_j = __pyx_t_19;\n",
-       "
+0846:                 for i in range(self.len_t):
\n", - "
      __pyx_t_24 = __pyx_v_self->len_t;\n",
-       "      __pyx_t_25 = __pyx_t_24;\n",
-       "      for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {\n",
-       "        __pyx_v_i = __pyx_t_26;\n",
-       "
+0847:                     if j == 0:
\n", - "
        __pyx_t_1 = (__pyx_v_j == 0);\n",
-       "        if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "        }\n",
-       "
+0848:                         self.solution_t_view[i] = time_domain_array_view[i]
\n", - "
          __pyx_t_16 = __pyx_v_i;\n",
-       "          __pyx_t_20 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->solution_t_view.data) + __pyx_t_20)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_time_domain_array_view.data) + __pyx_t_16)) )));\n",
-       "
+0849:                     self.solution_y_view[j, i] = y_results_array_view[j, i]
\n", - "
        __pyx_t_16 = __pyx_v_j;\n",
-       "        __pyx_t_20 = __pyx_v_i;\n",
-       "        __pyx_t_21 = __pyx_v_j;\n",
-       "        __pyx_t_27 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->solution_y_view.data + __pyx_t_21 * __pyx_v_self->solution_y_view.strides[0]) )) + __pyx_t_27)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_16 * __pyx_v_y_results_array_view.strides[0]) )) + __pyx_t_20)) )));\n",
-       "      }\n",
-       "    }\n",
-       "
+0850:             if self.capture_extra:
\n", - "
    __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0851:                 for j in range(self.num_extra):
\n", - "
      __pyx_t_17 = __pyx_v_self->num_extra;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {\n",
-       "        __pyx_v_j = __pyx_t_19;\n",
-       "
+0852:                     for i in range(self.len_t):
\n", - "
        __pyx_t_24 = __pyx_v_self->len_t;\n",
-       "        __pyx_t_25 = __pyx_t_24;\n",
-       "        for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {\n",
-       "          __pyx_v_i = __pyx_t_26;\n",
-       "
+0853:                         self.solution_extra_view[j, i] = extra_array_view[j, i]
\n", - "
          __pyx_t_20 = __pyx_v_j;\n",
-       "          __pyx_t_16 = __pyx_v_i;\n",
-       "          __pyx_t_27 = __pyx_v_j;\n",
-       "          __pyx_t_21 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->solution_extra_view.data + __pyx_t_27 * __pyx_v_self->solution_extra_view.strides[0]) )) + __pyx_t_21)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_array_view.data + __pyx_t_20 * __pyx_v_extra_array_view.strides[0]) )) + __pyx_t_16)) )));\n",
-       "        }\n",
-       "      }\n",
-       "
 0854:         else:
\n", - "
 0855:             # Build nan arrays
\n", - "
+0856:             y_results_out_array_bad = np.nan * np.ones((self.y_size, 1), dtype=np.float64, order='C')
\n", - "
  /*else*/ {\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_nan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_GIVEREF(__pyx_t_3);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);\n",
-       "    __Pyx_INCREF(__pyx_int_1);\n",
-       "    __Pyx_GIVEREF(__pyx_int_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_1);\n",
-       "    __pyx_t_3 = 0;\n",
-       "    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_GIVEREF(__pyx_t_6);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);\n",
-       "    __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_31);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_31) < 0) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __pyx_t_31 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_31);\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = PyNumber_Multiply(__pyx_t_5, __pyx_t_31); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;\n",
-       "    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    __pyx_t_28 = ((PyArrayObject *)__pyx_t_6);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer, (PyObject*)__pyx_t_28, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_results_out_array_bad, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "        }\n",
-       "        __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_y_results_out_array_bad.diminfo[0].strides = __pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_results_out_array_bad.diminfo[0].shape = __pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y_results_out_array_bad.diminfo[1].strides = __pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y_results_out_array_bad.diminfo[1].shape = __pyx_pybuffernd_y_results_out_array_bad.rcbuffer->pybuffer.shape[1];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 856, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_28 = 0;\n",
-       "    __pyx_v_y_results_out_array_bad = ((PyArrayObject *)__pyx_t_6);\n",
-       "    __pyx_t_6 = 0;\n",
-       "
+0857:             time_domain_out_array_bad = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_nan); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_31);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__21, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = PyNumber_Multiply(__pyx_t_31, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    __pyx_t_29 = ((PyArrayObject *)__pyx_t_6);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer, (PyObject*)__pyx_t_29, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer, (PyObject*)__pyx_v_time_domain_out_array_bad, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "        }\n",
-       "        __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_time_domain_out_array_bad.diminfo[0].strides = __pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_time_domain_out_array_bad.diminfo[0].shape = __pyx_pybuffernd_time_domain_out_array_bad.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_29 = 0;\n",
-       "    __pyx_v_time_domain_out_array_bad = ((PyArrayObject *)__pyx_t_6);\n",
-       "    __pyx_t_6 = 0;\n",
-       "
+0858:             if self.capture_extra:
\n", - "
    __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+0859:                 extra_output_out_array_bad = np.nan * np.ones((self.num_extra, 1), dtype=np.float64, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_4);\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ones); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_31);\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_GIVEREF(__pyx_t_6);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);\n",
-       "      __Pyx_INCREF(__pyx_int_1);\n",
-       "      __Pyx_GIVEREF(__pyx_int_1);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_1);\n",
-       "      __pyx_t_6 = 0;\n",
-       "      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      __Pyx_GIVEREF(__pyx_t_5);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);\n",
-       "      __pyx_t_5 = 0;\n",
-       "      __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_3);\n",
-       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_31, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "      __pyx_t_5 = PyNumber_Multiply(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_5);\n",
-       "      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      __pyx_t_30 = ((PyArrayObject *)__pyx_t_5);\n",
-       "      {\n",
-       "        __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer);\n",
-       "        __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer, (PyObject*)__pyx_t_30, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "        if (unlikely(__pyx_t_8 < 0)) {\n",
-       "          PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_output_out_array_bad, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "            Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "            __Pyx_RaiseBufferFallbackError();\n",
-       "          } else {\n",
-       "            PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "          }\n",
-       "          __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "        }\n",
-       "        __pyx_pybuffernd_extra_output_out_array_bad.diminfo[0].strides = __pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_output_out_array_bad.diminfo[0].shape = __pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_extra_output_out_array_bad.diminfo[1].strides = __pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_extra_output_out_array_bad.diminfo[1].shape = __pyx_pybuffernd_extra_output_out_array_bad.rcbuffer->pybuffer.shape[1];\n",
-       "        if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 859, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_30 = 0;\n",
-       "      __pyx_v_extra_output_out_array_bad = ((PyArrayObject *)__pyx_t_5);\n",
-       "      __pyx_t_5 = 0;\n",
-       "
 0860: 
\n", - "
 0861:             # Link memory views
\n", - "
+0862:             self.solution_y_view = y_results_out_array_bad
\n", - "
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_y_results_out_array_bad), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 862, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_y_view, 0);\n",
-       "    __pyx_v_self->solution_y_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
+0863:             self.solution_t_view = time_domain_out_array_bad
\n", - "
    __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_time_domain_out_array_bad), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 863, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_t_view, 0);\n",
-       "    __pyx_v_self->solution_t_view = __pyx_t_14;\n",
-       "    __pyx_t_14.memview = NULL;\n",
-       "    __pyx_t_14.data = NULL;\n",
-       "
+0864:             if self.capture_extra:
\n", - "
    __pyx_t_1 = (__pyx_v_self->capture_extra != 0);\n",
-       "    if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "    }\n",
-       "  }\n",
-       "  __pyx_L39:;\n",
-       "
+0865:                 self.solution_extra_view = extra_output_out_array_bad
\n", - "
      __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_extra_output_out_array_bad), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 865, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_extra_view, 0);\n",
-       "      __pyx_v_self->solution_extra_view = __pyx_t_13;\n",
-       "      __pyx_t_13.memview = NULL;\n",
-       "      __pyx_t_13.data = NULL;\n",
-       "
 0866: 
\n", - "
 0867:         # Integration is complete. Check if interpolation was requested.
\n", - "
+0868:         if self.success and self.run_interpolation:
\n", - "
  __pyx_t_32 = (__pyx_v_self->success != 0);\n",
-       "  if (__pyx_t_32) {\n",
-       "  } else {\n",
-       "    __pyx_t_1 = __pyx_t_32;\n",
-       "    goto __pyx_L55_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_32 = (__pyx_v_self->run_interpolation != 0);\n",
-       "  __pyx_t_1 = __pyx_t_32;\n",
-       "  __pyx_L55_bool_binop_done:;\n",
-       "  if (__pyx_t_1) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0869:             self.interpolate()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->interpolate(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 869, __pyx_L1_error)\n",
-       "
 0870: 
\n", - "
 0871:         # Update integration message
\n", - "
+0872:         if self.status == 1:
\n", - "
  switch (__pyx_v_self->status) {\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 0:\n",
-       "
+0873:             self.message = "Integration completed without issue."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_completed_without_is);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Integration_completed_without_is);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Integration_completed_without_is;\n",
-       "
+0874:         elif self.status == 0:
\n", - "
    break;\n",
-       "    case -1L:\n",
-       "
+0875:             self.message = "Integration is/was ongoing (perhaps it was interrupted?)."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_is_was_ongoing_perha);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Integration_is_was_ongoing_perha);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Integration_is_was_ongoing_perha;\n",
-       "
+0876:         elif self.status == -1:
\n", - "
    break;\n",
-       "    case -2L:\n",
-       "
+0877:             self.message = "Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Error_in_step_size_calculation_R;\n",
-       "
+0878:         elif self.status == -2:
\n", - "
    break;\n",
-       "    case -3L:\n",
-       "
+0879:             self.message = "Maximum number of steps (set by user) exceeded during integration."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_u);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Maximum_number_of_steps_set_by_u);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Maximum_number_of_steps_set_by_u;\n",
-       "
+0880:         elif self.status == -3:
\n", - "
    break;\n",
-       "    case -6L:\n",
-       "
+0881:             self.message = "Maximum number of steps (set by system architecture) exceeded during integration."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Maximum_number_of_steps_set_by_s);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Maximum_number_of_steps_set_by_s);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Maximum_number_of_steps_set_by_s;\n",
-       "
+0882:         elif self.status == -6:
\n", - "
    break;\n",
-       "    case -7L:\n",
-       "
+0883:             self.message = "Integration never started: y-size is zero."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_never_started_y_size);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Integration_never_started_y_size);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Integration_never_started_y_size;\n",
-       "
+0884:         elif self.status == -7:
\n", - "
    break;\n",
-       "    default: break;\n",
-       "  }\n",
-       "
+0885:              self.message = "Error in step size calculation:\\n\\tError in step size acceptance."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_E);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Error_in_step_size_calculation_E);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Error_in_step_size_calculation_E;\n",
-       "
 0886: 
\n", - "
 0887: 
\n", - "
 0888: 
\n", - "
+0889:     cdef void interpolate(self):
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_interpolate(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  char __pyx_v_old_status;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  PyArrayObject *__pyx_v_y_results_reduced = 0;\n",
-       "  PyArrayObject *__pyx_v_y_result_timeslice = 0;\n",
-       "  PyArrayObject *__pyx_v_y_result_temp = 0;\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_reduced_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_result_timeslice_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_result_temp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyArrayObject *__pyx_v_extra_reduced = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_timeslice = 0;\n",
-       "  PyArrayObject *__pyx_v_extra_temp = 0;\n",
-       "  __Pyx_memviewslice __pyx_v_extra_reduced_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_timeslice_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_temp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_reduced;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_reduced;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_temp;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_temp;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_extra_timeslice;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_extra_timeslice;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_result_temp;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_result_temp;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_result_timeslice;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_result_timeslice;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_y_results_reduced;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_y_results_reduced;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"interpolate\", 0);\n",
-       "  __pyx_pybuffer_y_results_reduced.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_results_reduced.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_results_reduced.data = NULL;\n",
-       "  __pyx_pybuffernd_y_results_reduced.rcbuffer = &__pyx_pybuffer_y_results_reduced;\n",
-       "  __pyx_pybuffer_y_result_timeslice.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_result_timeslice.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_result_timeslice.data = NULL;\n",
-       "  __pyx_pybuffernd_y_result_timeslice.rcbuffer = &__pyx_pybuffer_y_result_timeslice;\n",
-       "  __pyx_pybuffer_y_result_temp.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_y_result_temp.refcount = 0;\n",
-       "  __pyx_pybuffernd_y_result_temp.data = NULL;\n",
-       "  __pyx_pybuffernd_y_result_temp.rcbuffer = &__pyx_pybuffer_y_result_temp;\n",
-       "  __pyx_pybuffer_extra_reduced.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_reduced.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_reduced.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_reduced.rcbuffer = &__pyx_pybuffer_extra_reduced;\n",
-       "  __pyx_pybuffer_extra_timeslice.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_timeslice.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_timeslice.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_timeslice.rcbuffer = &__pyx_pybuffer_extra_timeslice;\n",
-       "  __pyx_pybuffer_extra_temp.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_extra_temp.refcount = 0;\n",
-       "  __pyx_pybuffernd_extra_temp.data = NULL;\n",
-       "  __pyx_pybuffernd_extra_temp.rcbuffer = &__pyx_pybuffer_extra_temp;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_temp.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.interpolate\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_temp.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer);\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_results_reduced);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_result_timeslice);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_y_result_temp);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_reduced_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_timeslice_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_temp_view, 1);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_reduced);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_timeslice);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_extra_temp);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_reduced_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_timeslice_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_temp_view, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "
 0890:         """ Interpolate the results of a successful integration over the user provided time domain, `t_eval`."""
\n", - "
 0891:         # User only wants data at specific points.
\n", - "
 0892:         cdef char old_status
\n", - "
+0893:         old_status = self.status
\n", - "
  __pyx_t_1 = __pyx_v_self->status;\n",
-       "  __pyx_v_old_status = __pyx_t_1;\n",
-       "
+0894:         self.status = 2
\n", - "
  __pyx_v_self->status = 2;\n",
-       "
 0895: 
\n", - "
 0896:         # Setup loop variables
\n", - "
 0897:         cdef Py_ssize_t i, j
\n", - "
 0898: 
\n", - "
 0899:         # The current version of this function has not implemented sicpy's dense output.
\n", - "
 0900:         #   Instead we use an interpolation.
\n", - "
 0901:         # OPT: this could be done inside the integration loop for performance gains.
\n", - "
 0902:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_reduced
\n", - "
 0903:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_result_timeslice, y_result_temp
\n", - "
+0904:         y_results_reduced  = np.empty((self.y_size, self.len_t_eval), dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_6) < 0) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer);\n",
-       "    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_8 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_results_reduced, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "      }\n",
-       "      __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_y_results_reduced.diminfo[0].strides = __pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_results_reduced.diminfo[0].shape = __pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_y_results_reduced.diminfo[1].strides = __pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_y_results_reduced.diminfo[1].shape = __pyx_pybuffernd_y_results_reduced.rcbuffer->pybuffer.shape[1];\n",
-       "    if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 904, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_v_y_results_reduced = ((PyArrayObject *)__pyx_t_6);\n",
-       "  __pyx_t_6 = 0;\n",
-       "
+0905:         y_result_timeslice = np.empty(self.len_t, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_self->len_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_6);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  __pyx_t_12 = ((PyArrayObject *)__pyx_t_2);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer);\n",
-       "    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_8 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_result_timeslice, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "      }\n",
-       "      __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_y_result_timeslice.diminfo[0].strides = __pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_result_timeslice.diminfo[0].shape = __pyx_pybuffernd_y_result_timeslice.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 905, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_12 = 0;\n",
-       "  __pyx_v_y_result_timeslice = ((PyArrayObject *)__pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+0906:         y_result_temp      = np.empty(self.len_t_eval, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  __pyx_t_12 = ((PyArrayObject *)__pyx_t_3);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer);\n",
-       "    __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_8 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_result_temp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "      }\n",
-       "      __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_y_result_temp.diminfo[0].strides = __pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_result_temp.diminfo[0].shape = __pyx_pybuffernd_y_result_temp.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_12 = 0;\n",
-       "  __pyx_v_y_result_temp = ((PyArrayObject *)__pyx_t_3);\n",
-       "  __pyx_t_3 = 0;\n",
-       "
 0907: 
\n", - "
 0908:         cdef double[:, ::1] y_results_reduced_view
\n", - "
 0909:         cdef double[::1] y_result_timeslice_view, y_result_temp_view
\n", - "
+0910:         y_results_reduced_view  = y_results_reduced
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_y_results_reduced), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "  __pyx_v_y_results_reduced_view = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
+0911:         y_result_timeslice_view = y_result_timeslice
\n", - "
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_y_result_timeslice), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 911, __pyx_L1_error)\n",
-       "  __pyx_v_y_result_timeslice_view = __pyx_t_14;\n",
-       "  __pyx_t_14.memview = NULL;\n",
-       "  __pyx_t_14.data = NULL;\n",
-       "
+0912:         y_result_temp_view      = y_result_temp
\n", - "
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_y_result_temp), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 912, __pyx_L1_error)\n",
-       "  __pyx_v_y_result_temp_view = __pyx_t_14;\n",
-       "  __pyx_t_14.memview = NULL;\n",
-       "  __pyx_t_14.data = NULL;\n",
-       "
 0913: 
\n", - "
 0914:         # Create arrays for extra output which may or may not be required.
\n", - "
 0915:         cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_reduced
\n", - "
 0916:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_timeslice, extra_temp
\n", - "
 0917:         cdef double[:, ::1] extra_reduced_view
\n", - "
 0918:         cdef double[::1] extra_timeslice_view, extra_temp_view
\n", - "
 0919: 
\n", - "
+0920:         for j in range(self.y_size):
\n", - "
  __pyx_t_15 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_16 = __pyx_t_15;\n",
-       "  for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {\n",
-       "    __pyx_v_j = __pyx_t_17;\n",
-       "
 0921:             # np.interp only works on 1D arrays so we must loop through each of the y variables.
\n", - "
 0922: 
\n", - "
 0923:             # # Set timeslice equal to the time values at this y_j
\n", - "
+0924:             for i in range(self.len_t):
\n", - "
    __pyx_t_18 = __pyx_v_self->len_t;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "      __pyx_v_i = __pyx_t_20;\n",
-       "
+0925:                 y_result_timeslice_view[i] = self.solution_y_view[j, i]
\n", - "
      __pyx_t_21 = __pyx_v_j;\n",
-       "      __pyx_t_22 = __pyx_v_i;\n",
-       "      __pyx_t_23 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_y_result_timeslice_view.data) + __pyx_t_23)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->solution_y_view.data + __pyx_t_21 * __pyx_v_self->solution_y_view.strides[0]) )) + __pyx_t_22)) )));\n",
-       "    }\n",
-       "
 0926: 
\n", - "
 0927:             # Perform numerical interpolation
\n", - "
+0928:             interp_array(
\n", - "
    __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_self->t_eval_view, __pyx_v_self->solution_t_view, __pyx_v_y_result_timeslice_view, __pyx_v_y_result_temp_view, 0);\n",
-       "
 0929:                 self.t_eval_view,
\n", - "
 0930:                 self.solution_t_view,
\n", - "
 0931:                 y_result_timeslice_view,
\n", - "
 0932:                 y_result_temp_view
\n", - "
 0933:                 )
\n", - "
 0934: 
\n", - "
 0935:             # Store result.
\n", - "
+0936:             for i in range(self.len_t_eval):
\n", - "
    __pyx_t_18 = __pyx_v_self->len_t_eval;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "      __pyx_v_i = __pyx_t_20;\n",
-       "
+0937:                 y_results_reduced_view[j, i] = y_result_temp_view[i]
\n", - "
      __pyx_t_22 = __pyx_v_i;\n",
-       "      __pyx_t_21 = __pyx_v_j;\n",
-       "      __pyx_t_23 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_21 * __pyx_v_y_results_reduced_view.strides[0]) )) + __pyx_t_23)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_y_result_temp_view.data) + __pyx_t_22)) )));\n",
-       "    }\n",
-       "  }\n",
-       "
 0938: 
\n", - "
+0939:         if self.capture_extra:
\n", - "
  __pyx_t_24 = (__pyx_v_self->capture_extra != 0);\n",
-       "  if (__pyx_t_24) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 0940:             # Right now if there is any extra output then it is stored at each time step used in the RK loop.
\n", - "
 0941:             # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?
\n", - "
 0942:             #  or do we use the interpolation on y to find new values.
\n", - "
 0943:             # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.
\n", - "
 0944: 
\n", - "
 0945:             # Create extra output arrays
\n", - "
+0946:             extra_reduced   = np.empty((self.num_extra, self.len_t_eval), dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->num_extra); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_GIVEREF(__pyx_t_3);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);\n",
-       "    __Pyx_GIVEREF(__pyx_t_4);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);\n",
-       "    __pyx_t_3 = 0;\n",
-       "    __pyx_t_4 = 0;\n",
-       "    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GIVEREF(__pyx_t_6);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);\n",
-       "    __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    __pyx_t_25 = ((PyArrayObject *)__pyx_t_5);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_reduced, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "        }\n",
-       "        __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_extra_reduced.diminfo[0].strides = __pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_reduced.diminfo[0].shape = __pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_extra_reduced.diminfo[1].strides = __pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_extra_reduced.diminfo[1].shape = __pyx_pybuffernd_extra_reduced.rcbuffer->pybuffer.shape[1];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 946, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_25 = 0;\n",
-       "    __pyx_v_extra_reduced = ((PyArrayObject *)__pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "
+0947:             extra_timeslice = np.empty(self.len_t, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_self->len_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GIVEREF(__pyx_t_5);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);\n",
-       "    __pyx_t_5 = 0;\n",
-       "    __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    __pyx_t_26 = ((PyArrayObject *)__pyx_t_3);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer, (PyObject*)__pyx_t_26, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_timeslice, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "        }\n",
-       "        __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_extra_timeslice.diminfo[0].strides = __pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_timeslice.diminfo[0].shape = __pyx_pybuffernd_extra_timeslice.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 947, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_26 = 0;\n",
-       "    __pyx_v_extra_timeslice = ((PyArrayObject *)__pyx_t_3);\n",
-       "    __pyx_t_3 = 0;\n",
-       "
+0948:             extra_temp      = np.empty(self.len_t_eval, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_5);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_4);\n",
-       "    __Pyx_GIVEREF(__pyx_t_3);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);\n",
-       "    __pyx_t_3 = 0;\n",
-       "    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_3);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    __pyx_t_26 = ((PyArrayObject *)__pyx_t_2);\n",
-       "    {\n",
-       "      __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_extra_temp.rcbuffer->pybuffer);\n",
-       "      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_temp.rcbuffer->pybuffer, (PyObject*)__pyx_t_26, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "      if (unlikely(__pyx_t_8 < 0)) {\n",
-       "        PyErr_Fetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);\n",
-       "        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_extra_temp.rcbuffer->pybuffer, (PyObject*)__pyx_v_extra_temp, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9);\n",
-       "          __Pyx_RaiseBufferFallbackError();\n",
-       "        } else {\n",
-       "          PyErr_Restore(__pyx_t_11, __pyx_t_10, __pyx_t_9);\n",
-       "        }\n",
-       "        __pyx_t_11 = __pyx_t_10 = __pyx_t_9 = 0;\n",
-       "      }\n",
-       "      __pyx_pybuffernd_extra_temp.diminfo[0].strides = __pyx_pybuffernd_extra_temp.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_extra_temp.diminfo[0].shape = __pyx_pybuffernd_extra_temp.rcbuffer->pybuffer.shape[0];\n",
-       "      if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 948, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_26 = 0;\n",
-       "    __pyx_v_extra_temp = ((PyArrayObject *)__pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+0949:             extra_reduced_view   = extra_reduced
\n", - "
    __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_extra_reduced), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 949, __pyx_L1_error)\n",
-       "    __pyx_v_extra_reduced_view = __pyx_t_13;\n",
-       "    __pyx_t_13.memview = NULL;\n",
-       "    __pyx_t_13.data = NULL;\n",
-       "
+0950:             extra_timeslice_view = extra_timeslice
\n", - "
    __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_extra_timeslice), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 950, __pyx_L1_error)\n",
-       "    __pyx_v_extra_timeslice_view = __pyx_t_14;\n",
-       "    __pyx_t_14.memview = NULL;\n",
-       "    __pyx_t_14.data = NULL;\n",
-       "
+0951:             extra_temp_view      = extra_temp
\n", - "
    __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_extra_temp), PyBUF_WRITABLE); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 951, __pyx_L1_error)\n",
-       "    __pyx_v_extra_temp_view = __pyx_t_14;\n",
-       "    __pyx_t_14.memview = NULL;\n",
-       "    __pyx_t_14.data = NULL;\n",
-       "
 0952: 
\n", - "
+0953:             if self.interpolate_extra:
\n", - "
    __pyx_t_24 = (__pyx_v_self->interpolate_extra != 0);\n",
-       "    if (__pyx_t_24) {\n",
-       "/* … */\n",
-       "      goto __pyx_L10;\n",
-       "    }\n",
-       "
 0954:                 # Continue the interpolation for the extra values.
\n", - "
+0955:                 for j in range(self.num_extra):
\n", - "
      __pyx_t_15 = __pyx_v_self->num_extra;\n",
-       "      __pyx_t_16 = __pyx_t_15;\n",
-       "      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {\n",
-       "        __pyx_v_j = __pyx_t_17;\n",
-       "
 0956:                     # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", - "
 0957:                     # # Set timeslice equal to the time values at this y_j
\n", - "
+0958:                     for i in range(self.len_t):
\n", - "
        __pyx_t_18 = __pyx_v_self->len_t;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_i = __pyx_t_20;\n",
-       "
+0959:                         extra_timeslice_view[i] = self.solution_extra_view[j, i]
\n", - "
          __pyx_t_22 = __pyx_v_j;\n",
-       "          __pyx_t_23 = __pyx_v_i;\n",
-       "          __pyx_t_21 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_extra_timeslice_view.data) + __pyx_t_21)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_self->solution_extra_view.data + __pyx_t_22 * __pyx_v_self->solution_extra_view.strides[0]) )) + __pyx_t_23)) )));\n",
-       "        }\n",
-       "
 0960: 
\n", - "
 0961:                     # Perform numerical interpolation
\n", - "
+0962:                     interp_array(
\n", - "
        __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_self->t_eval_view, __pyx_v_self->solution_t_view, __pyx_v_extra_timeslice_view, __pyx_v_extra_temp_view, 0);\n",
-       "
 0963:                             self.t_eval_view,
\n", - "
 0964:                             self.solution_t_view,
\n", - "
 0965:                             extra_timeslice_view,
\n", - "
 0966:                             extra_temp_view
\n", - "
 0967:                             )
\n", - "
 0968: 
\n", - "
 0969:                     # Store result.
\n", - "
+0970:                     for i in range(self.len_t_eval):
\n", - "
        __pyx_t_18 = __pyx_v_self->len_t_eval;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_i = __pyx_t_20;\n",
-       "
+0971:                         extra_reduced_view[j, i] = extra_temp_view[i]
\n", - "
          __pyx_t_23 = __pyx_v_i;\n",
-       "          __pyx_t_22 = __pyx_v_j;\n",
-       "          __pyx_t_21 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_reduced_view.data + __pyx_t_22 * __pyx_v_extra_reduced_view.strides[0]) )) + __pyx_t_21)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_extra_temp_view.data) + __pyx_t_23)) )));\n",
-       "        }\n",
-       "      }\n",
-       "
 0972:             else:
\n", - "
 0973:                 # Use y and t to recalculate the extra outputs with self.diffeq
\n", - "
+0974:                 for i in range(self.len_t_eval):
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_15 = __pyx_v_self->len_t_eval;\n",
-       "      __pyx_t_16 = __pyx_t_15;\n",
-       "      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {\n",
-       "        __pyx_v_i = __pyx_t_17;\n",
-       "
 0975:                     # Set state variables
\n", - "
+0976:                     self.t_new = self.t_eval_view[i]
\n", - "
        __pyx_t_23 = __pyx_v_i;\n",
-       "        __pyx_v_self->t_new = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->t_eval_view.data) + __pyx_t_23)) )));\n",
-       "
+0977:                     for j in range(self.y_size):
\n", - "
        __pyx_t_18 = __pyx_v_self->y_size;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_j = __pyx_t_20;\n",
-       "
+0978:                         self.y_new_view[j] = y_results_reduced_view[j, i]
\n", - "
          __pyx_t_23 = __pyx_v_j;\n",
-       "          __pyx_t_21 = __pyx_v_i;\n",
-       "          __pyx_t_22 = __pyx_v_j;\n",
-       "          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->y_new_view.data) + __pyx_t_22)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_y_results_reduced_view.data + __pyx_t_23 * __pyx_v_y_results_reduced_view.strides[0]) )) + __pyx_t_21)) )));\n",
-       "        }\n",
-       "
 0979: 
\n", - "
 0980:                     # Call diffeq to recalculate extra outputs
\n", - "
+0981:                     self.diffeq()
\n", - "
        ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->diffeq(__pyx_v_self);\n",
-       "
 0982: 
\n", - "
 0983:                     # Capture extras
\n", - "
+0984:                     for j in range(self.num_extra):
\n", - "
        __pyx_t_18 = __pyx_v_self->num_extra;\n",
-       "        __pyx_t_19 = __pyx_t_18;\n",
-       "        for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {\n",
-       "          __pyx_v_j = __pyx_t_20;\n",
-       "
+0985:                         extra_reduced_view[j, i] = self.extra_output_view[j]
\n", - "
          __pyx_t_21 = __pyx_v_j;\n",
-       "          __pyx_t_23 = __pyx_v_j;\n",
-       "          __pyx_t_22 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_extra_reduced_view.data + __pyx_t_23 * __pyx_v_extra_reduced_view.strides[0]) )) + __pyx_t_22)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->extra_output_view.data) + __pyx_t_21)) )));\n",
-       "        }\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_L10:;\n",
-       "
 0986: 
\n", - "
 0987:         # Replace the solution variables with the new interpolated ones
\n", - "
+0988:         self.solution_t_view = self.t_eval_view
\n", - "
  __pyx_t_14 = __pyx_v_self->t_eval_view;\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_t_14, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_t_view, 0);\n",
-       "  __pyx_v_self->solution_t_view = __pyx_t_14;\n",
-       "  __pyx_t_14.memview = NULL;\n",
-       "  __pyx_t_14.data = NULL;\n",
-       "
+0989:         self.solution_y_view = y_results_reduced_view
\n", - "
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_y_view, 0);\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_v_y_results_reduced_view, 1);\n",
-       "  __pyx_v_self->solution_y_view = __pyx_v_y_results_reduced_view;\n",
-       "
+0990:         if self.capture_extra:
\n", - "
  __pyx_t_24 = (__pyx_v_self->capture_extra != 0);\n",
-       "  if (__pyx_t_24) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+0991:             self.solution_extra_view = extra_reduced_view
\n", - "
    __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->solution_extra_view, 0);\n",
-       "    __PYX_INC_MEMVIEW(&__pyx_v_extra_reduced_view, 1);\n",
-       "    __pyx_v_self->solution_extra_view = __pyx_v_extra_reduced_view;\n",
-       "
 0992: 
\n", - "
+0993:         self.status = old_status
\n", - "
  __pyx_v_self->status = __pyx_v_old_status;\n",
-       "
 0994: 
\n", - "
 0995: 
\n", - "
+0996:     cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_span(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_t_span, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_span *__pyx_optional_args) {\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_t_span\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "    }\n",
-       "  }\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_t_span); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span)) {\n",
-       "        __pyx_t_3 = __pyx_convert__to_py___pyx_ctuple_double__and_double(__pyx_v_t_span); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
-       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
-       "          if (likely(__pyx_t_6)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
-       "            __Pyx_INCREF(__pyx_t_6);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
-       "            __pyx_t_7 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
-       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_span\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span = {\"change_t_span\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_t_span (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_span,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 996, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 996, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_t_span\") < 0)) __PYX_ERR(0, 996, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 996, __pyx_L3_error)\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 996, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_t_span\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 996, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_span\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6change_t_span(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_t_span, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_6change_t_span(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_t_span, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_t_span\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_t_span(__pyx_v_self, __pyx_v_t_span, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_span\", __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__55 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_t_span, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__55);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__55);\n",
-       "  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_t_span, 996, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_7change_t_span, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_t_span, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__57);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_t_span, __pyx_t_7) < 0) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__57 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 996, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__57);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__57);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_span {\n",
-       "  int __pyx_n;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 0997: 
\n", - "
 0998:         # Update time domain information
\n", - "
+0999:         self.t_start     = t_span[0]
\n", - "
  __pyx_v_self->t_start = __pyx_v_t_span.f0;\n",
-       "
+1000:         self.t_end       = t_span[1]
\n", - "
  __pyx_v_self->t_end = __pyx_v_t_span.f1;\n",
-       "
+1001:         self.t_delta     = self.t_end - self.t_start
\n", - "
  __pyx_v_self->t_delta = (__pyx_v_self->t_end - __pyx_v_self->t_start);\n",
-       "
+1002:         self.t_delta_abs = fabs(self.t_delta)
\n", - "
  __pyx_v_self->t_delta_abs = fabs(__pyx_v_self->t_delta);\n",
-       "
+1003:         if self.t_delta >= 0.:
\n", - "
  __pyx_t_8 = (__pyx_v_self->t_delta >= 0.);\n",
-       "  if (__pyx_t_8) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
+1004:             self.direction_flag = True
\n", - "
    __pyx_v_self->direction_flag = 1;\n",
-       "
+1005:             self.direction_inf  = INF
\n", - "
    __pyx_v_self->direction_inf = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF;\n",
-       "
 1006:         else:
\n", - "
+1007:             self.direction_flag = False
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_self->direction_flag = 0;\n",
-       "
+1008:             self.direction_inf  = -INF
\n", - "
    __pyx_v_self->direction_inf = (-__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_INF);\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
 1009: 
\n", - "
 1010:         # A change to t-span will affect the first step's size
\n", - "
+1011:         self.recalc_firststep = True
\n", - "
  __pyx_v_self->recalc_firststep = 1;\n",
-       "
 1012: 
\n", - "
+1013:         if auto_reset_state:
\n", - "
  __pyx_t_8 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_8) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1014:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1014, __pyx_L1_error)\n",
-       "
 1015: 
\n", - "
 1016: 
\n", - "
+1017:     cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_y0, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0 *__pyx_optional_args) {\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  Py_ssize_t __pyx_v_y_size_new;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_y0\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "    }\n",
-       "  }\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_y0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0)) {\n",
-       "        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
-       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
-       "          if (likely(__pyx_t_6)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
-       "            __Pyx_INCREF(__pyx_t_6);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
-       "            __pyx_t_7 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
-       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_y0\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0 = {\"change_y0\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_y0 (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y0,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_y0\") < 0)) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[0], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_y0\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1017, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_y0\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_8change_y0(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_y0, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_8change_y0(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_y0, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_y0\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_y0(__pyx_v_self, __pyx_v_y0, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_y0\", __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__58 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_y0, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__58);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__58);\n",
-       "  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_y0, 1017, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_9change_y0, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_y0, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__60);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_y0, __pyx_t_7) < 0) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__60 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 1017, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__60);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__60);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_y0 {\n",
-       "  int __pyx_n;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 1018: 
\n", - "
 1019:         # Check y-size information
\n", - "
 1020:         cdef Py_ssize_t y_size_new
\n", - "
+1021:         y_size_new = len(y0)
\n", - "
  __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_y0); \n",
-       "  __pyx_v_y_size_new = __pyx_t_8;\n",
-       "
 1022: 
\n", - "
+1023:         if self.y_size != y_size_new:
\n", - "
  __pyx_t_9 = (__pyx_v_self->y_size != __pyx_v_y_size_new);\n",
-       "  if (unlikely(__pyx_t_9)) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 1024:             # So many things need to update if ysize changes that the user might as well just
\n", - "
 1025:             #  create a new class instance.
\n", - "
+1026:             self.status = -8
\n", - "
    __pyx_v_self->status = -8;\n",
-       "
+1027:             self.message = "Attribute error."
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "    __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "    __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "    __Pyx_DECREF(__pyx_v_self->message);\n",
-       "    __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+1028:             raise AttributeError('New y0 must be the same size as the original y0 used to create CySolver class.'
\n", - "
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __PYX_ERR(0, 1028, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_New_y0_must_be_the_same_size_as); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 1028, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__27);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__27);\n",
-       "
 1029:                                  'Create new CySolver instance instead.')
\n", - "
 1030: 
\n", - "
 1031:         # Store y0 values for later
\n", - "
+1032:         self.y0_view = y0
\n", - "
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->y0_view, 0);\n",
-       "  __PYX_INC_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __pyx_v_self->y0_view = __pyx_v_y0;\n",
-       "
 1033: 
\n", - "
 1034:         # A change to y0 will affect the first step's size
\n", - "
+1035:         self.recalc_firststep = True
\n", - "
  __pyx_v_self->recalc_firststep = 1;\n",
-       "
 1036: 
\n", - "
+1037:         if auto_reset_state:
\n", - "
  __pyx_t_9 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_9) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1038:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1038, __pyx_L1_error)\n",
-       "
 1039: 
\n", - "
 1040: 
\n", - "
+1041:     cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_args, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args *__pyx_optional_args) {\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  PyArrayObject *__pyx_v_arg_array = 0;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_arg_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_arg_array;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_args\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "    }\n",
-       "  }\n",
-       "  __pyx_pybuffer_arg_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_arg_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_arg_array.data = NULL;\n",
-       "  __pyx_pybuffernd_arg_array.rcbuffer = &__pyx_pybuffer_arg_array;\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args)) {\n",
-       "        __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_4 = __pyx_t_1; __pyx_t_5 = NULL;\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {\n",
-       "          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);\n",
-       "          if (likely(__pyx_t_5)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);\n",
-       "            __Pyx_INCREF(__pyx_t_5);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_4, function);\n",
-       "            __pyx_t_6 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_args, __pyx_t_3};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);\n",
-       "          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_12, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_args\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_arg_array);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args = {\"change_args\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_args (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_args\") < 0)) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_args = ((PyObject*)values[0]);\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_args\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1041, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_args\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10change_args(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_args, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10change_args(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, PyObject *__pyx_v_args, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_args\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_args(__pyx_v_self, __pyx_v_args, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_args\", __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__61 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__61);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__61);\n",
-       "  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_args, 1041, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_11change_args, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_args, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__63);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_args, __pyx_t_7) < 0) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__63 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 1041, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__63);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__63);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_args {\n",
-       "  int __pyx_n;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 1042: 
\n", - "
 1043:         # Determine optional arguments
\n", - "
 1044:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array
\n", - "
 1045: 
\n", - "
+1046:         self.num_args = len(args)
\n", - "
  if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "    PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
-       "    __PYX_ERR(0, 1046, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_7 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1046, __pyx_L1_error)\n",
-       "  __pyx_v_self->num_args = __pyx_t_7;\n",
-       "
+1047:         arg_array = np.empty(self.num_args, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __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_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->num_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer);\n",
-       "    __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_6 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_arg_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_arg_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);\n",
-       "      }\n",
-       "      __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_arg_array.diminfo[0].strides = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_arg_array.diminfo[0].shape = __pyx_pybuffernd_arg_array.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1047, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_v_arg_array = ((PyArrayObject *)__pyx_t_5);\n",
-       "  __pyx_t_5 = 0;\n",
-       "
+1048:         self.arg_array_view = arg_array
\n", - "
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_arg_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 1048, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->arg_array_view, 0);\n",
-       "  __pyx_v_self->arg_array_view = __pyx_t_12;\n",
-       "  __pyx_t_12.memview = NULL;\n",
-       "  __pyx_t_12.data = NULL;\n",
-       "
+1049:         for i in range(self.num_args):
\n", - "
  __pyx_t_7 = __pyx_v_self->num_args;\n",
-       "  __pyx_t_13 = __pyx_t_7;\n",
-       "  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {\n",
-       "    __pyx_v_i = __pyx_t_14;\n",
-       "
+1050:             self.arg_array_view[i] = args[i]
\n", - "
    if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 1050, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_15 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_v_args, __pyx_v_i)); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1050, __pyx_L1_error)\n",
-       "    __pyx_t_16 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->arg_array_view.data) + __pyx_t_16)) )) = __pyx_t_15;\n",
-       "  }\n",
-       "
 1051: 
\n", - "
 1052:         # A change to args will affect the first step's size
\n", - "
+1053:         self.recalc_firststep = True
\n", - "
  __pyx_v_self->recalc_firststep = 1;\n",
-       "
 1054: 
\n", - "
+1055:         if auto_reset_state:
\n", - "
  __pyx_t_17 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_17) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1056:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1056, __pyx_L1_error)\n",
-       "
 1057: 
\n", - "
 1058: 
\n", - "
+1059:     cpdef void change_tols(self, double rtol = NAN, double atol = NAN, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols *__pyx_optional_args) {\n",
-       "  double __pyx_v_rtol = __pyx_k__28;\n",
-       "  double __pyx_v_atol = __pyx_k__29;\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_tols\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_rtol = __pyx_optional_args->rtol;\n",
-       "      if (__pyx_optional_args->__pyx_n > 1) {\n",
-       "        __pyx_v_atol = __pyx_optional_args->atol;\n",
-       "        if (__pyx_optional_args->__pyx_n > 2) {\n",
-       "          __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "        }\n",
-       "      }\n",
-       "    }\n",
-       "  }\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_tols); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols)) {\n",
-       "        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_rtol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = PyFloat_FromDouble(__pyx_v_atol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_5);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_6 = __pyx_t_1; __pyx_t_7 = NULL;\n",
-       "        __pyx_t_8 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {\n",
-       "          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);\n",
-       "          if (likely(__pyx_t_7)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);\n",
-       "            __Pyx_INCREF(__pyx_t_7);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_6, function);\n",
-       "            __pyx_t_8 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_5};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 3+__pyx_t_8);\n",
-       "          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_tols\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols = {\"change_tols\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_tols (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[3] = {0,0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[0] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[2] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_tols\") < 0)) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    if (values[0]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = __pyx_k__28;\n",
-       "    }\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = __pyx_k__29;\n",
-       "    }\n",
-       "    if (values[2]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_tols\", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 1059, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_tols\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12change_tols(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12change_tols(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_rtol, double __pyx_v_atol, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_tols\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 3;\n",
-       "  __pyx_t_1.rtol = __pyx_v_rtol;\n",
-       "  __pyx_t_1.atol = __pyx_v_atol;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_tols(__pyx_v_self, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_tols\", __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_k__28 = NAN;\n",
-       "  __pyx_k__29 = NAN;\n",
-       "/* … */\n",
-       "  __pyx_tuple__64 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__64);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__64);\n",
-       "  __pyx_t_7 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_5 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);\n",
-       "  __Pyx_INCREF(Py_False);\n",
-       "  __Pyx_GIVEREF(Py_False);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_False);\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_13change_tols, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_tols, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_tols, __pyx_t_5) < 0) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_tols, 1059, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 1059, __pyx_L1_error)\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_tols {\n",
-       "  int __pyx_n;\n",
-       "  double rtol;\n",
-       "  double atol;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 1060: 
\n", - "
 1061:         # Update tolerances
\n", - "
+1062:         if not isnan(rtol):
\n", - "
  __pyx_t_9 = (!isnan(__pyx_v_rtol));\n",
-       "  if (__pyx_t_9) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1063:             self.rtol = rtol
\n", - "
    __pyx_v_self->rtol = __pyx_v_rtol;\n",
-       "
+1064:         if not isnan(atol):
\n", - "
  __pyx_t_9 = (!isnan(__pyx_v_atol));\n",
-       "  if (__pyx_t_9) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1065:             self.atol = atol
\n", - "
    __pyx_v_self->atol = __pyx_v_atol;\n",
-       "
 1066: 
\n", - "
+1067:         if self.rtol < EPS_100:
\n", - "
  __pyx_t_9 = (__pyx_v_self->rtol < __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100);\n",
-       "  if (__pyx_t_9) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1068:             self.rtol = EPS_100
\n", - "
    __pyx_v_self->rtol = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EPS_100;\n",
-       "
 1069:         # TODO: array based atol
\n", - "
 1070:         #     atol_arr = np.asarray(atol, dtype=)
\n", - "
 1071:         #     if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:
\n", - "
 1072:         #         # atol must be either the same for all y or must be provided as an array, one for each y.
\n", - "
 1073:         #         raise Exception
\n", - "
 1074: 
\n", - "
 1075:         # A change to tolerances will affect the first step's size
\n", - "
+1076:         self.recalc_firststep = True
\n", - "
  __pyx_v_self->recalc_firststep = 1;\n",
-       "
 1077: 
\n", - "
+1078:         if auto_reset_state:
\n", - "
  __pyx_t_9 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_9) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1079:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1079, __pyx_L1_error)\n",
-       "
 1080: 
\n", - "
 1081: 
\n", - "
+1082:     cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_max_step_size, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size *__pyx_optional_args) {\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_max_step_size\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "    }\n",
-       "  }\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_max_step_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size)) {\n",
-       "        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_max_step_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
-       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
-       "          if (likely(__pyx_t_6)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
-       "            __Pyx_INCREF(__pyx_t_6);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
-       "            __pyx_t_7 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
-       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_max_step_size\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size = {\"change_max_step_size\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  double __pyx_v_max_step_size;\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_max_step_size (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_step_size,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_max_step_size\") < 0)) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_max_step_size\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1082, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_max_step_size\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14change_max_step_size(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_max_step_size, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14change_max_step_size(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_max_step_size, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_max_step_size\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_max_step_size(__pyx_v_self, __pyx_v_max_step_size, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_max_step_size\", __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__66 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_max_step_size, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__66);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__66);\n",
-       "  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_max_step_size, 1082, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_15change_max_step_size, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_max_step_size, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__68);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_max_step_size, __pyx_t_5) < 0) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__68 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 1082, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__68);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__68);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_max_step_size {\n",
-       "  int __pyx_n;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 1083: 
\n", - "
+1084:         self.max_step_size = max_step_size
\n", - "
  __pyx_v_self->max_step_size = __pyx_v_max_step_size;\n",
-       "
 1085: 
\n", - "
+1086:         if auto_reset_state:
\n", - "
  __pyx_t_8 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_8) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1087:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1087, __pyx_L1_error)\n",
-       "
 1088: 
\n", - "
 1089: 
\n", - "
+1090:     cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_first_step, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step *__pyx_optional_args) {\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_first_step\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "    }\n",
-       "  }\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_first_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step)) {\n",
-       "        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_first_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
-       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
-       "          if (likely(__pyx_t_6)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
-       "            __Pyx_INCREF(__pyx_t_6);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
-       "            __pyx_t_7 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
-       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_first_step\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step = {\"change_first_step\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  double __pyx_v_first_step;\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_first_step (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_first_step,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_first_step\") < 0)) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_first_step\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1090, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_first_step\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_16change_first_step(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_first_step, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_16change_first_step(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, double __pyx_v_first_step, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_first_step\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_first_step(__pyx_v_self, __pyx_v_first_step, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_first_step\", __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__69 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_first_step, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__69);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__69);\n",
-       "  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_first_step, 1090, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_17change_first_step, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_first_step, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__71);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_first_step, __pyx_t_5) < 0) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__71 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 1090, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__71);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__71);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_first_step {\n",
-       "  int __pyx_n;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 1091: 
\n", - "
+1092:         self.first_step = first_step
\n", - "
  __pyx_v_self->first_step = __pyx_v_first_step;\n",
-       "
+1093:         if self.first_step == 0.:
\n", - "
  __pyx_t_8 = (__pyx_v_self->first_step == 0.);\n",
-       "  if (__pyx_t_8) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
+1094:             self.step_size = self.calc_first_step()
\n", - "
    __pyx_v_self->step_size = ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->calc_first_step(__pyx_v_self);\n",
-       "
 1095:         else:
\n", - "
+1096:             if self.first_step <= 0.:
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_8 = (__pyx_v_self->first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_8)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+1097:                 self.status = -8
\n", - "
      __pyx_v_self->status = -8;\n",
-       "
+1098:                 self.message = "Attribute error."
\n", - "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "      __Pyx_DECREF(__pyx_v_self->message);\n",
-       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+1099:                 raise AttributeError('Error in user-provided step size: Step size must be a positive number.')
\n", - "
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __PYX_ERR(0, 1099, __pyx_L1_error)\n",
-       "
+1100:             elif self.first_step > self.t_delta_abs:
\n", - "
    __pyx_t_8 = (__pyx_v_self->first_step > __pyx_v_self->t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_8)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+1101:                 self.status = -8
\n", - "
      __pyx_v_self->status = -8;\n",
-       "
+1102:                 self.message = "Attribute error."
\n", - "
      __Pyx_INCREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GIVEREF(__pyx_kp_u_Attribute_error);\n",
-       "      __Pyx_GOTREF(__pyx_v_self->message);\n",
-       "      __Pyx_DECREF(__pyx_v_self->message);\n",
-       "      __pyx_v_self->message = __pyx_kp_u_Attribute_error;\n",
-       "
+1103:                 raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')
\n", - "
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1103, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_Raise(__pyx_t_1, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __PYX_ERR(0, 1103, __pyx_L1_error)\n",
-       "
+1104:             self.step_size = self.first_step
\n", - "
    __pyx_t_9 = __pyx_v_self->first_step;\n",
-       "    __pyx_v_self->step_size = __pyx_t_9;\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
 1105: 
\n", - "
 1106:         # If first step has already been reset then no need to call it again later.
\n", - "
+1107:         self.recalc_firststep = False
\n", - "
  __pyx_v_self->recalc_firststep = 0;\n",
-       "
 1108: 
\n", - "
+1109:         if auto_reset_state:
\n", - "
  __pyx_t_8 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_8) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1110:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1110, __pyx_L1_error)\n",
-       "
 1111: 
\n", - "
 1112: 
\n", - "
+1113:     cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = False):
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_t_eval, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval *__pyx_optional_args) {\n",
-       "  bool __pyx_v_auto_reset_state = ((bool)0);\n",
-       "  PyArrayObject *__pyx_v_t_eval_array = 0;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  __Pyx_LocalBuf_ND __pyx_pybuffernd_t_eval_array;\n",
-       "  __Pyx_Buffer __pyx_pybuffer_t_eval_array;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_t_eval\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "    }\n",
-       "  }\n",
-       "  __pyx_pybuffer_t_eval_array.pybuffer.buf = NULL;\n",
-       "  __pyx_pybuffer_t_eval_array.refcount = 0;\n",
-       "  __pyx_pybuffernd_t_eval_array.data = NULL;\n",
-       "  __pyx_pybuffernd_t_eval_array.rcbuffer = &__pyx_pybuffer_t_eval_array;\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_t_eval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval)) {\n",
-       "        __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {\n",
-       "          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);\n",
-       "          if (likely(__pyx_t_6)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);\n",
-       "            __Pyx_INCREF(__pyx_t_6);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_5, function);\n",
-       "            __pyx_t_7 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);\n",
-       "          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);\n",
-       "  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;\n",
-       "    __Pyx_PyThreadState_declare\n",
-       "    __Pyx_PyThreadState_assign\n",
-       "    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
-       "  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_eval\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  goto __pyx_L2;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
-       "  __pyx_L2:;\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_t_eval_array);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval = {\"change_t_eval\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_t_eval (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_eval,&__pyx_n_s_auto_reset_state,0};\n",
-       "    PyObject* values[2] = {0,0};\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_t_eval\") < 0)) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(values[0], 0); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_auto_reset_state = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_t_eval\", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1113, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_eval\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_18change_t_eval(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_t_eval, __pyx_v_auto_reset_state);\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_18change_t_eval(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_auto_reset_state) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_t_eval\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 1;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_t_eval(__pyx_v_self, __pyx_v_t_eval, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_t_eval\", __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__72 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_t_eval, __pyx_n_s_auto_reset_state); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__72);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__72);\n",
-       "  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_t_eval, 1113, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_19change_t_eval, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_t_eval, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__74);\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_t_eval, __pyx_t_5) < 0) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_tuple__74 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 1113, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__74);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__74);\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_t_eval {\n",
-       "  int __pyx_n;\n",
-       "  bool auto_reset_state;\n",
-       "};\n",
-       "
 1114: 
\n", - "
 1115:         # Determine interpolation information
\n", - "
 1116:         cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array
\n", - "
 1117: 
\n", - "
+1118:         self.run_interpolation = True
\n", - "
  __pyx_v_self->run_interpolation = 1;\n",
-       "
+1119:         self.len_t_eval = len(t_eval)
\n", - "
  __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_t_eval); \n",
-       "  __pyx_v_self->len_t_eval = __pyx_t_8;\n",
-       "
 1120: 
\n", - "
+1121:         t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __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_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->len_t_eval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_3) < 0) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);\n",
-       "  {\n",
-       "    __Pyx_BufFmt_StackElem __pyx_stack[1];\n",
-       "    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer);\n",
-       "    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);\n",
-       "    if (unlikely(__pyx_t_7 < 0)) {\n",
-       "      PyErr_Fetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);\n",
-       "      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer, (PyObject*)__pyx_v_t_eval_array, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {\n",
-       "        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12);\n",
-       "        __Pyx_RaiseBufferFallbackError();\n",
-       "      } else {\n",
-       "        PyErr_Restore(__pyx_t_10, __pyx_t_11, __pyx_t_12);\n",
-       "      }\n",
-       "      __pyx_t_10 = __pyx_t_11 = __pyx_t_12 = 0;\n",
-       "    }\n",
-       "    __pyx_pybuffernd_t_eval_array.diminfo[0].strides = __pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_t_eval_array.diminfo[0].shape = __pyx_pybuffernd_t_eval_array.rcbuffer->pybuffer.shape[0];\n",
-       "    if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1121, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_v_t_eval_array = ((PyArrayObject *)__pyx_t_3);\n",
-       "  __pyx_t_3 = 0;\n",
-       "
+1122:         self.t_eval_view = t_eval_array
\n", - "
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_t_eval_array), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 1122, __pyx_L1_error)\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_self->t_eval_view, 0);\n",
-       "  __pyx_v_self->t_eval_view = __pyx_t_13;\n",
-       "  __pyx_t_13.memview = NULL;\n",
-       "  __pyx_t_13.data = NULL;\n",
-       "
+1123:         for i in range(self.len_t_eval):
\n", - "
  __pyx_t_8 = __pyx_v_self->len_t_eval;\n",
-       "  __pyx_t_14 = __pyx_t_8;\n",
-       "  for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {\n",
-       "    __pyx_v_i = __pyx_t_15;\n",
-       "
+1124:             self.t_eval_view[i] = t_eval[i]
\n", - "
    __pyx_t_16 = __pyx_v_i;\n",
-       "    __pyx_t_17 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->t_eval_view.data) + __pyx_t_17)) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_16 * __pyx_v_t_eval.strides[0]) )));\n",
-       "  }\n",
-       "
 1125: 
\n", - "
+1126:         if auto_reset_state:
\n", - "
  __pyx_t_18 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_18) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1127:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1127, __pyx_L1_error)\n",
-       "
 1128: 
\n", - "
 1129: 
\n", - "
+1130:     cpdef void change_parameters(
\n", - "
static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters *__pyx_optional_args) {\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span = __pyx_k__30;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = __pyx_k__31;\n",
-       "/* … */\n",
-       "  /* Check if called by wrapper */\n",
-       "  if (unlikely(__pyx_skip_dispatch)) ;\n",
-       "  /* Check if overridden in Python */\n",
-       "  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {\n",
-       "    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {\n",
-       "      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      #endif\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_change_parameters); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      #ifdef __Pyx_CyFunction_USED\n",
-       "      if (!__Pyx_IsCyOrPyCFunction(__pyx_t_1)\n",
-       "      #else\n",
-       "      if (!PyCFunction_Check(__pyx_t_1)\n",
-       "      #endif\n",
-       "              || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters)) {\n",
-       "        __pyx_t_3 = __pyx_convert__to_py___pyx_ctuple_double__and_double(__pyx_v_t_span); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_3);\n",
-       "        __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_4);\n",
-       "        __pyx_t_5 = PyFloat_FromDouble(__pyx_v_rtol); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_5);\n",
-       "        __pyx_t_6 = PyFloat_FromDouble(__pyx_v_atol); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_max_step_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __pyx_t_8 = PyFloat_FromDouble(__pyx_v_first_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __pyx_t_9 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_9);\n",
-       "        __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_auto_reset_state); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_10);\n",
-       "        __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_v_auto_solve); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_11);\n",
-       "        __Pyx_INCREF(__pyx_t_1);\n",
-       "        __pyx_t_12 = __pyx_t_1; __pyx_t_13 = NULL;\n",
-       "        __pyx_t_14 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {\n",
-       "          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);\n",
-       "          if (likely(__pyx_t_13)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);\n",
-       "            __Pyx_INCREF(__pyx_t_13);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_12, function);\n",
-       "            __pyx_t_14 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[11] = {__pyx_t_13, __pyx_t_3, __pyx_t_4, __pyx_v_args, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_11};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_14, 10+__pyx_t_14);\n",
-       "          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        goto __pyx_L0;\n",
-       "      }\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));\n",
-       "      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {\n",
-       "        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;\n",
-       "      }\n",
-       "      #endif\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS\n",
-       "    }\n",
-       "    #endif\n",
-       "  }\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __Pyx_XDECREF(__pyx_t_10);\n",
-       "  __Pyx_XDECREF(__pyx_t_11);\n",
-       "  __Pyx_XDECREF(__pyx_t_12);\n",
-       "  __Pyx_XDECREF(__pyx_t_13);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_parameters\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "}\n",
-       "\n",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       "); /*proto*/\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters = {\"change_parameters\", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters(PyObject *__pyx_v_self, \n",
-       "#if CYTHON_METH_FASTCALL\n",
-       "PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds\n",
-       "#else\n",
-       "PyObject *__pyx_args, PyObject *__pyx_kwds\n",
-       "#endif\n",
-       ") {\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  double __pyx_v_max_step_size;\n",
-       "  double __pyx_v_first_step;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_auto_reset_state;\n",
-       "  bool __pyx_v_auto_solve;\n",
-       "  #if !CYTHON_METH_FASTCALL\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  #endif\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_parameters (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step_size,&__pyx_n_s_first_step,&__pyx_n_s_t_eval,&__pyx_n_s_auto_reset_state,&__pyx_n_s_auto_solve,0};\n",
-       "    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_20change_parameters(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step_size, double __pyx_v_first_step, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_auto_reset_state, bool __pyx_v_auto_solve) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_parameters\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1.__pyx_n = 10;\n",
-       "  __pyx_t_1.t_span = __pyx_v_t_span;\n",
-       "  __pyx_t_1.y0 = __pyx_v_y0;\n",
-       "  __pyx_t_1.args = __pyx_v_args;\n",
-       "  __pyx_t_1.rtol = __pyx_v_rtol;\n",
-       "  __pyx_t_1.atol = __pyx_v_atol;\n",
-       "  __pyx_t_1.max_step_size = __pyx_v_max_step_size;\n",
-       "  __pyx_t_1.first_step = __pyx_v_first_step;\n",
-       "  __pyx_t_1.t_eval = __pyx_v_t_eval;\n",
-       "  __pyx_t_1.auto_reset_state = __pyx_v_auto_reset_state;\n",
-       "  __pyx_t_1.auto_solve = __pyx_v_auto_solve;\n",
-       "  __pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->change_parameters(__pyx_v_self, 1, &__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_r = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_parameters\", __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__75 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_t_span, __pyx_n_s_y0, __pyx_n_s_args, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_max_step_size, __pyx_n_s_first_step, __pyx_n_s_t_eval, __pyx_n_s_auto_reset_state, __pyx_n_s_auto_solve); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__75);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__75);\n",
-       "/* … */\n",
-       "  __pyx_t_20 = PyTuple_New(10); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_20);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_t_4);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 2, Py_None);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 3, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_16);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 4, __pyx_t_16);\n",
-       "  __Pyx_GIVEREF(__pyx_t_17);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 5, __pyx_t_17);\n",
-       "  __Pyx_GIVEREF(__pyx_t_18);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 6, __pyx_t_18);\n",
-       "  __Pyx_GIVEREF(__pyx_t_19);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 7, __pyx_t_19);\n",
-       "  __Pyx_INCREF(Py_True);\n",
-       "  __Pyx_GIVEREF(Py_True);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 8, Py_True);\n",
-       "  __Pyx_INCREF(Py_False);\n",
-       "  __Pyx_GIVEREF(Py_False);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_20, 9, Py_False);\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_16 = 0;\n",
-       "  __pyx_t_17 = 0;\n",
-       "  __pyx_t_18 = 0;\n",
-       "  __pyx_t_19 = 0;\n",
-       "  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_21change_parameters, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CySolver_change_parameters, NULL, __pyx_n_s_cython_magic_de3847f4b40d9cf0b1, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_19);\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_t_20);\n",
-       "  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;\n",
-       "  if (PyDict_SetItem((PyObject *)__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver->tp_dict, __pyx_n_s_change_parameters, __pyx_t_19) < 0) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;\n",
-       "  PyType_Modified(__pyx_ptype_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver);\n",
-       "  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(11, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_C_Users_joepr_ipython_cython__cy, __pyx_n_s_change_parameters, 1130, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 1130, __pyx_L1_error)\n",
-       "/* … */\n",
-       "struct __pyx_opt_args_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_change_parameters {\n",
-       "  int __pyx_n;\n",
-       "  __pyx_ctuple_double__and_double t_span;\n",
-       "  __Pyx_memviewslice y0;\n",
-       "  PyObject *args;\n",
-       "  double rtol;\n",
-       "  double atol;\n",
-       "  double max_step_size;\n",
-       "  double first_step;\n",
-       "  __Pyx_memviewslice t_eval;\n",
-       "  bool auto_reset_state;\n",
-       "  bool auto_solve;\n",
-       "};\n",
-       "
 1131:             self,
\n", - "
+1132:             (double, double) t_span = EMPTY_T_SPAN,
\n", - "
  __pyx_k__30 = __pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EMPTY_T_SPAN;\n",
-       "/* … */\n",
-       "  __pyx_t_5 = __pyx_convert__to_py___pyx_ctuple_double__and_double(__pyx_v_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_EMPTY_T_SPAN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1132, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "
+1133:             const double[::1] y0 = None,
\n", - "
  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 1133, __pyx_L1_error)\n",
-       "  __pyx_k__31 = __pyx_t_14;\n",
-       "  __pyx_t_14.memview = NULL;\n",
-       "  __pyx_t_14.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_14 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_14.memview)) __PYX_ERR(0, 1133, __pyx_L1_error)\n",
-       "  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_14, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1133, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_14, 1);\n",
-       "  __pyx_t_14.memview = NULL; __pyx_t_14.data = NULL;\n",
-       "
+1134:             tuple args = None,
\n", - "
  PyObject *__pyx_v_args = ((PyObject*)Py_None);\n",
-       "  double __pyx_v_rtol = __pyx_k__32;\n",
-       "  double __pyx_v_atol = __pyx_k__33;\n",
-       "  double __pyx_v_max_step_size = __pyx_k__34;\n",
-       "  double __pyx_v_first_step = __pyx_k__35;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = __pyx_k__36;\n",
-       "/* … */\n",
-       "    values[2] = ((PyObject*)Py_None);\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span);\n",
-       "          if (value) { values[0] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0);\n",
-       "          if (value) { values[1] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
-       "          if (value) { values[2] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[3] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step_size);\n",
-       "          if (value) { values[5] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
-       "          if (value) { values[6] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
-       "          if (value) { values[7] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_reset_state);\n",
-       "          if (value) { values[8] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_auto_solve);\n",
-       "          if (value) { values[9] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"change_parameters\") < 0)) __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    if (values[0]) {\n",
-       "      __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[0]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1132, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_span = __pyx_k__30;\n",
-       "    }\n",
-       "    if (values[1]) {\n",
-       "      __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[1], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 1133, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_y0 = __pyx_k__31;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "    }\n",
-       "    __pyx_v_args = ((PyObject*)values[2]);\n",
-       "    if (values[3]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1135, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = __pyx_k__32;\n",
-       "    }\n",
-       "    if (values[4]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1136, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = __pyx_k__33;\n",
-       "    }\n",
-       "    if (values[5]) {\n",
-       "      __pyx_v_max_step_size = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_max_step_size == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1137, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_step_size = __pyx_k__34;\n",
-       "    }\n",
-       "    if (values[6]) {\n",
-       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1138, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_first_step = __pyx_k__35;\n",
-       "    }\n",
-       "    if (values[7]) {\n",
-       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(values[7], 0); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 1139, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_eval = __pyx_k__36;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "    }\n",
-       "    if (values[8]) {\n",
-       "      __pyx_v_auto_reset_state = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_auto_reset_state == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1140, __pyx_L3_error)\n",
-       "    } else {\n",
-       "
+1135:             double rtol = NAN,
\n", - "
  __pyx_k__32 = NAN;\n",
-       "/* … */\n",
-       "  __pyx_t_7 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1135, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "
+1136:             double atol = NAN,
\n", - "
  __pyx_k__33 = NAN;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1136, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_16);\n",
-       "
+1137:             double max_step_size = NAN,
\n", - "
  __pyx_k__34 = NAN;\n",
-       "/* … */\n",
-       "  __pyx_t_17 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1137, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_17);\n",
-       "
+1138:             double first_step = NAN,
\n", - "
  __pyx_k__35 = NAN;\n",
-       "/* … */\n",
-       "  __pyx_t_18 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1138, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_18);\n",
-       "
+1139:             const double[::1] t_eval = None,
\n", - "
  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 1139, __pyx_L1_error)\n",
-       "  __pyx_k__36 = __pyx_t_15;\n",
-       "  __pyx_t_15.memview = NULL;\n",
-       "  __pyx_t_15.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_15 = __Pyx_PyObject_to_MemoryviewSlice_dc_double__const__(Py_None, 0); if (unlikely(!__pyx_t_15.memview)) __PYX_ERR(0, 1139, __pyx_L1_error)\n",
-       "  __pyx_t_19 = __pyx_memoryview_fromslice(__pyx_t_15, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 1139, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_19);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_15, 1);\n",
-       "  __pyx_t_15.memview = NULL; __pyx_t_15.data = NULL;\n",
-       "
+1140:             bool_cpp_t auto_reset_state = True,
\n", - "
  bool __pyx_v_auto_reset_state = ((bool)1);\n",
-       "/* … */\n",
-       "      __pyx_v_auto_reset_state = ((bool)1);\n",
-       "    }\n",
-       "    if (values[9]) {\n",
-       "      __pyx_v_auto_solve = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_auto_solve == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L3_error)\n",
-       "    } else {\n",
-       "
+1141:             bool_cpp_t auto_solve = False):
\n", - "
  bool __pyx_v_auto_solve = ((bool)0);\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"change_parameters\", 0);\n",
-       "  if (__pyx_optional_args) {\n",
-       "    if (__pyx_optional_args->__pyx_n > 0) {\n",
-       "      __pyx_v_t_span = __pyx_optional_args->t_span;\n",
-       "      if (__pyx_optional_args->__pyx_n > 1) {\n",
-       "        __pyx_v_y0 = __pyx_optional_args->y0;\n",
-       "        if (__pyx_optional_args->__pyx_n > 2) {\n",
-       "          __pyx_v_args = __pyx_optional_args->args;\n",
-       "          if (__pyx_optional_args->__pyx_n > 3) {\n",
-       "            __pyx_v_rtol = __pyx_optional_args->rtol;\n",
-       "            if (__pyx_optional_args->__pyx_n > 4) {\n",
-       "              __pyx_v_atol = __pyx_optional_args->atol;\n",
-       "              if (__pyx_optional_args->__pyx_n > 5) {\n",
-       "                __pyx_v_max_step_size = __pyx_optional_args->max_step_size;\n",
-       "                if (__pyx_optional_args->__pyx_n > 6) {\n",
-       "                  __pyx_v_first_step = __pyx_optional_args->first_step;\n",
-       "                  if (__pyx_optional_args->__pyx_n > 7) {\n",
-       "                    __pyx_v_t_eval = __pyx_optional_args->t_eval;\n",
-       "                    if (__pyx_optional_args->__pyx_n > 8) {\n",
-       "                      __pyx_v_auto_reset_state = __pyx_optional_args->auto_reset_state;\n",
-       "                      if (__pyx_optional_args->__pyx_n > 9) {\n",
-       "                        __pyx_v_auto_solve = __pyx_optional_args->auto_solve;\n",
-       "                      }\n",
-       "                    }\n",
-       "                  }\n",
-       "                }\n",
-       "              }\n",
-       "            }\n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "    }\n",
-       "  }\n",
-       "/* … */\n",
-       "      __pyx_v_auto_solve = ((bool)0);\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"change_parameters\", 0, 0, 10, __pyx_nargs); __PYX_ERR(0, 1130, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.change_parameters\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 1134, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_20change_parameters(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self), __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step_size, __pyx_v_first_step, __pyx_v_t_eval, __pyx_v_auto_reset_state, __pyx_v_auto_solve);\n",
-       "
 1142: 
\n", - "
+1143:         if not isnan(t_span[0]):
\n", - "
  __pyx_t_15 = (!isnan(__pyx_v_t_span.f0));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1144:             self.change_t_span(t_span, auto_reset_state=False)
\n", - "
    __pyx_t_16.__pyx_n = 1;\n",
-       "    __pyx_t_16.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_t_span(__pyx_v_self, __pyx_v_t_span, 0, &__pyx_t_16); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1144, __pyx_L1_error)\n",
-       "
 1145: 
\n", - "
+1146:         if y0 is not None:
\n", - "
  __pyx_t_15 = (((PyObject *) __pyx_v_y0.memview) != Py_None);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1147:             self.change_y0(y0, auto_reset_state=False)
\n", - "
    __pyx_t_17.__pyx_n = 1;\n",
-       "    __pyx_t_17.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_y0(__pyx_v_self, __pyx_v_y0, 0, &__pyx_t_17); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1147, __pyx_L1_error)\n",
-       "
 1148: 
\n", - "
+1149:         if args is not None:
\n", - "
  __pyx_t_15 = (__pyx_v_args != ((PyObject*)Py_None));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1150:             self.change_args(args, auto_reset_state=False)
\n", - "
    __pyx_t_18.__pyx_n = 1;\n",
-       "    __pyx_t_18.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_args(__pyx_v_self, __pyx_v_args, 0, &__pyx_t_18); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1150, __pyx_L1_error)\n",
-       "
 1151: 
\n", - "
+1152:         if not isnan(rtol) or not isnan(atol):
\n", - "
  __pyx_t_19 = (!isnan(__pyx_v_rtol));\n",
-       "  if (!__pyx_t_19) {\n",
-       "  } else {\n",
-       "    __pyx_t_15 = __pyx_t_19;\n",
-       "    goto __pyx_L7_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_19 = (!isnan(__pyx_v_atol));\n",
-       "  __pyx_t_15 = __pyx_t_19;\n",
-       "  __pyx_L7_bool_binop_done:;\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1153:             self.change_tols(rtol=rtol, atol=atol, auto_reset_state=False)
\n", - "
    __pyx_t_20.__pyx_n = 3;\n",
-       "    __pyx_t_20.rtol = __pyx_v_rtol;\n",
-       "    __pyx_t_20.atol = __pyx_v_atol;\n",
-       "    __pyx_t_20.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_tols(__pyx_v_self, 0, &__pyx_t_20); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1153, __pyx_L1_error)\n",
-       "
 1154: 
\n", - "
+1155:         if not isnan(max_step_size):
\n", - "
  __pyx_t_15 = (!isnan(__pyx_v_max_step_size));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1156:             self.change_max_step_size(max_step_size, auto_reset_state=False)
\n", - "
    __pyx_t_21.__pyx_n = 1;\n",
-       "    __pyx_t_21.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_max_step_size(__pyx_v_self, __pyx_v_max_step_size, 0, &__pyx_t_21); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1156, __pyx_L1_error)\n",
-       "
 1157: 
\n", - "
+1158:         if not isnan(first_step):
\n", - "
  __pyx_t_15 = (!isnan(__pyx_v_first_step));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1159:             self.change_first_step(first_step, auto_reset_state=False)
\n", - "
    __pyx_t_22.__pyx_n = 1;\n",
-       "    __pyx_t_22.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_first_step(__pyx_v_self, __pyx_v_first_step, 0, &__pyx_t_22); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1159, __pyx_L1_error)\n",
-       "
 1160: 
\n", - "
+1161:         if t_eval is not None:
\n", - "
  __pyx_t_15 = (((PyObject *) __pyx_v_t_eval.memview) != Py_None);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1162:             self.change_t_eval(t_eval, auto_reset_state=False)
\n", - "
    __pyx_t_23.__pyx_n = 1;\n",
-       "    __pyx_t_23.auto_reset_state = 0;\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->change_t_eval(__pyx_v_self, __pyx_v_t_eval, 0, &__pyx_t_23); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1162, __pyx_L1_error)\n",
-       "
 1163: 
\n", - "
 1164:         # Now that everything has been set, reset the solver's state.
\n", - "
 1165:         # If first step has already been reset then no need to call it again later.
\n", - "
+1166:         if not isnan(first_step):
\n", - "
  __pyx_t_15 = (!isnan(__pyx_v_first_step));\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1167:             self.recalc_firststep = False
\n", - "
    __pyx_v_self->recalc_firststep = 0;\n",
-       "
 1168: 
\n", - "
+1169:         if auto_reset_state:
\n", - "
  __pyx_t_15 = (__pyx_v_auto_reset_state != 0);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+1170:             self.reset_state()
\n", - "
    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->reset_state(__pyx_v_self, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1170, __pyx_L1_error)\n",
-       "
 1171: 
\n", - "
 1172:         # User can choose to go ahead and rerun the solver with the new setup
\n", - "
+1173:         if auto_solve:
\n", - "
  __pyx_t_15 = (__pyx_v_auto_solve != 0);\n",
-       "  if (__pyx_t_15) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 1174:             # Tell solver to reset state if for some reason the user set reset to False but auto_solve to True,
\n", - "
 1175:             # ^ This should probably be a warning. Don't see why you'd ever want to do that.
\n", - "
+1176:             self._solve(reset=(not auto_reset_state))
\n", - "
    __pyx_t_24.__pyx_n = 1;\n",
-       "    __pyx_t_24.reset = (!(__pyx_v_auto_reset_state != 0));\n",
-       "    ((struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self->__pyx_vtab)->_solve(__pyx_v_self, &__pyx_t_24); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1176, __pyx_L1_error)\n",
-       "
 1177: 
\n", - "
+1178:     cdef void update_constants(self) noexcept nogil:
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_update_constants(CYTHON_UNUSED struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "\n",
-       "  /* function exit code */\n",
-       "}\n",
-       "
 1179: 
\n", - "
 1180:         # Nothing to update
\n", - "
 1181:         pass
\n", - "
 1182: 
\n", - "
+1183:     cdef void diffeq(self) noexcept nogil:
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_diffeq(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "}\n",
-       "
 1184:         # This is a template function that should be overriden by the user's subclass.
\n", - "
 1185: 
\n", - "
 1186:         # The diffeq can use live variables which are automatically updated before each call.
\n", - "
 1187:         # self.t_new: The current "time" (of course, depending on your problem, it may not actually be _time_ per se).
\n", - "
 1188:         # self.y_new_view[:]: The current y value(s) stored as an array.
\n", - "
 1189:         # For example...
\n", - "
 1190:         # ```python
\n", - "
 1191:         # cdef double t_sin
\n", - "
 1192:         # # You will want to import the c version of sin "from libc.math cimport sin" at the top of your file.
\n", - "
 1193:         # t_sin = sin(self.t_new)
\n", - "
 1194:         # y0 = self.y_new_view[0]
\n", - "
 1195:         # y1 = self.y_new_view[1]
\n", - "
 1196:         # ```
\n", - "
 1197: 
\n", - "
 1198:         # Can also use other optional global attributes like...
\n", - "
 1199:         # self.arg_array_view  (size of self.arg_array_view is self.num_args). For example...
\n", - "
 1200:         # ```python
\n", - "
 1201:         # cdef double a, b
\n", - "
 1202:         # a = self.arg_array_view[0]
\n", - "
 1203:         # b = self.arg_array_view[1]
\n", - "
 1204:         # ```
\n", - "
 1205:         # Currently, these args must be doubles (floats).
\n", - "
 1206: 
\n", - "
 1207:         # This function *must* set new values to the dy_new_view variable (size of array is self.y_size). For example...
\n", - "
 1208:         # ```python
\n", - "
 1209:         # self.dy_new_view[0] = b * t_sin - y1
\n", - "
 1210:         # self.dy_new_view[1] = a * sin(y0)
\n", - "
 1211:         # ```
\n", - "
 1212: 
\n", - "
 1213:         # CySolver can also set additional outputs that the user may want to capture without having to make new calls
\n", - "
 1214:         #  to the differential equation or its sub-methods. For example...
\n", - "
 1215:         # ```python
\n", - "
 1216:         # self.extra_output_view[0] = t_sin
\n", - "
 1217:         # self.extra_output_view[1] = b * t_sin
\n", - "
 1218:         # ```
\n", - "
 1219:         # Currently, these additional outputs must be stored as doubles (floats).
\n", - "
 1220:         # Note that if extra output is used then the variables `capture_extra` and `num_extra` must be set in CySolver's
\n", - "
 1221:         #  `__init__` method.
\n", - "
 1222: 
\n", - "
 1223:         # The default template simply sets all dy to 0.
\n", - "
 1224:         cdef Py_ssize_t i
\n", - "
+1225:         for i in range(self.y_size):
\n", - "
  __pyx_t_1 = __pyx_v_self->y_size;\n",
-       "  __pyx_t_2 = __pyx_t_1;\n",
-       "  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {\n",
-       "    __pyx_v_i = __pyx_t_3;\n",
-       "
+1226:             self.dy_new_view[i] = 0.
\n", - "
    __pyx_t_4 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->dy_new_view.data) + __pyx_t_4)) )) = 0.;\n",
-       "  }\n",
-       "
 1227: 
\n", - "
 1228: 
\n", - "
 1229:     # Public accessed properties
\n", - "
+1230:     @property
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_t___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solution_t.__get__\", __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",
-       "
 1231:     def solution_t(self):
\n", - "
 1232:         # Need to convert the memory view back into a numpy array
\n", - "
+1233:         return np.asarray(self.solution_t_view)
\n", - "
  __Pyx_XDECREF(__pyx_r);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->solution_t_view, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_4 = NULL;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
-       "    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
-       "    if (likely(__pyx_t_4)) {\n",
-       "      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
-       "      __Pyx_INCREF(__pyx_t_4);\n",
-       "      __Pyx_INCREF(function);\n",
-       "      __Pyx_DECREF_SET(__pyx_t_3, function);\n",
-       "      __pyx_t_5 = 1;\n",
-       "    }\n",
-       "  }\n",
-       "  {\n",
-       "    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};\n",
-       "    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);\n",
-       "    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1233, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  }\n",
-       "  __pyx_r = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "
 1234: 
\n", - "
 1235: 
\n", - "
+1236:     @property
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_10solution_y___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solution_y.__get__\", __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",
-       "
 1237:     def solution_y(self):
\n", - "
 1238:         # Need to convert the memory view back into a numpy array
\n", - "
+1239:         return np.asarray(self.solution_y_view)
\n", - "
  __Pyx_XDECREF(__pyx_r);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->solution_y_view, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_4 = NULL;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
-       "    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
-       "    if (likely(__pyx_t_4)) {\n",
-       "      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
-       "      __Pyx_INCREF(__pyx_t_4);\n",
-       "      __Pyx_INCREF(function);\n",
-       "      __Pyx_DECREF_SET(__pyx_t_3, function);\n",
-       "      __pyx_t_5 = 1;\n",
-       "    }\n",
-       "  }\n",
-       "  {\n",
-       "    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};\n",
-       "    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);\n",
-       "    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1239, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  }\n",
-       "  __pyx_r = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "
 1240: 
\n", - "
 1241: 
\n", - "
+1242:     @property
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_14solution_extra___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.solution_extra.__get__\", __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",
-       "
 1243:     def solution_extra(self):
\n", - "
 1244:         # Need to convert the memory view back into a numpy array
\n", - "
+1245:         return np.asarray(self.solution_extra_view)
\n", - "
  __Pyx_XDECREF(__pyx_r);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_self->solution_extra_view, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_4 = NULL;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {\n",
-       "    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);\n",
-       "    if (likely(__pyx_t_4)) {\n",
-       "      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);\n",
-       "      __Pyx_INCREF(__pyx_t_4);\n",
-       "      __Pyx_INCREF(function);\n",
-       "      __Pyx_DECREF_SET(__pyx_t_3, function);\n",
-       "      __pyx_t_5 = 1;\n",
-       "    }\n",
-       "  }\n",
-       "  {\n",
-       "    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};\n",
-       "    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);\n",
-       "    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1245, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;\n",
-       "  }\n",
-       "  __pyx_r = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "
 1246: 
\n", - "
 1247: 
\n", - "
+1248:     @property
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths_1__get__(PyObject *__pyx_v_self); /*proto*/\n",
-       "static PyObject *__pyx_pw_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths_1__get__(PyObject *__pyx_v_self) {\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__ (wrapper)\", 0);\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths___get__(((struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *)__pyx_v_self));\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_8CySolver_12size_growths___get__(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver *__pyx_v_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__get__\", 0);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c.CySolver.size_growths.__get__\", __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",
-       "
 1249:     def size_growths(self):
\n", - "
 1250:         # How many times the output arrays had to grow during integration
\n", - "
+1251:         return self.num_concats - 1
\n", - "
  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = PyInt_FromSsize_t((__pyx_v_self->num_concats - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1251, __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",
-       "
 1252: 
\n", - "
 1253: from libc.math cimport sin
\n", - "
 1254: 
\n", - "
+1255: cdef class CySolverPendulum(CySolver):
\n", - "
struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum {\n",
-       "  struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver __pyx_base;\n",
-       "  double coeff_1;\n",
-       "  double coeff_2;\n",
-       "};\n",
-       "/* … */\n",
-       "struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum {\n",
-       "  struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolver __pyx_base;\n",
-       "};\n",
-       "static struct __pyx_vtabstruct_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum *__pyx_vtabptr_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum;\n",
-       "\n",
-       "
 1256: 
\n", - "
 1257:     cdef double coeff_1, coeff_2
\n", - "
 1258: 
\n", - "
+1259:     cdef void update_constants(self) noexcept nogil:
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_16CySolverPendulum_update_constants(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum *__pyx_v_self) {\n",
-       "  double __pyx_v_l;\n",
-       "  double __pyx_v_m;\n",
-       "  double __pyx_v_g;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "}\n",
-       "
 1260: 
\n", - "
 1261:         cdef double l, m, g
\n", - "
 1262: 
\n", - "
+1263:         l  = self.arg_array_view[0]
\n", - "
  __pyx_t_1 = 0;\n",
-       "  __pyx_v_l = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.arg_array_view.data) + __pyx_t_1)) )));\n",
-       "
+1264:         m  = self.arg_array_view[1]
\n", - "
  __pyx_t_1 = 1;\n",
-       "  __pyx_v_m = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.arg_array_view.data) + __pyx_t_1)) )));\n",
-       "
+1265:         g  = self.arg_array_view[2]
\n", - "
  __pyx_t_1 = 2;\n",
-       "  __pyx_v_g = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.arg_array_view.data) + __pyx_t_1)) )));\n",
-       "
+1266:         self.coeff_1 = (-3. * g / (2. * l))
\n", - "
  __pyx_v_self->coeff_1 = ((-3. * __pyx_v_g) / (2. * __pyx_v_l));\n",
-       "
+1267:         self.coeff_2 = (3. / (m * l**2))
\n", - "
  __pyx_v_self->coeff_2 = (3. / (__pyx_v_m * pow(__pyx_v_l, 2.0)));\n",
-       "
 1268: 
\n", - "
+1269:     cdef void diffeq(self) noexcept nogil:
\n", - "
static void __pyx_f_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_16CySolverPendulum_diffeq(struct __pyx_obj_54_cython_magic_de3847f4b40d9cf0b1c2f571925a22979e17637c_CySolverPendulum *__pyx_v_self) {\n",
-       "  double __pyx_v_y0;\n",
-       "  double __pyx_v_y1;\n",
-       "  double __pyx_v_torque;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "}\n",
-       "
 1270: 
\n", - "
 1271:         # Unpack y
\n", - "
 1272:         cdef double y0, y1, torque
\n", - "
+1273:         y0 = self.y_new_view[0]
\n", - "
  __pyx_t_1 = 0;\n",
-       "  __pyx_v_y0 = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.y_new_view.data) + __pyx_t_1)) )));\n",
-       "
+1274:         y1 = self.y_new_view[1]
\n", - "
  __pyx_t_1 = 1;\n",
-       "  __pyx_v_y1 = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.y_new_view.data) + __pyx_t_1)) )));\n",
-       "
 1275: 
\n", - "
 1276:         # External torque
\n", - "
+1277:         torque = 0.1 * sin(self.t_new)
\n", - "
  __pyx_v_torque = (0.1 * sin(__pyx_v_self->__pyx_base.t_new));\n",
-       "
 1278: 
\n", - "
+1279:         self.dy_new_view[0] = y1
\n", - "
  __pyx_t_1 = 0;\n",
-       "  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.dy_new_view.data) + __pyx_t_1)) )) = __pyx_v_y1;\n",
-       "
+1280:         self.dy_new_view[1] = self.coeff_1 * sin(y0) + self.coeff_2 * torque
\n", - "
  __pyx_t_1 = 1;\n",
-       "  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_self->__pyx_base.dy_new_view.data) + __pyx_t_1)) )) = ((__pyx_v_self->coeff_1 * sin(__pyx_v_y0)) + (__pyx_v_self->coeff_2 * __pyx_v_torque));\n",
-       "
" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%cython --annotate --force\n", - "# distutils: language = c++\n", - "# cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False\n", - "\n", - "import cython\n", - "cimport openmp\n", - "cimport cython\n", - "import sys\n", - "import numpy as np\n", - "cimport numpy as np\n", - "np.import_array()\n", - "from libcpp cimport bool as bool_cpp_t\n", - "from libc.math cimport sqrt, fabs, nextafter, fmax, fmin, isnan, NAN, pow\n", - "\n", - "import cython.parallel as cp\n", - "from cython.parallel import parallel, prange\n", - "\n", - "\n", - "from CyRK.array.interp cimport interp_array\n", - "from CyRK.rk.rk cimport (\n", - " RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,\n", - " RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,\n", - " RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,\n", - " RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,\n", - " DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,\n", - " DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)\n", - "\n", - "# # Integration Constants\n", - "# Multiply steps computed from asymptotic behaviour of errors by this.\n", - "cdef double SAFETY = 0.9\n", - "cdef double MIN_FACTOR = 0.2 # Minimum allowed decrease in a step size.\n", - "cdef double MAX_FACTOR = 10. # Maximum allowed increase in a step size.\n", - "cdef double MAX_STEP = np.inf\n", - "cdef double INF = np.inf\n", - "cdef double EPS = np.finfo(np.float64).eps\n", - "cdef double EPS_10 = EPS * 10.\n", - "cdef double EPS_100 = EPS * 100.\n", - "cdef Py_ssize_t MAX_INT_SIZE = int(0.95 * sys.maxsize)\n", - "\n", - "cdef (double, double) EMPTY_T_SPAN = (NAN, NAN)\n", - "\n", - "cdef class CySolver:\n", - " \n", - " # Class attributes \n", - " # -- Live variables\n", - " cdef double t_new, t_old\n", - " cdef Py_ssize_t len_t\n", - " cdef double[::1] y_new_view, y_old_view, dy_new_view, dy_old_view\n", - " cdef double[::1] extra_output_view, extra_output_init_view\n", - " \n", - " # -- Dependent (y0) variable information\n", - " cdef Py_ssize_t y_size\n", - " cdef double y_size_dbl, y_size_sqrt\n", - " cdef const double[::1] y0_view\n", - " \n", - " # -- RK method information\n", - " cdef unsigned char rk_method\n", - " cdef Py_ssize_t rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended\n", - " cdef double error_expo\n", - " cdef Py_ssize_t len_C\n", - " cdef double[::1] B_view, E_view, E3_view, E5_view, C_view\n", - " cdef double[:, ::1] A_view, K_view\n", - " cdef double[::1, :] K_T_view\n", - " \n", - " # -- Integration information\n", - " cdef public char status\n", - " cdef public str message\n", - " cdef public bool_cpp_t success\n", - " cdef double t_start, t_end, t_delta, t_delta_abs, direction_inf\n", - " cdef bool_cpp_t direction_flag\n", - " cdef double rtol, atol\n", - " cdef double step_size, max_step_size\n", - " cdef double first_step\n", - " cdef Py_ssize_t expected_size, num_concats, max_steps\n", - " cdef bool_cpp_t use_max_steps\n", - " cdef bool_cpp_t recalc_firststep\n", - " \n", - " # -- Optional args info\n", - " cdef Py_ssize_t num_args\n", - " cdef double[::1] arg_array_view\n", - "\n", - " # -- Extra output info\n", - " cdef bool_cpp_t capture_extra\n", - " cdef Py_ssize_t num_extra\n", - "\n", - " # -- Interpolation info\n", - " cdef bool_cpp_t run_interpolation\n", - " cdef bool_cpp_t interpolate_extra\n", - " cdef Py_ssize_t len_t_eval\n", - " cdef double[::1] t_eval_view\n", - "\n", - " # -- Solution variables\n", - " cdef double[:, ::1] solution_y_view, solution_extra_view\n", - " cdef double[::1] solution_t_view\n", - " \n", - "\n", - " def __init__(self,\n", - " (double, double) t_span,\n", - " const double[::1] y0,\n", - " tuple args = None,\n", - " double rtol = 1.e-6,\n", - " double atol = 1.e-8,\n", - " double max_step_size = MAX_STEP,\n", - " double first_step = 0.,\n", - " unsigned char rk_method = 1,\n", - " const double[::1] t_eval = None,\n", - " bool_cpp_t capture_extra = False,\n", - " Py_ssize_t num_extra = 0,\n", - " bool_cpp_t interpolate_extra = False,\n", - " Py_ssize_t expected_size = 0,\n", - " Py_ssize_t max_steps = 0,\n", - " bool_cpp_t auto_solve = True):\n", - "\n", - " # Setup loop variables\n", - " cdef Py_ssize_t i, j\n", - "\n", - " # Set integration information\n", - " self.status = -4 # Status code to indicate that integration has not started.\n", - " self.message = 'Integration has not started.'\n", - " self.success = False\n", - " self.recalc_firststep = False\n", - "\n", - " # Declare public variables to avoid memory access violations if solve() is not called.\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake\n", - " solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", - " solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", - " solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C')\n", - " self.solution_t_view = solution_t_fake\n", - " self.solution_extra_view = solution_extra_fake\n", - " self.solution_y_view = solution_y_fake\n", - "\n", - " # Determine y-size information\n", - " self.y_size = len(y0)\n", - " self.y_size_dbl = self.y_size\n", - " self.y_size_sqrt = sqrt(self.y_size_dbl)\n", - " # Store y0 values for later\n", - " self.y0_view = y0\n", - "\n", - " # Determine time domain information\n", - " self.t_start = t_span[0]\n", - " self.t_end = t_span[1]\n", - " self.t_delta = self.t_end - self.t_start\n", - " self.t_delta_abs = fabs(self.t_delta)\n", - "\n", - " if self.t_delta >= 0.:\n", - " # Integration is moving forward in time.\n", - " self.direction_flag = True\n", - " self.direction_inf = INF\n", - " else:\n", - " # Integration is moving backwards in time.\n", - " self.direction_flag = False\n", - " self.direction_inf = -INF\n", - "\n", - " # # Determine integration parameters\n", - " # Add tolerances\n", - " self.rtol = rtol\n", - " self.atol = atol\n", - " if self.rtol < EPS_100:\n", - " self.rtol = EPS_100\n", - " # TODO: array based atol\n", - " # atol_arr = np.asarray(atol, dtype=)\n", - " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", - " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", - " # raise Exception\n", - "\n", - " # Determine maximum number of steps\n", - " if max_steps == 0:\n", - " self.use_max_steps = False\n", - " self.max_steps = 0\n", - " elif max_steps < 0:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Negative number of max steps provided.')\n", - " else:\n", - " self.use_max_steps = True\n", - " self.max_steps = min(max_steps, MAX_INT_SIZE)\n", - "\n", - " # Expected size of output arrays.\n", - " cdef double temp_expected_size\n", - " if expected_size == 0:\n", - " # CySolver will attempt to guess on a best size for the arrays.\n", - " temp_expected_size = 100. * self.t_delta_abs * fmax(1., (1.e-6 / rtol))\n", - " temp_expected_size = fmax(temp_expected_size, 100.)\n", - " temp_expected_size = fmin(temp_expected_size, 10_000_000.)\n", - " self.expected_size = temp_expected_size\n", - " else:\n", - " self.expected_size = expected_size\n", - " # This variable tracks how many times the storage arrays have been appended.\n", - " # It starts at 1 since there is at least one storage array present.\n", - " self.num_concats = 1\n", - "\n", - " # Determine optional arguments\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array\n", - " if args is None:\n", - " self.num_args = 0\n", - " # Even though there are no args, initialize the array to something to avoid seg faults\n", - " arg_array = np.empty(0, dtype=np.float64, order='C')\n", - " self.arg_array_view = arg_array\n", - " else:\n", - " self.num_args = len(args)\n", - " arg_array = np.empty(self.num_args, dtype=np.float64, order='C')\n", - " self.arg_array_view = arg_array\n", - " for i in range(self.num_args):\n", - " self.arg_array_view[i] = args[i]\n", - "\n", - " # Initialize live variable arrays\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_new, y_old, dy_new, dy_old\n", - " y_new = np.empty(self.y_size, dtype=np.float64, order='C')\n", - " y_old = np.empty(self.y_size, dtype=np.float64, order='C')\n", - " dy_new = np.empty(self.y_size, dtype=np.float64, order='C')\n", - " dy_old = np.empty(self.y_size, dtype=np.float64, order='C')\n", - " self.y_new_view = y_new\n", - " self.y_old_view = y_old\n", - " self.dy_new_view = dy_new\n", - " self.dy_old_view = dy_old\n", - "\n", - " # Set current and old y variables equal to y0\n", - " for i in range(self.y_size):\n", - " self.y_new_view[i] = self.y0_view[i]\n", - " self.y_old_view[i] = self.y0_view[i]\n", - "\n", - " # Set current and old time variables equal to t0\n", - " self.t_old = self.t_start\n", - " self.t_new = self.t_start\n", - " # We already have one time step due to the initial conditions.\n", - " self.len_t = 1\n", - "\n", - " # Determine extra outputs\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_output_init, extra_output\n", - " self.capture_extra = capture_extra\n", - " self.num_extra = num_extra\n", - " if self.capture_extra:\n", - " extra_output_init = np.empty(self.num_extra, dtype=np.float64, order='C')\n", - " extra_output = np.empty(self.num_extra, dtype=np.float64, order='C')\n", - " self.extra_output_init_view = extra_output_init\n", - " self.extra_output_view = extra_output\n", - "\n", - " # We need to determine the extra outputs at the initial time step.\n", - " self.diffeq()\n", - " for i in range(num_extra):\n", - " self.extra_output_init_view[i] = self.extra_output_view[i]\n", - "\n", - " # Determine interpolation information\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array\n", - " if t_eval is None:\n", - " self.run_interpolation = False\n", - " self.interpolate_extra = False\n", - " self.len_t_eval = 0\n", - " else:\n", - " self.run_interpolation = True\n", - " self.interpolate_extra = interpolate_extra\n", - " self.len_t_eval = len(t_eval)\n", - "\n", - " t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", - " self.t_eval_view = t_eval_array\n", - " for i in range(self.len_t_eval):\n", - " self.t_eval_view[i] = t_eval[i]\n", - "\n", - " # Determine RK scheme and initalize memory views\n", - " self.rk_method = rk_method\n", - "\n", - " if rk_method == 0:\n", - " # RK23 Method\n", - " self.rk_order = RK23_order\n", - " self.error_order = RK23_error_order\n", - " self.rk_n_stages = RK23_n_stages\n", - " self.len_C = RK23_LEN_C\n", - " self.A_view = RK23_A\n", - " self.B_view = RK23_B\n", - " self.C_view = RK23_C\n", - " self.E_view = RK23_E\n", - " \n", - " # Unused for RK23 but initalize it anyways\n", - " self.E3_view = RK23_E\n", - " self.E5_view = RK23_E\n", - " elif rk_method == 1:\n", - " # RK45 Method\n", - " self.rk_order = RK45_order\n", - " self.error_order = RK45_error_order\n", - " self.rk_n_stages = RK45_n_stages\n", - " self.len_C = RK45_LEN_C\n", - " self.A_view = RK45_A\n", - " self.B_view = RK45_B\n", - " self.C_view = RK45_C\n", - " self.E_view = RK45_E\n", - " \n", - " # Unused for RK23 but initalize it anyways\n", - " self.E3_view = RK45_E\n", - " self.E5_view = RK45_E\n", - " elif rk_method == 2:\n", - " # DOP853 Method\n", - " self.rk_order = DOP_order\n", - " self.error_order = DOP_error_order\n", - " self.rk_n_stages = DOP_n_stages\n", - " self.len_C = DOP_LEN_C\n", - " self.A_view = DOP_A_REDUCED\n", - " self.B_view = DOP_B\n", - " self.C_view = DOP_C_REDUCED\n", - " self.E3_view = DOP_E3\n", - " self.E5_view = DOP_E5\n", - " self.rk_n_stages_extended = DOP_n_stages_extended\n", - " \n", - " # Unused for DOP853 but initalize it anyways\n", - " self.E_view = DOP_E3\n", - " else:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError(\n", - " 'Unexpected rk_method provided. Currently supported versions are:\\n'\n", - " '\\t0 = RK23\\n'\n", - " '\\t1 = RK34\\n'\n", - " '\\t2 = DOP853')\n", - "\n", - " self.rk_n_stages_plus1 = self.rk_n_stages + 1\n", - " self.error_expo = 1. / (self.error_order + 1.)\n", - "\n", - " # Initialize other RK-related Arrays\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] K\n", - " # It is important K be initialized with 0s\n", - " K = np.zeros((self.rk_n_stages_plus1, self.y_size), dtype=np.float64, order='C')\n", - "\n", - " # Setup memory views.\n", - " self.K_view = K\n", - " self.K_T_view = self.K_view.T\n", - "\n", - " # Initialize dy_new_view for start of integration (important for first_step calculation)\n", - " if not self.capture_extra:\n", - " # If `capture_extra` is True then this step was already performed so we can skip it.\n", - " self.diffeq()\n", - "\n", - " for i in range(self.y_size):\n", - " self.dy_old_view[i] = self.dy_new_view[i]\n", - "\n", - " # Determine first step\n", - " self.first_step = first_step\n", - " if self.first_step == 0.:\n", - " self.step_size = self.calc_first_step()\n", - " else:\n", - " if self.first_step <= 0.:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", - " elif self.first_step > self.t_delta_abs:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", - " self.step_size = self.first_step\n", - " self.max_step_size = max_step_size\n", - " \n", - " # Set any constant parameters that the user has set\n", - " self.update_constants()\n", - "\n", - " # Run solver if requested\n", - " if auto_solve:\n", - " # We know for a fact that this is the first time solve will be called\n", - " # so we do not need to reset the state.\n", - " self._solve(reset=False)\n", - "\n", - "\n", - " cpdef void reset_state(self):\n", - " \"\"\" Resets the integrator to its initial state. \"\"\"\n", - " cdef Py_ssize_t i, j\n", - "\n", - " # Set current and old time variables equal to t0\n", - " self.t_old = self.t_start\n", - " self.t_new = self.t_start\n", - " self.len_t = 1\n", - "\n", - " # Reset y variables\n", - " for i in range(self.y_size):\n", - " # Set current and old y variables equal to y0\n", - " self.y_new_view[i] = self.y0_view[i]\n", - " self.y_old_view[i] = self.y0_view[i]\n", - "\n", - " for j in range(self.rk_n_stages_plus1):\n", - " # Reset RK variables\n", - " self.K_view[j, i] = 0.\n", - " \n", - " # Update any constant parameters that the user has set\n", - " self.update_constants()\n", - "\n", - " # Make initial call to diffeq()\n", - " self.diffeq()\n", - " for i in range(self.y_size):\n", - " self.dy_old_view[i] = self.dy_new_view[i]\n", - "\n", - " # Determine first step size\n", - " if self.first_step == 0. or self.recalc_firststep:\n", - " self.step_size = self.calc_first_step()\n", - " else:\n", - " if self.first_step <= 0.:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", - " elif self.first_step > self.t_delta_abs:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", - " self.step_size = self.first_step\n", - "\n", - " # Reset output storage\n", - " self.num_concats = 1\n", - "\n", - " # Reset public variables to clear any old solutions.\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] solution_extra_fake, solution_y_fake\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] solution_t_fake\n", - " solution_extra_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", - " solution_y_fake = np.nan * np.ones((1, 1), dtype=np.float64, order='C')\n", - " solution_t_fake = np.nan * np.ones(1, dtype=np.float64, order='C')\n", - " self.solution_t_view = solution_t_fake\n", - " self.solution_extra_view = solution_extra_fake\n", - " self.solution_y_view = solution_y_fake\n", - "\n", - " # Other flags and messages\n", - " self.success = False\n", - " self.status = -5 # status == -5 means that reset has been called but solve has not yet been called.\n", - " self.message = \"CySolver has been reset.\"\n", - "\n", - "\n", - " cdef double calc_first_step(self) noexcept nogil:\n", - " \"\"\" Determine initial step size. \"\"\"\n", - "\n", - " cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale\n", - " cdef double y_old_tmp\n", - "\n", - " # Select an initial step size based on the differential equation.\n", - " # .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", - " # Equations I: Nonstiff Problems\", Sec. II.4.\n", - " if self.y_size == 0:\n", - " step_size = INF\n", - " else:\n", - " # Find the norm for d0 and d1\n", - " d0 = 0.\n", - " d1 = 0.\n", - " for i in range(self.y_size):\n", - " y_old_tmp = self.y_old_view[i]\n", - " scale = self.atol + fabs(y_old_tmp) * self.rtol\n", - "\n", - " d0_abs = fabs(y_old_tmp / scale)\n", - " d1_abs = fabs(self.dy_old_view[i] / scale)\n", - " d0 += (d0_abs * d0_abs)\n", - " d1 += (d1_abs * d1_abs)\n", - "\n", - " d0 = sqrt(d0) / self.y_size_sqrt\n", - " d1 = sqrt(d1) / self.y_size_sqrt\n", - "\n", - " if d0 < 1.e-5 or d1 < 1.e-5:\n", - " h0 = 1.e-6\n", - " else:\n", - " h0 = 0.01 * d0 / d1\n", - "\n", - " if self.direction_flag:\n", - " h0_direction = h0\n", - " else:\n", - " h0_direction = -h0\n", - " \n", - " self.t_new = self.t_old + h0_direction\n", - " for i in range(self.y_size):\n", - " self.y_new_view[i] = self.y_old_view[i] + h0_direction * self.dy_old_view[i]\n", - "\n", - " # Update dy_new_view\n", - " self.diffeq()\n", - "\n", - " # Find the norm for d2\n", - " d2 = 0.\n", - " for i in range(self.y_size):\n", - " scale = self.atol + fabs(self.y_old_view[i]) * self.rtol\n", - " d2_abs = fabs( (self.dy_new_view[i] - self.dy_old_view[i]) / scale)\n", - " d2 += (d2_abs * d2_abs)\n", - "\n", - " d2 = sqrt(d2) / (h0 * self.y_size_sqrt)\n", - "\n", - " if d1 <= 1.e-15 and d2 <= 1.e-15:\n", - " h1 = max(1.e-6, h0 * 1.e-3)\n", - " else:\n", - " h1 = (0.01 / max(d1, d2))**self.error_expo\n", - "\n", - " step_size = max(10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old),\n", - " min(100. * h0, h1))\n", - "\n", - " return step_size\n", - " \n", - " cdef void rk_step(self) noexcept nogil:\n", - " \n", - " # Initialize step variables\n", - " cdef Py_ssize_t s, i, j\n", - " cdef double min_step, step, step_factor, time_tmp, t_delta_check\n", - " cdef double C_at_s, A_at_sj, A_at_10, B_at_j\n", - " cdef double scale, K_scale, dy_tmp\n", - " cdef double error_norm3, error_norm5, error_norm, error_dot_1, error_dot_2, error_denom, error_pow\n", - " cdef bool_cpp_t step_accepted, step_rejected, step_error\n", - " \n", - " # Run RK integration step\n", - " # Determine step size based on previous loop\n", - " # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)\n", - " min_step = 10. * fabs(nextafter(self.t_old, self.direction_inf) - self.t_old)\n", - " # Look for over/undershoots in previous step size\n", - " if self.step_size > self.max_step_size:\n", - " self.step_size = self.max_step_size\n", - " elif self.step_size < min_step:\n", - " self.step_size = min_step\n", - "\n", - " # Determine new step size\n", - " step_accepted = False\n", - " step_rejected = False\n", - " step_error = False\n", - "\n", - " # Optimization since this A is called consistently and does not change.\n", - " A_at_10 = self.A_view[1, 0]\n", - "\n", - " # # Step Loop\n", - " while not step_accepted:\n", - "\n", - " if self.step_size < min_step:\n", - " step_error = True\n", - " self.status = -1\n", - " break\n", - "\n", - " # Move time forward for this particular step size\n", - " if self.direction_flag:\n", - " step = self.step_size\n", - " t_delta_check = self.t_new - self.t_end\n", - " else:\n", - " step = -self.step_size\n", - " t_delta_check = self.t_end - self.t_new\n", - " self.t_new = self.t_old + step\n", - "\n", - " # Check that we are not at the end of integration with that move\n", - " if t_delta_check > 0.:\n", - " self.t_new = self.t_end\n", - "\n", - " # Correct the step if we were at the end of integration\n", - " step = self.t_new - self.t_old\n", - " if self.direction_flag:\n", - " self.step_size = step\n", - " else:\n", - " self.step_size = -step\n", - "\n", - " # Calculate derivative using RK method\n", - "\n", - " # t_new must be updated for each loop of s in order to make the diffeq calls.\n", - " # But we need to return to its original value later on. Store in temp variable.\n", - " time_tmp = self.t_new\n", - " for s in range(1, self.len_C):\n", - " C_at_s = self.C_view[s]\n", - "\n", - " # Update t_new so it can be used in the diffeq call.\n", - " self.t_new = self.t_old + C_at_s * step\n", - "\n", - " # Dot Product (K, a) * step\n", - " if s == 1:\n", - " for i in range(self.y_size):\n", - " # Set the first column of K\n", - " dy_tmp = self.dy_old_view[i]\n", - " self.K_view[0, i] = dy_tmp\n", - " \n", - " # Calculate y_new for s==1\n", - " self.y_new_view[i] = self.y_old_view[i] + (dy_tmp * A_at_10 * step)\n", - " else:\n", - " for j in range(s):\n", - " A_at_sj = self.A_view[s, j]\n", - " for i in range(self.y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " self.y_new_view[i] = self.y_old_view[i]\n", - "\n", - " self.y_new_view[i] += self.K_view[j, i] * A_at_sj * step\n", - " \n", - " # Call diffeq to update K with the new dydt\n", - " self.diffeq()\n", - "\n", - " for i in range(self.y_size):\n", - " self.K_view[s, i] = self.dy_new_view[i]\n", - "\n", - " # Restore t_new to its previous value.\n", - " self.t_new = time_tmp\n", - "\n", - " # Dot Product (K, B) * step\n", - " for j in range(self.rk_n_stages):\n", - " B_at_j = self.B_view[j]\n", - " # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match\n", - " # the shape of B.\n", - " for i in range(self.y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " self.y_new_view[i] = self.y_old_view[i]\n", - "\n", - " self.y_new_view[i] += self.K_view[j, i] * B_at_j * step\n", - "\n", - " self.diffeq()\n", - "\n", - " # Check how well this step performed by calculating its error\n", - " if self.rk_method == 2:\n", - " # Calculate Error for DOP853\n", - " # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale\n", - " error_norm3 = 0.\n", - " error_norm5 = 0.\n", - " for i in range(self.y_size):\n", - " # Find scale of y for error calculations\n", - " scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol\n", - "\n", - " # Set last array of K equal to dydt\n", - " self.K_view[self.rk_n_stages, i] = self.dy_new_view[i]\n", - " for j in range(self.rk_n_stages_plus1):\n", - " if j == 0:\n", - " # Initialize\n", - " error_dot_1 = 0.\n", - " error_dot_2 = 0.\n", - "\n", - " K_scale = self.K_T_view[i, j] / scale\n", - " error_dot_1 += K_scale * self.E3_view[j]\n", - " error_dot_2 += K_scale * self.E5_view[j]\n", - "\n", - " # We need the absolute value but since we are taking the square, it is guaranteed to be positive.\n", - " # TODO: This will need to change if CySolver ever accepts complex numbers\n", - " # error_norm3_abs = fabs(error_dot_1) \n", - " # error_norm5_abs = fabs(error_dot_2)\n", - "\n", - " error_norm3 += (error_dot_1 * error_dot_1)\n", - " error_norm5 += (error_dot_2 * error_dot_2)\n", - "\n", - " # Check if errors are zero\n", - " if (error_norm5 == 0.) and (error_norm3 == 0.):\n", - " error_norm = 0.\n", - " else:\n", - " error_denom = error_norm5 + 0.01 * error_norm3\n", - " error_norm = self.step_size * error_norm5 / sqrt(error_denom * self.y_size_dbl)\n", - "\n", - " else:\n", - " # Calculate Error for RK23 and RK45\n", - " # Dot Product (K, E) * step / scale\n", - " error_norm = 0.\n", - " for i in range(self.y_size):\n", - " # Find scale of y for error calculations\n", - " scale = self.atol + max(fabs(self.y_old_view[i]), fabs(self.y_new_view[i])) * self.rtol\n", - "\n", - " # Set last array of K equal to dydt\n", - " self.K_view[self.rk_n_stages, i] = self.dy_new_view[i]\n", - " for j in range(self.rk_n_stages_plus1):\n", - " if j == 0:\n", - " # Initialize\n", - " error_dot_1 = 0.\n", - "\n", - " K_scale = self.K_T_view[i, j] / scale\n", - " error_dot_1 += K_scale * self.E_view[j] * step\n", - "\n", - " # We need the absolute value but since we are taking the square, it is guaranteed to be positive.\n", - " # TODO: This will need to change if CySolver ever accepts complex numbers\n", - " # error_norm_abs = fabs(error_dot_1) \n", - " # error_norm5_abs = fabs(error_dot_2)\n", - " \n", - " error_norm += (error_dot_1 * error_dot_1)\n", - " error_norm = sqrt(error_norm) / self.y_size_sqrt\n", - "\n", - " if error_norm < 1.:\n", - " # The error is low! Let's update this step for the next time loop\n", - " if error_norm == 0.:\n", - " step_factor = MAX_FACTOR\n", - " else:\n", - " error_pow = pow(error_norm, -self.error_expo)\n", - " step_factor = min(MAX_FACTOR, SAFETY * error_pow)\n", - "\n", - " if step_rejected:\n", - " # There were problems with this step size on the previous step loop. Make sure factor does\n", - " # not exasperate them.\n", - " step_factor = min(step_factor, 1.)\n", - "\n", - " self.step_size = self.step_size * step_factor\n", - " step_accepted = True\n", - " else:\n", - " error_pow = pow(error_norm, -self.error_expo)\n", - " self.step_size = self.step_size * max(MIN_FACTOR, SAFETY * error_pow)\n", - " step_rejected = True\n", - "\n", - " if step_error:\n", - " # Issue with step convergence\n", - " self.status = -1\n", - " elif not step_accepted:\n", - " # Issue with step convergence\n", - " self.status = -7\n", - "\n", - " # End of step loop. Update the old variables\n", - " self.t_old = self.t_new\n", - " for i in range(self.y_size):\n", - " self.y_old_view[i] = self.y_new_view[i]\n", - " self.dy_old_view[i] = self.dy_new_view[i]\n", - "\n", - "\n", - " cpdef void solve(self, bool_cpp_t reset = True):\n", - " self._solve()\n", - "\n", - "\n", - " cdef void _solve(self, bool_cpp_t reset = True):\n", - " \"\"\" Perform Runge-Kutta integration on `self.diffeq` function.\"\"\"\n", - "\n", - " # Reset the solver's state (avoid issues if solve() is called multiple times).\n", - " if reset:\n", - " self.reset_state()\n", - "\n", - " # Setup loop variables\n", - " cdef Py_ssize_t i, j\n", - "\n", - " # Setup storage arrays\n", - " # These arrays are built to fit a number of points equal to `self.expected_size`\n", - " # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array, extra_array\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array\n", - " cdef double[:, ::1] y_results_array_view, extra_array_view\n", - " cdef double[::1] time_domain_array_view\n", - " y_results_array = np.empty((self.y_size, self.expected_size), dtype=np.float64, order='C')\n", - " time_domain_array = np.empty(self.expected_size, dtype=np.float64, order='C')\n", - " y_results_array_view = y_results_array\n", - " time_domain_array_view = time_domain_array\n", - " if self.capture_extra:\n", - " extra_array = np.empty((self.num_extra, self.expected_size), dtype=np.float64, order='C')\n", - " extra_array_view = extra_array\n", - "\n", - " # The following are unused unless the previous array size is too small to capture all of the data\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_array_new, extra_array_new\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_array_new\n", - " cdef double[:, ::1] y_results_array_new_view, extra_array_new_view\n", - " cdef double[::1] time_domain_array_new_view\n", - "\n", - " # Load initial conditions into output arrays\n", - " time_domain_array_view[0] = self.t_start\n", - " for i in range(self.y_size):\n", - " y_results_array_view[i, 0] = self.y0_view[i]\n", - " if self.capture_extra:\n", - " for i in range(self.num_extra):\n", - " extra_array_view[i, 0] = self.extra_output_init_view[i]\n", - "\n", - " # Reset live variables to their starting values.\n", - " # Set current and old y variables equal to y0\n", - " for i in range(self.y_size):\n", - " self.y_new_view[i] = self.y0_view[i]\n", - " self.y_old_view[i] = self.y0_view[i]\n", - " # Set current and old time variables equal to t0\n", - " self.t_old = self.t_start\n", - " self.t_new = self.t_start\n", - "\n", - " # # Main integration loop\n", - " self.status = 0\n", - " # There is an initial condition provided so the time length is already 1\n", - " self.len_t = 1\n", - "\n", - " if self.y_size == 0:\n", - " self.status = -6\n", - "\n", - " while self.status == 0:\n", - " if self.t_new == self.t_end:\n", - " self.t_old = self.t_end\n", - " self.status = 1\n", - " break\n", - "\n", - " if self.use_max_steps:\n", - " if self.len_t > self.max_steps:\n", - " self.status = -2\n", - " break\n", - " else:\n", - " if self.len_t > MAX_INT_SIZE:\n", - " self.status = -3\n", - " break\n", - " \n", - " # Perform RK Step\n", - " self.rk_step()\n", - " \n", - " # Check is error occurred during step.\n", - " if self.status != 0:\n", - " break\n", - "\n", - " # Save data\n", - " if self.len_t >= (self.num_concats * self.expected_size):\n", - " # There is more data than we have room in our arrays.\n", - " # Build new arrays with more space.\n", - " # OPT: Note this is an expensive operation.\n", - " self.num_concats += 1\n", - " new_size = self.num_concats * self.expected_size\n", - " time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')\n", - " y_results_array_new = np.empty((self.y_size, new_size), dtype=np.float64, order='C')\n", - " time_domain_array_new_view = time_domain_array_new\n", - " y_results_array_new_view = y_results_array_new\n", - " if self.capture_extra:\n", - " extra_array_new = np.empty((self.num_extra, new_size), dtype=np.float64, order='C')\n", - " extra_array_new_view = extra_array_new\n", - "\n", - " # Loop through time to fill in these new arrays with the old values\n", - " for j in range(self.y_size):\n", - " for i in range(self.len_t):\n", - " if j == 0:\n", - " time_domain_array_new_view[i] = time_domain_array_view[i]\n", - " y_results_array_new_view[j, i] = y_results_array_view[j, i]\n", - "\n", - " if self.capture_extra:\n", - " for j in range(self.num_extra):\n", - " for i in range(self.len_t):\n", - " extra_array_new_view[j, i] = extra_array_view[j, i]\n", - "\n", - " # No longer need the old arrays. Change where the view is pointing and delete them.\n", - " y_results_array_view = y_results_array_new\n", - " time_domain_array_view = time_domain_array_new\n", - " # TODO: Delete the old arrays?\n", - " if self.capture_extra:\n", - " extra_array_view = extra_array_new\n", - "\n", - " # There should be room in the arrays to add new data.\n", - " time_domain_array_view[self.len_t] = self.t_new\n", - " # To match the format that scipy follows, we will take the transpose of y.\n", - " for i in range(self.y_size):\n", - " y_results_array_view[i, self.len_t] = self.y_new_view[i]\n", - "\n", - " if self.capture_extra:\n", - " for i in range(self.num_extra):\n", - " extra_array_view[i, self.len_t] = self.extra_output_view[i]\n", - "\n", - " # Increase number of time points.\n", - " self.len_t += 1\n", - "\n", - " # # Clean up output.\n", - " if self.status == 1:\n", - " self.success = True\n", - " else:\n", - " self.success = False\n", - "\n", - " # Create output arrays. To match the format that scipy follows, we will take the transpose of y.\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_out_array, y_results_out_array_bad\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_output_out_array, extra_output_out_array_bad\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] time_domain_out_array, time_domain_out_array_bad\n", - "\n", - " if self.success:\n", - " # Build final output arrays.\n", - " # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.\n", - " # This process will remove that junk and leave only the wanted data.\n", - " y_results_out_array = np.empty((self.y_size, self.len_t), dtype=np.float64, order='C')\n", - " time_domain_out_array = np.empty(self.len_t, dtype=np.float64, order='C')\n", - " if self.capture_extra:\n", - " extra_output_out_array = np.empty((self.num_extra, self.len_t), dtype=np.float64, order='C')\n", - "\n", - " # Link memory views\n", - " self.solution_y_view = y_results_out_array\n", - " self.solution_t_view = time_domain_out_array\n", - " if self.capture_extra:\n", - " self.solution_extra_view = extra_output_out_array\n", - "\n", - " # Populate values\n", - " for j in range(self.y_size):\n", - " for i in range(self.len_t):\n", - " if j == 0:\n", - " self.solution_t_view[i] = time_domain_array_view[i]\n", - " self.solution_y_view[j, i] = y_results_array_view[j, i]\n", - " if self.capture_extra:\n", - " for j in range(self.num_extra):\n", - " for i in range(self.len_t):\n", - " self.solution_extra_view[j, i] = extra_array_view[j, i]\n", - " else:\n", - " # Build nan arrays\n", - " y_results_out_array_bad = np.nan * np.ones((self.y_size, 1), dtype=np.float64, order='C')\n", - " time_domain_out_array_bad = np.nan * np.ones(1, dtype=np.float64, order='C')\n", - " if self.capture_extra:\n", - " extra_output_out_array_bad = np.nan * np.ones((self.num_extra, 1), dtype=np.float64, order='C')\n", - "\n", - " # Link memory views\n", - " self.solution_y_view = y_results_out_array_bad\n", - " self.solution_t_view = time_domain_out_array_bad\n", - " if self.capture_extra:\n", - " self.solution_extra_view = extra_output_out_array_bad\n", - "\n", - " # Integration is complete. Check if interpolation was requested.\n", - " if self.success and self.run_interpolation:\n", - " self.interpolate()\n", - " \n", - " # Update integration message\n", - " if self.status == 1:\n", - " self.message = \"Integration completed without issue.\"\n", - " elif self.status == 0:\n", - " self.message = \"Integration is/was ongoing (perhaps it was interrupted?).\"\n", - " elif self.status == -1:\n", - " self.message = \"Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers.\"\n", - " elif self.status == -2:\n", - " self.message = \"Maximum number of steps (set by user) exceeded during integration.\"\n", - " elif self.status == -3:\n", - " self.message = \"Maximum number of steps (set by system architecture) exceeded during integration.\"\n", - " elif self.status == -6:\n", - " self.message = \"Integration never started: y-size is zero.\"\n", - " elif self.status == -7:\n", - " self.message = \"Error in step size calculation:\\n\\tError in step size acceptance.\"\n", - " \n", - "\n", - "\n", - " cdef void interpolate(self):\n", - " \"\"\" Interpolate the results of a successful integration over the user provided time domain, `t_eval`.\"\"\"\n", - " # User only wants data at specific points.\n", - " cdef char old_status\n", - " old_status = self.status\n", - " self.status = 2\n", - "\n", - " # Setup loop variables\n", - " cdef Py_ssize_t i, j\n", - "\n", - " # The current version of this function has not implemented sicpy's dense output.\n", - " # Instead we use an interpolation.\n", - " # OPT: this could be done inside the integration loop for performance gains.\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] y_results_reduced\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] y_result_timeslice, y_result_temp\n", - " y_results_reduced = np.empty((self.y_size, self.len_t_eval), dtype=np.float64, order='C')\n", - " y_result_timeslice = np.empty(self.len_t, dtype=np.float64, order='C')\n", - " y_result_temp = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", - "\n", - " cdef double[:, ::1] y_results_reduced_view\n", - " cdef double[::1] y_result_timeslice_view, y_result_temp_view\n", - " y_results_reduced_view = y_results_reduced\n", - " y_result_timeslice_view = y_result_timeslice\n", - " y_result_temp_view = y_result_temp\n", - "\n", - " # Create arrays for extra output which may or may not be required.\n", - " cdef np.ndarray[np.float64_t, ndim=2, mode='c'] extra_reduced\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] extra_timeslice, extra_temp\n", - " cdef double[:, ::1] extra_reduced_view\n", - " cdef double[::1] extra_timeslice_view, extra_temp_view\n", - "\n", - " for j in range(self.y_size):\n", - " # np.interp only works on 1D arrays so we must loop through each of the y variables.\n", - "\n", - " # # Set timeslice equal to the time values at this y_j\n", - " for i in range(self.len_t):\n", - " y_result_timeslice_view[i] = self.solution_y_view[j, i]\n", - "\n", - " # Perform numerical interpolation\n", - " interp_array(\n", - " self.t_eval_view,\n", - " self.solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - "\n", - " # Store result.\n", - " for i in range(self.len_t_eval):\n", - " y_results_reduced_view[j, i] = y_result_temp_view[i]\n", - "\n", - " if self.capture_extra:\n", - " # Right now if there is any extra output then it is stored at each time step used in the RK loop.\n", - " # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?\n", - " # or do we use the interpolation on y to find new values.\n", - " # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.\n", - "\n", - " # Create extra output arrays\n", - " extra_reduced = np.empty((self.num_extra, self.len_t_eval), dtype=np.float64, order='C')\n", - " extra_timeslice = np.empty(self.len_t, dtype=np.float64, order='C')\n", - " extra_temp = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", - " extra_reduced_view = extra_reduced\n", - " extra_timeslice_view = extra_timeslice\n", - " extra_temp_view = extra_temp\n", - "\n", - " if self.interpolate_extra:\n", - " # Continue the interpolation for the extra values.\n", - " for j in range(self.num_extra):\n", - " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", - " # # Set timeslice equal to the time values at this y_j\n", - " for i in range(self.len_t):\n", - " extra_timeslice_view[i] = self.solution_extra_view[j, i]\n", - "\n", - " # Perform numerical interpolation\n", - " interp_array(\n", - " self.t_eval_view,\n", - " self.solution_t_view,\n", - " extra_timeslice_view,\n", - " extra_temp_view\n", - " )\n", - "\n", - " # Store result.\n", - " for i in range(self.len_t_eval):\n", - " extra_reduced_view[j, i] = extra_temp_view[i]\n", - " else:\n", - " # Use y and t to recalculate the extra outputs with self.diffeq\n", - " for i in range(self.len_t_eval):\n", - " # Set state variables\n", - " self.t_new = self.t_eval_view[i]\n", - " for j in range(self.y_size):\n", - " self.y_new_view[j] = y_results_reduced_view[j, i]\n", - "\n", - " # Call diffeq to recalculate extra outputs\n", - " self.diffeq()\n", - "\n", - " # Capture extras\n", - " for j in range(self.num_extra):\n", - " extra_reduced_view[j, i] = self.extra_output_view[j]\n", - "\n", - " # Replace the solution variables with the new interpolated ones\n", - " self.solution_t_view = self.t_eval_view\n", - " self.solution_y_view = y_results_reduced_view\n", - " if self.capture_extra:\n", - " self.solution_extra_view = extra_reduced_view\n", - "\n", - " self.status = old_status\n", - "\n", - "\n", - " cpdef void change_t_span(self, (double, double) t_span, bool_cpp_t auto_reset_state = False):\n", - "\n", - " # Update time domain information\n", - " self.t_start = t_span[0]\n", - " self.t_end = t_span[1]\n", - " self.t_delta = self.t_end - self.t_start\n", - " self.t_delta_abs = fabs(self.t_delta)\n", - " if self.t_delta >= 0.:\n", - " self.direction_flag = True\n", - " self.direction_inf = INF\n", - " else:\n", - " self.direction_flag = False\n", - " self.direction_inf = -INF\n", - "\n", - " # A change to t-span will affect the first step's size\n", - " self.recalc_firststep = True\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_y0(self, const double[::1] y0, bool_cpp_t auto_reset_state = False):\n", - "\n", - " # Check y-size information\n", - " cdef Py_ssize_t y_size_new\n", - " y_size_new = len(y0)\n", - "\n", - " if self.y_size != y_size_new:\n", - " # So many things need to update if ysize changes that the user might as well just\n", - " # create a new class instance.\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('New y0 must be the same size as the original y0 used to create CySolver class.'\n", - " 'Create new CySolver instance instead.')\n", - "\n", - " # Store y0 values for later\n", - " self.y0_view = y0\n", - "\n", - " # A change to y0 will affect the first step's size\n", - " self.recalc_firststep = True\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_args(self, tuple args, bool_cpp_t auto_reset_state = False):\n", - "\n", - " # Determine optional arguments\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] arg_array\n", - "\n", - " self.num_args = len(args)\n", - " arg_array = np.empty(self.num_args, dtype=np.float64, order='C')\n", - " self.arg_array_view = arg_array\n", - " for i in range(self.num_args):\n", - " self.arg_array_view[i] = args[i]\n", - "\n", - " # A change to args will affect the first step's size\n", - " self.recalc_firststep = True\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_tols(self, double rtol = NAN, double atol = NAN, bool_cpp_t auto_reset_state = False):\n", - "\n", - " # Update tolerances\n", - " if not isnan(rtol):\n", - " self.rtol = rtol\n", - " if not isnan(atol):\n", - " self.atol = atol\n", - "\n", - " if self.rtol < EPS_100:\n", - " self.rtol = EPS_100\n", - " # TODO: array based atol\n", - " # atol_arr = np.asarray(atol, dtype=)\n", - " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", - " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", - " # raise Exception\n", - "\n", - " # A change to tolerances will affect the first step's size\n", - " self.recalc_firststep = True\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_max_step_size(self, double max_step_size, bool_cpp_t auto_reset_state = False):\n", - "\n", - " self.max_step_size = max_step_size\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_first_step(self, double first_step, bool_cpp_t auto_reset_state = False):\n", - "\n", - " self.first_step = first_step\n", - " if self.first_step == 0.:\n", - " self.step_size = self.calc_first_step()\n", - " else:\n", - " if self.first_step <= 0.:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Error in user-provided step size: Step size must be a positive number.')\n", - " elif self.first_step > self.t_delta_abs:\n", - " self.status = -8\n", - " self.message = \"Attribute error.\"\n", - " raise AttributeError('Error in user-provided step size: Step size can not exceed bounds.')\n", - " self.step_size = self.first_step\n", - "\n", - " # If first step has already been reset then no need to call it again later.\n", - " self.recalc_firststep = False\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_t_eval(self, const double[:] t_eval, bool_cpp_t auto_reset_state = False):\n", - "\n", - " # Determine interpolation information\n", - " cdef np.ndarray[np.float64_t, ndim=1, mode='c'] t_eval_array\n", - "\n", - " self.run_interpolation = True\n", - " self.len_t_eval = len(t_eval)\n", - "\n", - " t_eval_array = np.empty(self.len_t_eval, dtype=np.float64, order='C')\n", - " self.t_eval_view = t_eval_array\n", - " for i in range(self.len_t_eval):\n", - " self.t_eval_view[i] = t_eval[i]\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - "\n", - " cpdef void change_parameters(\n", - " self,\n", - " (double, double) t_span = EMPTY_T_SPAN,\n", - " const double[::1] y0 = None,\n", - " tuple args = None,\n", - " double rtol = NAN,\n", - " double atol = NAN,\n", - " double max_step_size = NAN,\n", - " double first_step = NAN,\n", - " const double[::1] t_eval = None,\n", - " bool_cpp_t auto_reset_state = True,\n", - " bool_cpp_t auto_solve = False):\n", - "\n", - " if not isnan(t_span[0]):\n", - " self.change_t_span(t_span, auto_reset_state=False)\n", - "\n", - " if y0 is not None:\n", - " self.change_y0(y0, auto_reset_state=False)\n", - "\n", - " if args is not None:\n", - " self.change_args(args, auto_reset_state=False)\n", - "\n", - " if not isnan(rtol) or not isnan(atol):\n", - " self.change_tols(rtol=rtol, atol=atol, auto_reset_state=False)\n", - "\n", - " if not isnan(max_step_size):\n", - " self.change_max_step_size(max_step_size, auto_reset_state=False)\n", - "\n", - " if not isnan(first_step):\n", - " self.change_first_step(first_step, auto_reset_state=False)\n", - "\n", - " if t_eval is not None:\n", - " self.change_t_eval(t_eval, auto_reset_state=False)\n", - "\n", - " # Now that everything has been set, reset the solver's state.\n", - " # If first step has already been reset then no need to call it again later.\n", - " if not isnan(first_step):\n", - " self.recalc_firststep = False\n", - "\n", - " if auto_reset_state:\n", - " self.reset_state()\n", - "\n", - " # User can choose to go ahead and rerun the solver with the new setup\n", - " if auto_solve:\n", - " # Tell solver to reset state if for some reason the user set reset to False but auto_solve to True,\n", - " # ^ This should probably be a warning. Don't see why you'd ever want to do that.\n", - " self._solve(reset=(not auto_reset_state))\n", - " \n", - " cdef void update_constants(self) noexcept nogil:\n", - " \n", - " # Nothing to update\n", - " pass\n", - " \n", - " cdef void diffeq(self) noexcept nogil:\n", - " # This is a template function that should be overriden by the user's subclass.\n", - "\n", - " # The diffeq can use live variables which are automatically updated before each call.\n", - " # self.t_new: The current \"time\" (of course, depending on your problem, it may not actually be _time_ per se).\n", - " # self.y_new_view[:]: The current y value(s) stored as an array.\n", - " # For example...\n", - " # ```python\n", - " # cdef double t_sin\n", - " # # You will want to import the c version of sin \"from libc.math cimport sin\" at the top of your file.\n", - " # t_sin = sin(self.t_new)\n", - " # y0 = self.y_new_view[0]\n", - " # y1 = self.y_new_view[1]\n", - " # ```\n", - "\n", - " # Can also use other optional global attributes like...\n", - " # self.arg_array_view (size of self.arg_array_view is self.num_args). For example...\n", - " # ```python\n", - " # cdef double a, b\n", - " # a = self.arg_array_view[0]\n", - " # b = self.arg_array_view[1]\n", - " # ```\n", - " # Currently, these args must be doubles (floats).\n", - "\n", - " # This function *must* set new values to the dy_new_view variable (size of array is self.y_size). For example...\n", - " # ```python\n", - " # self.dy_new_view[0] = b * t_sin - y1\n", - " # self.dy_new_view[1] = a * sin(y0)\n", - " # ```\n", - "\n", - " # CySolver can also set additional outputs that the user may want to capture without having to make new calls\n", - " # to the differential equation or its sub-methods. For example...\n", - " # ```python\n", - " # self.extra_output_view[0] = t_sin\n", - " # self.extra_output_view[1] = b * t_sin\n", - " # ```\n", - " # Currently, these additional outputs must be stored as doubles (floats).\n", - " # Note that if extra output is used then the variables `capture_extra` and `num_extra` must be set in CySolver's\n", - " # `__init__` method.\n", - "\n", - " # The default template simply sets all dy to 0.\n", - " cdef Py_ssize_t i\n", - " for i in range(self.y_size):\n", - " self.dy_new_view[i] = 0.\n", - "\n", - "\n", - " # Public accessed properties\n", - " @property\n", - " def solution_t(self):\n", - " # Need to convert the memory view back into a numpy array\n", - " return np.asarray(self.solution_t_view)\n", - "\n", - "\n", - " @property\n", - " def solution_y(self):\n", - " # Need to convert the memory view back into a numpy array\n", - " return np.asarray(self.solution_y_view)\n", - "\n", - "\n", - " @property\n", - " def solution_extra(self):\n", - " # Need to convert the memory view back into a numpy array\n", - " return np.asarray(self.solution_extra_view)\n", - "\n", - "\n", - " @property\n", - " def size_growths(self):\n", - " # How many times the output arrays had to grow during integration\n", - " return self.num_concats - 1\n", - "\n", - "from libc.math cimport sin \n", - "\n", - "cdef class CySolverPendulum(CySolver):\n", - " \n", - " cdef double coeff_1, coeff_2\n", - " \n", - " cdef void update_constants(self) noexcept nogil:\n", - " \n", - " cdef double l, m, g\n", - " \n", - " l = self.arg_array_view[0]\n", - " m = self.arg_array_view[1]\n", - " g = self.arg_array_view[2]\n", - " self.coeff_1 = (-3. * g / (2. * l))\n", - " self.coeff_2 = (3. / (m * l**2))\n", - " \n", - " cdef void diffeq(self) noexcept nogil:\n", - "\n", - " # Unpack y\n", - " cdef double y0, y1, torque\n", - " y0 = self.y_new_view[0]\n", - " y1 = self.y_new_view[1]\n", - "\n", - " # External torque\n", - " torque = 0.1 * sin(self.t_new)\n", - "\n", - " self.dy_new_view[0] = y1\n", - " self.dy_new_view[1] = self.coeff_1 * sin(y0) + self.coeff_2 * torque" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "b9c70e0e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Working on Cython (class) integration...\n", - "Status 1\n", - "Success True\n", - "Message Integration completed without issue.\n", - "Growths 0\n", - "182\n", - "Done.\n" - ] - } - ], - "source": [ - "print('Working on Cython (class) integration...')\n", - "# Solver = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "Solver = CySolverPendulum(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "Solver.solve()\n", - "print('Status', Solver.status)\n", - "print('Success', Solver.success)\n", - "print('Message', Solver.message)\n", - "print('Growths', Solver.size_growths)\n", - "t_cy_cl, y_cy_cl = Solver.solution_t, Solver.solution_y\n", - "print(t_cy_cl.size)\n", - "print('Done.')" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "735012fa", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAGxCAYAAABvIsx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACVvUlEQVR4nO2dd3gUVdvG701PgIQSkhBIIPQmgqEFjCAICAgqFlSaDUVQBKyACsonCDZeRUBQRF8bvggKikhEQJTQCTWA1IAkhJpQU+f74/FkdpNNsmV6nt915Zphd2b27LJ75j5PtUmSJIFhGIZhGMZC+Og9AIZhGIZhGKVhgcMwDMMwjOVggcMwDMMwjOVggcMwDMMwjOVggcMwDMMwjOVggcMwDMMwjOVggcMwDMMwjOVggcMwDMMwjOVggcMwDMMwjOVggcMwFZBdu3bhkUceQVxcHIKCglC5cmXcdNNNmDFjBs6fP+/29aZOnYoffvihxOMLFy6EzWbD1q1bFRi1cly8eBHh4eH49ttv3TpPvJ9jx46pM7ByyMvLQ4MGDTBz5kxdXp9hzAQLHIapYMyfPx/x8fHYsmULXnjhBaxcuRJLly7Ffffdh7lz5+Kxxx5z+5qlCRyj8vrrryM6OhoDBw7Ueyhu4e/vj9deew1vvPEGzp07p/dwGMbQsMBhmApEcnIynnrqKdx2223Ytm0bRo4cia5du6JHjx4YP3489u/fj0ceeUTvYarK+fPn8fHHH2PUqFGw2Wx6D8dtHnzwQdhsNnz88cd6D4VhDA0LHIapQEydOhU2mw3z5s1DYGBgiecDAgLQv39/AMBjjz2G6tWr4+rVqyWO69atG1q0aAEAsNlsuHLlCj7//HPYbDbYbDZ07drV4fhLly7hqaeeQnh4OGrUqIEBAwbg1KlTDscUFhZixowZaNq0KQIDAxEREYGhQ4fi5MmTDsd17doVLVu2xJYtW5CYmIiQkBDUr18fb731FgoLC8v9DBYuXIj8/Hyn1ptNmzahX79+qFGjBoKCgtCgQQOMGTOmzOslJSXhzjvvRJ06dRAUFISGDRviySefxNmzZx2OO3PmDJ544gnExMQgMDAQNWvWROfOnfHbb78VHbNjxw7ccccdiIiIQGBgIKKjo9G3b1+HzyAgIAADBw7EvHnzwL2SGaZ0WOAwTAWhoKAAv//+O+Lj4xETE1Pu8c8++ywuXLiAr7/+2uHxffv2Yc2aNRg1ahQAsgoFBwejT58+SE5ORnJyMmbPnu1wzuOPPw5/f398/fXXmDFjBtauXYvBgwc7HPPUU0/hpZdeQo8ePbBs2TJMmTIFK1euRKdOnUqIhYyMDAwaNAiDBw/GsmXL0Lt3b4wfPx5ffvllue/r559/Rps2bVC1alWHx3/99VckJiYiLS0N7733Hn755Re88sorOH36dJnXO3z4MBISEjBnzhysWrUKr732GjZt2oSbb74ZeXl5RccNGTIEP/zwA1577TWsWrUKn3zyCW677bYiV9OVK1fQo0cPnD59Gh999BGSkpIwc+ZMxMbG4tKlSw6v2bVrVxw/fhx79uwp9/0yTIVFYhimQpCRkSEBkB544AGXz+nSpYvUunVrh8eeeuopKTQ0VLp06VLRY5UqVZKGDRtW4vzPPvtMAiCNHDnS4fEZM2ZIAKT09HRJkiQpNTXV6XGbNm2SAEgTJkxwGBMAadOmTQ7HNm/eXOrVq1e57ykkJEQaMWJEiccbNGggNWjQQLp27Vqp54r3c/ToUafPFxYWSnl5edLx48clANKPP/5Y9FzlypWlMWPGlHrtrVu3SgCkH374odz38Pfff0sApDlz5pR7LMNUVNiCwzBMqTz77LNISUnBX3/9BQDIzs7Gf//7XwwbNgyVK1d2+TrC7SVo1aoVAOD48eMAgDVr1gAAHn74YYfj2rdvj2bNmmH16tUOj0dFRaF9+/YlrimuVxoXL17E1atXERER4fD4wYMHcfjwYTz22GMICgpy7U39S2ZmJkaMGIGYmBj4+fnB398fdevWBQCkpqY6vJeFCxfi//7v/7Bx40YH6w4ANGzYENWqVcNLL72EuXPnYt++faW+phj/P//849ZYGaYiwQKHYSoI4eHhCAkJwdGjR10+584770S9evXw0UcfAaD4lStXrhS5p1ylRo0aDv8W8T/Xrl0DgCI3Ta1atUqcGx0dXSJjqPj1xDXF9UpDPF9cxJw5cwYAUKdOnTLPL05hYSF69uyJJUuW4MUXX8Tq1auxefNmbNy40eH1AGDRokUYNmwYPvnkEyQkJKB69eoYOnQoMjIyAABhYWFYt24dWrdujQkTJqBFixaIjo7GpEmTSoghMf7y3i/DVGRY4DBMBcHX1xfdu3fHtm3bSgTuloaPjw9GjRqFxYsXIz09HbNnz0b37t3RpEkTRccmBEt6enqJ506dOoXw8HBFX6d4rZ+aNWsCgMufi2DPnj3YuXMn3n77bTzzzDPo2rUr2rVr51SAhYeHY+bMmTh27BiOHz+OadOmYcmSJQ5WqxtuuAHffvstzp07h5SUFAwcOBBvvPEG3n33XYdrifEr9bkwjBVhgcMwFYjx48dDkiQMHz4cubm5JZ7Py8vD8uXLHR57/PHHERAQgEGDBuHAgQN4+umnS5znivWkLLp16wYAJYKEt2zZgtTUVHTv3t3ja9sTEBCA+vXr4/Dhww6PN27cGA0aNMCCBQuQk5Pj8vVEmnnxjLTyUrhjY2Px9NNPo0ePHti+fbvT69544414//33UbVq1RLHHDlyBADQvHlzl8fKMBUNP70HwDCMdohsn5EjRyI+Ph5PPfUUWrRogby8POzYsQPz5s1Dy5Yt0a9fv6JzqlatiqFDh2LOnDmoW7euw3OCG264AWvXrsXy5ctRq1YtVKlSxS0rT5MmTfDEE0/gww8/hI+PD3r37o1jx47h1VdfRUxMDMaOHavI+wcoA+mXX34p8fhHH32Efv36oWPHjhg7dixiY2ORlpaGX3/9FV999ZXTazVt2hQNGjTAyy+/DEmSUL16dSxfvhxJSUkOx2VlZeHWW2/FQw89hKZNm6JKlSrYsmULVq5ciQEDBgAAfvrpJ8yePRt33XUX6tevD0mSsGTJEly8eBE9evRwuN7GjRvh6+uLW265RaFPhWEsiM5BzgzD6EBKSoo0bNgwKTY2VgoICJAqVaoktWnTRnrttdekzMzMEsevXbtWAiC99dZbpV6vc+fOUkhIiARA6tKliyRJctbRli1bHI5fs2aNBEBas2ZN0WMFBQXS9OnTpcaNG0v+/v5SeHi4NHjwYOnEiRMO53bp0kVq0aJFiTEMGzZMqlu3brnvffXq1RIAafPmzSWeS05Olnr37i2FhYVJgYGBUoMGDaSxY8cWPe8si2rfvn1Sjx49pCpVqkjVqlWT7rvvPiktLU0CIE2aNEmSJEm6fv26NGLECKlVq1ZSaGioFBwcLDVp0kSaNGmSdOXKFUmSJGn//v3Sgw8+KDVo0EAKDg6WwsLCpPbt20sLFy4sMc7ExESpX79+5b5XhqnI2CSJK0UxDFM2zz33HObMmYMTJ044jS8xG61atULnzp0xZ84cvYfiNocPH0ajRo3w66+/lrDsMAwjwwKHYZhS2bhxIw4ePIgnn3wSTz75pGWaPK5cuRJ33303/v77b7czp/TmkUcewcmTJ0u4wRiGcYQFDsMwpWKz2RASEoI+ffrgs88+c6v2jdGZNWsWbrzxRiQmJuo9FJfJz8/HW2+9hfvvvx+NGzfWezgMY2hY4DAMwzAMYzk4TZxhGIZhGMvBAodhGIZhGMvBAodhGIZhGMtRIQv9FRYW4tSpU6hSpUpRJVKGYRiGYYyNJEm4dOkSoqOj4eNTto2mQgqcU6dOISYmRu9hMAzDMAzjASdOnCi3xEOFFDhVqlQBQB9QaGiozqNhGIZhGMYVsrOzERMTU3QfL4sKKXCEWyo0NJQFDsMwDMOYDFfCSzjImGEYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYhmEYy8ECh2EYRkcyMoC33gKOHNF7JAxjLVjgMAzD6ERhIXDvvcD48UCrVsDs2fQYwzDewwKHYRhGJ774AvjrL9q/cgUYNQro3Ru4fl3fcTGMFWCBwzAMowMXLgAvvkj706YB//kPEBwMrFoFfPONvmNjGCvAAodhGEYHJk4EzpwBmjcHxo0DRo8mVxUALF6s79gYxgqwwGEYhtGYQ4eAuXNp/6OPgIAA2r/vPtomJQEXL+oyNIaxDCxwGIZhNGbFCkCSgFtvBbp2lR9v2hRo0QLIywOWLdNteAxjCVjgMAzDaMzq1bTt2bPkc/feS1t2UzGMd7DAYRiG0ZD8fGDtWtq/7baSzwuB8+uvQFaWZsNiGMvBAodhGEZDtm0DsrOBqlWBNm1KPt+iBbmqcnOBn37SfHgMYxlY4DAMw2iIcE/deivg61vyeZuN3VQMowSaCJzZs2cjLi4OQUFBiI+Px/r168s8ft26dYiPj0dQUBDq16+PuSLdwI6LFy9i1KhRqFWrFoKCgtCsWTOsWLFCrbfAMAyjCELgdO9e+jFC4PzyC3D5svpjYhgrorrAWbRoEcaMGYOJEydix44dSExMRO/evZGWlub0+KNHj6JPnz5ITEzEjh07MGHCBIwePRrff/990TG5ubno0aMHjh07hsWLF+PAgQOYP38+ateurfbbYRiG8Zhr1+TKxWUJnFatgDp1gJwccmkxDOM+NkmSJDVfoEOHDrjpppswZ86coseaNWuGu+66C9OmTStx/EsvvYRly5YhNTW16LERI0Zg586dSE5OBgDMnTsXb7/9Nvbv3w9/f3+3x5SdnY2wsDBkZWUhNDTUg3fFMAzjPr/9BvToAURHAydPkjuqNO68k1LF338fGDNGsyEyjKFx5/6tqgUnNzcX27ZtQ89iuZA9e/bEhg0bnJ6TnJxc4vhevXph69atyMvLAwAsW7YMCQkJGDVqFCIjI9GyZUtMnToVBQUFTq+Zk5OD7Oxshz+GYRitsXdPlSVuADkAOSVF1SExjGVRVeCcPXsWBQUFiIyMdHg8MjISGRkZTs/JyMhwenx+fj7Onj0LADhy5AgWL16MgoICrFixAq+88greffddvPnmm06vOW3aNISFhRX9xcTEKPDuGIZh3EOEH3brVv6xQuDs2KHeeBjGymgSZGwrtlSRJKnEY+Udb/94YWEhIiIiMG/ePMTHx+OBBx7AxIkTHdxg9owfPx5ZWVlFfydOnPDm7TAMw7iNJAG7d9N+fHz5xwuBs28fxeIwDOMefmpePDw8HL6+viWsNZmZmSWsNIKoqCinx/v5+aFGjRoAgFq1asHf3x++djmWzZo1Q0ZGBnJzcxEgGrv8S2BgIAIDA5V4SwzDMB5x4gTVv/HzA5o0Kf/4mBigenXg/Hlgzx7XRBHDMDKqWnACAgIQHx+PpKQkh8eTkpLQqVMnp+ckJCSUOH7VqlVo27ZtUUBx586dcejQIRQWFhYdc/DgQdSqVauEuGEYhjECwnrTpIncXLMsbDagdWvaZzcVw7iP6i6qcePG4ZNPPsGCBQuQmpqKsWPHIi0tDSNGjABA7qOhQ4cWHT9ixAgcP34c48aNQ2pqKhYsWIBPP/0Uzz//fNExTz31FM6dO4dnn30WBw8exM8//4ypU6di1KhRar8dhmEYj9izh7Y33OD6ORxozDCeo6qLCgAGDhyIc+fO4Y033kB6ejpatmyJFStWoG7dugCA9PR0h5o4cXFxWLFiBcaOHYuPPvoI0dHR+OCDD3DPPfcUHRMTE4NVq1Zh7NixaNWqFWrXro1nn30WL730ktpvh2EYxiOEBadlS9fP4UBjhvEc1evgGBGug8MwjNa0bg3s3An8+CPQv79r5+zbR72pKlWixpvOWjswTEXCMHVwGIZhGCAvDxC1S91xUTVuDAQFAVeuAIcOqTM2hrEqLHAYhmFU5tAh6g5eqRLwr3feJfz8qG0DwHE4DOMuLHAYhmFUxj7+xsfNWZfjcBjGM1jgMAzDqIwnAcYCFjgM4xkscBiGYVTGkxRxgb3AqXgpIQzjOSxwGIZhVEZYcDwROMLqc+YMVTVmGMY1WOAwRWRlAU88ATz3HGBXJJphGC+4cgU4coT2PXFRhYQAtWvTPmdSMYzrqF7ojzEHaWlA376yKT0uDnj6aX3HxDBWYP9+ci3VrAlERHh2jYYNgX/+IYHToYOy42MYq8IWHAY7d9KkuWcPrRYB4MUXgQMH9B0Xw1gBYXVp3NjzazRs6HgthmHKhwUOg+HDgYwMig9ITQV69ACuXQOGDgXy8/UeHcOYG+GeatDA82uwwGEY92GBU8E5cgTYsoVqc6xaBcTGAgsWAGFhwObNwPTpeo+QYczN4cO0rV/f82uwwGEY92GBU8H53/9oe+utQFQU7depA3zwAe1/8AGnpjKMNwiBwxYchtEWFjgVnO++o+399zs+/sADQHAwkJkJ7N2r/bgYxioo4aIS5549C1y86PWQGKZCwAKnAnPoELB9O3Uovvtux+cCAoDERNr//Xftx8YwViAnBzhxgva9cVFVqQJERtK+sAgxDFM2LHAqMMI91a0bpbAWp1s32rLAYRjPOHaMXLyVKnmeIi5gNxXDuAcLnAqMEDj33ef8+e7dabt2LVBQoMmQGMZS2Mff2GzeXYsFDsO4BwucCsqhQ9Tbxpl7StCmDWVTZWWRK4thGPcQ8TfeuKcELHAYxj1Y4FRQVq+mbWIiEB7u/BhfX6BrV9pnNxXDuI8SGVQCFjgM4x4scCooW7bQNiGh7OM4DodhPIcFDsPoBwucCooQOO3alX2cEDjr1wO5ueqOiWGshhIp4gJxjYwM4PJl76/HMFaHBU4F5OpVubZNeQKnRQvKsLp2Ddi0Sf2xMYxVkCRlY3CqVQNq1KD9ipYqnpcHbNvGwo5xDxY4FZAdOygrKioKqF277GNtNtmKI+J2GIYpn/R0Whj4+gJ16ypzzYrmptq6FRg2jGoAtW0LDBig94gYM8ECpwJi755yJXVVCJw1a9QbE8NYDWG9iY0F/P2VuWZFEjinTwO33AJ88QVw4QI9lpQErFun77gY88ACpwLiavyNoEMH2u7ezX2pGMZVlGiyWZyKJHAWLCALWMuWJGqefJIef/11fcfFmAcWOBUQIXDat3ft+MaNydJz4QKtqhiGKR8lM6gEFUXgFBQA8+bR/vPPkyVnwgSyhK1ZQ0kPDFMeLHAqGBcvAn//Tftt27p2TnCwvApNTVVlWAxjOY4do21cnHLXFNc6fly5axqRVavo86taVW4EHBsLPPoo7bMVh3EFFjgVjK1baVu/vpyR4QrNm9N23z7lx8QwVkQ02YyNVe6a4lonT1q7fcrcubR9+GFaYAnGjycrzurVwF9/6TI0xkSwwKlguBt/I2jWjLZswWEY10hLo62SAqdWLcrKysuzrrv4xAngp59of8QIx+fq1iXRAwBz5mg6LMaEsMCpYHgqcNiCwzCuU1hIVhYAiIlR7rp+fnJpByGgrMaCBfT53Xor0KRJyedFc2C24DDlwQKngrFrF21vusm981jgMIzrZGZS5W+bDYiOVvbawiJkVYGTlETbwYOdP9+hA32ux45RrSGGKQ0WOBWI69eBo0dpX7icXKVpU9qePg2cP6/suBjGaoj4m+ho5WrgCKwscHJy5DjBxETnx4SGAjfcQPvJydqMizEnLHAqEH//TabfqlWpMqg7VKkim9o5DodhykYIHCXdUwIrC5xt20jk1Kwpp8Q7o1Mn2m7YoM24GHPCAqcCsX8/bZs2da2CcXE40JhhXEOIDxY47iHiajp1KnuOYoHDuAILnAqEvcDxBI7DYRjXUCNFXGBlgSMES+fOZR8nBM62beR6ZxhnsMCpQLDAYRhtYBeV+0iSbMEpT+DUrw9ERFAg9/bt6o+NMScscCoQ3gocdlExjGuoUQNHIK557hxw5Yry19eLQ4eAM2eAwEAgPr7sY202dlMx5cMCp4JQWKicwElLAy5fVmZcDGNF1LTghIVRJhFgLSuOsN60bUsipzxY4DDlwQKngnDyJHD1KqWsetrduEYNOftKiCWGYRzJzZXrs6ghcACq6AtYU+CU554S2AscSVJnTIy5YYFTQRCCpGFD7+pyCCsOx+EwjHNOnaIbbmAgpTurgRXjcNwVOPHxNJedPi3X92IYe1jgVBC8dU8JONCYYcpGuKfq1AF8VJphrSZwLlyQY/uEZaY8goLkWB12UzHOYIFTQVBa4HCgMcM4R80AY4HVBM6ePbStWxcID3f9PCGGuKIx4wxNBM7s2bMRFxeHoKAgxMfHY/369WUev27dOsTHxyMoKAj169fH3LlzSz3222+/hc1mw1133aXwqK2FUgKnUSPaHjni3XUYxqqoGWAssKrAadHCvfNuvJG2vOBinKG6wFm0aBHGjBmDiRMnYseOHUhMTETv3r2RVsov8+jRo+jTpw8SExOxY8cOTJgwAaNHj8b3339f4tjjx4/j+eefR2JpTUuYIsQE4K3AEcGNx45xYB/DOEPNKsYCqwmcvXtp667AEd3GDxxQdjyMNVBd4Lz33nt47LHH8Pjjj6NZs2aYOXMmYmJiMGfOHKfHz507F7GxsZg5cyaaNWuGxx9/HI8++ijeeecdh+MKCgowaNAgvP7666jvaVpQBeHiRSAjg/bFhOApYmK9fJmbbjKMM9SsYiwQ1z5xgkpAmB1PBU7jxrQ9dYpLVzAlUVXg5ObmYtu2bejZs6fD4z179sSGUqLCkpOTSxzfq1cvbN26FXl5eUWPvfHGG6hZsyYee+yxcseRk5OD7Oxsh7+KxMGDtK1Vi2poeENwMBAVRfvHj3t3LYaxIlq4qKKjKYA5L4+yiMyOpwKnWjU5U03McwwjUFXgnD17FgUFBYgs1ro6MjISGcKkUIyMjAynx+fn5+Ps2bMAgL/++guffvop5s+f79I4pk2bhrCwsKK/GDVnHgMi4mXK6s7rDvXq0fbYMWWuxzBWQguB4+cH1K5N+2Z3U2VmUgVjm00uQ+EO7KZiSkOTIGNbsbawkiSVeKy848Xjly5dwuDBgzF//nyEuxhuP378eGRlZRX9nRAzUAVBCBylPHn2cTgMw8hcuya7boUAUQvhpjK7JVVYb+LigEqV3D9fCBy24DDF8VPz4uHh4fD19S1hrcnMzCxhpRFERUU5Pd7Pzw81atTA3r17cezYMfTr16/o+cJ/ndB+fn44cOAAGjRo4HB+YGAgAl2p/W1RhMCJi1PmemzBYRjniArGwcFA1arqvpawEJ08qe7rqI2n7imBiMNhCw5THFUtOAEBAYiPj0dSUpLD40lJSehUSjWnhISEEsevWrUKbdu2hb+/P5o2bYrdu3cjJSWl6K9///649dZbkZKSUuHcT66gtAWHBQ7DOOeff2gbHU0uFzURFiLxmmbFW4HDFhymNFS14ADAuHHjMGTIELRt2xYJCQmYN28e0tLSMGLECADkPvrnn3/wxRdfAABGjBiBWbNmYdy4cRg+fDiSk5Px6aef4ptvvgEABAUFoWXLlg6vUfXfpVLxxxlClDFXWuCY3TTOMEpz6hRto6PVfy0WOIR9DI4kqS8sGfOgusAZOHAgzp07hzfeeAPp6elo2bIlVqxYgbr/BnKkp6c71MSJi4vDihUrMHbsWHz00UeIjo7GBx98gHvuuUftoVqSvDw5CFENCw5PKAwjIwSO2vE39q9hZheVJHkvcOrXB3x9KU08PV0bccmYA5skVbxybdnZ2QgLC0NWVhZCQ0P1Ho6qHD5M2VNBQdRNXAkxcvWqHAx4/jylajJMWVy9Spky0dHeNXs1Os8/D7z7LjBuHG3VZMMGakxZr555m00KQeLjQwIlONiz6zRqBBw6BKxZA3TtqugQGYPhzv2be1FZHPv4G6UsLSEhQEQE7XMcDlMWTzxBtZcqVaIb8Z136j0iddHDgiO6l5sRYb2pX99zcQNwqjjjHBY4Fkes7JTKoBJwoDFTHps2AfPnA/Z1NX/5xdqNEe2DjNWmVi3a5uYC/5YIMx1C4HgbPsmZVIwzWOBYHKUzqAQcaMyUx/vv0/bBB4GsLODRR+nf06frNya10dKCExAgW1LNGmgsBIm3PfI4k4pxBgsci6O2wGELDuOMtDRg8WLaf+klIDQUePFFcpP++COwb5++41MDSdLWggOYP9D40CHaNmrk3XXYRcU4gwWOxVFL4HA1Y6YsZs0CCgqAW28FbryRHmvSBLjrLtp/+23dhqYaWVlUyRjQXuCY1YJz+DBtvW0jI1xUR4+Sy45hABY4loctOIzWXL4MzJtH+2PHOj730ku0/eoruWeTVRAio1o17wJm3cHMAic3V54/ihWfd5tatYDKlUlUizmPYVjgWJiLF4ELF2hfCBKlYIHDlMZXX5E1o1EjoG9fx+c6dKA03rw84D//0WV4qqFlkT9BnTq0NaPAOX4cKCwkMSgCpj3FZuNAY6YkLHAsjMigioig1Y2SCBdVVhYJKYYRrFpF20ceofomxXnmGdr+9JN2Y9ICLQOMBWa24Aj3VIMGzr8n7sJxOExxWOBYGLXcUwDVNalZk/Y5k4oRSBLw55+0f8stzo/p0oW2Bw5Q8T+roHWAMWBugSMCjL11TwnEddiqzAhY4FgYNQUOUEagsSRRCs0ttwBt2gDt2gEjR8pLXMayHDoEZGYCgYFA27bOj6lRA2jenPY3bNBubGqjpwXHjFlUSgUYC8R8xAsuRsACx8KoVeRP4DQOZ9cuoGNH4L77gPXrgZQUYOtWYM4cCsr4v/8zb9lVplyE9aZdOxI5pdG5s+PxVkBPC87Fi9QOw0wIC45SAic2lrZOBc6FC+Qbbd0aCA+nv3HjzNvjgnEJFjgWRvzQxcpGaWJiaFu0ejxwAOjeHdi8mXxYr74KrFwJfPcdkJBAM/CrrwLPPccix6IIwXLzzWUfJ57/6y91x6MlegQZh4VR6xTAfG4qpV1U9hYch+ll+XLq5DlrFrBzJ3DuHP29/z6pq5kzlRkAYzhY4FgY0UVcLYHjYB4/dQro1YtqxsfH0+z1xhv02H330Z1s9mw64f33yZLDWA4hcBITyz5OCJytW+XaMWZHCAwtXVQ2mzkzqezTuZWy4IgF1+XLdokPs2cD/ftTV88mTYDvvwd27wZ+/hno2ZPSuMaOBaZNU2YQjKFggWNhhMARplulKQpwPFEI9O5NS6dGjYAVK4CoKMeDbTbgqafk1dJrr8mlbhlLkJlJpfJtNjLYlUVcHH1F8vJI5JidggIgI4P2tbTgAOYMNP7nH6qD4+8vCxNvCQmREx/S0gCsXg2MHk0PPPMMsGMHMGAANb7q0wf49VdahAHAhAnAO+8oMxDGMLDAsSgXL8pNDlUXOPsuUuxNRARNGqJBjjOefRZ44QXaHzUKOH9encExmiPcTS1bUrG7srDZZCuOFeJwMjNJ5Pj4AJGR2r62GQWOCDCuVw/w81PuukVxOMmnyHJcUAAMGUJFl5xVX3z1VeCtt2h//HiKGWQsAwsciyKsN+Hhso9eaYom1gshkACyzrgS0TxlCnXXy8wEnn9encExmuNq/I3ASgJHxN9ERCh7w3YFM2ZSKR1gLBDu+LQpn1NgcceOVFbbZiv9pBdfJMtOfj4wbBj3erAQLHAsiggwVst6AwDRtSiSLwdBOJ94F/DAA66dGBgIfPIJTTqffQb89pt6g2Q0w12BIzKpNmygUAgzk55OW63dU4A5LThqCZwiC84pP6pHsGQJEBRU9kk2G2V5hoeTJVq4rRjTwwLHoqgdYAwAQUnLEQ6q1PbPc++VvUoqTufOVBsHoBUUZ1WZmrw8CnEAyo+/EbRuTcl2Fy+av7u4iL/xtuWAJ5hR4NhXMVaSujWvAADSEEuWYlf/QyIiSOQAwIwZXEzHIrDAsSiqW3AkCXjtNdQGzar/BHhQbGfyZLrD7dhBqZyMaTl0iERO5cqu9z3z86PeVID508WFBad4bL0WmFHgqGbB+fMbAMDx4KbA8OHunXzvvUC3bvRFfvNNZQfG6AILHIuidgYVkpKAnTtR25eWrh5NruHhcmOiyZPZimNihAWmeXP3DHlWicMxggUnPd08rj5RX0/RKut796Lur9TGPi2kqWfBUMI99dln3JbcArDAsSiqu6imTwcA1G4WBsCL1eNzz9Gyf8cOYNkyhQbHaM3evbQVLRhcpV072u7erex4tEZPC05kJInKggJz9PbKylIpw3PyZMQWknJKPxeInBwPrtG5M9Xuys/nWl0WgAWORVHVRbV1K/D774CvL2r3aAbAC4Fjb8V54w224pgUewuOO4jj9++nG7RZ0dOC4+8vV2YwQ7s3sfiqUYM81Ipw+DCwZAnCcRbBQWTG8jirTFhxvviCrTgmhwWOBcnNlVeUqlhwZsyg7YMPonbzqgC89P+PG0eZDtu3W6v7YgVCCJwWLdw7r25dKk+Sk2PutkB6WnAA2U1lJoGj6OLr/feBwkLYbr8dsXXptuZxnHD79mTFKSiQq68zpoQFjgU5eZIMIYGBcmVPxTh8mMqdA8CLLypTgyM8HHjoIdr/6COvhsdoT34+tSED3Lfg+PpSSSTAvJlUkqSvBQeQ09PNEGisuHX53DlgwQLaf+EFuRZOmhfXfPpp2i5YYL4upkwRLHAsiP0KyZ2AT5eYP58iGXv1Am64QbkMjlGjaLt4sXy3YEzB4cNkNQwJ8eymJUSRWQVOVhZw/Trt62XBEQLHTBYcxazLs2dTQ7M2bYBbby27q7ir9O5N6YAXLgDffqvEKBkdYIFjQVQLMM7PBz7/nPafeAKAbBo/d06e5D3ippuogEpeHokoxjTYx9/4eDCjmF3gCD0eFua8G4AWmFHgKGLBuX4d+PBD2n/+ecBmU8aC4+tLvfMAsipzbKApYYFjQVQLMF65kmbzmjWBO+4AAFSvTq4wQIHJVZiF584locOYAk8DjAVmFzh6x98AFVjgfPUVpY7FxlLvKbvrel2r79FHaXLbvh3YtMnLizF6wALHgqhmwRF+7iFDgIAAAOQCU8xNde+9lA5y6hTw009eXozRCqUETmqqeeq42KN3/A1QgQXOwoW0HTmS0skAZSw4AMUGivYz8+Z5eTFGD1jgWBBVLDiZmXK14UcecXhKMYETEEDN7gDZFcYYHlEDx90MKkH9+vRff/WqOSvkG8GCY5Ysqrw8eZ7wen46fJgqRNpswODBRQ+L66alKSCYH3uMtosXU5wPYypY4FgQVdIwv/ySYnDatwdatnR4StFS8ULg/PyzOaqWVXAKCqiGDeC5BcfPz9yZVEay4GRmGtu7e+oUiY6AACpQ6BVffknb226TJyEAdeqQ5snJUWAK6dyZgo0vXeJCpCaEBY7FkCQVBI4kAZ9+SvuPPlri6Tp1aKuIwGnRAmjblsTU118rcEFGTY4epRtJcLB3LlEzx+EYwYITHk5C0T5l3YiIuSkmxrOA9CIkiQrxAcDQoQ5P+fvLgs9rN5WPDzBoEO0LQcWYBhY4FuP8edmSKoSH12zdSneeoCDZJ22H4s3+2E1lGlJTadukCSWeeIqZBY4RLDg+PvLrG9lNpdjia8MGqjJcqRJw990lnlbUZSfcXytXslXZZLDAsRii4F7NmqRHFEHUgbjrLsqFLYbiAufBB2kZtmOH+ZsUWZzDh2nbqJF31zGzwDGCBQcwR6CxYgJHWG/uvddpvwdFCx82bSpblbkmjqlggWMxTpygbUyMQhcsLAS++472nVhvABUETo0aQL9+tC+yJAxCQQH14Hv5ZWDpUvnmVlFRqiu0vcAxW8kRI1hwAHMIHEUSIK5fBxYtov1i7imB4kHXQ4bQ9r//VeiCjBawwLEYQuAo5p5KTiazUGgocPvtTg+xn0wUS/MVbqpvvzVU7vDnnwOvvkrN1AcMoJtKRc4gFb0I4+K8u07DhhRDcvmyl20/NCY3l4pcAmzBcQVFSlgsX07lo2NigK5dnR6ieOuKBx4gP+CWLeZumlbBYIFjMRS34IiV0l13yRX9iiEm9txcigFShF69yB126hSlghqAa9eASZNov2tXOfPnrbcMpcE0RQgcby04/v5A48a0byY31enTtPX3p6KXemKGVHFFXFTCPTV4cKmRyoqLvYgIWUyJXnyM4WGBYzEUFTgFBcD//kf7AweWelhgoDy5K5bBERgoBw8KkaUzH31E1oWYGOCXX4Bt24CqVWlB9+uveo9OeyRJORcVYM44HOGijIz0MitIAYzecFOSFHBRZWbSjw+Q3UZOUEXs3XsvbRcvVvCijJqwwLEYwryviMBZv54US7VqVGuiDET8gaIxKUJULV5MAX46cvEiMHUq7b/+OgVwh4QADz9Mj82Zo9fI9OP0abJq+fgoU5JAWMREZ3IzYJT4G8D4LqqLF8kFCXgxP33zDS282rUDmjUr9TBVxN7dd1OBnU2bFMg/V57r14EffwR27dJ9ujQMLHAshqIWHGE5ufvuotYMpaGKwOnenQKOMzOBdesUvLD7vPsuNRZu3twxrnHECNr+/LMh5zxVEe6pmJiiKvle0aABbUVmlhkwSgYVYHyBI34f4eG0OPCIUmrfFEdYcC5cULAAcVQUkJhI+0uWKHRR5Xj2WYokuPFG8u7378/Fl1ngWAhJki04XgcZ5+fLvuYy3FMCMcErWmTM358ieQHd3VQiO/S11xzrvTRpAnTrRjE4FS3YWKn4G4EQOOK6ZkAIHCNZcBS9qSuI1wHGe/ZQ40s/v1IzOgX2nd0rgptq/37gk09ov0oVanuyfDnXJmSBYyHOnKGqsvYNMD1m7Vq6YHg43cHLQRULDiCLq++/160G/bFjwKFDJGz69Cn5/FNP0faTTyjQuqKglsA5ftzY7QbsMZKLqmpVufaVEcsXeB1gLFK0+/aleakMbDaVLFpiwfXXX4YKdnrlFVpk9etHrsApU+jx2bPNV3ZBSTQROLNnz0ZcXByCgoIQHx+P9evXl3n8unXrEB8fj6CgINSvXx9z5851eH7+/PlITExEtWrVUK1aNdx2223YvHmzmm/BFAj3VGRkuR6l8hEm2LvvphVTOYgJXvEy8V26UAbD+fPA6tUKX9w1fvuNth070uqoOHfeSe//9Gm5H2lFQMkAY4CsgEFBFGJhFnefkVxUqt3UFcIrgVNQIJsjynFPCRSvzyUu2qkT7S9dquCFPWfzZlr/2WwUJ+jjQ83Vg4KAlBRg40a9R6gfqgucRYsWYcyYMZg4cSJ27NiBxMRE9O7dG2mlzGBHjx5Fnz59kJiYiB07dmDChAkYPXo0vrdLzVu7di0efPBBrFmzBsnJyYiNjUXPnj3xj4EUtR4oFn9TWCj/eMWKpRzEBK/4ytHPTzYL6+SmEgKntDhrf3/g/vtpf80abcZkBJSqgSPw8ZHFklncVEay4ADGThX3KoPq99/pTVWrRhYcF1BN7Ik58YcfFL6wZ4wfT9uhQ+U+yNWrU0F4gLI/KyySyrRv314aMWKEw2NNmzaVXn75ZafHv/jii1LTpk0dHnvyySeljh07lvoa+fn5UpUqVaTPP//cpTFlZWVJAKSsrCyXjjcLH34oSYAkDRjg5YX++osuFBoqSTk5Lp2yZg2d0rixl6/tjHXr6OJhYZJ0/boKL1A6BQWSFB5OL79+fenHffstHdO2rXZj05s6deg9b9yo3DX79aNrzpmj3DXVJCZG+c/AGwYOpPG8957eIylJQgKN7X//8+DkwYPp5KeecvmU556jU557zoPXK4u//6YL+/lJ0oULCl/cPQ4coKH4+0vSsWOOz23ZQs8FBEjS6dP6jE8N3Ll/q2rByc3NxbZt29CzZ0+Hx3v27IkNGzY4PSc5ObnE8b169cLWrVuRV4pj/urVq8jLy0P1Uipt5eTkIDs72+HPiihmwRHWsn79XPZ1qeaiAoCbb6blWFYWsGqVCi9QOjt3AmfPApUrAx06lH6ceG7nTkrXtDo5ObLpXykXlf21zJBJZd+52ygWHEu6qC5dkl3mLrqnABXrAjVsSOmU+fnAihUKX9w9hHX55ptLBm+3bQu0b09xgZ9+qv3YjICqAufs2bMoKChAZGSkw+ORkZHIKOVOmJGR4fT4/Px8nD171uk5L7/8MmrXro3bSvEhTJs2DWFhYUV/MYqV+TUWirRpkCR5MnHRPQXILqrsbIrgVxQfH+C++2hf42Z3SUm07dq17FTounUpVCgvj3qEWp3jx+mrUrlyufGebmGmVPHz5+Vg6GJTlm4YVeDk5cljcjuLaskSmlQaNSp7lVEMVd11d95J2x9/VOHirlOe+3zkSNrOnVsxq61rEmRss9kc/i1JUonHyjve2eMAMGPGDHzzzTdYsmQJgkppnz1+/HhkZWUV/Z0QSsBiKGLBSUmhtKHg4FJ7TzkjNFROy1Qlg0NkUy1bpmkObHkTiMBmk+feTZvUHZMRsI+/KeOn7DZmShUXa7Tq1UvtYqI5RhU4//xDgjgwEKhZ082T7WvfuPFlU7WysxA4v/xC5kwdKCig0CSg9Plp4EAKNk5LA/7+W7uxGQVVBU54eDh8fX1LWGsyMzNLWGkEUVFRTo/38/NDjRo1HB5/5513MHXqVKxatQqtWrUqdRyBgYEIDQ11+LMiiggcYb3p3dutalw2m8puqo4dybZ9+bJmZuHr16mYMwD06FH+8RVR4CjpnrK/3uHDxk9vNVIGlcCoAkcEGMfEuNnSIi1NjtwfPNit17T/LBT/LrVrRxPepUtUUkMHtm0jr31YGBAf7/yYoCByVQEVM5tKVYETEBCA+Ph4JAk7/78kJSWhk0i1K0ZCQkKJ41etWoW2bdvC385H8Pbbb2PKlClYuXIl2or/wQpMYaG8UlFE4LjhnhKolkkFkIISqUoaZVPt2EEiJyKizKrwRQiBUxEmEqUzqATCInT5MpVhMjJGi78BjCtwPI6/+eorUiddugD16rl1qvgsrl0jIaAoPj4Uowjo5qYS1uVu3RyLjxanY0faJierPyajobqLaty4cfjkk0+wYMECpKamYuzYsUhLS8OIf2vcjx8/HkPtAsdGjBiB48ePY9y4cUhNTcWCBQvw6aef4vnnny86ZsaMGXjllVewYMEC1KtXDxkZGcjIyMBl0eikAnL6NMW8+fh4MeHu30+dDv39XU7FtEe1Yn8CUb30p5/kpjYqkpJC2/h41yzj7drRcceOUXcJKyNuWG7ec8olMFCOITO6m8rIFpzLl8m4YBQ8EjiS5HJrBmcEB1NWOaCym2rZMl3Mja66z4XAqQgLr+KoLnAGDhyImTNn4o033kDr1q3xxx9/YMWKFaj7b6RZenq6Q02cuLg4rFixAmvXrkXr1q0xZcoUfPDBB7jnnnuKjpk9ezZyc3Nx7733olatWkV/77zzjtpvx7AI91StWi7V5XOOyJ7q3p3KorqJqi4qALjpJgrSuHaNRI7K7NxJ2xtvdO34sDC5YaTV3VSK9jwrhlkyqYxowalcmeLhAEMV2vWsTcPWrbToCgqSa2G5iaqBxt26AZUq0Qe9bZsKL1A6V69SMWWgfIGTkEDb3bs1WRcaCk2CjEeOHIljx44hJycH27Ztwy233FL03MKFC7G2mA+zS5cu2L59O3JycnD06NEia4/g2LFjkCSpxN/kyZM1eDfGRJEbjuiv4uFkoqqLCtDcTSUsOK1bu35ORYnDUVPgmCWTyogWHMCYbiqPLDjCenP33bJqcxNVA42DguREDI3dVH/+SenfMTGUXFYW0dF0XGEhacaKBPeisghe33COHKE7uq+vbHp1E9UtOICcTfXLL5STrhIFBbTiAVy34ACyOdjKAic/X765V2SBY0QLDmBMgeN2FePcXOCbb2jfA/eUQPXPQsyVGlc1XreOtt27u+Y+r6huKhY4FsFrgSPcU126eFzYRPUYHABo1YpaeOfkqLpqOnSIzMDBweWvkOwRFpzNm61bd+LUKXpv/v4UgK00ZkkVZwuOa0iSBxacX34Bzp2jD7c8H0wZqNKPyp6+fWlRuGePpl9YUWurXTvXjmeBw5gaIXA87tQrBI5drJO7qO6iAmi5Iqw4332n2ssI91SrVmVnKBSnZUvKrs/OBg4cUGVoumNfUNKtlF8X4Rgc73AQOIWFlGb97bfkgt6yRfOA2AsXgCtXaN/lBZhwTw0a5EVQoQZir3p1IDGR9jV0U4n4QFfd5/YCx+jlF5SEBY5F8MqCc/Ik+VRsNvJ3e4iY6M+cIRePagiB8+uvNHuqgLsBxgI/P7kmhVUb3KsZfwPIFpz0dBWqYivEtWvAxYu0bzQLTlFg7Z9HgBYtKBj2wQepGnj79vQF/eILzUyMwnoTESEXAy2T8+eB5ctp3wv3FCD/35w+7dVlykbjqsZnzsiC7YYbXDunTRuyuJ4+LbsLKwIscCyCVzcdUfumUyevlqM1a9KKvrBQ5TTp5s3JVJKXp5rv25MAY4Ho6Lt/v1KjMRZqC5zq1eUkvqNH1XkNbxE3zMBAjxIOVSW6JvWP+GdbOn0JQ0OBW2+lhkXBweTfGDYM6N9fVmkq4rZ7atEi+m3feCOZUL1ACBxV4wKFwFm/ntxqKiMWXw0bAlWquHZOcLA8l1UkNxULHAvgddCncE95mD0l8PWVYzJUdVMBshVHpd5UnlpwAAoRAqzvolKzpZtIJzbqatM+/kbJVhVec/Uqome+CAA4hdrAO+/Qf9jvv9MN+MQJ4M03KQPo55/JoqPyF9XtAOMFC2jrpfUGcBQ4qrlm4uJIiBUW0meqMp7OTRUxDocFjgXwKugzI0PuR+BB9eLiaJJJBchF/377TfEXEyZgm811E7A9LHC8x+gCx5DxN5IE3H8/ojcvBQCc8o+FNO45xxTrGjWACRMozzgmhhoUde8um1lUwC0LTkoK5TL7+wNDhnj92qIj0LVrKhc+1NBNxQLHdVjgWACvgj5/+IEmxnbtvIhQltEk0Bgg+2zHjqTsRDqpQnhiArZHCJxDh1SORdIJFjgGzaD65BPg559RK+A8ACA3zwfnz5dybHw8CYnmzSnFqFcv1dwrbgmcTz+l7V13edCVsySVKsm/YU3cVL/+Sv1dVMRT97nI8Nyxw5rzkjNY4FgAMYF45Z7yInvKHs0sOIC8wvvvfxW9rJhAPHFPATSRBwZSKY9jx5QalXHQQuCIm6GKhgWvMJwF59gxYNw4AEDgtMkQfYnLzB6KiABWrqSV0f791FtJhc7YLlcxvnYN+PJL2h8+XLHX1yQO56ab6HO8cgVYvVq1l8nJAVJTad/d+alePfJMWnVecgYLHAvg8Q3n3Dm5U69CAkeYhFXNWhAMHEim7B07gL17FbusCA5u0cKz83195do5Dm4qCxTGycmRA8jZgmMQC05hIfDII1SH/+abgWefdT09OiaGrA7VqlE3xhdeUHx4Lltwvv+egp7r1iW3mUJoInBsNgraBlR1U6WmUsxltWru//58fYHGjWnfqu7z4rDAsQAeC5xly8hW2aoV+WMUQAgcTSw4NWoAffrQvoJWHPHjF64mTyiKw0k+D0yfDnTtSmadqCgq7/7OO7SUMhknT9I2OJiyndTCLALHEBacJUuAtWupANPChYCvr3s9mJo3l38/H34ot2xRgNxc+bMqV+B88gltH3tM0QJLms1Jwk21fLlqixl767Inwe2iV55VMzyLwwLHAngscBTKnrJHk7oT9gg31VdfKTapHDxIW7Ha8YQmjSll48BbS4CXX6ba6vn59MH8+iutlNu1k0uSmgT775qa2UNC4Jw6ZUwdaBiBU1gIvP467b/wQlERIbd7MPXtC7xI2Vd47DHFqiyePEkhfoGB5YTUpKbSb8THh6xRCqLZnNS1KwV0Z2SoVgTLm+xOgAUOY0I8EjhZWUBSEu0r5J4CNHZRAcAdd1AhkpMnaRXrJRcvyi4YjwXOhQtokjQLAHAgvwG18/3wQ5rEk5OBmTOpHcauXZSmu3Sp1+PWCi3ibwC6GQYG0s3RSF2xBYYROEuWUJuAsDBgzJiihz2q4Pt//0curuxsWjgoEIlq754qUxDPnEnbO++kWBYF0cRFBQABAUDv3rSvkpvK3QrGxRGWZRY4jGnw6KazbBktjZs2JRO1Qmg2mQgCA+UO4wq4qf7+m7a1anmWQYWLF4GuXdFkKwVLHghtRym5Tz9Nn3XHjsCzz1LM0J13klVn0CAqoW8CtBI4Pj6yS8NobqqCAlnA6ypw7K03Y8Y4VBz0SOD4+5MlNDSUhPjbb3s9RJcCjM+elVszjB3r9WsWR9M5SeXmmyLU0JPyFQBbcBiTcf061W0B3LzpfPUVbUU9GYUQFpysLNWzJWVEQbDvvqMX9gKv3FNXr5JFadcuNKlJLSTSsysj+7KTn1lEBMU69O5N2SP9+xs3ZcgOrQQOYNw4nDNnSFvYbOo0G3UZYb0JDSXRbIfHPZhiY4EPPqD9116Tgz48xKUA448/pskiPp4sSAqjqcDp3Zv6tezfL08mCqGEdVmcd+aMJkWXdYcFjsnxKOgzI0N2Tw0apOh4qlYlSy2goZuqUydKebp6VV4JeogIMHZ7AsnNpVimv/4CqlZF1d8WF938Sp3n/PyoEvMNN9D/yaBBhu+ExwJHdk9FRHjVB9J73nmHts8+S2k1dnjVZHLoUKpDk5dHriovUsfLrWKcmwt89BHtjx2rSmCXpgKnalWKxQEUd1N5bV0GULmy/NutCJlULHBMjkdBn4sW0RK0QwfFsqcENpsOcTg2GzByJO3Pnu2VSPDYgjNqFPDLL6Q0f/4ZaNXKtYrGoaHkLgwJIVeWqANiUOyLSqqNUWvhGCL+ZudOapDr50ffvWIIgZOR4UEojc1GVpWICLIQvfaax8Ms14Lz7bf0gdaqRc1AVcA+yFiTSg3CTSV6/CmEEDiiBIWnCDcVCxzGPS5fplTHJUtkv5HKiBuOW0WIhXtKYeuNQPM4HAAYPJiWJ/v3exVs7JHA+eor+n+32SgzrVMnAG60bKhXD3j1Vdp/4QWv3WxqIiwCWggco1twdBU48+fT9q675BWFHZGRFMdUUOBh49uICGDePNp/+20S3x5QpsDJywOmTKH90aNl06/CCEtqQYFGbpkBA2gu2LhRUXWuRHYnULHicFjgKEl6OlXgvOceusvfcgvwv/+p6nZw22Vw8CAFtPr6yg0rFUZzCw5AlpDBg2l/9myPLiFJHkwiBw8CI0bQ/muvyVkUcLMn1bhx9KKnTwOTJ7s6ZE3JyaF4UEC2EKgJC5xSuHpVtvQ98YTTQ/z85N+hR24qgCwRjzxCP4yhQ91u5iRJ5QQZL1xI/Uxq1qQgfJXw90dRZWdNFl3R0UBiIu0rWFNIKYFTkTKpWOAoiZ8flTsXnWXXr6cMn/vuU82i47bAEdabnj1Vi5DUxYIDAE89RdsffvBoVk9Pp0rrvr5A/founHD9Ov3/Xr5MfndhhfkXtwROQAClkgPArFnG88tA/v8MCFC3yJ9A3BTT0oxVBFp3gfO//5GVLy6uzIq/XsXhCGbOpP+Io0fdznA6f560GODE4nf9OvDGG7Q/YQJZX1VE8/pcIrPzu+8UuyRbcNyHBY6SxMVRPMXOnbTsnDiRRM/335PoUbCdgMAtgVNYKAfhquSeAnSy4AD0Gd98M6VeCxO+G4gJJC7ORWv5c8/R/3XNmiQcfX0dnhYC5+BBF2/QPXvSDSs/H3jvPbfGrgWiHk10tLpF/gS1a9Pr2LeHMAK6CxzhOnr88TIr/ioicEJDydJis1EjzK+/dvlUYXmLjKQeSA58/DFlSNSpI1tAVUTzRdc999D/zaZNijR+kiTlY3AOHzZmEU0lYYGjFrGxVDhr0yagWTP6ZXXt6nXaZXHcEjhJSfRjq1qV/MQqoWm7huKIYOMPPyTLihu4lUG1eLHsCvvvf536bOLiSN9euyZnu5XLSy/Rdv58w+VxihulaAOgNgEB8sdqJIOWrgJn3z5gwwYS0+VU/FVE4AA0b73yCu0/+aTL0amlxt+cPi3H3rz6qhP1ozyaC5yoKKBLF9r/3/+8vlxmJtVftNmKilV7THQ0GcwKChQrWG1YWOCozU03UYBefDwFMHTrJpejVAC3BM7HH9N26FDK9lEJzc3B9tx3H2WGnTsnp5+6iMsm4CNHqJw9QG0YevVyepi/v+xmOXrUxUHcdhvQpg3Z9t0cv9qIG6UW8TcCI8bh6CpwvvmGtn36lDsAxQQOAEyaRELn8mX6jV27Vu4ppQqcZ56h3+eNNyrelqE0dHGbixhHBdxUYm6qV49qm3qDzVZxMqlY4GhB9erA6tVUsv/CBSoGJ2ZJL7h8mYo/AS4InPR0cp8BpQYmKoVuLiqATCZitfnOO25ZcVwSOLm5VBwxO5uypUQcQSnUq0dbl2/QNpvcE+jDD+UgBgPAAodcBboJHEmSb5YuFOhUVOD4+pJ7KjIS2L2bkinK8bs6FTjff08WDT8/4LPPaBWgAboInAEDyE21davXphKl3FOCihJozAJHK8LCgBUr6Jt18iRlKLiwCioLYb0JC3Oh8NOCBWST7NyZiuKpiG5BxoJBg8iOe/asWxlVLk0iL79MWWjVqtFqupwJWggct9zw995LUc5nz8pB4QbAPgZHK4zWruHCBTluQXzPNWPXLlLhgYGUzFAOwpWoWC+vWrVI5Pj60vfy2WfLzBAtkUF16pTsQn75ZbJUaoQuc1LNmmSxB7y24igVYCwQFpzUVGWuZ1RY4GhJ1arATz+RRWfLFjkF00Ncdk8VFspBtypbbwDZgnPpkk4GCD8/OaPp7bcpNaocCgtlEVJqBtWyZcD779P+woUuFR/ySOD4+cmBlwsWuHGiuuhpwTFKDI6w3lSrpknoiCPiJtmnj0ulbBW14Ai6dQM+/5wsjbNmydZSJzhUMT5/noLoMzOBli3LPE8NdIsLFJa2L7/UpwBpKTRuRGM5vO4E1VK65RaqwbV8uaUij1ngaE3DhlQI0M+PKgrPmuXxpVwWOMuX02xTtapq1ULtCQ2VJ39d3FSAoxVn2rRyD8/IoGwdH59SPs+0NODhh2l/7FjqHeUCHgkcgOKkfH2pWNi+fW6erA5aBxkDxnNRGcI9JVKQy0EInDNnFL5nDRoEzJlD+1On0u/BSeO5IhdV+FWgb1/KIo2OpvnI20ASN9HNqnzffRTvuG8fJZx4iKIC5/hxxP1nDADg6HEfaimxfj259Pv3B9q1UyXjVw9Y4OhBly5yp97nngM2b/boMmICKVPgSJJ8g3/qKVWDiwW6tGsojp8fMH067U+fXm5gtwgCjolx4nW6do3cRhcuAG3bAm+95fIwPBY4kZEUqwUYxorDMTg6CpydO6koXlCQ/L0ohxo15O+y4jf2J58EZsyg/Zkz6XexfXvR0zk58mvGDr6FhHq1asCvv8o/Cg0RAufcOSqgrBmhofKi0sPfcWEh/dcDXsbgSBIlLrRogXrJlO5/CrVx/a2ZFA81fDh9aXbtov/PTz/14sUMglQBycrKkgBIWVlZ+g2isFCS7rlHkgBJqltXks6dc/sSjzxCp0+ZUsZBa9bQQUFBkpSR4elo3aZDB3rZpUs1e0nnDBhAA4mPl6S8vFIP++9/6bCuXYs9UVAgSffdR09Wry5Jhw+79fInTtCpfn5lvrxzli2jk2vWlKTcXDdPVpZLl2gogCRlZ2v3utnZ8uvq+XMVTJ9OYxkyROMXHj+eXnjAALdOi42l05KTVRrX8uWSFBkp/ye1bi1JY8dKhwa9JgGSFIwrUiEgSTExkrRpk0qDKJ+CAkny9aUhnjyp8YuvXUsvXKWKJF2+7Pbpx4/T6f7+kpSf7+EYCgsl6eWXi/6fCm9OlCqFFEiAJB04YHdcerok3X67/P+5eLGHL6ge7ty/2YKjF6JwVoMGtDwdNsztcq0uuaiE9ebRR532rFEL3S04glmzyDW3bVuZxfOEBScurtgTkydT1oe/P7kWXSpxLFOrFp2an+9BLETv3rT0PHOGYrd0RIy9cmXPOxl7QpUqcqNsI8Th6GLB8cA9JVAlDseeO+6ghpwiJTolBXj/faR99QcAIBZpsI0eTS6P9u1VGkT5+PjoGIdzyy0UmnDpkketG44coW29eiVqibqGJFF9LWF5nj4dtnVrEVefbv8OJSyioqhZsGidMWSIg2XObLDA0ZOwMPrCBwbSDUy4rVykXIGzfTuwahX9Kp5/3ruxuonumVSCWrWAd9+l/QkTShUKTgXOtGlyQbKPP5YLd7mBr68ci+y2m8rPj2JxAApq1hE94m8ERnJT6SJw9uyhNOOgIIplcQPx/6WawAGA8HDqCp6RQZmFI0fieK8nAQCxnWOB//xHW1VcCrrNSTabXO/HAzeVmDdKLL5c5aWX5HvLhx9SGQofn6LrlajR5eNDyRS9epF7vn9/zZpHKw0LHL1p3VruQTRxIvDHHy6dJknldBKXJLoeQJH8Hv86PMMwFhyAJpfBgylN/r77gHXrShziIHAkidJYJ0ygB19/3auCZB7H4QC0ggKAlSt17TKuR/yNoMILHCHKu3d3u2eT+P9SLFW8LCIjaa756COkdaLsodimIRq8sGvouugaNoyEwx9/yPUoXETMTR6FLs2bJ4ub2bMdmpqWOS/5+ZFobdKEvjxiLjQZLHCMwOOP042soIAmCBeKAF64UEYjO4AmxZUrqd79pEnKjtcFdG3XUBybjVZO/fpRtke/ftRewS5ts0jgBKXTKlkEKL/zDnUJ9wKvBE6LFlS0IjeXsk90Qk+BY6RaOLoKHBeDi+1R3UVVCqVWMdYRXeek2rWB22+n/blz3Tq1VPd5eWzYIAuaN9+UmxHD8XqlVlmvWlUONP70U4+TYfSEBY4RsNko7bJ5c5pBXSgCKKw3NWs6qcdx/TowZgztjxunXPlLN9C1XYMz/P0pLb9rV/KFDx1KLqfPP0fen5tw4gSJnbghNwO//ELCcP58ynLzEq8Ejs0mx10o0NPGU/Qo8icwUi0czQXO2bOUgQS47Z4CWODYo7vbXIiNefPkEvQu4JGL6tQpaviZl0cZoOPHlzikXIEDUGHYoUNpMfj0027HieoNCxyjUKkSFZKrUYOKAJYTdFxm/M1771FkWnS07KbSGEO5qATBwZSmOm0aEBJCtR8efhhpiQ+hsNCGQFxH1PWjJHx27SLLmgJ47WIRaaY6uqnYRUW6WHT+0EzgrFxJ80CrVi42nHNEb4FTVMXYAOgucG6/nYocXr4s1xFyAbddVDk5JGoyMsgC/NlntFAqhssLr+nTKYZqyxbdYwHdhQWOkWjQgDJ1/P1ptV6Ga6lUgbNpE8WMAOR7ddNnrxS6TyalERBA8TWpqWTl6tYNR8Mpu6Ne1YvwWfYjsGaN3KxFAbyy4ACGcFNxkLFsvalcWcOflRfuKUD+/3K5m70CSJKxLTi6Lbrs+8z95z9OiyMWJydHtp66bMEZPRpITiYX0w8/lPplFdc7c6acln1RUfK96M03KSXUJLDAMRq33CJ3/f6//6M0ZSclvp0KnIwMavCWm0vltx98UO3Rloqw4Fy54la/S+2IjaVMgdWrcXQqdWiO6xhF8TlOVjveIAROWhqFWbmNAdxURojBSU/Xt4q85u6pvDyy4AAeCxwRn5edTX9acPas7GF3Gh+oE4ZYdD3wAE3ap08DX3xR7uEnTtD0HxJC4QjlMm8e/dls1DesYcNSDw0Lk0swlLv4euopypY7coQappoEFjhG5JFH5PTk118HnnmmhLuqhMC5coXMkqdOAc2a0Y9H4Ru1O1SuTD9KwGBuKid4HMTnItHRlJTgUS0cgb2bSqs71b9Ikr4CJyKC4swkSVtLRHE0FzgbNpBLMjzc4xoyVarQjQzQ7rMT1puoKM07MpSJIQSOvz/FRQKUwFDOisfePVXudJ6cLMf5/N//UR2tcnDZuhwSQvchgOrpeNFXS0tY4BiVV16hInU2G5XXvucehyhLB4Fz6BDQsSPw119UGnzpUt3rThiiXYOLiEnEzRp+LuNVLRxBixbUiCY3l+KINCQrS7ama95BG/RdMkImleYCR7in+vTxsMIbIRZBYs5QGyO6pwD5u3vpkkv9d9Xj8cfJdPL333IT5FJwOcA4PV0OKr7nHqdBxc5wKdBYMGoUCZ2UFCApyaXr6w0LHCMzahTw1Ve0/P/hB7rBvfQSsGkTThwjP2jMyvnUN2TPHvoF//KLovEj3mCIFZMLqG3BARSIw7HZyH0GaB6HI27sVatq0srMKUaIw9FN4HjonhLoJXCMFGAM0JpP9ybAAJm333iD9idOpAZZpeBSgHFuLlnv09MpE7eUoGJnuCVwatQAnniC9kUZDYPDAsfoPPggpYl26UIRZzNmoKBjJ5w4Ti6r2C+m0BK7UydqR9Cpk84DljGbBcfQAgeQBc6KFR4G83iGEKh6WG8EFc6Ck5YG7N9PlpsePby6lNYCR/wfGc2CY7MZaNE1YgRlxp0/X2ama7lzkyRRUPGGDeSL/OEHt6z3bs9L48ZRwcLff5dbnBsYTQTO7NmzERcXh6CgIMTHx2P9+vVlHr9u3TrEx8cjKCgI9evXx1wnhZG+//57NG/eHIGBgWjevDmWLl2q1vD1Jz6eMnuWLwe6dUN61E3IQwD8kIfad7YDvvySntcjQKIMDDOZlMHVq0BmJu0bXuB07kym7XPnyN+uEUYQOBXOgiNcAO3bk+nMC0Sgb0V3UQEGmpP8/OQK9vPm0eLUCWK+KNWC89ZblJQigordrHnmlgUHILXcpw/tm6DbuOoCZ9GiRRgzZgwmTpyIHTt2IDExEb1790ZaKVW7jh49ij59+iAxMRE7duzAhAkTMHr0aHxvF7mdnJyMgQMHYsiQIdi5cyeGDBmC+++/H5s2bVL77eiHzUam6tWrcex/WwAAsXF+8P3he2DQIEp/NhhmsOCIr6F9U0c1UOQG7ecnBw5q6KYyksDRs9ifLgLHS+sNIFtwtA4yZoFTDrfcAjz0EFlhHnyQytMXo0wLziefyC0U3n1XFh5u4LbAAYDHHqPtwoUU82NgVBc47733Hh577DE8/vjjaNasGWbOnImYmBjMKaXQ0dy5cxEbG4uZM2eiWbNmePzxx/Hoo4/inXfeKTpm5syZ6NGjB8aPH4+mTZti/Pjx6N69O2bOnKn22ymTs2fp/9zNStxuU6Tq4/TLknIFQ7VrKAWtJmPFbjI6xOHo0p6gGBXKglNYCKxeTfsKChy24BigFk5x3n+fPqi//6ZMSTvBcO2aPM4SAueLL4AnqaEpxo8Hxo716OXF7yory43iyn370uSemUmdxw2MqgInNzcX27ZtQ8+ePR0e79mzJzZs2OD0nOTk5BLH9+rVC1u3bkXev//5pR1T2jVzcnKQnZ3t8KcG6emU4a128eByzZYGwXCTiRPK7ciuEPZuAq8yLHv1oriM1FTqMK0BRrPg6FEt/vp1eYGtusBJSaHVUpUqQIcOXl/OXuCond17/br8ezdakDFgMAsOQDUQli+nSvarVwMjRxYV0hPzfGionZeysJAybEWl+8cfp+J7HlKpEg0BcMOK4+9Prw+QFcnAqCpwzp49i4KCAkSKpfy/REZGIqOUb1hGRobT4/Pz83H27NkyjyntmtOmTUNYWFjRX4xKdzPxgz5/Xt3idl51l9UQtuDICIFz9apbbWhKUq0akJhI+xpZcYwgcGrXptjG3Fw5ZkpLxGcQGKiuKxOA7J7q2pVuJl4ivntXrnj53XMBsWAICQGqV1f3tTzBcAIHoGDjr7+mMIRPPqGEkmPHHNxTNhsoU7ZvX1nQvPyyHH/jBeI+4pZ1VLipfvlFo1b1nqFJkLGt2H+AJEklHivv+OKPu3PN8ePHIysrq+jvhEq22tBQuaiWmrECZrTgGLUulFYWnOBgyrK0f02PEW4qUeVWZYwgcPz95Rh6PdxUwj0VFaVB/UwF428AEhuKfffKwT6DSsc6o6ViSIEDAP37A998QzeRDRuAG27A8YnzAAB1r++nyvStWtFv3t8fWLCAeur5eH8L98iF2bgxLbQKC2ncBkVVgRMeHg5fX98SlpXMzMwSFhhBVFSU0+P9/PxQ499faWnHlHbNwMBAhIaGOvyphRbBkB51l9UB8d9x7ZpB2zVA/lFrES+gWBxOr160Xbeu3K7zSmB/c9cT8X+kR6Cx+AxUT1S8dg3480/aV0jgALIVR+1AY6MvvgxtVR44kNyTnToBly8jLYXq48QeSAJ+/JFWiffdB+zeTbEQCuFxjJZoBbRokWJjURpVBU5AQADi4+ORVKzqYVJSEjqVUq8lISGhxPGrVq1C27Zt4f+vuba0Y0q7ppaoXa+joECe4I06iQgqVZL7vBlyQoH8WaptwQEUvMk0b04+m+vX5ZuhSuTlUTgIoG+QMWAMgaP6Z7B+PdW7qlNH0YKdWgUaa1FTyhvsLTiGtCrHxdF3YMMGnLiRCjzGtI0EZswAtm8HvvtO8UKuHn837rmHLEhbt2oWD+guqruoxo0bh08++QQLFixAamoqxo4di7S0NIwYMQIAuY+GDh1adPyIESNw/PhxjBs3DqmpqViwYAE+/fRTPP/880XHPPvss1i1ahWmT5+O/fv3Y/r06fjtt98wZswYtd9Ouaid7XHqFMWg+fvrf8NxBSOnikuSthYcxeqR2GyACLJXuW2DiHfx9ZXdHHqhZyaVZgLH3j2loI9HK4FjdOuymI9yc9WPR/IYHx8gIQEnwm4AAMSMux944QWgTRtVXk58N9xeOEREAN260f533yk6JqVQXeAMHDgQM2fOxBtvvIHWrVvjjz/+wIoVK1D339kqPT3doSZOXFwcVqxYgbVr16J169aYMmUKPvjgA9xzzz1Fx3Tq1AnffvstPvvsM7Rq1QoLFy7EokWL0EGBjANvEVYVt+oKuIG4bmysV+1pNMOwPm9QvTwtux4rWo9EI4Ej/t8iIxVx93tFhbDgKBx/I9DagmNU63JwsBwnacQ5yR6t4gPF78qj78bAgbQ1qMDx0+JFRo4ciZEjRzp9buHChSUe69KlC7Zv317mNe+9917ce++9SgxPUTwqnOQGRvdxF8fIFhzxg46I0KbrsaIVZW+7jVb4e/aQWU+l4BCjxN8AFcCCc/o0sHMn7Xfvruil2UUlExVFdV8yMoBmzfQejXMKC+WFkNoCR1z/1CkKgXBr4TxgAPDUUxQ7dPAgBR8bCO5FpTAscBwxsgVH64JkilpwwsOphQcArFqlwAWdI/7fjOAOtbwFRxT3a91aLk6iEFoEGV+7Jn9fjDw/GXlOEmRmUvybzaZ+YHtkJBVJLyiQv+cuU726bG00YLAxCxyFqV+ftpmZVHdCacwmcMxgwdEiwBhQsNifQGRTaSBwjGDBEQJH7TpTztBE4KjkngK0KfYnLGuVK+sfr1UWRp6TBGJuqlVLkVJIZeLrSzkL9q/rFsJNtXixYmNSChY4ClO1qlx10qvGiqVgVoFjxNWS1hYcMYl4XexPIOJwkpJUK+9rJIETFqZNnani5OfLwdaqCRxJUlXgCHF9/TrFnqmB/dxkxBo4AjNYcLRefHkcaAxQXS5fX2DXLvVcFx7CAkcF1HRTmU3gGLldg9aTiH3BNUVcBQkJtFw+exbYsUOBC5bESDE4gD5uqsxM0h++vkDNmiq9yP79VBE2MBC4+WbFLx8YKC821IphMkP8DWAOC45W8TcCr2K0qleXq6svW6bYmJSABY4KqCVw8vPlid3ok4iALTiOKBpo7O8vp2mqlE1lpBgcQJ9AYyHyVM0kE27GxERK9VEBMWeoYVm2v67R5ya24JTEq0wqgCoxA1SQ0ECwwFEBtQTOP/9QIJhZauAAxm7XoPUkYv9aigV7qhyHYyQXFaCPBcfs8TcCrUpYGN26zAKnJF5n2d15J23/+IOC5AwCCxwVEALnyBFlrytWSHXr6l+TxFWEBScnB1CpibtH5OfLPeJMa8EB5Dicv/4CLl1S6KKEJBlX4GhpwRFiVLVaSbm5wNq1tK+iwFHbgsMuKuUwncCpXx9o2ZJW4CtWKDYubzHJbdJcqGXBEdcTZnozEBxM/eMAY62Y0tMpLtfPT57wtEDxdN2GDWlyyc+Xb5IKcekSBUQDxhE4WvR6K47qAmfjRkq5rFkTuPFGlV5Etqyo7aIyiwUnM1O12HyvMVWQsUBYcQzkpmKBowL2AkdJt8yhQ7Rt2FC5a2qBEVdM4odcp462FaFVKbimUlVjIUirVKG+YkZADxeV6gJHuKduu01V06yayQ+XL8s9y4xuwRElhgoK1Mso84aCAiq6B2gvcDIzydruEULgrFzpxUWUhQWOCogVzKVLyroj//6bto0aKXdNLTCiz1uP+BtApYJrKsXhGM09BcgWnJMnyWilBZoJHBXdU4CjBUfpeDhhvalWTU7lNyr+/nI2o5HmJEF6OokcLa3LNWoAQUG07/HcFB9PVQkvXwbWrFFsbN7AAkcFgoPlgEQlV0sHD9LWYNWwy8WIFhwtm2zaYx9krNhN5tZbyQz199+KfuGMKHCioryouuohqgqcCxeALVtoX2WBExtL9WmuXgXOnFH22mYJMBYYcdElEHNT7draWZdtNgUyqXx8gL59aX/+fEXG5S0scFRCaXOwJMkWHLMJHCNOJsLFobUFRxT7u3JFwW7GYWFUEwdQ1IpjRIHj6ysLDS0CjSVJZYGzZg0FgjRtqnrH18BAuey/0nE4ZgkwFnB9rpIo4j4XE9ySJYZIm2WBoxJKC5z0dLop+viYZxIRsAVHJiSE6mIBchaXIqgQh6NZB2030bIWzsWLcssVMXcrikbuKYFacThmCTAWGLk+l6kFzogR8r4Biv6xwFEJpScS4Z6KiwMCApS5plawBccRsYpWVOCIOJzVqxULTjGiBQeQb6JaCBxhvalRQ6X6exoLHLUyqdiCoxx6CxyvAvjtg4aeftqr8SgBCxyVULoWjlkDjAFjW3D0EDjCEqCowImPpwjP7Gw5psNLjC5w1Ep3tkdV99TRo8DhwxRU1LWrCi9QErUsOIcP01Y0GzY6bMEpiWJFSO0zAXSGBY5KNGhAW5Ha7S1mDTAGjDeZXL0qp7Rq7aICVBI4vr5y2wZhFfASowoctQvW2aOqwBH/Tx07Ui6+BqghDgsLzRcfaESrskAvgaPYvDRrlryvVSZAKbDAUYkmTWh77JgyJQHMNoHYY19YywBxZ0U3rUqV5M7vWqKKwAHkOByFAo2NGoOjdssBezQROBq5pwB1LDgnT1KXcj8/88TgsIuqJIqVsBCZVAAwYYKXF/MOFjgqERlJFXwLC5Wx4ggLjhldVKKwVm6ugplDXmDfZNNm0/71VRM44ka5caPXfTEKCuRUYqNZcOxjcNSuRKtaV+eCAoqXAjQVOGp8dmJuatCARI4ZMJpVWZCbK4suvSw4Z8+SYPUY+0l14UJvhuQ1LHBUwmajzE8A2L/fu2sVFMg+bjNacIKCZEuJESYUPeNvABUFTlwclbkuKPC6bcOZM3QD9PGhDgK6cvQo8OWXwOjRwNixqP3nIvj6SsjLU98CrpoFZ/t2qoETGgq0a6fwxUsnJoa8mTk5ylkvzOg+F6L97FntCka6wj//kJU7MBAID9f2tatXl4v9iUrKHvPaa16PRwlY4KiIcFMdOODdddLSSNkHBOh3U/YWIwUa21tw9EA1gQPI1gAv3VRCiNasqW0rCweysoDHHqPI1SFDgA8/BGbOhN/gBxBTcAwAcCz1mqpDUE3grFxJ29tu09Ts4ecnvxelMzzNJHDCw0m8S5LyRQ+9QSy+6tTR3rpssyk4N02eTNabbdu8vJB3sMBREaUsOGICadhQx5uNlxgpqM8oFpzMTBKuiiIEjpeBxsIyopt76vffqTvxggU083bsCIwZAzzzDBAfj3o4BgA49tAEYPNm1YahusAR6f0aolYJCzMJHF9f2TJphDlJoPfcpFgcjs0GDBsG3HST12PyBpN4TM2JUhYcMwcYC9iCIxMeTv1whItF0e7wom3DwYMUaOHhxcWkr0uA8dq1QO/epP4aNAA++wxITHQ4pF6Pk8BvwLEzISTqVq8G2rZVdBjZ2XIok6JF/i5coDgpQBeB07AhfcRCmHiLGQUOQOL99GljzEkCvQWOqtZlHWALjorYW3C8yR4yc4CxgC04Mj4+KhX7AyjYqX172vfCiqNbiviuXdSVODcXuOsuYOfOEuIGAOrdTEvNY1EdSYX07EnHKohYxVatClSurOCFV6+mAKdmzRRWt66h1MILoP8mYQkyo8ABjDEnCfSem1RpBqwjLHBUpGFDupllZ3u3SjDrCskeo1hwJEm/Ng32qLpSUqBtgy4CJy0NuP12+sHccgvwzTeUy++EonouzXoDHTqQVaR3b7nAkQJY0T0FyAJHCQvO0aOk1SpVMl45gfIwYiaV3gKHLTiMywQGyhOxN3E4Zq5iLDDKaunCBbm3kMq9DctE1Ynk9ttp+9tvHqeIaB6DU1hIgcTp6RR78+OPckqHE4oEzgk/EgxNm9K5jz6qWLElVQSOJMnCU/w/aYxYKB086P1HZb/40qPkgjcYsRaO3gKHLTiMWwg3lafm4NxcueooW3C8R0wgNWuq1FvIRVQVOO3aUduGixeBTZs8uoTmMThz5wJ//EGmgGXLyq3AKAJljx8HCkOrAt9+S2mGy5cDH32kyJBUETj79tGFg4LISqUD9etTNtWVK95//8xsXWYLTknYgsO4hbf+7tRUWtyGhRmv4Jo7GGUy0bPJpj2qTiS+vrKbSrhD3ERTF9WxY8CLL9L+W2+51LExOppu0kW1cG68EXj7bXry+efph+MlqggcYb3p0kU3he3vL/eM8jYOx8wCxyhWZcHVq8C5c7SvtwXn1Ckqp2V2WOCojLep4tu307ZNG/OZgO2xb9egdvXZsjBC/A2gwUqpd2/a/vKLR6drJnAkCXjiCTIn3HwzMHKkS6f5+ck3gaK+Ss88Q+87J4c6GXvpf1FF4Ij/D53cUwIhSJQSOGZ0nxvNRaV3CxmAFqI+PiRuMjP1GYOSsMBRGW8tODt20FbncgJeI9o15OdTHIxeVAgLDiAHsG7b5vZMdeUKcOkS7asucL75hrK9goKATz+l2dVFSjSOtNmA2bPpWr//Dnz3nVdDE98VxQROVhawbh3t9+mj0EU9Q6lAYzNbcIxiVRbYu6f0Wsz6+cluaSvE4bDAURlhwTl61LP+HvYWHDMTEEClwAF9G8zq7eMW2AscVRqQRkXJXxo3s6nEhB8SonKT65wcYOJE2p840e27pNPO2PXqyQ3+xo2TlZqbSJKc/uyCx8w1fv2VfGpNmuiuCJRIFb98WS7pb2YLzoULyjRE9hYjzk1mhwWOykREADVq0IS5Z4975xYWAikptG92Cw4grwz0FDh6F/kTiDo416+raNESbhA343Ds3VOqriQ//pjUSa1awNixbp9ealfxF16gAoGnTgFTpng0tDNnKCbCZlOwVM3y5bTt10+hC3qOEi4qkd0ZHi4vXsxEtWoUjwQYwx1jFIFjpUwqFjgqY7MB8fG0v3Wre+f+/Te5C4KD5RWXmTGCwDHKJBIcLN8UvG5sVxpC4Pz6q1sRg5rE32Rny+Jj0qRS692URYMGtBWNaIsICgJmzqT9Dz6QVa0bCNEUHU3lHrwmPx9YsYL2+/dX4ILeIeaTY8c87xxtZvcUQN5Q4To3gpvKKHMTW3AYtxAV5N3tOybib2680bw9qOzRW+AUFMirEr0tOIAGE0lCAnWrPnfOrS+fJjVw3n2XivI1bky1azygYUPaHjrk5Mm+fSlTKSeHGv+5ieLuqQ0bgPPnSdUmJCh0Uc+JjKSvhiQ5EYgusncvbc28+DJSoLFRBI6w4LDAYVxCCBx3LThWib8R6C1wMjJI5Pj6GqPqquoCx9+fulUDsvXABVSvgXP6NAkcAHjzTdlP4CbCgnPyJHCteFNxm41SzgHg88+p/owbKC5whHuqb19Nu4eXhs3mfRyOmJ/M7D43Uqq4UQSOmJfYRcW4hHBR7dnjnjnYKhlUAr0FjvBU1K5tDIuYJqbgO+6g7Y8/unyK6i6qd98l32u7dsA993h8mRo1qD4UUEpn7I4dgbvvpmA2EXjsIiJwWTGBs2wZbQ0QfyPwNg5HzE9mXoAZpQApYByBwxYcxi1iYqhybn4+9RJ0BUmyxgrJHr0FjlEmEIFqDTftueMOCjZISaGyvy6gqsA5fx6YM4f2J03yKorZZpOtOE7dVABZiHx8SOCJDt4uIASTCGT2igMHKGDF31+3/lPOEBYcT2p0ZWRQ7JjNRi50s2IUC86lS3Lner3nJ3sLjioZnhrCAkcDPAk0PnGC7gV+fkCLFuqNTUv0FjhGyaASaGLBqVkT6NyZ9oUVoRxUFTizZlF+catWitSCKTMOB6CO3cOG0f6kSS5fV1EXlajH0707Bb4YhBtuoK3I1HQHYb1p0kThTusaY5RaOGLxpXjneg8Q89LVq1S6ycywwNEIdwONhfWmZUuFsjgMgN4Cx2gWHM2yFe68k7Y//ODS4eL/R/EYnMuXgf/8h/YnTFAkB73UTCp7Xn2VVgqrVgF//lnuNQsKZGOXIgJn0SLaDhyowMWUQ1iG9+51EsNUDlaxLhslyFjMTXo2ABbYZ3iaPQ6HBY5GuGvBsYJ/uzjihmlfKVdLjNKmQaC5wFm3rtyiO4WF8mSvuAXn44/JLNmoEXDvvYpcslwLDkAqRWRqvfZaudc8dYrq8fn5KXDD2buX/vz9gbvu8vJiyhITQzVsCgqA3bvdO9cq85NRXFRGW3xZJQ6HBY5GCAuOq6slq6yQ7KlcWTa/6mHFMUqbBoEQOJmZ1DVeNRo2JD9nQUG52VTnzsklc0SNEEW4fl3OnHr5ZcWivF0SOABVSg4IANasob8yEO6p2FgFhincU7166ddgqBTsXefulrCwyvxkNBeV0eYmtuAwLlG7Nv2YCgqAnTvLPlaS5AnH7BNIcfR0UxnNghMeLmdIq/55CCtOOdlUYqK3H5sifP45vck6dYDBgxW7rHBRHT9OVpdSiY0Fhg+n/UmTyoyeVCz+RpIM654SeCJwLlyQPyOrWHAuXaKYE70QQsJoAoctOGVw4cIFDBkyBGFhYQgLC8OQIUNw8eLFMs+RJAmTJ09GdHQ0goOD0bVrV+wVFaUAnD9/Hs888wyaNGmCkJAQxMbGYvTo0cgyeDSU/WqpvGSO3bvpXhAUBLRurfrQNEUIHNWq95bC9etyOXajTCI+PhplUgGye+SXX8psvKNK/E1+PjB9Ou2/8AJZUhSiVi2KGbCPmymV8eMpoG39euC330o9TDGBs2sXZVAFBhqierEzPBE4wj0VF0ftDsxMaCjNs4C+cThGs+BYpV2DqgLnoYceQkpKClauXImVK1ciJSUFQ4YMKfOcGTNm4L333sOsWbOwZcsWREVFoUePHrj0b9DGqVOncOrUKbzzzjvYvXs3Fi5ciJUrV+Kxxx5T860oQrdutBU1v0pjyRLa9upFDQ+thF4WHPFDDQkxVt8czVZK8fGkpi5fBlavLvUwVTKoFi0i1RAeDjz+uIIXJpFYvz7tl1uRt3ZtYMQI2n/ttVKtOIoJnG+/pW3v3obKnrJHWIj37HG94aRV4m8AWngaoRaOkYKMAbbglEtqaipWrlyJTz75BAkJCUhISMD8+fPx008/4UAplaUkScLMmTMxceJEDBgwAC1btsTnn3+Oq1ev4uuvvwYAtGzZEt9//z369euHBg0aoFu3bnjzzTexfPly5Ofnq/V2FEEsoteto1jL0hACZ8AA1YekOcJiobXAsY+/UbWBpJtoNpH4+MhfQOE2cYLiAqewEJg2jfbHjlVFsbschwNQ/E9wMJlRS2lCKor8eVUDJy8PWLiQ9gcN8uJC6lK3Lgn+/HzXA42tEn8j0DvQWJLYgqMWqgmc5ORkhIWFoUOHDkWPdezYEWFhYdiwYYPTc44ePYqMjAz07Nmz6LHAwEB06dKl1HMAICsrC6GhofArpQR6Tk4OsrOzHf70oEEDqj1RUAD8/LPzYw4doonGz08uQmsl9LLgGG0CEWi6UhI32iVLSg04UFzgLFtGkfWhocDIkQpd1JFyi/3ZExUFjBpF+6VYcRSx4Pz8M32YNWsa1j0FeBZozAJHWbKyKLMUYAuO0qgmcDIyMhDhJA0jIiICGaV8k8TjkcJm+C+RkZGlnnPu3DlMmTIFTz75ZKljmTZtWlEcUFhYGGJ0vMuJRfTSpc6fF4937WosV4pS6CVwjFbkT6DpRJKQQHfty5dLLfqnaKNNSQKmTqX9UaNUyyISFhyXm0a++CJ1L9+6tYS/ODdXXrV6JXDmz6ftI48oGnOkBu4InMuX5dYOVhE4eruoxOKrRg3jhCQIoXXunPs1koyE2wJn8uTJsNlsZf5t/bfYi82JL0CSJKeP21P8+dLOyc7ORt++fdG8eXNMKqNK6fjx45GVlVX0d0J8o3Tg7rtpu3Kl80W0ld1TAFtwiqOpwLHZZCvOl186PUTRRpurVwNbtpBLaMwYBS7oHLdcVABZVZ55hvYnTCD/zL+kpZEuCw6Wb3xuc+KE7P5SOOZIDdwROLt20edTq5YXn4/B0NuCY8S5qWpV+g0A2ieEKInbAufpp59GampqmX8tW7ZEVFQUTjuRxGfOnClhoRFE/ftNK26tyczMLHHOpUuXcPvtt6Ny5cpYunQp/MvIaQ0MDERoaKjDn160bk1+72vXgKQkx+f++YdCA2w2w9UEUwy24DiiuSlYCJyVK4EzZ0o8raiLSlhvhg9XuKiOI40a0fbQIQetUjYvvkgpQHv3AgsWFD1s34PK41itBQso9qhrV3lwBkZYYnbvLj9VWiSftW+v7pi0RO9aOEYLMAbou2+FOBy3BU54eDiaNm1a5l9QUBASEhKQlZWFzZs3F527adMmZGVloVOnTk6vHRcXh6ioKCTZ3flzc3Oxbt06h3Oys7PRs2dPBAQEYNmyZQgSeX4mwF68FK+cL/6dkKBCmXyDIN7XxYvamj6NuEoCHAWOJo3tmjalJXtBgVyEzg7FBE5yMhXU8/MDnn/ey4uVTWwsmfbz8txwU1WrJvemevXVotLaXsff5OYCn3xC+0884eFFtCUujhZdeXklF13FERZmUVbJCnALGedYIQ5HtRicZs2a4fbbb8fw4cOxceNGbNy4EcOHD8cdd9yBJqKNLYCmTZti6b+BJzabDWPGjMHUqVOxdOlS7NmzBw8//DBCQkLw0EMPASDLTc+ePXHlyhV8+umnyM7ORkZGBjIyMlAgSrAaHOGm+vZbsuADdLP/7DPat6p7CiDTp+itpdWKSZKMa8ERWWXXr5fbRUE5RKG9Ym6qa9dIeAIKCByROTV0qOozt48P9dQEyCDjMk89Rf6tzMyiOj1//01PidRzt/n8c1ry1qplmh+yzSbHQZdVB/LIESpS6usL9Ounzdi0QK/MToHRivwJrGDBgaQi586dkwYNGiRVqVJFqlKlijRo0CDpwoULDscAkD777LOifxcWFkqTJk2SoqKipMDAQOmWW26Rdu/eXfT8mjVrJABO/44ePerSuLKysiQAUlZWlgLv0n0KCyXpjjskCZCkWrUkad8+SerShf4dEiJJaWm6DEsz6tWj9/rXX9q83oUL9HqAJF25os1rukP16jS2Xbs0esH0dEny8aEX3b+/6OGjR+mhwED6jnrMzp10IZtNkg4c8Hq4rjBkCL3klClunrhkCZ0YFCRJaWlS7970zzlzPBhEXp4kxcXRBd5/34ML6Mdvv9Gwa9aUpPx858e88w4d062btmNTm+PH6X35+3v5vfeQbt3o9f/7X+1fuyxeeonGNXq03iNxxJ37t6oCx6joLXBoDJLUsiV9gXx9aVuliiT98YduQ9KMhAR6v4sXa/N64n5bvbo2r+cuN9xA41u5UsMX7dePXnTUqKKHkpPpobp1vbz23XfThe6/38sLuc5bb9FLPvigmycWFkpSYiKdfO+9Umws7Xr0O/z8c1klGFFJl0FuriRVrUrDX7/e+TGdOtHzs2ZpOza1ycmRF0Bnzmj/+o0a0WuvXav9a5fFhx/SuAYM0Hskjrhz/+ZeVDoRGkoZqjVrUjhEjRoUspCYqPfI1Edr364o4V+3rjav5y66+LpFVtNnnxX5xhSJv9m8mWod+PjIMS4a0Lw5bd1yUQHkn/nPfwBfX1xavLLIlSmu5zIFBXJQ9XPPGSff10X8/YG+fWnfmZsqPR0QpcislgAREEBFtgHtM4bsi/wZKcgY4Bgcxkvq1QNWraL6Z3/+KadrWh2tfzjipsUCx45bbwVatqS0mU8/BaBQDZzx42k7dKgHKsFzWrSg7YEDbmRSCdq0AV55BamgQJ7ImgWoUcPNa3z0Eb14tWoU22NC7PuxFg94FwkQHTvK31croVeg8blzFH8HGE/gWCEGhwWOzrRuTXNj06Z6j0Q7tP7hsAXHCTabbMX58EMgP9/7Gji//Qb8/jstiSdPVmCQrlO3LtXtyMmRM6HcYuJE7K3bBwDQonC3eyltx45RPR0AePNNw/adKo/bb6f/ur//Bvbvd3zO6vW5RKCx1hYcMQdGRMjJF0ZBzEsZGR4sGgwCCxxGc9hF5YhupuCHHiLbfFoa8OOP3rmoCgqozxNAFgyNP2xfX3mR4LabCgD8/bG369MAgBbn/iDR5wqSBDz5JNXaT0ykfZNSpYrcEPitt2SNl5FB7nNAzgC1GlyAtCSRkfS7KijQtxGpN7DAYTRH3NC1suAYNUVcoJvACQ6Wu2tPnYqMdLqjeSRw5s2jUrhVqsjWDI0Rbqp9+zw7f+9pCsRogb1k3frii/JPeu898jMHBlL9Gx9zT6kvvkhv4YsvSOP98w/QvTvd5G66Sa4abTX0suAYWeD4+srCz6xxOOb+NTKmRLiotCpuxxacMnjmGRIl27cjfc85AB4InIwMOfZm6lRVqxaXhQj58Vjg/Gv5aTGgKX0xH3mkzM7r+OgjuYjhtGlA48aevbCBuPVW4O23aX/cOKpYvG8ffUf/+199x6YmeltwjBZ/IzB7HA4LHEZz7IvbnT+v7mvl5MiTllEFjvg8MjOpEK6mRERQJV8AGcdzAHggcMaNo5bIbdvqGmDrjcDJzpZvNs0/fpZ6SBUWUmuLUaMcbfTnz5Oge5pcWhg/XtVeW1ozdizFiBcUkEWjUSPgr780jRnXHL1jcIxowQHMn0nlp/cAmIpHUBCFfpw9Sz8ctzNW3EDctIKD5VRQoxEeTmm6eXkkxjQXYqNHo3DuPGQcqQlAnuxdYskS4JtvyK/x8cdk19YJ4aJKTaWbsztDSU2lbVQUUD3cB5g7l6w4n34KzJ5NPpv27ckV9eefRa0d8PzzFFjsceMq42Gz0X/l1asUWvTZZ9ZprFkaeltwjCpw2ILDMB6gVRyOffyNUe9BPj6yqNBlpRQYiHOv/Qd5CAAARJ7Z49p5+/cDw4bR/nPPyV0bdSIujsTz9euU2OQORe6pf0USfH0ppmbNGrJMXb5MGWK//ELiplUrYPFiYMYM436xvCAoCPjf/4AVK6wvbgDHdg2a9IT7F6MLHLbgMIwH1KlDfW3U/uEYPf5GULs2jVWviSS9dW8AQDjOIODuvlSwr6w7W3Y2VXy7fBno0oWsGDojMqlSUoBdu4AGDVw/t4TAEXTtCmzaBKxbR3e/69fpP6tHD9MHFDMywi2bm0seSDWtyoLCQuO7qOzjJc0ICxxGF7RaGZhJ4AA6CpwMskJEB5wjs9ddd5H1Iiio5MEZGVQV7sABmgG/+458bAagXTsSOJs2uZfSXKrAAUjI3HqrEsNjDEpgIImac+coDkcLgXPmDAkqm81Nt7CGaJ3xqjS8BGF0QSvfLgsc1xDBlbXax1A13o0bqWzt1q3yQZJE0aYdOpCFp3p1KnGrU9aUMzp2pO2mTe6dV6bAYSoEWsfhiLkvKsow64MSaJ3xqjQscBhd0OqGbvQaOAK9BY6Y1Gs1rES9pKpXJx9ihw5UCOXhh6ns9s0304fauDGpCIP1F+nQgbZbtrhefTU7W77ZsMCpuGidSWX0+BtA/kyuXStqWWcqWOAwusAWHEcMI3BqgWJqUlOBBx+kQIHffwc+/5wCW4KCKLA4OdmQVd+aNaNOCVeuuF7RWKSVR0cDVauqNjTG4GhtwTGDwBEZr4A543A4BofRBS1u6IWF8iTCAqdsxKq1KBYgIgL4+mtKg96zR87nv+8+cmEZFB8fyub+7Tfyst14Y/nn7NpFWyvXeWHKhy04zqldm0p6nDwJ3HCD3qNxDxY4jC4IC86FC1RvIyRE+dc4fZqC+Hx8jN8B2V7gSJL2mccOFhx7brpJ9/Rvd+nYURY4rrSGEn2WOnVSd1yMsdHLgmPUKsYCrTJe1YBdVIwuhIYClSrRvlo/HOGeql0b8DO4lLev7qyHr7tUgWNC3Ak0LiwEVq+m/dtuU29MjPHR2oJj9BRxgZkzqVjgMLpgs6kfh2OW+BuAKi1Xr077Wq+UJMmJi8rEtG9P29RU4OLFso/dvZvSdStVkgOUmYoJx+A4R2/3uTewwGF0Q+0fjpkEDqDfRHLhgtwDy6NO4gajZk25yN/mzWUf+9tvtO3SBQgIUHdcjLGxt+ConRJdUCD/zo0ucMzcroEFDqMbaps+RYq42QSO1g3/xIq1WjXndf3MiHBTbdxY9nFC4LB7iomOJstybi5Z9dTk9GkqY+Dra3y3MFtwGMYD1F4ZiH5ERq+BI9BrIrGSe0ogBM66daUfk5MD/PEH7bPAYQIC5O4kalsrxPVr1dK1P61LsAWHYTxACA9haVGaI0doW7++OtdXGr0EjpUCjAW9qbUW1q6lzhLO2LiRMvgiIoCWLTUbGmNgtLqZmyX+BpDnJZHxaiZY4DC6Ua8ebd3t/OwKhYWywHGn6aKesMBRjgYNyIpTWAgsWuT8GHv3lAUbgjMeIASOECBqYSaBExamfsarWrDAYXRDCJzjx5UP6ktPJxeEr685JhGAXVRK89BDtP3qK+fPc/wNUxwxV7AFR8ZmM28cDgscRjeEiyo7u/x0Xnc5fJi2desat5FdcdiCoywDB5LA3bIF+Ptvx+eysuQMq+7dtR8bY0zYReUcs8bhsMBhdCMkRG5ErbSbymzxN4AscDIz5bRtLbCqwImIAHr0oP3iVpwffiD3VePG5glCZ9RHqxu5uL7RqxgL2ILDMB5g76ZSEmHBMUv8DUBN7UQtFq2KjQGyi8pqAgdwdFMJN+ipU8C4cbQ/aJA+42KMCcfgOIctOAzjAaJGDVtwyNct4mC0WilJkiymrBaDAwB33UVVog8dAiZNogJrjzwCnD9PLbZeflnvETJGwj4GR61if3l58qLCLNZD8bmoLfyUhgUOoytqZVKZ0YIDaG8Kzs4Grl2jfStacKpUASZMoP0pU6gb8qpVVNDwyy+5ejHjiBD5OTnAuXPqvMaJE+QeDQqS6+4YHbVLeqgFCxxGV9RyUZnRggNob8ERK8nQUHU6uhuBV14BPvsMCAyk/lQA8M47QLNm+o6LMR6BgXJcoFrWiqNHaVuvnnnKE7DAYRgPUMNFdemSXGrdbAJHawuOld1T9jz8MLB+PdCmDfDYY8DIkXqPiDEqaqeKi7kuLk6d66uB+EzOnTNXsT8WOIyuqOGiEtabGjWoSJWZ0FrgWDnAuDjt2gHbtwOffGKelTOjPWoH1NpbcMxCWBi5ewFzxeGwwGF0RVhwLl6k2iRKYLYKxvZoLXDMlq7KMGqjVY88M1lwbDZzuqlY4DC6UrkyWVoA5eJwRICx2dxTgPYCR7wOCxyGIdROFTejBQdggcMwHqG0m8qsAcaAo8BRK03VHrbgMIwjasfgCIFjJgsOwAKHYTxC6Uwqs6aIA3Kw7/Xr1L1XbVjgMIwjarqorl+XA/vNZsERwo8FDsO4gdKZVGa24AQHA9Wr074WbioWOAzjiL3AUdqKKhZx9q55s8AWHIbxACVdVPn58nXMaMEBtIvDyc0FTp+mfRY4DEOI39+1a1TxWknE3GSmGjgCIXA4i4ph3EBJF9XJkyRyAgLMW9tFK4GTnk4r1IAA6oPFMAxVGK5Zk/aVvpmbNcAYcLTgaBEfqAQscBjdET/2I0e8/+GI+Ju4OMDX17tr6YUQOKJGjVoI91Tt2oAPzwQMU4S4mStdYd2MKeKC2rXJ6pSTIxdSNTo8rTG607Ah/XAuXADOnvXuWn//TVuzuqcA7Sw49gKHYRgZIUCExUUpzGzBCQgAoqJo3yxxOKoKnAsXLmDIkCEICwtDWFgYhgwZgosXL5Z5jiRJmDx5MqKjoxEcHIyuXbti7969pR7bu3dv2Gw2/PDDD8q/AUYTgoPlFdOBA95dS3xVmjf37jp6opXA4Ro4DOMctQSOmS04gPkCjVUVOA899BBSUlKwcuVKrFy5EikpKRgyZEiZ58yYMQPvvfceZs2ahS1btiAqKgo9evTApUuXShw7c+ZM2MwWqcU4pUkT2norcPbtoy0LnPLhDCqGcQ5bcJxjNoHjp9aFU1NTsXLlSmzcuBEdOnQAAMyfPx8JCQk4cOAAmog7mh2SJGHmzJmYOHEiBgwYAAD4/PPPERkZia+//hpPPvlk0bE7d+7Ee++9hy1btqBWOY10cnJykJOTU/Tv7OxsJd4ioyBNmgCrVilnwWnRwvsx6QULHIbRFzUEzuXLcuwKW3C0QTULTnJyMsLCworEDQB07NgRYWFh2LBhg9Nzjh49ioyMDPTs2bPoscDAQHTp0sXhnKtXr+LBBx/ErFmzECWcgmUwbdq0IjdZWFgYYkTFIsYwCL27f7/n1zh3Tk57toIFJzOTUrnVggUOwzjHXuAolTEkApbDwoCqVZW5ptaYLVVcNYGTkZGBiIiIEo9HREQgIyOj1HMAIDIy0uHxyMhIh3PGjh2LTp064c4773RpLOPHj0dWVlbR3wmz/O9UIJRwUQnrTd26VEjLrISHU0AfIFc9VQMWOAzjHFF89MoV7xMfBGZt0WCP2aoZuy1wJk+eDJvNVubf1q1bAcBpfIwkSeXGzRR/3v6cZcuW4ffff8fMmTNdHnNgYCBCQ0Md/hhj0bQpbY8cAfLyPLuGFeJvAMooEzV81HJTFRTIaegscBjGkaAg2ZIqKqN7i32RP7OiVvq8Wrgdg/P000/jgQceKPOYevXqYdeuXTgt/AV2nDlzpoSFRiDcTRkZGQ5xNZmZmUXn/P777zh8+DCqFrPx3XPPPUhMTMTatWvdeDeMUahdG6hUiVZMR47IFh13sEL8jaB2bZoQ1Wr4d/o0iRxfXzn1k2EYmbg4WmAcPQrYRVp4jBUsOEKcnT4NXL0KhIToOpxycVvghIeHI9yFsqcJCQnIysrC5s2b0b59ewDApk2bkJWVhU6dOjk9Jy4uDlFRUUhKSkKbNm0AALm5uVi3bh2mT58OAHj55Zfx+OOPO5x3ww034P3330e/fv3cfTuMQbDZgMaNgR07yE1V0QVObCzw11/qmYKFZSgqyrwFERlGTeLigD//VC7Q2Ao1uqpXB0JDgexsWoAZ3VquWgxOs2bNcPvtt2P48OHYuHEjNm7ciOHDh+OOO+5wyKBq2rQpli5dCoBcU2PGjMHUqVOxdOlS7NmzBw8//DBCQkLw0EMPASArT8uWLR3+ACA2NhZxZpbGjNdxOFYSOEr253IGx98wTNkonUkl5jVPFm9GwWZTL4VeDVRLEweAr776CqNHjy7Kiurfvz9mzZrlcMyBAweQlZVV9O8XX3wR165dw8iRI3HhwgV06NABq1atQpUqVdQcKmMAvBE4Z89S1hEANGum3Jj0Qsn+XM5ggcMwZaPkjTw3V24jY2aBAwD16wM7dyoXm6Qmqgqc6tWr48svvyzzGKlYDp7NZsPkyZMxefJkl1+n+DUYc+KNwBEBxmbPoBKILA624DCMPigpcI4coZi3SpXM3xqlfn3amsGCw72oGMPgTS0cK7mnAEcXlRr6nQUOw5SNEDhpaSROvEEs2ho3Nn9jWyFwzGDBMflHzViJxo1pe/YscP68e+daTeCIdMzLl6kJqdKwwGGYsqldG/D3p7IV3pZrsEL8jUAIPxY4DOMGlSvLN1x3rThWEzjBwYCopqCGm4oFDsOUja+vvNDw1h1jJYFj76IyenQICxzGUPybFIeUFPfOEzE4VhE4gHqBxgUFcql17lrCMKWjVLyJlQRO3bqUTXX5snJVntWCBQ5jKP4tmYTNm10/xz6DSlREtgJqBRqfOkVmdz8/tuAwTFko5Y4RAscK85MaVZ7VggUOYyg8ETi7dtG2Xj1rZFAJ1LLgiNVobCwX+WOYsmjYkLaiSJ8nnDsnWzpEnKHZMUstHBY4jKFo1462+/cDduWRyuSPP2ibkKDOmPRCLQuOFUrGM4wWiEq9wgXuCcJ6U6cOpYlbAbNkUrHAYQxFRARZLiQJ2LbNtXNE+7EuXdQalT6obcFhgcMwZSOKhh44AOTne3YNK8XfCFjgMIyHuOOmun4d2LiR9q0mcNiCwzD6UrcuZTTm5HjujrGiwGEXFcN4iDsCZ/NmmnwiI601gQCywLl40XV3nSsIwSQsRAzDOMfXVw4M9tRNZUWBwxYchvEQdwTOunW07dKFUhetROXKQHg47SvppmILDsO4jrdxOFbKoBIIgZOWRhmZRoUFDmM4brqJypn/80/5FUTtBY4VUdpNlZsrF/ljgcMw5eONwMnPBw4don0rWXCioihdvLBQrqllRFjgMIajUiW54N+WLaUfl5sLbNhA+1YVOEoHGqelUQC3faVkhmFKxxuBc/QoWTiCg61VVNNmkxdIoku6EWGBwxgSV9xUW7cC166RG0dMQlZDaQuOcE/Vq2c9lx7DqIGYW1JTyWLhDsI91aiR+ZtsFqdRI9oePKjvOMrCYh85YxWEwBEp4M6wTw+36s3avqu4EnD8DcO4R/36QEAALabS0tw7d88e2op0cyshYopSU/UdR1mwwGEMSd++tOJJTi7dBGr1+BsAaNCAtsKP7y0scBjGPfz85ArE7rqpNm2irShgaiWEaGOBwzBuEh0N3HYb7X/xRcnn8/KAv/6ifSsLHGEGPnTIffO4M1jgMIz7eBqHI1zswiJtJVjgMIwXDBtG2y++KHlzX7UKuHIFqF5dDki2IvXq0Qry6lVqkuktLHAYxn08ETgnT9Jv1teXMkOthnBRpacrW6dLSVjgMIblrruAKlUo/uTPP+XHCwqAl1+m/UcesV7wnj3+/rIYUSKYjwUOw7iPJwJHWG9atrRODyp7wsLI0g4Y14pj4VsDY3ZCQoD776f9zz+XH//8cwreq1YNmDBBn7FpifD/e9PRGCCL15kztM9VjBnGdewFjquuYhF/06GDOmMyAsJNtX+/vuMoDRY4jKEZOpS2//sfcPYs3aRfeYUee+UVclFZHSFwvLXgiEyssDAShwzDuEaTJmSFuXQJ2LvXtXOsHH8jMHocDgscxtDcfDOlaV66RNu+fcnnGxcHjBql9+i0QQQae2vBYfcUw3iGnx+QkED769eXf3xBAdXpAiqGBYcFDsN4gI8P8M03QKtWJHJEavjUqUBgoL5j0wqlLDgscBjGc26+mbb28YClkZoKXL5M/eSsWANHYHSB46f3ABimPNq3B3bsAH76CZg5E4iNlWNzKgLCgnPkCPW28fPwV8sCh2E8JzGRtuvXU7uTsoqLivibtm0pi8qqCIFz5Ahw/Tr1pzISbMFhTIGPD9C/P/D778DChdbOnCpOnTo0ceTledeTShQLFJ2AGYZxnQ4daHFx8mT5FY0rQvwNQP3sqlalwGtvXehqUIFuEwxjTnx8gIYNad+bSUQER1q1bxfDqEmlSnI9m/LicCpCBhVAViwjt2xggcMwJsDbOJwrV2QXVYsWyoyJYSoaIg6nLIFz5Yrcg8rqFhzA2HE4LHAYxgR4m0mVmkpxAzVrAhERyo2LYSoSIg6nrEDj7dspiyo6mtzLVocFDsMwXuGtBUe4p9h6wzCe07kzbfftA86dc37M4sW0FdYeqyNa5aSk6DoMp7DAYRgTICw4ngocYTK3ct8uhlGbmjXlmBNnVpxr1+TmwI88ot249ES44Q4cAM6f13csxWGBwzAmQFhwjh8HcnLcP19YcFjgMIx3dO1K26++Kvncd98BFy9SK5SePTUclI7UqCEvwET2mFFggcMwJiAiglosSJJnfV+EBYddVAzjHSNH0nbx4pIW1Y8/pu3w4RWrlEXHjrTduFHfcRSnAv0XMIx5sdmA1q1pf8cO987NygJOnKB9FjgM4x033ADccQctNqZPlx/fvRtITqZaOY8+qt/49IAFDsMwXiFqcLgrcPbto210NDfZZBglmDCBtv/9LxX+A2TrzZ13AlFR+oxLL4TA2bTJ9W7rWsACh2FMQps2tN2+3b3zOMCYYZQlIQHo0oWqiz//PPDOOyR2AODJJ/Udmx7ccAMQHEzxR972zFMSFjgMYxKEwElJcW+VxCniDKM848fTdtEi4IUXgOxsqjjevbu+49IDf3/quwUYy03FAodhTELTptST6vJl4PBh189jCw7DKE/PnhRrc+ON1Px30iRg+fKKFVxsjxHjcLibOMOYBD8/oFUrSsXcvl1OzSwPtuAwjPLYbMCnn+o9CuNgRIFTQbUmw5gT4aZyNdD43DkgI4P2uckmwzBqIQTO7t1kZTYCLHAYxkS4K3CE9aZuXaBKFXXGxDAMEx0NxMRQfOAff+g9GoIFDsOYCPtUcUkq/3iOv2EYRivuvJO2b72l7zgEqgqcCxcuYMiQIQgLC0NYWBiGDBmCixcvlnmOJEmYPHkyoqOjERwcjK5du2KvWIbakZycjG7duqFSpUqoWrUqunbtimvXrqn0ThjGGNxwA+DrC5w5A/zzT/nHi5RyFjgMw6iNWICtX196M1ItUVXgPPTQQ0hJScHKlSuxcuVKpKSkYMiQIWWeM2PGDLz33nuYNWsWtmzZgqioKPTo0QOXLl0qOiY5ORm33347evbsic2bN2PLli14+umn4VNRw9eZCkNQENCsGe2X56aSJCApifa7dFF3XAzDMHffLe8/8YR+4xDYJMkVQ7f7pKamonnz5ti4cSM6dOgAANi4cSMSEhKwf/9+NGnSpMQ5kiQhOjoaY8aMwUsvvQQAyMnJQWRkJKZPn44n/62g1LFjR/To0QNTpkxxaSw5OTnIsetQmJ2djZiYGGRlZSE0NNTbt8owmjJsGHUsnjyZUlNLY/9+EkMBAcCFC0BIiGZDZBimgmKzyftqqIvs7GyEhYW5dP9WzeSRnJyMsLCwInEDkDAJCwvDhg0bnJ5z9OhRZGRkoKddG9bAwEB06dKl6JzMzExs2rQJERER6NSpEyIjI9GlSxf86ax3/b9MmzatyE0WFhaGmJgYhd4lw2iP+En9/nvZx/36K20TE1ncMAyjDfa34qVL9RsHoKLAycjIQERERInHIyIikCHyVp2cAwCRkZEOj0dGRhY9d+TIEQDA5MmTMXz4cKxcuRI33XQTunfvjr///tvpdcePH4+srKyivxOi8yDDmJC+fWn7559l+7lXraJtr17qj4lhGAYAOneW9wcM0G8cgAcCZ/LkybDZbGX+bd26FQBgs7dV/YskSU4ft6f48/bnFP5bo/7JJ5/EI488gjZt2uD9999HkyZNsGDBAqfXCwwMRGhoqMMfw5iVunWpemphIbBihfNjcnKAtWtpnwUOwzBaItpYNGyo7zjcrmT89NNP44EHHijzmHr16mHXrl04ffp0iefOnDlTwkIjiPq3BWtGRgZq1apV9HhmZmbROeLx5sWqljVr1gxpaWmuvxGGMTH9+wM7dwLLlgHO4vb//BO4ehWoVYsyrxiGYbRi6lRyjbtabV0t3BY44eHhCA8PL/e4hIQEZGVlYfPmzWjfvj0AYNOmTcjKykKnTp2cnhMXF4eoqCgkJSWhzb8VzXJzc7Fu3TpMnz4dAImn6OhoHDhwwOHcgwcPonfv3u6+HYYxJf37A1OmACtXkrUmMNDxeRF/07OnY9AfwzCMFhjhdqxaDE6zZs1w++23Y/jw4di4cSM2btyI4cOH44477nDIoGratCmW/huJZLPZMGbMGEydOhVLly7Fnj178PDDDyMkJAQPPfRQ0TEvvPACPvjgAyxevBiHDh3Cq6++iv379+Oxxx5T6+0wjKG46SaqHHr5suyKskfE39jF6zMMw1QoVG22+dVXX2H06NFFWVH9+/fHrFmzHI45cOAAsrKyiv794osv4tq1axg5ciQuXLiADh06YNWqVahiV2d+zJgxuH79OsaOHYvz58/jxhtvRFJSEho0aKDm22EYw+DjA/TrB3z8Mbmp7ONsMjLIfWWzAT166DdGhmEYPVGtDo6RcSePnmGMyooVlFFVpw6Qlia7oubMAUaOBOLjgX/j/RmGYSyBIergMAyjLt26AZUrAydPAm+8QY/t3Ak8/zzt33+/fmNjGIbRGxY4DGNSgoKAd9+l/cmTqcFd//6UPdWzJzBunK7DYxiG0RVVY3AYhlGXJ54gC86UKXLtiUaNgG+/Bfz4180wTAWGLTgMY3Jefx0QCYShocCPPwLVquk7JoZhGL3hNR7DmBybDZg7F7j5ZqBdO7nbOMMwTEWGBQ7DWAA/P+Dhh/UeBcMwjHFgFxXDMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJaDBQ7DMAzDMJajQnYTlyQJAJCdna3zSBiGYRiGcRVx3xb38bKokALn0qVLAICYmBidR8IwDMMwjLtcunQJYWFhZR5jk1yRQRajsLAQp06dQpUqVWCz2RS9dnZ2NmJiYnDixAmEhoYqem1Ghj9nbeDPWX34M9YG/py1Qe3PWZIkXLp0CdHR0fDxKTvKpkJacHx8fFCnTh1VXyM0NJR/RBrAn7M28OesPvwZawN/ztqg5udcnuVGwEHGDMMwDMNYDhY4DMMwDMNYDhY4ChMYGIhJkyYhMDBQ76FYGv6ctYE/Z/Xhz1gb+HPWBiN9zhUyyJhhGIZhGGvDFhyGYRiGYSwHCxyGYRiGYSwHCxyGYRiGYSwHCxyGYRiGYSwHCxyGYRiGYSwHCxwFmT17NuLi4hAUFIT4+HisX79e7yFZimnTpqFdu3aoUqUKIiIicNddd+HAgQN6D8vyTJs2DTabDWPGjNF7KJbjn3/+weDBg1GjRg2EhISgdevW2LZtm97DshT5+fl45ZVXEBcXh+DgYNSvXx9vvPEGCgsL9R6aqfnjjz/Qr18/REdHw2az4YcffnB4XpIkTJ48GdHR0QgODkbXrl2xd+9eTcfIAkchFi1ahDFjxmDixInYsWMHEhMT0bt3b6Slpek9NMuwbt06jBo1Chs3bkRSUhLy8/PRs2dPXLlyRe+hWZYtW7Zg3rx5aNWqld5DsRwXLlxA586d4e/vj19++QX79u3Du+++i6pVq+o9NEsxffp0zJ07F7NmzUJqaipmzJiBt99+Gx9++KHeQzM1V65cwY033ohZs2Y5fX7GjBl47733MGvWLGzZsgVRUVHo0aNHUbNrTZAYRWjfvr00YsQIh8eaNm0qvfzyyzqNyPpkZmZKAKR169bpPRRLcunSJalRo0ZSUlKS1KVLF+nZZ5/Ve0iW4qWXXpJuvvlmvYdhefr27Ss9+uijDo8NGDBAGjx4sE4jsh4ApKVLlxb9u7CwUIqKipLeeuutoseuX78uhYWFSXPnztVsXGzBUYDc3Fxs27YNPXv2dHi8Z8+e2LBhg06jsj5ZWVkAgOrVq+s8EmsyatQo9O3bF7fddpveQ7Eky5YtQ9u2bXHfffchIiICbdq0wfz58/UeluW4+eabsXr1ahw8eBAAsHPnTvz555/o06ePziOzLkePHkVGRobDPTEwMBBdunTR9J5YIbuJK83Zs2dRUFCAyMhIh8cjIyORkZGh06isjSRJGDduHG6++Wa0bNlS7+FYjm+//Rbbt2/Hli1b9B6KZTly5AjmzJmDcePGYcKECdi8eTNGjx6NwMBADB06VO/hWYaXXnoJWVlZaNq0KXx9fVFQUIA333wTDz74oN5Dsyzivufsnnj8+HHNxsECR0FsNpvDvyVJKvEYowxPP/00du3ahT///FPvoViOEydO4Nlnn8WqVasQFBSk93AsS2FhIdq2bYupU6cCANq0aYO9e/dizpw5LHAUZNGiRfjyyy/x9ddfo0WLFkhJScGYMWMQHR2NYcOG6T08S6P3PZEFjgKEh4fD19e3hLUmMzOzhIJlvOeZZ57BsmXL8Mcff6BOnTp6D8dybNu2DZmZmYiPjy96rKCgAH/88QdmzZqFnJwc+Pr66jhCa1CrVi00b97c4bFmzZrh+++/12lE1uSFF17Ayy+/jAceeAAAcMMNN+D48eOYNm0aCxyViIqKAkCWnFq1ahU9rvU9kWNwFCAgIADx8fFISkpyeDwpKQmdOnXSaVTWQ5IkPP3001iyZAl+//13xMXF6T0kS9K9e3fs3r0bKSkpRX9t27bFoEGDkJKSwuJGITp37lyizMHBgwdRt25dnUZkTa5evQofH8dbna+vL6eJq0hcXByioqIc7om5ublYt26dpvdEtuAoxLhx4zBkyBC0bdsWCQkJmDdvHtLS0jBixAi9h2YZRo0aha+//ho//vgjqlSpUmQxCwsLQ3BwsM6jsw5VqlQpEddUqVIl1KhRg+OdFGTs2LHo1KkTpk6divvvvx+bN2/GvHnzMG/ePL2HZin69euHN998E7GxsWjRogV27NiB9957D48++qjeQzM1ly9fxqFDh4r+ffToUaSkpKB69eqIjY3FmDFjMHXqVDRq1AiNGjXC1KlTERISgoceeki7QWqWr1UB+Oijj6S6detKAQEB0k033cTpywoDwOnfZ599pvfQLA+niavD8uXLpZYtW0qBgYFS06ZNpXnz5uk9JMuRnZ0tPfvss1JsbKwUFBQk1a9fX5o4caKUk5Oj99BMzZo1a5zOx8OGDZMkiVLFJ02aJEVFRUmBgYHSLbfcIu3evVvTMdokSZK0k1MMwzAMwzDqwzE4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYDhY4DMMwDMNYjv8HCiZ+nIWZMbsAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGxCAYAAACqUFbqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB8j0lEQVR4nO3dd3gUVdsG8HsTSKMEQg9SpTdBEKRJUZEilldFBAHFhoBSrIi+YgOxfdgAQYFXRcWGiiKKooBUKQEFBOk1dJJAevZ8fzyczG6ySXY3M9ty/64r12wms7Mnm83uM895zjk2pZQCERERUZAI83cDiIiIiDzB4IWIiIiCCoMXIiIiCioMXoiIiCioMHghIiKioMLghYiIiIIKgxciIiIKKgxeiIiIKKgweCEiIqKgwuCFyE+2bt2Ku+++G/Xq1UNUVBTKli2Lyy+/HK+88grOnDnj8fkmT56Mb775Jt/+efPmwWazYcOGDSa02jznzp1D5cqV8dlnn+XumzRpEmw2W+5XTEwMLrnkElx33XV4++23kZKSku88d911F+rWreu078yZMxg4cCCqVq0Km82Gm266CQCwf/9+9OvXD3FxcbDZbBg7dqyFv2Hg+PXXX1G2bFkcOXLE300hMkUpfzeAqCSaPXs2Ro4cicaNG+Oxxx5Ds2bNkJWVhQ0bNmDmzJlYs2YNFi5c6NE5J0+ejFtvvTX3gzrQPffcc4iPj8ftt9+e72dLlixBbGwsMjMzcfToUfz66694/PHH8eqrr2LRokW47LLLco995plnMGbMGKf7v/DCC1i4cCHmzJmDSy+9FHFxcQCAcePGYd26dZgzZw6qV6+OGjVqWPtLBoirr74a7du3x1NPPYX//e9//m4OUfEpIvKp1atXq/DwcNW7d2+Vnp6e7+cZGRnq22+/9fi8ZcqUUcOGDcu3f+7cuQqA+vPPP71priVOnz6toqOj1cyZM532P/vsswqAOnnyZL77JCQkqNjYWFW7dm2Xz5uja665RjVt2jTf/gYNGqg+ffoUr/EO7Ha7Sk1NNe18Vvryyy9VeHi4OnjwoL+bQlRs7DYi8rHJkyfDZrNh1qxZiIyMzPfziIgI3HDDDQCAe+65B3FxcUhNTc13XM+ePdG8eXMAgM1mw4ULF/C///0vt8ule/fuTsenpKTgwQcfROXKlVGpUiX85z//wdGjR52OsdvteOWVV9CkSRNERkaiatWqGDp0KA4fPux0XPfu3dGiRQv8+eef6Nq1K2JiYlC/fn28/PLLsNvtRT4H8+bNQ3Z2tsusS0Euu+wyTJw4EQcPHsSCBQty9zt2G+3fvx82mw2//PILduzYkftc/P7777DZbNi9ezd+/PHH3P379+8HACQnJ+PRRx9FvXr1EBERgZo1a2Ls2LG4cOGCUxtsNhtGjx6NmTNnomnTpoiMjMzNZPz7778YNGgQqlatisjISDRt2hTvvvuu0/11Oz799FNMnDgR8fHxKF++PK655hrs3Lkz3++8ZMkSXH311YiNjUVMTAyaNm2KKVOmOB2zYcMG3HDDDYiLi0NUVBTatGmDzz//PN+5+vfvj7Jly2L27NluP+dEAcvf0RNRSZKdna1iYmJUhw4d3Dp+y5YtCoCaPXu20/5t27YpAOrdd99VSim1Zs0aFR0drfr27avWrFmj1qxZo7Zt26aUMjIv9evXVw899JD66aef1Pvvv68qVqyoevTo4XTe+++/XwFQo0ePVkuWLFEzZ85UVapUUbVq1XLKhnTr1k1VqlRJNWzYUM2cOVMtXbpUjRw5UgFQ//vf/4r8vXr27Knat2+fb39hmRellPrnn38UAHXPPffk7hs2bJiqU6eOUkqp9PR0tWbNGtWmTRtVv3793OciKSlJrVmzRlWvXl117tw5d396erq6cOGCat26tapcubJ644031C+//KLefPNNFRsbq3r27KnsdnvuYwFQNWvWVK1atVKffPKJWrZsmfr777/Vtm3bVGxsrGrZsqX68MMP1c8//6weeeQRFRYWpiZNmpR7/99++00BUHXr1lWDBw9WP/zwg/r0009V7dq1VcOGDVV2dnbuse+//76y2Wyqe/fu6pNPPlG//PKLmj59uho5cmTuMcuWLVMRERGqa9euasGCBWrJkiXqrrvuUgDU3Llz8z1/ffr0UZdffnmRfx+iQMfghciHEhMTFQA1cOBAt+/TrVs31bp1a6d9Dz74oCpfvrxKSUnJ3VdUt5Hjh55SSr3yyisKgDp27JhSSqkdO3a4PG7dunUKgHrqqaec2gRArVu3zunYZs2aqeuuu67I3ykmJkaNGDEi3/6igpe0tDQFwKnrxzF4cWxf8+bN892/Tp06ql+/fk77pkyZosLCwvJ1q3355ZcKgFq8eHHuPgAqNjZWnTlzxunY6667Tl1yySUqKSnJaf/o0aNVVFRU7vE6eOnbt6/TcZ9//rkCoNasWaOUUiolJUWVL19edenSxSl4yqtJkyaqTZs2Kisry2n/9ddfr2rUqKFycnKc9k+cOFGFhYWp8+fPF3hOomAQ0t1GK1asQP/+/REfHw+bzeZyJIYvHy8rKwtPPPEEWrZsiTJlyiA+Ph5Dhw7Nl7oncjRmzBgkJCRg1apVAKSL46OPPsKwYcNQtmxZt8+ju6K0Vq1aAQAOHDgAAPjtt98ASDeMo/bt26Np06b49ddfnfZXr14d7du3z3dOfb6CnDt3DqmpqahatarbbdeUUh7fpyjff/89WrRogdatWyM7Ozv367rrrsvtcnLUs2dPVKxYMff79PR0/Prrr7j55psRExPjdI6+ffsiPT0da9eudTpHUX+L1atXIzk5GSNHjoTNZnPZ7t27d+Off/7B4MGDASDf4x47dixfV1TVqlVht9uRmJjo+RNFFEBCOni5cOECLrvsMrzzzjsB8XipqanYtGkTnnnmGWzatAlff/01du3ale+NjEJX5cqVERMTg3379rl9nxtvvBF169bNrZ+YN28eLly4gFGjRnn02JUqVXL6XtfbpKWlAQBOnz4NAC5H4MTHx+f+vKDz6XPq8xVE/zwqKsrNlhv0h3t8fLzH9y3I8ePHsXXrVpQuXdrpq1y5clBK4dSpU07H531+Tp8+jezsbLz99tv5ztG3b18AyHeOov4WJ0+eBABccsklhbYbAB599NF8jzty5EiXj6uf86L+RkSBLqSHSvfp0wd9+vQp8OeZmZl4+umnMX/+fJw7dw4tWrTA1KlT8xU6mvV4sbGxWLp0qdO+t99+G+3bt8fBgwdRu3Ztrx6Xgkd4eDiuvvpq/Pjjjzh8+HChH05aWFgYRo0ahaeeegqvv/46pk+fjquvvhqNGzc2tW36A/XYsWP52nX06FFUrlzZ1MfxZi6b7777DgC8/h91pXLlyoiOjsacOXMK/LmjvJmQihUrIjw8HEOGDCkwoKxXr55HbapSpQoA5CuUdtWuCRMm4D//+Y/LY/K+RvRzbtbfkshfQjp4Kcrdd9+N/fv347PPPkN8fDwWLlyI3r1746+//kLDhg190oakpCTYbDZUqFDBJ49H/jdhwgQsXrwY9913H7799ltEREQ4/TwrKwtLlixB//79c/fde++9mDRpEgYPHoydO3di6tSp+c7rTtajMD179gQAfPzxx7jiiity9//555/YsWMHJk6c6PW5HUVERKB+/frYs2ePR/fbsmULJk+ejLp162LAgAGmtAUArr/+ekyePBmVKlXyOMgAgJiYGPTo0QObN29Gq1at8v09vdGpUyfExsZi5syZGDhwoMuuo8aNG6Nhw4a5z4s79u7di0qVKqFatWrFbiORP5XY4GXPnj349NNPcfjw4dwU9KOPPoolS5Zg7ty5br8ZFEd6ejqefPJJDBo0COXLl7f88SgwdOzYETNmzMDIkSPRtm1bPPjgg2jevDmysrKwefNmzJo1Cy1atHAKXipUqIChQ4dixowZqFOnjtPPtJYtW+L333/HokWLUKNGDZQrV86j7Ezjxo1x//334+2330ZYWBj69OmD/fv345lnnkGtWrUwbtw4U35/QDInP/74Y4E/37hxI2JjY5GVlZU7Sd1HH32EqlWrYtGiRaYECNrYsWPx1Vdf4aqrrsK4cePQqlUr2O12HDx4ED///DMeeeQRdOjQodBzvPnmm+jSpQu6du2KBx98EHXr1kVKSgp2796NRYsWYdmyZR61qWzZsnj99ddx77334pprrsF9992HatWqYffu3diyZUtu1/R7772HPn364LrrrsNdd92FmjVr4syZM9ixYwc2bdqEL774wum8a9euRbdu3QqsoyEKFiU2eNm0aROUUmjUqJHT/oyMjNy09v79+4u8Ehs1apRXNTVZWVkYOHAg7HY7pk+f7vH9Kbjdd999aN++Pf7v//4PU6dORWJiIkqXLo1GjRph0KBBGD16dL773H777ZgxYwYefPBBhIXlL1d78803MWrUKAwcOBCpqano1q1bvmLTosyYMQOXXnopPvjgA7z77ruIjY1F7969MWXKFJc1Lt4aPHgw5syZgz///NMpy6P17t0bgGST4uLi0LJlS0ydOhV33303ypUrZ1o7AKBMmTJYuXIlXn75ZcyaNQv79u1DdHQ0ateujWuuuSbf0gOuNGvWDJs2bcILL7yAp59+GidOnECFChXQsGHD3LoXT91zzz2Ij4/H1KlTce+990Iphbp162LYsGG5x/To0QPr16/HSy+9hLFjx+Ls2bOoVKkSmjVrli87tWfPHvz111+YNGmSV+0hCiQ2ZUX5fgCy2WxYuHBh7tTpCxYswODB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/vprLFu2DPXq1fN3k0LS1Vdfjb/++gsJCQm5X+3atcPgwYORkJDAwMUknTt3zjfUf9euXahTp46fWhSaUlNTERbm/DEWHh7OodIWqlevHqpXr+70mZiZmYnly5f79DORmRc3jB8/HkOGDEG7du3QsWNHzJo1CwcPHsSIESP83bSQMWrUKHzyySf49ttvUa5cudxMV2xsLKKjo/3cutBRrly5fHVEZcqUQaVKlVhfZKJx48ahU6dOmDx5MgYMGID169dj1qxZmDVrlr+bFlL69++Pl156CbVr10bz5s2xefNmvPHGGxg+fLi/mxbUzp8/j927d+d+v2/fPiQkJCAuLg61a9fG2LFjMXnyZDRs2BANGzbE5MmTERMTg0GDBvmukT4b1xTk3n33XVWnTh0VERGhLr/8cg7hNRkAl19z5871d9NCHodKW2PRokWqRYsWKjIyUjVp0kTNmjXL300KOcnJyWrMmDGqdu3aKioqStWvX19NnDhRZWRk+LtpQe23335z+X48bNgwpZQMl3722WdV9erVVWRkpLrqqqvUX3/95dM22pRSynehEhEREVHxsOaFiIiIggqDFyIiIgoqDF6IiIgoqDB4ISIioqDC4IWIiIiCCoMXIiIiCioMXoiIiCioMHghIiKioMLghYiIiIIKgxciIiIKKgxeiIiIKKj8P6S3h6B/gt/WAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig_cy_cl, ax_cy_cl = plt.subplots()\n", - "ax_cy_cl.plot(t_cy_cl, y_cy_cl[0], 'r')\n", - "ax_cy_cl.plot(t_cy_cl, y_cy_cl[1], 'b')\n", - "ax_cy_cl.set(title='Cython (class)')\n", - "plt.show()\n", - "\n", - "fig_cy_cl_diff, ax_cy_cl_diff = plt.subplots()\n", - "if t_cy_cl.size != t_cy.size:\n", - " print('SIZE MISMATCH')\n", - " new_y1 = np.interp(t_cy, t_cy_cl, y_cy_cl[0])\n", - " new_y2 = np.interp(t_cy, t_cy_cl, y_cy_cl[1])\n", - "else:\n", - " new_y1 = y_cy_cl[0]\n", - " new_y2 = y_cy_cl[1]\n", - "ax_cy_cl_diff.plot(t_cy, new_y1 - y_cy[0], 'r')\n", - "ax_cy_cl_diff.plot(t_cy, new_y2 - y_cy[1], 'b')\n", - "ax_cy_cl_diff.set(title='Cython (Difference)')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "4bc013bb", - "metadata": {}, - "source": [ - "### Line Profiler" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "01538911", - "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'line_profiler'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[15], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mload_ext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mline_profiler\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\interactiveshell.py:2417\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[1;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[0;32m 2415\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[0;32m 2416\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[1;32m-> 2417\u001b[0m result \u001b[38;5;241m=\u001b[39m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 2419\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[0;32m 2420\u001b[0m \u001b[38;5;66;03m# when using magics with decodator @output_can_be_silenced\u001b[39;00m\n\u001b[0;32m 2421\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[0;32m 2422\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\magics\\extension.py:33\u001b[0m, in \u001b[0;36mExtensionMagics.load_ext\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 31\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m module_str:\n\u001b[0;32m 32\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m UsageError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMissing module name.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 33\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshell\u001b[38;5;241m.\u001b[39mextension_manager\u001b[38;5;241m.\u001b[39mload_extension(module_str)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m res \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124malready loaded\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 36\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m extension is already loaded. To reload it, use:\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m module_str)\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\extensions.py:76\u001b[0m, in \u001b[0;36mExtensionManager.load_extension\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Load an IPython extension by its module name.\u001b[39;00m\n\u001b[0;32m 70\u001b[0m \n\u001b[0;32m 71\u001b[0m \u001b[38;5;124;03mReturns the string \"already loaded\" if the extension is already loaded,\u001b[39;00m\n\u001b[0;32m 72\u001b[0m \u001b[38;5;124;03m\"no load function\" if the module doesn't have a load_ipython_extension\u001b[39;00m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;124;03mfunction, or None if it succeeded.\u001b[39;00m\n\u001b[0;32m 74\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 75\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 76\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_load_extension(module_str)\n\u001b[0;32m 77\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mModuleNotFoundError\u001b[39;00m:\n\u001b[0;32m 78\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m module_str \u001b[38;5;129;01min\u001b[39;00m BUILTINS_EXTS:\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\site-packages\\IPython\\core\\extensions.py:91\u001b[0m, in \u001b[0;36mExtensionManager._load_extension\u001b[1;34m(self, module_str)\u001b[0m\n\u001b[0;32m 89\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshell\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[0;32m 90\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m module_str \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m sys\u001b[38;5;241m.\u001b[39mmodules:\n\u001b[1;32m---> 91\u001b[0m mod \u001b[38;5;241m=\u001b[39m import_module(module_str)\n\u001b[0;32m 92\u001b[0m mod \u001b[38;5;241m=\u001b[39m sys\u001b[38;5;241m.\u001b[39mmodules[module_str]\n\u001b[0;32m 93\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_load_ipython_extension(mod):\n", - "File \u001b[1;32mC:\\ProgramData\\Anaconda3\\envs\\cytest11\\Lib\\importlib\\__init__.py:126\u001b[0m, in \u001b[0;36mimport_module\u001b[1;34m(name, package)\u001b[0m\n\u001b[0;32m 124\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[0;32m 125\u001b[0m level \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m--> 126\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _bootstrap\u001b[38;5;241m.\u001b[39m_gcd_import(name[level:], package, level)\n", - "File \u001b[1;32m:1204\u001b[0m, in \u001b[0;36m_gcd_import\u001b[1;34m(name, package, level)\u001b[0m\n", - "File \u001b[1;32m:1176\u001b[0m, in \u001b[0;36m_find_and_load\u001b[1;34m(name, import_)\u001b[0m\n", - "File \u001b[1;32m:1140\u001b[0m, in \u001b[0;36m_find_and_load_unlocked\u001b[1;34m(name, import_)\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'line_profiler'" - ] - } - ], - "source": [ - "%load_ext line_profiler" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "f6f7ba37", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.28 s ± 39.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "%timeit cyrk_ode_3(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "8bf52cba", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "UsageError: Line magic function `%lprun` not found.\n" - ] - } - ], - "source": [ - "%lprun -f cyrk_ode_2 cyrk_ode_2(pendulum_cy, pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "3c9bb15f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\ProgramData\\Anaconda3\\envs\\cytest39\\lib\\site-packages\\line_profiler\\ipython_extension.py:71: UserWarning: Could not extract a code object for the object \n", - " profile = LineProfiler(*funcs)\n" - ] - } - ], - "source": [ - "%lprun -f PendulumSolver.__init__ -f PendulumSolver.solve PendulumSolver(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "faf92d3b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " " - ] - } - ], - "source": [ - "%prun -s cumulative PendulumSolver(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "b8bbd48b", - "metadata": {}, - "outputs": [], - "source": [ - "import cProfile, pstats" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "6993f48c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sat Aug 26 09:38:47 2023 Profile.prof\n", - "\n", - " 18 function calls in 0.076 seconds\n", - "\n", - " Ordered by: internal time\n", - "\n", - " ncalls tottime percall cumtime percall filename:lineno(function)\n", - " 1 0.076 0.076 0.076 0.076 :1()\n", - " 1 0.000 0.000 0.076 0.076 {built-in method builtins.exec}\n", - " 3 0.000 0.000 0.000 0.000 {built-in method numpy.core._multiarray_umath.implement_array_function}\n", - " 3 0.000 0.000 0.000 0.000 numeric.py:150(ones)\n", - " 3 0.000 0.000 0.000 0.000 <__array_function__ internals>:177(copyto)\n", - " 3 0.000 0.000 0.000 0.000 {built-in method numpy.empty}\n", - " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", - " 3 0.000 0.000 0.000 0.000 multiarray.py:1079(copyto)\n", - "\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cProfile.runctx(\"CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)\", globals(), locals(), \"Profile.prof\")\n", - "s = pstats.Stats(\"Profile.prof\")\n", - "s.strip_dirs().sort_stats(\"time\").print_stats()" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "2f31ae65", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Performance\n", - "Cython (class - solve only)\n", - "72.9 ms ± 5.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "Cython (class - build)\n", - "47 µs ± 7.4 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", - "Cython (class - build and solve)\n", - "73.8 ms ± 9.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" - ] - } - ], - "source": [ - "print('Performance')\n", - "print('Cython (class - solve only)')\n", - "# CyRK v0.6.0:\n", - "# 4.1ms, 4.03ms, 4.1ms\n", - "# 311us, 314us, 308us\n", - "# 300us, 298us, 300us\n", - "# 285us, 292us\n", - "# 295us\n", - "# 85.1us, 84.4us, 85us\n", - "# v0.6.2: 101us, 101us, 102us\n", - "# v0.7.0: 100us, \n", - "# ^^ 97.4us\n", - "# 118us, 123us\n", - "# 128us, 132us, 129us\n", - "\n", - "# Changing time size\n", - "# 85.4ms, 90.1ms\n", - "# 70.6ms, 70.5ms\n", - "# 82ms, 80.3ms, 83.3ms\n", - "# 88.3ms, 87.8ms\n", - "# 78.8ms\n", - "# 76.4 79.1ms\n", - "# 82.8ms, 85.4ms\n", - "# 65ms 67.6ms\n", - "# 74ms, 75.3ms, 72.2ms\n", - "Solver = CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=False)\n", - "%timeit Solver.solve(reset=True)\n", - "\n", - "print('Cython (class - build)')\n", - "# CyRK v0.6.0:\n", - "# 21.1us, 20.9us, 20.9us\n", - "# 21us, 20.7us, 20.9us\n", - "# 22us, 21.8us, 21.4us\n", - "# 22us, 22.9us\n", - "# 22.6us, 23.1us, 22.8us\n", - "# v0.6.2: 43.8us, 43.6us\n", - "# v0.7.0: 43.8us,\n", - "# 60us, 59.7us\n", - "# 62.1us, 59.8us, 63.7us\n", - "\n", - "# Changing time size\n", - "# 61.7us, 59.7us\n", - "# 46.7us, 46.5us\n", - "\n", - "%timeit CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=False)\n", - "\n", - "print('Cython (class - build and solve)')\n", - "# CyRK v0.6.0:\n", - "# 4.08ms, 4.21ms, 4.09ms\n", - "# 329us. 335us, 324us\n", - "# 319us, 310us, 318us\n", - "# 306us, 303us\n", - "# 103us, 102us, 102us\n", - "# v0.6.2: 128us, 127us\n", - "# v0.7.0: 126us\n", - "# 159us, 165us\n", - "# 166us, 167us, 170us\n", - "\n", - "# Changing time size\n", - "# 92ms, 84ms\n", - "# 70.2ms, 71.2ms\n", - "# 83ms, 77.7ms, 83.1ms\n", - "# 89ms, 84.1ms\n", - "# 76.9ms\n", - "# 81.5ms 78.8ms\n", - "# 78.3ms, 83.9ms\n", - "# 69ms 70ms\n", - "# 71.4ms, 70.5ms\n", - "%timeit CySolverPendulum(pendulum_time_span_10, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, auto_solve=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "86ed92f7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Expected Size Performance\n", - "Default (1000)\n", - "Growths 0\n", - "127 µs ± 104 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", - "Way overshoot\n", - "Growths 0\n", - "148 µs ± 180 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", - "Nearly exactly whats needed\n", - "Growths 0\n", - "124 µs ± 408 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", - "undershoot once\n", - "Growths 1\n", - "129 µs ± 476 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", - "undershoot 10x\n", - "Growths 9\n", - "164 µs ± 94.4 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n", - "undershoot max\n", - "Growths 180\n", - "848 µs ± 2.95 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "print('Expected Size Performance')\n", - "\n", - "print('Default (1000)')\n", - "# 101us, 103us\n", - "# v0.6.2: 127us\n", - "A = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "print('Growths', A.size_growths)\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1)\n", - "\n", - "print('Way overshoot')\n", - "# 128us, 126us, 130us\n", - "# v0.6.2: 148us\n", - "A = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=100000)\n", - "print('Growths', A.size_growths)\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=100000)\n", - "\n", - "print('Nearly exactly whats needed')\n", - "# 108us, 109us\n", - "# v0.6.2: 124us\n", - "A = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=200)\n", - "print('Growths', A.size_growths)\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=200)\n", - "\n", - "print('undershoot once')\n", - "# 113us,\n", - "# v0.6.2: 129us\n", - "A = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=100)\n", - "print('Growths', A.size_growths)\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=100)\n", - "\n", - "print('undershoot 10x')\n", - "# 146us,\n", - "# v0.6.2: 164us\n", - "A = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=19)\n", - "print('Growths', A.size_growths)\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=19)\n", - "\n", - "print('undershoot max')\n", - "# 830us\n", - "# v0.6.2: 848us\n", - "A = PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=1)\n", - "print('Growths', A.size_growths)\n", - "%timeit PendulumSolver(pendulum_time_span_1, pendulum_y0, pendulum_args, RTOL, ATOL, rk_method=1, expected_size=1)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Tests/Cython Experiments.ipynb b/Tests/Cython Experiments.ipynb deleted file mode 100644 index 54dd52b..0000000 --- a/Tests/Cython Experiments.ipynb +++ /dev/null @@ -1,12646 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "1d47e5cf", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from numba import njit\n", - "import cython\n", - "# import line_profiler\n", - "from typing import Tuple\n", - "from cython.parallel import prange" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "fd535af5", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext Cython" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "77a435f3", - "metadata": {}, - "outputs": [], - "source": [ - "from typing import Tuple\n", - "\n", - "import numpy as np\n", - "from numba import njit\n", - "\n", - "from CyRK import nbrk_ode\n", - "\n", - "nbrk_ode_py = nbrk_ode.py_func" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "7c1620c5", - "metadata": {}, - "outputs": [], - "source": [ - "@njit()\n", - "def y_diff(t, y):\n", - " \n", - " dy = np.zeros_like(y)\n", - " dy[0] = (1. - 0.01 * y[1]) * y[0]\n", - " dy[1] = (0.02 * y[0] - 1.) * y[1]\n", - " \n", - " return dy\n", - "\n", - "@njit()\n", - "def y_diff_extra(t, y):\n", - " \n", - " extra_0 = (1. - 0.01 * y[1])\n", - " extra_1 = (0.02 * y[0] - 1.)\n", - " dy_0 = extra_0 * y[0]\n", - " dy_1 = extra_1 * y[1]\n", - " \n", - " return np.asarray([dy_0, dy_1, extra_0, extra_1], dtype=y.dtype)\n", - "\n", - "@njit()\n", - "def y_diff_extra_extra(t, y):\n", - " \n", - " extra_0 = (1. - 0.01 * y[1])\n", - " extra_1 = (0.02 * y[0] - 1.)\n", - " extra_2 = (1. - 0.01 * y[1]) * 10.\n", - " extra_3 = (0.02 * y[0] - 1.) * 10.\n", - " extra_4 = (1. - 0.01 * y[1]) * 20.\n", - " extra_5 = (0.02 * y[0] - 1.) * 20.\n", - " extra_6 = (1. - 0.01 * y[1]) * -30.\n", - " extra_7 = (0.02 * y[0] - 1.) * -30.\n", - " extra_8 = (1. - 0.01 * y[1]) * 32.\n", - " extra_9 = (0.02 * y[0] - 1.) * -32.\n", - " extra_10 = (1. - 0.01 * y[1]) * -32.\n", - " extra_11 = (0.02 * y[0] - 1.) * -12.\n", - " dy_0 = extra_0 * y[0]\n", - " dy_1 = extra_1 * y[1]\n", - " \n", - " return np.asarray([dy_0, dy_1, extra_0, extra_1, extra_2, extra_3,\n", - " extra_4, extra_5, extra_6, extra_7, extra_8, extra_9,\n", - " extra_10, extra_11], dtype=y.dtype)\n", - "\n", - "@njit()\n", - "def y_diff2(t, y, dy):\n", - " \n", - " dy[0] = (1. - 0.01 * y[1]) * y[0]\n", - " dy[1] = (0.02 * y[0] - 1.) * y[1]\n", - " \n", - " \n", - "@njit()\n", - "def y_diff2_extra(t, y, output):\n", - " \n", - " extra_0 = (1. - 0.01 * y[1])\n", - " extra_1 = (0.02 * y[0] - 1.)\n", - " output[0] = extra_0 * y[0]\n", - " output[1] = extra_1 * y[1]\n", - " output[2] = extra_0\n", - " output[3] = extra_1\n", - " \n", - "@njit()\n", - "def y_diff3(t, y, dy):\n", - " \n", - " dy[0] = (1. - 0.01 * np.real(y[1])) * np.real(y[0]) + (0.02 * np.imag(y[0]) - 1.) * np.imag(y[1]) * 1j\n", - " dy[1] = (0.02 * np.real(y[0]) - 1.) * np.real(y[1]) + (1. - 0.01 * np.imag(y[1])) * np.imag(y[0]) * 1j\n", - " \n", - "@njit()\n", - "def y_diff4(t, y):\n", - " \n", - " dy = np.zeros_like(y)\n", - " dy[0] = (1. - 0.01 * np.real(y[1])) * np.real(y[0]) + (0.02 * np.imag(y[0]) - 1.) * np.imag(y[1]) * 1j\n", - " dy[1] = (0.02 * np.real(y[0]) - 1.) * np.real(y[1]) + (1. - 0.01 * np.imag(y[1])) * np.imag(y[0]) * 1j\n", - " return dy\n", - "\n", - "initial_conds = np.asarray((20., 20.), dtype=np.complex128)\n", - "initial_conds_float = np.asarray((20., 20.), dtype=np.float64)\n", - "initial_conds_complex = np.asarray((20. + 0.1j, 20. + 0.1j), dtype=np.complex128)\n", - "time_span = (0., 50.)\n", - "rtol = 1.0e-7\n", - "atol = 1.0e-8\n", - "\n", - "def diff_plot(t, y, is_complex: bool = False):\n", - " \n", - " fig, ax = plt.subplots()\n", - " if is_complex:\n", - " ax.plot(t, np.real(y[0]), 'r', label='$y_{0}$ Re')\n", - " ax.plot(t, np.real(y[1]), 'b', label='$y_{1}$ Re')\n", - " ax.plot(t, np.imag(y[0]), 'r:', label='$y_{0}$ Im')\n", - " ax.plot(t, np.imag(y[1]), 'b:', label='$y_{1}$ Im')\n", - " else:\n", - " ax.plot(t, y[0], 'r', label='$y_{0}$')\n", - " ax.plot(t, y[1], 'b', label='$y_{1}$')\n", - " ax.set(xlabel='$t$', ylabel='$y$')\n", - " ax.legend(loc='best')\n", - " \n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "724f64bb", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Content of stdout:\n", - "_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp\r\n", - "C:\\ProgramData\\Anaconda3\\envs\\cytest\\lib\\site-packages\\numpy\\core\\include\\numpy\\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API, disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp(20457): warning C4244: '=': conversion from 'long' to 'char', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp(38213): warning C4244: '=': conversion from 'long' to 'unsigned char', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp(38227): warning C4244: '=': conversion from 'long' to 'short', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp(38252): warning C4244: '=': conversion from 'long' to 'unsigned char', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp(38266): warning C4244: '=': conversion from 'long' to 'short', possible loss of data\r\n", - "C:\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cpp(41449): warning C4551: function call missing argument list\r\n", - " Creating library C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cp310-win_amd64.lib and object C:\\Users\\joepr\\.ipython\\cython\\Users\\joepr\\.ipython\\cython\\_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cp310-win_amd64.exp\r\n", - "Generating code\r\n", - "Finished generating code" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - " \n", - " Cython: _cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.pyx\n", - " \n", - "\n", - "\n", - "

Generated by Cython 3.0.0

\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", - "

\n", - "
+001: # distutils: language = c++
\n", - "
  __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 002: # cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False
\n", - "
 003: 
\n", - "
 004: import cython
\n", - "
+005: import numpy as np
\n", - "
  __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_7) < 0) __PYX_ERR(0, 5, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 006: cimport numpy as np
\n", - "
+007: np.import_array()
\n", - "
  __pyx_t_9 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 7, __pyx_L1_error)\n",
-       "
 008: from libcpp cimport bool as bool_cpp_t
\n", - "
 009: from libc.math cimport sqrt, fabs, nextafter, fmax, fmin
\n", - "
 010: 
\n", - "
 011: from CyRK.array.interp cimport interp_array, interp_complex_array
\n", - "
 012: from CyRK.rk.rk cimport (
\n", - "
 013:     RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,
\n", - "
 014:     RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,
\n", - "
 015:     RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,
\n", - "
 016:     RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,
\n", - "
 017:     DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,
\n", - "
 018:     DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)
\n", - "
 019: 
\n", - "
 020: # # Integration Constants
\n", - "
 021: # Multiply steps computed from asymptotic behaviour of errors by this.
\n", - "
+022: cdef double SAFETY = 0.9
\n", - "
  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_SAFETY = 0.9;\n",
-       "
+023: cdef double MIN_FACTOR = 0.2  # Minimum allowed decrease in a step size.
\n", - "
  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MIN_FACTOR = 0.2;\n",
-       "
+024: cdef double MAX_FACTOR = 10.  # Maximum allowed increase in a step size.
\n", - "
  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_FACTOR = 10.;\n",
-       "
+025: cdef double MAX_STEP = np.inf
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 25, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_inf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_STEP = __pyx_t_10;\n",
-       "
+026: cdef double INF = np.inf
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_inf); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 26, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 26, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_INF = __pyx_t_10;\n",
-       "
+027: cdef double EPS = np.finfo(np.float64).eps
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_finfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_eps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS = __pyx_t_10;\n",
-       "
+028: cdef double EPS_10 = EPS * 10.
\n", - "
  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS_10 = (__pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS * 10.);\n",
-       "
+029: cdef double EPS_100 = EPS * 100.
\n", - "
  __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS_100 = (__pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS * 100.);\n",
-       "
 030: 
\n", - "
 031: 
\n", - "
+032: cdef double cabs(double complex value) nogil:
\n", - "
static double __pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cabs(__pyx_t_double_complex __pyx_v_value) {\n",
-       "  double __pyx_v_v_real;\n",
-       "  double __pyx_v_v_imag;\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 033:     """ Absolute value function for complex-valued inputs.
\n", - "
 034:     
\n", - "
 035:     Parameters
\n", - "
 036:     ----------
\n", - "
 037:     value : float (double complex)
\n", - "
 038:         Complex-valued number.
\n", - "
 039:          
\n", - "
 040:     Returns
\n", - "
 041:     -------
\n", - "
 042:     value_abs : float (double)
\n", - "
 043:         Absolute value of `value`.
\n", - "
 044:     """
\n", - "
 045: 
\n", - "
 046:     cdef double v_real
\n", - "
 047:     cdef double v_imag
\n", - "
+048:     v_real = value.real
\n", - "
  __pyx_t_1 = __Pyx_CREAL(__pyx_v_value);\n",
-       "  __pyx_v_v_real = __pyx_t_1;\n",
-       "
+049:     v_imag = value.imag
\n", - "
  __pyx_t_1 = __Pyx_CIMAG(__pyx_v_value);\n",
-       "  __pyx_v_v_imag = __pyx_t_1;\n",
-       "
 050: 
\n", - "
+051:     return sqrt(v_real * v_real + v_imag * v_imag)
\n", - "
  __pyx_r = sqrt(((__pyx_v_v_real * __pyx_v_v_real) + (__pyx_v_v_imag * __pyx_v_v_imag)));\n",
-       "  goto __pyx_L0;\n",
-       "
 052: 
\n", - "
 053: # Define fused type to handle both float and complex-valued versions of y and dydt.
\n", - "
 054: ctypedef fused double_numeric:
\n", - "
 055:     double
\n", - "
 056:     double complex
\n", - "
 057: 
\n", - "
 058: 
\n", - "
+059: cdef double dabs(double_numeric value) nogil:
\n", - "
static double __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(double __pyx_v_value) {\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static double __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(__pyx_t_double_complex __pyx_v_value) {\n",
-       "  double __pyx_r;\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  #ifdef WITH_THREAD\n",
-       "  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();\n",
-       "  #endif\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.dabs\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = -1;\n",
-       "  #ifdef WITH_THREAD\n",
-       "  __Pyx_PyGILState_Release(__pyx_gilstate_save);\n",
-       "  #endif\n",
-       "  __pyx_L0:;\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "
 060:     """ Absolute value function for either float or complex-valued inputs.
\n", - "
 061:     
\n", - "
 062:     Checks the type of value and either utilizes `cabs` (for double complex) or `fabs` (for floats).
\n", - "
 063:     
\n", - "
 064:     Parameters
\n", - "
 065:     ----------
\n", - "
 066:     value : float (double_numeric)
\n", - "
 067:         Float or complex-valued number.
\n", - "
 068: 
\n", - "
 069:     Returns
\n", - "
 070:     -------
\n", - "
 071:     value_abs : float (double)
\n", - "
 072:         Absolute value of `value`.
\n", - "
 073:     """
\n", - "
 074: 
\n", - "
 075:     # Check the type of value
\n", - "
 076:     if double_numeric is cython.doublecomplex:
\n", - "
+077:         return cabs(value)
\n", - "
  __pyx_t_1 = __pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cabs(__pyx_v_value); if (unlikely(__pyx_t_1 == ((double)-1) && __Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 77, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_t_1;\n",
-       "  goto __pyx_L0;\n",
-       "
 078:     else:
\n", - "
+079:         return fabs(value)
\n", - "
  __pyx_r = fabs(__pyx_v_value);\n",
-       "  goto __pyx_L0;\n",
-       "
 080: 
\n", - "
 081: 
\n", - "
+082: def cyrk_ode(
\n", - "
/* Python wrapper */\n",
-       "static PyObject *__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_1cyrk_ode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "PyDoc_STRVAR(__pyx_doc_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cyrk_ode, \" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\\n\\n    Parameters\\n    ----------\\n    diffeq : callable\\n        An njit-compiled function that defines the derivatives of the problem.\\n    t_span : Tuple[float, float]\\n        A tuple of the beginning and end of the integration domain's dependent variables.\\n    y0 : np.ndarray\\n        1D array of the initial values of the problem at t_span[0]\\n    args : tuple = tuple()\\n        Any additional arguments that are passed to dffeq.\\n    rtol : float = 1.e-6\\n        Integration relative tolerance used to determine optimal step size.\\n    atol : float = 1.e-8\\n        Integration absolute tolerance used to determine optimal step size.\\n    max_step : float = np.inf\\n        Maximum allowed step size.\\n    first_step : float = None\\n        Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\\n    rk_method : int = 1\\n        The type of RK method used for integration\\n            0 = RK23\\n            1 = RK45\\n            2 = DOP853\\n    t_eval : np.ndarray = None\\n        If provided, then the function will interpolate the integration results to provide them at the\\n            requested t-steps.\\n    capture_extra : bool = False\\n        If True, then additional output from the differential equation will be collected (but not used to determine\\n         integration error).\\n         Example:\\n            ```\\n            def diffeq(t, y, dy):\\n                a = ... some function of y and t.\\n                dy[0] = a**2 * sin(t) - y[1]\\n                dy[1] = a**3 * cos(t) + y[0]\\n\\n                # Storing extra output in dy even though it is not part of the diffeq.\\n                dy[2] = a\\n            ```\\n    num_extra : int = 0\\n        The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\\n    interpolate_extra : bool = False\\n        If True, and if `t_eval` was provi\"\"ded, then the integrator will interpolate the extra output values at each\\n         step in `t_eval`.\\n    expected_size : int = 0\\n        The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\\n        If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\\n        It is better to overshoot than undershoot this guess.\\n\\n    Returns\\n    -------\\n    time_domain : np.ndarray\\n        The final time domain. This is equal to t_eval if it was provided.\\n    y_results : np.ndarray\\n        The solution of the differential equation provided for each time_result.\\n    success : bool\\n        Final integration success flag.\\n    message : str\\n        Any integration messages, useful if success=False.\\n\\n    \");\n",
-       "static PyMethodDef __pyx_mdef_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_1cyrk_ode = {\"cyrk_ode\", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_1cyrk_ode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cyrk_ode};\n",
-       "static PyObject *__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_1cyrk_ode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  PyObject *__pyx_v_signatures = 0;\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  PyObject *__pyx_v_kwargs = 0;\n",
-       "  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;\n",
-       "  PyObject *__pyx_v__fused_sigindex = 0;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__pyx_fused_cpdef (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,&__pyx_n_s_fused_sigindex,0};\n",
-       "    PyObject* values[5] = {0,0,0,0,0};\n",
-       "    __pyx_defaults2 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self);\n",
-       "    values[4] = __pyx_dynamic_args->__pyx_arg__fused_sigindex;\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signatures)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, 1); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_kwargs)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, 2); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_defaults)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, 3); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fused_sigindex);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"__pyx_fused_cpdef\") < 0)) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_signatures = values[0];\n",
-       "    __pyx_v_args = values[1];\n",
-       "    __pyx_v_kwargs = values[2];\n",
-       "    __pyx_v_defaults = values[3];\n",
-       "    __pyx_v__fused_sigindex = values[4];\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"__pyx_fused_cpdef\", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.__pyx_fused_cpdef\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cyrk_ode(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults, __pyx_v__fused_sigindex);\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_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cyrk_ode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults, PyObject *__pyx_v__fused_sigindex) {\n",
-       "  PyObject *__pyx_v_search_list = 0;\n",
-       "  PyObject *__pyx_v_sn = 0;\n",
-       "  PyObject *__pyx_v_sigindex_node = 0;\n",
-       "  PyObject *__pyx_v_dest_sig = NULL;\n",
-       "  PyTypeObject *__pyx_v_ndarray = 0;\n",
-       "  PyObject *__pyx_v_arg_as_memoryview = 0;\n",
-       "  __Pyx_memviewslice __pyx_v_memslice;\n",
-       "  Py_ssize_t __pyx_v_itemsize;\n",
-       "  CYTHON_UNUSED int __pyx_v_dtype_signed;\n",
-       "  char __pyx_v_kind;\n",
-       "  PyObject *__pyx_v_arg = NULL;\n",
-       "  PyObject *__pyx_v_dtype = NULL;\n",
-       "  PyObject *__pyx_v_arg_base = NULL;\n",
-       "  PyObject *__pyx_v_sig = NULL;\n",
-       "  PyObject *__pyx_v_sig_series = NULL;\n",
-       "  PyObject *__pyx_v_last_type = NULL;\n",
-       "  PyObject *__pyx_v_sig_type = NULL;\n",
-       "  PyObject *__pyx_v_sigindex_matches = NULL;\n",
-       "  PyObject *__pyx_v_sigindex_candidates = NULL;\n",
-       "  PyObject *__pyx_v_dst_type = NULL;\n",
-       "  PyObject *__pyx_v_found_matches = NULL;\n",
-       "  PyObject *__pyx_v_found_candidates = NULL;\n",
-       "  PyObject *__pyx_v_candidates = NULL;\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"cyrk_ode\", 0);\n",
-       "  __Pyx_INCREF(__pyx_v_kwargs);\n",
-       "  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);\n",
-       "  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = (__pyx_v_kwargs != Py_None);\n",
-       "  if (__pyx_t_3) {\n",
-       "  } else {\n",
-       "    __pyx_t_2 = __pyx_t_3;\n",
-       "    goto __pyx_L4_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __pyx_t_4 = (!__pyx_t_3);\n",
-       "  __pyx_t_2 = __pyx_t_4;\n",
-       "  __pyx_L4_bool_binop_done:;\n",
-       "  if (__pyx_t_2) {\n",
-       "    __Pyx_INCREF(Py_None);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);\n",
-       "  }\n",
-       "  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_v_itemsize = -1L;\n",
-       "  if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "    PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
-       "    __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __pyx_t_2 = (2 < __pyx_t_5);\n",
-       "  if (__pyx_t_2) {\n",
-       "    if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 2);\n",
-       "    __Pyx_INCREF(__pyx_t_1);\n",
-       "    __pyx_v_arg = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "  __pyx_t_4 = (__pyx_v_kwargs != Py_None);\n",
-       "  if (__pyx_t_4) {\n",
-       "  } else {\n",
-       "    __pyx_t_2 = __pyx_t_4;\n",
-       "    goto __pyx_L7_bool_binop_done;\n",
-       "  }\n",
-       "  if (unlikely(__pyx_v_kwargs == Py_None)) {\n",
-       "    PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "    __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_y0, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __pyx_t_4;\n",
-       "  __pyx_L7_bool_binop_done:;\n",
-       "  if (likely(__pyx_t_2)) {\n",
-       "    if (unlikely(__pyx_v_kwargs == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_y0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_v_arg = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "  /*else*/ {\n",
-       "    if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"object of type 'NoneType' has no len()\");\n",
-       "      __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_INCREF(__pyx_int_3);\n",
-       "    __Pyx_GIVEREF(__pyx_int_3);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);\n",
-       "    __Pyx_INCREF(__pyx_n_s_s);\n",
-       "    __Pyx_GIVEREF(__pyx_n_s_s);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_6);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_Raise(__pyx_t_6, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_L6:;\n",
-       "  while (1) {\n",
-       "    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));\n",
-       "    if (__pyx_t_2) {\n",
-       "      __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); \n",
-       "      if (__pyx_t_2) {\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_v_dtype = __pyx_t_6;\n",
-       "        __pyx_t_6 = 0;\n",
-       "        goto __pyx_L12;\n",
-       "      }\n",
-       "      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); \n",
-       "      if (__pyx_t_2) {\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_v_arg_base = __pyx_t_6;\n",
-       "        __pyx_t_6 = 0;\n",
-       "        __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); \n",
-       "        if (__pyx_t_2) {\n",
-       "          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          __pyx_v_dtype = __pyx_t_6;\n",
-       "          __pyx_t_6 = 0;\n",
-       "          goto __pyx_L13;\n",
-       "        }\n",
-       "        /*else*/ {\n",
-       "          __Pyx_INCREF(Py_None);\n",
-       "          __pyx_v_dtype = Py_None;\n",
-       "        }\n",
-       "        __pyx_L13:;\n",
-       "        goto __pyx_L12;\n",
-       "      }\n",
-       "      /*else*/ {\n",
-       "        __Pyx_INCREF(Py_None);\n",
-       "        __pyx_v_dtype = Py_None;\n",
-       "      }\n",
-       "      __pyx_L12:;\n",
-       "      __pyx_v_itemsize = -1L;\n",
-       "      __pyx_t_2 = (__pyx_v_dtype != Py_None);\n",
-       "      if (__pyx_t_2) {\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __pyx_v_itemsize = __pyx_t_5;\n",
-       "        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __pyx_v_kind = __pyx_t_7;\n",
-       "        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');\n",
-       "        switch (__pyx_v_kind) {\n",
-       "          case 'i':\n",
-       "          case 'u':\n",
-       "          break;\n",
-       "          case 'f':\n",
-       "          __pyx_t_4 = ((sizeof(double const )) == __pyx_v_itemsize);\n",
-       "          if (__pyx_t_4) {\n",
-       "          } else {\n",
-       "            __pyx_t_2 = __pyx_t_4;\n",
-       "            goto __pyx_L16_bool_binop_done;\n",
-       "          }\n",
-       "          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1);\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          __pyx_L16_bool_binop_done:;\n",
-       "          if (__pyx_t_2) {\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "            goto __pyx_L10_break;\n",
-       "          }\n",
-       "          break;\n",
-       "          case 'c':\n",
-       "          __pyx_t_4 = ((sizeof(__pyx_t_double_complex const )) == __pyx_v_itemsize);\n",
-       "          if (__pyx_t_4) {\n",
-       "          } else {\n",
-       "            __pyx_t_2 = __pyx_t_4;\n",
-       "            goto __pyx_L19_bool_binop_done;\n",
-       "          }\n",
-       "          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          __pyx_t_4 = (((Py_ssize_t)__pyx_t_5) == 1);\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          __pyx_L19_bool_binop_done:;\n",
-       "          if (__pyx_t_2) {\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_double_complex, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "            goto __pyx_L10_break;\n",
-       "          }\n",
-       "          break;\n",
-       "          case 'O':\n",
-       "          break;\n",
-       "          default: break;\n",
-       "        }\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_t_2 = (__pyx_v_arg == Py_None);\n",
-       "    if (__pyx_t_2) {\n",
-       "      if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      goto __pyx_L10_break;\n",
-       "    }\n",
-       "    {\n",
-       "      /*try:*/ {\n",
-       "        __pyx_t_6 = PyMemoryView_FromObject(__pyx_v_arg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L22_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_v_arg_as_memoryview = ((PyObject*)__pyx_t_6);\n",
-       "        __pyx_t_6 = 0;\n",
-       "      }\n",
-       "      /*else:*/ {\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == -1L);\n",
-       "        if (!__pyx_t_4) {\n",
-       "          goto __pyx_L33_next_or;\n",
-       "        } else {\n",
-       "        }\n",
-       "        __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_5 == (sizeof(double const )));\n",
-       "        if (!__pyx_t_4) {\n",
-       "        } else {\n",
-       "          goto __pyx_L32_next_and;\n",
-       "        }\n",
-       "        __pyx_L33_next_or:;\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == (sizeof(double const )));\n",
-       "        if (__pyx_t_4) {\n",
-       "        } else {\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          goto __pyx_L31_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_L32_next_and:;\n",
-       "        __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_11 == 1);\n",
-       "        __pyx_t_2 = __pyx_t_4;\n",
-       "        __pyx_L31_bool_binop_done:;\n",
-       "        if (__pyx_t_2) {\n",
-       "          __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(__pyx_v_arg_as_memoryview, 0); \n",
-       "          __pyx_v_memslice = __pyx_t_12;\n",
-       "          __pyx_t_2 = (__pyx_v_memslice.memview != 0);\n",
-       "          if (__pyx_t_2) {\n",
-       "            __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); \n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "            goto __pyx_L27_try_break;\n",
-       "          }\n",
-       "          /*else*/ {\n",
-       "            PyErr_Clear(); \n",
-       "          }\n",
-       "        }\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == -1L);\n",
-       "        if (!__pyx_t_4) {\n",
-       "          goto __pyx_L39_next_or;\n",
-       "        } else {\n",
-       "        }\n",
-       "        __pyx_t_5 = __Pyx_PyMemoryView_Get_itemsize(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_5 == (sizeof(__pyx_t_double_complex const )));\n",
-       "        if (!__pyx_t_4) {\n",
-       "        } else {\n",
-       "          goto __pyx_L38_next_and;\n",
-       "        }\n",
-       "        __pyx_L39_next_or:;\n",
-       "        __pyx_t_4 = (__pyx_v_itemsize == (sizeof(__pyx_t_double_complex const )));\n",
-       "        if (__pyx_t_4) {\n",
-       "        } else {\n",
-       "          __pyx_t_2 = __pyx_t_4;\n",
-       "          goto __pyx_L37_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_L38_next_and:;\n",
-       "        __pyx_t_11 = __Pyx_PyMemoryView_Get_ndim(__pyx_v_arg_as_memoryview); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "        __pyx_t_4 = (__pyx_t_11 == 1);\n",
-       "        __pyx_t_2 = __pyx_t_4;\n",
-       "        __pyx_L37_bool_binop_done:;\n",
-       "        if (__pyx_t_2) {\n",
-       "          __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex__const__(__pyx_v_arg_as_memoryview, 0); \n",
-       "          __pyx_v_memslice = __pyx_t_12;\n",
-       "          __pyx_t_2 = (__pyx_v_memslice.memview != 0);\n",
-       "          if (__pyx_t_2) {\n",
-       "            __PYX_XCLEAR_MEMVIEW((&__pyx_v_memslice), 1); \n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_double_complex, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "            goto __pyx_L27_try_break;\n",
-       "          }\n",
-       "          /*else*/ {\n",
-       "            PyErr_Clear(); \n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;\n",
-       "      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;\n",
-       "      goto __pyx_L29_try_end;\n",
-       "      __pyx_L22_error:;\n",
-       "      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_ValueError, __pyx_builtin_TypeError);\n",
-       "      if (__pyx_t_11) {\n",
-       "        __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.__pyx_fused_cpdef\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_13) < 0) __PYX_ERR(0, 82, __pyx_L24_except_error)\n",
-       "        __Pyx_XGOTREF(__pyx_t_6);\n",
-       "        __Pyx_XGOTREF(__pyx_t_1);\n",
-       "        __Pyx_XGOTREF(__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "        goto __pyx_L23_exception_handled;\n",
-       "      }\n",
-       "      goto __pyx_L24_except_error;\n",
-       "      __pyx_L24_except_error:;\n",
-       "      __Pyx_XGIVEREF(__pyx_t_8);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_9);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_10);\n",
-       "      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      goto __pyx_L1_error;\n",
-       "      __pyx_L27_try_break:;\n",
-       "      __Pyx_XGIVEREF(__pyx_t_8);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_9);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_10);\n",
-       "      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      goto __pyx_L10_break;\n",
-       "      __pyx_L23_exception_handled:;\n",
-       "      __Pyx_XGIVEREF(__pyx_t_8);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_9);\n",
-       "      __Pyx_XGIVEREF(__pyx_t_10);\n",
-       "      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);\n",
-       "      __pyx_L29_try_end:;\n",
-       "    }\n",
-       "    if (unlikely((__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    goto __pyx_L10_break;\n",
-       "  }\n",
-       "  __pyx_L10_break:;\n",
-       "  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v__fused_sigindex); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __pyx_t_4 = (!__pyx_t_2);\n",
-       "  if (__pyx_t_4) {\n",
-       "    __pyx_t_5 = 0;\n",
-       "    if (unlikely(__pyx_v_signatures == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "      __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_14), (&__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_XDECREF(__pyx_t_13);\n",
-       "    __pyx_t_13 = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    while (1) {\n",
-       "      __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_13, __pyx_t_14, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_11);\n",
-       "      if (unlikely(__pyx_t_15 == 0)) break;\n",
-       "      if (unlikely(__pyx_t_15 == -1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);\n",
-       "      __pyx_t_1 = 0;\n",
-       "      if (!(likely(PyDict_CheckExact(__pyx_v__fused_sigindex))||((__pyx_v__fused_sigindex) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_v__fused_sigindex))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __pyx_t_1 = __pyx_v__fused_sigindex;\n",
-       "      __Pyx_INCREF(__pyx_t_1);\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_1));\n",
-       "      __pyx_t_1 = 0;\n",
-       "      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_16);\n",
-       "      __pyx_t_17 = NULL;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {\n",
-       "        __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16);\n",
-       "        if (likely(__pyx_t_17)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);\n",
-       "          __Pyx_INCREF(__pyx_t_17);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_16, function);\n",
-       "          __pyx_t_15 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_kp_s__11};\n",
-       "        __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15);\n",
-       "        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;\n",
-       "        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;\n",
-       "      }\n",
-       "      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_split); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_16);\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      __pyx_t_6 = NULL;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_16))) {\n",
-       "        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_16);\n",
-       "        if (likely(__pyx_t_6)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);\n",
-       "          __Pyx_INCREF(__pyx_t_6);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_16, function);\n",
-       "          __pyx_t_15 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_kp_s__12};\n",
-       "        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_15, 1+__pyx_t_15);\n",
-       "        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;\n",
-       "      }\n",
-       "      __pyx_t_16 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_16);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_18 = PyList_GET_SIZE(__pyx_t_16);\n",
-       "      if (unlikely(__pyx_t_18 < 1)) {\n",
-       "        __Pyx_RaiseNeedMoreValuesError(0+__pyx_t_18); __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      }\n",
-       "      #if CYTHON_COMPILING_IN_CPYTHON\n",
-       "      __pyx_t_6 = PyList_GET_ITEM(__pyx_t_16, __pyx_t_18-1); \n",
-       "      ((PyVarObject*)__pyx_t_16)->ob_size--;\n",
-       "      #else\n",
-       "      __pyx_t_6 = PySequence_ITEM(__pyx_t_16, __pyx_t_18-1); \n",
-       "      #endif\n",
-       "      __Pyx_GOTREF(__pyx_t_6);\n",
-       "      #if !CYTHON_COMPILING_IN_CPYTHON\n",
-       "      __pyx_t_17 = PySequence_GetSlice(__pyx_t_16, 0, __pyx_t_18-1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_17);\n",
-       "      __Pyx_DECREF(__pyx_t_16);\n",
-       "      __pyx_t_16 = __pyx_t_17; __pyx_t_17 = NULL;\n",
-       "      #else\n",
-       "      CYTHON_UNUSED_VAR(__pyx_t_17);\n",
-       "      #endif\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_sig_series, ((PyObject*)__pyx_t_16));\n",
-       "      __pyx_t_16 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_last_type, __pyx_t_6);\n",
-       "      __pyx_t_6 = 0;\n",
-       "      __pyx_t_1 = __pyx_v_sig_series; __Pyx_INCREF(__pyx_t_1); __pyx_t_18 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_6); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        #endif\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_sig_type, __pyx_t_6);\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_sig_type, __pyx_v_sigindex_node, Py_NE)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        if (__pyx_t_4) {\n",
-       "          __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "            __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          }\n",
-       "          if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_sig_type, __pyx_t_6) < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_INCREF(__pyx_t_6);\n",
-       "          __Pyx_DECREF_SET(__pyx_v_sigindex_node, __pyx_t_6);\n",
-       "          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "          goto __pyx_L49;\n",
-       "        }\n",
-       "        /*else*/ {\n",
-       "          if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "            __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_sigindex_node, __pyx_v_sig_type); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_6);\n",
-       "          if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_6))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_DECREF_SET(__pyx_v_sigindex_node, ((PyObject*)__pyx_t_6));\n",
-       "          __pyx_t_6 = 0;\n",
-       "        }\n",
-       "        __pyx_L49:;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      if (unlikely(__pyx_v_sigindex_node == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "        __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      }\n",
-       "      if (unlikely((PyDict_SetItem(__pyx_v_sigindex_node, __pyx_v_last_type, __pyx_v_sig) < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    }\n",
-       "    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "  }\n",
-       "  __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_13);\n",
-       "  __pyx_v_sigindex_matches = ((PyObject*)__pyx_t_13);\n",
-       "  __pyx_t_13 = 0;\n",
-       "  __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_13);\n",
-       "  __Pyx_INCREF(__pyx_v__fused_sigindex);\n",
-       "  __Pyx_GIVEREF(__pyx_v__fused_sigindex);\n",
-       "  PyList_SET_ITEM(__pyx_t_13, 0, __pyx_v__fused_sigindex);\n",
-       "  __pyx_v_sigindex_candidates = ((PyObject*)__pyx_t_13);\n",
-       "  __pyx_t_13 = 0;\n",
-       "  __pyx_t_13 = __pyx_v_dest_sig; __Pyx_INCREF(__pyx_t_13); __pyx_t_14 = 0;\n",
-       "  for (;;) {\n",
-       "    if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_13)) break;\n",
-       "    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_14); __Pyx_INCREF(__pyx_t_1); __pyx_t_14++; if (unlikely((0 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    #else\n",
-       "    __pyx_t_1 = PySequence_ITEM(__pyx_t_13, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    #endif\n",
-       "    __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_XDECREF_SET(__pyx_v_found_matches, ((PyObject*)__pyx_t_1));\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_XDECREF_SET(__pyx_v_found_candidates, ((PyObject*)__pyx_t_1));\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_4 = (__pyx_v_dst_type == Py_None);\n",
-       "    if (__pyx_t_4) {\n",
-       "      __pyx_t_1 = __pyx_v_sigindex_matches; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        #endif\n",
-       "        if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_6))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_6));\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "          PyErr_Format(PyExc_AttributeError, \"'NoneType' object has no attribute '%.30s'\", \"values\");\n",
-       "          __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_6 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_matches, __pyx_t_6); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_1 = __pyx_v_sigindex_candidates; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_6 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        #endif\n",
-       "        if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_6))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_6));\n",
-       "        __pyx_t_6 = 0;\n",
-       "        if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "          PyErr_Format(PyExc_AttributeError, \"'NoneType' object has no attribute '%.30s'\", \"values\");\n",
-       "          __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_6 = __Pyx_PyDict_Values(__pyx_v_sn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_6);\n",
-       "        __pyx_t_19 = __Pyx_PyList_Extend(__pyx_v_found_candidates, __pyx_t_6); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      goto __pyx_L53;\n",
-       "    }\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_INCREF(__pyx_v_sigindex_matches);\n",
-       "      __Pyx_GIVEREF(__pyx_v_sigindex_matches);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sigindex_matches);\n",
-       "      __Pyx_INCREF(__pyx_v_sigindex_candidates);\n",
-       "      __Pyx_GIVEREF(__pyx_v_sigindex_candidates);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_sigindex_candidates);\n",
-       "      __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_5 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      for (;;) {\n",
-       "        if (__pyx_t_5 >= 2) break;\n",
-       "        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        #else\n",
-       "        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        #endif\n",
-       "        __Pyx_XDECREF_SET(__pyx_v_search_list, ((PyObject*)__pyx_t_1));\n",
-       "        __pyx_t_1 = 0;\n",
-       "        if (unlikely(__pyx_v_search_list == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_1 = __pyx_v_search_list; __Pyx_INCREF(__pyx_t_1); __pyx_t_18 = 0;\n",
-       "        for (;;) {\n",
-       "          if (__pyx_t_18 >= PyList_GET_SIZE(__pyx_t_1)) break;\n",
-       "          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS\n",
-       "          __pyx_t_16 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_18); __Pyx_INCREF(__pyx_t_16); __pyx_t_18++; if (unlikely((0 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          #else\n",
-       "          __pyx_t_16 = PySequence_ITEM(__pyx_t_1, __pyx_t_18); __pyx_t_18++; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_16);\n",
-       "          #endif\n",
-       "          if (!(likely(PyDict_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError(\"dict\", __pyx_t_16))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          __Pyx_XDECREF_SET(__pyx_v_sn, ((PyObject*)__pyx_t_16));\n",
-       "          __pyx_t_16 = 0;\n",
-       "          if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "            __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_v_dst_type, __pyx_v_sn, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "          if (__pyx_t_4) {\n",
-       "            if (unlikely(__pyx_v_sn == Py_None)) {\n",
-       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "              __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "            }\n",
-       "            __pyx_t_16 = __Pyx_PyDict_GetItem(__pyx_v_sn, __pyx_v_dst_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_16);\n",
-       "            __pyx_t_19 = __Pyx_PyList_Append(__pyx_v_found_matches, __pyx_t_16); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;\n",
-       "          }\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;\n",
-       "    }\n",
-       "    __pyx_L53:;\n",
-       "    __Pyx_INCREF(__pyx_v_found_matches);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_sigindex_matches, __pyx_v_found_matches);\n",
-       "    __Pyx_INCREF(__pyx_v_found_candidates);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_sigindex_candidates, __pyx_v_found_candidates);\n",
-       "    __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_matches) != 0);\n",
-       "    if (!__pyx_t_2) {\n",
-       "    } else {\n",
-       "      __pyx_t_4 = __pyx_t_2;\n",
-       "      goto __pyx_L68_bool_binop_done;\n",
-       "    }\n",
-       "    __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_found_candidates) != 0);\n",
-       "    __pyx_t_4 = __pyx_t_2;\n",
-       "    __pyx_L68_bool_binop_done:;\n",
-       "    __pyx_t_2 = (!__pyx_t_4);\n",
-       "    if (__pyx_t_2) {\n",
-       "      goto __pyx_L52_break;\n",
-       "    }\n",
-       "  }\n",
-       "  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "  goto __pyx_L70_for_end;\n",
-       "  __pyx_L52_break:;\n",
-       "  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "  goto __pyx_L70_for_end;\n",
-       "  __pyx_L70_for_end:;\n",
-       "  __Pyx_INCREF(__pyx_v_sigindex_matches);\n",
-       "  __pyx_v_candidates = __pyx_v_sigindex_matches;\n",
-       "  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);\n",
-       "  __pyx_t_4 = (!__pyx_t_2);\n",
-       "  if (unlikely(__pyx_t_4)) {\n",
-       "    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_13);\n",
-       "    __Pyx_Raise(__pyx_t_13, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "    __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  }\n",
-       "  __pyx_t_14 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __pyx_t_4 = (__pyx_t_14 > 1);\n",
-       "  if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__13);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__13);\n",
-       "    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_13);\n",
-       "    __Pyx_Raise(__pyx_t_13, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;\n",
-       "    __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  }\n",
-       "  /*else*/ {\n",
-       "    __Pyx_XDECREF(__pyx_r);\n",
-       "    if (unlikely(__pyx_v_signatures == Py_None)) {\n",
-       "      PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not subscriptable\");\n",
-       "      __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    }\n",
-       "    __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_13);\n",
-       "    __pyx_r = __pyx_t_13;\n",
-       "    __pyx_t_13 = 0;\n",
-       "    goto __pyx_L0;\n",
-       "  }\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_13);\n",
-       "  __Pyx_XDECREF(__pyx_t_16);\n",
-       "  __Pyx_XDECREF(__pyx_t_17);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.__pyx_fused_cpdef\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_XDECREF(__pyx_v_search_list);\n",
-       "  __Pyx_XDECREF(__pyx_v_sn);\n",
-       "  __Pyx_XDECREF(__pyx_v_sigindex_node);\n",
-       "  __Pyx_XDECREF(__pyx_v_dest_sig);\n",
-       "  __Pyx_XDECREF((PyObject *)__pyx_v_ndarray);\n",
-       "  __Pyx_XDECREF(__pyx_v_arg_as_memoryview);\n",
-       "  __Pyx_XDECREF(__pyx_v_arg);\n",
-       "  __Pyx_XDECREF(__pyx_v_dtype);\n",
-       "  __Pyx_XDECREF(__pyx_v_arg_base);\n",
-       "  __Pyx_XDECREF(__pyx_v_sig);\n",
-       "  __Pyx_XDECREF(__pyx_v_sig_series);\n",
-       "  __Pyx_XDECREF(__pyx_v_last_type);\n",
-       "  __Pyx_XDECREF(__pyx_v_sig_type);\n",
-       "  __Pyx_XDECREF(__pyx_v_sigindex_matches);\n",
-       "  __Pyx_XDECREF(__pyx_v_sigindex_candidates);\n",
-       "  __Pyx_XDECREF(__pyx_v_dst_type);\n",
-       "  __Pyx_XDECREF(__pyx_v_found_matches);\n",
-       "  __Pyx_XDECREF(__pyx_v_found_candidates);\n",
-       "  __Pyx_XDECREF(__pyx_v_candidates);\n",
-       "  __Pyx_XDECREF(__pyx_v_kwargs);\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_16__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__defaults__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_rtol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_atol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_max_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_first_step); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = __Pyx_PyInt_From_unsigned_char(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_rk_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_6 = __pyx_memoryview_fromslice(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_7 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_capture_extra); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_short(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_num_extra); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_9 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_interpolate_extra); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_10 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_expected_size); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_10);\n",
-       "  __pyx_t_11 = PyTuple_New(11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_11);\n",
-       "  __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_args);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 0, __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_3);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_6);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 6, __pyx_t_6);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 7, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 8, __pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 9, __pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_10);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 10, __pyx_t_10);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_3 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_10 = 0;\n",
-       "  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_10);\n",
-       "  __Pyx_GIVEREF(__pyx_t_11);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_10, 1, Py_None);\n",
-       "  __pyx_t_11 = 0;\n",
-       "  __pyx_r = __pyx_t_10;\n",
-       "  __pyx_t_10 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __Pyx_XDECREF(__pyx_t_10);\n",
-       "  __Pyx_XDECREF(__pyx_t_11);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.__defaults__\", __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",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_fuse_0__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_3cyrk_ode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "static PyMethodDef __pyx_fuse_0__pyx_mdef_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_3cyrk_ode = {\"__pyx_fuse_0cyrk_ode\", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_3cyrk_ode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cyrk_ode};\n",
-       "static PyObject *__pyx_fuse_0__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_3cyrk_ode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  PyObject *__pyx_v_diffeq = 0;\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  double __pyx_v_max_step;\n",
-       "  double __pyx_v_first_step;\n",
-       "  unsigned char __pyx_v_rk_method;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_capture_extra;\n",
-       "  short __pyx_v_num_extra;\n",
-       "  bool __pyx_v_interpolate_extra;\n",
-       "  unsigned int __pyx_v_expected_size;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"cyrk_ode (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_diffeq,&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step,&__pyx_n_s_first_step,&__pyx_n_s_rk_method,&__pyx_n_s_t_eval,&__pyx_n_s_capture_extra,&__pyx_n_s_num_extra,&__pyx_n_s_interpolate_extra,&__pyx_n_s_expected_size,0};\n",
-       "    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};\n",
-       "    __pyx_defaults5 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self);\n",
-       "    values[3] = __pyx_dynamic_args->__pyx_arg_args;\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_diffeq)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode\", 0, 3, 14, 1); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode\", 0, 3, 14, 2); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
-       "          if (value) { values[3] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[5] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step);\n",
-       "          if (value) { values[6] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
-       "          if (value) { values[7] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rk_method);\n",
-       "          if (value) { values[8] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
-       "          if (value) { values[9] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_capture_extra);\n",
-       "          if (value) { values[10] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_extra);\n",
-       "          if (value) { values[11] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interpolate_extra);\n",
-       "          if (value) { values[12] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expected_size);\n",
-       "          if (value) { values[13] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"cyrk_ode\") < 0)) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_diffeq = values[0];\n",
-       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L3_error)\n",
-       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_ds_double__const__(values[2], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 85, __pyx_L3_error)\n",
-       "    __pyx_v_args = ((PyObject*)values[3]);\n",
-       "    if (values[4]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = __pyx_dynamic_args->__pyx_arg_rtol;\n",
-       "    }\n",
-       "    if (values[5]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = __pyx_dynamic_args->__pyx_arg_atol;\n",
-       "    }\n",
-       "    if (values[6]) {\n",
-       "      __pyx_v_max_step = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_max_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_step = __pyx_dynamic_args->__pyx_arg_max_step;\n",
-       "    }\n",
-       "    if (values[7]) {\n",
-       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_first_step = __pyx_dynamic_args->__pyx_arg_first_step;\n",
-       "    }\n",
-       "    if (values[8]) {\n",
-       "      __pyx_v_rk_method = __Pyx_PyInt_As_unsigned_char(values[8]); if (unlikely((__pyx_v_rk_method == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 91, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rk_method = __pyx_dynamic_args->__pyx_arg_rk_method;\n",
-       "    }\n",
-       "    if (values[9]) {\n",
-       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 92, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_eval = __pyx_dynamic_args->__pyx_arg_t_eval;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "    }\n",
-       "    if (values[10]) {\n",
-       "      __pyx_v_capture_extra = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_capture_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_capture_extra = __pyx_dynamic_args->__pyx_arg_capture_extra;\n",
-       "    }\n",
-       "    if (values[11]) {\n",
-       "      __pyx_v_num_extra = __Pyx_PyInt_As_short(values[11]); if (unlikely((__pyx_v_num_extra == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 94, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_num_extra = __pyx_dynamic_args->__pyx_arg_num_extra;\n",
-       "    }\n",
-       "    if (values[12]) {\n",
-       "      __pyx_v_interpolate_extra = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_interpolate_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_interpolate_extra = __pyx_dynamic_args->__pyx_arg_interpolate_extra;\n",
-       "    }\n",
-       "    if (values[13]) {\n",
-       "      __pyx_v_expected_size = __Pyx_PyInt_As_unsigned_int(values[13]); if (unlikely((__pyx_v_expected_size == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_expected_size = __pyx_dynamic_args->__pyx_arg_expected_size;\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"cyrk_ode\", 0, 3, 14, __pyx_nargs); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cyrk_ode\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 86, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_2cyrk_ode(__pyx_self, __pyx_v_diffeq, __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step, __pyx_v_first_step, __pyx_v_rk_method, __pyx_v_t_eval, __pyx_v_capture_extra, __pyx_v_num_extra, __pyx_v_interpolate_extra, __pyx_v_expected_size);\n",
-       "  int __pyx_lineno = 0;\n",
-       "  const char *__pyx_filename = NULL;\n",
-       "  int __pyx_clineno = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_2cyrk_ode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_diffeq, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step, double __pyx_v_first_step, unsigned char __pyx_v_rk_method, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_capture_extra, short __pyx_v_num_extra, bool __pyx_v_interpolate_extra, unsigned int __pyx_v_expected_size) {\n",
-       "  Py_ssize_t __pyx_v_s;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  unsigned short __pyx_v_y_size;\n",
-       "  double __pyx_v_y_size_dbl;\n",
-       "  double __pyx_v_y_size_sqrt;\n",
-       "  CYTHON_UNUSED bool __pyx_v_y_is_complex;\n",
-       "  PyObject *__pyx_v_DTYPE = NULL;\n",
-       "  double __pyx_v_t_start;\n",
-       "  double __pyx_v_t_end;\n",
-       "  double __pyx_v_t_delta;\n",
-       "  double __pyx_v_t_delta_abs;\n",
-       "  double __pyx_v_direction;\n",
-       "  double __pyx_v_direction_inf;\n",
-       "  double __pyx_v_t_old;\n",
-       "  double __pyx_v_t_new;\n",
-       "  double __pyx_v_time_;\n",
-       "  double __pyx_v_temp_expected_size;\n",
-       "  unsigned int __pyx_v_expected_size_to_use;\n",
-       "  unsigned int __pyx_v_num_concats;\n",
-       "  unsigned int __pyx_v_len_teval;\n",
-       "  bool __pyx_v_use_args;\n",
-       "  bool __pyx_v_success;\n",
-       "  bool __pyx_v_step_accepted;\n",
-       "  bool __pyx_v_step_rejected;\n",
-       "  bool __pyx_v_step_error;\n",
-       "  bool __pyx_v_run_interpolation;\n",
-       "  bool __pyx_v_store_extras_during_integration;\n",
-       "  PyObject *__pyx_v_y_new = NULL;\n",
-       "  PyObject *__pyx_v_y_old = NULL;\n",
-       "  PyObject *__pyx_v_dydt_new = NULL;\n",
-       "  PyObject *__pyx_v_dydt_old = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  double __pyx_v_y_value;\n",
-       "  unsigned short __pyx_v_extra_start;\n",
-       "  unsigned short __pyx_v_total_size;\n",
-       "  unsigned short __pyx_v_store_loop_size;\n",
-       "  PyObject *__pyx_v_diffeq_out = NULL;\n",
-       "  PyObject *__pyx_v_y_result_store = NULL;\n",
-       "  PyObject *__pyx_v_y0_plus_extra = NULL;\n",
-       "  PyObject *__pyx_v_extra_result = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_diffeq_out_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_y_result_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y0_plus_extra_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_result_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y0_to_store = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y0_to_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  CYTHON_UNUSED unsigned char __pyx_v_rk_order;\n",
-       "  unsigned char __pyx_v_error_order;\n",
-       "  unsigned char __pyx_v_rk_n_stages;\n",
-       "  unsigned char __pyx_v_rk_n_stages_plus1;\n",
-       "  CYTHON_UNUSED unsigned char __pyx_v_rk_n_stages_extended;\n",
-       "  double __pyx_v_error_pow;\n",
-       "  double __pyx_v_error_expo;\n",
-       "  double __pyx_v_error_norm5;\n",
-       "  double __pyx_v_error_norm3;\n",
-       "  double __pyx_v_error_norm;\n",
-       "  double __pyx_v_error_norm_abs;\n",
-       "  double __pyx_v_error_norm3_abs;\n",
-       "  double __pyx_v_error_norm5_abs;\n",
-       "  double __pyx_v_error_denom;\n",
-       "  unsigned char __pyx_v_len_C;\n",
-       "  unsigned char __pyx_v_len_B;\n",
-       "  unsigned char __pyx_v_len_E;\n",
-       "  unsigned char __pyx_v_len_E3;\n",
-       "  unsigned char __pyx_v_len_E5;\n",
-       "  unsigned char __pyx_v_len_A0;\n",
-       "  unsigned char __pyx_v_len_A1;\n",
-       "  PyObject *__pyx_v_A = NULL;\n",
-       "  PyObject *__pyx_v_B = NULL;\n",
-       "  PyObject *__pyx_v_C = NULL;\n",
-       "  PyObject *__pyx_v_E = NULL;\n",
-       "  PyObject *__pyx_v_E3 = NULL;\n",
-       "  PyObject *__pyx_v_E5 = NULL;\n",
-       "  PyObject *__pyx_v_E_tmp = NULL;\n",
-       "  PyObject *__pyx_v_E3_tmp = NULL;\n",
-       "  PyObject *__pyx_v_E5_tmp = NULL;\n",
-       "  PyObject *__pyx_v_K = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_B_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E3_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E5_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E3_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E5_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_A_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_K_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_C_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_y_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_t_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y_results_array = NULL;\n",
-       "  PyObject *__pyx_v_time_domain_array = NULL;\n",
-       "  double __pyx_v_step_size;\n",
-       "  double __pyx_v_d0;\n",
-       "  double __pyx_v_d1;\n",
-       "  double __pyx_v_d2;\n",
-       "  double __pyx_v_d0_abs;\n",
-       "  double __pyx_v_d1_abs;\n",
-       "  double __pyx_v_d2_abs;\n",
-       "  double __pyx_v_h0;\n",
-       "  double __pyx_v_h1;\n",
-       "  double __pyx_v_scale;\n",
-       "  double __pyx_v_h0_direction;\n",
-       "  double __pyx_v_min_step;\n",
-       "  double __pyx_v_step_factor;\n",
-       "  double __pyx_v_step;\n",
-       "  double __pyx_v_c;\n",
-       "  double __pyx_v_K_scale;\n",
-       "  char __pyx_v_status;\n",
-       "  unsigned int __pyx_v_len_t;\n",
-       "  unsigned int __pyx_v_new_size;\n",
-       "  PyObject *__pyx_v_time_domain_array_new = NULL;\n",
-       "  PyObject *__pyx_v_y_results_array_new = NULL;\n",
-       "  PyObject *__pyx_v_message = 0;\n",
-       "  PyObject *__pyx_v_solution_y = NULL;\n",
-       "  PyObject *__pyx_v_solution_t = NULL;\n",
-       "  PyObject *__pyx_v_y_results_reduced = NULL;\n",
-       "  PyObject *__pyx_v_y_result_timeslice = NULL;\n",
-       "  PyObject *__pyx_v_y_result_temp = NULL;\n",
-       "  PyObject *__pyx_v_y_results_reduced_view = NULL;\n",
-       "  PyObject *__pyx_v_y_result_timeslice_view = NULL;\n",
-       "  PyObject *__pyx_v_y_result_temp_view = NULL;\n",
-       "  PyObject *__pyx_v_y_interp = NULL;\n",
-       "  PyObject *__pyx_v_y_interp_view = NULL;\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__pyx_fuse_0cyrk_ode\", 0);\n",
-       "  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__14);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__14);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "  __Pyx_XDECREF(__pyx_t_15);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_34, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cyrk_ode\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_XDECREF(__pyx_v_DTYPE);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_old);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_old);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_old_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_old_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_diffeq_out);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_store);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_plus_extra);\n",
-       "  __Pyx_XDECREF(__pyx_v_extra_result);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_diffeq_out_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_store_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_plus_extra_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_result_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_to_store);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_to_store_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_A);\n",
-       "  __Pyx_XDECREF(__pyx_v_B);\n",
-       "  __Pyx_XDECREF(__pyx_v_C);\n",
-       "  __Pyx_XDECREF(__pyx_v_E);\n",
-       "  __Pyx_XDECREF(__pyx_v_E3);\n",
-       "  __Pyx_XDECREF(__pyx_v_E5);\n",
-       "  __Pyx_XDECREF(__pyx_v_E_tmp);\n",
-       "  __Pyx_XDECREF(__pyx_v_E3_tmp);\n",
-       "  __Pyx_XDECREF(__pyx_v_E5_tmp);\n",
-       "  __Pyx_XDECREF(__pyx_v_K);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_B_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_tmp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_tmp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_tmp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_K_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_C_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_message);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_y);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_t);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_reduced);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_temp);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_reduced_view);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice_view);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_temp_view);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_interp);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_interp_view);\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_18__defaults__(CYTHON_UNUSED PyObject *__pyx_self) {\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__defaults__\", 0);\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_1 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_rtol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_atol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_3 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_max_step); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_3);\n",
-       "  __pyx_t_4 = PyFloat_FromDouble(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_first_step); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "  __pyx_t_5 = __Pyx_PyInt_From_unsigned_char(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_rk_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_5);\n",
-       "  __pyx_t_6 = __pyx_memoryview_fromslice(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_6);\n",
-       "  __pyx_t_7 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_capture_extra); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_short(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_num_extra); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_9 = __Pyx_PyBool_FromLong(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_interpolate_extra); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_9);\n",
-       "  __pyx_t_10 = __Pyx_PyInt_From_unsigned_int(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_expected_size); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_10);\n",
-       "  __pyx_t_11 = PyTuple_New(11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_11);\n",
-       "  __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_args);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 0, __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_args);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_3);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_3);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_6);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 6, __pyx_t_6);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 7, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 8, __pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_9);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 9, __pyx_t_9);\n",
-       "  __Pyx_GIVEREF(__pyx_t_10);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_11, 10, __pyx_t_10);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_3 = 0;\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_5 = 0;\n",
-       "  __pyx_t_6 = 0;\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_9 = 0;\n",
-       "  __pyx_t_10 = 0;\n",
-       "  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_10);\n",
-       "  __Pyx_GIVEREF(__pyx_t_11);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);\n",
-       "  __Pyx_INCREF(Py_None);\n",
-       "  __Pyx_GIVEREF(Py_None);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_10, 1, Py_None);\n",
-       "  __pyx_t_11 = 0;\n",
-       "  __pyx_r = __pyx_t_10;\n",
-       "  __pyx_t_10 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_3);\n",
-       "  __Pyx_XDECREF(__pyx_t_4);\n",
-       "  __Pyx_XDECREF(__pyx_t_5);\n",
-       "  __Pyx_XDECREF(__pyx_t_6);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __Pyx_XDECREF(__pyx_t_9);\n",
-       "  __Pyx_XDECREF(__pyx_t_10);\n",
-       "  __Pyx_XDECREF(__pyx_t_11);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.__defaults__\", __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",
-       "/* Python wrapper */\n",
-       "static PyObject *__pyx_fuse_1__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_5cyrk_ode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/\n",
-       "static PyMethodDef __pyx_fuse_1__pyx_mdef_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_5cyrk_ode = {\"__pyx_fuse_1cyrk_ode\", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_5cyrk_ode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_cyrk_ode};\n",
-       "static PyObject *__pyx_fuse_1__pyx_pw_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_5cyrk_ode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {\n",
-       "  PyObject *__pyx_v_diffeq = 0;\n",
-       "  __pyx_ctuple_double__and_double __pyx_v_t_span;\n",
-       "  __Pyx_memviewslice __pyx_v_y0 = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_args = 0;\n",
-       "  double __pyx_v_rtol;\n",
-       "  double __pyx_v_atol;\n",
-       "  double __pyx_v_max_step;\n",
-       "  double __pyx_v_first_step;\n",
-       "  unsigned char __pyx_v_rk_method;\n",
-       "  __Pyx_memviewslice __pyx_v_t_eval = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  bool __pyx_v_capture_extra;\n",
-       "  short __pyx_v_num_extra;\n",
-       "  bool __pyx_v_interpolate_extra;\n",
-       "  unsigned int __pyx_v_expected_size;\n",
-       "  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);\n",
-       "  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);\n",
-       "  PyObject *__pyx_r = 0;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"cyrk_ode (wrapper)\", 0);\n",
-       "  {\n",
-       "    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_diffeq,&__pyx_n_s_t_span,&__pyx_n_s_y0,&__pyx_n_s_args,&__pyx_n_s_rtol,&__pyx_n_s_atol,&__pyx_n_s_max_step,&__pyx_n_s_first_step,&__pyx_n_s_rk_method,&__pyx_n_s_t_eval,&__pyx_n_s_capture_extra,&__pyx_n_s_num_extra,&__pyx_n_s_interpolate_extra,&__pyx_n_s_expected_size,0};\n",
-       "    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};\n",
-       "    __pyx_defaults6 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self);\n",
-       "    values[3] = __pyx_dynamic_args->__pyx_arg_args;\n",
-       "    if (__pyx_kwds) {\n",
-       "      Py_ssize_t kw_args;\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  0: break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case  0:\n",
-       "        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_diffeq)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else goto __pyx_L5_argtuple_error;\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  1:\n",
-       "        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_span)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode\", 0, 3, 14, 1); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  2:\n",
-       "        if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y0)) != 0)) kw_args--;\n",
-       "        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        else {\n",
-       "          __Pyx_RaiseArgtupleInvalid(\"cyrk_ode\", 0, 3, 14, 2); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args);\n",
-       "          if (value) { values[3] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rtol);\n",
-       "          if (value) { values[4] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_atol);\n",
-       "          if (value) { values[5] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_max_step);\n",
-       "          if (value) { values[6] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_step);\n",
-       "          if (value) { values[7] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_rk_method);\n",
-       "          if (value) { values[8] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_t_eval);\n",
-       "          if (value) { values[9] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_capture_extra);\n",
-       "          if (value) { values[10] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num_extra);\n",
-       "          if (value) { values[11] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_interpolate_extra);\n",
-       "          if (value) { values[12] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13:\n",
-       "        if (kw_args > 0) {\n",
-       "          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_expected_size);\n",
-       "          if (value) { values[13] = value; kw_args--; }\n",
-       "          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "        }\n",
-       "      }\n",
-       "      if (unlikely(kw_args > 0)) {\n",
-       "        const Py_ssize_t kwd_pos_args = __pyx_nargs;\n",
-       "        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, \"cyrk_ode\") < 0)) __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "      }\n",
-       "    } else {\n",
-       "      switch (__pyx_nargs) {\n",
-       "        case 14: values[13] = __Pyx_Arg_VARARGS(__pyx_args, 13);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 13: values[12] = __Pyx_Arg_VARARGS(__pyx_args, 12);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 12: values[11] = __Pyx_Arg_VARARGS(__pyx_args, 11);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 11: values[10] = __Pyx_Arg_VARARGS(__pyx_args, 10);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case 10: values[9] = __Pyx_Arg_VARARGS(__pyx_args, 9);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  9: values[8] = __Pyx_Arg_VARARGS(__pyx_args, 8);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  8: values[7] = __Pyx_Arg_VARARGS(__pyx_args, 7);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  7: values[6] = __Pyx_Arg_VARARGS(__pyx_args, 6);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  6: values[5] = __Pyx_Arg_VARARGS(__pyx_args, 5);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);\n",
-       "        CYTHON_FALLTHROUGH;\n",
-       "        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);\n",
-       "        values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);\n",
-       "        values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);\n",
-       "        break;\n",
-       "        default: goto __pyx_L5_argtuple_error;\n",
-       "      }\n",
-       "    }\n",
-       "    __pyx_v_diffeq = values[0];\n",
-       "    __pyx_v_t_span = __pyx_convert__from_py___pyx_ctuple_double__and_double(values[1]); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 84, __pyx_L3_error)\n",
-       "    __pyx_v_y0 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex__const__(values[2], 0); if (unlikely(!__pyx_v_y0.memview)) __PYX_ERR(0, 85, __pyx_L3_error)\n",
-       "    __pyx_v_args = ((PyObject*)values[3]);\n",
-       "    if (values[4]) {\n",
-       "      __pyx_v_rtol = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_rtol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rtol = __pyx_dynamic_args->__pyx_arg_rtol;\n",
-       "    }\n",
-       "    if (values[5]) {\n",
-       "      __pyx_v_atol = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_atol == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_atol = __pyx_dynamic_args->__pyx_arg_atol;\n",
-       "    }\n",
-       "    if (values[6]) {\n",
-       "      __pyx_v_max_step = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_max_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_max_step = __pyx_dynamic_args->__pyx_arg_max_step;\n",
-       "    }\n",
-       "    if (values[7]) {\n",
-       "      __pyx_v_first_step = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_first_step == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_first_step = __pyx_dynamic_args->__pyx_arg_first_step;\n",
-       "    }\n",
-       "    if (values[8]) {\n",
-       "      __pyx_v_rk_method = __Pyx_PyInt_As_unsigned_char(values[8]); if (unlikely((__pyx_v_rk_method == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 91, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_rk_method = __pyx_dynamic_args->__pyx_arg_rk_method;\n",
-       "    }\n",
-       "    if (values[9]) {\n",
-       "      __pyx_v_t_eval = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_eval.memview)) __PYX_ERR(0, 92, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_t_eval = __pyx_dynamic_args->__pyx_arg_t_eval;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "    }\n",
-       "    if (values[10]) {\n",
-       "      __pyx_v_capture_extra = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_capture_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_capture_extra = __pyx_dynamic_args->__pyx_arg_capture_extra;\n",
-       "    }\n",
-       "    if (values[11]) {\n",
-       "      __pyx_v_num_extra = __Pyx_PyInt_As_short(values[11]); if (unlikely((__pyx_v_num_extra == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 94, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_num_extra = __pyx_dynamic_args->__pyx_arg_num_extra;\n",
-       "    }\n",
-       "    if (values[12]) {\n",
-       "      __pyx_v_interpolate_extra = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_interpolate_extra == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_interpolate_extra = __pyx_dynamic_args->__pyx_arg_interpolate_extra;\n",
-       "    }\n",
-       "    if (values[13]) {\n",
-       "      __pyx_v_expected_size = __Pyx_PyInt_As_unsigned_int(values[13]); if (unlikely((__pyx_v_expected_size == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L3_error)\n",
-       "    } else {\n",
-       "      __pyx_v_expected_size = __pyx_dynamic_args->__pyx_arg_expected_size;\n",
-       "    }\n",
-       "  }\n",
-       "  goto __pyx_L4_argument_unpacking_done;\n",
-       "  __pyx_L5_argtuple_error:;\n",
-       "  __Pyx_RaiseArgtupleInvalid(\"cyrk_ode\", 0, 3, 14, __pyx_nargs); __PYX_ERR(0, 82, __pyx_L3_error)\n",
-       "  __pyx_L3_error:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cyrk_ode\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return NULL;\n",
-       "  __pyx_L4_argument_unpacking_done:;\n",
-       "  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, \"args\", 1))) __PYX_ERR(0, 86, __pyx_L1_error)\n",
-       "  __pyx_r = __pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_4cyrk_ode(__pyx_self, __pyx_v_diffeq, __pyx_v_t_span, __pyx_v_y0, __pyx_v_args, __pyx_v_rtol, __pyx_v_atol, __pyx_v_max_step, __pyx_v_first_step, __pyx_v_rk_method, __pyx_v_t_eval, __pyx_v_capture_extra, __pyx_v_num_extra, __pyx_v_interpolate_extra, __pyx_v_expected_size);\n",
-       "  int __pyx_lineno = 0;\n",
-       "  const char *__pyx_filename = NULL;\n",
-       "  int __pyx_clineno = 0;\n",
-       "\n",
-       "  /* function exit code */\n",
-       "  goto __pyx_L0;\n",
-       "  __pyx_L1_error:;\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_t_eval, 1);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "\n",
-       "static PyObject *__pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_4cyrk_ode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_diffeq, __pyx_ctuple_double__and_double __pyx_v_t_span, __Pyx_memviewslice __pyx_v_y0, PyObject *__pyx_v_args, double __pyx_v_rtol, double __pyx_v_atol, double __pyx_v_max_step, double __pyx_v_first_step, unsigned char __pyx_v_rk_method, __Pyx_memviewslice __pyx_v_t_eval, bool __pyx_v_capture_extra, short __pyx_v_num_extra, bool __pyx_v_interpolate_extra, unsigned int __pyx_v_expected_size) {\n",
-       "  Py_ssize_t __pyx_v_s;\n",
-       "  Py_ssize_t __pyx_v_i;\n",
-       "  Py_ssize_t __pyx_v_j;\n",
-       "  unsigned short __pyx_v_y_size;\n",
-       "  double __pyx_v_y_size_dbl;\n",
-       "  double __pyx_v_y_size_sqrt;\n",
-       "  CYTHON_UNUSED bool __pyx_v_y_is_complex;\n",
-       "  PyObject *__pyx_v_DTYPE = NULL;\n",
-       "  double __pyx_v_t_start;\n",
-       "  double __pyx_v_t_end;\n",
-       "  double __pyx_v_t_delta;\n",
-       "  double __pyx_v_t_delta_abs;\n",
-       "  double __pyx_v_direction;\n",
-       "  double __pyx_v_direction_inf;\n",
-       "  double __pyx_v_t_old;\n",
-       "  double __pyx_v_t_new;\n",
-       "  double __pyx_v_time_;\n",
-       "  double __pyx_v_temp_expected_size;\n",
-       "  unsigned int __pyx_v_expected_size_to_use;\n",
-       "  unsigned int __pyx_v_num_concats;\n",
-       "  unsigned int __pyx_v_len_teval;\n",
-       "  bool __pyx_v_use_args;\n",
-       "  bool __pyx_v_success;\n",
-       "  bool __pyx_v_step_accepted;\n",
-       "  bool __pyx_v_step_rejected;\n",
-       "  bool __pyx_v_step_error;\n",
-       "  bool __pyx_v_run_interpolation;\n",
-       "  bool __pyx_v_store_extras_during_integration;\n",
-       "  PyObject *__pyx_v_y_new = NULL;\n",
-       "  PyObject *__pyx_v_y_old = NULL;\n",
-       "  PyObject *__pyx_v_dydt_new = NULL;\n",
-       "  PyObject *__pyx_v_dydt_old = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_dydt_old_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __pyx_t_double_complex __pyx_v_y_value;\n",
-       "  unsigned short __pyx_v_extra_start;\n",
-       "  unsigned short __pyx_v_total_size;\n",
-       "  unsigned short __pyx_v_store_loop_size;\n",
-       "  PyObject *__pyx_v_diffeq_out = NULL;\n",
-       "  PyObject *__pyx_v_y_result_store = NULL;\n",
-       "  PyObject *__pyx_v_y0_plus_extra = NULL;\n",
-       "  PyObject *__pyx_v_extra_result = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_diffeq_out_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_y_result_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y0_plus_extra_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_extra_result_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y0_to_store = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_y0_to_store_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  CYTHON_UNUSED unsigned char __pyx_v_rk_order;\n",
-       "  unsigned char __pyx_v_error_order;\n",
-       "  unsigned char __pyx_v_rk_n_stages;\n",
-       "  unsigned char __pyx_v_rk_n_stages_plus1;\n",
-       "  CYTHON_UNUSED unsigned char __pyx_v_rk_n_stages_extended;\n",
-       "  double __pyx_v_error_pow;\n",
-       "  double __pyx_v_error_expo;\n",
-       "  double __pyx_v_error_norm5;\n",
-       "  double __pyx_v_error_norm3;\n",
-       "  double __pyx_v_error_norm;\n",
-       "  double __pyx_v_error_norm_abs;\n",
-       "  double __pyx_v_error_norm3_abs;\n",
-       "  double __pyx_v_error_norm5_abs;\n",
-       "  double __pyx_v_error_denom;\n",
-       "  unsigned char __pyx_v_len_C;\n",
-       "  unsigned char __pyx_v_len_B;\n",
-       "  unsigned char __pyx_v_len_E;\n",
-       "  unsigned char __pyx_v_len_E3;\n",
-       "  unsigned char __pyx_v_len_E5;\n",
-       "  unsigned char __pyx_v_len_A0;\n",
-       "  unsigned char __pyx_v_len_A1;\n",
-       "  PyObject *__pyx_v_A = NULL;\n",
-       "  PyObject *__pyx_v_B = NULL;\n",
-       "  PyObject *__pyx_v_C = NULL;\n",
-       "  PyObject *__pyx_v_E = NULL;\n",
-       "  PyObject *__pyx_v_E3 = NULL;\n",
-       "  PyObject *__pyx_v_E5 = NULL;\n",
-       "  PyObject *__pyx_v_E_tmp = NULL;\n",
-       "  PyObject *__pyx_v_E3_tmp = NULL;\n",
-       "  PyObject *__pyx_v_E5_tmp = NULL;\n",
-       "  PyObject *__pyx_v_K = NULL;\n",
-       "  __Pyx_memviewslice __pyx_v_B_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E3_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E5_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E3_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_E5_tmp_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_A_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_K_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_C_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_y_results_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_y_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_time_domain_array_new_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  __Pyx_memviewslice __pyx_v_solution_t_view = { 0, 0, { 0 }, { 0 }, { 0 } };\n",
-       "  PyObject *__pyx_v_y_results_array = NULL;\n",
-       "  PyObject *__pyx_v_time_domain_array = NULL;\n",
-       "  double __pyx_v_step_size;\n",
-       "  double __pyx_v_d0;\n",
-       "  double __pyx_v_d1;\n",
-       "  double __pyx_v_d2;\n",
-       "  double __pyx_v_d0_abs;\n",
-       "  double __pyx_v_d1_abs;\n",
-       "  double __pyx_v_d2_abs;\n",
-       "  double __pyx_v_h0;\n",
-       "  double __pyx_v_h1;\n",
-       "  double __pyx_v_scale;\n",
-       "  double __pyx_v_h0_direction;\n",
-       "  double __pyx_v_min_step;\n",
-       "  double __pyx_v_step_factor;\n",
-       "  double __pyx_v_step;\n",
-       "  double __pyx_v_c;\n",
-       "  __pyx_t_double_complex __pyx_v_K_scale;\n",
-       "  char __pyx_v_status;\n",
-       "  unsigned int __pyx_v_len_t;\n",
-       "  unsigned int __pyx_v_new_size;\n",
-       "  PyObject *__pyx_v_time_domain_array_new = NULL;\n",
-       "  PyObject *__pyx_v_y_results_array_new = NULL;\n",
-       "  PyObject *__pyx_v_message = 0;\n",
-       "  PyObject *__pyx_v_solution_y = NULL;\n",
-       "  PyObject *__pyx_v_solution_t = NULL;\n",
-       "  PyObject *__pyx_v_y_results_reduced = NULL;\n",
-       "  PyObject *__pyx_v_y_result_timeslice = NULL;\n",
-       "  PyObject *__pyx_v_y_result_temp = NULL;\n",
-       "  PyObject *__pyx_v_y_results_reduced_view = NULL;\n",
-       "  PyObject *__pyx_v_y_result_timeslice_view = NULL;\n",
-       "  PyObject *__pyx_v_y_result_temp_view = NULL;\n",
-       "  PyObject *__pyx_v_y_interp = NULL;\n",
-       "  PyObject *__pyx_v_y_interp_view = NULL;\n",
-       "  PyObject *__pyx_r = NULL;\n",
-       "  __Pyx_RefNannyDeclarations\n",
-       "  __Pyx_RefNannySetupContext(\"__pyx_fuse_1cyrk_ode\", 0);\n",
-       "/* … */\n",
-       "  /* function exit code */\n",
-       "  __pyx_L1_error:;\n",
-       "  __Pyx_XDECREF(__pyx_t_1);\n",
-       "  __Pyx_XDECREF(__pyx_t_2);\n",
-       "  __Pyx_XDECREF(__pyx_t_7);\n",
-       "  __Pyx_XDECREF(__pyx_t_8);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "  __Pyx_XDECREF(__pyx_t_15);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_16, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_17, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_t_36, 1);\n",
-       "  __Pyx_AddTraceback(\"_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1.cyrk_ode\", __pyx_clineno, __pyx_lineno, __pyx_filename);\n",
-       "  __pyx_r = NULL;\n",
-       "  __pyx_L0:;\n",
-       "  __Pyx_XDECREF(__pyx_v_DTYPE);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_old);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_dydt_old);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_old_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_dydt_old_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_diffeq_out);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_store);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_plus_extra);\n",
-       "  __Pyx_XDECREF(__pyx_v_extra_result);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_diffeq_out_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_result_store_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_plus_extra_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_extra_result_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y0_to_store);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y0_to_store_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_A);\n",
-       "  __Pyx_XDECREF(__pyx_v_B);\n",
-       "  __Pyx_XDECREF(__pyx_v_C);\n",
-       "  __Pyx_XDECREF(__pyx_v_E);\n",
-       "  __Pyx_XDECREF(__pyx_v_E3);\n",
-       "  __Pyx_XDECREF(__pyx_v_E5);\n",
-       "  __Pyx_XDECREF(__pyx_v_E_tmp);\n",
-       "  __Pyx_XDECREF(__pyx_v_E3_tmp);\n",
-       "  __Pyx_XDECREF(__pyx_v_E5_tmp);\n",
-       "  __Pyx_XDECREF(__pyx_v_K);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_B_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E_tmp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E3_tmp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_E5_tmp_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_A_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_K_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_C_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "  __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array);\n",
-       "  __Pyx_XDECREF(__pyx_v_time_domain_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_array_new);\n",
-       "  __Pyx_XDECREF(__pyx_v_message);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_y);\n",
-       "  __Pyx_XDECREF(__pyx_v_solution_t);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_reduced);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_temp);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_results_reduced_view);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_timeslice_view);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_result_temp_view);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_interp);\n",
-       "  __Pyx_XDECREF(__pyx_v_y_interp_view);\n",
-       "  __Pyx_XGIVEREF(__pyx_r);\n",
-       "  __Pyx_RefNannyFinishContext();\n",
-       "  return __pyx_r;\n",
-       "}\n",
-       "/* … */\n",
-       "  __pyx_t_26 = PyTuple_New(11); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_26);\n",
-       "  __Pyx_INCREF(__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_4);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 1, __pyx_t_4);\n",
-       "  __Pyx_GIVEREF(__pyx_t_18);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 2, __pyx_t_18);\n",
-       "  __Pyx_GIVEREF(__pyx_t_19);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 3, __pyx_t_19);\n",
-       "  __Pyx_GIVEREF(__pyx_t_20);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 4, __pyx_t_20);\n",
-       "  __Pyx_GIVEREF(__pyx_t_21);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 5, __pyx_t_21);\n",
-       "  __Pyx_INCREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 6, __pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_22);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 7, __pyx_t_22);\n",
-       "  __Pyx_GIVEREF(__pyx_t_23);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 8, __pyx_t_23);\n",
-       "  __Pyx_GIVEREF(__pyx_t_24);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 9, __pyx_t_24);\n",
-       "  __Pyx_GIVEREF(__pyx_t_25);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_26, 10, __pyx_t_25);\n",
-       "  __pyx_t_4 = 0;\n",
-       "  __pyx_t_18 = 0;\n",
-       "  __pyx_t_19 = 0;\n",
-       "  __pyx_t_20 = 0;\n",
-       "  __pyx_t_21 = 0;\n",
-       "  __pyx_t_22 = 0;\n",
-       "  __pyx_t_23 = 0;\n",
-       "  __pyx_t_24 = 0;\n",
-       "  __pyx_t_25 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__30 = PyTuple_Pack(145, __pyx_n_s_diffeq, __pyx_n_s_t_span, __pyx_n_s_y0, __pyx_n_s_args, __pyx_n_s_rtol, __pyx_n_s_atol, __pyx_n_s_max_step, __pyx_n_s_first_step, __pyx_n_s_rk_method, __pyx_n_s_t_eval, __pyx_n_s_capture_extra, __pyx_n_s_num_extra, __pyx_n_s_interpolate_extra, __pyx_n_s_expected_size, __pyx_n_s_s, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_y_size, __pyx_n_s_y_size_dbl, __pyx_n_s_y_size_sqrt, __pyx_n_s_y_is_complex, __pyx_n_s_DTYPE, __pyx_n_s_t_start, __pyx_n_s_t_end, __pyx_n_s_t_delta, __pyx_n_s_t_delta_abs, __pyx_n_s_direction, __pyx_n_s_direction_inf, __pyx_n_s_t_old, __pyx_n_s_t_new, __pyx_n_s_time, __pyx_n_s_temp_expected_size, __pyx_n_s_expected_size_to_use, __pyx_n_s_num_concats, __pyx_n_s_len_teval, __pyx_n_s_use_args, __pyx_n_s_success, __pyx_n_s_step_accepted, __pyx_n_s_step_rejected, __pyx_n_s_step_error, __pyx_n_s_run_interpolation, __pyx_n_s_store_extras_during_integration, __pyx_n_s_y_new, __pyx_n_s_y_old, __pyx_n_s_dydt_new, __pyx_n_s_dydt_old, __pyx_n_s_y_new_view, __pyx_n_s_y_old_view, __pyx_n_s_dydt_new_view, __pyx_n_s_dydt_old_view, __pyx_n_s_y_value, __pyx_n_s_extra_start, __pyx_n_s_total_size, __pyx_n_s_store_loop_size, __pyx_n_s_diffeq_out, __pyx_n_s_y_result_store, __pyx_n_s_y0_plus_extra, __pyx_n_s_extra_result, __pyx_n_s_diffeq_out_view, __pyx_n_s_y_result_store_view, __pyx_n_s_y0_plus_extra_view, __pyx_n_s_extra_result_view, __pyx_n_s_y0_to_store, __pyx_n_s_y0_to_store_view, __pyx_n_s_rk_order, __pyx_n_s_error_order, __pyx_n_s_rk_n_stages, __pyx_n_s_rk_n_stages_plus1, __pyx_n_s_rk_n_stages_extended, __pyx_n_s_error_pow, __pyx_n_s_error_expo, __pyx_n_s_error_norm5, __pyx_n_s_error_norm3, __pyx_n_s_error_norm, __pyx_n_s_error_norm_abs, __pyx_n_s_error_norm3_abs, __pyx_n_s_error_norm5_abs, __pyx_n_s_error_denom, __pyx_n_s_len_C, __pyx_n_s_len_B, __pyx_n_s_len_E, __pyx_n_s_len_E3, __pyx_n_s_len_E5, __pyx_n_s_len_A0, __pyx_n_s_len_A1, __pyx_n_s_A, __pyx_n_s_B, __pyx_n_s_C, __pyx_n_s_E, __pyx_n_s_E3, __pyx_n_s_E5, __pyx_n_s_E_tmp, __pyx_n_s_E3_tmp, __pyx_n_s_E5_tmp, __pyx_n_s_K, __pyx_n_s_B_view, __pyx_n_s_E_view, __pyx_n_s_E3_view, __pyx_n_s_E5_view, __pyx_n_s_E_tmp_view, __pyx_n_s_E3_tmp_view, __pyx_n_s_E5_tmp_view, __pyx_n_s_A_view, __pyx_n_s_K_view, __pyx_n_s_C_view, __pyx_n_s_y_results_array_view, __pyx_n_s_y_results_array_new_view, __pyx_n_s_solution_y_view, __pyx_n_s_time_domain_array_view, __pyx_n_s_time_domain_array_new_view, __pyx_n_s_solution_t_view, __pyx_n_s_y_results_array, __pyx_n_s_time_domain_array, __pyx_n_s_step_size, __pyx_n_s_d0, __pyx_n_s_d1, __pyx_n_s_d2, __pyx_n_s_d0_abs, __pyx_n_s_d1_abs, __pyx_n_s_d2_abs, __pyx_n_s_h0, __pyx_n_s_h1, __pyx_n_s_scale, __pyx_n_s_h0_direction, __pyx_n_s_min_step, __pyx_n_s_step_factor, __pyx_n_s_step, __pyx_n_s_c, __pyx_n_s_K_scale, __pyx_n_s_status, __pyx_n_s_len_t, __pyx_n_s_new_size, __pyx_n_s_time_domain_array_new, __pyx_n_s_y_results_array_new, __pyx_n_s_message, __pyx_n_s_solution_y, __pyx_n_s_solution_t, __pyx_n_s_y_results_reduced, __pyx_n_s_y_result_timeslice, __pyx_n_s_y_result_temp, __pyx_n_s_y_results_reduced_view, __pyx_n_s_y_result_timeslice_view, __pyx_n_s_y_result_temp_view, __pyx_n_s_y_interp, __pyx_n_s_y_interp_view); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__30);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__30);\n",
-       "  __pyx_t_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_25);\n",
-       "  __pyx_t_24 = __pyx_FusedFunction_New(&__pyx_fuse_0__pyx_mdef_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_3cyrk_ode, 0, __pyx_n_s_cyrk_ode, NULL, __pyx_n_s_cython_magic_db7970e540fc813545, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_24);\n",
-       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_24, sizeof(__pyx_defaults5), 1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_args = ((PyObject*)__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  __Pyx_INCREF(__pyx_t_5);\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_rtol = __pyx_t_10;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_atol = __pyx_t_11;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_max_step = __pyx_t_12;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_first_step = __pyx_t_13;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_rk_method = __pyx_t_14;\n",
-       "/* … */\n",
-       "  __pyx_t_24 = __pyx_FusedFunction_New(&__pyx_fuse_1__pyx_mdef_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_5cyrk_ode, 0, __pyx_n_s_cyrk_ode, NULL, __pyx_n_s_cython_magic_db7970e540fc813545, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_24);\n",
-       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_24, sizeof(__pyx_defaults6), 1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_args = ((PyObject*)__pyx_t_5);\n",
-       "  __Pyx_GIVEREF(__pyx_t_5);\n",
-       "  __Pyx_INCREF(__pyx_t_5);\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_rtol = __pyx_t_10;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_atol = __pyx_t_11;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_max_step = __pyx_t_12;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_first_step = __pyx_t_13;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_rk_method = __pyx_t_14;\n",
-       "/* … */\n",
-       "  __pyx_t_24 = __pyx_FusedFunction_New(&__pyx_mdef_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_1cyrk_ode, 0, __pyx_n_s_cyrk_ode, NULL, __pyx_n_s_cython_magic_db7970e540fc813545, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_24);\n",
-       "  if (!__Pyx_CyFunction_InitDefaults(__pyx_t_24, sizeof(__pyx_defaults2), 1)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __pyx_t_23 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_23);\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_t_24)->__pyx_arg__fused_sigindex = __pyx_t_23;\n",
-       "  __Pyx_GIVEREF(__pyx_t_23);\n",
-       "  __pyx_t_23 = 0;\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_24, __pyx_t_26);\n",
-       "  ((__pyx_FusedFunctionObject *) __pyx_t_24)->__signatures__ = __pyx_t_25;\n",
-       "  __Pyx_GIVEREF(__pyx_t_25);\n",
-       "  __pyx_t_25 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cyrk_ode, __pyx_t_24) < 0) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 083:     diffeq,
\n", - "
+084:     (double, double) t_span,
\n", - "
struct __pyx_ctuple_double__and_double {\n",
-       "  double f0;\n",
-       "  double f1;\n",
-       "};\n",
-       "
 085:     const double_numeric[:] y0,
\n", - "
+086:     tuple args = None,
\n", - "
  __pyx_t_5 = Py_None;\n",
-       "  __Pyx_INCREF(__pyx_t_5);\n",
-       "
+087:     double rtol = 1.e-6,
\n", - "
  __pyx_t_10 = 1.e-6;\n",
-       "/* … */\n",
-       "  __pyx_t_4 = PyFloat_FromDouble(__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_4);\n",
-       "
+088:     double atol = 1.e-8,
\n", - "
  __pyx_t_11 = 1.e-8;\n",
-       "/* … */\n",
-       "  __pyx_t_18 = PyFloat_FromDouble(__pyx_t_11); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 88, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_18);\n",
-       "
+089:     double max_step = MAX_STEP,
\n", - "
  __pyx_t_12 = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_STEP;\n",
-       "/* … */\n",
-       "  __pyx_t_19 = PyFloat_FromDouble(__pyx_t_12); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 89, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_19);\n",
-       "
+090:     double first_step = 0.,
\n", - "
  __pyx_t_13 = 0.;\n",
-       "/* … */\n",
-       "  __pyx_t_20 = PyFloat_FromDouble(__pyx_t_13); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 90, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_20);\n",
-       "
+091:     unsigned char rk_method = 1,
\n", - "
  __pyx_t_14 = 1;\n",
-       "/* … */\n",
-       "  __pyx_t_21 = __Pyx_PyInt_From_long(__pyx_t_14); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 91, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_21);\n",
-       "
+092:     double[:] t_eval = None,
\n", - "
  __pyx_t_7 = Py_None;\n",
-       "  __Pyx_INCREF(__pyx_t_7);\n",
-       "/* … */\n",
-       "  __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 92, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_t_eval = __pyx_t_27;\n",
-       "  __pyx_t_27.memview = NULL;\n",
-       "  __pyx_t_27.data = NULL;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_capture_extra = __pyx_t_6;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_num_extra = __pyx_t_15;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_interpolate_extra = __pyx_t_16;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_24)->__pyx_arg_expected_size = __pyx_t_17;\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_24, __pyx_t_26);\n",
-       "  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_24, __pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_16__defaults__);\n",
-       "  if (PyDict_SetItem(__pyx_t_25, __pyx_n_s_double, __pyx_t_24) < 0) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 92, __pyx_L1_error)\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_t_eval = __pyx_t_27;\n",
-       "  __pyx_t_27.memview = NULL;\n",
-       "  __pyx_t_27.data = NULL;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_capture_extra = __pyx_t_6;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_num_extra = __pyx_t_15;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_interpolate_extra = __pyx_t_16;\n",
-       "  __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_24)->__pyx_arg_expected_size = __pyx_t_17;\n",
-       "  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_24, __pyx_t_26);\n",
-       "  __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_24, __pyx_pf_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_18__defaults__);\n",
-       "  if (PyDict_SetItem(__pyx_t_25, __pyx_kp_s_double_complex, __pyx_t_24) < 0) __PYX_ERR(0, 82, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;\n",
-       "
+093:     bool_cpp_t capture_extra = False,
\n", - "
  __pyx_t_6 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_22 = __Pyx_PyBool_FromLong(__pyx_t_6); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 93, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_22);\n",
-       "
+094:     short num_extra = 0,
\n", - "
  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_23 = __Pyx_PyInt_From_long(__pyx_t_15); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 94, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_23);\n",
-       "
+095:     bool_cpp_t interpolate_extra = False,
\n", - "
  __pyx_t_16 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_24 = __Pyx_PyBool_FromLong(__pyx_t_16); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 95, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_24);\n",
-       "
+096:     unsigned int expected_size = 0
\n", - "
  __pyx_t_17 = 0;\n",
-       "/* … */\n",
-       "  __pyx_t_25 = __Pyx_PyInt_From_long(__pyx_t_17); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 96, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_25);\n",
-       "
 097:     ):
\n", - "
 098:     """ A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.
\n", - "
 099: 
\n", - "
 100:     Parameters
\n", - "
 101:     ----------
\n", - "
 102:     diffeq : callable
\n", - "
 103:         An njit-compiled function that defines the derivatives of the problem.
\n", - "
 104:     t_span : Tuple[float, float]
\n", - "
 105:         A tuple of the beginning and end of the integration domain's dependent variables.
\n", - "
 106:     y0 : np.ndarray
\n", - "
 107:         1D array of the initial values of the problem at t_span[0]
\n", - "
 108:     args : tuple = tuple()
\n", - "
 109:         Any additional arguments that are passed to dffeq.
\n", - "
 110:     rtol : float = 1.e-6
\n", - "
 111:         Integration relative tolerance used to determine optimal step size.
\n", - "
 112:     atol : float = 1.e-8
\n", - "
 113:         Integration absolute tolerance used to determine optimal step size.
\n", - "
 114:     max_step : float = np.inf
\n", - "
 115:         Maximum allowed step size.
\n", - "
 116:     first_step : float = None
\n", - "
 117:         Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.
\n", - "
 118:     rk_method : int = 1
\n", - "
 119:         The type of RK method used for integration
\n", - "
 120:             0 = RK23
\n", - "
 121:             1 = RK45
\n", - "
 122:             2 = DOP853
\n", - "
 123:     t_eval : np.ndarray = None
\n", - "
 124:         If provided, then the function will interpolate the integration results to provide them at the
\n", - "
 125:             requested t-steps.
\n", - "
 126:     capture_extra : bool = False
\n", - "
 127:         If True, then additional output from the differential equation will be collected (but not used to determine
\n", - "
 128:          integration error).
\n", - "
 129:          Example:
\n", - "
 130:             ```
\n", - "
 131:             def diffeq(t, y, dy):
\n", - "
 132:                 a = ... some function of y and t.
\n", - "
 133:                 dy[0] = a**2 * sin(t) - y[1]
\n", - "
 134:                 dy[1] = a**3 * cos(t) + y[0]
\n", - "
 135: 
\n", - "
 136:                 # Storing extra output in dy even though it is not part of the diffeq.
\n", - "
 137:                 dy[2] = a
\n", - "
 138:             ```
\n", - "
 139:     num_extra : int = 0
\n", - "
 140:         The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.
\n", - "
 141:     interpolate_extra : bool = False
\n", - "
 142:         If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each
\n", - "
 143:          step in `t_eval`.
\n", - "
 144:     expected_size : int = 0
\n", - "
 145:         The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.
\n", - "
 146:         If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.
\n", - "
 147:         It is better to overshoot than undershoot this guess.
\n", - "
 148: 
\n", - "
 149:     Returns
\n", - "
 150:     -------
\n", - "
 151:     time_domain : np.ndarray
\n", - "
 152:         The final time domain. This is equal to t_eval if it was provided.
\n", - "
 153:     y_results : np.ndarray
\n", - "
 154:         The solution of the differential equation provided for each time_result.
\n", - "
 155:     success : bool
\n", - "
 156:         Final integration success flag.
\n", - "
 157:     message : str
\n", - "
 158:         Any integration messages, useful if success=False.
\n", - "
 159: 
\n", - "
 160:     """
\n", - "
 161:     # Setup loop variables
\n", - "
 162:     cdef Py_ssize_t s, i, j
\n", - "
 163: 
\n", - "
 164:     # Determine information about the differential equation based on its initial conditions
\n", - "
 165:     cdef unsigned short y_size
\n", - "
 166:     cdef double y_size_dbl, y_size_sqrt
\n", - "
 167:     cdef bool_cpp_t y_is_complex
\n", - "
+168:     y_size = y0.size
\n", - "
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get_double__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = __Pyx_PyInt_As_unsigned_short(__pyx_t_2); if (unlikely((__pyx_t_3 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_size = __pyx_t_3;\n",
-       "/* … */\n",
-       "  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_y0, 1, (PyObject *(*)(char *)) __pyx_memview_get___pyx_t_double_complex__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_3 = __Pyx_PyInt_As_unsigned_short(__pyx_t_2); if (unlikely((__pyx_t_3 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_size = __pyx_t_3;\n",
-       "
+169:     y_is_complex = False
\n", - "
  __pyx_v_y_is_complex = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_y_is_complex = 0;\n",
-       "
+170:     y_size_dbl = <double>y_size
\n", - "
  __pyx_v_y_size_dbl = ((double)__pyx_v_y_size);\n",
-       "/* … */\n",
-       "  __pyx_v_y_size_dbl = ((double)__pyx_v_y_size);\n",
-       "
+171:     y_size_sqrt = sqrt(y_size_dbl)
\n", - "
  __pyx_v_y_size_sqrt = sqrt(__pyx_v_y_size_dbl);\n",
-       "/* … */\n",
-       "  __pyx_v_y_size_sqrt = sqrt(__pyx_v_y_size_dbl);\n",
-       "
 172: 
\n", - "
 173:     # Check the type of the values in y0
\n", - "
 174:     if double_numeric is cython.double:
\n", - "
+175:         DTYPE = np.float64
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_DTYPE = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
 176:     elif double_numeric is cython.doublecomplex:
\n", - "
+177:         DTYPE = np.complex128
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_complex128); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_DTYPE = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+178:         y_is_complex = True
\n", - "
  __pyx_v_y_is_complex = 1;\n",
-       "
 179:     else:
\n", - "
 180:         # Cyrk only supports float64 and complex128.
\n", - "
 181:         raise Exception('Unexpected type found for initial conditions (y0).')
\n", - "
 182: 
\n", - "
 183:     # Build time domain
\n", - "
 184:     cdef double t_start, t_end, t_delta, t_delta_abs, direction, direction_inf, t_old, t_new, time_
\n", - "
+185:     t_start = t_span[0]
\n", - "
  __pyx_v_t_start = __pyx_v_t_span.f0;\n",
-       "/* … */\n",
-       "  __pyx_v_t_start = __pyx_v_t_span.f0;\n",
-       "
+186:     t_end   = t_span[1]
\n", - "
  __pyx_v_t_end = __pyx_v_t_span.f1;\n",
-       "/* … */\n",
-       "  __pyx_v_t_end = __pyx_v_t_span.f1;\n",
-       "
+187:     t_delta = t_end - t_start
\n", - "
  __pyx_v_t_delta = (__pyx_v_t_end - __pyx_v_t_start);\n",
-       "/* … */\n",
-       "  __pyx_v_t_delta = (__pyx_v_t_end - __pyx_v_t_start);\n",
-       "
+188:     t_delta_abs = fabs(t_delta)
\n", - "
  __pyx_v_t_delta_abs = fabs(__pyx_v_t_delta);\n",
-       "/* … */\n",
-       "  __pyx_v_t_delta_abs = fabs(__pyx_v_t_delta);\n",
-       "
+189:     if t_delta >= 0.:
\n", - "
  __pyx_t_4 = (__pyx_v_t_delta >= 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_t_delta >= 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L3;\n",
-       "  }\n",
-       "
+190:         direction = 1.
\n", - "
    __pyx_v_direction = 1.;\n",
-       "/* … */\n",
-       "    __pyx_v_direction = 1.;\n",
-       "
 191:     else:
\n", - "
+192:         direction = -1.
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_direction = -1.;\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_direction = -1.;\n",
-       "  }\n",
-       "  __pyx_L3:;\n",
-       "
+193:     direction_inf = direction * INF
\n", - "
  __pyx_v_direction_inf = (__pyx_v_direction * __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_INF);\n",
-       "/* … */\n",
-       "  __pyx_v_direction_inf = (__pyx_v_direction * __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_INF);\n",
-       "
 194: 
\n", - "
 195:     # Expected size of output arrays.
\n", - "
 196:     cdef double temp_expected_size
\n", - "
 197:     cdef unsigned int expected_size_to_use, num_concats
\n", - "
+198:     if expected_size == 0:
\n", - "
  __pyx_t_4 = (__pyx_v_expected_size == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L4;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_expected_size == 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L4;\n",
-       "  }\n",
-       "
 199:         # CySolver will attempt to guess on a best size for the arrays.
\n", - "
+200:         temp_expected_size = 100. * t_delta_abs
\n", - "
    __pyx_v_temp_expected_size = (100. * __pyx_v_t_delta_abs);\n",
-       "/* … */\n",
-       "    __pyx_v_temp_expected_size = (100. * __pyx_v_t_delta_abs);\n",
-       "
+201:         temp_expected_size = fmax(temp_expected_size, 100.)
\n", - "
    __pyx_v_temp_expected_size = fmax(__pyx_v_temp_expected_size, 100.);\n",
-       "/* … */\n",
-       "    __pyx_v_temp_expected_size = fmax(__pyx_v_temp_expected_size, 100.);\n",
-       "
+202:         temp_expected_size = fmin(temp_expected_size, 10_000_000.)
\n", - "
    __pyx_v_temp_expected_size = fmin(__pyx_v_temp_expected_size, 10000000.);\n",
-       "/* … */\n",
-       "    __pyx_v_temp_expected_size = fmin(__pyx_v_temp_expected_size, 10000000.);\n",
-       "
+203:         expected_size_to_use = <unsigned int>temp_expected_size
\n", - "
    __pyx_v_expected_size_to_use = ((unsigned int)__pyx_v_temp_expected_size);\n",
-       "/* … */\n",
-       "    __pyx_v_expected_size_to_use = ((unsigned int)__pyx_v_temp_expected_size);\n",
-       "
 204:     else:
\n", - "
+205:         expected_size_to_use = expected_size
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_expected_size_to_use = __pyx_v_expected_size;\n",
-       "  }\n",
-       "  __pyx_L4:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_expected_size_to_use = __pyx_v_expected_size;\n",
-       "  }\n",
-       "  __pyx_L4:;\n",
-       "
 206:     # This variable tracks how many times the storage arrays have been appended.
\n", - "
 207:     # It starts at 1 since there is at least one storage array present.
\n", - "
+208:     num_concats = 1
\n", - "
  __pyx_v_num_concats = 1;\n",
-       "/* … */\n",
-       "  __pyx_v_num_concats = 1;\n",
-       "
 209: 
\n", - "
 210:     # Pull out information on t-eval
\n", - "
 211:     cdef unsigned int len_teval
\n", - "
+212:     if t_eval is None:
\n", - "
  __pyx_t_4 = (((PyObject *) __pyx_v_t_eval.memview) == Py_None);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L5;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (((PyObject *) __pyx_v_t_eval.memview) == Py_None);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L5;\n",
-       "  }\n",
-       "
+213:         len_teval = 0
\n", - "
    __pyx_v_len_teval = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_teval = 0;\n",
-       "
 214:     else:
\n", - "
+215:         len_teval = t_eval.size
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_5 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_len_teval = __pyx_t_5;\n",
-       "  }\n",
-       "  __pyx_L5:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_t_eval, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_5 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 215, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_len_teval = __pyx_t_5;\n",
-       "  }\n",
-       "  __pyx_L5:;\n",
-       "
 216: 
\n", - "
 217:     # Pull out information on args
\n", - "
 218:     cdef bool_cpp_t use_args
\n", - "
+219:     if args is None:
\n", - "
  __pyx_t_4 = (__pyx_v_args == ((PyObject*)Py_None));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_args == ((PyObject*)Py_None));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L6;\n",
-       "  }\n",
-       "
+220:         use_args = False
\n", - "
    __pyx_v_use_args = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_use_args = 0;\n",
-       "
 221:     else:
\n", - "
+222:         use_args = True
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_use_args = 1;\n",
-       "  }\n",
-       "  __pyx_L6:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_use_args = 1;\n",
-       "  }\n",
-       "  __pyx_L6:;\n",
-       "
 223: 
\n", - "
 224:     # Set integration flags
\n", - "
 225:     cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\
\n", - "
 226:         store_extras_during_integration
\n", - "
+227:     success           = False
\n", - "
  __pyx_v_success = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_success = 0;\n",
-       "
+228:     step_accepted     = False
\n", - "
  __pyx_v_step_accepted = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_step_accepted = 0;\n",
-       "
+229:     step_rejected     = False
\n", - "
  __pyx_v_step_rejected = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_step_rejected = 0;\n",
-       "
+230:     step_error        = False
\n", - "
  __pyx_v_step_error = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_step_error = 0;\n",
-       "
+231:     run_interpolation = False
\n", - "
  __pyx_v_run_interpolation = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_run_interpolation = 0;\n",
-       "
+232:     store_extras_during_integration = capture_extra
\n", - "
  __pyx_v_store_extras_during_integration = __pyx_v_capture_extra;\n",
-       "/* … */\n",
-       "  __pyx_v_store_extras_during_integration = __pyx_v_capture_extra;\n",
-       "
+233:     if len_teval > 0:
\n", - "
  __pyx_t_4 = (__pyx_v_len_teval > 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_len_teval > 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+234:         run_interpolation = True
\n", - "
    __pyx_v_run_interpolation = 1;\n",
-       "/* … */\n",
-       "    __pyx_v_run_interpolation = 1;\n",
-       "
+235:     if run_interpolation and not interpolate_extra:
\n", - "
  __pyx_t_6 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_6) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_6;\n",
-       "    goto __pyx_L9_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_6 = (!(__pyx_v_interpolate_extra != 0));\n",
-       "  __pyx_t_4 = __pyx_t_6;\n",
-       "  __pyx_L9_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_6 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_6) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_6;\n",
-       "    goto __pyx_L9_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_6 = (!(__pyx_v_interpolate_extra != 0));\n",
-       "  __pyx_t_4 = __pyx_t_6;\n",
-       "  __pyx_L9_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 236:         # If y is eventually interpolated but the extra outputs are not being interpolated, then there is
\n", - "
 237:         #  no point in storing the values during the integration. Turn off this functionality to save
\n", - "
 238:         #  on computation.
\n", - "
+239:         store_extras_during_integration = False
\n", - "
    __pyx_v_store_extras_during_integration = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_store_extras_during_integration = 0;\n",
-       "
 240: 
\n", - "
 241:     # Initialize arrays that are based on y's size and type.
\n", - "
+242:     y_new    = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_new = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 242, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y_new = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
+243:     y_old    = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_y_old = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_y_old = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+244:     dydt_new = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_dydt_new = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_dydt_new = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+245:     dydt_old = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_dydt_old = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 245, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_dydt_old = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
 246: 
\n", - "
 247:     # Setup memory views for these arrays
\n", - "
 248:     cdef double_numeric[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view
\n", - "
+249:     y_new_view    = y_new
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 249, __pyx_L1_error)\n",
-       "  __pyx_v_y_new_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 249, __pyx_L1_error)\n",
-       "  __pyx_v_y_new_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+250:     y_old_view    = y_old
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 250, __pyx_L1_error)\n",
-       "  __pyx_v_y_old_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 250, __pyx_L1_error)\n",
-       "  __pyx_v_y_old_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+251:     dydt_new_view = dydt_new
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dydt_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 251, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_new_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_dydt_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 251, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_new_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+252:     dydt_old_view = dydt_old
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_dydt_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 252, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_old_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_dydt_old, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 252, __pyx_L1_error)\n",
-       "  __pyx_v_dydt_old_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
 253: 
\n", - "
 254:     # Store y0 into the y arrays
\n", - "
 255:     cdef double_numeric y_value
\n", - "
+256:     for i in range(y_size):
\n", - "
  __pyx_t_3 = __pyx_v_y_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_3 = __pyx_v_y_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+257:         y_value = y0[i]
\n", - "
    __pyx_t_12 = __pyx_v_i;\n",
-       "    __pyx_v_y_value = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    __pyx_v_y_value = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "
+258:         y_new_view[i] = y_value
\n", - "
    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "
+259:         y_old_view[i] = y_value
\n", - "
    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "  }\n",
-       "/* … */\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )) = __pyx_v_y_value;\n",
-       "  }\n",
-       "
 260: 
\n", - "
 261:     # If extra output is true then the output of the diffeq will be larger than the size of y0.
\n", - "
 262:     # Determine that extra size by calling the diffeq and checking its size.
\n", - "
 263:     cdef unsigned short extra_start, total_size, store_loop_size
\n", - "
+264:     extra_start = y_size
\n", - "
  __pyx_v_extra_start = __pyx_v_y_size;\n",
-       "/* … */\n",
-       "  __pyx_v_extra_start = __pyx_v_y_size;\n",
-       "
+265:     total_size  = y_size + num_extra
\n", - "
  __pyx_v_total_size = (__pyx_v_y_size + __pyx_v_num_extra);\n",
-       "/* … */\n",
-       "  __pyx_v_total_size = (__pyx_v_y_size + __pyx_v_num_extra);\n",
-       "
 266:     # Create arrays based on this total size
\n", - "
+267:     diffeq_out     = np.empty(total_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_diffeq_out = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_diffeq_out = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
+268:     y_result_store = np.empty(total_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_y_result_store = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __pyx_v_y_result_store = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+269:     y0_plus_extra  = np.empty(total_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y0_plus_extra = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 269, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_y0_plus_extra = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
+270:     extra_result   = np.empty(num_extra, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_short(__pyx_v_num_extra); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_extra_result = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_short(__pyx_v_num_extra); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_extra_result = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "
 271: 
\n", - "
 272:     # Setup memory views
\n", - "
 273:     cdef double_numeric[:] diffeq_out_view, y_result_store_view, y0_plus_extra_view, extra_result_view
\n", - "
+274:     diffeq_out_view     = diffeq_out
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_diffeq_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 274, __pyx_L1_error)\n",
-       "  __pyx_v_diffeq_out_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_diffeq_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 274, __pyx_L1_error)\n",
-       "  __pyx_v_diffeq_out_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+275:     y_result_store_view = y_result_store
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
-       "  __pyx_v_y_result_store_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 275, __pyx_L1_error)\n",
-       "  __pyx_v_y_result_store_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+276:     y0_plus_extra_view  = y0_plus_extra
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y0_plus_extra, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 276, __pyx_L1_error)\n",
-       "  __pyx_v_y0_plus_extra_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y0_plus_extra, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 276, __pyx_L1_error)\n",
-       "  __pyx_v_y0_plus_extra_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+277:     extra_result_view   = extra_result
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_extra_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 277, __pyx_L1_error)\n",
-       "  __pyx_v_extra_result_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_extra_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 277, __pyx_L1_error)\n",
-       "  __pyx_v_extra_result_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
 278: 
\n", - "
 279:     # Capture the extra output for the initial condition.
\n", - "
+280:     if capture_extra:
\n", - "
  __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L13;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L13;\n",
-       "  }\n",
-       "
+281:         if use_args:
\n", - "
    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L14;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L14;\n",
-       "    }\n",
-       "
+282:             diffeq(t_start, y_new, diffeq_out, *args)
\n", - "
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_GIVEREF(__pyx_t_1);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_1 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_1, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_GIVEREF(__pyx_t_1);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_1 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_1, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 282, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "
 283:         else:
\n", - "
+284:             diffeq(t_start, y_new, diffeq_out)
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_7 = __pyx_v_diffeq; __pyx_t_2 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
-       "        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);\n",
-       "        if (likely(__pyx_t_2)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
-       "          __Pyx_INCREF(__pyx_t_2);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_7, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_1, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    }\n",
-       "    __pyx_L14:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_7 = __pyx_v_diffeq; __pyx_t_2 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
-       "        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);\n",
-       "        if (likely(__pyx_t_2)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
-       "          __Pyx_INCREF(__pyx_t_2);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_7, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_1, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 284, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    }\n",
-       "    __pyx_L14:;\n",
-       "
 285: 
\n", - "
 286:         # Extract the extra output from the function output.
\n", - "
+287:         for i in range(total_size):
\n", - "
    __pyx_t_3 = __pyx_v_total_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_3 = __pyx_v_total_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+288:             if i < extra_start:
\n", - "
      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L17;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L17;\n",
-       "      }\n",
-       "
 289:                 # Pull from y0
\n", - "
+290:                 y0_plus_extra_view[i] = y0[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "
 291:             else:
\n", - "
 292:                 # Pull from extra output
\n", - "
+293:                 y0_plus_extra_view[i] = diffeq_out_view[i]
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L17:;\n",
-       "    }\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L17:;\n",
-       "    }\n",
-       "
+294:         if store_extras_during_integration:
\n", - "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L18;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L18;\n",
-       "    }\n",
-       "
+295:             store_loop_size = total_size
\n", - "
      __pyx_v_store_loop_size = __pyx_v_total_size;\n",
-       "/* … */\n",
-       "      __pyx_v_store_loop_size = __pyx_v_total_size;\n",
-       "
 296:         else:
\n", - "
+297:             store_loop_size = y_size
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "    }\n",
-       "    __pyx_L18:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "    }\n",
-       "    __pyx_L18:;\n",
-       "
 298:     else:
\n", - "
 299:         # No extra output
\n", - "
+300:         store_loop_size = y_size
\n", - "
  /*else*/ {\n",
-       "    __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "  }\n",
-       "  __pyx_L13:;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_v_store_loop_size = __pyx_v_y_size;\n",
-       "  }\n",
-       "  __pyx_L13:;\n",
-       "
 301: 
\n", - "
+302:     y0_to_store = np.empty(store_loop_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_y0_to_store = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_y0_to_store = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
 303:     cdef double_numeric[:] y0_to_store_view
\n", - "
+304:     y0_to_store_view = y0_to_store
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y0_to_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 304, __pyx_L1_error)\n",
-       "  __pyx_v_y0_to_store_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y0_to_store, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 304, __pyx_L1_error)\n",
-       "  __pyx_v_y0_to_store_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+305:     for i in range(store_loop_size):
\n", - "
  __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+306:         if store_extras_during_integration:
\n", - "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L21;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L21;\n",
-       "    }\n",
-       "
+307:             y0_to_store_view[i] = y0_plus_extra_view[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_12 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "
 308:         else:
\n", - "
+309:             y0_to_store_view[i] = y0[i]
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "    }\n",
-       "    __pyx_L21:;\n",
-       "  }\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_to_store_view.data + __pyx_t_14 * __pyx_v_y0_to_store_view.strides[0]) )) = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_12 * __pyx_v_y0.strides[0]) )));\n",
-       "    }\n",
-       "    __pyx_L21:;\n",
-       "  }\n",
-       "
 310: 
\n", - "
 311:     # # Determine RK scheme
\n", - "
 312:     cdef unsigned char rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended
\n", - "
 313:     cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom
\n", - "
 314:     cdef unsigned char len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1
\n", - "
 315: 
\n", - "
+316:     if rk_method == 0:
\n", - "
  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "
 317:         # RK23 Method
\n", - "
+318:         rk_order    = RK23_order
\n", - "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK23_order;\n",
-       "
+319:         error_order = RK23_error_order
\n", - "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
-       "/* … */\n",
-       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK23_error_order;\n",
-       "
+320:         rk_n_stages = RK23_n_stages
\n", - "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK23_n_stages;\n",
-       "
+321:         len_C       = RK23_LEN_C
\n", - "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
-       "/* … */\n",
-       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_C;\n",
-       "
+322:         len_B       = RK23_LEN_B
\n", - "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
-       "/* … */\n",
-       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_B;\n",
-       "
+323:         len_E       = RK23_LEN_E
\n", - "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E;\n",
-       "
+324:         len_E3      = RK23_LEN_E3
\n", - "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E3;\n",
-       "
+325:         len_E5      = RK23_LEN_E5
\n", - "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_E5;\n",
-       "
+326:         len_A0      = RK23_LEN_A0
\n", - "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A0;\n",
-       "
+327:         len_A1      = RK23_LEN_A1
\n", - "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK23_LEN_A1;\n",
-       "
+328:     elif rk_method == 1:
\n", - "
    break;\n",
-       "    case 2:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 2:\n",
-       "
 329:         # RK45 Method
\n", - "
+330:         rk_order    = RK45_order
\n", - "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_RK45_order;\n",
-       "
+331:         error_order = RK45_error_order
\n", - "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
-       "/* … */\n",
-       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_RK45_error_order;\n",
-       "
+332:         rk_n_stages = RK45_n_stages
\n", - "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_RK45_n_stages;\n",
-       "
+333:         len_C       = RK45_LEN_C
\n", - "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
-       "/* … */\n",
-       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_C;\n",
-       "
+334:         len_B       = RK45_LEN_B
\n", - "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
-       "/* … */\n",
-       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_B;\n",
-       "
+335:         len_E       = RK45_LEN_E
\n", - "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E;\n",
-       "
+336:         len_E3      = RK45_LEN_E3
\n", - "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E3;\n",
-       "
+337:         len_E5      = RK45_LEN_E5
\n", - "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_E5;\n",
-       "
+338:         len_A0      = RK45_LEN_A0
\n", - "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A0;\n",
-       "
+339:         len_A1      = RK45_LEN_A1
\n", - "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_RK45_LEN_A1;\n",
-       "
+340:     elif rk_method == 2:
\n", - "
    break;\n",
-       "    default:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    default:\n",
-       "
 341:         # DOP853 Method
\n", - "
+342:         rk_order    = DOP_order
\n", - "
    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_order = __pyx_v_4CyRK_2rk_2rk_DOP_order;\n",
-       "
+343:         error_order = DOP_error_order
\n", - "
    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
-       "/* … */\n",
-       "    __pyx_v_error_order = __pyx_v_4CyRK_2rk_2rk_DOP_error_order;\n",
-       "
+344:         rk_n_stages = DOP_n_stages
\n", - "
    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages;\n",
-       "
+345:         len_C       = DOP_LEN_C
\n", - "
    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
-       "/* … */\n",
-       "    __pyx_v_len_C = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_C;\n",
-       "
+346:         len_B       = DOP_LEN_B
\n", - "
    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
-       "/* … */\n",
-       "    __pyx_v_len_B = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_B;\n",
-       "
+347:         len_E       = DOP_LEN_E
\n", - "
    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E;\n",
-       "
+348:         len_E3      = DOP_LEN_E3
\n", - "
    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E3 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E3;\n",
-       "
+349:         len_E5      = DOP_LEN_E5
\n", - "
    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
-       "/* … */\n",
-       "    __pyx_v_len_E5 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_E5;\n",
-       "
+350:         len_A0      = DOP_LEN_A0
\n", - "
    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A0 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A0;\n",
-       "
+351:         len_A1      = DOP_LEN_A1
\n", - "
    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
-       "/* … */\n",
-       "    __pyx_v_len_A1 = __pyx_v_4CyRK_2rk_2rk_DOP_LEN_A1;\n",
-       "
 352: 
\n", - "
+353:         rk_n_stages_extended = DOP_n_stages_extended
\n", - "
    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
-       "/* … */\n",
-       "    __pyx_v_rk_n_stages_extended = __pyx_v_4CyRK_2rk_2rk_DOP_n_stages_extended;\n",
-       "
 354:     else:
\n", - "
+355:         raise Exception(
\n", - "
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __PYX_ERR(0, 355, __pyx_L1_error)\n",
-       "    break;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_Unexpected_rk_method_provided_Cu); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 355, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__15);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__15);\n",
-       "/* … */\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __PYX_ERR(0, 355, __pyx_L1_error)\n",
-       "    break;\n",
-       "  }\n",
-       "
 356:             'Unexpected rk_method provided. Currently supported versions are:\\n'
\n", - "
 357:             '\\t0 = RK23\\n'
\n", - "
 358:             '\\t1 = RK34\\n'
\n", - "
 359:             '\\t2 = DOP853')
\n", - "
 360: 
\n", - "
+361:     rk_n_stages_plus1 = rk_n_stages + 1
\n", - "
  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
-       "/* … */\n",
-       "  __pyx_v_rk_n_stages_plus1 = (__pyx_v_rk_n_stages + 1);\n",
-       "
+362:     error_expo = 1. / (<double>error_order + 1.)
\n", - "
  __pyx_v_error_expo = (1. / (((double)__pyx_v_error_order) + 1.));\n",
-       "/* … */\n",
-       "  __pyx_v_error_expo = (1. / (((double)__pyx_v_error_order) + 1.));\n",
-       "
 363: 
\n", - "
 364:     # Build RK Arrays. Note that all are 1D except for A and K.
\n", - "
+365:     A      = np.empty((len_A0, len_A1), dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_A0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_A1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_A = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_A0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_A1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_7);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
-       "  __pyx_t_7 = 0;\n",
-       "  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __pyx_v_A = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+366:     B      = np.empty(len_B, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_B); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_B = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_B); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 366, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_B = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
+367:     C      = np.empty(len_C, dtype=np.float64, order='C')  # C is always float no matter what y0 is.
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_C); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_C = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_C); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 367, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_C = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
+368:     E      = np.empty(len_E, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_E); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_v_E = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_E); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_v_E = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+369:     E3     = np.empty(len_E3, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_E3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_E3 = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_E3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 369, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_E3 = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
+370:     E5     = np.empty(len_E5, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_E5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_E5 = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_char(__pyx_v_len_E5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 370, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_E5 = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
+371:     E_tmp  = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_v_E_tmp = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 371, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_v_E_tmp = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+372:     E3_tmp = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_E3_tmp = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 372, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_E3_tmp = __pyx_t_8;\n",
-       "  __pyx_t_8 = 0;\n",
-       "
+373:     E5_tmp = np.empty(y_size, dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_E5_tmp = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 373, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_E5_tmp = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
+374:     K      = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C')  # It is important K be initialized with 0s
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_char(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_K = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_char(__pyx_v_rk_n_stages_plus1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_1);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 374, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_K = __pyx_t_15;\n",
-       "  __pyx_t_15 = 0;\n",
-       "
 375: 
\n", - "
 376:     # Setup memory views.
\n", - "
 377:     cdef double_numeric[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view
\n", - "
 378:     cdef double_numeric[:, :] A_view, K_view
\n", - "
 379:     cdef double[:] C_view
\n", - "
+380:     A_view      = A
\n", - "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 380, __pyx_L1_error)\n",
-       "  __pyx_v_A_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_A, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 380, __pyx_L1_error)\n",
-       "  __pyx_v_A_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "
+381:     B_view      = B
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 381, __pyx_L1_error)\n",
-       "  __pyx_v_B_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 381, __pyx_L1_error)\n",
-       "  __pyx_v_B_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+382:     C_view      = C
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 382, __pyx_L1_error)\n",
-       "  __pyx_v_C_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_C, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 382, __pyx_L1_error)\n",
-       "  __pyx_v_C_view = __pyx_t_17;\n",
-       "  __pyx_t_17.memview = NULL;\n",
-       "  __pyx_t_17.data = NULL;\n",
-       "
+383:     E_view      = E
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 383, __pyx_L1_error)\n",
-       "  __pyx_v_E_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 383, __pyx_L1_error)\n",
-       "  __pyx_v_E_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+384:     E3_view     = E3
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 384, __pyx_L1_error)\n",
-       "  __pyx_v_E3_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 384, __pyx_L1_error)\n",
-       "  __pyx_v_E3_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+385:     E5_view     = E5
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 385, __pyx_L1_error)\n",
-       "  __pyx_v_E5_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 385, __pyx_L1_error)\n",
-       "  __pyx_v_E5_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+386:     E_tmp_view  = E_tmp
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 386, __pyx_L1_error)\n",
-       "  __pyx_v_E_tmp_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 386, __pyx_L1_error)\n",
-       "  __pyx_v_E_tmp_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+387:     E3_tmp_view = E3_tmp
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E3_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 387, __pyx_L1_error)\n",
-       "  __pyx_v_E3_tmp_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E3_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 387, __pyx_L1_error)\n",
-       "  __pyx_v_E3_tmp_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+388:     E5_tmp_view = E5_tmp
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_E5_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 388, __pyx_L1_error)\n",
-       "  __pyx_v_E5_tmp_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_E5_tmp, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 388, __pyx_L1_error)\n",
-       "  __pyx_v_E5_tmp_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "
+389:     K_view      = K
\n", - "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 389, __pyx_L1_error)\n",
-       "  __pyx_v_K_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_K, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 389, __pyx_L1_error)\n",
-       "  __pyx_v_K_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "
 390: 
\n", - "
 391:     # Populate values based on externally defined constants.
\n", - "
+392:     if rk_method == 0:
\n", - "
  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "/* … */\n",
-       "  switch (__pyx_v_rk_method) {\n",
-       "    case 0:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    case 1:\n",
-       "
 393:         # RK23 Method
\n", - "
+394:         for i in range(len_A0):
\n", - "
    __pyx_t_17 = __pyx_v_len_A0;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_A0;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+395:             for j in range(len_A1):
\n", - "
      __pyx_t_19 = __pyx_v_len_A1;\n",
-       "      __pyx_t_20 = __pyx_t_19;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {\n",
-       "        __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_20 = __pyx_v_len_A1;\n",
-       "      __pyx_t_21 = __pyx_t_20;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {\n",
-       "        __pyx_v_j = __pyx_t_22;\n",
-       "
+396:                 A_view[i, j] = RK23_A[i][j]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]);\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_RK23_A[__pyx_v_i])[__pyx_v_j]), 0);\n",
-       "      }\n",
-       "    }\n",
-       "
+397:         for i in range(len_B):
\n", - "
    __pyx_t_17 = __pyx_v_len_B;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_B;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+398:             B_view[i] = RK23_B[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_B[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+399:         for i in range(len_C):
\n", - "
    __pyx_t_17 = __pyx_v_len_C;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_C;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+400:             C_view[i] = RK23_C[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_C[__pyx_v_i]);\n",
-       "    }\n",
-       "
+401:         for i in range(len_E):
\n", - "
    __pyx_t_17 = __pyx_v_len_E;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_E;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+402:             E_view[i] = RK23_E[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
-       "
 403:             # Dummy Variables, set equal to E
\n", - "
+404:             E3_view[i] = RK23_E[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
-       "
+405:             E5_view[i] = RK23_E[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK23_E[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+406:     elif rk_method == 1:
\n", - "
    break;\n",
-       "    default:\n",
-       "/* … */\n",
-       "    break;\n",
-       "    default:\n",
-       "
 407:         # RK45 Method
\n", - "
+408:         for i in range(len_A0):
\n", - "
    __pyx_t_17 = __pyx_v_len_A0;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_A0;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+409:             for j in range(len_A1):
\n", - "
      __pyx_t_19 = __pyx_v_len_A1;\n",
-       "      __pyx_t_20 = __pyx_t_19;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {\n",
-       "        __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_20 = __pyx_v_len_A1;\n",
-       "      __pyx_t_21 = __pyx_t_20;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {\n",
-       "        __pyx_v_j = __pyx_t_22;\n",
-       "
+410:                 A_view[i, j] = RK45_A[i][j]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]);\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_14 * __pyx_v_A_view.strides[0]) ) + __pyx_t_12 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_RK45_A[__pyx_v_i])[__pyx_v_j]), 0);\n",
-       "      }\n",
-       "    }\n",
-       "
+411:         for i in range(len_B):
\n", - "
    __pyx_t_17 = __pyx_v_len_B;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_B;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+412:             B_view[i] = RK45_B[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_12 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_B[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+413:         for i in range(len_C):
\n", - "
    __pyx_t_17 = __pyx_v_len_C;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_C;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+414:             C_view[i] = RK45_C[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_12 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_C[__pyx_v_i]);\n",
-       "    }\n",
-       "
+415:         for i in range(len_E):
\n", - "
    __pyx_t_17 = __pyx_v_len_E;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_E;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+416:             E_view[i] = RK45_E[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
-       "
 417:             # Dummy Variables, set equal to E
\n", - "
+418:             E3_view[i] = RK45_E[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
-       "
+419:             E5_view[i] = RK45_E[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_12 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_RK45_E[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
 420:     else:
\n", - "
 421:         # DOP853 Method
\n", - "
+422:         for i in range(len_A0):
\n", - "
    __pyx_t_17 = __pyx_v_len_A0;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_A0;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+423:             for j in range(len_A1):
\n", - "
      __pyx_t_19 = __pyx_v_len_A1;\n",
-       "      __pyx_t_20 = __pyx_t_19;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {\n",
-       "        __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_20 = __pyx_v_len_A1;\n",
-       "      __pyx_t_21 = __pyx_t_20;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {\n",
-       "        __pyx_v_j = __pyx_t_22;\n",
-       "
+424:                 A_view[i, j] = DOP_A_REDUCED[i][j]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = ((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]);\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_j;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_12 * __pyx_v_A_view.strides[0]) ) + __pyx_t_14 * __pyx_v_A_view.strides[1]) )) = __pyx_t_double_complex_from_parts(((__pyx_v_4CyRK_2rk_2rk_DOP_A_REDUCED[__pyx_v_i])[__pyx_v_j]), 0);\n",
-       "      }\n",
-       "    }\n",
-       "
+425:         for i in range(len_B):
\n", - "
    __pyx_t_17 = __pyx_v_len_B;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_B;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+426:             B_view[i] = DOP_B[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_14 * __pyx_v_B_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_B[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "
+427:         for i in range(len_C):
\n", - "
    __pyx_t_17 = __pyx_v_len_C;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_C;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+428:             C_view[i] = DOP_C_REDUCED[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_C_REDUCED[__pyx_v_i]);\n",
-       "    }\n",
-       "
+429:         for i in range(len_E):
\n", - "
    __pyx_t_17 = __pyx_v_len_E;\n",
-       "    __pyx_t_18 = __pyx_t_17;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_18 = __pyx_v_len_E;\n",
-       "    __pyx_t_19 = __pyx_t_18;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+430:             E3_view[i] = DOP_E3[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_14 * __pyx_v_E3_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]), 0);\n",
-       "
+431:             E5_view[i] = DOP_E5[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_14 * __pyx_v_E5_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]), 0);\n",
-       "
+432:             E_view[i] = DOP_E5[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]);\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E5[__pyx_v_i]), 0);\n",
-       "
 433:             # Dummy Variables, set equal to E3
\n", - "
+434:             E_view[i] = DOP_E3[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = (__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]);\n",
-       "    }\n",
-       "    break;\n",
-       "  }\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_14 * __pyx_v_E_view.strides[0]) )) = __pyx_t_double_complex_from_parts((__pyx_v_4CyRK_2rk_2rk_DOP_E3[__pyx_v_i]), 0);\n",
-       "    }\n",
-       "    break;\n",
-       "  }\n",
-       "
 435: 
\n", - "
 436:     # # Determine integration parameters
\n", - "
 437:     # Check tolerances
\n", - "
+438:     if rtol < EPS_100:
\n", - "
  __pyx_t_4 = (__pyx_v_rtol < __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS_100);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_rtol < __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS_100);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
+439:         rtol = EPS_100
\n", - "
    __pyx_v_rtol = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS_100;\n",
-       "/* … */\n",
-       "    __pyx_v_rtol = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_EPS_100;\n",
-       "
 440: 
\n", - "
 441:     #     atol_arr = np.asarray(atol, dtype=np.complex128)
\n", - "
 442:     #     if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:
\n", - "
 443:     #         # atol must be either the same for all y or must be provided as an array, one for each y.
\n", - "
 444:     #         raise Exception
\n", - "
 445: 
\n", - "
 446:     # Initialize variables for start of integration
\n", - "
+447:     if not capture_extra:
\n", - "
  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (!(__pyx_v_capture_extra != 0));\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 448:         # If `capture_extra` is True then this step was already performed.
\n", - "
+449:         if use_args:
\n", - "
    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L54;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L54;\n",
-       "    }\n",
-       "
+450:             diffeq(t_start, y_new, diffeq_out, *args)
\n", - "
      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_15 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_y_new);\n",
-       "      __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_new);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "      __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "      __pyx_t_15 = 0;\n",
-       "      if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "        PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "        __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      }\n",
-       "      __pyx_t_15 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "
 451:         else:
\n", - "
+452:             diffeq(t_start, y_new, diffeq_out)
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 452, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_1 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {\n",
-       "        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);\n",
-       "        if (likely(__pyx_t_8)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);\n",
-       "          __Pyx_INCREF(__pyx_t_8);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_1, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 452, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    }\n",
-       "    __pyx_L54:;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_start); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 452, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "      __pyx_t_1 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "      __pyx_t_13 = 0;\n",
-       "      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {\n",
-       "        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);\n",
-       "        if (likely(__pyx_t_8)) {\n",
-       "          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);\n",
-       "          __Pyx_INCREF(__pyx_t_8);\n",
-       "          __Pyx_INCREF(function);\n",
-       "          __Pyx_DECREF_SET(__pyx_t_1, function);\n",
-       "          __pyx_t_13 = 1;\n",
-       "        }\n",
-       "      }\n",
-       "      {\n",
-       "        PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 452, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    }\n",
-       "    __pyx_L54:;\n",
-       "
 453: 
\n", - "
+454:     t_old = t_start
\n", - "
  __pyx_v_t_old = __pyx_v_t_start;\n",
-       "/* … */\n",
-       "  __pyx_v_t_old = __pyx_v_t_start;\n",
-       "
+455:     t_new = t_start
\n", - "
  __pyx_v_t_new = __pyx_v_t_start;\n",
-       "/* … */\n",
-       "  __pyx_v_t_new = __pyx_v_t_start;\n",
-       "
 456:     # Initialize dydt arrays.
\n", - "
+457:     for i in range(y_size):
\n", - "
  __pyx_t_3 = __pyx_v_y_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_3 = __pyx_v_y_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+458:         dydt_new_view[i] = diffeq_out_view[i]
\n", - "
    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "/* … */\n",
-       "    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_14 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "
+459:         dydt_old_view[i] = dydt_new_view[i]
\n", - "
    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "  }\n",
-       "/* … */\n",
-       "    __pyx_t_14 = __pyx_v_i;\n",
-       "    __pyx_t_12 = __pyx_v_i;\n",
-       "    *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "  }\n",
-       "
 460: 
\n", - "
 461:     # Setup storage arrays
\n", - "
 462:     # These arrays are built to fit a number of points equal to `expected_size_to_use`
\n", - "
 463:     # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.
\n", - "
 464:     cdef double_numeric[:, :] y_results_array_view, y_results_array_new_view, solution_y_view
\n", - "
 465:     cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view
\n", - "
+466:     y_results_array        = np.empty((store_loop_size, expected_size_to_use), dtype=DTYPE, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_15);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_y_results_array = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);\n",
-       "  __Pyx_GIVEREF(__pyx_t_15);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_15);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_15 = 0;\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_8);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8);\n",
-       "  __pyx_t_8 = 0;\n",
-       "  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __pyx_v_y_results_array = __pyx_t_2;\n",
-       "  __pyx_t_2 = 0;\n",
-       "
+467:     time_domain_array      = np.empty(expected_size_to_use, dtype=np.float64, order='C')
\n", - "
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_time_domain_array = __pyx_t_7;\n",
-       "  __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_8);\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_expected_size_to_use); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_15);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_7);\n",
-       "  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "  __pyx_v_time_domain_array = __pyx_t_7;\n",
-       "  __pyx_t_7 = 0;\n",
-       "
+468:     y_results_array_view   = y_results_array
\n", - "
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 468, __pyx_L1_error)\n",
-       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 468, __pyx_L1_error)\n",
-       "  __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "  __pyx_t_16.memview = NULL;\n",
-       "  __pyx_t_16.data = NULL;\n",
-       "
+469:     time_domain_array_view = time_domain_array
\n", - "
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 469, __pyx_L1_error)\n",
-       "  __pyx_v_time_domain_array_view = __pyx_t_9;\n",
-       "  __pyx_t_9.memview = NULL;\n",
-       "  __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 469, __pyx_L1_error)\n",
-       "  __pyx_v_time_domain_array_view = __pyx_t_17;\n",
-       "  __pyx_t_17.memview = NULL;\n",
-       "  __pyx_t_17.data = NULL;\n",
-       "
 470: 
\n", - "
 471:     # Load initial conditions into output arrays
\n", - "
+472:     time_domain_array_view[0] = t_start
\n", - "
  __pyx_t_14 = 0;\n",
-       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
-       "/* … */\n",
-       "  __pyx_t_14 = 0;\n",
-       "  *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_14 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_start;\n",
-       "
+473:     for i in range(store_loop_size):
\n", - "
  __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "  __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "  __pyx_t_10 = __pyx_t_3;\n",
-       "  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "    __pyx_v_i = __pyx_t_11;\n",
-       "
+474:         if store_extras_during_integration:
\n", - "
    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L59;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_store_extras_during_integration != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L59;\n",
-       "    }\n",
-       "
+475:             y_results_array_view[i] = y0_plus_extra_view[i]
\n", - "
      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_9.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_9.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_9.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_9.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_9.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          double __pyx_temp_scalar = (*((double *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_9.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_9.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_9.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_9.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_9.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_9.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_9.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_9.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          __pyx_t_double_complex __pyx_temp_scalar = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y0_plus_extra_view.data + __pyx_t_14 * __pyx_v_y0_plus_extra_view.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_9.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_9.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_9.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((__pyx_t_double_complex *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "
 476:         else:
\n", - "
+477:             y_results_array_view[i] = y0[i]
\n", - "
    /*else*/ {\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_9.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_9.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_9.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_9.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_9.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          double __pyx_temp_scalar = (*((double const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_9.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_9.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_9.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "    }\n",
-       "    __pyx_L59:;\n",
-       "  }\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_t_14 = __pyx_v_i;\n",
-       "      __pyx_t_9.data = __pyx_v_y_results_array_view.data;\n",
-       "      __pyx_t_9.memview = __pyx_v_y_results_array_view.memview;\n",
-       "      __PYX_INC_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      {\n",
-       "    Py_ssize_t __pyx_tmp_idx = __pyx_v_i;\n",
-       "    Py_ssize_t __pyx_tmp_stride = __pyx_v_y_results_array_view.strides[0];\n",
-       "        __pyx_t_9.data += __pyx_tmp_idx * __pyx_tmp_stride;\n",
-       "}\n",
-       "\n",
-       "__pyx_t_9.shape[0] = __pyx_v_y_results_array_view.shape[1];\n",
-       "__pyx_t_9.strides[0] = __pyx_v_y_results_array_view.strides[1];\n",
-       "    __pyx_t_9.suboffsets[0] = -1;\n",
-       "\n",
-       "{\n",
-       "          __pyx_t_double_complex __pyx_temp_scalar = (*((__pyx_t_double_complex const  *) ( /* dim=0 */ (__pyx_v_y0.data + __pyx_t_14 * __pyx_v_y0.strides[0]) )));\n",
-       "          {\n",
-       "              Py_ssize_t __pyx_temp_extent_0 = __pyx_t_9.shape[0];\n",
-       "              Py_ssize_t __pyx_temp_stride_0 = __pyx_t_9.strides[0];\n",
-       "              char *__pyx_temp_pointer_0;\n",
-       "              Py_ssize_t __pyx_temp_idx_0;\n",
-       "              __pyx_temp_pointer_0 = __pyx_t_9.data;\n",
-       "              for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {\n",
-       "                *((__pyx_t_double_complex *) __pyx_temp_pointer_0) = __pyx_temp_scalar;\n",
-       "                __pyx_temp_pointer_0 += __pyx_temp_stride_0;\n",
-       "              }\n",
-       "          }\n",
-       "      }\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "    }\n",
-       "    __pyx_L59:;\n",
-       "  }\n",
-       "
 478: 
\n", - "
 479:     # # Determine size of first step.
\n", - "
 480:     cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale
\n", - "
+481:     if first_step == 0.:
\n", - "
  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L60;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_first_step == 0.);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L60;\n",
-       "  }\n",
-       "
 482:         # Select an initial step size based on the differential equation.
\n", - "
 483:         # .. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
\n", - "
 484:         #        Equations I: Nonstiff Problems", Sec. II.4.
\n", - "
+485:         if y_size == 0:
\n", - "
    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L61;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_y_size == 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L61;\n",
-       "    }\n",
-       "
+486:             step_size = INF
\n", - "
      __pyx_v_step_size = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_INF;\n",
-       "/* … */\n",
-       "      __pyx_v_step_size = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_INF;\n",
-       "
 487:         else:
\n", - "
 488:             # Find the norm for d0 and d1
\n", - "
+489:             d0 = 0.
\n", - "
    /*else*/ {\n",
-       "      __pyx_v_d0 = 0.;\n",
-       "/* … */\n",
-       "    /*else*/ {\n",
-       "      __pyx_v_d0 = 0.;\n",
-       "
+490:             d1 = 0.
\n", - "
      __pyx_v_d1 = 0.;\n",
-       "/* … */\n",
-       "      __pyx_v_d1 = 0.;\n",
-       "
+491:             for i in range(y_size):
\n", - "
      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+492:                 scale = atol + dabs(y_old_view[i]) * rtol
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 492, __pyx_L1_error)\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_t_22 * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 492, __pyx_L1_error)\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_t_23 * __pyx_v_rtol));\n",
-       "
 493: 
\n", - "
+494:                 d0_abs = dabs(y_old_view[i] / scale)
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) / __pyx_v_scale)); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 494, __pyx_L1_error)\n",
-       "        __pyx_v_d0_abs = __pyx_t_22;\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(__Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 494, __pyx_L1_error)\n",
-       "        __pyx_v_d0_abs = __pyx_t_23;\n",
-       "
+495:                 d1_abs = dabs(dydt_old_view[i] / scale)
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(((*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))) / __pyx_v_scale)); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 495, __pyx_L1_error)\n",
-       "        __pyx_v_d1_abs = __pyx_t_22;\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(__Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 495, __pyx_L1_error)\n",
-       "        __pyx_v_d1_abs = __pyx_t_23;\n",
-       "
+496:                 d0 += (d0_abs * d0_abs)
\n", - "
        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
-       "/* … */\n",
-       "        __pyx_v_d0 = (__pyx_v_d0 + (__pyx_v_d0_abs * __pyx_v_d0_abs));\n",
-       "
+497:                 d1 += (d1_abs * d1_abs)
\n", - "
        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_v_d1 = (__pyx_v_d1 + (__pyx_v_d1_abs * __pyx_v_d1_abs));\n",
-       "      }\n",
-       "
 498: 
\n", - "
+499:             d0 = sqrt(d0) / y_size_sqrt
\n", - "
      __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_y_size_sqrt);\n",
-       "/* … */\n",
-       "      __pyx_v_d0 = (sqrt(__pyx_v_d0) / __pyx_v_y_size_sqrt);\n",
-       "
+500:             d1 = sqrt(d1) / y_size_sqrt
\n", - "
      __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_y_size_sqrt);\n",
-       "/* … */\n",
-       "      __pyx_v_d1 = (sqrt(__pyx_v_d1) / __pyx_v_y_size_sqrt);\n",
-       "
 501: 
\n", - "
+502:             if d0 < 1.e-5 or d1 < 1.e-5:
\n", - "
      __pyx_t_6 = (__pyx_v_d0 < 1.e-5);\n",
-       "      if (!__pyx_t_6) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_6;\n",
-       "        goto __pyx_L65_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_6 = (__pyx_v_d1 < 1.e-5);\n",
-       "      __pyx_t_4 = __pyx_t_6;\n",
-       "      __pyx_L65_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L64;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_6 = (__pyx_v_d0 < 1.e-5);\n",
-       "      if (!__pyx_t_6) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_6;\n",
-       "        goto __pyx_L65_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_6 = (__pyx_v_d1 < 1.e-5);\n",
-       "      __pyx_t_4 = __pyx_t_6;\n",
-       "      __pyx_L65_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L64;\n",
-       "      }\n",
-       "
+503:                 h0 = 1.e-6
\n", - "
        __pyx_v_h0 = 1.e-6;\n",
-       "/* … */\n",
-       "        __pyx_v_h0 = 1.e-6;\n",
-       "
 504:             else:
\n", - "
+505:                 h0 = 0.01 * d0 / d1
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
-       "      }\n",
-       "      __pyx_L64:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_h0 = ((0.01 * __pyx_v_d0) / __pyx_v_d1);\n",
-       "      }\n",
-       "      __pyx_L64:;\n",
-       "
 506: 
\n", - "
+507:             h0_direction = h0 * direction
\n", - "
      __pyx_v_h0_direction = (__pyx_v_h0 * __pyx_v_direction);\n",
-       "/* … */\n",
-       "      __pyx_v_h0_direction = (__pyx_v_h0 * __pyx_v_direction);\n",
-       "
+508:             t_new = t_old + h0_direction
\n", - "
      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
-       "/* … */\n",
-       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_h0_direction);\n",
-       "
+509:             for i in range(y_size):
\n", - "
      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+510:                 y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_23 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_23 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))) + (__pyx_v_h0_direction * (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) ))), __Pyx_c_prod_double(__pyx_t_double_complex_from_parts(__pyx_v_h0_direction, 0), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_12 * __pyx_v_dydt_old_view.strides[0]) )))));\n",
-       "      }\n",
-       "
 511: 
\n", - "
+512:             if use_args:
\n", - "
      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L69;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L69;\n",
-       "      }\n",
-       "
+513:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", - "
        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_GIVEREF(__pyx_t_7);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_GIVEREF(__pyx_t_7);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_7 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 513, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "
 514:             else:
\n", - "
+515:                 diffeq(t_new, y_new, diffeq_out)
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 515, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_15 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {\n",
-       "          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_15);\n",
-       "          if (likely(__pyx_t_8)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);\n",
-       "            __Pyx_INCREF(__pyx_t_8);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_15, function);\n",
-       "            __pyx_t_13 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_7, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      }\n",
-       "      __pyx_L69:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_7 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 515, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_15 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {\n",
-       "          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_15);\n",
-       "          if (likely(__pyx_t_8)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);\n",
-       "            __Pyx_INCREF(__pyx_t_8);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_15, function);\n",
-       "            __pyx_t_13 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_7, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      }\n",
-       "      __pyx_L69:;\n",
-       "
 516: 
\n", - "
 517:             # Find the norm for d2
\n", - "
+518:             d2 = 0.
\n", - "
      __pyx_v_d2 = 0.;\n",
-       "/* … */\n",
-       "      __pyx_v_d2 = 0.;\n",
-       "
+519:             for i in range(y_size):
\n", - "
      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+520:                 dydt_new_view[i] = diffeq_out_view[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_14 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "
 521: 
\n", - "
 522:                 # TODO: should/could this be `y_new_view` instead of `y_old_view`?
\n", - "
+523:                 scale = atol + dabs(y_old_view[i]) * rtol
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L1_error)\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_t_22 * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L1_error)\n",
-       "        __pyx_v_scale = (__pyx_v_atol + (__pyx_t_23 * __pyx_v_rtol));\n",
-       "
+524:                 d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((((*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))) - (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )))) / __pyx_v_scale)); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 524, __pyx_L1_error)\n",
-       "        __pyx_v_d2_abs = __pyx_t_22;\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs(__Pyx_c_quot_double(__Pyx_c_diff_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) ))), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 524, __pyx_L1_error)\n",
-       "        __pyx_v_d2_abs = __pyx_t_23;\n",
-       "
+525:                 d2 += (d2_abs * d2_abs)
\n", - "
        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_v_d2 = (__pyx_v_d2 + (__pyx_v_d2_abs * __pyx_v_d2_abs));\n",
-       "      }\n",
-       "
 526: 
\n", - "
+527:             d2 = sqrt(d2) / (h0 * y_size_sqrt)
\n", - "
      __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_y_size_sqrt));\n",
-       "/* … */\n",
-       "      __pyx_v_d2 = (sqrt(__pyx_v_d2) / (__pyx_v_h0 * __pyx_v_y_size_sqrt));\n",
-       "
 528: 
\n", - "
+529:             if d1 <= 1.e-15 and d2 <= 1.e-15:
\n", - "
      __pyx_t_6 = (__pyx_v_d1 <= 1.e-15);\n",
-       "      if (__pyx_t_6) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_6;\n",
-       "        goto __pyx_L73_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_6 = (__pyx_v_d2 <= 1.e-15);\n",
-       "      __pyx_t_4 = __pyx_t_6;\n",
-       "      __pyx_L73_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L72;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_6 = (__pyx_v_d1 <= 1.e-15);\n",
-       "      if (__pyx_t_6) {\n",
-       "      } else {\n",
-       "        __pyx_t_4 = __pyx_t_6;\n",
-       "        goto __pyx_L73_bool_binop_done;\n",
-       "      }\n",
-       "      __pyx_t_6 = (__pyx_v_d2 <= 1.e-15);\n",
-       "      __pyx_t_4 = __pyx_t_6;\n",
-       "      __pyx_L73_bool_binop_done:;\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L72;\n",
-       "      }\n",
-       "
+530:                 h1 = max(1.e-6, h0 * 1.e-3)
\n", - "
        __pyx_t_22 = (__pyx_v_h0 * 1.e-3);\n",
-       "        __pyx_t_24 = 1.e-6;\n",
-       "        if ((__pyx_t_22 > __pyx_t_24)) {\n",
-       "          __pyx_t_25 = __pyx_t_22;\n",
-       "        } else {\n",
-       "          __pyx_t_25 = __pyx_t_24;\n",
-       "        }\n",
-       "        __pyx_v_h1 = __pyx_t_25;\n",
-       "/* … */\n",
-       "        __pyx_t_23 = (__pyx_v_h0 * 1.e-3);\n",
-       "        __pyx_t_25 = 1.e-6;\n",
-       "        if ((__pyx_t_23 > __pyx_t_25)) {\n",
-       "          __pyx_t_26 = __pyx_t_23;\n",
-       "        } else {\n",
-       "          __pyx_t_26 = __pyx_t_25;\n",
-       "        }\n",
-       "        __pyx_v_h1 = __pyx_t_26;\n",
-       "
 531:             else:
\n", - "
+532:                 h1 = (0.01 / max(d1, d2))**error_expo
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_25 = __pyx_v_d2;\n",
-       "        __pyx_t_22 = __pyx_v_d1;\n",
-       "        if ((__pyx_t_25 > __pyx_t_22)) {\n",
-       "          __pyx_t_24 = __pyx_t_25;\n",
-       "        } else {\n",
-       "          __pyx_t_24 = __pyx_t_22;\n",
-       "        }\n",
-       "        __pyx_v_h1 = pow((0.01 / __pyx_t_24), __pyx_v_error_expo);\n",
-       "      }\n",
-       "      __pyx_L72:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_26 = __pyx_v_d2;\n",
-       "        __pyx_t_23 = __pyx_v_d1;\n",
-       "        if ((__pyx_t_26 > __pyx_t_23)) {\n",
-       "          __pyx_t_25 = __pyx_t_26;\n",
-       "        } else {\n",
-       "          __pyx_t_25 = __pyx_t_23;\n",
-       "        }\n",
-       "        __pyx_v_h1 = pow((0.01 / __pyx_t_25), __pyx_v_error_expo);\n",
-       "      }\n",
-       "      __pyx_L72:;\n",
-       "
 533: 
\n", - "
+534:             step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))
\n", - "
      __pyx_t_24 = __pyx_v_h1;\n",
-       "      __pyx_t_25 = (100. * __pyx_v_h0);\n",
-       "      if ((__pyx_t_24 < __pyx_t_25)) {\n",
-       "        __pyx_t_22 = __pyx_t_24;\n",
-       "      } else {\n",
-       "        __pyx_t_22 = __pyx_t_25;\n",
-       "      }\n",
-       "      __pyx_t_24 = __pyx_t_22;\n",
-       "      __pyx_t_22 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "      if ((__pyx_t_24 > __pyx_t_22)) {\n",
-       "        __pyx_t_25 = __pyx_t_24;\n",
-       "      } else {\n",
-       "        __pyx_t_25 = __pyx_t_22;\n",
-       "      }\n",
-       "      __pyx_v_step_size = __pyx_t_25;\n",
-       "    }\n",
-       "    __pyx_L61:;\n",
-       "/* … */\n",
-       "      __pyx_t_25 = __pyx_v_h1;\n",
-       "      __pyx_t_26 = (100. * __pyx_v_h0);\n",
-       "      if ((__pyx_t_25 < __pyx_t_26)) {\n",
-       "        __pyx_t_23 = __pyx_t_25;\n",
-       "      } else {\n",
-       "        __pyx_t_23 = __pyx_t_26;\n",
-       "      }\n",
-       "      __pyx_t_25 = __pyx_t_23;\n",
-       "      __pyx_t_23 = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "      if ((__pyx_t_25 > __pyx_t_23)) {\n",
-       "        __pyx_t_26 = __pyx_t_25;\n",
-       "      } else {\n",
-       "        __pyx_t_26 = __pyx_t_23;\n",
-       "      }\n",
-       "      __pyx_v_step_size = __pyx_t_26;\n",
-       "    }\n",
-       "    __pyx_L61:;\n",
-       "
 535:     else:
\n", - "
+536:         if first_step <= 0.:
\n", - "
  /*else*/ {\n",
-       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __pyx_t_4 = (__pyx_v_first_step <= 0.);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+537:             raise Exception('Error in user-provided step size: Step size must be a positive number.')
\n", - "
      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __PYX_ERR(0, 537, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 537, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__16);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__16);\n",
-       "/* … */\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __PYX_ERR(0, 537, __pyx_L1_error)\n",
-       "
+538:         elif first_step > t_delta_abs:
\n", - "
    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_first_step > __pyx_v_t_delta_abs);\n",
-       "    if (unlikely(__pyx_t_4)) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+539:             raise Exception('Error in user-provided step size: Step size can not exceed bounds.')
\n", - "
      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __PYX_ERR(0, 539, __pyx_L1_error)\n",
-       "/* … */\n",
-       "  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Error_in_user_provided_step_size_2); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 539, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__17);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__17);\n",
-       "/* … */\n",
-       "      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_Raise(__pyx_t_2, 0, 0, 0);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __PYX_ERR(0, 539, __pyx_L1_error)\n",
-       "
+540:         step_size = first_step
\n", - "
    __pyx_v_step_size = __pyx_v_first_step;\n",
-       "  }\n",
-       "  __pyx_L60:;\n",
-       "/* … */\n",
-       "    __pyx_v_step_size = __pyx_v_first_step;\n",
-       "  }\n",
-       "  __pyx_L60:;\n",
-       "
 541: 
\n", - "
 542:     # # Main integration loop
\n", - "
 543:     cdef double min_step, step_factor, step
\n", - "
 544:     cdef double c
\n", - "
 545:     cdef double_numeric K_scale
\n", - "
 546:     # Integrator Status Codes
\n", - "
 547:     #   0  = Running
\n", - "
 548:     #   -1 = Failed
\n", - "
 549:     #   1  = Finished with no obvious issues
\n", - "
 550:     cdef char status
\n", - "
 551:     cdef unsigned int len_t
\n", - "
+552:     status = 0
\n", - "
  __pyx_v_status = 0;\n",
-       "/* … */\n",
-       "  __pyx_v_status = 0;\n",
-       "
+553:     len_t  = 1  # There is an initial condition provided so the time length is already 1
\n", - "
  __pyx_v_len_t = 1;\n",
-       "/* … */\n",
-       "  __pyx_v_len_t = 1;\n",
-       "
+554:     while status == 0:
\n", - "
  while (1) {\n",
-       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
-       "    if (!__pyx_t_4) break;\n",
-       "/* … */\n",
-       "  while (1) {\n",
-       "    __pyx_t_4 = (__pyx_v_status == 0);\n",
-       "    if (!__pyx_t_4) break;\n",
-       "
+555:         if t_new == t_end or y_size == 0:
\n", - "
    __pyx_t_6 = (__pyx_v_t_new == __pyx_v_t_end);\n",
-       "    if (!__pyx_t_6) {\n",
-       "    } else {\n",
-       "      __pyx_t_4 = __pyx_t_6;\n",
-       "      goto __pyx_L79_bool_binop_done;\n",
-       "    }\n",
-       "    __pyx_t_6 = (__pyx_v_y_size == 0);\n",
-       "    __pyx_t_4 = __pyx_t_6;\n",
-       "    __pyx_L79_bool_binop_done:;\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_6 = (__pyx_v_t_new == __pyx_v_t_end);\n",
-       "    if (!__pyx_t_6) {\n",
-       "    } else {\n",
-       "      __pyx_t_4 = __pyx_t_6;\n",
-       "      goto __pyx_L79_bool_binop_done;\n",
-       "    }\n",
-       "    __pyx_t_6 = (__pyx_v_y_size == 0);\n",
-       "    __pyx_t_4 = __pyx_t_6;\n",
-       "    __pyx_L79_bool_binop_done:;\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
+556:             t_old = t_end
\n", - "
      __pyx_v_t_old = __pyx_v_t_end;\n",
-       "/* … */\n",
-       "      __pyx_v_t_old = __pyx_v_t_end;\n",
-       "
+557:             t_new = t_end
\n", - "
      __pyx_v_t_new = __pyx_v_t_end;\n",
-       "/* … */\n",
-       "      __pyx_v_t_new = __pyx_v_t_end;\n",
-       "
+558:             status = 1
\n", - "
      __pyx_v_status = 1;\n",
-       "/* … */\n",
-       "      __pyx_v_status = 1;\n",
-       "
+559:             break
\n", - "
      goto __pyx_L77_break;\n",
-       "/* … */\n",
-       "      goto __pyx_L77_break;\n",
-       "
 560: 
\n", - "
 561:         # Run RK integration step
\n", - "
 562:         # Determine step size based on previous loop
\n", - "
 563:         # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)
\n", - "
+564:         min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)
\n", - "
    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "/* … */\n",
-       "    __pyx_v_min_step = (10. * fabs((nextafter(__pyx_v_t_old, __pyx_v_direction_inf) - __pyx_v_t_old)));\n",
-       "
 565:         # Look for over/undershoots in previous step size
\n", - "
+566:         if step_size > max_step:
\n", - "
    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L81;\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_step_size > __pyx_v_max_step);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      goto __pyx_L81;\n",
-       "    }\n",
-       "
+567:             step_size = max_step
\n", - "
      __pyx_v_step_size = __pyx_v_max_step;\n",
-       "/* … */\n",
-       "      __pyx_v_step_size = __pyx_v_max_step;\n",
-       "
+568:         elif step_size < min_step:
\n", - "
    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "    __pyx_L81:;\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "    __pyx_L81:;\n",
-       "
+569:             step_size = min_step
\n", - "
      __pyx_v_step_size = __pyx_v_min_step;\n",
-       "/* … */\n",
-       "      __pyx_v_step_size = __pyx_v_min_step;\n",
-       "
 570: 
\n", - "
 571:         # Determine new step size
\n", - "
+572:         step_accepted = False
\n", - "
    __pyx_v_step_accepted = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_step_accepted = 0;\n",
-       "
+573:         step_rejected = False
\n", - "
    __pyx_v_step_rejected = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_step_rejected = 0;\n",
-       "
+574:         step_error    = False
\n", - "
    __pyx_v_step_error = 0;\n",
-       "/* … */\n",
-       "    __pyx_v_step_error = 0;\n",
-       "
 575: 
\n", - "
 576:         # # Step Loop
\n", - "
+577:         while not step_accepted:
\n", - "
    while (1) {\n",
-       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "      if (!__pyx_t_4) break;\n",
-       "/* … */\n",
-       "    while (1) {\n",
-       "      __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "      if (!__pyx_t_4) break;\n",
-       "
 578: 
\n", - "
+579:             if step_size < min_step:
\n", - "
      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_step_size < __pyx_v_min_step);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+580:                 step_error = True
\n", - "
        __pyx_v_step_error = 1;\n",
-       "/* … */\n",
-       "        __pyx_v_step_error = 1;\n",
-       "
+581:                 status     = -1
\n", - "
        __pyx_v_status = -1;\n",
-       "/* … */\n",
-       "        __pyx_v_status = -1;\n",
-       "
+582:                 break
\n", - "
        goto __pyx_L83_break;\n",
-       "/* … */\n",
-       "        goto __pyx_L83_break;\n",
-       "
 583: 
\n", - "
 584:             # Move time forward for this particular step size
\n", - "
+585:             step = step_size * direction
\n", - "
      __pyx_v_step = (__pyx_v_step_size * __pyx_v_direction);\n",
-       "/* … */\n",
-       "      __pyx_v_step = (__pyx_v_step_size * __pyx_v_direction);\n",
-       "
+586:             t_new = t_old + step
\n", - "
      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
-       "/* … */\n",
-       "      __pyx_v_t_new = (__pyx_v_t_old + __pyx_v_step);\n",
-       "
 587: 
\n", - "
 588:             # Check that we are not at the end of integration with that move
\n", - "
+589:             if direction * (t_new - t_end) > 0.:
\n", - "
      __pyx_t_4 = ((__pyx_v_direction * (__pyx_v_t_new - __pyx_v_t_end)) > 0.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = ((__pyx_v_direction * (__pyx_v_t_new - __pyx_v_t_end)) > 0.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "      }\n",
-       "
+590:                 t_new = t_end
\n", - "
        __pyx_v_t_new = __pyx_v_t_end;\n",
-       "/* … */\n",
-       "        __pyx_v_t_new = __pyx_v_t_end;\n",
-       "
 591: 
\n", - "
 592:                 # Correct the step if we were at the end of integration
\n", - "
+593:                 step = t_new - t_old
\n", - "
        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
-       "/* … */\n",
-       "        __pyx_v_step = (__pyx_v_t_new - __pyx_v_t_old);\n",
-       "
+594:                 step_size = fabs(step)
\n", - "
        __pyx_v_step_size = fabs(__pyx_v_step);\n",
-       "/* … */\n",
-       "        __pyx_v_step_size = fabs(__pyx_v_step);\n",
-       "
 595: 
\n", - "
 596:             # Calculate derivative using RK method
\n", - "
+597:             for i in range(y_size):
\n", - "
      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_y_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+598:                 K_view[0, i] = dydt_old_view[i]
\n", - "
        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = 0;\n",
-       "        __pyx_t_23 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_23 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_i;\n",
-       "        __pyx_t_12 = 0;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_24 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_14 * __pyx_v_dydt_old_view.strides[0]) )));\n",
-       "      }\n",
-       "
 599: 
\n", - "
+600:             for s in range(1, len_C):
\n", - "
      __pyx_t_17 = __pyx_v_len_C;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "        __pyx_v_s = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_len_C;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_11 = 1; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "        __pyx_v_s = __pyx_t_11;\n",
-       "
+601:                 c = C_view[s]
\n", - "
        __pyx_t_14 = __pyx_v_s;\n",
-       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_14 = __pyx_v_s;\n",
-       "        __pyx_v_c = (*((double *) ( /* dim=0 */ (__pyx_v_C_view.data + __pyx_t_14 * __pyx_v_C_view.strides[0]) )));\n",
-       "
+602:                 time_ = t_old + c * step
\n", - "
        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
-       "/* … */\n",
-       "        __pyx_v_time_ = (__pyx_v_t_old + (__pyx_v_c * __pyx_v_step));\n",
-       "
 603: 
\n", - "
 604:                 # Dot Product (K, a) * step
\n", - "
+605:                 for j in range(s):
\n", - "
        __pyx_t_21 = __pyx_v_s;\n",
-       "        __pyx_t_26 = __pyx_t_21;\n",
-       "        for (__pyx_t_27 = 0; __pyx_t_27 < __pyx_t_26; __pyx_t_27+=1) {\n",
-       "          __pyx_v_j = __pyx_t_27;\n",
-       "/* … */\n",
-       "        __pyx_t_22 = __pyx_v_s;\n",
-       "        __pyx_t_27 = __pyx_t_22;\n",
-       "        for (__pyx_t_28 = 0; __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {\n",
-       "          __pyx_v_j = __pyx_t_28;\n",
-       "
+606:                     for i in range(y_size):
\n", - "
          __pyx_t_3 = __pyx_v_y_size;\n",
-       "          __pyx_t_10 = __pyx_t_3;\n",
-       "          for (__pyx_t_28 = 0; __pyx_t_28 < __pyx_t_10; __pyx_t_28+=1) {\n",
-       "            __pyx_v_i = __pyx_t_28;\n",
-       "/* … */\n",
-       "          __pyx_t_3 = __pyx_v_y_size;\n",
-       "          __pyx_t_10 = __pyx_t_3;\n",
-       "          for (__pyx_t_29 = 0; __pyx_t_29 < __pyx_t_10; __pyx_t_29+=1) {\n",
-       "            __pyx_v_i = __pyx_t_29;\n",
-       "
+607:                         if j == 0:
\n", - "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "
 608:                             # Initialize
\n", - "
+609:                             y_new_view[i] = y_old_view[i]
\n", - "
              __pyx_t_14 = __pyx_v_i;\n",
-       "              __pyx_t_23 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_23 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "/* … */\n",
-       "              __pyx_t_14 = __pyx_v_i;\n",
-       "              __pyx_t_24 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_14 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "
 610: 
\n", - "
+611:                         y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)
\n", - "
            __pyx_t_14 = __pyx_v_i;\n",
-       "            __pyx_t_23 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_29 = __pyx_v_s;\n",
-       "            __pyx_t_30 = __pyx_v_j;\n",
-       "            __pyx_t_31 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_31 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_23 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_29 * __pyx_v_A_view.strides[0]) ) + __pyx_t_30 * __pyx_v_A_view.strides[1]) )))) * __pyx_v_step));\n",
-       "          }\n",
-       "        }\n",
-       "/* … */\n",
-       "            __pyx_t_14 = __pyx_v_i;\n",
-       "            __pyx_t_24 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_30 = __pyx_v_s;\n",
-       "            __pyx_t_31 = __pyx_v_j;\n",
-       "            __pyx_t_32 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_32 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))), (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A_view.data + __pyx_t_30 * __pyx_v_A_view.strides[0]) ) + __pyx_t_31 * __pyx_v_A_view.strides[1]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
-       "          }\n",
-       "        }\n",
-       "
 612: 
\n", - "
+613:                 if use_args:
\n", - "
        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L95;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L95;\n",
-       "        }\n",
-       "
+614:                     diffeq(time_, y_new, diffeq_out, *args)
\n", - "
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_GIVEREF(__pyx_t_2);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "          __Pyx_INCREF(__pyx_v_y_new);\n",
-       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_y_new);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_diffeq_out);\n",
-       "          __pyx_t_2 = 0;\n",
-       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "            __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_2 = PyNumber_Add(__pyx_t_15, __pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_2, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_GIVEREF(__pyx_t_2);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "          __Pyx_INCREF(__pyx_v_y_new);\n",
-       "          __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_y_new);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "          __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "          PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_diffeq_out);\n",
-       "          __pyx_t_2 = 0;\n",
-       "          if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "            PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "            __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          }\n",
-       "          __pyx_t_2 = PyNumber_Add(__pyx_t_15, __pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_2, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 614, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_15);\n",
-       "          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "
 615:                 else:
\n", - "
+616:                     diffeq(time_, y_new, diffeq_out)
\n", - "
        /*else*/ {\n",
-       "          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 616, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "          __pyx_t_7 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "          __pyx_t_13 = 0;\n",
-       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
-       "            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);\n",
-       "            if (likely(__pyx_t_8)) {\n",
-       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
-       "              __Pyx_INCREF(__pyx_t_8);\n",
-       "              __Pyx_INCREF(function);\n",
-       "              __Pyx_DECREF_SET(__pyx_t_7, function);\n",
-       "              __pyx_t_13 = 1;\n",
-       "            }\n",
-       "          }\n",
-       "          {\n",
-       "            PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_2, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "            __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 616, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "          }\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __pyx_L95:;\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 616, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_2);\n",
-       "          __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "          __pyx_t_7 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "          __pyx_t_13 = 0;\n",
-       "          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
-       "            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);\n",
-       "            if (likely(__pyx_t_8)) {\n",
-       "              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
-       "              __Pyx_INCREF(__pyx_t_8);\n",
-       "              __Pyx_INCREF(function);\n",
-       "              __Pyx_DECREF_SET(__pyx_t_7, function);\n",
-       "              __pyx_t_13 = 1;\n",
-       "            }\n",
-       "          }\n",
-       "          {\n",
-       "            PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_2, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "            __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 616, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "          }\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        }\n",
-       "        __pyx_L95:;\n",
-       "
 617: 
\n", - "
+618:                 for i in range(y_size):
\n", - "
        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_10; __pyx_t_21+=1) {\n",
-       "          __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_10; __pyx_t_22+=1) {\n",
-       "          __pyx_v_i = __pyx_t_22;\n",
-       "
+619:                     K_view[s, i] = diffeq_out_view[i]
\n", - "
          __pyx_t_30 = __pyx_v_i;\n",
-       "          __pyx_t_29 = __pyx_v_s;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_29 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_30 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "      }\n",
-       "/* … */\n",
-       "          __pyx_t_31 = __pyx_v_i;\n",
-       "          __pyx_t_30 = __pyx_v_s;\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_30 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_31 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "      }\n",
-       "
 620: 
\n", - "
 621:             # Dot Product (K, B) * step
\n", - "
+622:             for j in range(rk_n_stages):
\n", - "
      __pyx_t_17 = __pyx_v_rk_n_stages;\n",
-       "      __pyx_t_18 = __pyx_t_17;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_18; __pyx_t_11+=1) {\n",
-       "        __pyx_v_j = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_18 = __pyx_v_rk_n_stages;\n",
-       "      __pyx_t_19 = __pyx_t_18;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_19; __pyx_t_11+=1) {\n",
-       "        __pyx_v_j = __pyx_t_11;\n",
-       "
 623:                 # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match
\n", - "
 624:                 #  the shape of B.
\n", - "
+625:                 for i in range(y_size):
\n", - "
        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_10; __pyx_t_21+=1) {\n",
-       "          __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_10; __pyx_t_22+=1) {\n",
-       "          __pyx_v_i = __pyx_t_22;\n",
-       "
+626:                     if j == 0:
\n", - "
          __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          }\n",
-       "/* … */\n",
-       "          __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          }\n",
-       "
 627:                         # Initialize
\n", - "
+628:                         y_new_view[i] = y_old_view[i]
\n", - "
            __pyx_t_30 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_30 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "/* … */\n",
-       "            __pyx_t_31 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_31 * __pyx_v_y_old_view.strides[0]) )));\n",
-       "
+629:                     y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)
\n", - "
          __pyx_t_30 = __pyx_v_i;\n",
-       "          __pyx_t_12 = __pyx_v_j;\n",
-       "          __pyx_t_29 = __pyx_v_i;\n",
-       "          __pyx_t_23 = __pyx_v_j;\n",
-       "          __pyx_t_14 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_30 * __pyx_v_y_new_view.strides[0]) ))) + (((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_29 * __pyx_v_K_view.strides[1]) ))) * (*((double *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_23 * __pyx_v_B_view.strides[0]) )))) * __pyx_v_step));\n",
-       "        }\n",
-       "      }\n",
-       "/* … */\n",
-       "          __pyx_t_31 = __pyx_v_i;\n",
-       "          __pyx_t_12 = __pyx_v_j;\n",
-       "          __pyx_t_30 = __pyx_v_i;\n",
-       "          __pyx_t_24 = __pyx_v_j;\n",
-       "          __pyx_t_14 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_14 * __pyx_v_y_new_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_31 * __pyx_v_y_new_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_30 * __pyx_v_K_view.strides[1]) ))), (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_B_view.data + __pyx_t_24 * __pyx_v_B_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
-       "        }\n",
-       "      }\n",
-       "
 630: 
\n", - "
+631:             if use_args:
\n", - "
      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L103;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L103;\n",
-       "      }\n",
-       "
+632:                 diffeq(t_new, y_new, diffeq_out, *args)
\n", - "
        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_GIVEREF(__pyx_t_15);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_15 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_15 = PyNumber_Add(__pyx_t_7, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_GIVEREF(__pyx_t_15);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_y_new);\n",
-       "        __Pyx_GIVEREF(__pyx_v_y_new);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_y_new);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "        __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_diffeq_out);\n",
-       "        __pyx_t_15 = 0;\n",
-       "        if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "          PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "          __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        }\n",
-       "        __pyx_t_15 = PyNumber_Add(__pyx_t_7, __pyx_v_args); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_diffeq, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 632, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "
 633:             else:
\n", - "
+634:                 diffeq(t_new, y_new, diffeq_out)
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 634, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_2 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {\n",
-       "          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);\n",
-       "          if (likely(__pyx_t_8)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);\n",
-       "            __Pyx_INCREF(__pyx_t_8);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_2, function);\n",
-       "            __pyx_t_13 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 634, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_7);\n",
-       "          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      }\n",
-       "      __pyx_L103:;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_15 = PyFloat_FromDouble(__pyx_v_t_new); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 634, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "        __pyx_t_2 = __pyx_v_diffeq; __pyx_t_8 = NULL;\n",
-       "        __pyx_t_13 = 0;\n",
-       "        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {\n",
-       "          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);\n",
-       "          if (likely(__pyx_t_8)) {\n",
-       "            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);\n",
-       "            __Pyx_INCREF(__pyx_t_8);\n",
-       "            __Pyx_INCREF(function);\n",
-       "            __Pyx_DECREF_SET(__pyx_t_2, function);\n",
-       "            __pyx_t_13 = 1;\n",
-       "          }\n",
-       "        }\n",
-       "        {\n",
-       "          PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_15, __pyx_v_y_new, __pyx_v_diffeq_out};\n",
-       "          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 634, __pyx_L1_error)\n",
-       "          __Pyx_GOTREF(__pyx_t_7);\n",
-       "          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        }\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      }\n",
-       "      __pyx_L103:;\n",
-       "
 635: 
\n", - "
+636:             for i in range(store_loop_size):
\n", - "
      __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+637:                 if i < extra_start:
\n", - "
        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L106;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L106;\n",
-       "        }\n",
-       "
 638:                     # Set diffeq results
\n", - "
+639:                     dydt_new_view[i] = diffeq_out_view[i]
\n", - "
          __pyx_t_23 = __pyx_v_i;\n",
-       "          __pyx_t_29 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_29 * __pyx_v_dydt_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_23 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "/* … */\n",
-       "          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_30 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_30 * __pyx_v_dydt_new_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "
 640:                 else:
\n", - "
 641:                     # Set extra results
\n", - "
+642:                     extra_result_view[i - extra_start] = diffeq_out_view[i]
\n", - "
        /*else*/ {\n",
-       "          __pyx_t_23 = __pyx_v_i;\n",
-       "          __pyx_t_29 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "          *((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_29 * __pyx_v_extra_result_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_23 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "        __pyx_L106:;\n",
-       "      }\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_30 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_30 * __pyx_v_extra_result_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_24 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "        }\n",
-       "        __pyx_L106:;\n",
-       "      }\n",
-       "
 643: 
\n", - "
+644:             if rk_method == 2:
\n", - "
      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L107;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_rk_method == 2);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L107;\n",
-       "      }\n",
-       "
 645:                 # Calculate Error for DOP853
\n", - "
 646: 
\n", - "
 647:                 # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale
\n", - "
+648:                 for i in range(y_size):
\n", - "
        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
 649:                     # Check how well this step performed.
\n", - "
+650:                     scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol
\n", - "
          __pyx_t_23 = __pyx_v_i;\n",
-       "          __pyx_t_25 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_23 * __pyx_v_y_new_view.strides[0]) )))); if (unlikely(__pyx_t_25 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 650, __pyx_L1_error)\n",
-       "          __pyx_t_23 = __pyx_v_i;\n",
-       "          __pyx_t_24 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_23 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_24 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 650, __pyx_L1_error)\n",
-       "          if ((__pyx_t_25 > __pyx_t_24)) {\n",
-       "            __pyx_t_22 = __pyx_t_25;\n",
-       "          } else {\n",
-       "            __pyx_t_22 = __pyx_t_24;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_22 * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_26 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_24 * __pyx_v_y_new_view.strides[0]) )))); if (unlikely(__pyx_t_26 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 650, __pyx_L1_error)\n",
-       "          __pyx_t_24 = __pyx_v_i;\n",
-       "          __pyx_t_25 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_24 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_25 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 650, __pyx_L1_error)\n",
-       "          if ((__pyx_t_26 > __pyx_t_25)) {\n",
-       "            __pyx_t_23 = __pyx_t_26;\n",
-       "          } else {\n",
-       "            __pyx_t_23 = __pyx_t_25;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_23 * __pyx_v_rtol));\n",
-       "
 651: 
\n", - "
+652:                     for j in range(rk_n_stages_plus1):
\n", - "
          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_18; __pyx_t_21+=1) {\n",
-       "            __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_19; __pyx_t_22+=1) {\n",
-       "            __pyx_v_j = __pyx_t_22;\n",
-       "
+653:                         if j == 0:
\n", - "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "              goto __pyx_L112;\n",
-       "            }\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "              goto __pyx_L112;\n",
-       "            }\n",
-       "
 654:                             # Initialize
\n", - "
+655:                             E5_tmp_view[i] = 0.
\n", - "
              __pyx_t_23 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_23 * __pyx_v_E5_tmp_view.strides[0]) )) = 0.;\n",
-       "/* … */\n",
-       "              __pyx_t_24 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_24 * __pyx_v_E5_tmp_view.strides[0]) )) = __pyx_t_double_complex_from_parts(0., 0);\n",
-       "
+656:                             E3_tmp_view[i] = 0.
\n", - "
              __pyx_t_23 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_23 * __pyx_v_E3_tmp_view.strides[0]) )) = 0.;\n",
-       "/* … */\n",
-       "              __pyx_t_24 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_24 * __pyx_v_E3_tmp_view.strides[0]) )) = __pyx_t_double_complex_from_parts(0., 0);\n",
-       "
 657: 
\n", - "
+658:                         elif j == rk_n_stages:
\n", - "
            __pyx_t_4 = (__pyx_v_j == __pyx_v_rk_n_stages);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "            __pyx_L112:;\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == __pyx_v_rk_n_stages);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "            __pyx_L112:;\n",
-       "
 659:                             # Set last array of the K array.
\n", - "
+660:                             K_view[j, i] = dydt_new_view[i]
\n", - "
              __pyx_t_23 = __pyx_v_i;\n",
-       "              __pyx_t_29 = __pyx_v_j;\n",
-       "              __pyx_t_12 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_29 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_23 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "              __pyx_t_24 = __pyx_v_i;\n",
-       "              __pyx_t_30 = __pyx_v_j;\n",
-       "              __pyx_t_12 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_30 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_24 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "
 661: 
\n", - "
+662:                         K_scale = K_view[j, i] / scale
\n", - "
            __pyx_t_23 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_23 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))) / __pyx_v_scale);\n",
-       "/* … */\n",
-       "            __pyx_t_24 = __pyx_v_j;\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = __Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_12 * __pyx_v_K_view.strides[1]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0));\n",
-       "
+663:                         E5_tmp_view[i] = E5_tmp_view[i] + (K_scale * E5_view[j])
\n", - "
            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_23 = __pyx_v_j;\n",
-       "            __pyx_t_29 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_29 * __pyx_v_E5_tmp_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_12 * __pyx_v_E5_tmp_view.strides[0]) ))) + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_23 * __pyx_v_E5_view.strides[0]) )))));\n",
-       "/* … */\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_24 = __pyx_v_j;\n",
-       "            __pyx_t_30 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_30 * __pyx_v_E5_tmp_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_12 * __pyx_v_E5_tmp_view.strides[0]) ))), __Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_view.data + __pyx_t_24 * __pyx_v_E5_view.strides[0]) )))));\n",
-       "
+664:                         E3_tmp_view[i] = E3_tmp_view[i] + (K_scale * E3_view[j])
\n", - "
            __pyx_t_23 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_29 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_29 * __pyx_v_E3_tmp_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_23 * __pyx_v_E3_tmp_view.strides[0]) ))) + (__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
-       "          }\n",
-       "        }\n",
-       "/* … */\n",
-       "            __pyx_t_24 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_30 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_30 * __pyx_v_E3_tmp_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_24 * __pyx_v_E3_tmp_view.strides[0]) ))), __Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_view.data + __pyx_t_12 * __pyx_v_E3_view.strides[0]) )))));\n",
-       "          }\n",
-       "        }\n",
-       "
 665: 
\n", - "
 666:                 # Find norms for each error
\n", - "
+667:                 error_norm5 = 0.
\n", - "
        __pyx_v_error_norm5 = 0.;\n",
-       "/* … */\n",
-       "        __pyx_v_error_norm5 = 0.;\n",
-       "
+668:                 error_norm3 = 0.
\n", - "
        __pyx_v_error_norm3 = 0.;\n",
-       "/* … */\n",
-       "        __pyx_v_error_norm3 = 0.;\n",
-       "
 669: 
\n", - "
 670:                 # Perform summation
\n", - "
+671:                 for i in range(y_size):
\n", - "
        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
+672:                     error_norm5_abs = dabs(E5_tmp_view[i])
\n", - "
          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_12 * __pyx_v_E5_tmp_view.strides[0]) )))); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 672, __pyx_L1_error)\n",
-       "          __pyx_v_error_norm5_abs = __pyx_t_22;\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E5_tmp_view.data + __pyx_t_12 * __pyx_v_E5_tmp_view.strides[0]) )))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 672, __pyx_L1_error)\n",
-       "          __pyx_v_error_norm5_abs = __pyx_t_23;\n",
-       "
+673:                     error_norm3_abs = dabs(E3_tmp_view[i])
\n", - "
          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_12 * __pyx_v_E3_tmp_view.strides[0]) )))); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L1_error)\n",
-       "          __pyx_v_error_norm3_abs = __pyx_t_22;\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E3_tmp_view.data + __pyx_t_12 * __pyx_v_E3_tmp_view.strides[0]) )))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L1_error)\n",
-       "          __pyx_v_error_norm3_abs = __pyx_t_23;\n",
-       "
 674: 
\n", - "
+675:                     error_norm5 += (error_norm5_abs * error_norm5_abs)
\n", - "
          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm5 = (__pyx_v_error_norm5 + (__pyx_v_error_norm5_abs * __pyx_v_error_norm5_abs));\n",
-       "
+676:                     error_norm3 += (error_norm3_abs * error_norm3_abs)
\n", - "
          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
-       "        }\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm3 = (__pyx_v_error_norm3 + (__pyx_v_error_norm3_abs * __pyx_v_error_norm3_abs));\n",
-       "        }\n",
-       "
 677: 
\n", - "
 678:                 # Check if errors are zero
\n", - "
+679:                 if (error_norm5 == 0.) and (error_norm3 == 0.):
\n", - "
        __pyx_t_6 = (__pyx_v_error_norm5 == 0.);\n",
-       "        if (__pyx_t_6) {\n",
-       "        } else {\n",
-       "          __pyx_t_4 = __pyx_t_6;\n",
-       "          goto __pyx_L116_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_t_6 = (__pyx_v_error_norm3 == 0.);\n",
-       "        __pyx_t_4 = __pyx_t_6;\n",
-       "        __pyx_L116_bool_binop_done:;\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L115;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_6 = (__pyx_v_error_norm5 == 0.);\n",
-       "        if (__pyx_t_6) {\n",
-       "        } else {\n",
-       "          __pyx_t_4 = __pyx_t_6;\n",
-       "          goto __pyx_L116_bool_binop_done;\n",
-       "        }\n",
-       "        __pyx_t_6 = (__pyx_v_error_norm3 == 0.);\n",
-       "        __pyx_t_4 = __pyx_t_6;\n",
-       "        __pyx_L116_bool_binop_done:;\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L115;\n",
-       "        }\n",
-       "
+680:                     error_norm = 0.
\n", - "
          __pyx_v_error_norm = 0.;\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm = 0.;\n",
-       "
 681:                 else:
\n", - "
+682:                     error_denom = error_norm5 + 0.01 * error_norm3
\n", - "
        /*else*/ {\n",
-       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_v_error_denom = (__pyx_v_error_norm5 + (0.01 * __pyx_v_error_norm3));\n",
-       "
+683:                     error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)
\n", - "
          __pyx_v_error_norm = ((__pyx_v_step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl)));\n",
-       "        }\n",
-       "        __pyx_L115:;\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm = ((__pyx_v_step_size * __pyx_v_error_norm5) / sqrt((__pyx_v_error_denom * __pyx_v_y_size_dbl)));\n",
-       "        }\n",
-       "        __pyx_L115:;\n",
-       "
 684: 
\n", - "
 685:             else:
\n", - "
 686:                 # Calculate Error for RK23 and RK45
\n", - "
+687:                 error_norm = 0.
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_error_norm = 0.;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_error_norm = 0.;\n",
-       "
 688:                 # Dot Product (K, E) * step / scale
\n", - "
+689:                 for i in range(y_size):
\n", - "
        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_3 = __pyx_v_y_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
 690: 
\n", - "
 691:                     # Check how well this step performed.
\n", - "
+692:                     scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol
\n", - "
          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_22 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )))); if (unlikely(__pyx_t_22 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 692, __pyx_L1_error)\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_25 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_25 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 692, __pyx_L1_error)\n",
-       "          if ((__pyx_t_22 > __pyx_t_25)) {\n",
-       "            __pyx_t_24 = __pyx_t_22;\n",
-       "          } else {\n",
-       "            __pyx_t_24 = __pyx_t_25;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_24 * __pyx_v_rtol));\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_23 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )))); if (unlikely(__pyx_t_23 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 692, __pyx_L1_error)\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_26 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_12 * __pyx_v_y_old_view.strides[0]) )))); if (unlikely(__pyx_t_26 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 692, __pyx_L1_error)\n",
-       "          if ((__pyx_t_23 > __pyx_t_26)) {\n",
-       "            __pyx_t_25 = __pyx_t_23;\n",
-       "          } else {\n",
-       "            __pyx_t_25 = __pyx_t_26;\n",
-       "          }\n",
-       "          __pyx_v_scale = (__pyx_v_atol + (__pyx_t_25 * __pyx_v_rtol));\n",
-       "
 693: 
\n", - "
+694:                     for j in range(rk_n_stages_plus1):
\n", - "
          __pyx_t_17 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_18 = __pyx_t_17;\n",
-       "          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_18; __pyx_t_21+=1) {\n",
-       "            __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "          __pyx_t_18 = __pyx_v_rk_n_stages_plus1;\n",
-       "          __pyx_t_19 = __pyx_t_18;\n",
-       "          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_19; __pyx_t_22+=1) {\n",
-       "            __pyx_v_j = __pyx_t_22;\n",
-       "
+695:                         if j == 0:
\n", - "
            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "              goto __pyx_L122;\n",
-       "            }\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == 0);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "              goto __pyx_L122;\n",
-       "            }\n",
-       "
 696:                             # Initialize
\n", - "
+697:                             E_tmp_view[i] = 0.
\n", - "
              __pyx_t_12 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_12 * __pyx_v_E_tmp_view.strides[0]) )) = 0.;\n",
-       "/* … */\n",
-       "              __pyx_t_12 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_12 * __pyx_v_E_tmp_view.strides[0]) )) = __pyx_t_double_complex_from_parts(0., 0);\n",
-       "
+698:                         elif j == rk_n_stages:
\n", - "
            __pyx_t_4 = (__pyx_v_j == __pyx_v_rk_n_stages);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "            __pyx_L122:;\n",
-       "/* … */\n",
-       "            __pyx_t_4 = (__pyx_v_j == __pyx_v_rk_n_stages);\n",
-       "            if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            }\n",
-       "            __pyx_L122:;\n",
-       "
 699:                             # Set last array of the K array.
\n", - "
+700:                             K_view[j, i] = dydt_new_view[i]
\n", - "
              __pyx_t_12 = __pyx_v_i;\n",
-       "              __pyx_t_23 = __pyx_v_j;\n",
-       "              __pyx_t_29 = __pyx_v_i;\n",
-       "              *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_23 * __pyx_v_K_view.strides[0]) ) + __pyx_t_29 * __pyx_v_K_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "              __pyx_t_12 = __pyx_v_i;\n",
-       "              __pyx_t_24 = __pyx_v_j;\n",
-       "              __pyx_t_30 = __pyx_v_i;\n",
-       "              *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_24 * __pyx_v_K_view.strides[0]) ) + __pyx_t_30 * __pyx_v_K_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "
 701: 
\n", - "
+702:                         K_scale = K_view[j, i] / scale
\n", - "
            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_29 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = ((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_29 * __pyx_v_K_view.strides[1]) ))) / __pyx_v_scale);\n",
-       "/* … */\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_30 = __pyx_v_i;\n",
-       "            __pyx_v_K_scale = __Pyx_c_quot_double((*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_K_view.data + __pyx_t_12 * __pyx_v_K_view.strides[0]) ) + __pyx_t_30 * __pyx_v_K_view.strides[1]) ))), __pyx_t_double_complex_from_parts(__pyx_v_scale, 0));\n",
-       "
+703:                         E_tmp_view[i] = E_tmp_view[i] + (K_scale * E_view[j] * step)
\n", - "
            __pyx_t_29 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_23 = __pyx_v_i;\n",
-       "            *((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_23 * __pyx_v_E_tmp_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_29 * __pyx_v_E_tmp_view.strides[0]) ))) + ((__pyx_v_K_scale * (*((double *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )))) * __pyx_v_step));\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_30 = __pyx_v_i;\n",
-       "            __pyx_t_12 = __pyx_v_j;\n",
-       "            __pyx_t_24 = __pyx_v_i;\n",
-       "            *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_24 * __pyx_v_E_tmp_view.strides[0]) )) = __Pyx_c_sum_double((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_30 * __pyx_v_E_tmp_view.strides[0]) ))), __Pyx_c_prod_double(__Pyx_c_prod_double(__pyx_v_K_scale, (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_view.data + __pyx_t_12 * __pyx_v_E_view.strides[0]) )))), __pyx_t_double_complex_from_parts(__pyx_v_step, 0)));\n",
-       "          }\n",
-       "
 704: 
\n", - "
+705:                     error_norm_abs = dabs(E_tmp_view[i])
\n", - "
          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_24 = __pyx_fuse_0__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((double *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_12 * __pyx_v_E_tmp_view.strides[0]) )))); if (unlikely(__pyx_t_24 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L1_error)\n",
-       "          __pyx_v_error_norm_abs = __pyx_t_24;\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_t_25 = __pyx_fuse_1__pyx_f_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_dabs((*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_E_tmp_view.data + __pyx_t_12 * __pyx_v_E_tmp_view.strides[0]) )))); if (unlikely(__pyx_t_25 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L1_error)\n",
-       "          __pyx_v_error_norm_abs = __pyx_t_25;\n",
-       "
+706:                     error_norm += (error_norm_abs * error_norm_abs)
\n", - "
          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
-       "        }\n",
-       "/* … */\n",
-       "          __pyx_v_error_norm = (__pyx_v_error_norm + (__pyx_v_error_norm_abs * __pyx_v_error_norm_abs));\n",
-       "        }\n",
-       "
+707:                 error_norm = sqrt(error_norm) / y_size_sqrt
\n", - "
        __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_y_size_sqrt);\n",
-       "      }\n",
-       "      __pyx_L107:;\n",
-       "/* … */\n",
-       "        __pyx_v_error_norm = (sqrt(__pyx_v_error_norm) / __pyx_v_y_size_sqrt);\n",
-       "      }\n",
-       "      __pyx_L107:;\n",
-       "
 708: 
\n", - "
+709:             if error_norm < 1.:
\n", - "
      __pyx_t_4 = (__pyx_v_error_norm < 1.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L123;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_error_norm < 1.);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L123;\n",
-       "      }\n",
-       "
 710:                 # The error is low! Let's update this step for the next time loop
\n", - "
+711:                 if error_norm == 0.:
\n", - "
        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L124;\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_error_norm == 0.);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "          goto __pyx_L124;\n",
-       "        }\n",
-       "
+712:                     step_factor = MAX_FACTOR
\n", - "
          __pyx_v_step_factor = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_FACTOR;\n",
-       "/* … */\n",
-       "          __pyx_v_step_factor = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_FACTOR;\n",
-       "
 713:                 else:
\n", - "
+714:                     error_pow = error_norm**-error_expo
\n", - "
        /*else*/ {\n",
-       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "/* … */\n",
-       "        /*else*/ {\n",
-       "          __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "
+715:                     step_factor = min(MAX_FACTOR, SAFETY * error_pow)
\n", - "
          __pyx_t_24 = (__pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_SAFETY * __pyx_v_error_pow);\n",
-       "          __pyx_t_22 = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_FACTOR;\n",
-       "          if ((__pyx_t_24 < __pyx_t_22)) {\n",
-       "            __pyx_t_25 = __pyx_t_24;\n",
-       "          } else {\n",
-       "            __pyx_t_25 = __pyx_t_22;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_25;\n",
-       "        }\n",
-       "        __pyx_L124:;\n",
-       "/* … */\n",
-       "          __pyx_t_25 = (__pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_SAFETY * __pyx_v_error_pow);\n",
-       "          __pyx_t_23 = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MAX_FACTOR;\n",
-       "          if ((__pyx_t_25 < __pyx_t_23)) {\n",
-       "            __pyx_t_26 = __pyx_t_25;\n",
-       "          } else {\n",
-       "            __pyx_t_26 = __pyx_t_23;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_26;\n",
-       "        }\n",
-       "        __pyx_L124:;\n",
-       "
 716: 
\n", - "
+717:                 if step_rejected:
\n", - "
        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        }\n",
-       "/* … */\n",
-       "        __pyx_t_4 = (__pyx_v_step_rejected != 0);\n",
-       "        if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        }\n",
-       "
 718:                     # There were problems with this step size on the previous step loop. Make sure factor does
\n", - "
 719:                     #    not exasperate them.
\n", - "
+720:                     step_factor = min(step_factor, 1.)
\n", - "
          __pyx_t_25 = 1.;\n",
-       "          __pyx_t_24 = __pyx_v_step_factor;\n",
-       "          if ((__pyx_t_25 < __pyx_t_24)) {\n",
-       "            __pyx_t_22 = __pyx_t_25;\n",
-       "          } else {\n",
-       "            __pyx_t_22 = __pyx_t_24;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_22;\n",
-       "/* … */\n",
-       "          __pyx_t_26 = 1.;\n",
-       "          __pyx_t_25 = __pyx_v_step_factor;\n",
-       "          if ((__pyx_t_26 < __pyx_t_25)) {\n",
-       "            __pyx_t_23 = __pyx_t_26;\n",
-       "          } else {\n",
-       "            __pyx_t_23 = __pyx_t_25;\n",
-       "          }\n",
-       "          __pyx_v_step_factor = __pyx_t_23;\n",
-       "
 721: 
\n", - "
+722:                 step_size = step_size * step_factor
\n", - "
        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
-       "/* … */\n",
-       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_v_step_factor);\n",
-       "
+723:                 step_accepted = True
\n", - "
        __pyx_v_step_accepted = 1;\n",
-       "/* … */\n",
-       "        __pyx_v_step_accepted = 1;\n",
-       "
 724:             else:
\n", - "
+725:                 error_pow = error_norm**-error_expo
\n", - "
      /*else*/ {\n",
-       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_v_error_pow = pow(__pyx_v_error_norm, (-__pyx_v_error_expo));\n",
-       "
+726:                 step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)
\n", - "
        __pyx_t_22 = (__pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_SAFETY * __pyx_v_error_pow);\n",
-       "        __pyx_t_25 = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MIN_FACTOR;\n",
-       "        if ((__pyx_t_22 > __pyx_t_25)) {\n",
-       "          __pyx_t_24 = __pyx_t_22;\n",
-       "        } else {\n",
-       "          __pyx_t_24 = __pyx_t_25;\n",
-       "        }\n",
-       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_24);\n",
-       "/* … */\n",
-       "        __pyx_t_23 = (__pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_SAFETY * __pyx_v_error_pow);\n",
-       "        __pyx_t_26 = __pyx_v_54_cython_magic_db7970e540fc813545549d4b3d4a87af87fb30e1_MIN_FACTOR;\n",
-       "        if ((__pyx_t_23 > __pyx_t_26)) {\n",
-       "          __pyx_t_25 = __pyx_t_23;\n",
-       "        } else {\n",
-       "          __pyx_t_25 = __pyx_t_26;\n",
-       "        }\n",
-       "        __pyx_v_step_size = (__pyx_v_step_size * __pyx_t_25);\n",
-       "
+727:                 step_rejected = True
\n", - "
        __pyx_v_step_rejected = 1;\n",
-       "      }\n",
-       "      __pyx_L123:;\n",
-       "    }\n",
-       "    __pyx_L83_break:;\n",
-       "/* … */\n",
-       "        __pyx_v_step_rejected = 1;\n",
-       "      }\n",
-       "      __pyx_L123:;\n",
-       "    }\n",
-       "    __pyx_L83_break:;\n",
-       "
 728: 
\n", - "
+729:         if not step_accepted:
\n", - "
    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (!(__pyx_v_step_accepted != 0));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 730:             # Issue with step convergence
\n", - "
+731:             status = -2
\n", - "
      __pyx_v_status = -2;\n",
-       "/* … */\n",
-       "      __pyx_v_status = -2;\n",
-       "
+732:             break
\n", - "
      goto __pyx_L77_break;\n",
-       "/* … */\n",
-       "      goto __pyx_L77_break;\n",
-       "
+733:         elif step_error:
\n", - "
    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_step_error != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 734:             # Issue with step convergence
\n", - "
+735:             status = -1
\n", - "
      __pyx_v_status = -1;\n",
-       "/* … */\n",
-       "      __pyx_v_status = -1;\n",
-       "
+736:             break
\n", - "
      goto __pyx_L77_break;\n",
-       "/* … */\n",
-       "      goto __pyx_L77_break;\n",
-       "
 737: 
\n", - "
 738:         # End of step loop. Update the _now variables
\n", - "
+739:         t_old = t_new
\n", - "
    __pyx_v_t_old = __pyx_v_t_new;\n",
-       "/* … */\n",
-       "    __pyx_v_t_old = __pyx_v_t_new;\n",
-       "
+740:         for i in range(y_size):
\n", - "
    __pyx_t_3 = __pyx_v_y_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_3 = __pyx_v_y_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+741:             y_old_view[i] = y_new_view[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_29 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_29 * __pyx_v_y_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_30 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_old_view.data + __pyx_t_30 * __pyx_v_y_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_12 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "
+742:             dydt_old_view[i] = dydt_new_view[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_29 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_29 * __pyx_v_dydt_old_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "    }\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_30 = __pyx_v_i;\n",
-       "      *((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_old_view.data + __pyx_t_30 * __pyx_v_dydt_old_view.strides[0]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_dydt_new_view.data + __pyx_t_12 * __pyx_v_dydt_new_view.strides[0]) )));\n",
-       "    }\n",
-       "
 743: 
\n", - "
 744:         # Save data
\n", - "
+745:         if len_t >= (num_concats * expected_size_to_use):
\n", - "
    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_len_t >= (__pyx_v_num_concats * __pyx_v_expected_size_to_use));\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 746:             # There is more data than we have room in our arrays. 
\n", - "
 747:             # Build new arrays with more space.
\n", - "
 748:             # OPT: Note this is an expensive operation. 
\n", - "
+749:             num_concats += 1
\n", - "
      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
-       "/* … */\n",
-       "      __pyx_v_num_concats = (__pyx_v_num_concats + 1);\n",
-       "
+750:             new_size = num_concats * expected_size_to_use
\n", - "
      __pyx_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
-       "/* … */\n",
-       "      __pyx_v_new_size = (__pyx_v_num_concats * __pyx_v_expected_size_to_use);\n",
-       "
+751:             time_domain_array_new      = np.empty(new_size, dtype=np.float64, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_new_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_7);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "      __pyx_t_7 = 0;\n",
-       "      __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_1);\n",
-       "      __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_new_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_7);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "      __pyx_t_7 = 0;\n",
-       "      __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_8);\n",
-       "      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_time_domain_array_new, __pyx_t_1);\n",
-       "      __pyx_t_1 = 0;\n",
-       "
+752:             y_results_array_new        = np.empty((store_loop_size, new_size), dtype=DTYPE, order='C')
\n", - "
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_new_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_1);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);\n",
-       "      __pyx_t_1 = 0;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_2);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "      __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_1);\n",
-       "      __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_7);\n",
-       "      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_new_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      __Pyx_GIVEREF(__pyx_t_1);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "      __Pyx_GIVEREF(__pyx_t_15);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_15);\n",
-       "      __pyx_t_1 = 0;\n",
-       "      __pyx_t_15 = 0;\n",
-       "      __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_15);\n",
-       "      __Pyx_GIVEREF(__pyx_t_2);\n",
-       "      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_2);\n",
-       "      __pyx_t_2 = 0;\n",
-       "      __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_2);\n",
-       "      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_15, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)\n",
-       "      __Pyx_GOTREF(__pyx_t_1);\n",
-       "      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "      __Pyx_XDECREF_SET(__pyx_v_y_results_array_new, __pyx_t_1);\n",
-       "      __pyx_t_1 = 0;\n",
-       "
+753:             time_domain_array_new_view = time_domain_array_new
\n", - "
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 753, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "      __pyx_v_time_domain_array_new_view = __pyx_t_9;\n",
-       "      __pyx_t_9.memview = NULL;\n",
-       "      __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 753, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_new_view, 1);\n",
-       "      __pyx_v_time_domain_array_new_view = __pyx_t_17;\n",
-       "      __pyx_t_17.memview = NULL;\n",
-       "      __pyx_t_17.data = NULL;\n",
-       "
+754:             y_results_array_new_view   = y_results_array_new
\n", - "
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 754, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 754, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_new_view, 1);\n",
-       "      __pyx_v_y_results_array_new_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "
 755: 
\n", - "
 756:             # Loop through time to fill in these new arrays with the old values
\n", - "
+757:             for i in range(len_t):
\n", - "
      __pyx_t_5 = __pyx_v_len_t;\n",
-       "      __pyx_t_32 = __pyx_t_5;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_32; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "      __pyx_t_5 = __pyx_v_len_t;\n",
-       "      __pyx_t_33 = __pyx_t_5;\n",
-       "      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_33; __pyx_t_11+=1) {\n",
-       "        __pyx_v_i = __pyx_t_11;\n",
-       "
+758:                 time_domain_array_new_view[i] = time_domain_array_view[i]
\n", - "
        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_29 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_29 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_30 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_new_view.data + __pyx_t_30 * __pyx_v_time_domain_array_new_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_12 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "
 759: 
\n", - "
+760:                 for i in range(store_loop_size):
\n", - "
        __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_10; __pyx_t_21+=1) {\n",
-       "          __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "        __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "        __pyx_t_10 = __pyx_t_3;\n",
-       "        for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_10; __pyx_t_22+=1) {\n",
-       "          __pyx_v_i = __pyx_t_22;\n",
-       "
+761:                     y_results_array_new_view[j, i] = y_results_array_view[j, i]
\n", - "
          __pyx_t_12 = __pyx_v_j;\n",
-       "          __pyx_t_29 = __pyx_v_i;\n",
-       "          __pyx_t_23 = __pyx_v_j;\n",
-       "          __pyx_t_30 = __pyx_v_i;\n",
-       "          *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_23 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_30 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_29 * __pyx_v_y_results_array_view.strides[1]) )));\n",
-       "        }\n",
-       "      }\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_j;\n",
-       "          __pyx_t_30 = __pyx_v_i;\n",
-       "          __pyx_t_24 = __pyx_v_j;\n",
-       "          __pyx_t_31 = __pyx_v_i;\n",
-       "          *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_new_view.data + __pyx_t_24 * __pyx_v_y_results_array_new_view.strides[0]) ) + __pyx_t_31 * __pyx_v_y_results_array_new_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_30 * __pyx_v_y_results_array_view.strides[1]) )));\n",
-       "        }\n",
-       "      }\n",
-       "
 762: 
\n", - "
 763:             # No longer need the old arrays. Change where the view is pointing and delete them.
\n", - "
+764:             y_results_array_view = y_results_array_new
\n", - "
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 764, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_y_results_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 764, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_y_results_array_view, 1);\n",
-       "      __pyx_v_y_results_array_view = __pyx_t_16;\n",
-       "      __pyx_t_16.memview = NULL;\n",
-       "      __pyx_t_16.data = NULL;\n",
-       "
+765:             time_domain_array_view = time_domain_array_new
\n", - "
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 765, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "      __pyx_v_time_domain_array_view = __pyx_t_9;\n",
-       "      __pyx_t_9.memview = NULL;\n",
-       "      __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "      __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_time_domain_array_new, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 765, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_v_time_domain_array_view, 1);\n",
-       "      __pyx_v_time_domain_array_view = __pyx_t_17;\n",
-       "      __pyx_t_17.memview = NULL;\n",
-       "      __pyx_t_17.data = NULL;\n",
-       "
 766:             # TODO: Delete the old arrays?
\n", - "
 767: 
\n", - "
 768:         # There should be room in the arrays to add new data.
\n", - "
+769:         time_domain_array_view[len_t] = t_new
\n", - "
    __pyx_t_33 = __pyx_v_len_t;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_33 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
-       "/* … */\n",
-       "    __pyx_t_34 = __pyx_v_len_t;\n",
-       "    *((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_34 * __pyx_v_time_domain_array_view.strides[0]) )) = __pyx_v_t_new;\n",
-       "
 770:         # To match the format that scipy follows, we will take the transpose of y.
\n", - "
+771:         for i in range(store_loop_size):
\n", - "
    __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+772:             if i < extra_start:
\n", - "
      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L136;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_i < __pyx_v_extra_start);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L136;\n",
-       "      }\n",
-       "
 773:                 # Pull from y result
\n", - "
+774:                 y_results_array_view[i, len_t] = y_new_view[i]
\n", - "
        __pyx_t_29 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_33 = __pyx_v_len_t;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_33 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_29 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "/* … */\n",
-       "        __pyx_t_30 = __pyx_v_i;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_34 = __pyx_v_len_t;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_34 * __pyx_v_y_results_array_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_y_new_view.data + __pyx_t_30 * __pyx_v_y_new_view.strides[0]) )));\n",
-       "
 775:             else:
\n", - "
 776:                 # Pull from extra
\n", - "
+777:                 y_results_array_view[i, len_t] = extra_result_view[i - extra_start]
\n", - "
      /*else*/ {\n",
-       "        __pyx_t_29 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_33 = __pyx_v_len_t;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_33 * __pyx_v_y_results_array_view.strides[1]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_29 * __pyx_v_extra_result_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L136:;\n",
-       "    }\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __pyx_t_30 = (__pyx_v_i - __pyx_v_extra_start);\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_34 = __pyx_v_len_t;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_12 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_34 * __pyx_v_y_results_array_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_extra_result_view.data + __pyx_t_30 * __pyx_v_extra_result_view.strides[0]) )));\n",
-       "      }\n",
-       "      __pyx_L136:;\n",
-       "    }\n",
-       "
 778: 
\n", - "
 779:         # Increase number of time points.
\n", - "
+780:         len_t += 1
\n", - "
    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
-       "  }\n",
-       "  __pyx_L77_break:;\n",
-       "/* … */\n",
-       "    __pyx_v_len_t = (__pyx_v_len_t + 1);\n",
-       "  }\n",
-       "  __pyx_L77_break:;\n",
-       "
 781: 
\n", - "
 782:     # # Clean up output.
\n", - "
 783:     cdef str message
\n", - "
+784:     message = 'Not Defined.'
\n", - "
  __Pyx_INCREF(__pyx_kp_u_Not_Defined);\n",
-       "  __pyx_v_message = __pyx_kp_u_Not_Defined;\n",
-       "/* … */\n",
-       "  __Pyx_INCREF(__pyx_kp_u_Not_Defined);\n",
-       "  __pyx_v_message = __pyx_kp_u_Not_Defined;\n",
-       "
+785:     if status == 1:
\n", - "
  __pyx_t_4 = (__pyx_v_status == 1);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L137;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_status == 1);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L137;\n",
-       "  }\n",
-       "
+786:         success = True
\n", - "
    __pyx_v_success = 1;\n",
-       "/* … */\n",
-       "    __pyx_v_success = 1;\n",
-       "
+787:         message = 'Integration finished with no issue.'
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_finished_with_no_iss);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Integration_finished_with_no_iss);\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Integration_finished_with_no_iss);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Integration_finished_with_no_iss);\n",
-       "
+788:     elif status == -1:
\n", - "
  __pyx_t_4 = (__pyx_v_status == -1L);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L137;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_status == -1L);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L137;\n",
-       "  }\n",
-       "
+789:         message = 'Error in step size calculation: Required step size is less than spacing between numbers.'
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Error_in_step_size_calculation_R);\n",
-       "
+790:     elif status < -1:
\n", - "
  __pyx_t_4 = (__pyx_v_status < -1L);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "  __pyx_L137:;\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_status < -1L);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "  __pyx_L137:;\n",
-       "
+791:         message = 'Integration Failed.'
\n", - "
    __Pyx_INCREF(__pyx_kp_u_Integration_Failed);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Integration_Failed);\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_kp_u_Integration_Failed);\n",
-       "    __Pyx_DECREF_SET(__pyx_v_message, __pyx_kp_u_Integration_Failed);\n",
-       "
 792: 
\n", - "
 793: 
\n", - "
 794:     # Create output arrays. To match the format that scipy follows, we will take the transpose of y.
\n", - "
+795:     if success:
\n", - "
  __pyx_t_4 = (__pyx_v_success != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L138;\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_4 = (__pyx_v_success != 0);\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    goto __pyx_L138;\n",
-       "  }\n",
-       "
 796:         # Build final output arrays.
\n", - "
 797:         # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.
\n", - "
 798:         # This process will remove that junk and leave only the wanted data.
\n", - "
+799:         solution_y = np.empty((store_loop_size, len_t), dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __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_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_t); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_15);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __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_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_t); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_15);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "
+800:         solution_t = np.empty(len_t, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_15, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_8;\n",
-       "    __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_15, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 800, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_8;\n",
-       "    __pyx_t_8 = 0;\n",
-       "
 801: 
\n", - "
 802:         # Link memory views
\n", - "
+803:         solution_y_view = solution_y
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 803, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 803, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+804:         solution_t_view = solution_t
\n", - "
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 804, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_9;\n",
-       "    __pyx_t_9.memview = NULL;\n",
-       "    __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 804, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
-       "    __pyx_t_17.memview = NULL;\n",
-       "    __pyx_t_17.data = NULL;\n",
-       "
 805: 
\n", - "
 806:         # Populate values
\n", - "
+807:         for i in range(len_t):
\n", - "
    __pyx_t_5 = __pyx_v_len_t;\n",
-       "    __pyx_t_32 = __pyx_t_5;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_32; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_5 = __pyx_v_len_t;\n",
-       "    __pyx_t_33 = __pyx_t_5;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_33; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+808:             solution_t_view[i] = time_domain_array_view[i]
\n", - "
      __pyx_t_29 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_29 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_30 = __pyx_v_i;\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_12 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_domain_array_view.data + __pyx_t_30 * __pyx_v_time_domain_array_view.strides[0]) )));\n",
-       "
+809:             for j in range(store_loop_size):
\n", - "
      __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_10; __pyx_t_21+=1) {\n",
-       "        __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_store_loop_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_10; __pyx_t_22+=1) {\n",
-       "        __pyx_v_j = __pyx_t_22;\n",
-       "
+810:                 solution_y_view[j, i] = y_results_array_view[j, i]
\n", - "
        __pyx_t_29 = __pyx_v_j;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_30 = __pyx_v_j;\n",
-       "        __pyx_t_23 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_30 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_23 * __pyx_v_solution_y_view.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_29 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_30 = __pyx_v_j;\n",
-       "        __pyx_t_12 = __pyx_v_i;\n",
-       "        __pyx_t_31 = __pyx_v_j;\n",
-       "        __pyx_t_24 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_31 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_24 * __pyx_v_solution_y_view.strides[1]) )) = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_y_results_array_view.data + __pyx_t_30 * __pyx_v_y_results_array_view.strides[0]) ) + __pyx_t_12 * __pyx_v_y_results_array_view.strides[1]) )));\n",
-       "      }\n",
-       "    }\n",
-       "
 811:     else:
\n", - "
 812:         # Build nan arrays
\n", - "
+813:         solution_y = np.nan * np.ones((store_loop_size, 1), dtype=DTYPE, order='C')
\n", - "
  /*else*/ {\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_nan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_8);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "    __Pyx_INCREF(__pyx_int_1);\n",
-       "    __Pyx_GIVEREF(__pyx_int_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_1);\n",
-       "    __pyx_t_8 = 0;\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_7;\n",
-       "    __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "  /*else*/ {\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_nan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __pyx_t_8 = __Pyx_PyInt_From_unsigned_short(__pyx_v_store_loop_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_8);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);\n",
-       "    __Pyx_INCREF(__pyx_int_1);\n",
-       "    __Pyx_GIVEREF(__pyx_int_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_1);\n",
-       "    __pyx_t_8 = 0;\n",
-       "    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 813, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_v_solution_y = __pyx_t_7;\n",
-       "    __pyx_t_7 = 0;\n",
-       "
+814:         solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, __pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = PyNumber_Multiply(__pyx_t_2, __pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_7;\n",
-       "    __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_float64); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__18, __pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = PyNumber_Multiply(__pyx_t_2, __pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_solution_t = __pyx_t_7;\n",
-       "    __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 814, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_tuple__18);\n",
-       "  __Pyx_GIVEREF(__pyx_tuple__18);\n",
-       "
 815: 
\n", - "
 816:         # Link memory views
\n", - "
+817:         solution_y_view = solution_y
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 817, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 817, __pyx_L1_error)\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+818:         solution_t_view = solution_t
\n", - "
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 818, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_9;\n",
-       "    __pyx_t_9.memview = NULL;\n",
-       "    __pyx_t_9.data = NULL;\n",
-       "  }\n",
-       "  __pyx_L138:;\n",
-       "/* … */\n",
-       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 818, __pyx_L1_error)\n",
-       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
-       "    __pyx_t_17.memview = NULL;\n",
-       "    __pyx_t_17.data = NULL;\n",
-       "  }\n",
-       "  __pyx_L138:;\n",
-       "
 819: 
\n", - "
+820:     if run_interpolation and success:
\n", - "
  __pyx_t_6 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_6) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_6;\n",
-       "    goto __pyx_L144_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_6 = (__pyx_v_success != 0);\n",
-       "  __pyx_t_4 = __pyx_t_6;\n",
-       "  __pyx_L144_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "/* … */\n",
-       "  __pyx_t_6 = (__pyx_v_run_interpolation != 0);\n",
-       "  if (__pyx_t_6) {\n",
-       "  } else {\n",
-       "    __pyx_t_4 = __pyx_t_6;\n",
-       "    goto __pyx_L144_bool_binop_done;\n",
-       "  }\n",
-       "  __pyx_t_6 = (__pyx_v_success != 0);\n",
-       "  __pyx_t_4 = __pyx_t_6;\n",
-       "  __pyx_L144_bool_binop_done:;\n",
-       "  if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "  }\n",
-       "
 821:         # User only wants data at specific points.
\n", - "
 822: 
\n", - "
 823:         # The current version of this function has not implemented sicpy's dense output.
\n", - "
 824:         #   Instead we use an interpolation.
\n", - "
 825:         # OPT: this could be done inside the integration loop for performance gains.
\n", - "
+826:         y_results_reduced       = np.empty((total_size, len_teval), dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_v_y_results_reduced = __pyx_t_7;\n",
-       "    __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 826, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __pyx_v_y_results_reduced = __pyx_t_7;\n",
-       "    __pyx_t_7 = 0;\n",
-       "
+827:         y_result_timeslice      = np.empty(len_t, dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_t); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_v_y_result_timeslice = __pyx_t_15;\n",
-       "    __pyx_t_15 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_t); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 827, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __pyx_v_y_result_timeslice = __pyx_t_15;\n",
-       "    __pyx_t_15 = 0;\n",
-       "
+828:         y_result_temp           = np.empty(len_teval, dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_15);\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_y_result_temp = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_15);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_15);\n",
-       "    __pyx_t_15 = 0;\n",
-       "    __pyx_t_15 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __pyx_v_y_result_temp = __pyx_t_1;\n",
-       "    __pyx_t_1 = 0;\n",
-       "
+829:         y_results_reduced_view  = y_results_reduced
\n", - "
    __Pyx_INCREF(__pyx_v_y_results_reduced);\n",
-       "    __pyx_v_y_results_reduced_view = __pyx_v_y_results_reduced;\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_v_y_results_reduced);\n",
-       "    __pyx_v_y_results_reduced_view = __pyx_v_y_results_reduced;\n",
-       "
+830:         y_result_timeslice_view = y_result_timeslice
\n", - "
    __Pyx_INCREF(__pyx_v_y_result_timeslice);\n",
-       "    __pyx_v_y_result_timeslice_view = __pyx_v_y_result_timeslice;\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_v_y_result_timeslice);\n",
-       "    __pyx_v_y_result_timeslice_view = __pyx_v_y_result_timeslice;\n",
-       "
+831:         y_result_temp_view      = y_result_temp
\n", - "
    __Pyx_INCREF(__pyx_v_y_result_temp);\n",
-       "    __pyx_v_y_result_temp_view = __pyx_v_y_result_temp;\n",
-       "/* … */\n",
-       "    __Pyx_INCREF(__pyx_v_y_result_temp);\n",
-       "    __pyx_v_y_result_temp_view = __pyx_v_y_result_temp;\n",
-       "
 832: 
\n", - "
+833:         for j in range(y_size):
\n", - "
    __pyx_t_3 = __pyx_v_y_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_j = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_3 = __pyx_v_y_size;\n",
-       "    __pyx_t_10 = __pyx_t_3;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {\n",
-       "      __pyx_v_j = __pyx_t_11;\n",
-       "
 834:             # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", - "
 835:             # # Set timeslice equal to the time values at this y_j
\n", - "
+836:             for i in range(len_t):
\n", - "
      __pyx_t_5 = __pyx_v_len_t;\n",
-       "      __pyx_t_32 = __pyx_t_5;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_32; __pyx_t_21+=1) {\n",
-       "        __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_5 = __pyx_v_len_t;\n",
-       "      __pyx_t_33 = __pyx_t_5;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_33; __pyx_t_22+=1) {\n",
-       "        __pyx_v_i = __pyx_t_22;\n",
-       "
+837:                 y_result_timeslice_view[i] = solution_y_view[j, i]
\n", - "
        __pyx_t_12 = __pyx_v_j;\n",
-       "        __pyx_t_29 = __pyx_v_i;\n",
-       "        __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_29 * __pyx_v_solution_y_view.strides[1]) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        if (unlikely((__Pyx_SetItemInt(__pyx_v_y_result_timeslice_view, __pyx_v_i, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0))) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "/* … */\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        __pyx_t_30 = __pyx_v_i;\n",
-       "        __pyx_t_35 = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_30 * __pyx_v_solution_y_view.strides[1]) )));\n",
-       "        __pyx_t_1 = __pyx_PyComplex_FromComplex(__pyx_t_35); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        if (unlikely((__Pyx_SetItemInt(__pyx_v_y_result_timeslice_view, __pyx_v_i, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0))) __PYX_ERR(0, 837, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "
 838: 
\n", - "
 839:             # Perform numerical interpolation
\n", - "
 840:             if double_numeric is cython.doublecomplex:
\n", - "
+841:                 interp_complex_array(
\n", - "
      __pyx_f_4CyRK_5array_6interp_interp_complex_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_t_9, __pyx_t_36, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 841, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_36, 1);\n",
-       "      __pyx_t_36.memview = NULL; __pyx_t_36.data = NULL;\n",
-       "
 842:                     t_eval,
\n", - "
 843:                     solution_t_view,
\n", - "
+844:                     y_result_timeslice_view,
\n", - "
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_timeslice_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 844, __pyx_L1_error)\n",
-       "
+845:                     y_result_temp_view
\n", - "
      __pyx_t_36 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_temp_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_36.memview)) __PYX_ERR(0, 845, __pyx_L1_error)\n",
-       "
 846:                     )
\n", - "
 847:             else:
\n", - "
+848:                 interp_array(
\n", - "
      __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_t_9, __pyx_t_34, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 848, __pyx_L1_error)\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "      __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "      __PYX_XCLEAR_MEMVIEW(&__pyx_t_34, 1);\n",
-       "      __pyx_t_34.memview = NULL; __pyx_t_34.data = NULL;\n",
-       "
 849:                     t_eval,
\n", - "
 850:                     solution_t_view,
\n", - "
+851:                     y_result_timeslice_view,
\n", - "
      __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_timeslice_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 851, __pyx_L1_error)\n",
-       "
+852:                     y_result_temp_view
\n", - "
      __pyx_t_34 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_temp_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_34.memview)) __PYX_ERR(0, 852, __pyx_L1_error)\n",
-       "
 853:                     )
\n", - "
 854: 
\n", - "
 855:             # Store result.
\n", - "
+856:             for i in range(len_teval):
\n", - "
      __pyx_t_5 = __pyx_v_len_teval;\n",
-       "      __pyx_t_32 = __pyx_t_5;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_32; __pyx_t_21+=1) {\n",
-       "        __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_5 = __pyx_v_len_teval;\n",
-       "      __pyx_t_33 = __pyx_t_5;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_33; __pyx_t_22+=1) {\n",
-       "        __pyx_v_i = __pyx_t_22;\n",
-       "
+857:                 y_results_reduced_view[j, i] = y_result_temp_view[i]
\n", - "
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_y_result_temp_view, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_GIVEREF(__pyx_t_15);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_15);\n",
-       "        __Pyx_GIVEREF(__pyx_t_2);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);\n",
-       "        __pyx_t_15 = 0;\n",
-       "        __pyx_t_2 = 0;\n",
-       "        if (unlikely((PyObject_SetItem(__pyx_v_y_results_reduced_view, __pyx_t_7, __pyx_t_1) < 0))) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_y_result_temp_view, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_GIVEREF(__pyx_t_15);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_15);\n",
-       "        __Pyx_GIVEREF(__pyx_t_2);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);\n",
-       "        __pyx_t_15 = 0;\n",
-       "        __pyx_t_2 = 0;\n",
-       "        if (unlikely((PyObject_SetItem(__pyx_v_y_results_reduced_view, __pyx_t_7, __pyx_t_1) < 0))) __PYX_ERR(0, 857, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "      }\n",
-       "    }\n",
-       "
 858: 
\n", - "
+859:         if capture_extra:
\n", - "
    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "/* … */\n",
-       "    __pyx_t_4 = (__pyx_v_capture_extra != 0);\n",
-       "    if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "    }\n",
-       "
 860:             # Right now if there is any extra output then it is stored at each time step used in the RK loop.
\n", - "
 861:             # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?
\n", - "
 862:             #  or do we use the interpolation on y to find new values.
\n", - "
 863:             # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.
\n", - "
+864:             if interpolate_extra:
\n", - "
      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L153;\n",
-       "      }\n",
-       "/* … */\n",
-       "      __pyx_t_4 = (__pyx_v_interpolate_extra != 0);\n",
-       "      if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "        goto __pyx_L153;\n",
-       "      }\n",
-       "
 865:                 # Continue the interpolation for the extra values.
\n", - "
+866:                 for j in range(num_extra):
\n", - "
        __pyx_t_35 = __pyx_v_num_extra;\n",
-       "        __pyx_t_36 = __pyx_t_35;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_36; __pyx_t_11+=1) {\n",
-       "          __pyx_v_j = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_37 = __pyx_v_num_extra;\n",
-       "        __pyx_t_38 = __pyx_t_37;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_38; __pyx_t_11+=1) {\n",
-       "          __pyx_v_j = __pyx_t_11;\n",
-       "
 867:                     # np.interp only works on 1D arrays so we must loop through each of the variables:
\n", - "
 868:                     # # Set timeslice equal to the time values at this y_j
\n", - "
+869:                     for i in range(len_t):
\n", - "
          __pyx_t_5 = __pyx_v_len_t;\n",
-       "          __pyx_t_32 = __pyx_t_5;\n",
-       "          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_32; __pyx_t_21+=1) {\n",
-       "            __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "          __pyx_t_5 = __pyx_v_len_t;\n",
-       "          __pyx_t_33 = __pyx_t_5;\n",
-       "          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_33; __pyx_t_22+=1) {\n",
-       "            __pyx_v_i = __pyx_t_22;\n",
-       "
+870:                         y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]
\n", - "
            __pyx_t_29 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_29 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_12 * __pyx_v_solution_y_view.strides[1]) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_y_result_timeslice_view, __pyx_v_i, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0))) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_30 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_12 = __pyx_v_i;\n",
-       "            __pyx_t_35 = (*((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_30 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_12 * __pyx_v_solution_y_view.strides[1]) )));\n",
-       "            __pyx_t_1 = __pyx_PyComplex_FromComplex(__pyx_t_35); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_y_result_timeslice_view, __pyx_v_i, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0))) __PYX_ERR(0, 870, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          }\n",
-       "
 871: 
\n", - "
 872:                     # Perform numerical interpolation
\n", - "
 873:                     if double_numeric is cython.doublecomplex:
\n", - "
+874:                         interp_complex_array(
\n", - "
          __pyx_f_4CyRK_5array_6interp_interp_complex_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_t_36, __pyx_t_9, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error)\n",
-       "          __PYX_XCLEAR_MEMVIEW(&__pyx_t_36, 1);\n",
-       "          __pyx_t_36.memview = NULL; __pyx_t_36.data = NULL;\n",
-       "          __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "          __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "
 875:                                 t_eval,
\n", - "
 876:                                 solution_t_view,
\n", - "
+877:                                 y_result_timeslice_view,
\n", - "
          __pyx_t_36 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_timeslice_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_36.memview)) __PYX_ERR(0, 877, __pyx_L1_error)\n",
-       "
+878:                                 y_result_temp_view
\n", - "
          __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds___pyx_t_double_complex(__pyx_v_y_result_temp_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 878, __pyx_L1_error)\n",
-       "
 879:                                 )
\n", - "
 880:                     else:
\n", - "
+881:                         interp_array(
\n", - "
          __pyx_f_4CyRK_5array_6interp_interp_array(__pyx_v_t_eval, __pyx_v_solution_t_view, __pyx_t_34, __pyx_t_9, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 881, __pyx_L1_error)\n",
-       "          __PYX_XCLEAR_MEMVIEW(&__pyx_t_34, 1);\n",
-       "          __pyx_t_34.memview = NULL; __pyx_t_34.data = NULL;\n",
-       "          __PYX_XCLEAR_MEMVIEW(&__pyx_t_9, 1);\n",
-       "          __pyx_t_9.memview = NULL; __pyx_t_9.data = NULL;\n",
-       "
 882:                                 t_eval,
\n", - "
 883:                                 solution_t_view,
\n", - "
+884:                                 y_result_timeslice_view,
\n", - "
          __pyx_t_34 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_timeslice_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_34.memview)) __PYX_ERR(0, 884, __pyx_L1_error)\n",
-       "
+885:                                 y_result_temp_view
\n", - "
          __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_y_result_temp_view, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 885, __pyx_L1_error)\n",
-       "
 886:                                 )
\n", - "
 887: 
\n", - "
 888:                     # Store result.
\n", - "
+889:                     for i in range(len_teval):
\n", - "
          __pyx_t_5 = __pyx_v_len_teval;\n",
-       "          __pyx_t_32 = __pyx_t_5;\n",
-       "          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_32; __pyx_t_21+=1) {\n",
-       "            __pyx_v_i = __pyx_t_21;\n",
-       "/* … */\n",
-       "          __pyx_t_5 = __pyx_v_len_teval;\n",
-       "          __pyx_t_33 = __pyx_t_5;\n",
-       "          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_33; __pyx_t_22+=1) {\n",
-       "            __pyx_v_i = __pyx_t_22;\n",
-       "
+890:                         y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]
\n", - "
            __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_y_result_temp_view, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_extra_start + __pyx_v_j)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_7);\n",
-       "            __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_GIVEREF(__pyx_t_7);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "            __Pyx_GIVEREF(__pyx_t_2);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);\n",
-       "            __pyx_t_7 = 0;\n",
-       "            __pyx_t_2 = 0;\n",
-       "            if (unlikely((PyObject_SetItem(__pyx_v_y_results_reduced_view, __pyx_t_15, __pyx_t_1) < 0))) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          }\n",
-       "        }\n",
-       "/* … */\n",
-       "            __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_y_result_temp_view, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_extra_start + __pyx_v_j)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_7);\n",
-       "            __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_GIVEREF(__pyx_t_7);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "            __Pyx_GIVEREF(__pyx_t_2);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_2);\n",
-       "            __pyx_t_7 = 0;\n",
-       "            __pyx_t_2 = 0;\n",
-       "            if (unlikely((PyObject_SetItem(__pyx_v_y_results_reduced_view, __pyx_t_15, __pyx_t_1) < 0))) __PYX_ERR(0, 890, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          }\n",
-       "        }\n",
-       "
 891:             else:
\n", - "
 892:                 # Use y and t to recalculate the extra outputs
\n", - "
+893:                 y_interp = np.empty(y_size, dtype=DTYPE)
\n", - "
      /*else*/ {\n",
-       "        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_GIVEREF(__pyx_t_1);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "        __pyx_t_1 = 0;\n",
-       "        __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __pyx_v_y_interp = __pyx_t_7;\n",
-       "        __pyx_t_7 = 0;\n",
-       "/* … */\n",
-       "      /*else*/ {\n",
-       "        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_15);\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_y_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_GIVEREF(__pyx_t_1);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "        __pyx_t_1 = 0;\n",
-       "        __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 893, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_7);\n",
-       "        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __pyx_v_y_interp = __pyx_t_7;\n",
-       "        __pyx_t_7 = 0;\n",
-       "
+894:                 y_interp_view = y_interp
\n", - "
        __Pyx_INCREF(__pyx_v_y_interp);\n",
-       "        __pyx_v_y_interp_view = __pyx_v_y_interp;\n",
-       "/* … */\n",
-       "        __Pyx_INCREF(__pyx_v_y_interp);\n",
-       "        __pyx_v_y_interp_view = __pyx_v_y_interp;\n",
-       "
+895:                 for i in range(len_teval):
\n", - "
        __pyx_t_5 = __pyx_v_len_teval;\n",
-       "        __pyx_t_32 = __pyx_t_5;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_32; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "        __pyx_t_5 = __pyx_v_len_teval;\n",
-       "        __pyx_t_33 = __pyx_t_5;\n",
-       "        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_33; __pyx_t_11+=1) {\n",
-       "          __pyx_v_i = __pyx_t_11;\n",
-       "
+896:                     time_ = t_eval[i]
\n", - "
          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_12 * __pyx_v_t_eval.strides[0]) )));\n",
-       "/* … */\n",
-       "          __pyx_t_12 = __pyx_v_i;\n",
-       "          __pyx_v_time_ = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_12 * __pyx_v_t_eval.strides[0]) )));\n",
-       "
+897:                     for j in range(y_size):
\n", - "
          __pyx_t_3 = __pyx_v_y_size;\n",
-       "          __pyx_t_10 = __pyx_t_3;\n",
-       "          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_10; __pyx_t_21+=1) {\n",
-       "            __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "          __pyx_t_3 = __pyx_v_y_size;\n",
-       "          __pyx_t_10 = __pyx_t_3;\n",
-       "          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_10; __pyx_t_22+=1) {\n",
-       "            __pyx_v_j = __pyx_t_22;\n",
-       "
+898:                         y_interp_view[j] = y_results_reduced_view[j, i]
\n", - "
            __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_7);\n",
-       "            __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_GIVEREF(__pyx_t_7);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
-       "            __Pyx_GIVEREF(__pyx_t_1);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);\n",
-       "            __pyx_t_7 = 0;\n",
-       "            __pyx_t_1 = 0;\n",
-       "            __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_y_results_reduced_view, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_y_interp_view, __pyx_v_j, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0))) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          }\n",
-       "/* … */\n",
-       "            __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_7);\n",
-       "            __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_GIVEREF(__pyx_t_7);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);\n",
-       "            __Pyx_GIVEREF(__pyx_t_1);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);\n",
-       "            __pyx_t_7 = 0;\n",
-       "            __pyx_t_1 = 0;\n",
-       "            __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_y_results_reduced_view, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "            if (unlikely((__Pyx_SetItemInt(__pyx_v_y_interp_view, __pyx_v_j, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0))) __PYX_ERR(0, 898, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "          }\n",
-       "
 899: 
\n", - "
+900:                     if use_args:
\n", - "
          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            goto __pyx_L164;\n",
-       "          }\n",
-       "/* … */\n",
-       "          __pyx_t_4 = (__pyx_v_use_args != 0);\n",
-       "          if (__pyx_t_4) {\n",
-       "/* … */\n",
-       "            goto __pyx_L164;\n",
-       "          }\n",
-       "
+901:                         diffeq(time_, y_interp, diffeq_out, *args)
\n", - "
            __pyx_t_1 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_GIVEREF(__pyx_t_1);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
-       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_interp);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "            __pyx_t_1 = 0;\n",
-       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "              __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            }\n",
-       "            __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __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_v_diffeq, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "            __pyx_t_1 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_GIVEREF(__pyx_t_1);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);\n",
-       "            __Pyx_INCREF(__pyx_v_y_interp);\n",
-       "            __Pyx_GIVEREF(__pyx_v_y_interp);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_y_interp);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq_out);\n",
-       "            __Pyx_GIVEREF(__pyx_v_diffeq_out);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_diffeq_out);\n",
-       "            __pyx_t_1 = 0;\n",
-       "            if (unlikely(__pyx_v_args == Py_None)) {\n",
-       "              PyErr_SetString(PyExc_TypeError, \"'NoneType' object is not iterable\");\n",
-       "              __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            }\n",
-       "            __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __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_v_diffeq, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "
 902:                     else:
\n", - "
+903:                         diffeq(time_, y_interp, diffeq_out)
\n", - "
          /*else*/ {\n",
-       "            __pyx_t_1 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "            __pyx_t_7 = __pyx_v_diffeq; __pyx_t_15 = NULL;\n",
-       "            __pyx_t_13 = 0;\n",
-       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
-       "              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7);\n",
-       "              if (likely(__pyx_t_15)) {\n",
-       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
-       "                __Pyx_INCREF(__pyx_t_15);\n",
-       "                __Pyx_INCREF(function);\n",
-       "                __Pyx_DECREF_SET(__pyx_t_7, function);\n",
-       "                __pyx_t_13 = 1;\n",
-       "              }\n",
-       "            }\n",
-       "            {\n",
-       "              PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_1, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
-       "              __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)\n",
-       "              __Pyx_GOTREF(__pyx_t_2);\n",
-       "              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "            }\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          }\n",
-       "          __pyx_L164:;\n",
-       "/* … */\n",
-       "          /*else*/ {\n",
-       "            __pyx_t_1 = PyFloat_FromDouble(__pyx_v_time_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __Pyx_INCREF(__pyx_v_diffeq);\n",
-       "            __pyx_t_7 = __pyx_v_diffeq; __pyx_t_15 = NULL;\n",
-       "            __pyx_t_13 = 0;\n",
-       "            if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {\n",
-       "              __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7);\n",
-       "              if (likely(__pyx_t_15)) {\n",
-       "                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);\n",
-       "                __Pyx_INCREF(__pyx_t_15);\n",
-       "                __Pyx_INCREF(function);\n",
-       "                __Pyx_DECREF_SET(__pyx_t_7, function);\n",
-       "                __pyx_t_13 = 1;\n",
-       "              }\n",
-       "            }\n",
-       "            {\n",
-       "              PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_1, __pyx_v_y_interp, __pyx_v_diffeq_out};\n",
-       "              __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 3+__pyx_t_13);\n",
-       "              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "              if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)\n",
-       "              __Pyx_GOTREF(__pyx_t_2);\n",
-       "              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "            }\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          }\n",
-       "          __pyx_L164:;\n",
-       "
 904: 
\n", - "
+905:                     for j in range(num_extra):
\n", - "
          __pyx_t_35 = __pyx_v_num_extra;\n",
-       "          __pyx_t_36 = __pyx_t_35;\n",
-       "          for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_36; __pyx_t_21+=1) {\n",
-       "            __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "          __pyx_t_37 = __pyx_v_num_extra;\n",
-       "          __pyx_t_38 = __pyx_t_37;\n",
-       "          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_38; __pyx_t_22+=1) {\n",
-       "            __pyx_v_j = __pyx_t_22;\n",
-       "
+906:                         y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]
\n", - "
            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_extra_start + __pyx_v_j)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_7);\n",
-       "            __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_GIVEREF(__pyx_t_7);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "            __Pyx_GIVEREF(__pyx_t_1);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_1);\n",
-       "            __pyx_t_7 = 0;\n",
-       "            __pyx_t_1 = 0;\n",
-       "            if (unlikely((PyObject_SetItem(__pyx_v_y_results_reduced_view, __pyx_t_15, __pyx_t_2) < 0))) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "      __pyx_L153:;\n",
-       "/* … */\n",
-       "            __pyx_t_12 = (__pyx_v_extra_start + __pyx_v_j);\n",
-       "            __pyx_t_35 = (*((__pyx_t_double_complex *) ( /* dim=0 */ (__pyx_v_diffeq_out_view.data + __pyx_t_12 * __pyx_v_diffeq_out_view.strides[0]) )));\n",
-       "            __pyx_t_2 = __pyx_PyComplex_FromComplex(__pyx_t_35); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_2);\n",
-       "            __pyx_t_7 = PyInt_FromSsize_t((__pyx_v_extra_start + __pyx_v_j)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_7);\n",
-       "            __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_1);\n",
-       "            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_GOTREF(__pyx_t_15);\n",
-       "            __Pyx_GIVEREF(__pyx_t_7);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);\n",
-       "            __Pyx_GIVEREF(__pyx_t_1);\n",
-       "            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_1);\n",
-       "            __pyx_t_7 = 0;\n",
-       "            __pyx_t_1 = 0;\n",
-       "            if (unlikely((PyObject_SetItem(__pyx_v_y_results_reduced_view, __pyx_t_15, __pyx_t_2) < 0))) __PYX_ERR(0, 906, __pyx_L1_error)\n",
-       "            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "      __pyx_L153:;\n",
-       "
 907: 
\n", - "
 908:         # Replace the output y results and time domain with the new reduced one
\n", - "
+909:         solution_y = np.empty((total_size, len_teval), dtype=DTYPE, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_total_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);\n",
-       "    __Pyx_GIVEREF(__pyx_t_1);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_1 = 0;\n",
-       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_7);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7);\n",
-       "    __pyx_t_7 = 0;\n",
-       "    __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_v_DTYPE) < 0) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_y, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "
+910:         solution_t = np.empty(len_teval, dtype=np.float64, order='C')
\n", - "
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_8);\n",
-       "    __pyx_t_8 = 0;\n",
-       "/* … */\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_7);\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_len_teval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_1);\n",
-       "    __Pyx_GIVEREF(__pyx_t_2);\n",
-       "    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);\n",
-       "    __pyx_t_2 = 0;\n",
-       "    __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_2);\n",
-       "    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_15);\n",
-       "    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;\n",
-       "    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 910, __pyx_L1_error)\n",
-       "    __Pyx_GOTREF(__pyx_t_8);\n",
-       "    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "    __Pyx_DECREF_SET(__pyx_v_solution_t, __pyx_t_8);\n",
-       "    __pyx_t_8 = 0;\n",
-       "
+911:         solution_y_view = solution_y
\n", - "
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 911, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dsds___pyx_t_double_complex(__pyx_v_solution_y, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 911, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_y_view, 1);\n",
-       "    __pyx_v_solution_y_view = __pyx_t_16;\n",
-       "    __pyx_t_16.memview = NULL;\n",
-       "    __pyx_t_16.data = NULL;\n",
-       "
+912:         solution_t_view = solution_t
\n", - "
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 912, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "    __pyx_v_solution_t_view = __pyx_t_9;\n",
-       "    __pyx_t_9.memview = NULL;\n",
-       "    __pyx_t_9.data = NULL;\n",
-       "/* … */\n",
-       "    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_solution_t, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 912, __pyx_L1_error)\n",
-       "    __PYX_XCLEAR_MEMVIEW(&__pyx_v_solution_t_view, 1);\n",
-       "    __pyx_v_solution_t_view = __pyx_t_17;\n",
-       "    __pyx_t_17.memview = NULL;\n",
-       "    __pyx_t_17.data = NULL;\n",
-       "
 913: 
\n", - "
 914:         # Update output arrays
\n", - "
+915:         for i in range(len_teval):
\n", - "
    __pyx_t_5 = __pyx_v_len_teval;\n",
-       "    __pyx_t_32 = __pyx_t_5;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_32; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "/* … */\n",
-       "    __pyx_t_5 = __pyx_v_len_teval;\n",
-       "    __pyx_t_33 = __pyx_t_5;\n",
-       "    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_33; __pyx_t_11+=1) {\n",
-       "      __pyx_v_i = __pyx_t_11;\n",
-       "
+916:             solution_t_view[i] = t_eval[i]
\n", - "
      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_29 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_29 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_12 * __pyx_v_t_eval.strides[0]) )));\n",
-       "/* … */\n",
-       "      __pyx_t_12 = __pyx_v_i;\n",
-       "      __pyx_t_30 = __pyx_v_i;\n",
-       "      *((double *) ( /* dim=0 */ (__pyx_v_solution_t_view.data + __pyx_t_30 * __pyx_v_solution_t_view.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_t_eval.data + __pyx_t_12 * __pyx_v_t_eval.strides[0]) )));\n",
-       "
+917:             for j in range(total_size):
\n", - "
      __pyx_t_3 = __pyx_v_total_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_10; __pyx_t_21+=1) {\n",
-       "        __pyx_v_j = __pyx_t_21;\n",
-       "/* … */\n",
-       "      __pyx_t_3 = __pyx_v_total_size;\n",
-       "      __pyx_t_10 = __pyx_t_3;\n",
-       "      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_10; __pyx_t_22+=1) {\n",
-       "        __pyx_v_j = __pyx_t_22;\n",
-       "
 918:                 # To match the format that scipy follows, we will take the transpose of y.
\n", - "
+919:                 solution_y_view[j, i] = y_results_reduced_view[j, i]
\n", - "
        __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __Pyx_GIVEREF(__pyx_t_8);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "        __Pyx_GIVEREF(__pyx_t_2);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);\n",
-       "        __pyx_t_8 = 0;\n",
-       "        __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_y_results_reduced_view, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        __pyx_t_29 = __pyx_v_i;\n",
-       "        *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_29 * __pyx_v_solution_y_view.strides[1]) )) = __pyx_t_24;\n",
-       "      }\n",
-       "    }\n",
-       "/* … */\n",
-       "        __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_8);\n",
-       "        __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_1);\n",
-       "        __Pyx_GIVEREF(__pyx_t_8);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);\n",
-       "        __Pyx_GIVEREF(__pyx_t_2);\n",
-       "        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);\n",
-       "        __pyx_t_8 = 0;\n",
-       "        __pyx_t_2 = 0;\n",
-       "        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_y_results_reduced_view, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_GOTREF(__pyx_t_2);\n",
-       "        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;\n",
-       "        __pyx_t_35 = __Pyx_PyComplex_As___pyx_t_double_complex(__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 919, __pyx_L1_error)\n",
-       "        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;\n",
-       "        __pyx_t_12 = __pyx_v_j;\n",
-       "        __pyx_t_30 = __pyx_v_i;\n",
-       "        *((__pyx_t_double_complex *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_solution_y_view.data + __pyx_t_12 * __pyx_v_solution_y_view.strides[0]) ) + __pyx_t_30 * __pyx_v_solution_y_view.strides[1]) )) = __pyx_t_35;\n",
-       "      }\n",
-       "    }\n",
-       "
 920: 
\n", - "
+921:     return solution_t, solution_y, success, message
\n", - "
  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 921, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 921, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_t);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_t);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_solution_t);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_y);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);\n",
-       "  __Pyx_INCREF(__pyx_v_message);\n",
-       "  __Pyx_GIVEREF(__pyx_v_message);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_message);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_r = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "/* … */\n",
-       "  __Pyx_XDECREF(__pyx_r);\n",
-       "  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_success); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 921, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_2);\n",
-       "  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 921, __pyx_L1_error)\n",
-       "  __Pyx_GOTREF(__pyx_t_1);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_t);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_t);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_solution_t);\n",
-       "  __Pyx_INCREF(__pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_v_solution_y);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_solution_y);\n",
-       "  __Pyx_GIVEREF(__pyx_t_2);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2);\n",
-       "  __Pyx_INCREF(__pyx_v_message);\n",
-       "  __Pyx_GIVEREF(__pyx_v_message);\n",
-       "  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_message);\n",
-       "  __pyx_t_2 = 0;\n",
-       "  __pyx_r = __pyx_t_1;\n",
-       "  __pyx_t_1 = 0;\n",
-       "  goto __pyx_L0;\n",
-       "
 922: 
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "%%cython --annotate --force\n", - "# distutils: language = c++\n", - "# cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False\n", - "\n", - "import cython\n", - "import numpy as np\n", - "cimport numpy as np\n", - "np.import_array()\n", - "from libcpp cimport bool as bool_cpp_t\n", - "from libc.math cimport sqrt, fabs, nextafter, fmax, fmin\n", - "\n", - "from CyRK.array.interp cimport interp_array, interp_complex_array\n", - "from CyRK.rk.rk cimport (\n", - " RK23_C, RK23_B, RK23_E, RK23_A, RK23_order, RK23_error_order, RK23_n_stages, RK23_LEN_C, RK23_LEN_B, RK23_LEN_E,\n", - " RK23_LEN_E3, RK23_LEN_E5, RK23_LEN_A0, RK23_LEN_A1,\n", - " RK45_C, RK45_B, RK45_E, RK45_A, RK45_order, RK45_error_order, RK45_n_stages, RK45_LEN_C, RK45_LEN_B, RK45_LEN_E,\n", - " RK45_LEN_E3, RK45_LEN_E5, RK45_LEN_A0, RK45_LEN_A1,\n", - " DOP_C_REDUCED, DOP_B, DOP_E3, DOP_E5, DOP_A_REDUCED, DOP_order, DOP_error_order, DOP_n_stages,\n", - " DOP_n_stages_extended, DOP_LEN_C, DOP_LEN_B, DOP_LEN_E, DOP_LEN_E3, DOP_LEN_E5, DOP_LEN_A0, DOP_LEN_A1)\n", - "\n", - "# # Integration Constants\n", - "# Multiply steps computed from asymptotic behaviour of errors by this.\n", - "cdef double SAFETY = 0.9\n", - "cdef double MIN_FACTOR = 0.2 # Minimum allowed decrease in a step size.\n", - "cdef double MAX_FACTOR = 10. # Maximum allowed increase in a step size.\n", - "cdef double MAX_STEP = np.inf\n", - "cdef double INF = np.inf\n", - "cdef double EPS = np.finfo(np.float64).eps\n", - "cdef double EPS_10 = EPS * 10.\n", - "cdef double EPS_100 = EPS * 100.\n", - "\n", - "\n", - "cdef double cabs(double complex value) nogil:\n", - " \"\"\" Absolute value function for complex-valued inputs.\n", - " \n", - " Parameters\n", - " ----------\n", - " value : float (double complex)\n", - " Complex-valued number.\n", - " \n", - " Returns\n", - " -------\n", - " value_abs : float (double)\n", - " Absolute value of `value`.\n", - " \"\"\"\n", - "\n", - " cdef double v_real\n", - " cdef double v_imag\n", - " v_real = value.real\n", - " v_imag = value.imag\n", - "\n", - " return sqrt(v_real * v_real + v_imag * v_imag)\n", - "\n", - "# Define fused type to handle both float and complex-valued versions of y and dydt.\n", - "ctypedef fused double_numeric:\n", - " double\n", - " double complex\n", - "\n", - "\n", - "cdef double dabs(double_numeric value) nogil:\n", - " \"\"\" Absolute value function for either float or complex-valued inputs.\n", - " \n", - " Checks the type of value and either utilizes `cabs` (for double complex) or `fabs` (for floats).\n", - " \n", - " Parameters\n", - " ----------\n", - " value : float (double_numeric)\n", - " Float or complex-valued number.\n", - "\n", - " Returns\n", - " -------\n", - " value_abs : float (double)\n", - " Absolute value of `value`.\n", - " \"\"\"\n", - "\n", - " # Check the type of value\n", - " if double_numeric is cython.doublecomplex:\n", - " return cabs(value)\n", - " else:\n", - " return fabs(value)\n", - "\n", - "\n", - "def cyrk_ode(\n", - " diffeq,\n", - " (double, double) t_span,\n", - " const double_numeric[:] y0,\n", - " tuple args = None,\n", - " double rtol = 1.e-6,\n", - " double atol = 1.e-8,\n", - " double max_step = MAX_STEP,\n", - " double first_step = 0.,\n", - " unsigned char rk_method = 1,\n", - " double[:] t_eval = None,\n", - " bool_cpp_t capture_extra = False,\n", - " short num_extra = 0,\n", - " bool_cpp_t interpolate_extra = False,\n", - " unsigned int expected_size = 0\n", - " ):\n", - " \"\"\" A Numba-safe Runge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\n", - "\n", - " Parameters\n", - " ----------\n", - " diffeq : callable\n", - " An njit-compiled function that defines the derivatives of the problem.\n", - " t_span : Tuple[float, float]\n", - " A tuple of the beginning and end of the integration domain's dependent variables.\n", - " y0 : np.ndarray\n", - " 1D array of the initial values of the problem at t_span[0]\n", - " args : tuple = tuple()\n", - " Any additional arguments that are passed to dffeq.\n", - " rtol : float = 1.e-6\n", - " Integration relative tolerance used to determine optimal step size.\n", - " atol : float = 1.e-8\n", - " Integration absolute tolerance used to determine optimal step size.\n", - " max_step : float = np.inf\n", - " Maximum allowed step size.\n", - " first_step : float = None\n", - " Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\n", - " rk_method : int = 1\n", - " The type of RK method used for integration\n", - " 0 = RK23\n", - " 1 = RK45\n", - " 2 = DOP853\n", - " t_eval : np.ndarray = None\n", - " If provided, then the function will interpolate the integration results to provide them at the\n", - " requested t-steps.\n", - " capture_extra : bool = False\n", - " If True, then additional output from the differential equation will be collected (but not used to determine\n", - " integration error).\n", - " Example:\n", - " ```\n", - " def diffeq(t, y, dy):\n", - " a = ... some function of y and t.\n", - " dy[0] = a**2 * sin(t) - y[1]\n", - " dy[1] = a**3 * cos(t) + y[0]\n", - "\n", - " # Storing extra output in dy even though it is not part of the diffeq.\n", - " dy[2] = a\n", - " ```\n", - " num_extra : int = 0\n", - " The number of extra outputs the integrator should expect. With the previous example there is 1 extra output.\n", - " interpolate_extra : bool = False\n", - " If True, and if `t_eval` was provided, then the integrator will interpolate the extra output values at each\n", - " step in `t_eval`.\n", - " expected_size : int = 0\n", - " The integrator must pre-allocate memory to store results from the integration. It will attempt to use arrays sized to `expected_size`. However, if this is too small or too large then performance will be impacted. It is recommended you try out different values based on the problem you are trying to solve.\n", - " If `expected_size=0` (the default) then the solver will attempt to guess a best size. Currently this is a very basic guess so it is not recommended.\n", - " It is better to overshoot than undershoot this guess.\n", - "\n", - " Returns\n", - " -------\n", - " time_domain : np.ndarray\n", - " The final time domain. This is equal to t_eval if it was provided.\n", - " y_results : np.ndarray\n", - " The solution of the differential equation provided for each time_result.\n", - " success : bool\n", - " Final integration success flag.\n", - " message : str\n", - " Any integration messages, useful if success=False.\n", - "\n", - " \"\"\"\n", - " # Setup loop variables\n", - " cdef Py_ssize_t s, i, j\n", - "\n", - " # Determine information about the differential equation based on its initial conditions\n", - " cdef unsigned short y_size\n", - " cdef double y_size_dbl, y_size_sqrt\n", - " cdef bool_cpp_t y_is_complex\n", - " y_size = y0.size\n", - " y_is_complex = False\n", - " y_size_dbl = y_size\n", - " y_size_sqrt = sqrt(y_size_dbl)\n", - "\n", - " # Check the type of the values in y0\n", - " if double_numeric is cython.double:\n", - " DTYPE = np.float64\n", - " elif double_numeric is cython.doublecomplex:\n", - " DTYPE = np.complex128\n", - " y_is_complex = True\n", - " else:\n", - " # Cyrk only supports float64 and complex128.\n", - " raise Exception('Unexpected type found for initial conditions (y0).')\n", - "\n", - " # Build time domain\n", - " cdef double t_start, t_end, t_delta, t_delta_abs, direction, direction_inf, t_old, t_new, time_\n", - " t_start = t_span[0]\n", - " t_end = t_span[1]\n", - " t_delta = t_end - t_start\n", - " t_delta_abs = fabs(t_delta)\n", - " if t_delta >= 0.:\n", - " direction = 1.\n", - " else:\n", - " direction = -1.\n", - " direction_inf = direction * INF\n", - "\n", - " # Expected size of output arrays.\n", - " cdef double temp_expected_size\n", - " cdef unsigned int expected_size_to_use, num_concats\n", - " if expected_size == 0:\n", - " # CySolver will attempt to guess on a best size for the arrays.\n", - " temp_expected_size = 100. * t_delta_abs\n", - " temp_expected_size = fmax(temp_expected_size, 100.)\n", - " temp_expected_size = fmin(temp_expected_size, 10_000_000.)\n", - " expected_size_to_use = temp_expected_size\n", - " else:\n", - " expected_size_to_use = expected_size\n", - " # This variable tracks how many times the storage arrays have been appended.\n", - " # It starts at 1 since there is at least one storage array present.\n", - " num_concats = 1\n", - "\n", - " # Pull out information on t-eval\n", - " cdef unsigned int len_teval\n", - " if t_eval is None:\n", - " len_teval = 0\n", - " else:\n", - " len_teval = t_eval.size\n", - "\n", - " # Pull out information on args\n", - " cdef bool_cpp_t use_args\n", - " if args is None:\n", - " use_args = False\n", - " else:\n", - " use_args = True\n", - "\n", - " # Set integration flags\n", - " cdef bool_cpp_t success, step_accepted, step_rejected, step_error, run_interpolation, \\\n", - " store_extras_during_integration\n", - " success = False\n", - " step_accepted = False\n", - " step_rejected = False\n", - " step_error = False\n", - " run_interpolation = False\n", - " store_extras_during_integration = capture_extra\n", - " if len_teval > 0:\n", - " run_interpolation = True\n", - " if run_interpolation and not interpolate_extra:\n", - " # If y is eventually interpolated but the extra outputs are not being interpolated, then there is\n", - " # no point in storing the values during the integration. Turn off this functionality to save\n", - " # on computation.\n", - " store_extras_during_integration = False\n", - "\n", - " # Initialize arrays that are based on y's size and type.\n", - " y_new = np.empty(y_size, dtype=DTYPE, order='C')\n", - " y_old = np.empty(y_size, dtype=DTYPE, order='C')\n", - " dydt_new = np.empty(y_size, dtype=DTYPE, order='C')\n", - " dydt_old = np.empty(y_size, dtype=DTYPE, order='C')\n", - "\n", - " # Setup memory views for these arrays\n", - " cdef double_numeric[:] y_new_view, y_old_view, dydt_new_view, dydt_old_view\n", - " y_new_view = y_new\n", - " y_old_view = y_old\n", - " dydt_new_view = dydt_new\n", - " dydt_old_view = dydt_old\n", - "\n", - " # Store y0 into the y arrays\n", - " cdef double_numeric y_value\n", - " for i in range(y_size):\n", - " y_value = y0[i]\n", - " y_new_view[i] = y_value\n", - " y_old_view[i] = y_value\n", - "\n", - " # If extra output is true then the output of the diffeq will be larger than the size of y0.\n", - " # Determine that extra size by calling the diffeq and checking its size.\n", - " cdef unsigned short extra_start, total_size, store_loop_size\n", - " extra_start = y_size\n", - " total_size = y_size + num_extra\n", - " # Create arrays based on this total size\n", - " diffeq_out = np.empty(total_size, dtype=DTYPE, order='C')\n", - " y_result_store = np.empty(total_size, dtype=DTYPE, order='C')\n", - " y0_plus_extra = np.empty(total_size, dtype=DTYPE, order='C')\n", - " extra_result = np.empty(num_extra, dtype=DTYPE, order='C')\n", - "\n", - " # Setup memory views\n", - " cdef double_numeric[:] diffeq_out_view, y_result_store_view, y0_plus_extra_view, extra_result_view\n", - " diffeq_out_view = diffeq_out\n", - " y_result_store_view = y_result_store\n", - " y0_plus_extra_view = y0_plus_extra\n", - " extra_result_view = extra_result\n", - "\n", - " # Capture the extra output for the initial condition.\n", - " if capture_extra:\n", - " if use_args:\n", - " diffeq(t_start, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(t_start, y_new, diffeq_out)\n", - "\n", - " # Extract the extra output from the function output.\n", - " for i in range(total_size):\n", - " if i < extra_start:\n", - " # Pull from y0\n", - " y0_plus_extra_view[i] = y0[i]\n", - " else:\n", - " # Pull from extra output\n", - " y0_plus_extra_view[i] = diffeq_out_view[i]\n", - " if store_extras_during_integration:\n", - " store_loop_size = total_size\n", - " else:\n", - " store_loop_size = y_size\n", - " else:\n", - " # No extra output\n", - " store_loop_size = y_size\n", - "\n", - " y0_to_store = np.empty(store_loop_size, dtype=DTYPE, order='C')\n", - " cdef double_numeric[:] y0_to_store_view\n", - " y0_to_store_view = y0_to_store\n", - " for i in range(store_loop_size):\n", - " if store_extras_during_integration:\n", - " y0_to_store_view[i] = y0_plus_extra_view[i]\n", - " else:\n", - " y0_to_store_view[i] = y0[i]\n", - "\n", - " # # Determine RK scheme\n", - " cdef unsigned char rk_order, error_order, rk_n_stages, rk_n_stages_plus1, rk_n_stages_extended\n", - " cdef double error_pow, error_expo, error_norm5, error_norm3, error_norm, error_norm_abs, error_norm3_abs, error_norm5_abs, error_denom\n", - " cdef unsigned char len_C, len_B, len_E, len_E3, len_E5, len_A0, len_A1\n", - "\n", - " if rk_method == 0:\n", - " # RK23 Method\n", - " rk_order = RK23_order\n", - " error_order = RK23_error_order\n", - " rk_n_stages = RK23_n_stages\n", - " len_C = RK23_LEN_C\n", - " len_B = RK23_LEN_B\n", - " len_E = RK23_LEN_E\n", - " len_E3 = RK23_LEN_E3\n", - " len_E5 = RK23_LEN_E5\n", - " len_A0 = RK23_LEN_A0\n", - " len_A1 = RK23_LEN_A1\n", - " elif rk_method == 1:\n", - " # RK45 Method\n", - " rk_order = RK45_order\n", - " error_order = RK45_error_order\n", - " rk_n_stages = RK45_n_stages\n", - " len_C = RK45_LEN_C\n", - " len_B = RK45_LEN_B\n", - " len_E = RK45_LEN_E\n", - " len_E3 = RK45_LEN_E3\n", - " len_E5 = RK45_LEN_E5\n", - " len_A0 = RK45_LEN_A0\n", - " len_A1 = RK45_LEN_A1\n", - " elif rk_method == 2:\n", - " # DOP853 Method\n", - " rk_order = DOP_order\n", - " error_order = DOP_error_order\n", - " rk_n_stages = DOP_n_stages\n", - " len_C = DOP_LEN_C\n", - " len_B = DOP_LEN_B\n", - " len_E = DOP_LEN_E\n", - " len_E3 = DOP_LEN_E3\n", - " len_E5 = DOP_LEN_E5\n", - " len_A0 = DOP_LEN_A0\n", - " len_A1 = DOP_LEN_A1\n", - "\n", - " rk_n_stages_extended = DOP_n_stages_extended\n", - " else:\n", - " raise Exception(\n", - " 'Unexpected rk_method provided. Currently supported versions are:\\n'\n", - " '\\t0 = RK23\\n'\n", - " '\\t1 = RK34\\n'\n", - " '\\t2 = DOP853')\n", - "\n", - " rk_n_stages_plus1 = rk_n_stages + 1\n", - " error_expo = 1. / (error_order + 1.)\n", - "\n", - " # Build RK Arrays. Note that all are 1D except for A and K.\n", - " A = np.empty((len_A0, len_A1), dtype=DTYPE, order='C')\n", - " B = np.empty(len_B, dtype=DTYPE, order='C')\n", - " C = np.empty(len_C, dtype=np.float64, order='C') # C is always float no matter what y0 is.\n", - " E = np.empty(len_E, dtype=DTYPE, order='C')\n", - " E3 = np.empty(len_E3, dtype=DTYPE, order='C')\n", - " E5 = np.empty(len_E5, dtype=DTYPE, order='C')\n", - " E_tmp = np.empty(y_size, dtype=DTYPE, order='C')\n", - " E3_tmp = np.empty(y_size, dtype=DTYPE, order='C')\n", - " E5_tmp = np.empty(y_size, dtype=DTYPE, order='C')\n", - " K = np.zeros((rk_n_stages_plus1, y_size), dtype=DTYPE, order='C') # It is important K be initialized with 0s\n", - "\n", - " # Setup memory views.\n", - " cdef double_numeric[:] B_view, E_view, E3_view, E5_view, E_tmp_view, E3_tmp_view, E5_tmp_view\n", - " cdef double_numeric[:, :] A_view, K_view\n", - " cdef double[:] C_view\n", - " A_view = A\n", - " B_view = B\n", - " C_view = C\n", - " E_view = E\n", - " E3_view = E3\n", - " E5_view = E5\n", - " E_tmp_view = E_tmp\n", - " E3_tmp_view = E3_tmp\n", - " E5_tmp_view = E5_tmp\n", - " K_view = K\n", - "\n", - " # Populate values based on externally defined constants.\n", - " if rk_method == 0:\n", - " # RK23 Method\n", - " for i in range(len_A0):\n", - " for j in range(len_A1):\n", - " A_view[i, j] = RK23_A[i][j]\n", - " for i in range(len_B):\n", - " B_view[i] = RK23_B[i]\n", - " for i in range(len_C):\n", - " C_view[i] = RK23_C[i]\n", - " for i in range(len_E):\n", - " E_view[i] = RK23_E[i]\n", - " # Dummy Variables, set equal to E\n", - " E3_view[i] = RK23_E[i]\n", - " E5_view[i] = RK23_E[i]\n", - " elif rk_method == 1:\n", - " # RK45 Method\n", - " for i in range(len_A0):\n", - " for j in range(len_A1):\n", - " A_view[i, j] = RK45_A[i][j]\n", - " for i in range(len_B):\n", - " B_view[i] = RK45_B[i]\n", - " for i in range(len_C):\n", - " C_view[i] = RK45_C[i]\n", - " for i in range(len_E):\n", - " E_view[i] = RK45_E[i]\n", - " # Dummy Variables, set equal to E\n", - " E3_view[i] = RK45_E[i]\n", - " E5_view[i] = RK45_E[i]\n", - " else:\n", - " # DOP853 Method\n", - " for i in range(len_A0):\n", - " for j in range(len_A1):\n", - " A_view[i, j] = DOP_A_REDUCED[i][j]\n", - " for i in range(len_B):\n", - " B_view[i] = DOP_B[i]\n", - " for i in range(len_C):\n", - " C_view[i] = DOP_C_REDUCED[i]\n", - " for i in range(len_E):\n", - " E3_view[i] = DOP_E3[i]\n", - " E5_view[i] = DOP_E5[i]\n", - " E_view[i] = DOP_E5[i]\n", - " # Dummy Variables, set equal to E3\n", - " E_view[i] = DOP_E3[i]\n", - "\n", - " # # Determine integration parameters\n", - " # Check tolerances\n", - " if rtol < EPS_100:\n", - " rtol = EPS_100\n", - "\n", - " # atol_arr = np.asarray(atol, dtype=np.complex128)\n", - " # if atol_arr.ndim > 0 and atol_arr.shape[0] != y_size:\n", - " # # atol must be either the same for all y or must be provided as an array, one for each y.\n", - " # raise Exception\n", - "\n", - " # Initialize variables for start of integration\n", - " if not capture_extra:\n", - " # If `capture_extra` is True then this step was already performed.\n", - " if use_args:\n", - " diffeq(t_start, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(t_start, y_new, diffeq_out)\n", - "\n", - " t_old = t_start\n", - " t_new = t_start\n", - " # Initialize dydt arrays.\n", - " for i in range(y_size):\n", - " dydt_new_view[i] = diffeq_out_view[i]\n", - " dydt_old_view[i] = dydt_new_view[i]\n", - " \n", - " # Setup storage arrays\n", - " # These arrays are built to fit a number of points equal to `expected_size_to_use`\n", - " # If the integration needs more than that then a new array will be concatenated (with performance costs) to these.\n", - " cdef double_numeric[:, :] y_results_array_view, y_results_array_new_view, solution_y_view\n", - " cdef double[:] time_domain_array_view, time_domain_array_new_view, solution_t_view\n", - " y_results_array = np.empty((store_loop_size, expected_size_to_use), dtype=DTYPE, order='C')\n", - " time_domain_array = np.empty(expected_size_to_use, dtype=np.float64, order='C')\n", - " y_results_array_view = y_results_array\n", - " time_domain_array_view = time_domain_array\n", - "\n", - " # Load initial conditions into output arrays\n", - " time_domain_array_view[0] = t_start\n", - " for i in range(store_loop_size):\n", - " if store_extras_during_integration:\n", - " y_results_array_view[i] = y0_plus_extra_view[i]\n", - " else:\n", - " y_results_array_view[i] = y0[i]\n", - "\n", - " # # Determine size of first step.\n", - " cdef double step_size, d0, d1, d2, d0_abs, d1_abs, d2_abs, h0, h1, scale\n", - " if first_step == 0.:\n", - " # Select an initial step size based on the differential equation.\n", - " # .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", - " # Equations I: Nonstiff Problems\", Sec. II.4.\n", - " if y_size == 0:\n", - " step_size = INF\n", - " else:\n", - " # Find the norm for d0 and d1\n", - " d0 = 0.\n", - " d1 = 0.\n", - " for i in range(y_size):\n", - " scale = atol + dabs(y_old_view[i]) * rtol\n", - "\n", - " d0_abs = dabs(y_old_view[i] / scale)\n", - " d1_abs = dabs(dydt_old_view[i] / scale)\n", - " d0 += (d0_abs * d0_abs)\n", - " d1 += (d1_abs * d1_abs)\n", - "\n", - " d0 = sqrt(d0) / y_size_sqrt\n", - " d1 = sqrt(d1) / y_size_sqrt\n", - "\n", - " if d0 < 1.e-5 or d1 < 1.e-5:\n", - " h0 = 1.e-6\n", - " else:\n", - " h0 = 0.01 * d0 / d1\n", - "\n", - " h0_direction = h0 * direction\n", - " t_new = t_old + h0_direction\n", - " for i in range(y_size):\n", - " y_new_view[i] = y_old_view[i] + h0_direction * dydt_old_view[i]\n", - "\n", - " if use_args:\n", - " diffeq(t_new, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(t_new, y_new, diffeq_out)\n", - "\n", - " # Find the norm for d2\n", - " d2 = 0.\n", - " for i in range(y_size):\n", - " dydt_new_view[i] = diffeq_out_view[i]\n", - "\n", - " # TODO: should/could this be `y_new_view` instead of `y_old_view`?\n", - " scale = atol + dabs(y_old_view[i]) * rtol\n", - " d2_abs = dabs( (dydt_new_view[i] - dydt_old_view[i]) / scale)\n", - " d2 += (d2_abs * d2_abs)\n", - "\n", - " d2 = sqrt(d2) / (h0 * y_size_sqrt)\n", - "\n", - " if d1 <= 1.e-15 and d2 <= 1.e-15:\n", - " h1 = max(1.e-6, h0 * 1.e-3)\n", - " else:\n", - " h1 = (0.01 / max(d1, d2))**error_expo\n", - "\n", - " step_size = max(10. * fabs(nextafter(t_old, direction_inf) - t_old), min(100. * h0, h1))\n", - " else:\n", - " if first_step <= 0.:\n", - " raise Exception('Error in user-provided step size: Step size must be a positive number.')\n", - " elif first_step > t_delta_abs:\n", - " raise Exception('Error in user-provided step size: Step size can not exceed bounds.')\n", - " step_size = first_step\n", - "\n", - " # # Main integration loop\n", - " cdef double min_step, step_factor, step\n", - " cdef double c\n", - " cdef double_numeric K_scale\n", - " # Integrator Status Codes\n", - " # 0 = Running\n", - " # -1 = Failed\n", - " # 1 = Finished with no obvious issues\n", - " cdef char status\n", - " cdef unsigned int len_t\n", - " status = 0\n", - " len_t = 1 # There is an initial condition provided so the time length is already 1\n", - " while status == 0:\n", - " if t_new == t_end or y_size == 0:\n", - " t_old = t_end\n", - " t_new = t_end\n", - " status = 1\n", - " break\n", - "\n", - " # Run RK integration step\n", - " # Determine step size based on previous loop\n", - " # Find minimum step size based on the value of t (less floating point numbers between numbers when t is large)\n", - " min_step = 10. * fabs(nextafter(t_old, direction_inf) - t_old)\n", - " # Look for over/undershoots in previous step size\n", - " if step_size > max_step:\n", - " step_size = max_step\n", - " elif step_size < min_step:\n", - " step_size = min_step\n", - "\n", - " # Determine new step size\n", - " step_accepted = False\n", - " step_rejected = False\n", - " step_error = False\n", - "\n", - " # # Step Loop\n", - " while not step_accepted:\n", - "\n", - " if step_size < min_step:\n", - " step_error = True\n", - " status = -1\n", - " break\n", - "\n", - " # Move time forward for this particular step size\n", - " step = step_size * direction\n", - " t_new = t_old + step\n", - "\n", - " # Check that we are not at the end of integration with that move\n", - " if direction * (t_new - t_end) > 0.:\n", - " t_new = t_end\n", - "\n", - " # Correct the step if we were at the end of integration\n", - " step = t_new - t_old\n", - " step_size = fabs(step)\n", - "\n", - " # Calculate derivative using RK method\n", - " for i in range(y_size):\n", - " K_view[0, i] = dydt_old_view[i]\n", - "\n", - " for s in range(1, len_C):\n", - " c = C_view[s]\n", - " time_ = t_old + c * step\n", - "\n", - " # Dot Product (K, a) * step\n", - " for j in range(s):\n", - " for i in range(y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " y_new_view[i] = y_old_view[i]\n", - "\n", - " y_new_view[i] = y_new_view[i] + (K_view[j, i] * A_view[s, j] * step)\n", - "\n", - " if use_args:\n", - " diffeq(time_, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(time_, y_new, diffeq_out)\n", - "\n", - " for i in range(y_size):\n", - " K_view[s, i] = diffeq_out_view[i]\n", - "\n", - " # Dot Product (K, B) * step\n", - " for j in range(rk_n_stages):\n", - " # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match\n", - " # the shape of B.\n", - " for i in range(y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " y_new_view[i] = y_old_view[i]\n", - " y_new_view[i] = y_new_view[i] + (K_view[j, i] * B_view[j] * step)\n", - "\n", - " if use_args:\n", - " diffeq(t_new, y_new, diffeq_out, *args)\n", - " else:\n", - " diffeq(t_new, y_new, diffeq_out)\n", - "\n", - " for i in range(store_loop_size):\n", - " if i < extra_start:\n", - " # Set diffeq results\n", - " dydt_new_view[i] = diffeq_out_view[i]\n", - " else:\n", - " # Set extra results\n", - " extra_result_view[i - extra_start] = diffeq_out_view[i]\n", - "\n", - " if rk_method == 2:\n", - " # Calculate Error for DOP853\n", - "\n", - " # Dot Product (K, E5) / scale and Dot Product (K, E3) * step / scale\n", - " for i in range(y_size):\n", - " # Check how well this step performed.\n", - " scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol\n", - "\n", - " for j in range(rk_n_stages_plus1):\n", - " if j == 0:\n", - " # Initialize\n", - " E5_tmp_view[i] = 0.\n", - " E3_tmp_view[i] = 0.\n", - "\n", - " elif j == rk_n_stages:\n", - " # Set last array of the K array.\n", - " K_view[j, i] = dydt_new_view[i]\n", - "\n", - " K_scale = K_view[j, i] / scale\n", - " E5_tmp_view[i] = E5_tmp_view[i] + (K_scale * E5_view[j])\n", - " E3_tmp_view[i] = E3_tmp_view[i] + (K_scale * E3_view[j])\n", - "\n", - " # Find norms for each error\n", - " error_norm5 = 0.\n", - " error_norm3 = 0.\n", - "\n", - " # Perform summation\n", - " for i in range(y_size):\n", - " error_norm5_abs = dabs(E5_tmp_view[i])\n", - " error_norm3_abs = dabs(E3_tmp_view[i])\n", - "\n", - " error_norm5 += (error_norm5_abs * error_norm5_abs)\n", - " error_norm3 += (error_norm3_abs * error_norm3_abs)\n", - "\n", - " # Check if errors are zero\n", - " if (error_norm5 == 0.) and (error_norm3 == 0.):\n", - " error_norm = 0.\n", - " else:\n", - " error_denom = error_norm5 + 0.01 * error_norm3\n", - " error_norm = step_size * error_norm5 / sqrt(error_denom * y_size_dbl)\n", - "\n", - " else:\n", - " # Calculate Error for RK23 and RK45\n", - " error_norm = 0.\n", - " # Dot Product (K, E) * step / scale\n", - " for i in range(y_size):\n", - "\n", - " # Check how well this step performed.\n", - " scale = atol + max(dabs(y_old_view[i]), dabs(y_new_view[i])) * rtol\n", - "\n", - " for j in range(rk_n_stages_plus1):\n", - " if j == 0:\n", - " # Initialize\n", - " E_tmp_view[i] = 0.\n", - " elif j == rk_n_stages:\n", - " # Set last array of the K array.\n", - " K_view[j, i] = dydt_new_view[i]\n", - "\n", - " K_scale = K_view[j, i] / scale\n", - " E_tmp_view[i] = E_tmp_view[i] + (K_scale * E_view[j] * step)\n", - "\n", - " error_norm_abs = dabs(E_tmp_view[i])\n", - " error_norm += (error_norm_abs * error_norm_abs)\n", - " error_norm = sqrt(error_norm) / y_size_sqrt\n", - "\n", - " if error_norm < 1.:\n", - " # The error is low! Let's update this step for the next time loop\n", - " if error_norm == 0.:\n", - " step_factor = MAX_FACTOR\n", - " else:\n", - " error_pow = error_norm**-error_expo\n", - " step_factor = min(MAX_FACTOR, SAFETY * error_pow)\n", - "\n", - " if step_rejected:\n", - " # There were problems with this step size on the previous step loop. Make sure factor does\n", - " # not exasperate them.\n", - " step_factor = min(step_factor, 1.)\n", - "\n", - " step_size = step_size * step_factor\n", - " step_accepted = True\n", - " else:\n", - " error_pow = error_norm**-error_expo\n", - " step_size = step_size * max(MIN_FACTOR, SAFETY * error_pow)\n", - " step_rejected = True\n", - "\n", - " if not step_accepted:\n", - " # Issue with step convergence\n", - " status = -2\n", - " break\n", - " elif step_error:\n", - " # Issue with step convergence\n", - " status = -1\n", - " break\n", - "\n", - " # End of step loop. Update the _now variables\n", - " t_old = t_new\n", - " for i in range(y_size):\n", - " y_old_view[i] = y_new_view[i]\n", - " dydt_old_view[i] = dydt_new_view[i]\n", - "\n", - " # Save data\n", - " if len_t >= (num_concats * expected_size_to_use): \n", - " # There is more data than we have room in our arrays. \n", - " # Build new arrays with more space.\n", - " # OPT: Note this is an expensive operation. \n", - " num_concats += 1\n", - " new_size = num_concats * expected_size_to_use\n", - " time_domain_array_new = np.empty(new_size, dtype=np.float64, order='C')\n", - " y_results_array_new = np.empty((store_loop_size, new_size), dtype=DTYPE, order='C')\n", - " time_domain_array_new_view = time_domain_array_new\n", - " y_results_array_new_view = y_results_array_new\n", - " \n", - " # Loop through time to fill in these new arrays with the old values\n", - " for i in range(len_t):\n", - " time_domain_array_new_view[i] = time_domain_array_view[i]\n", - " \n", - " for i in range(store_loop_size):\n", - " y_results_array_new_view[j, i] = y_results_array_view[j, i]\n", - " \n", - " # No longer need the old arrays. Change where the view is pointing and delete them.\n", - " y_results_array_view = y_results_array_new\n", - " time_domain_array_view = time_domain_array_new\n", - " # TODO: Delete the old arrays?\n", - " \n", - " # There should be room in the arrays to add new data.\n", - " time_domain_array_view[len_t] = t_new\n", - " # To match the format that scipy follows, we will take the transpose of y.\n", - " for i in range(store_loop_size):\n", - " if i < extra_start:\n", - " # Pull from y result\n", - " y_results_array_view[i, len_t] = y_new_view[i]\n", - " else:\n", - " # Pull from extra\n", - " y_results_array_view[i, len_t] = extra_result_view[i - extra_start]\n", - "\n", - " # Increase number of time points.\n", - " len_t += 1\n", - "\n", - " # # Clean up output.\n", - " cdef str message\n", - " message = 'Not Defined.'\n", - " if status == 1:\n", - " success = True\n", - " message = 'Integration finished with no issue.'\n", - " elif status == -1:\n", - " message = 'Error in step size calculation: Required step size is less than spacing between numbers.'\n", - " elif status < -1:\n", - " message = 'Integration Failed.'\n", - "\n", - "\n", - " # Create output arrays. To match the format that scipy follows, we will take the transpose of y.\n", - " if success:\n", - " # Build final output arrays.\n", - " # The arrays built during integration likely have a bunch of unused junk at the end due to overbuilding their size.\n", - " # This process will remove that junk and leave only the wanted data.\n", - " solution_y = np.empty((store_loop_size, len_t), dtype=DTYPE, order='C')\n", - " solution_t = np.empty(len_t, dtype=np.float64, order='C')\n", - "\n", - " # Link memory views\n", - " solution_y_view = solution_y\n", - " solution_t_view = solution_t\n", - "\n", - " # Populate values\n", - " for i in range(len_t):\n", - " solution_t_view[i] = time_domain_array_view[i]\n", - " for j in range(store_loop_size):\n", - " solution_y_view[j, i] = y_results_array_view[j, i]\n", - " else:\n", - " # Build nan arrays\n", - " solution_y = np.nan * np.ones((store_loop_size, 1), dtype=DTYPE, order='C')\n", - " solution_t = np.nan * np.ones(1, dtype=np.float64, order='C')\n", - "\n", - " # Link memory views\n", - " solution_y_view = solution_y\n", - " solution_t_view = solution_t\n", - "\n", - " if run_interpolation and success:\n", - " # User only wants data at specific points.\n", - "\n", - " # The current version of this function has not implemented sicpy's dense output.\n", - " # Instead we use an interpolation.\n", - " # OPT: this could be done inside the integration loop for performance gains.\n", - " y_results_reduced = np.empty((total_size, len_teval), dtype=DTYPE, order='C')\n", - " y_result_timeslice = np.empty(len_t, dtype=DTYPE, order='C')\n", - " y_result_temp = np.empty(len_teval, dtype=DTYPE, order='C')\n", - " y_results_reduced_view = y_results_reduced\n", - " y_result_timeslice_view = y_result_timeslice\n", - " y_result_temp_view = y_result_temp\n", - "\n", - " for j in range(y_size):\n", - " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", - " # # Set timeslice equal to the time values at this y_j\n", - " for i in range(len_t):\n", - " y_result_timeslice_view[i] = solution_y_view[j, i]\n", - "\n", - " # Perform numerical interpolation\n", - " if double_numeric is cython.doublecomplex:\n", - " interp_complex_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - " else:\n", - " interp_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - "\n", - " # Store result.\n", - " for i in range(len_teval):\n", - " y_results_reduced_view[j, i] = y_result_temp_view[i]\n", - "\n", - " if capture_extra:\n", - " # Right now if there is any extra output then it is stored at each time step used in the RK loop.\n", - " # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?\n", - " # or do we use the interpolation on y to find new values.\n", - " # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.\n", - " if interpolate_extra:\n", - " # Continue the interpolation for the extra values.\n", - " for j in range(num_extra):\n", - " # np.interp only works on 1D arrays so we must loop through each of the variables:\n", - " # # Set timeslice equal to the time values at this y_j\n", - " for i in range(len_t):\n", - " y_result_timeslice_view[i] = solution_y_view[extra_start + j, i]\n", - "\n", - " # Perform numerical interpolation\n", - " if double_numeric is cython.doublecomplex:\n", - " interp_complex_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - " else:\n", - " interp_array(\n", - " t_eval,\n", - " solution_t_view,\n", - " y_result_timeslice_view,\n", - " y_result_temp_view\n", - " )\n", - "\n", - " # Store result.\n", - " for i in range(len_teval):\n", - " y_results_reduced_view[extra_start + j, i] = y_result_temp_view[i]\n", - " else:\n", - " # Use y and t to recalculate the extra outputs\n", - " y_interp = np.empty(y_size, dtype=DTYPE)\n", - " y_interp_view = y_interp\n", - " for i in range(len_teval):\n", - " time_ = t_eval[i]\n", - " for j in range(y_size):\n", - " y_interp_view[j] = y_results_reduced_view[j, i]\n", - "\n", - " if use_args:\n", - " diffeq(time_, y_interp, diffeq_out, *args)\n", - " else:\n", - " diffeq(time_, y_interp, diffeq_out)\n", - "\n", - " for j in range(num_extra):\n", - " y_results_reduced_view[extra_start + j, i] = diffeq_out_view[extra_start + j]\n", - "\n", - " # Replace the output y results and time domain with the new reduced one\n", - " solution_y = np.empty((total_size, len_teval), dtype=DTYPE, order='C')\n", - " solution_t = np.empty(len_teval, dtype=np.float64, order='C')\n", - " solution_y_view = solution_y\n", - " solution_t_view = solution_t\n", - "\n", - " # Update output arrays\n", - " for i in range(len_teval):\n", - " solution_t_view[i] = t_eval[i]\n", - " for j in range(total_size):\n", - " # To match the format that scipy follows, we will take the transpose of y.\n", - " solution_y_view[j, i] = y_results_reduced_view[j, i]\n", - "\n", - " return solution_t, solution_y, success, message\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "517b3ffd", - "metadata": {}, - "outputs": [], - "source": [ - "from typing import Tuple\n", - "\n", - "import numpy as np\n", - "from numba import njit\n", - "\n", - "# We need to build a wrapper for the diffeq so that it accepts and returns floats\n", - "def build_float_diffeq(diffeq):\n", - " \n", - " @njit\n", - " def float_diffeq(t, y, dy, *args):\n", - " \n", - " y_size = int(y.size / 2)\n", - " if abs(t % 10.) < 0.01:\n", - " print(t)\n", - " # Convert to complex\n", - " y_input_complex = np.empty(y_size, dtype=np.complex128)\n", - " dy_input_complex = np.empty(y_size, dtype=np.complex128)\n", - " for i in range(y_size):\n", - " i2 = 2 * i\n", - " y_input_complex[i] = y[i2] + 1.0j * y[i2 + 1]\n", - "\n", - " diffeq(t, y_input_complex, dy_input_complex, *args)\n", - "\n", - " # Convert back\n", - " for i in range(y_size):\n", - " i2 = 2 * i\n", - " dy[i2] = np.real(dy_input_complex[i])\n", - " dy[i2 + 1] = np.imag(dy_input_complex[i])\n", - " \n", - " return float_diffeq\n", - "\n", - "\n", - "def cyrk_ode_complex_py(\n", - " float_diffeq, t_span, y0, args = tuple(), rtol = 1.e-6, atol = 1.e-8, max_step = np.inf, \n", - " first_step = 0., rk_method = 1, t_eval = np.empty(0, dtype=np.float64)\n", - " ):\n", - " \n", - " # Convert the `n`-sized complex input array to a `2n`-sized float array\n", - " y_size = y0.size\n", - " y0_float = np.empty(2 * y_size, dtype=np.float64)\n", - " for i in range(y_size):\n", - " complex_holder = y0[i]\n", - " i2 = 2 * i\n", - " y0_float[i2] = complex_holder.real\n", - " y0_float[i2 + 1] = complex_holder.imag\n", - " \n", - " # Solve the differential equation using the float version\n", - " # TODO: atol will be weird here if it becomes an array because it will be provided for `n` and will have to \n", - " # smartly expanded to `2n`.\n", - " time_domain_out, y_results_out_float, success, message = cyrk_ode(\n", - " float_diffeq, t_span, y0_float, args, rtol, atol, max_step, first_step, rk_method, t_eval, True\n", - " )\n", - " \n", - " # Convert the float results back to complex\n", - " t_len = time_domain_out.size\n", - " y_results_out = np.empty((y_size, t_len), dtype=np.complex128)\n", - " for i in range(y_size):\n", - " i2 = 2 * i\n", - " y_results_out[i, :] = y_results_out_float[i2, :] + 1.0j * y_results_out_float[i2 + 1, :]\n", - " \n", - " return time_domain_out, y_results_out, success, message" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "7282bbb6", - "metadata": {}, - "outputs": [], - "source": [ - "from CyRK.nb.dop_coefficients import (A as A_DOP, B as B_DOP, C as C_DOP, E3 as E3_DOP, E5 as E5_DOP, D as D_DOP,\n", - " N_STAGES as N_STAGES_DOP, N_STAGES_EXTENDED as N_STAGES_EXTENDED_DOP, ORDER as ORDER_DOP,\n", - " ERROR_ESTIMATOR_ORDER as ERROR_ESTIMATOR_ORDER_DOP)\n", - "\n", - "# Optimizations\n", - "EMPTY_ARR = np.empty(0, dtype=np.float64)\n", - "EPS = np.finfo(np.float64).eps\n", - "EPS_10 = 10. * EPS\n", - "EPS_100 = 100. * EPS\n", - "INF = np.inf\n", - "\n", - "# Diffeq Solver Settings\n", - "# Multiply steps computed from asymptotic behaviour of errors by this.\n", - "SAFETY = 0.9\n", - "\n", - "MIN_FACTOR = 0.2 # Minimum allowed decrease in a step size.\n", - "MAX_FACTOR = 10. # Maximum allowed increase in a step size.\n", - "\n", - "RK23_order = 3\n", - "RK23_error_estimator_order = 2\n", - "RK23_n_stages = 3\n", - "RK23_C = np.array([0, 1 / 2, 3 / 4], order='C', dtype=np.float64)\n", - "RK23_A = np.array(\n", - " [\n", - " [0, 0, 0],\n", - " [1 / 2, 0, 0],\n", - " [0, 3 / 4, 0]\n", - " ], order='C', dtype=np.float64\n", - " )\n", - "RK23_B = np.array([2 / 9, 1 / 3, 4 / 9], order='C', dtype=np.float64)\n", - "RK23_E = np.array([5 / 72, -1 / 12, -1 / 9, 1 / 8], order='C', dtype=np.float64)\n", - "RK23_P = np.array(\n", - " [[1, -4 / 3, 5 / 9],\n", - " [0, 1, -2 / 3],\n", - " [0, 4 / 3, -8 / 9],\n", - " [0, -1, 1]], order='C', dtype=np.float64\n", - " )\n", - "\n", - "RK45_order = 5\n", - "RK45_error_estimator_order = 4\n", - "RK45_n_stages = 6\n", - "RK45_C = np.array([0, 1 / 5, 3 / 10, 4 / 5, 8 / 9, 1], order='C', dtype=np.float64)\n", - "RK45_A = np.array(\n", - " [\n", - " [0, 0, 0, 0, 0],\n", - " [1 / 5, 0, 0, 0, 0],\n", - " [3 / 40, 9 / 40, 0, 0, 0],\n", - " [44 / 45, -56 / 15, 32 / 9, 0, 0],\n", - " [19372 / 6561, -25360 / 2187, 64448 / 6561, -212 / 729, 0],\n", - " [9017 / 3168, -355 / 33, 46732 / 5247, 49 / 176, -5103 / 18656]\n", - " ], order='C', dtype=np.float64\n", - " )\n", - "RK45_B = np.array([35 / 384, 0, 500 / 1113, 125 / 192, -2187 / 6784, 11 / 84], order='C', dtype=np.float64)\n", - "RK45_E = np.array(\n", - " [-71 / 57600, 0, 71 / 16695, -71 / 1920, 17253 / 339200, -22 / 525,\n", - " 1 / 40], order='C', dtype=np.float64\n", - " )\n", - "\n", - "RK45_P = np.array(\n", - " [\n", - " [1, -8048581381 / 2820520608, 8663915743 / 2820520608,\n", - " -12715105075 / 11282082432],\n", - " [0, 0, 0, 0],\n", - " [0, 131558114200 / 32700410799, -68118460800 / 10900136933,\n", - " 87487479700 / 32700410799],\n", - " [0, -1754552775 / 470086768, 14199869525 / 1410260304,\n", - " -10690763975 / 1880347072],\n", - " [0, 127303824393 / 49829197408, -318862633887 / 49829197408,\n", - " 701980252875 / 199316789632],\n", - " [0, -282668133 / 205662961, 2019193451 / 616988883, -1453857185 / 822651844],\n", - " [0, 40617522 / 29380423, -110615467 / 29380423, 69997945 / 29380423]], order='C', dtype=np.float64\n", - " )\n", - "\n", - "\n", - "@njit(cache=False)\n", - "def _norm(x):\n", - " return np.linalg.norm(x) / np.sqrt(x.size)\n", - "\n", - "\n", - "\n", - "@njit(cache=False, fastmath=True)\n", - "def nbrk_ode_tester(\n", - " diffeq: callable, t_span: Tuple[float, float], y0: np.ndarray, args: tuple = tuple(),\n", - " rtol: float = 1.e-6, atol: float = 1.e-8,\n", - " max_step: float = np.inf, first_step: float = None,\n", - " rk_method: int = 1, t_eval: np.ndarray = EMPTY_ARR,\n", - " capture_extra: bool = False, interpolate_extra: bool = False\n", - " ):\n", - " \"\"\" A Numba-safe Rugge-Kutta Integrator based on Scipy's solve_ivp RK integrator.\n", - "\n", - " Parameters\n", - " ----------\n", - " diffeq : callable\n", - " An njit-compiled function that defines the derivatives of the problem.\n", - " t_span : Tuple[float, float]\n", - " A tuple of the beginning and end of the integration domain's dependent variables.\n", - " y0 : np.ndarray\n", - " 1D array of the initial values of the problem at t_span[0]\n", - " args : tuple = tuple()\n", - " Any additional arguments that are passed to dffeq.\n", - " rtol : float = 1.e-6\n", - " Integration relative tolerance used to determine optimal step size.\n", - " atol : float = 1.e-8\n", - " Integration absolute tolerance used to determine optimal step size.\n", - " max_step : float = np.inf\n", - " Maximum allowed step size.\n", - " first_step : float = None\n", - " Initial step size. If `None`, then the function will attempt to determine an appropriate initial step.\n", - " rk_method : int = 1\n", - " The type of RK method used for integration\n", - " 0 = RK23\n", - " 1 = RK45\n", - " 2 = DOP853\n", - " t_eval : np.ndarray = None\n", - " If provided, then the function will interpolate the integration results to provide them at the\n", - " requested t-steps.\n", - "\n", - " References\n", - " ----------\n", - " .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", - " Equations I: Nonstiff Problems\", Sec. II.\n", - " .. [2] `Page with original Fortran code of DOP853\n", - " `_.\n", - "\n", - " Returns\n", - " -------\n", - " time_domain : np.ndarray\n", - " The final time domain. This is equal to t_eval if it was provided.\n", - " y_results : np.ndarray\n", - " The solution of the differential equation provided for each time_result.\n", - " success : bool\n", - " Final integration success flag.\n", - " message : str\n", - " Any integration messages, useful if success=False.\n", - "\n", - " \"\"\"\n", - "\n", - "\n", - " # Clean up and interpret inputs\n", - " t_start = t_span[0]\n", - " t_end = t_span[1]\n", - " direction = np.sign(t_end - t_start) if t_end != t_start else 1\n", - " direction_inf = direction * np.inf\n", - " y0 = np.asarray(y0)\n", - " y_size = y0.size\n", - " y_size_sqrt = np.sqrt(y_size)\n", - " dtype = y0.dtype\n", - " t_eval_size = t_eval.size\n", - " run_interpolation = t_eval_size > 0\n", - " store_extras_during_integration = capture_extra\n", - " if run_interpolation and not interpolate_extra:\n", - " # If y is eventually interpolated but the extra outputs are not being interpolated, then there is\n", - " # no point in storing the values during the integration. Turn off this functionality to save\n", - " # on computation\n", - " store_extras_during_integration = False\n", - "\n", - " # If extra output is true then the output of the diffeq will be larger than the size of y0.\n", - " # determine that extra size by calling the diffeq and checking its size.\n", - " extra_start = y_size\n", - " extra_size = 0\n", - " total_size = y_size\n", - " if capture_extra:\n", - " output_ = np.asarray(diffeq(t_start, y0, *args), dtype=dtype)\n", - " total_size = output_.size\n", - " extra_size = total_size - y_size\n", - " extra_start = y_size\n", - "\n", - " # Extract the extra output from the function output.\n", - " y0_plus_extra = np.empty(total_size, dtype=dtype)\n", - " for i in range(total_size):\n", - " if i < extra_start:\n", - " # Pull from y0\n", - " y0_plus_extra[i] = y0[i]\n", - " else:\n", - " # Pull from extra output\n", - " y0_plus_extra[i] = output_[i]\n", - " if store_extras_during_integration:\n", - " y0_to_store = y0_plus_extra\n", - " store_loop_size = total_size\n", - " else:\n", - " y0_to_store = y0\n", - " store_loop_size = y_size\n", - "\n", - " else:\n", - " y0_to_store = y0\n", - " store_loop_size = y_size\n", - " extra_result = np.empty(extra_size, dtype=dtype)\n", - "\n", - " if store_extras_during_integration:\n", - " y_result_store = np.empty(total_size, dtype=dtype)\n", - " else:\n", - " y_result_store = np.empty(y_size, dtype=dtype)\n", - "\n", - " # Containers to store results during integration\n", - " time_domain_list = [t_start]\n", - " y_result_list = [np.copy(y0_to_store)]\n", - "\n", - " # Integrator Status Codes\n", - " # 0 = Running\n", - " # -1 = Failed\n", - " # 1 = Finished with no obvious issues\n", - " status = 0\n", - "\n", - " # Determine RK constants\n", - " if rk_method == 0:\n", - " # RK23 Method\n", - " rk_order = RK23_order\n", - " error_order = RK23_error_estimator_order\n", - " rk_n_stages = RK23_n_stages\n", - " rk_n_stages_plus1 = rk_n_stages + 1\n", - " C = RK23_C\n", - " A = RK23_A\n", - " B = RK23_B\n", - " E = np.asarray(RK23_E, dtype=dtype)\n", - " # TODO: Used in dense output calculation. Not needed until that is implemented.\n", - " # P = RK23_P\n", - " # Set these unused variables to E to avoid variable not set check\n", - " E3 = E\n", - " E5 = E\n", - "\n", - " # Initialize RK-K variable\n", - " K = np.empty((rk_n_stages_plus1, y_size), dtype=dtype)\n", - " elif rk_method == 1:\n", - "\n", - " # RK45 Method\n", - " rk_order = RK45_order\n", - " error_order = RK45_error_estimator_order\n", - " rk_n_stages = RK45_n_stages\n", - " rk_n_stages_plus1 = rk_n_stages + 1\n", - " C = RK45_C\n", - " A = RK45_A\n", - " B = RK45_B\n", - " E = np.asarray(RK45_E, dtype=dtype)\n", - " # TODO: Used in dense output calculation. Not needed until that is implemented.\n", - " # P = RK45_P\n", - " # Set these unused variables to E to avoid variable not set check\n", - " E3 = E\n", - " E5 = E\n", - "\n", - " # Initialize RK-K variable\n", - " K = np.empty((rk_n_stages_plus1, y_size), dtype=dtype)\n", - " else:\n", - " # DOP853\n", - " rk_order = ORDER_DOP\n", - " error_order = ERROR_ESTIMATOR_ORDER_DOP\n", - " rk_n_stages = N_STAGES_DOP\n", - " rk_n_stages_plus1 = rk_n_stages + 1\n", - " A = A_DOP[:rk_n_stages, :rk_n_stages]\n", - " B = B_DOP\n", - " C = C_DOP[:rk_n_stages]\n", - " E3 = np.asarray(E3_DOP, dtype=dtype)\n", - " E5 = np.asarray(E5_DOP, dtype=dtype)\n", - " # TODO: Used in dense output calculation. Not needed until that is implemented.\n", - " # D = np.asarray(D_DOP, dtype=dtype)\n", - " # A_EXTRA = np.asarray(A_DOP[rk_n_stages + 1:], dtype=dtype)\n", - " # C_EXTRA = np.asarray(C_DOP[rk_n_stages + 1:], dtype=dtype)\n", - " # Set these unused variables to E to avoid variable not set check\n", - " E = E3\n", - "\n", - " # Initialize RK-K variable\n", - " K_extended = np.empty((N_STAGES_EXTENDED_DOP, y_size), dtype=dtype)\n", - " K = np.ascontiguousarray(K_extended[:rk_n_stages_plus1, :])\n", - "\n", - " # Recast some constants into the correct dtype, so they can be used with y0.\n", - " A = np.asarray(A, dtype=dtype)\n", - " B = np.asarray(B, dtype=dtype)\n", - "\n", - " error_expo = 1. / (error_order + 1.)\n", - "\n", - " # Check tolerances\n", - " if rtol < 100. * EPS:\n", - " rtol = 100. * EPS\n", - "\n", - " atol = np.asarray(atol)\n", - " if atol.ndim > 0 and atol.shape != (y_size,):\n", - " # atol must be either the same for all y or must be provided as an array, one for each y.\n", - " raise Exception\n", - "\n", - " # Initialize variables for start of integration\n", - " t_old = t_start\n", - " t_new = t_start\n", - " y_new = np.empty_like(y0)\n", - " y_old = np.empty_like(y0)\n", - " dydt_old = np.empty_like(y0)\n", - " dydt1 = np.empty_like(y0)\n", - " dy_ = np.empty_like(y0)\n", - " dydt_new = np.empty_like(y0)\n", - " y_tmp = np.empty_like(y0)\n", - " E5_tmp = np.empty_like(y0)\n", - " E3_tmp = np.empty_like(y0)\n", - " E_tmp = np.empty_like(y0)\n", - " for i in range(y_size):\n", - " y0_i = y0[i]\n", - " y_new[i] = y0_i\n", - " y_old[i] = y0_i\n", - "\n", - " output = np.asarray(diffeq(t_new, y_new, *args), dtype=dtype)\n", - " for i in range(y_size):\n", - " dydt_old[i] = output[i]\n", - "\n", - " # Find first step size\n", - " first_step_found = False\n", - " min_step = EPS_10\n", - " if first_step is not None:\n", - " step_size = max_step\n", - " if first_step < 0.:\n", - " # Step size must be a positive number\n", - " raise Exception\n", - " elif first_step > np.abs(t_end - t_start):\n", - " # Step size can not exceed bounds\n", - " raise Exception\n", - " elif first_step != 0.:\n", - " step_size = first_step\n", - " first_step_found = True\n", - "\n", - " if not first_step_found:\n", - " # Select an initial step size based on the differential equation.\n", - " # .. [1] E. Hairer, S. P. Norsett G. Wanner, \"Solving Ordinary Differential\n", - " # Equations I: Nonstiff Problems\", Sec. II.4.\n", - " if y_size == 0:\n", - " step_size = INF\n", - " else:\n", - "\n", - " # Take the norm of d0 and d1\n", - " d0 = 0.\n", - " d1 = 0.\n", - " for i in range(y_size):\n", - " scale = atol + np.abs(y_old[i]) * rtol\n", - "\n", - " d0_abs = np.abs(y_old[i] / scale)\n", - " d1_abs = np.abs(dydt_old[i] / scale)\n", - " d0 += (d0_abs * d0_abs)\n", - " d1 += (d1_abs * d1_abs)\n", - "\n", - " d0 = np.sqrt(d0) / y_size_sqrt\n", - " d1 = np.sqrt(d1) / y_size_sqrt\n", - "\n", - " if d0 < 1.e-5 or d1 < 1.e-5:\n", - " h0 = 1.e-6\n", - " else:\n", - " h0 = 0.01 * d0 / d1\n", - "\n", - " y1 = y_old + h0 * direction * dydt_old\n", - " t1 = t_old + h0 * direction\n", - "\n", - " # Use the differential equation to estimate the first step size\n", - " diffeq_output = np.asarray(diffeq(t1, y1, *args), dtype=dtype)\n", - " for i in range(y_size):\n", - " dydt1[i] = diffeq_output[i]\n", - "\n", - " d2 = 0.\n", - " for i in range(y_size):\n", - " scale = atol + np.abs(y_old[i]) * rtol\n", - " d2_abs = np.abs((dydt1[i] - dydt_old[i]) / scale)\n", - " d2 += (d2_abs * d2_abs)\n", - " d2 = np.sqrt(d2) / (h0 * y_size_sqrt)\n", - "\n", - " if d1 <= 1.e-15 and d2 <= 1.e-15:\n", - " h1 = max(1.e-6, h0 * 1.e-3)\n", - " else:\n", - " h1 = (0.01 / max(d1, d2))**error_expo\n", - "\n", - " step_size = max(min_step, min(100. * h0, h1))\n", - "\n", - " # Main integration loop\n", - " # # Time Loop\n", - " while status == 0:\n", - "\n", - " if t_new == t_end or y_size == 0:\n", - " t_old = t_end\n", - " t_new = t_end\n", - " status = 1\n", - " break\n", - "\n", - " # Run RK integration step\n", - " # Determine step size based on previous loop\n", - " # Look for over/undershoots in previous step size\n", - " if step_size > max_step:\n", - " step_size = max_step\n", - " elif step_size < min_step:\n", - " step_size = min_step\n", - "\n", - " # Determine new step size\n", - " step_accepted = False\n", - " step_rejected = False\n", - " step_error = False\n", - " # # Step Loop\n", - " while not step_accepted:\n", - "\n", - " if step_size < min_step:\n", - " step_error = True\n", - " break\n", - "\n", - " # Move time forward for this particular step size\n", - " step = step_size * direction\n", - " t_new = t_old + step\n", - "\n", - " # Check that we are not at the end of integration with that move\n", - " if direction * (t_new - t_end) > 0:\n", - " t_new = t_end\n", - "\n", - " # Correct the step if we were at the end of integration\n", - " step = t_new - t_old\n", - " step_size = np.abs(step)\n", - "\n", - " # Calculate derivative using RK method\n", - " K[0, :] = dydt_old[:]\n", - " for s in range(1, len(C)):\n", - " c = C[s]\n", - " A_ = A[s, :]\n", - " time_ = t_old + c * step\n", - "\n", - " # Dot Product (K, a) * step\n", - " for j in range(s):\n", - " K_ = K[j, :]\n", - " a_ = A_[j]\n", - " for i in range(y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " y_tmp[i] = y_old[i]\n", - "\n", - " y_tmp[i] = y_tmp[i] + (K_[i] * a_ * step)\n", - "\n", - " # Update K with a new result from the differential equationC\n", - " diffeq_output = np.asarray(diffeq(time_, y_tmp, *args), dtype=dtype)\n", - " for i in range(y_size):\n", - " dy_[i] = diffeq_output[i]\n", - "\n", - " for i in range(y_size):\n", - " K[s, i] = dy_[i]\n", - "\n", - " # Dot Product (K, B) * step\n", - " for j in range(rk_n_stages):\n", - " # We do not use rk_n_stages_plus1 here because we are chopping off the last row of K to match\n", - " # the shape of B.\n", - " K_ = K[j, :]\n", - " b_ = B[j]\n", - " for i in range(y_size):\n", - " if j == 0:\n", - " # Initialize\n", - " y_new[i] = y_old[i]\n", - " y_new[i] = y_new[i] + (K_[i] * b_ * step)\n", - "\n", - " # Find final dydt for this timestep\n", - " diffeq_output = np.asarray(diffeq(t_new, y_new, *args), dtype=dtype)\n", - " for i in range(store_loop_size):\n", - " if i < extra_start:\n", - " # Set diffeq results\n", - " dydt_new[i] = diffeq_output[i]\n", - " else:\n", - " # Set extra results\n", - " extra_result[i - extra_start] = diffeq_output[i]\n", - "\n", - " # Estimate error to change the step size for next step\n", - " if rk_method == 2:\n", - " # DOP853 error estimation\n", - " # Dot Product (K, E5) / Scale and (K, E3) / scale\n", - " for i in range(y_size):\n", - " # Check how well this step performed\n", - " scale = atol + np.maximum(np.abs(y_old[i]), np.abs(y_new[i])) * rtol\n", - " for j in range(rk_n_stages_plus1):\n", - " if j == 0:\n", - " # Initialize\n", - " E5_tmp[i] = 0.\n", - " E3_tmp[i] = 0.\n", - " elif j == rk_n_stages:\n", - " # Set last array of the K array\n", - " K[j, i] = dydt_new[i]\n", - " K_scale = K[j, i] / scale\n", - " E5_tmp[i] = E5_tmp[i] + (K_scale * E5[j])\n", - " E3_tmp[i] = E3_tmp[i] + (K_scale * E3[j])\n", - "\n", - " # Find norms for each error\n", - " error_norm5 = 0.\n", - " error_norm3 = 0.\n", - "\n", - " # Perform summation\n", - " for i in range(y_size):\n", - " error_norm5_abs = np.abs(E5_tmp[i])\n", - " error_norm3_abs = np.abs(E3_tmp[i])\n", - " error_norm5 += (error_norm5_abs * error_norm5_abs)\n", - " error_norm3 += (error_norm3_abs * error_norm3_abs)\n", - "\n", - " # Check if errors are zero\n", - " if (error_norm5 == 0.) and (error_norm3 == 0.):\n", - " error_norm = 0.\n", - " else:\n", - " error_denom = error_norm5 + 0.01 * error_norm3\n", - " error_norm = step_size * error_norm5 / np.sqrt(error_denom * y_size)\n", - "\n", - " else:\n", - " # Calculate Error for RK23 and RK45\n", - " error_norm = 0.\n", - " # Dot Product (K, E) * step / scale\n", - " for i in range(y_size):\n", - " # Check how well this step performed.\n", - " scale = atol + max(np.abs(y_old[i]), np.abs(y_new[i])) * rtol\n", - " for j in range(rk_n_stages_plus1):\n", - " if j == 0:\n", - " # Initialize\n", - " E_tmp[i] = 0.\n", - " elif j == rk_n_stages:\n", - " # Set last array of the K array.\n", - " K[j, i] = dydt_new[i]\n", - " K_scale = K[j, i] / scale\n", - " E_tmp[i] = E_tmp[i] + (K_scale * E[j] * step)\n", - "\n", - " error_norm_abs = np.abs(E_tmp[i])\n", - " error_norm += (error_norm_abs * error_norm_abs)\n", - " error_norm = np.sqrt(error_norm) / y_size_sqrt\n", - "\n", - " if error_norm < 1.:\n", - " # The error is low! Let's update this step for the next time loop\n", - " if error_norm == 0.:\n", - " step_factor = MAX_FACTOR\n", - " else:\n", - " step_factor = min(\n", - " MAX_FACTOR,\n", - " SAFETY * error_norm**-error_expo\n", - " )\n", - "\n", - " if step_rejected:\n", - " # There were problems with this step size on the previous step loop. Make sure factor does\n", - " # not exasperate them.\n", - " step_factor = min(step_factor, 1.)\n", - "\n", - " step_size = step_size * step_factor\n", - " step_accepted = True\n", - " else:\n", - " step_size = step_size * max(\n", - " MIN_FACTOR,\n", - " SAFETY * error_norm**-error_expo\n", - " )\n", - " step_rejected = True\n", - "\n", - " if not step_accepted or step_error:\n", - " # Issue with step convergence\n", - " status = -1\n", - " break\n", - "\n", - " # End of step loop. Update the _now variables\n", - " t_old = t_new\n", - "\n", - " for i in range(y_size):\n", - " y_old[i] = y_new[i]\n", - " dydt_old[i] = dydt_new[i]\n", - "\n", - " # Save data\n", - " # If there is extra outputs then we need to store those at this timestep as well.\n", - " for i in range(store_loop_size):\n", - " if i < extra_start:\n", - " # Pull from y result\n", - " y_result_store[i] = y_new[i]\n", - " else:\n", - " # Pull from extra\n", - " y_result_store[i] = extra_result[i - extra_start]\n", - "\n", - " time_domain_list.append(t_new)\n", - " y_result_list.append(np.copy(y_result_store))\n", - "\n", - " t_size = len(time_domain_list)\n", - "\n", - " # To match the format that scipy follows, we will take the transpose of y.\n", - " time_domain = np.empty(t_size, dtype=np.float64)\n", - " y_results = np.empty((total_size, t_size), dtype=dtype)\n", - " for t_i in range(t_size):\n", - " time_domain[t_i] = time_domain_list[t_i]\n", - " y_results_list_at_t = y_result_list[t_i]\n", - " for y_i in range(store_loop_size):\n", - " y_results[y_i, t_i] = y_results_list_at_t[y_i]\n", - "\n", - " if t_eval_size > 0:\n", - " # User only wants data at specific points.\n", - " # The current version of this function has not implemented sicpy's dense output, so we must use an interpolation.\n", - " t_eval = np.asarray(t_eval, dtype=np.float64)\n", - " y_results_reduced = np.empty((total_size, t_eval.size), dtype=dtype)\n", - "\n", - " # np.interp only works on 1D arrays, so we have to loop through each of the variables and call for each y:\n", - " for i in range(y_size):\n", - " y_results_reduced[i, :] = np.interp(t_eval, time_domain, y_results[i, :])\n", - "\n", - " if capture_extra:\n", - " # Right now if there is any extra output then it is stored at each time step used in the RK loop.\n", - " # We have to make a choice on what to output do we, like we do with y, interpolate all of those extras?\n", - " # or do we use the interpolation on y to find new values.\n", - " # The latter method is more computationally expensive (recalls the diffeq for each y) but is more accurate.\n", - " if interpolate_extra:\n", - " # Continue the interpolation for the extra values.\n", - " for i in range(extra_size):\n", - " y_results_reduced[extra_start + i, :] = \\\n", - " np.interp(t_eval, time_domain, y_results[extra_start + i, :])\n", - " else:\n", - " # Use y and t to recalculate the extra outputs\n", - " y_ = np.empty(y_size, dtype=dtype)\n", - " for t_i in range(t_eval_size):\n", - " t_ = t_eval[t_i]\n", - " for y_i in range(y_size):\n", - " y_[y_i] = y_results_reduced[y_i, t_i]\n", - " diffeq_output = np.asarray(diffeq(t_, y_, *args), dtype=dtype)\n", - " for i in range(extra_size):\n", - " y_results_reduced[extra_start + i, t_i] = diffeq_output[extra_start + i]\n", - "\n", - " y_results = y_results_reduced\n", - " time_domain = t_eval\n", - " success = status == 1\n", - "\n", - " if status == 1:\n", - " message = 'Integration finished.'\n", - " elif status == 0:\n", - " message = 'Integration interrupted.'\n", - " elif status == -1:\n", - " message = 'Error in step size calculation:\\n\\tRequired step size is less than spacing between numbers.'\n", - " else:\n", - " message = 'An unknown integration error occurred.'\n", - " \n", - " return time_domain, y_results, success, message\n" - ] - }, - { - "cell_type": "markdown", - "id": "d36ffe8c", - "metadata": {}, - "source": [ - "## Testing" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "51383bd8", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\ProgramData\\Anaconda3\\envs\\cytest\\lib\\site-packages\\matplotlib\\cbook\\__init__.py:1335: ComplexWarning: Casting complex values to real discards the imaginary part\n", - " return np.asarray(x, float)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "52.8 ms ± 404 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" - ] - } - ], - "source": [ - "# Test python\n", - "# 38.4ms\n", - "# 52.8ms\n", - "time_domain, y_results, success, message = nbrk_ode_py(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "\n", - "%timeit nbrk_ode_py(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "8c9de209", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\ProgramData\\Anaconda3\\envs\\cytest\\lib\\site-packages\\matplotlib\\cbook\\__init__.py:1335: ComplexWarning: Casting complex values to real discards the imaginary part\n", - " return np.asarray(x, float)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "478 µs ± 6.45 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - RK45\n", - "# 2.05ms\n", - "# >>0.2.3 1.93ms\n", - "# >>0.6.0 478us\n", - "time_domain, y_results, success, message = nbrk_ode(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "a4aad654", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\ProgramData\\Anaconda3\\envs\\cytest\\lib\\site-packages\\matplotlib\\cbook\\__init__.py:1335: ComplexWarning: Casting complex values to real discards the imaginary part\n", - " return np.asarray(x, float)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "682 µs ± 8.72 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - tester - RK45\n", - "# 2.05ms\n", - "# >>0.2.3 2.06ms\n", - "# >>0.3.0 0.946ms, 0.804ms, 0.629ms, 0.620ms, 615 us, 612us, 598us, 405us\n", - "# >>0.4.0 583us, 584us, 616us, 598us\n", - "# >>0.5.0 657us\n", - "time_domain, y_results, success, message = nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "7ba332ad", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\ProgramData\\Anaconda3\\envs\\cyrk39v4\\lib\\site-packages\\matplotlib\\cbook\\__init__.py:1369: ComplexWarning: Casting complex values to real discards the imaginary part\n", - " return np.asarray(x, float)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAGwCAYAAAC6ty9tAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIqUlEQVR4nO2dd5hV1dX/v/dOn2EaQ3cGpChYUVEEY8ESbNGoiVHTNGryamxE318MmtiiwTSTGHvMa0ssSQQ1xhhJpFiigoCAItIEpDhDmcL0mbt/fyz27HPu3HLOuaef9Xmeec5lZu65Z76svfbaa6+9d0wIIcAwDMMwDBMC4l4/AMMwDMMwjF1wYMMwDMMwTGjgwIZhGIZhmNDAgQ3DMAzDMKGBAxuGYRiGYUIDBzYMwzAMw4QGDmwYhmEYhgkN+V4/gNskEgls3boV5eXliMViXj8OwzAMwzAGEEKgpaUFI0aMQDyePi8TucBm69atqKur8/oxGIZhGIaxwObNm1FbW5v255ELbMrLywGQMBUVFR4/DcMwDMMwRmhubkZdXV1fP56OyAU2cvqpoqKCAxuGYRiGCRjZyki4eJhhGIZhmNDAgQ3DMAzDMKGBAxuGYRiGYUJD5GpsGIZhGMbP9Pb2oru72+vHcJ2CggLk5eXlfB8ObBiGYRjGBwghsH37djQ2Nnr9KJ5RVVWFYcOG5bTPHAc2DMMwDOMDZFAzZMgQlJaWRmoTWSEE2traUF9fDwAYPny45XtxYMMwDMMwHtPb29sX1NTU1Hj9OJ5QUlICAKivr8eQIUMsT0tx8TDDMAzDeIysqSktLfX4SbxF/v251BhxYMMwDMMwPiFK00+psOPv58CGYRiGYZjQwIENwzAMwzChgQMbhmEYhmFCAwc2AaOtzesnYPyKEPTFMAwTZTiwCRDPPw8MGAD86EdeP4k/+OEPgQMOAObM8fpJvKerCzj8cOCoo4C1a71+Gu9Zvx6YPh34+teBzZu9fhrveeEF4MQTgeuvB3p7vX4a77n1VuDkk4HHHvP6SbyntxdYtw5YswZobfX6aeyBA5sA8dhjNCL/+c+Bl17y+mm8pbcX+O1vgY8/Bs47D2ho8PqJvGXxYuCDD4D33we+9S2vn8Z7HnkEmDsXeOYZ4KGHvH4a77njDmD+fOA3vwHefNPrp/GWhgbS4/XXgSuv9HGgJwRFGg5/NW5pRdPWVrRsb8W2tXu/bzL1W1tbiwceeED3vbfffhulpaXYuHGjnaoYgjfoCwhCAMuWqX8vXAicfbZnj+M5q1YB2m0OPv4YGDzYu+fxmnffVa+XLCFnbcORK4FlyRL1+pNPvHsOP9DZCaxcqf79ySfACSd49zxes3Spet3ZCWzZAowc6d3zpKWtjVL0DlOz90vHnj1AWZnhe0yZMgWLFi3q+7cQAjNmzMCMGTMwatQoW57TDJyxCQibN1MDlHz6qWeP4gs0bQgAsGGDN8/hF955R73u6gK2bvXuWbxGCH1gs26dd8/iBz78UD8IiLoeWtsAeOrWDpIDm6eeegqbNm3CzJkzAQAvv/wyxo8fj/322w+PPvqo48/DGZuAoB2RAxzYcGCj57339P9evx6oq/PmWbxm82Zg507177VrKdiJ6r5n3JHrSaXHSSd58ywZKS2lzImDCAEsX66fjjvoIKDI5O7HU6ZMwY033og9e/YgHo/jpptuwp133ony8nL09PTg+uuvx7x581BRUYEjjjgC5513HgYOHGjzX6PgjE1AkB33oYfSNeqBzapVdD3wQLpGObDp7FT2MHEiXaOsx/LldB0/noKZlpZo12B98AFdZVuJemAj7cP3esRiNB3k4FdXQRm6C8sgSstQUFWGREkZOvPLTI8CjjzySOTl5WHJkiW4++67UVNTg0svvRQA8N577+Gggw7CPvvsg/Lycpxxxhn417/+5YRifXBgExA2baLr8cfTdedOcthRReoxbRpdo9yRyynK4mLg6KPp9fr13j2P18haxQMPBGpr6XWUp19kW5k+na7r1kV3WwAhlH1IPXwb2LhAVxddCwvJfwBAR4f5+xQXF2PixImYPXs2fvWrX+Gee+5BPE7hxdatW7HPPvv0/W5tbS22aOsqHIADm4AgG+PBBwMyg+dBsbkvSCSAzz6j17IIMsoduey4Ro4Exoyh11HWQy7vrqsDxo2j11HuvKQexx1HA/E9e4D6em+fySt27lQdt/QdUQ56UwU2nZ3W7jVlyhTce++9OOWUU3DyySf3fV+kiKKdPg+LA5uAIDuvUaOAffel11HNUtTXU4OMxYAvfIG+t2WL9QYZdLQdubQNaS9RRAa9tbXA6NH0OqqDAEDZx9ixgBw4R9U+pG0MGUJTlUC0bUMWlRcW0heggh2zHHbYYcjPz8cvf/lL3ff32WcfXYbms88+w/Dhw619iEE4sAkI2lH50KH0Oqp1A9JRDx8OjBgBFBRQijmqo1CtbdTsXbe5e7d3z+M12kBP6rFrl3fP4yUdHcCOHfS6rg4YNIheR1WPVLbR1OTjvWwcRgYxBQVA/t6lRFa1+POf/4zvf//7GC8jxr1MnjwZK1euxJYtW9DS0oJXXnkFp556ag5PnR1eFRUAmpuBxkZ6PXKkmoqKauclndPIkZS1qa6moGb37miuBNIGNtI2otpxAfrOSxZVR7WtyAxFSQm1k+pq+ndU7UNrG1ILgPxrTb/NXMKPdipK7nvV02P8/YlEAg0NDfjjH/+I1atXY06KbeDz8/Px61//GieeeCISiQR++MMfosZhsTmwCQCy4xo4kPZrkg0yqs5a6iGDGG1gE0W0gU3UbUNbf1Vby3pILerqaBDAgyK61tZSlmLAAKo52r2bAxsrGZuFCxfipJNOwoQJEzB79mxUVlam/L2zzz4bZ7u4oywHNgFg2za6jhhBV3bWdJWBTVUVXaOqh5y+3mcf1XG1t9M0hCwIjAoNDVQ3EItRe4l6BkvbkQOcsUn2HQMHUmATVT20NTZ7FzGZythMmzYNiUTC/gfLEa6xCQCydkTW1kQ9sPn8c7oOG0ZXqYecrosaWj3Ky5WDiqJ9yB2XhwyhEXnU24rUQxYNRz1jk6xHlO1DCBXYFBSoqaje3uBvB8CBTQCQHdeQIXSNcmMElB4c6JETksWhQ4ZQUBPlUXnyICDqGZt0gyLWg65Rtg9tZiY/X3+2XNCLqTmwCQDckeuRzokDPdqXQ2aC5SGgUe682Db0JOsR9YwN24dCm62JxWhQZGU6yo9wYBMAeCpKDzsnhdSipkYV/0W580rXkcuao6iRrq1EMehNzm4CnLEBlN/QvuaMDeM4yRmbKDfGRELt38OBTf9pSiDanVdyRx71miPO2Ch27VLZTbmfT5T1kBmbVIENZ2wYx8lUYxP0Ii+z7N6tGh0HNv2zeUC0nXWyHlxzRFfO2KTObkZZD+lHCwrU96zsZeNHOLAJAOlqbHp7HT/V3ndI51RVpbYA58CGMzaSTHpEzT60u3Hz1Etq24jyICBVxka7MirIcGDjc7TOSQY2JSWqU4/aEudUzinK+9gkB70AIPfIiuLp78nTlIDSo7nZ/efxksZGNfKWheUVFXTt6FAdW1RI5TukHlFsK5kyNhzYuMisWbNw1FFHoby8HEOGDME555yD1atXe/1YjtLYqByQbJCxGNUOANHL2HBHrieVsx4wgK5Rsw2A9dAitaioUBs1Si0AoLXV/Wfykky2EUXfkSlj48M990wRqMBmwYIFuOqqq/DOO+9g7ty56OnpwfTp09Ea4ha6cyddy8uBoiL1/ag7azkCBaKrBcDOWkuqqRcguvaRSgvtKc5R0yNVNi+qtgGkztjIQnvO2LjIq6++iksuuQQHHXQQJk6ciMceewybNm3C+++/n/Y9nZ2daG5u1n0FCRnYyLlgSVQbpNQjXWATtWJqWSuhPecmqrbR2krLugEOfIHUgwCA9WDbIFIt97aasamtrcUDDzyg+97bb7+N0tJSbNy4MYentEagz4pqamoCAAxM7vU1zJo1C7fffrtbj2Q7qTouILoNMlWgJ7Xo7QU6O6N1PlImPaJqG0VFQGmp+n5U9ZC+Qy5tlgwYQD+LWkZP2odWDz/bhhBAW5tz929pUT4zFqPvtbfTl9lVUVOmTMGiRYv6/i2EwIwZMzBjxgyMGjXKxqc2RmADGyEErr/+ehx77LE4+OCD0/7ezJkzcf311/f9u7m5GXXyBLQAwBkbPakCvbIy9XrPnmgFNqn0iGr9lVYL6aiB6OrBvkOPtA+tHn62jbY2fU2UmyxbZu73p0yZgscff7zv30899RQ2bdqEmTNnAgDOPfdczJ8/HyeffDL+9re/2fegaQjUVJSWq6++GsuXL8czzzyT8feKiopQUVGh+woSqRojwM5Jq0deHq0UA6KlhxCp9WDb0H8/qjVHnO3Vkym72d1NmQuGMDsVNWXKFKxatQp79uxBW1sbbrrpJtx5550o3xs5XnvttXjyyScdeNLUBDJjc8011+Cll17CwoULUVtb6/XjOIpsjOyciEyj0Pb2aK30aGlRKeNUzjpqHTlnKPTwoEiPkWyvdoGG15SWOvd/1N4OrFpFg8KJE9X3m5qAdetUgblRjjzySOTl5WHJkiX497//jZqaGlx66aV9Pz/xxBMxf/58ex7eAIEKbIQQuOaaazBnzhzMnz8fo0eP9vqRHIedk55Mo9CGhmjpIbUoLuaaEoAzFMlwoKcnlS/Nz6f209FBeiTbjpfEYvrAy06EoCx3UZH+MxIJ+r7ZRRjFxcWYOHEiZs+ejUceeQR///vfEY97NyEUqMDmqquuwtNPP40XX3wR5eXl2L59OwCgsrISJXIuImSws9bDzlqRTgtt3YAQ+nqTMMO2oSed75D2EaWMXmenyuamsg8Z2ESFVCuigNw26JsyZQruvfdefOlLX8LJJ5+c2wPmSKBqbB588EE0NTVh2rRpGD58eN/Xc8895/WjOUY2Zx0l59Tbq3ZaTnbWctQRJeeULegVQi1/jgKc3dTDeiikFnl5akNPSRT1kIGNDGQkMsliZYO+ww47DPn5+fjlL3+Z28PZQKAyNiJqm5SAMzZamppUilSe/yOJoh7pgl7ttNSePfp/hxnOUOjhDJZC2kZ1df8MZlQHiUDmjI3ZbO+f//xnfP/738f48ePtecgcCFRgE0XYOSmkFgMG9C9ui6Ie6TryeJwyWK2t5Ky1O62GGW4rCu2KOR4UpbcNwN9Lvp0i3VSUtiwmkeif0UkmkUigoaEBf/zjH7F69WrMmTMn5e+deuqpWLJkCVpbW1FbW4s5c+bgqKOOyuEvyAwHNj6HnZMinRZAtPVI5awHDKDAhvWIpm20t6vly6xH9rYCREsPuwKbhQsX4qSTTsKECRMwe/ZsVCbP8+3lX//6Vw5Pax4ObHxMT4+qKWHnlHnUxXroKS+nA0OjpAcPAhTSNvLz+2/yFsWpFx4U6UlXYxOLUXCTSBirs5k2bRoSPjwxM1DFw1FDBjUA15QA7JySYT30ZJuKam0N/qnFRkm3CzMQzakXHhTpSVdjA+S2MsovcGDjY2RjrKzsb4BRbIycTtaTyVlHbZVYul2YAX3Gwsmzd/xEprYSNdsAWI9k0k1FAbmtjPILHNj4mEyNUa50idJOuzzq0pMpYyPtIyrLvffsUc46WQ/t2WFR0SNTW5FbfkVFC4DbSjLppqIADmwYh0l3nAIQzcaYyTlJZx2VETmQOfCNWucl20pxsfrbJfG42io/KvZhpK1ExTaAYAV6bmxr4ueMjR1/Pwc2PoY7Lj2shx4jzjpqHXkqLYDo2YeRbG9UtACM+Q6v20pBQcHe53D2QbSFwX4MbOTfL/WwAq+K8jGZMjayMfb00Mm0OdhAYOAMliKR4FG5lkxaAGQfjY3R0SNIGQo3CEJbycvLQ1VVFerr6wEApaWliDlwHkp3t/61zN5IZEDT2UlHTbiFEAJtbW2or69HVVUV8rKtNc8ABzY+xsgoA6AGGYXAhjM2iuZm5YBYj8wdORA9PXjaVk8m+/DToGjYsGEA0BfcOEF3N7BjB2VmPv20/88bGsg2Egn9yly3qKqq6tPBKhzY+JhMGYrkgsiKCneeyUt4FKqQHVdpqd4WJH5y1m5gdCoqKp250UFAVA5JDcqgKBaLYfjw4RgyZAi6takVG1myBLjiCmDUKCDVvnn33w+8/DLwox8Bl1ziyCOkpaCgIKdMjYQDGx+TqTHGYtQg29v90SDdgEehCs5Q6Mk2FRU1PYwMAoQAurpUYXVY6ehQfiEoviMvL8+WDj4VO3cCGzcCQ4emHhR1dtLPd+1K/fMgwMXDPiZTxgaIlrPWnuzt91GXGxjtyP3krJ0kW6AX1QxWpno0IBp6aE/2TpXZjprvMDooCrLv4MDGx/BKD8Xu3ep18i7MQLS0ANg2kmE99GTSo6BArXyJgh6ZTvYGohv0hrmtcGDjY3hUrpBaVFSkLpQOQ2M0A2co9HBbUQiR2T7kNDYQDT14mlJPFPTgwMbHcB2FwkxH7sL+Vp4TBedkBm4rirY2qp0B2D6AaEy9mCEKgyIObHxKd7c6fZedtfGOHKDit7DDzlpPtvR6GJy1UaQWBQXqHKRkoqgH+1EiCisIObDxKdL4YjGgqir177BzUmgDmyA3SKNwxkYPF9ortEFvuqXcUdLDyOaNQDS0AKLhOziw8SnS+KqqUh9UBoTDAI2SLUNRUKB0ioIePApVZDrZWxKGUahRsnVcQLT0MJrd7OwM9sGPRonCtC0HNj4l2wgUiJZzMuOsg9wgjZLNPqI0Cm1poe0AgHA7a6NkC/IA1kNL8i7uYScK07Yc2PgUdk56WA89nLFRyCCvpKT/yd6SMDhro3Bb0WOmPo/1CMeAmQMbn2ImYxOFxmhEjyh1Xlw8rOCOXA+3FT3Z2kpeHlBYSK/DrkdXVzQWpXBg41OMOOsoOSfuvBSJhNqwMMwFgEYxYxsc6BFsH3qioof0G7EYUFmZ+nfCoAUHNj6FMzZ6so26gOjo0dio9urJNk/e1aXqT8IKtxU9HOjp4XpFhXYX5jAvSuHAxqewc9LDKz0UUosBA1QKPRlt3UBHh/PP5CWc3dTDgZ4eztgojAwQZVsJsh/lwMancIZCDzsnhRktgGA7KCOwbejhQE/R3q7+RtYjOm2FAxufwsubFT09QFMTvWY9jI3I4/HoFETyVIOeqHReRsh2srckanoYaSu9vbQDfhDhwManmEkZhr0xak/2TrcLMxAdPYx0XADroSUqHRfAgZ4WrW2k24UZiI4eZmYCgOC2Fw5sfApnbBSyMVZWAvn56X8vanpkC2yiogdPvSiM7MIMsG0kw3ooiopUEBjUQI8DG5/CNTYKI0EewHokExU9uFhWoT3ZmwM9Y7YBREcPI4FNLBb89sKBjQ/p6FCRMqeTzY+6WA+C9VBotZBL5cOI7MgLC9Of7A0Ev+MyCmds9BgN9IKuBwc2PkQ2xnicC96A6DRGo7AeeswENolEcAsijcA1JXp4EKAnKoEeBzY+RGt88Qz/Q5w+1RP0xmgUozU2UbAPbU2JkSMEgHDrwW1FD9ej6TG78CCogR4HNj6ER+R6uCPXwzU2iuZmtbNydXX63yssVBmMMOvBvkOP0bYSFd8RFfvgwMaH8ChDT1Qao1HM6hHUUZcRjJzsDegLIsOsB28FoId9qZ6oZPQ4sPEhVjquKBREcmBDsLNWGLUNgPXQEgUtAB4EaOnqAvbsoddh14MDGx9itjGGvSCSnZPC6C7MQDRG5WYCG9ZDEYW2AnCgp0VqEY+nP9lbEvS2woGNDzFbQwEE1wCNwM5JIW0DyFxTAkRDD87Y6OG2oof3sVFoM72ZFqUAwbcPDmx8iNHGqN0hMqgGaAQullVI26iqyrwLMxAtPTiwIcx25B0d4Z3GFoIDPS1Raisc2PgQozUUYdgh0gjsnBRWnFOYpxtYDz1m2wpAwU0Y2bNHTdHz1Fy02goHNj4kSgaYDe0uzLzSw3j2CuBAL5ko2IeVwCasvkNqUVSk38coFWwbeoLuOziw8SFRMsBsSC3y8rIXvIVdC4A78mS4regxqkd+vprKDKseWi0y7cIMsG0kE3TfwYGND+FRuUI7LcfOyfg0JRAtPbit0OrI3bvpdRQ6r2ywbeiJkh4c2PgMbcGbkc6LnZNC2xjDWhDJ05R6WA9FYyMFNwAHvgDbRjJR0oMDG5/R0kJ7lQDRiKyzYaUxAuEtiIzSqMsIUUqvZ0NqUV5OR0hkI+z2wbahJ0q+gwMbnyGNr7g4e8EbEHwDzIbVwIb1YGedDLcVPUEflWeDbUNPlHwHBzY+g52THjN6FBREqyAyG2F31ma2iAei01aMTEMB4bcPK22lpye8u7jzVBTjGWYKhwF2TsmEXQ8uLFdot4ivqsr++1HRg9sKwdlePVb0COqUPgc2PoNHXXo4g6WHMzYKqUV1dfYt4oHo6MGBDWFGj+Ji9TqMeggRrUERBzY+w6pzCmpknQ2rGaww6mF2xVzQnVM2uCPXw3roMaNHLKaCmzDq0dQE9PbSaw5sGNdh56SHM1iKtjags5NeR8E5ZYPbih7WQw/roZBalJXRTszZCLoWHNj4DG6MeszqEeZRl9SioAAYMCD770vb6O5Wo7UwwW1FD+uhh7PfiqjZBgc2PsPs1EuYO3KAnZMWM1vEA+EviORCez1R67wy0d0NNDfTa9YjerbBgY3PsDr1EsaOPJHgzkuL1ewVwHoA4W4rQPQ6r0xIvxGLUXG5EcKsRy62EcRd3Dmw8RnsnBRNTWqLeM5gmbeNeFzNp7Me4W4rAOuhRWpRVUUH6BohCnqYtY1EIpj7+nBg4zO4pkRhtuANCPeo3Gz2CmBnrSXMWgCshxazWgCsh5agT2NzYOMzOL2uYOekx+w0JRCNwJc7cvqb5N/FerDvSMasHoWFqo4viHpwYOMjenpo+gVg5wRYc07cketh+1BEQYv8fKCiwth7oqAHtxXCrB5B39eHAxsfsXu3em204C3IxpeNXJwTZ7AIdtaKKGgxcKCxFXNANPTgtkJETQ8ObHyENL7KSnWYYza4I9cT5MaYDdZDYXaLeEBp0dsbzILITLBt6GE99ERNDw5sfETUjC8bXCyrh+1D0dxMU7dAdAoiM8G2oYensfVEzT4CF9gsXLgQZ511FkaMGIFYLIYXXnjB60eyjagZXza4WFYP24dCalFaqt+vJxNFRcEuiMwE24Ye1kNP1PQIXGDT2tqKiRMn4r777vP6UWzHSoaCO3I9YZ6a4wyWwoptBL0gMhNR67iywXooOjuB1lZ6HRU9DFZy+IfTTz8dp59+uteP4QhWMhRh7sjZOSl6e1VxuRX7CJseVmwDoMBGuzQ6LPAgQA/7DoXUIi+P6jeNEmQ9AhfYmKWzsxOd8khkAM3yABEfkmtjFML4ioggwPPkisZGtbU5BzbWA5uSEgoQWY/w2gbAemixsmIOCLYegZuKMsusWbNQWVnZ91VXV+f1I6Ull44coJRjmOBRqEJqUV5Om2cZJcjOKRO5BDYA6wGEVwshWA8tUWwroQ9sZs6ciaampr6vzZs3e/1IacmlMQLh7czZOUXTOWWC9dBjR7Y3LLS0mF8xB7BtJBNkPUI/FVVUVIQiowcNeUxDA10HDTL+noICOuwwkSADrKpy5NFcx2rBW1inoqLonDLBeujJJbCRBx2ayQT6GalFUZF+4JcNtg09QdYj9BmbICEDmyFDjL8nrCs9ZGOMx60VvIUteyVtY/Bgc+8LsnPKRBSddSZyzfaGSQ+tFlGpKclEFNtK4DI2e/bswdq1a/v+vWHDBixbtgwDBw7EyJEjPXyy3Mml82prC1dnXl9P18GDKbgxSpAbYyY4sNETRWedDu2KOTN6yIMOhSA9zAwg/Azbhp4o6hG4wGbx4sU48cQT+/59/fXXAwAuvvhiPP744x49Ve709ioD5M6LO/JkWA892sDXDGHUY+dOVSNjZho7FlODojDpYSXzDYTTNgDVVqzqEcQBc+ACm2nTpkGEqdJtL7t2KedkZW8OIFwN0mpHHkYtAO7Ik+HOSyG1GDjQ+BlzkjAHNtxWiCjqwTU2PkEaX3U1FQSbIcgGmA47Rhlhin+5I1cIEU1nnQ6rbQUI50AgV98RJi2AaOoRuIxNIOnsBJYuBRYtIo/c1QUMHw4cdhgwdSpQWGjZUQMBTBk2NgLvvAN88AGdZphIAPvtBxxxBDBxIhCL5dxxCUEyB2JB3MaNpMcnn9DwuagIOPBA4JhjgNpaABHqyBMJ4MMPgf/+F9i2jdbuDhsGTJgAnHgiUFaGpiZ1Onfo9ejoAN57D3j/fUrrdnYCo0cDhxxC9hGP2+I7AqPHzp3Am28Cq1YBTU20ne5++wFHH002ggi1FSGADRtIj02byJdWVQH77w9Mm9Y3LxkZPTRwYOMky5cD998PPPssGV0qhg8HrrkGDaNuAFAYXuckBPCPfwAPPwy88gp1YKmYNAmYORMNDV8BYH0qCiA9fBvYtLUBjz8OPPooBb2piMeBL38ZuPVW1NdPBGDdOfk+6N20iWzj//4P2L499e9UVAAXX4z6b/0UQCXKy40fgCkJRFsBgHffBR54APjLX9L/540ZA8yYgXpxFYC4pYxNIPTo6QFmzyb7eP319L937LHALbegvv6LAHLP9vp2F/fdu4HHHiM9Pvkk9e8UFgLnnQdx512orx8DgDM2TK5s2QLcfDPw5JNqPmTwYBpVjBpFc02ffgq8/TaNSm+6CQ0jAWCmpcDG9+nkd98FZsygrIRk3DjgqKNoVJFIAB9/TCOP998HvvpV1I9cAuBw041Ru9LDl515IgH86U/ATTeRnQA06jzsMMpWVVRQlmLZMtJizhzglVfQkGgBUBC+UdeePcCsWcCvf622zi4ro0zm2LH0essWylps2AD8/vdoeO4zALPD2ZFv2ADccAP9v0uGDaPszPDhVESzbh3wxhvA+vXAtdeiYd8KABeHc1D0+uvAddcBK1eq7x1wAA2AamrIZlatIt/x5pvA9OloGL4BwL6W2wpAvsPMHjiu0NMDPPII8JOfqBNxCwqAI4+kDG9lJbBjBw2UVqwAnn0We15egM7OrQA4Y8Pkwt//DlxyiTK8r34VuOIKSqMnr1vu6gKeeQa44QY0bCLrGVzWBqDU1Ef6dlTe2wv89KfAHXdQpFFWRlp897vA+PH9f3/HDurgfv5zNGxqAwAMrukFkGf4I3290mPXLuDb36bMFQDsuy8FfN/8ZuqK8Y8+Am68Ea0vv452UOFVqEZdy5YBX/kKddAAcPzxwLXXAmed1X+3uEQCmDsXuPpq1K+lwcLg0j0ABpj6SF/r8eST1D7a2ynY/cY3gCuvpAFRcvqgrY1G7TfeiPpPqa0MqewEYC5F6Vs9urqA66+njDdAldFXXQVcfjmQaluPrVuBO+8EHnwQ9dt6AQBDBgsAxtMuyfv6+Cqw2bIFOP98mqIFKJC57jrgoovonJVk3n8fuO461L+1DQBQVtSD0lJz3b1vbcMIImI0NTUJAKKpqcneGycSQtx0kxDUhQsxaZIQ775r7L2ffiquqvqTAIS4eZ/HhOjoMPXRF11EH/mb35h+audobBTi1FOVHt/8phBbthh779y5Yr/YJwIQYsEF95v+6IED6SM//ND0W51j+XIhRo6kBysqEuLuu4Vob8/+vkRCbLj2Hnob2kXi1X+Z+tgPP6SPrKmx+NxO8dRTQhQX08ONHCnEnDnUhrLR3CwenkB6nFX0qnGb2stvfkMfeeGFlp7aGbq7hbjqKtVWpk0TYsUKY+/9+GPxlaK/C0CI30+4T4jeXlMffdpp9JGPPWb+sR1j2zYhpk5Velx1lRA7dxp777PPinI0CUCI1T981PRH5+XRR5o0K2d54w0hhgyhB6usFOL++8lmstHdLf57zt0CEGJfbBDinXdMfex//kMfedBBlp7aEYz23xzY2EF3txAXX6wa4owZQnR2mrrF185oFoAQv8W1Qvz0p6be+53v0Mf+7Gem3uYcTU1CHH00PVRJiRBPPmn6FlVlnQIQYhXGC7Fokan37rMPffT775v+WGdYtowiC0CIsWOFWLrU1NvffSchACFqsUmIESOEaG01/N716+ljS0tNPrOT/OEPqq2ccYYQu3aZevtPb24XgBCX4Q9CfOMbpt770EP0sV/+sqm3OUdPjxqZAELceqvp4OT4I8h3PIfzhXjiCVPvPfdc+tgHHjD1NufYvl2I8ePpoaqqhPjHP0y9vb1dSbm7cAg1ABMMGEDvXbvW1NucY/588qGAEIceavrBXpzTIwAhjsK7Qhx2GNmbQd56iz52zBizD+0cRvtvXu5tB/G4Sh//3/8Bv/mN6YNXGtopnTgYDcAvfkHTMgbx1VRUSwtw2mlUV1NdTfPe3/qWqVt0dQGNraTfYDQA//u/ptZu+yqFumIFcNJJtJpj8mRg8WKqpzFBww5Kpw8ubKKU++9+Z/i9vjvo8Mknge99j15fdx1N3VZXm7pFQwsVlQ3GDuDPf9bXbmXBV7aRSNDUyjPPUO3M888Dt91mbqttAPVtGt8xcybVLRnEV3o0NAAnnwysXg3U1dEq0jPOMH0LACiIdaOyqx648UZT7/eVHm+/DZx5Jj3M6afTNNTYsaZu0bCTpvGH5O+iqd/HHjP8Xl9pYRIObOwgHieHPX8+8J3vWLpF35K8sZUUHPzsZ4bf6xsDFIIc9X//S53Vf/5DS7hNImO6vDyB6qJ2YMEC4J//NPx+3+jR2Aiccw7V1kyeDLz2mqVTSvv2sBk/kF7MmqW2qc5C8vJ3T3njDeDSS+lhrrqKBgAmO3FAsy/H5FH04qabDL/XN7YBUE3I44/TgOjZZ4HzzrN0mz772KeQAt/f/97we32jR08P1SN++CEwYgQwbx4tMDBJnx8dBMTiceCvf6V6E4P4Ro9Nm6jWrLUVOOUUWhVWaq72EtBs7Hl4Hb34yU8MOwLfaGEBDmzsoqiIlhtapK9B/uCb9OLRR6lA0AC+WRV1//20PDU/H3j5ZeDwwy3dRp1yHkP86u/TPx56yPD7faGHEFREvn49FQn/85+WD+Pps41Dh9P+JS0tlKkwgG8OOtyxgwode3vpeu+9ltfT9unx9ekUGM2bl37ZaxK+yW7Om0fZGQD4wx+oiNoCPT2ao1h++B11v3TbKSThm87r9tuBhQupEPbf/zadmZD0deQjCoALLqB/PPKI4ff7Qo/ubuDCC2lAdOSRwIsvmt/XYC99Qe/xE2h13fbt5JsN4AstLMKBjQ9IJFSWYvDZU2kDrpYW4IUXDL3fFwa4aBGtYgBoKu2YYyzfSnd8wHe/S/945RVaGm8AX3Rev/wlOaTCQuBvf6NVHRbp02NITOlh8Fy0ggKVFPHMPhIJWg22ZQuthnvkEUuZGklfxuaAGkrRA8Af/2jovb5oK59/Dnz96xT8Xnqp5SwvoIKaWAyo+c7ZtF3Ahg0UOBnAF3q89hpw1130+g9/oOXcFtHt0C2nPJ9+2vD0nC/0+PGPKetdWQk895ylTI2kz3cMy1N29oc/GHqv1KKz03Cc7Bs4sPEBjY00kAWAQUPiqiblyScNvd/zjryri565u5vS6TNm5HQ73U6Z48dTkNTbS/u/GMBz57RqFe1jBFBmYtKknG6n0+PrX6doZelS2rk5C3L5O+ChHg8+SBmr4mKaGhhgbol2Mjo9Lr+c/vHEE4a8r+daABScbt8OHHSQqWmjVMiOq6YGyCsvpSXigOFaCs/1aGwk3yEE8D//o7IsFtENik44gaaz9uyhqRwDeK7H/Pk0MASoXnPMmJxupwv0LruM/vGvf9GUZRaS9/UJEhzY+ADZGCsq9u6UKwObuXOp4WfB88b4299Swd+QITRyznHLzn7nIn1z7/Tc3/9u6P2eTkUJAVxzDc0RfOlLatSYAzo9amqooBAAXnrJ0Ps9tY8dO2gECgC/+hVNpeVAIpEU2Jx5Jk1ffP45sGRJ1vd73lZeeYXsOD8/59E4kKKtfP3rdH31VTVayoDnetx+OznACROo5ipHdHrEYjTtCZDuBvBUj54e8h0A+Q2LNVdadIHe2LG0J5IQZB9Z8M00tgU4sPEBn39O12HD9n5j3DjKVCQSFMFnwdOOfMsW2oQPoJGGheLYZPqdZH3aaXT973/TH02hwdMM1t/+RkXTRUW0esmGfdn76SGnX157zdD7PbWPH/+YgvPDDqPN53JEm90cPBiUvTrlFPqGCWftiRZdXcAPfkCvZ8ygjE2O9LONKVNoCmPnTlqBlwVP9fjoI5WxuvdeW3bES+s7XnuNAocseNpWHn6YdlgeONDU4pFM9At8pR4G2kp+vjotngMbxjTyaJy+wAZQzvrf/876fk878h/9iFK9U6eaXtadjn6n0Y4eTQfd9fRkPitmL545644O2g4foGWmOaaRJf3s44t0Fg7eecdUoOe6HkuXqsLNe++l1T850i+7CZhy1p525PfeS0XOQ4fS6hQb6Ndx5ecr+/C7HjNmUJT65S+rZ86RfnpMnkyDrd27qQ4wC57psXOnsok770y9E7lJhMgQ6M2dayjQ8zyjZxEObHyAXYGN68b3ySdqdc7vf59TQagWqcfw4ZpvTp9O17lzs77fs1HX448DmzfTidw/+pEttxQiRUZv9GjK6vX0GMroeWYft91Gf8CFFwLHHWfLLfsFvYA+o5elSDT5oEPXkGdiAXStqLDlttI2dOcAnXoqXf3sO954g9pyYSEdo2IT/fTIzw+GL/3Nbyj4OvRQW6avATr8vLubXve1l6OOoq04GhuDMXVrEQ5sfIBsjEOHar45bRpdV69Ww5A0eNaR33039Q5nnZVzgayWlIHeCSfQ9d13s77fkwxWdzfpAQA//KFtB83s3q2ck84+TjyRrgY2p/PEOa1cSTVAsZha1mwDcmGcLugdOZKCyUQi/Unpe/GsIPIPf6Dlu+PG0Qoxm0g5CJArEpcsyVpn41nHJadavvMdy0u7U5FSjy98ga5+nZprbgbuu49e33qrLZlNQGlRVaVZLZ6XR9OVgL8zWDnCgY0PSNmRV1XR9Atg2Fm76qg3bgSeeopeyxVANpFSDxk4rViRdYMpTxrjn/9MmgwZolbq2IDUorpaM/UCKD0MbD7miR4yyPvKV1IfeGqRlLYB0H4fQNbOy5OCyM5OlZX44Q9t67iANHqMH08rz9raaIVeBjyxjaVLaZosHgf+3/+z7bZCpNFD2oZfO/KHHqL0yoQJtKGnTchBgNW2AnBgw+RAWmctd+3NkjL0xPh+/WuaCjn5ZKq0t4lEIk0Ga/Ro6t27uigbkAHXM1hCAD//Ob2+4QZbjwVOaxvawCbLnIrr9rFhA+2kC9AW/zaSVo+jjqJrls7Lk4LIp56iIvsRI2zN1gBpMhR5ecp3GAz0XB0UyaD3wgttzdakzW4efjgFUdu2ZV3m7Hpb6ehQq8FuvNG26Xwg97YCcGDD5EDKjhwwHdgY3Kg4d1pbad8QwPRZLNnQOiddHUUsZjhL4XpjXLAA+PhjGiXbsPJHS1rndPDB1EPv3Enbr2fAdT0eeoimQKZPt3SkRiZyzdgALge+Qqhphh/8ICntljtZR+VZOi/XbWPrVjoTC7Ddd0gtBg5MkrmsTK1AMxjouabH88+TUdfWqqX6NpG1raxaZbgmjQMbxjRZMzZZpqLkVhiuGd9f/0rzwmPGUMbGRqQW/ZwToAKbLM7JdT3kyp+vf922olCJ1KNf0FtcTMEN4K+MXne32hX5yittv33KDAWgbGPNGkrrZ8BVPZYsoY0UCwtz2mE4FdrsZtpRud8GAU88QUHvF75AhbI2ktaPAqanKl3TQ+6Y/d3vmj44ORtp28rw4cA++5ABZdnkkwMbxhIZnZM8a2ntWjpiIQ1lZXRta3NppYfckvvyy21NnQJZnJM8FfujjzLeQ+rR2mrbY6Vn5041ArVpNYOWjHpI+1i+POM9XHVO//gHLV0aOlRtJGgjafWoqVEePMu5Ua7qITuu886zZQmvlp07VW2wLrsJqAzFxx9ndAquaiGE0sPGOjRJxrYiBwGrV2e8h6t6rF1LR1/EYnSunM1k1ENrHxnwfFd7i3Bg4zG7dmVwTjU1at3i2rVp7yEzFEK4YIAffgi8/TbN47vdGPffn65ZOi6phytTc08+SXU/Rxxh68owSdqgF1B6rFmT8R6uOutHH6XrxRfT5nk2Y8g+/NJ5tbWp7RAc7MgHDUoh9bhx1GE2NWVcVemqbSxYAKxbRztFn3++7bcPlG0AdGQCQMvzR460/fYZ9ZAF/X7Sw0Y4sPEYaXw1NWn6AbkyKkPnpd2V3fHOXNbWnHVWihxn7mRsjFKL+vqMR01IPVzJ2MjzvOThlDZjyFn7JbDZupXOhALUuTQ20tur9rHJ6Kz9krGZPZumbEePVsvzbSSjbZSUqM4ygx6uHnQoz6+66CKVVrURQx35mjUZ/1DXbKO3V03ZOhD0AvYMEjmwYSyR0fgAGnkBGTuvvDxVj+JoZy4EHRkAqMP2bCajHuXlKpjKoId2as5R1q4Fli2j/wAHRqCAwUDvk0/8Md0wezZ1GlOmKMdpIw0NdPtYLGlDOonfRuV//Stdv/Ut26dsgTR7+mgxMCp3bV+fzk7ghRfotc0rwyQZ9dh3Xyq2b2ujFWppcM023nqLHriqigaJDpC2sBzgjA3jLGmLQyWy88owFQW4NP2ydCkt5S0pUecV2UzWQE/bmafBtakoWVtz0km2109IMuohl8o2NlLBRRpcc05Sj69+1ZHbSy0GD1ZLtnX4yVm3tNApyoDjeqRtKwYyWK7t6/Of/1D2asQIOn7FATLqUVCg2ouBQM+1tnL22bYXDQNUw79jB73OmLFZty7j0Qoc2DCWyFhDARiaigJc6sxlYzzjDEdSyYABZ21g+sW14mE5Ineo4+rpUeURKfUoLQXq6uh1Bj1ccU4NDcDChfTahlOJU5F2lYdEm173errhlVcoS7Hffqpw1WYMt5UMHXlenpoCd1QPmek991xHsleAPXq4YhtCUHYToA0sHaChgT4mL49qsPpRV0crK7u7gU8/TXsfDmwYSxjOUGQJbBzvzIVwvCMH7NHDlSBvwwZaShuP27pbqBbpnOLxNM4JMKSHK87phRcomDjiCKopcYCstjF6NM1Ttbd7XzArBwFf+YotJ7ynwvA09oYNGe/j+L4+3d3Aiy/Sa4c6csCAHjJj43VHvmgR8NlntO+VPAPPZrQzASnjyHhcHdKbwT44sGEskXUqShpffX3GntrxzvzDD6nzLCpyZBmvJO1mhZJRo+i6eXPae2j3sXGsIHLOHLqecEKK5Wz2oD3QL+0u/PvuS9cMm/S52pE7lK0BDHRcBQXqhxnsw3E92tspYwN425HLbF4GLQAX9FiwgJZ/Dhpk22GoyXR1qdnYXPRwta2ceabmECd7yWobgH/0cAAObDwmawFgZSVF9kDGojfHAxu52uXkk6mI1wGyzgsDtEMnQCOeNGhnyRxrkK++Stezz3boAww6JwN6OO6cWltpPw7A28AG8Ieznj+fNKmrc2QLAEnG4lBAabF7d8ZUruN6vPwyXc8+O01xVO7IQUB+Pm3umRI/2AYA/P3vdA1AW/HsgOUc4cDGY2Ssss8+aX4hFlM/NNCZOzYV9dprdD31VIc+gJJScl44bS2ubIxbtqRNx2gLIh0J9NrbVT2Jg3rIY20yrqr3Q2CzcCENmUeOpIP8HCIwgc3cuXQ99VTHpqEAAzVHFRVqEOIHPU47zaEP0NtG2hIeE7bh2Aqxzz6jowziceCLX3ToQwwEvYA/2opDcGDjMbI/ShvYAIY6L0czNu3twBtv0GuH5oQBFeQNH55h6mX4cOosurrS1lHE46pBOhLoLVxIhaG1tY525IZsQzonLwMb2XF98YuOduSBcdZaPRyio0Nt5ZR22hbwXo8tW2in8FiMVg86RNYpfUBpsXWr2hU1CalFd3faX8mNf/+brkceSYf6OoSpQYCXvsMhOLDxkOZmdQaZocDGq6moN96gjryuTi0hdQBDHbm2jsKrQE+bvXKwI5f/3fK/PyV+yNi40JEDBrKbgPcd+datdPp8LGb7OWrJHwPQVEHG/tFrPWRHPmmSY1siAAZtY9gwmqvq7VVRchKOL3/ntuIKHNh4iDS+igpVRpMSr6eiZEc+fbr3Hbn2FwwUEDuuh4MYck5Si50703ofR9Pr27a50pELocw/o3147axlR37EEY525FotMjZJr/VwqSM3ZBt5ebSPjvYNSWhreW3XI5FQ9uGSHhzYMK5jqOMCvJ+KcqkjN9QYAUMpVMd2H3ZpRA4Y1KOyUv2xafRwpSM//PAMa9JzZ+dOShoCqm9KidfOWnbkLrWVrIMAL/UQwvWOPNdBUTyudnG3XY8VK6iQsKzMsU0KJYYGidI2WlroTLEUcGDDmMZwhkL2bF5MRTU0UIMEHJ0jByxkbLwI9BYsoKvDI3LAoB6xWFY9XAlsXEqtDx6sOp6UyKhn+/a0x0xEqiPX6pEGx/RYuZKWK5WWAsccY/PN9RjWQ/pSL/SQtnHCCY7sNizp7lYzbRn1KC2lgRGQVg8ObBjTGM7YGAhsHJuK+u9/6XrggY6OyAETGRtZIShPREyBY1NRb71F12OPtfnGejo61NL3rHrIZTFyzWsS0jl1dTlQECn1mDbN5hvrMdxxyUOkurvdH4WuX08dREGBayPyrLYh91gy0FZs10PaxjHHZIlGc8fwoEjqkaatAMo+bB8UvfkmXR1uKzKmLyhIc6aaliy+1LXjaWyGAxsPMe2cduxIOwp1zADffpuuDo+4AAvOKcPuso5NRUk9vvAFm2+sRxaHFhVl2JdDIr1XGuek3dfHVj0+/5zOmonF6OBLBzEc2JSUqCXOWfRwbBAwaZJjG69JDOvh5SDAJd8hhJpZsiPQc8Q+hHDNd0jbGDHCwOkVWfTgwIYxjeHAxsAo1PEMhcONUVscauco1FY9WlqADz6g1w47a22Ql7VeO0ugV1ys7mGrHtpsXlWVjTfuj+GgF8jamTsW2Lg4CDAc2GjbSppBUdD1aG5Wz25nYGNrZ75hA31mQQFNYzuIYdsAsmawtFo4tou7A3Bg4yGGA5viYsOjUFsbY1cXnWsCOO6cdu9Wq3YMB3puO6d336XWPWqUgYfMDcO2AWTVIxZzqPOSgY2fOnIga+fleEfu8DQUYGEQ0N6u9pZIwhE96uspmwcARx9t4437I7WorjZwNq9XGRtpGy5k80wNAgy2FSBYdTYc2HiIYecEqM4rzajckZTh0qW0FGXQIHXYokNILWpqDLR7ExkbW/VwKXsFmLQNrzJYHmQo7NDDkY6rpUUV2TusR0+PqvXM2nmVlan/fDf1kEHvQQf5K5vnVWAT0EGANB3AwV3tHYADG4/o7lbZP1POOktgY6vxaYv/HNy/BrDonNra0v7BjnbkLgQ2lvQwUHNkmx7abJ6LGQo70+u22sZ776lsXsb16LmzfTt9VH6+wfNXvQj0/DgtBxiqOXJUDz9l84CstuH4Lu4OwYGNR8jKdcPOyWCBqK0ZCr+OyAcMUGmdNJ257XokEsA779BrFwup7ZiKAhxw1jKbN3AgsP/+Nt00PU7U2LS1pS07MY8HHdeIERmOHtHiZWDj1468pSXt3Irtg6KWFmD5cnrNgZ4rcGDjEdJRG6pcB7yZinrvPbo6vOIFMNlxxWKGU6i2NcY1a6hKsaQEOPhgm26aHlOBjRfpdRnkTZ3qeDavuZm+AHunooSwsW5ATjW40JGbsg3A/cCmuxtYvJheu6iHId9RUaH2kHFLj8WLaWA0cqTj2TzA3uwmwIENYwK7nZPtHfnOnWoN5eGH23TT9JgadQGGnbVtgd7SpXQ99FBKszmMJefU1ERTRCmw3TktWULXo46y6YbpkW2lqirL0SOSLM7akboBaR+TJ9t0w/SYsg1Ajcrdmpr7+GNaCVBR4Uo2z5Qe2kGRW3q42FYSCbVVhK9rjhyGAxuP2LSJroadU5aMjWMd+dix5KAcxtSoC8g6/WJ7Bks6J4eXagLknOTOoYYCvaoqNSeRxT5sc07LltHVxaDXsG3IHaF37Ur547w8NZNpix7bt9NXLAYccogNN8yM3Xo4Mk0JABMnGkxH50Zg9HChrTQ0UMIsFstysrdEatHYmHb3Tg5sGMNs3EjX0aMNvsHgVFRHh037DbjYGAETG2xJ5K51u3en/LHtGSwX9di2jZxTXp7aVDgj8bjSY+fOlL9iq3Pq7AQ++oheH3aYDTfMjOnspjzuOo1tADbrIYO88eMNrDfOHdMdeRY9ZBYsiEEvYL8ejg0CXGgrUothw2jLnKxoV6yl2SONAxvGMJ9+StdRowy+wWBHDtiUpZAduQuNUQilx777GnyTQedkixZCuBrYSC3q6kzMernprD/8kNYcDxyoDtJzEBn0Gu64srQVwKHAxoW2AliYtpW24VaGwkU92trUn2XXoMhWPdrbaWoOcEUP0wPEggIV2bplHy7AgY1HmO7IZWSdpjHKJXmAzYGNCx35zp2q0RgO9LJ05LZmbD77jB4yL8+VwmHTtgG4G9hoOy6HC4cB2rQVsBD0trerXR+TCHJgY1kPN2xDOwhwQQ/ZViorTWyX46YeK1fSFM+gQa4UDlvyHW4Gei7BgY1HWM5QNDam/LF2v4GcA5vWVmD1anrtYoZi+HATm3K6mbGRjvrAAx3fNRTIMbBJYx9B7silHoanbcvLVW2HG87axUFAZ6cqDjWsh8GOq7ubvnJi0yaywYIC2pzPYWSQZ1gLwN0MlnZazsVBgCU9OLBhcqGxUU1nGs5QyOFIY2PaIhrbshTLl9PIa+hQg0UeuWGpI8+SwbK1eNjleiPfZ2xc1sN0hiIedy+jt2cPbQUAuBLobdpETbO01MDJzRKDHTlggx6yIz/wQLWs2kF8n6Hw+yAAcH+q0gU4sPEAWTg8aJCJWkNpfIlE1jNfcu7MPeq47Bxl2DoVJfVwYUUU4EygZ5tzSiTUQaAuOOueHlU34MQoNOe2smIFRRojRhjcaTM3tEGe4QRAFi0KC1Utl22BjcvTcr7NULg4LQdYGAQAnLFh7MFSx1VSAhQV0WunsxRyl0yXRxlONEZbMjbyDKBDD7XhZtnxdcZmwwbaSbWoCJgwIcebZeezz6hEoajI4PJVicFRaJoxgnGCNCJvb6e5rBTYZh9BGBTJjI3TGYpEwlVfKkSOenBgw+SCpY4LMDz9krMByqW8LsyRA8505FKLnOsG2tuVt3BBj0RCZfTs1EMufGhpsfxoxMqVdD3wQFc2KpTSjxplckuULHqUl9M158DG5aDXUsdVWanSO1nsI2c9pH0EeBBgW1v59FNyxkVFrmxUuGuX+v+zpEeaQM82PVyEAxsPsBzYZCkQlc46ZwNctYquBx6Y442MkXP6NMWBP9opvpyc9erVdP+aGhNFDdaRe9jk55tYsgkY7siDahumOnIg6yjUdj0OOCDHGxnDUluJx9WgKE3nZYseHR3qAV3Ww86pKNttY//9XR0EmFqEAbinh4twYOMBTmVsbDHAhgZgxw56PX58DjcyhnYPG0vOqacn5XxTUZGqXcxJD5m9OuAAV1Y1WNrDBnDfWbvUceU8CHCyIwc808N0oOeGfXzyCaUcq6rUMQ4O0tSk/hxLxcNZbKO7O+3MnTGCEPQChgcBOWfzXIQDGw+QUw2GV0RJ3MjYyMa4776u7KLa0ECzPbGYyb3eyspUz++ks3Y5Q+FUNk+eihG0jtxyxsaNjnz3bnXekAv1RoDP9dDahotLmwcNMniGmERq0daW8mw1qQVgox4ukHPQ6/QgwEU4sPGAnDsvJ52TNkPhAlKLESNUbbQhYrFQ6+HLbJ4QahfVoDhrJ+soZMdVW6vvDR2itVUdjeZL3xGUjryyUr1OoUd+vprKCZIeOQe9Tpc4uAgHNi6jTZ+aztgY7Lyamy09GhGU9CngrrMOSsbGQDrZ8lliW7aQmPn5wLhxFm9iDsv2kSVFFcSOXGZ6KyvVf7dhQqiHZduIx7P+wTnrIURw9HBaCw/gwMZlpHOqqbEwyAtxR256lAEYbpCWA72uLrX5mt8DGzkK7exMWRigtTXLq+akbYwbZ/CEvdywtMuuRHbkaf7zg9yRW2orburh92k5wPnO/PPPKQMSj7uyIgrIwZe6YRsuw4GNy6xdS1cnGqMtdRRBmXoBsv7BOeuxdi0VJ5eXm1yiZB3t8mZTZCkMKClRy6Ut6+FyR67dZXfQIJNvdmMUGpQROeB859XbS8XDAAd6gJqyHT3alWNYLC/CAAxr0dqaQ7bXZQIZ2DzwwAMYPXo0iouLMWnSJLzxxhteP5JhZNu3tODI6XRyczNNNwCuOSdbAj2nnJPLxZBdXco57befyTfn56vDwlL8wbGYzXq4gLbjMi1/CDM2bmQ3LeuxYQOl2IqKLEZe5rFlUOSG73CB7dtptX08bnIRBqD+2K6urNneoKyMMhXYbJZ7m3vIc889hxkzZuDmm2/G0qVLcdxxx+H000/Hpk2bvH40Q8jAxlJ20mnnJA++HDrUwiS+NXwd6OX0cOZZv54GvgMGWDyiy2n7cNlZy6B3zBgLb3Y66G1vVz1rEPRwqyMfPx7Iy7N4E+MkEsC6dfQ6J/sISVuRWtTVWZglzpLtLS5W/6VBmY4yFdhMmDABP/nJT9Dq4d7K99xzDy677DJcfvnlOOCAA/Db3/4WdXV1ePDBBz17JjP4OrCRntN0usAabW003QDkqIdTztplPbS2YSlB5LQest7IpZoBGWc7HfSm2N8xO+vW0RurqlzZuBFQsxuW9HDad0jbcGkQ8NlnFFvm5/t0KsrlQVFOtpGXp7b2SKGHLdlelzEV2MydOxevvfYa9ttvPzz22GNOPVNaurq68P7772P69Om670+fPh1vv/12yvd0dnaiublZ9+UltgQ2WRqj5T9Rhv0urXiRcUN1tYUaCsBw52VZD/mALukhO3LLcYOTGay2NlXJ65IeOTlrqUVrK6XBkpBa9PRY3IRN21ZcmKbs7lYfmZMeTg8CXG4rY8darGN3Wg+XfWlOgwDA+UGRy5gKbI455hi8++67uPvuu3HLLbfg8MMPx/z58x16tP7s2LEDvb29GJq0q+XQoUOxffv2lO+ZNWsWKisr+77qTE9A2sfu3bQhHWAxCeBWxsaDjtyXGQqX9ch5kOekfaxfT9fqarVTqcPk5KyzpNe1G7pZ0kPaxtixFt5sng0bKAgrLaVtc0zDHbkeJ9tKT4+apnTJPqQelhekubEdgItYKh7+9re/jU8++QRnnXUWzjzzTJx77rlYKxu6C8SSekEhRL/vSWbOnImmpqa+Ly/rhGS2dvhwi/t5ubEKCAhOR+6kHq2tKkPhknPKKZsHONt5udyRt7eraUpLzjrLmRpZaq2zIztylzuu/fc3eRioxOlBkUd65Ow7nGgrmzZRcFNURDuPuoCv9fAAy6uihBCYPn06vve97+Gll17CwQcfjBtuuAEtDv7lgwYNQl5eXr/sTH19fb8sjqSoqAgVFRW6L6/IuePKUhggf9zWljL7np2gOScnMzYeZihssQ/zP86MyyPyNWvIxC1PUwLuBHpByVA4qUV3t+sZCjlNmXOGwgk9tH7UUhRqju5u5a6c9qUeV3IYxpTqDz30EC677DIceuihqKysxCmnnIK33noLV111FR544AEsW7YMBx54IBYvXuzIwxYWFmLSpEmYO3eu7vtz587FMccc48hn2oltgU0iQUPaND8GLDTIPXtozSAQnAyFkxv0udxxNTWpY4ec0kPu4ZeTHh4EvZZLWLIYQE56BG0QkKUjl1o0NVm496ZNNJIqLg5OhiJEbWX9ekoQlZXlsN2WQfsISmBj6iz1u+66C1OmTMHFF1+MKVOm4Mgjj0SR5oCfSy+9FD/72c9wySWXYOXKlbY/LABcf/31+Na3voUjjzwSU6dOxSOPPIJNmzbhiiuucOTz7CTnjlx7KGVzM024aygupuxnZyc5KHkCgyGko66pcWWptxDuOesgBDZymnLYMPVnmSaLHtIe0hwJk5mg1VAAWfXIspF3erq71RbiQdEj+UyNpEyCtI2ODvoytaecdh26CxmK1lZAVhQ45Tss2wbgeluR2SvLtYpA1nn7LKf5+A5TgY2R+pTLLrsMP/nJTyw/UDYuuOAC7Ny5E3fccQe2bduGgw8+GK+88gpGmd6q1X1yXi0bj1PV4549ZIDDhvX7laoqGvnv3m1y91qXO/IdO6iDjcVy+Mgso66cGmPQVkQBzuoRtAwFYNhZmw70Nm6kDEVJicUNh8xj2yAAIP+RFD2Xl1NbFIL0SOFa0uPBNCVAM8Q5T1PabRuAp9lNyxgM9Czp4QG2h9dDhgzB66+/bvdtdXz/+9/Hp59+is7OTrz//vs4/vjjHf08OxDChowNkLVBWjZAjzqukSNVEadpTIy6TO9VErRCaiBrYGPZNoKYoQCyTkVZ7ry0O8O5sNR79251qrdl31FcTBXTQEo94nGV4QyK7/ClbQCshw+wPbCJxWI44YQT7L5t4Nm2jQZK8bjFnTIlTo3KXR5l2N6Rp4hcZEfe3Z2yJCkzLjsnW4Neu52TzFCUlpocyltDiBz3sJE4Nd3gUTZvxAiLqykBQ7usWQ58g1ZIDTjXVoTwbNo2p7NHnZzG9oBAnhUVRGTJ0bhxahWqJZxyTnJVQ05Rl3FsmXqRjbG7O+UuawMGqK3ATXVePT20tSng2rk3cgd2X05FuZyh2L6d/oR4PMe+wSlnLZeguNxWct7E1mk9QpShkH60pYXcgWG2b6dRVDxu4SRba7ipR1BqbDiwcYnly+l66KE53sipzksGNi41xhUr6HrggTncJMsua7GYRWe9ZQtlKAoKXKmh6O5WgU1O9mHQNixlbADXgjyZrdl3XyqGt4wstk9zBIxlPXI6fdE8tmSvANVe0pxkaMl3aI+VDpIeUovW1pTZXjktB5hcKSa1qK21uCWyOXbupHpFIMdBkVaPFHDGhkmJ7MhtC2zsLPJKJNRuaC45JxnoTZyYw03y8lSBThpnbWmkIZ3TyJGurPL45BM6WLe8PMe40qkCQBnYuBT0Sts45JAcb5QlsLE8CnU50HNbD1P2sXu3ansjR1p+NKP09AAffkivc9JDatHbS40viYIC9Sum9PCorYwerV80axqnBgEewYGNS9iWsXFiWV59PU3lxOMW92s3x86dlBQBnHfWlvRwueP64AO6HnpojjM9BrVoa0vpy9PjcjZP6pFT0As456xd7rx8rYfUYsiQHFYBGOeTT8hVDRiQ40ygNgpwQg+2DU/hwMYFuruBjz6i174cdcmOa8QIV9KnMsgbMyaHYkiJE3p4NOrKOejNooV2ha+f9fC1s25tVbl/F/TQDgKcto+cBgEu28Yhh+SYTM3PV8WOdmb0QtpWtH40kcjxs1yAAxsXWLOGRsgDBtiQBAhZhiJnnJhucLlmwJHAJkXdQF6exSW9Ljpr7VSDm87aMHLKtqLC5A6Y1pBtxY1BQKQyFADrocWgFolE2ll/X8GBjQto58hzLtkIUYbCTefk51GX7YFNIpFylRhgwVl3d6vDQF3QY/VqNdUwenSON3PCNoI6LQeEwnf4PrBx0T66u90bBBQXqwRXEKajOLBxAVk4nPM0FBCKDIUXGRtLzskFPbRTDQcfnOPNTNQNGLaPzz6jQKmoiOooHEZrG04PAqQWzc0mDo2NQEfu50GArwM9IVzNfn/8sVp04PRMQCwWrN2HObBxAdtG5IAywLa2lD/2e/rU1qkGwP5AT7tCzAU9ZNA7enQOZ0RJDNQNmLYPaRsurRDzoiMHTJwn5tG0rW8zFC76joYG2ug0FrN5kGjX8vddu5S2LqwQc2QQ0NWVduOeIJ0XxYGNC9ga2MiDLwNa8KZd1ZDzVANg/yh02zbK8ebl5XBUrnFstQ3A/kAvxFMvhYWqORnWw8W2ol104NuMjYv2IW1j7Fj9FlaWsVsPaRtDh5o8RdQajrQVwF778AgObBxm506VAHBzKqq9nU7pzYo2feqCc7K13ghQPVOaDJbpjlz+Z+2zjzpbx0FsdU5A1oxeTQ1d5cKerIQ4QwHkoIcLbUVONVRU2CR/Fj3kgZKGtWhtJQcHuBrY2N5W7NIjyNNyRUXKIdulh4dwYOMw771H1/33t2kRRZbGWFmp+mNDBtjcrFKxdXW5P18W3n+frm45J9lxSf+bFXmUggtaAMo+Dj/cphtmyegNHkzXhgaD95OBngup9c8/px3pbZ9qyBDY+FmPZcvomvP+RpIsekgtmpoM7nO0eTNdXV4h5pbvsGwbLgQ2QtisRyxmvx4ewoGNw7z7Ll2PPtqmG2YZkcdiJg1QduQDB6pO0UHeeYeuU6bYdMMsjVHWu8rTkbMi9XBho8KWFlVvZLt92OWcZGWzC4GeDPImTMhxF1WJvElHR9rqYKmHIfvo6aGpSsBVPSZNsumGBrK98mw1Q4MilwcB0pe6pYfptuKi79i0iWw2P9+mQQDAgQ1jHMcCGwOjUEPO2sXG2N0NLF5Mr90ObHbuNLjyxUU9Fi2ikdeoUTYeSeWUs3ah3ui//6Xr1Kk23VAbHaUZCEj7MKTH55+TEeXlUR2FwzimRxrbiMdVhtPUoMgF29i5k+rzAB8PAlz0HdI2DjvMxvEoBzaMEYRQoy7bGmOWqQbApLN2sTEuX06D5+pqYL/9bLqpwakoIQxOR7k4CrU96AVC4axt68hLStQcjh16yOzV8OEqteEQbW1qqsGtwAawmO11wTZkpnf//VWbzhmDg6IdOwzuthvktgJwYMMYY+1aWgFYVOTeqhfAvxkb6ZyOPtrGlcNZ9MjPV47Qr3rYlr0C7J2a27NHHW3ssB49PZTBAmzUIxazt+bIRdtYvJg0GT7cxhg7BL7DzY5cFssmEuTHsyID3yBmNwEObBhjyBH5EUeo7UVyRhpfe3vaYYRfMzZedOSAP/UQQh/o2YZB57RjR8pTF/RIR11RYcN+/plZuZIeuaICOPBAG29sp7P2qCO3pXAYCGxbAbzpyAsKVE10Vj0SCdVeHNajvR1YupReu+lLObBhADg81QCQhafA1Kg8QoFNVj16e9XxAQ7rsXEjPU9BgY0rogDDzqm7WyVj0uJBx2VrNg8IbGDjRUcOWJyaczhD0durfKlv9dixg5aSxWI2FsylZskSyuYNHWrzLgwG20p9vYFBkcdwYOMgjgQ2JSXqdYCc9Y4dNDUHAJMn23jjLKvEABPp9fp68hh5ecCwYfY8XxpkkDdxov6/NGey6FFcrDY3y2ofLhaHOhL0AvYGNi515EK4ENik6Zn86Ds++ohmRQcMAA46yMYb2xnYSC2GDrUxPZ8arW3Yls0DDE9jd3b6/yBMDmwcormZImvAZucUj6ue0I46Cpeck+y4JkxQm+bZgoli6qx6SC1cKA596y262t6RG9DDsLN2KbUOONSRA/bWHLnUVjZupAVY+fk0jW0bUgsh0u7eadg2OjrUmnCH9ZC2MXmyzc3Szmxv0OtrgKx6lJWprsfv01Ec2DjEwoWUQh071oH9muxy1q2t6mAYhxvk66/T9bjjbL6xnc7JxamG//yHrtOm2XxjA3rIlcrbt2e5l0t6bNsGrFlDo09bs5uA4bbS1kb7CmXEJT0WLqTrEUc4lM0D0uph2DZkR15SYvNIpT9Sj2OOsfnGAWwriQTw5pv02u3ABjChh8dwYOMQsiM/6SQHbp5lukFO8W7dmmUuVDqn8nIbTmDMzL//TdcvftHmGxtojHJWSe6tlhaXpl62bgVWraKO/MQTbb65AT2k75X//WlxyVlL2zjiCNon0lay6KE1/Yx6COHaqHzuXLqefLLNN87LoyWaQFo95J9myjZsnQ/RI4SyD9v1MNBWLOnhICtW0ACtrMz9QQBgQg+P4cDGIeSI3PbGCGQ1wBEj6NrZmWXvFlkoK9/gENu3U4P0uiOXvictchjisB4y6PWiIweUc8qqh0uBnuzIbQ96Afuc9c6d1KAAR+1D25F7oYdsK1u3ZtnQ0qUgb8UKmpYrLfUmQ2G4rbgc9J5wggOlPHb6Uo/hwMYBGhrUYY+2d+RA1jqKwkKVMsxogLIjd7iKX3bkhx2m9oawDdkYe3rSHnBjuDHKlI7DhcOOjUCBwAV6XnfkgEE9pBY1NSrr4QArV9JHlZY6MPUCZD00dtgwKuPr6ckydSvbisODANmRH3+8A7Lbmd10WQ9fDwJ8AAc2DjBvHl0POUTN4duK3c7apY78lFMcuLmBugGpRUNDlhPPXdBDCJXNc0QPWZSRZisAwKBz6u1VPZuDenz0EfUJxcUOdeR26eFSW3G0IwdUYJNGj/x89Sf6QQ9Hg167bANwRY+ODlVv5JUenLGJMDJD4ciIHLDPAF3qyB0NbAoL1VKJNKPQgQOVZHL2LSUuZLDWrKH/k8JC4AtfcOAD7LINebiW9lRVB9B25MXFDnxAgNoK4HBbAQKlR2cnsGABvXa0I+/sTLvZqQxsdu/OuKOEK3q89RYFN8OH27yJpcTOQM9jOLCxGSGAV1+l144UDgOBck5r1gCbN1NHfuyxDn1IFj1iMaXH5s0Z7uOCHq+9RtcvfMGhw9RNOKfPPstQXC61GDSIhvEO4WhqHTDVVrzOUDjekQP2dV6ff05XBw8Dffttesxhw4CDD3bgA7RLztKkcisrVVI4rR49PWr9s4N6yLZyyikO1WtzxoZJx9KltA9FaSlnbADgxRfpevzxDnXkgNIjwzxTVj1cmnqZM4eup5/u0AcYsA1tcXnaM3Bkx+WgFm1twPz59NoPHbnXbWXhQtJk6FCaxnaEAPmOf/6Tro535EDGQVFW+2hooBFCPO5odlPq4Ye2smWLwYNBPYIDG5uRHddpp7nQkRtwTps2ZbiPC87p+efp+pWvOPYRpvRIm7FxYeplxw41IndMDwNaFBer2q9PP03zSy51XG1ttC28bYfEJmNAD3nIZFotAFf0+Nvf6PrlLzu4gjogeggB/PWv9Pqccxz5CMpEymxkBj1GjqRrWj3kIGDwYMc29lyzhhak5OcDZ57pyEcYHhTl5dGRLH7ey4YDG5uZPZuu557r4IcYMMAxY+i6bl2G+zjsnDZvpmMlYjEHnRNgSI/Ro+m6fn2aX5BaDB7s2NTLSy9R7HTYYer/x3YMaAEA48bRNa19uNCRy47r/PO97cjHjqXrrl1qv8p+OKxHT4/yHeef78hHEAb0yGob3d1q12GH9Hj/fQokSksdzG4C9ujhYls56SQHtoiQGNCioEBtOCuPyPEjHNjYyCef0CoPR6NqwJAB7rcfXTdvTjND09ur5oUdapDSUR97rMM1lyb0WLMmzS+ELXvV0ZFxd0bprNM6J4f1aG8HXn6ZXn/1q458BGHANgYMUH9m1s7LoRqKBQsoVqipcWA3ai0mOvK0tiGnXvLy6IEdQHbkZ57pYOYbMBX4etVWAP0gwDFMDorS6rFwIS0NTjvP7Twc2NiInIY68USHdxk3YICDBtGOqkKkyVI0NNAkaTzuwOYyhEytO9pxAfYENg7vYdPUpIr/zjvPkY8gDBREAt4HNq++SqvzR40CjjrKkY8gDDprrzsv2VbOPdfRWm1T2d7du9P0TVKLIUMcmXrRTkM52pEDgcjYrF0LLFtGUnud+QZUW0mrxw03UGpJHojnARzY2Mhf/kJXR6ehAEMGGIupzjyls3bYOW3bpuza0Y4cMOWctmxJs2zTYef08suUwZ8wwaGlmhIDBZGA94GNNuh1cEd+e0ah3d1qC28H9OjtdWkaClB6ZFi7XFamdjxI2Xk5bBtLlwIbNtCjnnGGIx+hMOE71qxJkwR1WA/tNJRDY1DCroyNCyvmssGBjU2sXEmneRcU+GOUAegbZD8cboxPP01OYMoUF86UNKBHTY3KonnhrB9/nK6O20ZBgQpUfZpeb22leiPAH9k8IIuzlqvlHJp6mTePPmLgQId2Ktdihx4Ot5Vnn6XrGWfo9990BBMZrKamLBksB/QQQunhWlvp7s54nkZG2xCCA5sw8cQTdD3zTIejasCwc5IZm9WrU/zQwcaYSAAPP0yvL73U9tv3x6Qen3yS4ocObs63bh1tvBaL+UeP/fen67Zt5LD74WBNydNPA3v2kIOcPNn22+sxaRurVqX4oVaLuP0uU7aVCy6guNRRDOoh7SOrHjbT2Qk89hi9/uY3bb99fwzoUVqqVoq5rce779JqqKIih2vzAMPZXmkbH3+cYsl3U5M62oYDm2AjBPD3v9Priy924QMNOie5qZU8t0qHg4HNvHmUJSovBy66yPbb98egHgcdRFe39fjDH+h66qm0tNlxDOhRVaWcdT89tBvc2KyHEMADD9DrK690JE7QY9A25HLzFStSOGsHbWPrVuCFF+j1lVfafvv+mNTjgw9S/NBBPf72Nyqirq0FvvQl22/fH5/r8eCDdL3gAsfqtBUmprGLi2k2s1/2W2ZrKioc2krcGBzY2EAsRtNQzzzjwpwwYLgxTpxI1xUrUmQWHSyWlSPQb32LVpw4jmxAWfQ47DC6LluW4ocOOaeuLjUC/Z//sfXW6TFpH/2ctZx6KSiwvQr+3XdJ/+Ji4JJLbL11akxkbNI6awc7rkcfpaXexx7r4KZ8WuzoyB3cvFF25N/9rsNF1BKTeqQcFDmkx86dwHPP0evvf9/WW6cmHldHhmfQIz8/wyDRB9NQAAc2tlFaClx4oQNHyafChLMuKSFn3W8+1CFnvX27Wh3mt47ci8DmxRcpThg+3KURKJB756V1TjanVLQjUMf249BiUIv8fJXh7KeHQ7bR0wM88gi9diVbA5gOejduTDFV6ZAey5fTgoO8PODyy229dXpyHQR0dKjNj2zW4/HHKXl6+OEuTNlKctWDAxvGMgaNLy9PjQL7deYOOad77yWHPWWKg7vJJmOyMW7alFQE6JBzEgK4+256ffnlLo1Agdydk4NBrxyBut6Rd3VlLIgE3NdjzhxapTd4sAv1ExKDtlFdnWGq0iE9fv97up57rjr2w3FyzX7LjrywkOZ3baK7W03Zfv/7Dq8c1MKBDeMZBo0PoGgfAN57L+kHDjinhgYKbADgxhttu212DOpRWal2IF68WPMDqUVREf2STbz4Ik1RDhgAXHutbbfNjkE9Jk2i6wcfJP2qQx3Xz35GI9CpUz0YgQIZ9/UBgCOOoOs77yT9wIHi0N5e4NZb6fWVV5LpuYIJ3yHtI60eNtrH2rVq5eCMGbbdNjsmst8DBlD2e+VKzQ+0WtgYfTzxBO0/NniwS3WKEpO+4513kpbAc2DDWMaEczruOLouXJj0Awec089/Tkt5J02i825cw4Qe8oRxeWYTAEecUyKhOq5rr3VhpZwWuVVrFj3GjKEpsq6upMDXAdvYuBF46CF6feedHoxAgax6HH88Xd9+m0bMfTigx9NP0wqb6mrg+uttu212cvUdbW1AczO9tlGP226jTO9pp9HJ965hIvstn0unhwO20dEB3HEHvb7pJheWvGsx6DuOPJKC8fr6pFWmHNgwljHhnE44ga5Llih/5IRz2roVuP9+ev3Tn7rYcQGm9JDb1acNbGxi9mxK4VdU0EacrmJQj1hMdeZOO+s77qBg4aST6Ms18vLUGuosehx4INX9tLXRJnF92KxHV5cKem+80dYkYXZMtBVpG2++qVkpJjuu4mIybhtYuZICPYCCXlexoIfTbeXhh+konNpa4IorbLutMQzqUVRE5QYA8MYbmh9wYMNYxkRjrK2lkXkiodnhWhpfSYltzumuu2ikMXUqjbpcxUKg9957ms1Xbd7DpqsLuOUWev2DH7hUJKvFgrOeP1/zTZud9erVap+nu+6y5ZbmMKhHPK4yejo9bF718sc/0s66w4YBV19tyy2NY8I2DjuMpl8aGzV1NtppOZtGL7fcQtMZX/2qmuJwDYuBTV+gZ/M05Z49qo3ccosHK6YtZPRSDhI5sGFMY6IgElAj5H/8Y+83bJ56eecdtdrlrrtcztYAphrjmDHAyJGUPfj3v/d+0+aO/Be/oGmGmhqX6wUkJvQ4+WS6vvGG5mRrG51TIkGjzt5e4Kyz1CjPVUzoccopdJX7UqG1FWhpodc22Mf27cDNN9Prm292eZoBMKVFfr7KcPbpYXNb+cc/qIg6HlfTL65iQo+jjqK9uerrNVO3Nutx881UqzhunEvbISRjoa288opm6tbBrQDMwIFNEDFREAmos5qef37vSMPGxtjZSbvpCkGbEzq+JXwqTDTGWEyd5SXPYLFTj48+oqk4gAqpbVwoYRwTeowfT1Mw3d3qtG079Xj4Ycp+lJYCv/lNzrezhgk9pG289dZeGbTZzfLynB5DCArydu+mQmXXtkPQYkILQO87ANhqG7t3A9/7Hr2+/nrggANyvqV5TOhRVEQ7ywPqbC879Vi4UC2+uO8+F3ahToXJesXBg2mF6cKF8M1xCgAHNsHEREEkQKPyykpqg2+9BVsb4223UXZi6FDgnntyvp01TDpreV7TSy9RYGZXhqKri4K8ri5ygK6uZtBiUg+51FgeTGmXfWzYAPy//0ev775bnU/lOianbo8+mnz07NmwNbv5zDO0Uq6ggDZt9HvHBQBnn01lSh98sPfMORtH5D/4AdXm7b+/R9kaIKdATwjYpkdrqzpu5fLLaZdyTzChh/a08b/+FZTZlANtDmwY05goiARoiwU5En3kEajGOGRITo8xZ47ap+WBBzyoJZGYdE5Tp1IH1ty890R2udNujo1xxgzaWbeiglYAuT4lJzGpx9e+RteXXwY2f9xKXhbIyVnv2UM219pKc/FXXWX5VrljcKWH5IIL6PrQQ4DYZk+Qt3y5yk785Ccu7vGUjLSNnh76ykJNjZpyePhh2Bb0PvII1V3FYhTkacdqrmKyrZx+OiXu1q8H5s6FLXokEpTtXreO/NKvfmX5VrljUg/ZVp5+Gmhe10D/GDBAtTmP4MAmqEgDNDAVBagixWefBbZs2HtIWQ6BzfLldGQCAFx3nRrJeILJxhiPqw3i7rkHEA076B85rMl+6CGqM4rFgD//2YUTzTNhUo+DD6YpxN5e4P7fdqt7WDwPI5EAvv1tGuUPGQL86U8unAmVCZN6XHIJ+eUVK4B5b+zdVTGHtlJfT5mP1lbKnv7oR5ZvlTsms70AcM01dH30UWDPlr3bEOegx7x5KtD96U+BY46xfKvcMWkbAwYA3/kOvf7tb2HLIPG22ygDVFBAWT1XV8klY1KPk06iKcSWFuD/Ht87kstxwGwHHNgEFZMGOGkSVfX39AB3vjWNvmmxI1+5EvjiF8lRn3KKxyMMwLQWANU6lJbSjswvbj2Kvjl4sKWPf/JJ5ajvusvFoxPSIfXoW/aVneuuo+v9T5VjG4ZZ1qK3l875mTOHMoUvvEDF2p5i0j6qq1Xh5k9mHw4BWNajvp7aysaNVBD6l794NAUl0S6zMZGl2H9/Olrh18v3pm8s6vHWWzR90dMDfP3rtE+Lp1jwHddcQwOYf/4TeKvtMPqmRT3uuUfV5D3yiFqV5xkmfUcspnzHz58agRYMsKyFnXBgE1QsNEg5j/3wulOwCEdaCmzee49WStTX03LQ555z8aiAdFjQYuBAtWLpurafYQ/KTOshT6q+5BLKUnzvex6PxiUW9DjrLKot2dOWhxvwa0u20dFBWbz/+z/K0DzxBE37eY4FPWbOpMD37c11eAIXW9Jj0yZqK8uX0yznyy97OF0riccNHxqrfYvsfO/e/A2swxhLerz2GtWONDfTtguPPurhdK3Egm2MG6fqYa7GfejKLzW9bYYQwO23qz2ufvxjj1ZBJWNBj0suIU227y7Grbjd5d1IU8OBTVCxYIAnnAB84xuAQBzn469oKDB+IIvsxI89lk6dPfJI4D//8YGjBixpAdDSylG1vdiEUfg2nkKi0vhJ1rLY76qrSJsrr1RTUZ5jQY94nM7qicUEnsHX8VDHxaY+ct06mlJ45hkKdJ97jg6F9QUW9KitpVoYALgK92N51wRTH/nPf9JxJqtW0b0WLqQVaL7Agh7nn0/TDh2iGOdhNvaUGa9H6+2lwOi006jdTJ9OS4Q9q6vRYtF3/OxnQFV5D5bhcFxX+AAEjDf8XbtoZ/bbbqN/33GHh8XTyVjQo6gI+N3v6PVvcD1mt7m9kVkKRMRoamoSAERTU5PXj5IbRxwhBCDEK6+YetvOnUKMy1snACEOGN0m1q3L/p4lS4Q47jj6OECIc88Vwlfy7dihHq6729Rb33pqrShEhwCEuPBCIVpbM/9+b68Qf/mLEHV19HHxuBCzZgmRSOTw/Hbz9NP0cCeeaPqts85YKAAhYugV996b/e/as0eI228XoqSEPnLQICFee83iczvFJZfQw919t6m39fQI8cWBi+nvKm8Xb72V/T0bN5IdSXOcNEmITz+1+NxOMWIEPdySJabetvnTHjEE2wUgxNFHdIpt27K/Z+FCIQ4/XOlx2WVCtLdbfG4nWLlSGa5J/n77+yKGXgEIcfXVQnR2Zv797m4hHn1UiMGD6SMLC4V46CGLz+0U99xDD3fRRabfet0RCwQgREG8Wzz5pAPPJoz33xzYBJUvfIEM8Pnnzb0vkRCr8g8W+2CzAIQoLRXi5puFWL1adWKJhBCffSbE448LcdJJyimVlAjx61/7rBMXgqIR+ZDNzebe+/rr4ll8TeSjSwBC7LsvOZv6evUrvb1CrFghxC9+IcR++6mPGjVKiP/8x9a/xB7mzKEHnDLF9FsTP7xRXIn7+/7GadOEePllfcDX0SHEvHlCzJghRFWV0P3u5s22/RX2ceWV9IC33mr6rTsPOUFMwqK+IPa73xVi0SIKeiS7dgkxe7YQ558vRF4efVQsJsS115JWvmPsWHpII5GaloYG8S6OEtXYKQD6v7/rLiE2bND7jvXrhXj4YSGOPlrZRmWlEI89ZvPfYQfr1tEDlpWZf++f/iTuw/f7/saDDhLiqafIHiQ9PUIsXizEHXeowRAgxIQJ9H3f8eCD9IDnnGP6rV3fulR8Dc/2/Y2PPGL/43Fgk4bQBDannELW86c/mXtfY6MQgNiMfcTxx/b0GSEgRHm5ELW1QgwYIHTfj8cpgN+40Zk/JWd6e9XDfv65uff+5S9CAOL1Q67VOR45iNtnHyEKCvTfr6wU4pZbsmd3POPVV+lBJ040/97LLhMJQPz69NdEcbH6m/PyhBg2jL5iMb0eY8YI8dxzPgx4JddfTw/6wx+af29dnWhBmfjGaQ26v7mkhGyjulqvhUyUmUyGuMvBB9OD/vvf5t730UdCAOKj8sm6LIxsE3V1NFDSfr+gQIjvfc98s3SNrVuVkzNrwL/9rRCAeP6YX4lBg/R/95AhZB/5+frv19TQ4DBbdsczHn+cHvTUU82/94wzRC9i4oenfSBqa2lwbDdG+2+usQkqFueG0UB7DdSWNWL+wjz87W+0sqmwkJbsffYZ7UESi9EW4rfcQhutPf20D1a3pCMep4lewLIeJ47bjFWrgF/+EjjkEPrRjh3Ali20K29JCdUIPPAAaXT77Z5v1ZAeq7YBADt2IAbg+i+vx0cfUYH1iBFUJ7F9O30JQcWwF11EW+KvWUN74fiivigVVvUQAmhowAC04k8PtGDhQjrPaMAAutWWLbR7LgBMmECnuH/wAfD661Rf41us6rGDtkU4YOguvPce8PjjdOJ1fj6tmNq8mRbT5OfT93/2M/reww/7YgVwaqQWiUTSke4G2KvHeYetx8cfUx3R/vvTj+rryT56eqiu+KyzqJj+s89ol+XCQhv/BjvJ0XfEIfDzKz/FBx8A++xj76OZwev1LIxVcnROGDwYsRjtOvuVr9BuuevWUVBTWQnU1fmkuM8oJSW0jbDBfX360OhRVgb87//SV1MTrWrp7CSnPGKED1Z/GSUX57Q30MPgwRg9mo5BuOceYNs2+lFvL2lh4xmIzmNVj7Y2ZU+DBuG40bTZYG8vBftNTbTAqLbW471HzGKD78jPp03lLr6YbrNhAxUGV1eTHq4f3miV5H19zEQcmrZSU0Mrm378Y1pcsXUr+Y5hw+hs3bw8ex/bMXIMbAAAgwZ5vqgkKK6aSSbHjE3ykrzCQo/OarGLkhI6xdEmPSorVeYmcNjknCSxGAUzI4wvovMXuXbkhYW6zQrz8mh5a2Cx2XeUlNB5Y4GksJAMXAjSw0yEmqKtALRbc02Njc/oJnYMini5N2MZG0ZdoYL1UNgc2ASeXDvywYMDlJ4ygIUNHAGE0zZisdx9R5j0sKpFZyfVMgC+8KUc2AQVbox6bB6FBhqtFkIYf19PD22yAfjCOdkGtxU9PAjQw3oorGqxcydd8/J8MS/LgU1Q4Y5cDzsnhdWCSBnUxGJULBEW2Db0sO/Qw3oocm0rNTUeHwxHeP8EJrjrrrtwzDHHoLS0FFVVVV4/jrews9bDo3KFhYMOAShHXV0doEppA3DHpYfbih4reiQSKksRJj3smLb1AYEKbLq6unD++efjSnk0c5RhZ63Hih57l/MCCJceRUWqJsSMHhz06uGOXA/bh6KpiZbHAeGyD6lFR4e5aWyftZVADctuv/12AMDjjz/u7YP4AXZOeqzosWcPrXMHwqVHLEbrbdvbrQU2PnFOtsFtRQ8PivRY0UNqUV6u9tAKA9psb0eH8T0/fOY7AhXYWKGzsxOdnZ19/25ubvbwaWyEnZOeXJxTSYmPd9uzSEmJ+cCGbUMP66HHZ52XbVjRI+xaAKSH0cCGp6LcZdasWaisrOz7qqur8/qR7IFHoXpycU5h0wJQgRrrwR15Mlb0aG+nHfgAtg8gvG2loEDV1wU40PM8sLntttsQi8Uyfi1evNjy/WfOnImmpqa+r82bN9v49B5ipTF2d9PcMOAbA7QNudUpZygIHoUqeBCgJxfbyM+nMwLCRC7Z3rC1FSAUvsPzqairr74aF154Ycbf2XfffS3fv6ioCEVhmgOV5GJ88Xi4lvMCPOpKhp21QrshnRDGN9sLux5WO64wbVYIhKIjt5WSEtpsL8C+w/PAZtCgQRjkEzECRS6N0Sd7DdgKd+R6ONBTaOsEOjuNHWTU26v29QmbfbBt6GE99IRAD88DGzNs2rQJu3btwqZNm9Db24tly5YBAMaNG4cBmrNcIgF35HpC0Bhthe1DkbzSw0hg09hIe5UA4dWDbYNgPfSEIIMVqMDmlltuwRNPPNH378MPPxwAMG/ePEybNs2jp/II7sj1sHPSY6XmyGfOyTYKCihDmUiQHkY295S2UVlJ7w8T2r1KjBJW2wBC0ZHbilnf4cP9wAI1H/H4449DCNHvK3JBDcDFssmwc9LDga9C7usDGNeDbUNPWG0DyG0QEEY9zAa+LS3q6BaftJdABTaMBisHHbKz1uOzvRdsxaxzam1V2rF9RKPj4kERwXrosdpWSkt9sx8YBzZBRXvQYU+PsfdEwVlzep2w6pyKioAw1quZtY8wd1w8TamHfYces77Dh22FA5ugYuWgQ3loW02N/c/jNVZGXXLVSxj1sDr1UlMTvuW8gPVAz0fO2jZy6cjDPCgyahtdXYDcwT6Melj1HT7SggOboKLdm4cDG/POKZEAdu+m1wMHOvNMXmJWjzCeVKyF9VBYmcaWeoSxrZjtyOWAKBYzVogeNKy2FR/ZBgc2QcVKQaRskD4yQNswq0Vzs1rOG0Y9zI7Kw2wbALcVLcn7+hghzNlNsx251KK6Onz7gQHWfYePbCOE/ysRwmqDDLOzNjvKKCsL1+m8ErYNPayHQruPD+th3Xf4qCO3lRC0FQ5sgkwIDNA2OEOhh521HrYPhdzXBzBmH9pT4sNoH2wbesxmN33oOziwCTJmGmRvL+2mCoSzQXKQp4enXvSwfShiMXO+Q2qRlweUlzv3XF7BtqEnBHpwYBNkzBigLJQFfGWAtmG2INKHjdFWeBSqhzNYeszoobWNMK6Y40GAnhD4Dg5sgowV51RRAeQH6iQNY0jnlEioXTAz4cPGaCshGHXZipnOSwjWQ0vYteC2oicEenBgE2TYOSnM7uvDI3I9UbEPI3q0tdFeJQDrAUTHNgKcobCVEGSwOLAJMuycFEVFKk3OeoTCOdmKlZqSggJaNRdGrOgRdtswOo3NgyI9PrQPDmyCDDsnhXZfH9bDunNiZx3+mhLAnB5R6cgBY/v6RMV3mF2U4iP74MAmyLBz0sMZLIUZ58Q1JXrCHuQBPI2txey+PmHXw+qilOpqZ57HAhzYBBnuyPWwHgozWrS0qINUWQ9fbhFvO9xWFGb39Qm7HiFYlMKBTZDhUZceM3qEPYNlxTaKi/Vp+TDB07Z6WA+F1X19wqpHCPoVDmyCDI+69LAeCjMFkWHXAmDbSIb10GNUj+5uynAC4dUjBEEeBzZBJgQGaCtG9Ugkwq+H1EKI7Pv6hF0LgDvyZFgPPUb1kDUlYT3ZGwiFbXBgE2S4eFiPUT1aWtTJ3j4qeLMVM/v6+NQ52UoI0uu2wnroMaqH9KNVVXTERBjhwIbxlBAYoK0Y1UNqUVIS3pqSwkLj+/pw0KsnSnoYyfZGSQ8eBOi3zcg2je1T2+DAJsjwqEuP2VGXzxqjrWj39WFnzdO2yRjtyDs6aCdmIBp6ZLOPKNkGEFg9OLAJMkadU9hP9pbwqEsPO2sFZzf1mK0picdpSW9YYd+h4MCG8RSjHVdTk0ophrWmBGDnlAzroeDARo/ZbF51tdrrJYxwdlNRUKDqhwKqR4gtNQIYddZy6qW8nGovwgpnKPRwYKPgaVs9bBt6WA89AQ/0OLAJMtwY9ZgN9MJcYwME3jnZitF9fdrbVWAcBT14EEAY1SMqviPgfQsHNkGGOy49rIces51XmJ210X19ZMeVn08ZzrDCgwA9Ae/IbSfggR4HNkGGG6Me1kOP2c4rzHoY3dcnCid7AzwISIZ9hx4jevh4UQoHNkGGG6Me1kOPET2icLI3YHxfnyhoAXBbSYYDPT1G9PDxohQObIJMwNOFtsN1A3qMOKfWVjU1E2Y9jO7rExXb4LaihwM9PUb0kFoMGOC7RSkc2AQZbox6uG5AjxnnVFgIlJY6/0xeYkYPbitE1PTgQI8wooePteDAJsjIEWhvb+aCSB8boK2ws9Zj1jmFuaYEMKdH2INennrRY8R39PTQ9AsQfvsI+CCAA5sgY6UgMswYcdZRqSkBAu+cbMeIHlEopAZ4EJCMET3kLsxAeE/2lpjxHT4M8jiwCTKyIwe48wKMNcaWFspwAeHXw0xNiQ+dk+1wjY1Cm73KtK9PVKZtzdhGZSVtBxBmjOjh40EABzZBRlsQyel1c6OM4uLwnuwt4QyFHs5gKaQWiQRPYwNsG8lwjQ3jKdx5KYw0xqiMQIHAOyfbYT0URqaxu7qAPXvodVT0YNsgAh7ocWATdLKlDBMJNTfsQwO0lYA3RtthPfSwHgoj+/pIvxGL0fRLmGHb0BNwPTiwCTrZDNDHmyjZDtdQ6GE99JjJboY9o2dkXx9pG1VV6rTnsMJtRU/A9eDAJuhkc9bS+MrKgKIid57JK4wcdOjjxmg7AR912U7AnbXtZJt+iaIWHPQSvCqK8RR2TgojBZFR1IMLy4lszrq9Xf0sSvaRTg/uyPWw79Dj49pNDmyCDjsnhbYgMl2DjKIeXFhOZHPWsqYkLw+oqHDnmbzE6FQU2wYRRT0CGuhxYBN02DkpioqyF0RGSY+AOyfbMTptW10d/l2YAeN6RM02eBo78ItSOLAJOuycFGYKIqOgRzYtorQLM2C8rUQhmwew79AitRCClrmnIop6pLON5mYKbgBfLkrhwCbosHPSw4GNQh5q2daW+uft7UBnJ71mPaI1LQcoPbit6A+ATWcfUdKjrIyu2bQoLdXvgO8TOLAJOtmcdZQaI8Cdlxajzik/HxgwwJ1n8hJpG62tqX8etbYi7YP1AAoK1DEJ2fSIQkYv4P0KBzZBJ1vnFaWOHDDeIKPknIx0XFGoKTEa6HFbIaLUVoDM9tHbCzQ20uso2Ee2oNfnizA4sAk6ATdA28mkh7amJAp6SC06O9XBn1qiZhvZAr2oDQKM+o6o6JHJPnbvjs5GpwBnbBiPMeqso9J5ZRp1NTcDPT302qcN0lakFkBqPdg29ERND/YdejLZh9SiooKmrcJOwAfMHNgEHXbWejI5a6lFSUn4T/YGqKhPTjFlctZRCPIA7siTYd+hx4jviJoWbW2pl7/7XA8ObIJOwCNr28mkR9S0iMXYWWvhjlxPpraiPdk7anpwdlOf7U21as7nenBgE3QydVw9PargzacGaDvsnPRwYKPgjI2eTHUUUot4PPwne0u4rSi0Ge1U9rFjB119qgcHNkEnU0cud4YEeLoBiFbhsIQDPQVnbPQYyW5WV1NwEwW4rSjy8tT+NAEM9CJisSHGiHOqrFR7NIQdnorSw6NQhVaL5LoBIaKrB3fkBLcVPQG2Dw5sgk4m44tyhoKdE8GjUIXUore3/+nve/ao70VND24rBLcVPQG2Dw5sgo4R44vKNBTAzikZHoUqtNvmJ+shtSgq0v9emAnwiNwRuK3oCbB9cGATdAIcVTuCEefEgR4RNfsoLFRTssl6aLObUdiFGWDfkQy3FT3p7KOrC2hpodc+1YMDm6AT4KjaEdhZ60kX6CUSqric9YimbXBHroczNnrS9S1yEBCLAVVVrj6SUTiwCTqZts2PYmPM5KyjXHOUrEdjIwU3QDT14MCGO/JkONDTk62tVFfT6ikfwoFN0NFupMTOmp11MtkyFAMG0BRNVEjXeUXRNrgj15OurURxxRwQ6OwmBzZBp6go/bb5ATBA2+GpKD3ckesJsLO2nUzb5kdRj3Rtpa2NMuIA6wEEwjY4sAk6sRin17Wk06K7mw7BBKKlB3fkegLsrG1HaiEE0NGh/1kU9cjWVgoKKMMZFQLsOziwCQPsrBUBLnhzBA569Uj7kOcgSaKoh3ZZO+uh2komLaKyYg4ItO/gwCYMyFGEXIInCYAB2k4251RV5duCN0eoqKAr2wbBeijicdVetHoIEc1Ce7YNPQHWIzCBzaefforLLrsMo0ePRklJCcaOHYtbb70VXV1dXj+a95SX0zXZOQXAAG1HNsbWVrXqB4imowaUbchpOEkUbQNI3VaA6Ooh24vWPpqa1ArLKOnBtqEnwL4jMAcIffzxx0gkEnj44Ycxbtw4rFy5Et/97nfR2tqKX/3qV14/nrekck7t7argLUob0kktAMrayH8HoDE6QirbAFgP1oMoLwe2bdN35lKL0lJ1EGIUYNvQE2A9AhPYnHbaaTjttNP6/j1mzBisXr0aDz74YMbAprOzE52ygwfQnPyfFAZSpQyl8eXnq8g7ChQVUZGfLBaOemDDo1A9rIeeVJ1XVLWQttHZSf6joID+HXU9AthWAjMVlYqmpiYMzJKNmDVrFiorK/u+6urqXHo6F0mVMoxqwVssll2PKBHgUZcjpNKjp4emX4Do6ZGq84qqbWgHgKn0iFLmGwi07whsYLNu3Tr8/ve/xxVXXJHx92bOnImmpqa+r82bN7v0hC7Coy49rIciwKMuR0ilh3bFXHW1+8/kJdxWFAUFauqN9Qi07/A8sLntttsQi8Uyfi1evFj3nq1bt+K0007D+eefj8svvzzj/YuKilBRUaH7Ch3snPSwHgrtNKW2mDrqeqSyjaitmAM4Y5NMpmn9qOmRKvMdkBVzntfYXH311bjwwgsz/s6+++7b93rr1q048cQTMXXqVDzyyCMOP11ASOWc6uvpOmSI+8/jNak6r88/p+vQoe4/j5do0+utrfRvIYAdO+h7PnZOjpCq44qqFkDqthJlPcrLyXfyoCh1W2lupqlbwNd6eB7YDBo0CIMGDTL0u1u2bMGJJ56ISZMm4bHHHkM87nnCyR+kck4c2LAeAFBSQlmI3l7So7ycHJXcaTaqgR4HvUSqQVGU9UjVmUdVD2kbbW0UzOTnKy0GDCDf4lMCExls3boV06ZNQ11dHX71q1+hoaEB27dvx/bt271+NO/hDIWeTM46aoFNqmJqqUVZmf4Q1SiQquOSQW8U2wr7Dj3JbUWI6OqRvHUGEBgtPM/YGOW1117D2rVrsXbtWtTW1up+JpIPcIsaPBWlJ1PGxucN0hEqKoDGRmUfUdaCg149qTJYUbaP5MA3ytnN5K0zqqoCE9gEJmNzySWXQAiR8ivy8KhLT7Iee/aos6O482LbAEgL6TtYD556kXB2U0+yfQTENgIT2DAZ4AyFnmQ9pBYlJdF2ThzYqI4rkVDBbpT1kLYh9/EBWA+gv++IohZAf/sIiB4c2ISBykq67t6tvhfl9LpsjI2NdNU66ihtViiRG4vJZZpR7rjKytSOsqxHf9vQZjdZj2jbBhBYPTiwCQNyVVljI1Wvt7WpYi+fG6AjSD3kMs0o1xsBSg+5jDfKesRi/fWI8iBALtmVbUVqUVpKK1+iRjrbiKIfBdLbh8/14MAmDFRXq0zErl2q4yoqitY5URLuyPUE1Dk5htSDOy/VVnbtoum5gEw1OAa3FT0BDfQ4sAkD+flqK/gdOwC5BD6qUy/JjXHrVroOH+7N83hNQJ2TY2gzeq2t9AVEUw851ZBIUMY3ytkrgNtKMgEN9DiwCQvaBinPwxo50rvn8ZLBg+m6YwetfNm0if4dxgNQjZDsnD77jK4jRnjzPF6jzdhs2UKvy8qimd0sLFQ1aTt2sG0kZ/OkffCgiHxpQAaJHNiEBe0oNOodudSis5NG41EP9LTOqbdXdV6jRnn3TF6ibSsbN9LrUaOimd0E9IGvVo8oklyfF3U9tLZRX097+sRiQNJecn6DA5uwoO28ZGAT1Y68tFSd0qvVI6qBntY5bd1KwU1Bge9HXY6hHZXLjiuqbQXQ+w7uyOm6Zw8NjKTviKoeqWxjxAjK9PkYDmzCAgc2Cu3Kl4YGlbGJamCTyjnV1gJRPWstVVuJascF6APfqOtRWalOeN+wQW0ZEVVfGtBsXkQ9WwjRduRRD2wAVWfzySdqXw6fp08dQ9rG7t3AunX0OgDOyTG0bSVAztoxpB719ZzBisdVZ75oEV0HDozm0ndAbxsB6lc4sAkLsthv48ZAGaBjyGmWt9+m6+DBvj6N1lEGD6apOSGAN9+k70W5I5d/+4YN3FYApcfHH6sVlWwfwIIF+n9HEfm3NzQAH32k/56P4cAmLOy3H12XLVMV/VGdegGAcePo+uqrdI1yxxWPA2PG0OvXX6drlPUYO5auGzdyBgtQesyfT9eSEpW1iCJSD9lWomwb1dVqS4B58+gaAD04sAkLMrBZv56utbVqb5sosv/+dJV6TJrk3bP4ARnoST2kvUSR4cMpg9Xbq+qvoqyHtI0NG+i6337RXSEGqMBG6iH1iSoB1IMDm7Cw776q6A0AjjvOs0fxBTKwkRxzjDfP4Rekc5Icf7w3z+EH4nG9HuPH+37DMUdJto0TTvDmOfwCtxU9Wj3y84GpU717FoNwYBMWCgoouJEce6xnj+ILkkfgUQ9stKOsffcNRDrZUbR6nHiid8/hB4YPpy0SJNOmefYoviA5IxH1wEarx+TJgSik5sAmTJx3nnod9cBm5EhV0Q8EIn3qKGedpV4feqh3z+EXLrpIvY56Rx6LAeeeq/4d9YzN5MnqdXk5LQGPMl/7mnp99NHePYcJ8r1+AMZGfvpTtcrj4IO9fRaviceB994DLrsMOOecaNcMAFRI/uc/Az/5CTBzptdP4z1f+xoVQy5dCpx+utdP4z333kv1V4ccEu3CYYAOD37rLeCSS6i9RJ1DDgHuuQe4/37giiu8fhpDxIQQwuuHcJPm5mZUVlaiqakJFfKMFIZhGIZhfI3R/punohiGYRiGCQ0c2DAMwzAMExo4sGEYhmEYJjRwYMMwDMMwTGjgwIZhGIZhmNDAgQ3DMAzDMKGBAxuGYRiGYUIDBzYMwzAMw4QGDmwYhmEYhgkNHNgwDMMwDBMaOLBhGIZhGCY0cGDDMAzDMExo4MCGYRiGYZjQwIENwzAMwzChId/rB3AbIQQAOv6cYRiGYZhgIPtt2Y+nI3KBTUtLCwCgrq7O4ydhGIZhGMYsLS0tqKysTPvzmMgW+oSMRCKBrVu3ory8HLFYzLb7Njc3o66uDps3b0ZFRYVt92X6w1q7A+vsDqyzO7DO7uCkzkIItLS0YMSIEYjH01fSRC5jE4/HUVtb69j9KyoquNG4BGvtDqyzO7DO7sA6u4NTOmfK1Ei4eJhhGIZhmNDAgQ3DMAzDMKGBAxubKCoqwq233oqioiKvHyX0sNbuwDq7A+vsDqyzO/hB58gVDzMMwzAME144Y8MwDMMwTGjgwIZhGIZhmNDAgQ3DMAzDMKGBAxuGYRiGYUIDBzY28cADD2D06NEoLi7GpEmT8MYbb3j9SIFm4cKFOOusszBixAjEYjG88MILup8LIXDbbbdhxIgRKCkpwbRp0/Dhhx9687ABZtasWTjqqKNQXl6OIUOG4JxzzsHq1at1v8Na586DDz6IQw89tG/TsqlTp+Kf//xn389ZY2eYNWsWYrEYZsyY0fc91jp3brvtNsRiMd3XsGHD+n7utcYc2NjAc889hxkzZuDmm2/G0qVLcdxxx+H000/Hpk2bvH60wNLa2oqJEyfivvvuS/nzX/ziF7jnnntw3333YdGiRRg2bBi++MUv9p0FxhhjwYIFuOqqq/DOO+9g7ty56OnpwfTp09Ha2tr3O6x17tTW1uLuu+/G4sWLsXjxYpx00kn48pe/3OfsWWP7WbRoER555BEceuihuu+z1vZw0EEHYdu2bX1fK1as6PuZ5xoLJmcmT54srrjiCt33JkyYIH70ox959EThAoCYM2dO378TiYQYNmyYuPvuu/u+19HRISorK8VDDz3kwROGh/r6egFALFiwQAjBWjtJdXW1ePTRR1ljB2hpaRH77befmDt3rjjhhBPEddddJ4Rge7aLW2+9VUycODHlz/ygMWdscqSrqwvvv/8+pk+frvv+9OnT8fbbb3v0VOFmw4YN2L59u07zoqIinHDCCax5jjQ1NQEABg4cCIC1doLe3l48++yzaG1txdSpU1ljB7jqqqtw5pln4pRTTtF9n7W2jzVr1mDEiBEYPXo0LrzwQqxfvx6APzSO3CGYdrNjxw709vZi6NChuu8PHToU27dv9+ipwo3UNZXmGzdu9OKRQoEQAtdffz2OPfZYHHzwwQBYaztZsWIFpk6dio6ODgwYMABz5szBgQce2OfsWWN7ePbZZ7FkyRIsWrSo38/Ynu3h6KOPxpNPPon9998fn3/+Oe68804cc8wx+PDDD32hMQc2NhGLxXT/FkL0+x5jL6y5vVx99dVYvnw53nzzzX4/Y61zZ/z48Vi2bBkaGxvx/PPP4+KLL8aCBQv6fs4a587mzZtx3XXX4bXXXkNxcXHa32Otc+P000/ve33IIYdg6tSpGDt2LJ544glMmTIFgLca81RUjgwaNAh5eXn9sjP19fX9IlbGHmT1PWtuH9dccw1eeuklzJs3D7W1tX3fZ63to7CwEOPGjcORRx6JWbNmYeLEifjd737HGtvI+++/j/r6ekyaNAn5+fnIz8/HggULcO+99yI/P79PT9baXsrKynDIIYdgzZo1vrBnDmxypLCwEJMmTcLcuXN13587dy6OOeYYj54q3IwePRrDhg3Tad7V1YUFCxaw5iYRQuDqq6/G7Nmz8frrr2P06NG6n7PWziGEQGdnJ2tsIyeffDJWrFiBZcuW9X0deeSR+MY3voFly5ZhzJgxrLUDdHZ2YtWqVRg+fLg/7NmVEuWQ8+yzz4qCggLxxz/+UXz00UdixowZoqysTHz66adeP1pgaWlpEUuXLhVLly4VAMQ999wjli5dKjZu3CiEEOLuu+8WlZWVYvbs2WLFihXioosuEsOHDxfNzc0eP3mwuPLKK0VlZaWYP3++2LZtW99XW1tb3++w1rkzc+ZMsXDhQrFhwwaxfPlycdNNN4l4PC5ee+01IQRr7CTaVVFCsNZ2cMMNN4j58+eL9evXi3feeUd86UtfEuXl5X19ntcac2BjE/fff78YNWqUKCwsFEcccUTfclnGGvPmzRMA+n1dfPHFQghaUnjrrbeKYcOGiaKiInH88ceLFStWePvQASSVxgDEY4891vc7rHXuXHrppX3+YfDgweLkk0/uC2qEYI2dJDmwYa1z54ILLhDDhw8XBQUFYsSIEeK8884TH374Yd/PvdY4JoQQ7uSGGIZhGIZhnIVrbBiGYRiGCQ0c2DAMwzAMExo4sGEYhmEYJjRwYMMwDMMwTGjgwIZhGIZhmNDAgQ3DMAzDMKGBAxuGYRiGYUIDBzYMwzAMw4QGDmwYhmEYhgkNHNgwDBMaZsyYgXPOOcfrx2AYxkM4sGEYJjQsWrQIkydP9voxGIbxED4rimGYwNPd3Y2ysjJ0d3f3fW/y5Ml49913PXwqhmG8IN/rB2AYhsmVvLw8vPnmmzj66KOxbNkyDB06FMXFxV4/FsMwHsCBDcMwgScej2Pr1q2oqanBxIkTvX4chmE8hGtsGIYJBUuXLuWghmEYDmwYhgkHy5Yt48CGYRgObBiGCQcrVqzAoYce6vVjMAzjMRzYMAwTChKJBJYvX46tW7eiqanJ68dhGMYjOLBhGCYU3HnnnXjuueewzz774I477vD6cRiG8Qjex4ZhGIZhmNDAGRuGYRiGYUIDBzYMwzAMw4QGDmwYhmEYhgkNHNgwDMMwDBMaOLBhGIZhGCY0cGDDMAzDMExo4MCGYRiGYZjQwIENwzAMwzChgQMbhmEYhmFCAwc2DMMwDMOEBg5sGIZhGIYJDf8ftTN0hkrdiNYAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "945 µs ± 8.02 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - tester - extra output (interpolate Not Needed)\n", - "## v0.4.0 - 963us, 948us, 964us, 945us\n", - "time_domain, all_results, success, message = nbrk_ode_tester(y_diff_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol,\n", - " capture_extra=True)\n", - "y_results = all_results[:2, :]\n", - "diff_plot(time_domain, y_results)\n", - "extra_results = all_results[2:, :]\n", - "diff_plot(time_domain, extra_results)\n", - "\n", - "%timeit nbrk_ode_tester(y_diff_extra, time_span, initial_conds, rtol=rtol, atol=atol, capture_extra=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "021adfe1", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.14 ms ± 5.43 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - tester - extra (Lots) output (interpolate Not Needed)\n", - "## v0.4.0 - 1.14ms\n", - "time_domain, all_results, success, message = nbrk_ode_tester(y_diff_extra_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol,\n", - " capture_extra=True)\n", - "y_results = all_results[:2, :]\n", - "diff_plot(time_domain, y_results)\n", - "extra_results = all_results[2:, :]\n", - "diff_plot(time_domain, extra_results)\n", - "\n", - "%timeit nbrk_ode_tester(y_diff_extra_extra, time_span, initial_conds, rtol=rtol, atol=atol, capture_extra=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "f27988b3", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.66 ms ± 15.2 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Cython - RK45\n", - "\n", - "# 60ms\n", - "# 53.5ms\n", - "# 56.7ms, 56.1ms\n", - "# 56.8ms\n", - "# 47.8ms\n", - "# 36ms\n", - "# 35ms\n", - "# 26.9ms\n", - "# 26.6ms\n", - "# started adding mem views and it sucks now. 55ms\n", - "# 21.5ms\n", - "# 17.6ms\n", - "# 17ms\n", - "# 16.8ms\n", - "# 14.6ms\n", - "# 9.16ms\n", - "# 8.62ms\n", - "# 6.14ms\n", - "# 4.41ms\n", - "# 4.33ms\n", - "# 4.25ms\n", - "# 4.1ms\n", - "# 4.15ms\n", - "# 4.08ms\n", - "# 4.07ms\n", - "# 3.94ms\n", - "# 3.49ms\n", - "# 3.43ms\n", - "# 3.33ms\n", - "# 3.25ms\n", - "# 2.96ms\n", - "# 2.92ms\n", - "# 2.78ms\n", - "# 2.55ms\n", - "# 2.33ms\n", - "# 2.82ms (added teval functionality)\n", - "# 2.61ms\n", - "# 2.73ms (added DOP)\n", - "# 2.63ms\n", - "# 2.45ms\n", - "# 2.32ms\n", - "# >>0.2.3 2.42ms\n", - "# 2.4ms\n", - "# 2.31ms\n", - "# >>0.3.0 2.1ms\n", - "# >>0.4.0 2.02ms\n", - "# >>0.5.0 2.0ms\n", - "# >>0.5.0a1 2.01ms, 2ms\n", - "# >>0.5.3a 1.98ms, 2.02ms, 2.04ms\n", - "# >>0.6.0 1.66ms, 1.66ms\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, rk_method=1)\n", - "print(message)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit cyrk_ode(y_diff2, time_span, initial_conds, rtol=rtol, atol=atol, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "1ea15db7", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.66 ms ± 11.5 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Cython with type checking (COMPLEX)\n", - "# 2.18ms\n", - "# 2.1ms\n", - "# >>0.5.0a1:: 2.0ms, 2.02\n", - "# >>0.6.0:: 1.66ms\n", - "\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2, time_span, initial_conds_complex,\n", - " rtol=rtol, atol=atol, rk_method=1)\n", - "print(message)\n", - "diff_plot(time_domain, y_results, is_complex=True)\n", - "\n", - "%timeit cyrk_ode(y_diff2, time_span, initial_conds_complex, rtol=rtol, atol=atol, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "c3c3a171", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.61 ms ± 8.44 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Cython with type checking (FLOAT)\n", - "# 1.73ms, 1.78ms\n", - "# 1.65ms\n", - "# >>0.5.0a1:: 1.64ms, 1.61ms\n", - "\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2, time_span, initial_conds_float,\n", - " rtol=rtol, atol=atol, rk_method=1)\n", - "print(message)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit cyrk_ode(y_diff2, time_span, initial_conds_float, rtol=rtol, atol=atol, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "a593823a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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JU7bh8tYqoj83ve+h1WrVuGUU07BySefjG984xv4QirrArGUXlAI0e17kjlz5qC+vr7ry8s6ITknXFkJ9Olj4QY5eibbpqKC1hidcE7NzerwlZDpYck+tEGeC9OU7e15bEYHUJ2HPKQzQzG1LBC1pIdHbWXECIt17AZ9R9AyNpbbipPZ3vXrKQ1YUmKhktcatvkOp+zDZSwv9RBCYNasWfjRj36E559/HuPHj8fPf/5zNFquxstNv379UFBQ0C07s23btm5ZHElJSQkqKip0X16hXY5nqW+Qz97URKOCFHJk33OzejVdg7DUG8hZAZqXc5Keok8fi/Nk1j/Ssh45lsXllbHRrhBzgfXrafqltBQYNMjiTWRaJkNNYF7OOmgduUHbsNRW2tvVqC0oerhhGy5NUwrhc/vwAFOBzT333IMLL7wQEydORGVlJY477ji8++67uOSSS3DXXXdh6dKlGDt2LD766CNHHra4uBiTJ0/GvHnzdN+fN28eZsyY4chn2omMGyxPNWjz5y0t3X6sjdlMx5dNTRYPbbJO3no42RjzWnJhnry2y5fkOCwsLz3yjkLNYXm7fC0hsg83g17Te5WsX08DrR498ohCzeHrjjyvFSLm2byZyhzi8TzOHs2hR9AyNqYWht1www2YNm0azjvvPEybNg1TpkxBiTxUA8AFF1yAG2+8Eeeffz4+kedk2Mzll1+Oc889F1OmTMH06dNx7733Yv369bjooosc+Tw7kcfsWN5hu7SUrDeZJANM2bpYZt9bWqhBmprukr1qVZUr594AwIoVdB0zxuINZGPMMOrKyznJSk3TR7BbQ66079kzjxIWg84pLz1c2qNEzvTkFTc45aw7OtRRyi7ZhzYJYAltW0kmu0WLUov2dtqrxNSecjLIGzbMlWlKbQmLU4FNXh25R21l6FBaJWaJkGVsTAU2RupTLrzwQlx11VWWHygXZ555Jnbs2IHf/e532Lx5M8aPH49///vfGDp0qGOfaRfyzLxx4yzeIBajnq+xMWuDlIGNKaRzcqkx1terpd5jx1q8iZPOSerhUsclxwFjx+bRNzg5FeVyoCf1sNxWAOec9caN1LsWF7uWochbD6kFQA5C+2+ovUqEIPswFdi43JF/+aUKviybo5MducttJe9+BXDWd3iA7dupVldX44033rD7tjouvvhirF27FolEAosW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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2.07 ms ± 24.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" - ] - } - ], - "source": [ - "# Test Cython - RK45 - Extra outputs\n", - "# v0.4.0 2.31ms, 2.28ms, 2.12ms\n", - "# v0.5.0 2.07ms\n", - "\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, rk_method=1,\n", - " capture_extra=True, num_extra=2)\n", - "print(message)\n", - "diff_plot(time_domain, y_results[:2, :])\n", - "diff_plot(time_domain, y_results[2:, :])\n", - "\n", - "%timeit cyrk_ode(y_diff2_extra, time_span, initial_conds, rtol=rtol, atol=atol, rk_method=1, capture_extra=True, num_extra=2)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "7062f49f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(4, 360)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_results.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "2ab07703", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAGwCAYAAACtlb+kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACOrElEQVR4nO2deZhU1Zn/v9Vb9UJ3Q4P0IoioiCKLCiqgURDEkLhi1MSMo6OTzSUh6uiok8jkZ8RxJmrUaMbEcTeYGDGaGBWjooRoEEUBl4AiazcNDfTeVd1V5/fH6VPn3qKWe2+du7+f56mnqqurb99++5z3vNt5T4QxxkAQBEEQBBFgity+AYIgCIIgCLshg4cgCIIgiMBDBg9BEARBEIGHDB6CIAiCIAIPGTwEQRAEQQQeMngIgiAIggg8ZPAQBEEQBBF4Sty+Aa+QTCaxY8cOVFdXIxKJuH07BEEQBEEYgDGGzs5ONDU1oagoexyHDJ5BduzYgdGjR7t9GwRBEARBWGDr1q0YNWpU1u+TwTNIdXU1AC6wmpoal++GIAiCIAgjdHR0YPTo0al1PBtk8Awi0lg1NTVk8BAEQRCEz8hXjkJFywRBEARBBB4yeAiCIAiCCDxk8BAEQRAEEXiohocgCIIgfEAikUB/f7/bt+E4paWlKC4uLvg6ZPAQBEEQhIdhjKGlpQX79u1z+1ZcY+jQoWhoaCioTx4ZPARBEAThYYSxM3LkSFRWVoaqOS5jDD09PWhtbQUANDY2Wr4WGTwEQRAE4VESiUTK2Bk+fLjbt+MKFRUVAIDW1laMHDnScnqLipYJgiAIwqOImp3KykqX78RdxN9fSA0TGTwEQRAE4XHClMbKhIq/nwwegiAIgiACDxk8BEEQBEEEHjJ4CIIgCIIIPGTwhISBASCRcPsuvAPJQg9jbt+BtyB5EETwIIMnBGzbBgwfDlx8sdt34g1+9zsgGgWefNLtO/EGV14JHHQQ8MUXbt+J+/T1AUcfDcybBySTbt+N+6xdC9TVAXfc4fadeIP77wcOOAD461/dvhNv8NlnwPr13KH2A2TwhIDnngM6OoDf/AbYsMHtu3Gf667jEZ5/+ida1BjjSnzbNuA733H7btzn/feBDz4AXn0VWLrU7btxnwceAPbuBW64Adi50+27cZ8rrwR27wZOOsnFKCBjQHe3Ow/NH51I8LHR2ws0N2e+1VGjRuH+++/Xvbdy5UpUVlZi8+bNdkopI2TwhICNG+Xr//s/9+7Di/zlL27fgbts3SpfL1vGdVqYWb9evv7FL9y7D6+we7d8/fDD7t2HF0g3cN57z537QE8PMGSIO4+entRt9PbKW2pry2wATp8+HatWrUp9zRjDwoULsXDhQowZM8ZOKWWEDJ4Q8MEH8vXq1e7dhxfo6+PRDMHate7dixfQLvCMUVpLK49//MO9+/AKJA/J9u36r7WOZBjp65Ovs9WIphs8jz/+OLZs2YIbb7wRAPDHP/4R48ePx7hx4/DrX//a7lumoyXCgNbgSZ+0YeOjj/RpLK3xE0bWrdN/vW0bcNRR7tyLF9DKo7mZK/KSkGrJeFxv5IR9rmiNP8BFeVRWAl1d7v3uQbQRHoCPl/S5Mn36dNxwww3o6upCUVERbrrpJtx6662orq7GwMAArrnmGrz++uuoqanBscceiwULFqCurs622w/pVA4Pvb08zyoIu9JKTxuHXR6ff67/muQhXyeTQEsLMGqUe/fjJlu36otRwz42PvtM/7U2HewokQhQVeXSL5fEYvqvM534MG3aNBQXF+O9997Dq6++iuHDh+Oyyy4DAPz973/HUUcdhQMPPBAA8JWvfAUvv/wyvvGNb9h2z2TwBJy2Nv3XHR3cORgyxJ37cZs9e/Rfh12Jkzz0pM+XrVvDa/BkkgVjfL0NIzRX9KTvzIrH9/9MeXk5pkyZgmeffRYPPvggXnjhBRQV8UqaHTt2pIwdgBc4b7c5BUE1PAFHKK2RI4Hqav46zGktobQOP5w/h1kWgBwf48fz5zAr8YEBoL2dvxbjI8zyEHNl3Dj+3NXFHaawIuQh5oprER6PIGp2ysv5cyaDB+BprXvuuQdz587FnDlzUu+zDFXOdp8XRgZPwBGTdPhw6amGeZEXC/zkyfx5x45wNyEU40PII8wL/L598jXJQ46N0aOBYcP4a5IHjQ2BiPBUVPDnbAbP0UcfjZKSEvz3f/+37v0DDzxQF9HZtm0bGhsb7bjVFGTwBByxwA8fDojoYZgnqlBaEyYARUV80ra2untPbkJKXCJkUVMDHHwwfx1mL17Io65OOkskD2DKFP7c3Jy5biUMMGbc4HnyySdxxRVXYLwIjQ1y/PHHY926ddi+fTs6Ozvx4osv4vTTT7fxrqmGJ/AIg6euTnppFOHhKb7GRi6L7dv56zCSbvDQgqZf4MkA5PIYPZq3cKDxwVNapaXc2Glu5l3Kw0YyKfvuiI1bWuMvmUxi165deOihh/Dpp59iaYYuniUlJfjZz36G2bNnI5lM4vrrr8fw4cNtvW8yeAKONqXV0MBfZ+uKGQa08hAGT1jl0d8PdHby1xMm8Of2du6plZW5d19uoV3g6+v561273Lsft9HOFeG9axsRhg2tPEaO5Lpj9+5wGjyiDCAS4cf0APoi5jfffBOnnnoqjjjiCDz77LOora3NeJ2zzjoLZ511ls13KyGDJ+BoU1ojRvDX6bsNwoQ24iXaPWi37YcJ8XdHIsCYMfyZMf6+WPDDhHZBE2MjzHNFawCKLcgkD6k7tm8PrzyEcVNSAhQXy/fELr5Zs2Yh6cFze6iGJ+BoDR6R0grrJAUyL2phNXiELIYO5SH6oUP174eN9AVN+14YIXlIGCN5aBERnuJifbNBr28AIYMn4IidJ8OG0SQF5N9O8tArcO0zyYNkAWSWR1idg+5uWaNC40Mf4Skq4g+ADB7CZUQH8upqmqSJhGyHXlND8hA9Z0R6PeyLmlYeQhY9Pft3lA0LmeQR1rkiHMeSEl6kG3Z5aCM8gIzypDcj9Bpk8AQcYfBUVcmUVlgXNO1J4Fp5hFVpCXmILvVhV+LauVJTI73WsM4XIY8hQ2hsaOdKJELyEAaPmCPaOh4vQwZPwMmmtDxYT2Y7QhZFRbw7aNiVlnZsACQPsagNGcLHCBnE/LmqisYGzRU9Yv1Ij/BQSotwFa3SEgo8mZTbkcMEeWl6KMKjh+ShhwweCY0NPcLgoQgP4Sm0nklFhTz3JIwTNZuXFvaUBSlxDslDkkgAfX38tTY63Nsr6+DCBBk8etINHqrhITxBtokaxkWelJYebQoHoBROujzCPD7S691qaqQXH0bdQSktPek1PJTSIlwnkeC7TACaqMD+SktbxB3GmiYyAPWkyyPMBqCQRVER76QbiZA8AJorgvQaHkppEa4jjB2AvHgg+4KWTAIdHe7ck5tQCkcPyUOilUUkwl+HWR65DB5xplSYoJQW4TnEJI1EZO1OmFNa6RGe8nJ58F2YlThF/zgkD0m6LIBwyyNbSisW0zuWYcFoSmvUqFG4//77de+tXLkSlZWV2Lx5s813uT90llaA0U5S4aVRhEevxIcO5QpLNFkLE+leqzhaIoyyALLLI4zRv3RZALJBJcmDPxcVyeiwVk52w5h7RlZlJV9LsqW00g2e6dOnY9WqVamvGWNYuHAhFi5ciDFjxjhwx3rI4AkwmZRWTQ1/DuO29PSUBcDlsWNHOJV4ujyqq/lzGMdGMikXkXR50NjgCN0RRnmk69JIhI+P9nY+XxobnbuXnh690+YkXV1cBtm2pWcyeB555JHU148//ji2bNmCG2+8EQBw7rnn4o033sCcOXPwzDPP2Hz3lNIKNOlhWICUFkDyEKTLQ8giFgvfcQqZ6t1obNBcEZAu1ZNu8GQ7S2v69On4+OOP0dXVhZ6eHtx000249dZbUT3oTXz/+9/HY4895tBdU4Qn0JCXpieXPMIY1cgW4QG4PKJR5+/JLbT1bhUV/HWY50qu6DDJg+OWPCor5dx1GlHzmO1oiUSCp9xECcW0adNQXFyM9957D6+++iqGDx+Oyy67LHW92bNn44033nDm5kEGT6AhL01PJnmEOW2RrsSLi/nr7m4ujxEj3Ls3pxELiKhRAMI9V8hZ0uMlgycScbZmKBPZanjE98TX5eXlmDJlCp599lk8+OCDeOGFF1BU5F5iiVJaASaT0gpznQYpcT1kEEu8tKB5Aar/00NzRcJY9pQWsH9Ps+nTp+Oee+7B3LlzMWfOHGduMgtk8AQY0RpehOiB8E5SQLbEF2FZINzyEEqc5EEGTzqZ5BHmaCg5SxKtQSMMnUgke+Hy0UcfjZKSEvz3f/+3MzeYA9cNngceeACTJ09GTU0NampqMGPGDPz5z39OfZ8xhkWLFqGpqQkVFRWYNWsW1q9fr7tGLBbD1VdfjREjRqCqqgpnnXUWtm3b5vSf4jnEAk8GD0fIQ/QkAkgeQGaDJ2xefCZZiAU+FgPicefvyU3IOdCTyXkMqwGYyeABshs8Tz75JK644gqMHz/e/pvLg+sGz6hRo3D77bfj3XffxbvvvotTTz0VZ599dsqoueOOO3DnnXfivvvuw6pVq9DQ0IDTTjsNnRqNvHDhQixduhRLlizBihUr0NXVhTPOOAMJrx/sYTNiktICz6GIl2RgQCom7fgIqxLPNFfSi7jDBOkOPbmcx7CNDdFZOhKR9W6AfqdWMpnEzp07cdttt+HTTz/Ff/7nf2a81umnn47zzz8fL774IkaNGqXr2WMHrhctn3nmmbqvf/rTn+KBBx7A22+/jQkTJuDuu+/GzTffjAULFgAAHn30UdTX1+Opp57Cd77zHbS3t+Ohhx7C448/jrlz5wIAnnjiCYwePRqvvvoqTj/9dMf/Jq9Ak1RPLiUeNnkIWQC0qAGZx0ZJCY9w9PRweQwf7s69uQFFh/WQAShJr98RiAhPMgm8+eabOPXUU3HEEUfg2WefRa3oWpnGyy+/bOOd7o/rER4tiUQCS5YsQXd3N2bMmIFNmzahpaUF8+bNS30mGo3ilFNOwcqVKwEAq1evRn9/v+4zTU1NmDhxYuozmYjFYujo6NA9gkYur7W72/sn26omkxIPa0RDyAIgJQ5kHhtAeOVBC7wekodEGDza6A6gT2nNmjULyWQSH330EU444QRnbzAHnjB41q5diyFDhiAajeK73/0uli5digkTJqClpQUAUF9fr/t8fX196nstLS0oKyvDMHFmQobPZGLx4sWora1NPUaPHq34r3KfXDUrQHijGqS0pCzKyvSeWtjloR0bAMmD5gqHIl4SkdLKFuHxsiPtCYNn/PjxWLNmDd5++21873vfwyWXXIKPPvoo9f1IminJGNvvvXTyfebGG29Ee3t76rF169bC/ggPkqlmJRrlixwQvolKRcsSWuD1UIRHT64Fvq8P6O93/p7chAxASb6UFhk8eSgrK8Nhhx2GadOmYfHixZgyZQp+/vOfo6GhAQD2i9S0tramoj4NDQ2Ix+PYm3b8t/YzmYhGo6mdYeIRNGhR00NFy5J8CzxF/zgkD/leWIu4GZNHrVCBf/aUVrbjJbyEJwyedBhjiMViGDt2LBoaGrBs2bLU9+LxOJYvX46ZM2cCAKZOnYrS0lLdZ5qbm7Fu3brUZ8JKtkUtrM0HyUuTZFvgw6rESR56shVxC10SJnloC/zddJaYyCW5TL6UVnrjQXW/t/C/3/VdWjfddBPmz5+P0aNHo7OzE0uWLMEbb7yBl156CZFIBAsXLsRtt92GcePGYdy4cbjttttQWVmJiy66CABQW1uLyy+/HNdeey2GDx+Ouro6XHfddZg0aVJq11ZYoQiPnlxh+q4uPlFd7HruKDQ29FBKS08uefT2hkse+XY02u04lpaWAgB6enpQkf4PcQG3Ulo9gyf8CnlYwXWDZ+fOnbj44ovR3NyM2tpaTJ48GS+99BJOO+00AMD111+P3t5eXHHFFdi7dy9OOOEEvPLKK6nTVgHgrrvuQklJCS644AL09vZizpw5eOSRR1CsPeAjhJASlySTsnlctjB9V5e+qDvI0NjQQwagnlzy2LkzXPIQsigq4lEugVNjo7i4GEOHDkVraysAoLKyMm8Nq52I9F4yqTcGhSEUj+vfLxTGGHp6etDa2oqhQ4cWtK67bvA89NBDOb8fiUSwaNEiLFq0KOtnysvLce+99+Lee+9VfHf+hpS4RExSQC+PaBQoLeVFmB0d4TF4aGzoIQNQD8lDopWF1s4Qsujt5fqjgMBDXkQ9qzB63KSzE9izh/en0tLdDezeLaPlqhk6dGhKDlZx3eAh7IMKUyXavjNaeUQiXB5tbeFS4pkKuIFwLmgAGYDpkDwk+eq7AK5L6+rsu4dIJILGxkaMHDkS/S5vkXv0UWDxYuCMM4D/+R/5/htvAN/9LnDUUcDvf6/2d5aWlirJ2JDBE2CoEFMiZFFcrA9LA+E0eDJt0QfCaQwDtEsrHZKHJJssSkv5e319XHfYafAIiouLXS/V2LsX2LyZ6xCtTKqq+PvR6P6y8gohKdEMJxSWlmSTBUBKXItWFnbttvAiNFf05NvhGSZ5ZIuGAuEcH/mcJS/LggyeAENhaUk2WQDhlEe+BY0xnpMPCxQNlTBGukNLtgUeCKc8/Dw2yOAJMFTDI8nlpYVxUcumtMrLZcqP5OEPJa6agQEZ3SN5GHOWSJdKWfT08DHkRcjgCTDktUrIS9OTbWyIIm4gXPKglJYkW4E/EE55UEpLTzZd6odO3GTwBBQKS+uhlJYeIzVNYZIHzRWJtodKNKr/XhjlQc6SnmxzpaxMvudVeZDBE1DicdkCnLw0WuDToTC9HiPpX4909rcd7dhI728XxrGRa66EOVruxw0gZPAElGzt0AFa4NPx+iS1A4p46ckX4QlTETdFNPRQSkuPnw1AMngCijYPX1am/x4t8HrCqLRyeWleV1p2QEXcEj8vaHZABqAeP+tSMngCijhKIRrdPyytVVphDNOnE0YlLuSRXqMBeF9p2UG2RS0SCd/4oPSvHooO6/Hz+CCDJ6BoDZ50xKDs79efMRVkjMjDq5PUDoQ8/Oil2QHJQ0JzRQ85B3r8LA8yeAKKOBk806AcMkS+9urAVI1Q4unpPcD7k9QOaFGTMJZ7voRNHkbHRliiwzRX9Ph5rpDBE1ByTdLiYmn0hCUUS0pLTy55hC2FIxQ4QOMDMDY2wlTEnWuBD9tcAfytO8jgCSi5BiXg/YGpGiOTNCzGH0Dy0KJN62aKAIbVOcgki8pKoGhw1QibPGiucIzIo6vLufsxAxk8AcWowROWiWokxRcWWQC5FzWvKy3V5IvwhFUemWQRicj5EhZ5kMGjx4ju8Ko8yOAJKLkGJeD9gakaI0orFuOF3GHASJg+bGOjpERGL7SEVR7kLHFyySOMzpKfdQcZPAEln9IK20Q1YvAA5LUC3ldaqqEFXg/JQw9FQ/X4WXeQwRNQSGnpyaW0SkulnMImDz8qLdVQNFQP6Q49RiIa8bg+NRpk/BzxIoMnoBhVWmHxTEiJ6yGDR5JrQQPCK49sBqDXFzXVGI0Oh0EeySQwMMBf+zHiRQZPQKEFXg/JQ0+uqAYtaHpIHnrCOlcyyaOkRDarDIM8jBb4e1UWZPAEFPJa9dCipsfo1tIwNJejaKgekoceMgAl2hYOZPAQnoEmqR4yAPUYqUtgDOjpce6e3ILmih6Sh558NV5hcpby9azy+tgggyegUCGmHvJaJQMDPBcPZJZH2JrL0VzRQ/LQY9RZCoPu0I6N9EOpAb0shI7xEmTwBBRK4eghJS7JF5bWNpcLgzwo+qeH5KGHIl4SowXtgDePHiGDJ6DQJNVD8pDkM3iAcMqDZMEhZ0kPjQ9JPllUVMjosBcjXmTwBBRK4eghpSURsohE+EGymQjTokYLvB6aK3pIHpJ8sohEvC0PMngCCk1SPbSoSbQpi0x5eCBc48NoujMszeWMyoOcJU4Y50o2WQDelgcZPAGFJqkekofEjNIKw6JmtGYFIHkA4ZorgPG6lTCMjXzGMODt8UEGT0ChBV4P7bSQ+N1LU00+eYStuRzpDgljJA8t+fQo4G15kMETUMx4JWFqLke7tMjgSYfkoYcWeEl/v3xN8jA2V7xcHkAGT0AxqrQY8+b2QdWQEpfQAq+H5KGH6t0ktKNRj9/nChk8ASXfwKyqkgWrlMbx9iRVjZE8fBgXNZIHx0zRsheby6kkX2dhgHRHOl4uDyCDJ6AY2T4YFiWeSPAHQF4r4P88vGpIHnrMFHEH/egRIYvi4uwtHGhs6PGyPMjgCSh+Dz2qhMLSemhs6KFda3rMNJcL+vgwU7NCY4PjZd1BBk9A8fvAVAkZPHpogddDc0WP35vLqYTGhh6/y4MMnoDi94GpEm2zuNLSzJ8JU3M5Ght6/N5bRDUkDwnNFT20S4vwJFSIKcl3wi8QruZytKDp8XtdgmpIHhIyePTka3cCeFseZPAEFFJaEiNKK0zN5YyMjbAYw4D/vVbVkDwkZhb4/n59+jyI+D0dTgZPQDFj8HhxYKrEiNICwqPEyWvVQ/LQ4/dFTSVmjD8g+OPD73OFDJ6A4vfQo0qMGH9AeORBKS09ZuZK0Bf4REL21qHxYTw6XFHBXwd9fPhdd7hu8CxevBjHHXccqqurMXLkSJxzzjn49NNPdZ+59NJLEYlEdI/p06frPhOLxXD11VdjxIgRqKqqwllnnYVt27Y5+ad4CjJ4JEYmKRAeeZiN/gW9uRylfyXagn2Sh3FnKSzRYb/PFdcNnuXLl+PKK6/E22+/jWXLlmFgYADz5s1Dd9p5B1/+8pfR3Nycerz44ou67y9cuBBLly7FkiVLsGLFCnR1deGMM85AQnScCxlk8EiMprTC4sWbGRtAeJrL0Vwx1lkYCI88zOoOkoe3jb8St2/gpZde0n398MMPY+TIkVi9ejVOPvnk1PvRaBQNDQ0Zr9He3o6HHnoIjz/+OObOnQsAeOKJJzB69Gi8+uqrOP300/f7mVgshphmdnd0dKj4czwDKXEJKS09RuQhmsslk1we2jqFoOH3ML1KjLRwAMInD9IdHDPrSnc31x9FrodVJB66FU57ezsAoK6uTvf+G2+8gZEjR+Lwww/Ht771LbS2tqa+t3r1avT392PevHmp95qamjBx4kSsXLky4+9ZvHgxamtrU4/Ro0fb8Ne4g9E8vJctcZWQ0tJjRB5hOnrE716rSoQsSkuzt3AAwicP0h0cs9Fhrx1M7SmDhzGGa665BieddBImTpyYen/+/Pl48skn8dprr+FnP/sZVq1ahVNPPTUVoWlpaUFZWRmGDRumu159fT1aWloy/q4bb7wR7e3tqcfWrVvt+8McRuulUSEm7dJKh5S4HoqGSij9q4fmih4j8igvl+eOeU0erqe0tFx11VX48MMPsWLFCt37F154Yer1xIkTMW3aNIwZMwZ/+tOfsGDBgqzXY4whksVNiUajiOarRPMpZg0erw1K1ZDS0kPy0EO7tCQ0NvSQAajHaHS4uhrYt89748MzEZ6rr74azz//PF5//XWMGjUq52cbGxsxZswYbNiwAQDQ0NCAeDyOvXv36j7X2tqK+vp62+7Zq2gLDykPT0o8HZKHHjMGT9CPHqGxoYeiw3r83uLDdYOHMYarrroKzz77LF577TWMHTs278+0tbVh69ataGxsBABMnToVpaWlWLZsWeozzc3NWLduHWbOnGnbvXsVMShLSnIXjHl1UKrG75NUNeS16jFTwwMEe3yQwaOH5KHH7/JwPaV15ZVX4qmnnsIf/vAHVFdXp2puamtrUVFRga6uLixatAjnnXceGhsb8cUXX+Cmm27CiBEjcO6556Y+e/nll+Paa6/F8OHDUVdXh+uuuw6TJk1K7doKE34flKqhBV4PjQ89RuQhmsv19nJ5DB/uzL05DY0NPSQPPX6PeLlu8DzwwAMAgFmzZunef/jhh3HppZeiuLgYa9euxWOPPYZ9+/ahsbERs2fPxtNPP41qTTn4XXfdhZKSElxwwQXo7e3FnDlz8Mgjj6BYVE+FCLODUjSX89L2QZWQ0tLjd6WlGjPyEAZPUKGxoYd0hx6/O4+uGzyMsZzfr6iowMsvv5z3OuXl5bj33ntx7733qro132J2UAJ8+6D26yBBSlwPKXEJY/zQR8CYPHbtCrY8/L6gqYbkocfvuiOgPn24MVqzUlkpozpBnqh+n6SqIXlIhLED0KIGmK93C/rRIzRX9PhdHmTwBBCjgzIszeX8PklVQ0XcEqMtHIBwycNsdDioUHRYj991KRk8AcTooAS8OzBV4vdJqhqSh4QMHj1Gx4aXm8uphOaKHr/LgwyeAEIGjx7Kw+sheUiELCIRuYBng+aKRDSXA0geQDhkAfg/4kUGTwAhg0ePWaVFzeU4XlVaKtHKItfZUQDNlXTCNj5yEYaxAfjfWSKDJ4CQ0tJjdoEHSB5AOJQ4zRU95Czp8fsCrxq/6w4yeAIIKS09RuVRUsJrEwCSB0BjI50wLGokDz1m50p/v/5on6Dhd91BBk8AIaWlhwxAPX5XWioxumMNCJc8aK5wjMqjqkq+Dqo8Egn+APyrO8jgCSCktPSQPPSQwSOhsaGH5KHHTHS4ooK/Dqo8rPSs8posyOAJIKS09JA89Jg1eLq7g9tcjsaGHpKHHpKHxEwLB6/Wu5HBE0BokuqhFJ8eK0XcQW0uR3NFDxVx66HxIdEaPKWluT/rVVmQwRNASGnpIXlIzOThKyrk0SNBlQeNDT20wOshZ0kiZFFSkv+gaSGLnh6pb7wAGTwBhJSWHpKHxEwePgzN5WhB00Py0EO6QyJ2n5mRBeCt6DAZPAGElJYeUloSM3l4IDzyIFlwSB56KAIoMSOLaJRHggBvyYMMngBCSksPyUNiJg8PhEceNDY4JA89VqIaQZWHmbHh1egwGTwBhJSWHpKHxEweHgiPPMyMjSA3l6O5oofkITEjC8CbES8yeAIITVI9lOKTWFVaQZWHGQ8+DEePWJFHUGUBkC7VYlZ3eFEeZPAEEJqkeigPLwmC0lKJGXkUFwe/uRzpDj3kLEms6g4vyYMMngBiZYEPQ3M5Oj6ADJ50gqDEVUILvIQxMgC1BEF3kMETQKxMUiC4iouUliQISkslJA89NFckAwPyNUWHgzFXyOAJIGYiGtrmcmTweHOSqiQISkslJA89VuZKUKPD1MJBTxDmChk8ASQI2wdVQgaPJAhKSyUkDz0UHZaQwaPHjCMNeDPiRQZPACElLmGMemloCcLWUpXQXNFjtrlccTF/HUR5aA0e0UQvF0GvaQrCXCGDJ4AEYWCqwmoenpQWh5S4HjIAJUGPDmtlEYnk/3yQZQEEQ3eQwRNASIlLrIalg9pcjoxhPUFQ4ioheUhorugJgjzI4AkgZlI4gDcHpirMGjxBby4XBKWlEpKHHrN1GkGWRyFjgzF77slNgjBXyOAJIOSlSczm4UtKgt1cLghKSyUkDz0kD4nVSPnAAEWHAW+ODTJ4AkgQBqYqzObhgWDLg6J/emiu6CF5SKwaPADJA/BmqQQZPAGElJbErCwAb05UVQRBaamE5ooeGh8Ss+m94mKgspK/DnK03M9zhQyeABKEgakKKwZPGFJ8ZsdGTw+QSNhzT25CC7we0h2SQnQHycObepQMngBCSktCSkuP1bEB8I66QYPmiiSZlG0c/LyoqYJ0h54gzBUyeAIIea0SUlp6zMqjvDwczeVogeetGAR+XtRUQbpDTxCiw2TwBJAgWOKqIKWlx6w8wtRczghhkAVA8gCo/i+dQqLDXnEQyOAJIOS1Ssjg0UPy0EMGj0Rr8JSWGvuZMMiD5grHrDyiUTmOvCIPMngCRiF5eK8MSpWQl6aH5KGHmstJhCyKi2UaMx+kO/SQ86jHa7qDDJ6AQXl4PeSl6SF56KHmcpIgLGgqobmiJwgGIBk8AYPy8HqCMElVQvLQQ83lJDQ29JDBoycI8iCDJ2BYMXjIS9PjtUmqEpKHHrPyCHJzORobekgeeoIgDzJ4AoYYlEVF5vPwXto+qIogTFKVkDz0kDwkJAs9lOLTY/ZYGsB744MMnoBRiNICgtdcjpS4HpKHHpKHhGShh1J8eoIwPlw3eBYvXozjjjsO1dXVGDlyJM455xx8+umnus8wxrBo0SI0NTWhoqICs2bNwvr163WficViuPrqqzFixAhUVVXhrLPOwrZt25z8UzyBlUEZ5OZyZs/DAbw3SVVC8tBTiBLv6FB/P25SiCwoOsypqeHPQRsbQDDmiusGz/Lly3HllVfi7bffxrJlyzAwMIB58+ahWxNquOOOO3DnnXfivvvuw6pVq9DQ0IDTTjsNnRoNvHDhQixduhRLlizBihUr0NXVhTPOOAOJoM3CPFhZ0LTN5bwyMFVBSktPIfJob1d/P27CmLUwfVDHRyFjAyB5AMGdK0AwdGmJ2zfw0ksv6b5++OGHMXLkSKxevRonn3wyGGO4++67cfPNN2PBggUAgEcffRT19fV46qmn8J3vfAft7e146KGH8Pjjj2Pu3LkAgCeeeAKjR4/Gq6++itNPP93xv8strAxKAKitBfbt887AVIUVedTW8mdSWhwhj6CNjURC9tKh8WHN+Csr4xHivj4uj2HD7Lk3N6C5oicIutT1CE867YOSqaurAwBs2rQJLS0tmDdvXuoz0WgUp5xyClauXAkAWL16Nfr7+3WfaWpqwsSJE1OfSScWi6Gjo0P3CAKFGDyAdwamKgrxSjo7KUwPBH9sALSoAaQ70qG5oicI8vCUwcMYwzXXXIOTTjoJEydOBAC0tLQAAOrr63Wfra+vT32vpaUFZWVlGJbmXmg/k87ixYtRW1ubeowePVr1n+MKpLT0FDJJgeDVrVCYXlKowRNUeVjVHWQABneuAMGIeHnK4Lnqqqvw4Ycf4je/+c1+34tEIrqvGWP7vZdOrs/ceOONaG9vTz22bt1q/cY9BBk8eqwWcYvPkzyCPzYA42dHAcGXB+kOTiFzpa9PP76CQBB0h2cMnquvvhrPP/88Xn/9dYwaNSr1fkNDAwDsF6lpbW1NRX0aGhoQj8exd+/erJ9JJxqNoqamRvcIAlaVVlA9E/Ja9QRBaalCyKKkhPetMgrNFT0kD4l2GSF5eG9suG7wMMZw1VVX4dlnn8Vrr72GsWPH6r4/duxYNDQ0YNmyZan34vE4li9fjpkzZwIApk6ditLSUt1nmpubsW7dutRnwgJ5aXpIHnqCEJZWBY0NPSQPPVbkUVwsmw8GVR5mdgB7bWy4vkvryiuvxFNPPYU//OEPqK6uTkVyamtrUVFRgUgkgoULF+K2227DuHHjMG7cONx2222orKzERRddlPrs5ZdfjmuvvRbDhw9HXV0drrvuOkyaNCm1aysskNLSQ/LQU4jB09vLD6c1k/7xMlYUOEBjIx2Sh57aWt54kBwE740N1w2eBx54AAAwa9Ys3fsPP/wwLr30UgDA9ddfj97eXlxxxRXYu3cvTjjhBLzyyiuo1rQIvuuuu1BSUoILLrgAvb29mDNnDh555BEUGz1fISCQ0tJDYXo9KsL0I0aovSe3oHSnHpKHnkJ0x/btwdIdjHFnB7AeHWaM93xzE9cNHiYaYeQgEolg0aJFWLRoUdbPlJeX495778W9996r8O78ByktPWQA6rEij5ISfmBmTw8ZPACNjXRIHnqCKA9h7ADWDJ6BAR4hFgfvuoXrNTyEWkTzMLNphyBOUoAMwHRIiUso+qfHaoov6PKguWK9hUNVldwQ4AV5kMETMKguQQ8ZgHpIiUtUyMJAgNo30NjQQ/KQWDV4IhFvGcRk8AQMscCTwcMhA1DCmJSHVQMwSBGvQmXR38/7rQSFQuURpLkCkLOkRYyNSEQeNG0UL8mDDJ6AQV6JHjIAJdo8PMnD+tgYMkQWXwbJACx0rgRJFkDhzlKQ5GF1bADekgcZPAGDFng9JA+JkAVAdRqA9QWtqCjY8iBniWNVd9DY0OOl8UEGT8AotPAwHg9mmJ4KU63n4QFvKS1VWDkdXBDE8UHOgR4yACWFRHi8NFfI4AkYVpW4pqWRJwamKihMLxGyKC72dx5eFSrC9CQPuaCJXitBgQxASVDmChk8AcPqwCwulkZPkBZ58tIkQcnDqyIoYXpVFDpXkkneYTgokMEjCcpcIYMnYARlYKqClJaExoaeoHitqrAqj4oK3pwSCJY8yFmSBMVZIoMnYJAS16MipRWUMH1Q8vCqCIoSV4VVeUQiwZOHtoVDISm+oBCUdYUMnoBBXryeQr20RALo7lZ7T24RFKWlCporekgeEm2BP0WHCxsbXnKWyOAJGLSo6bEqj8pKWdgbFHnQgqaHIl56SB4SFTsau7q4wxQEgrKukMETMIIyMFVhdZHXtkQPSmiaxoYekoceMoglhfSsErIAgqM7rKb3AG+NDTJ4AgYpLUkiIT0sv09UFVDNih6aK3rIAJQIWZSUyMMvjVJWBpSX89dBk4ff5woZPAGDwtKSQrw0wFsTVQUqFvjOTgrTA8E0AEkekkLmChBcXer3sUEGT8BQsah5YWCqoJA8PBA8g0eFMQxwoycIBCVMrwqKeEkKmStAcHUpFS0TnoLC0hJthMfsicdA8ORRiNIqL5c/FxR50NESeig6LFFl8JA8pCz6+vROqBuQwRMwyGuVaBd4cbq1GYLmpZES10POgR6Sh6TQlFbQ5KEqOuy2PMjgCRhBKS5TQaELPHmteoJmAJJzoIdSWhJyDvQUMjaKi4EhQ/hrt+VBBk/AIC9NQkpLD3mtelQ4B729QH+/untyk6AUpqqAnCU9QXGWyOAJGOSlSWiB10NKXI+qML3bSlwFAwP88E+AnCWAdEc6QXEeTRk8W7dutes+CEVQhEcSlEmqCpKHnkJSWiUlvBs3EAx5FLqjkYxhPUGdK37fpm/K4DniiCPwox/9CN1BOVwogKiI8AQlTE9emh6Sh55CUlpAsORBPav0BCWFo4qgGICmDJ5ly5bhlVdewbhx4/Dwww/bdU+ERRijML0WUlp6gqK0VEHykGgjPCUl5n9eKwvG1NyTm5BzoCco8jBl8MycORPvvPMObr/9dvz4xz/GMcccgzfeeMOmWyPMoo3KUJiealbSIQNQTyEpLcA7SlwF2rFRSAuH/n7eb8XvkO7QExTdYalo+Z//+Z/xj3/8A2eeeSa++tWv4txzz8XGjRtV3xthkkLz8ECwlHhQvBJVBCUPrwpVKS23lbgKCl3QhgyRhlIQ5EG6Q09QoqGWd2kxxjBv3jx8+9vfxvPPP4+JEyfi2muvRWdQ+s77jWeeQezBR1Nf+n1gFkQ8Dtx+O2JrPgIQclkAwObNwL/9G2J7ewCQPLBsGfD//h/icZ57KVQe+/apuS1XYAy45x7En38JgPUFvqhIGsS+lkd7O3DTTYh9vh0AzRWsXQtcfz3iPQMACjcA3R4bprK1v/zlL7Fq1SqsWrUKH3/8MYqLizF58mRceeWVOProo/Hkk09iwoQJWLp0KaZNm2bXPRPp/OUvwPnnI44GAJegqIg3e7JCICbqDTcAd9+NeNVWAL+wPEmHDuXP8Tgv5K6oUHWDDpJIACeeCGzfjvjB5wA4sWB5uK20CmLzZmDePABAbMj1AKLhlsdvfgP84AeI4RgAX7a8wANcHu3tPpfHJZcAf/gDYiMPAPBDy/IIxNjo7QWOOQZIJBA76DsADi1YHm6vK6YMnp/+9KeYPn06LrnkEkyfPh3Tpk1DVCOByy67DLfddhsuvfRSrFu3TvnNElm44QYAQAz8f1GI0ho2jD/v3VvoTbnEzp3A3XcDAGLdvKjJqjyqq7nhmEhwefjS4Pnd74Dt3FuNfdEMwLo8fD82AOAnP0m9jPXyY99Du6gxBvz7vwNQpzs2b/bx+PjoI+APfwAAxFv5H2HVGBZzpaOD6w+rDqirPPggv3kAsR1tUGHwuD02TBk8RvrwXH755fjRj35k+YYIk3R3A++/D4AMHgDA22+nXhYqj0iET9S2Ni6PpiYF9+c0b72VelmoPHw/NgDgzTdTL+MJvgqFVh5ffAEM6vQ4+MpudYEHAmAAasaGqrkCcHkMH17AfbmFZkNSfIAXaBVqALo9V5R3Wh45ciRee+011ZclsvHee7xFalWVVFqlScuX84olbplVq/hzdTUpcUDKo6amYHl4RWlZZu9eYHBzBauuQXxwUQutPN59lz/X1moWeOt7ygMjj6FDCzZ4SkuBqir+2rfyWL2aP+vGh7VLeUWPKjd4IpEITjnlFNWXJbLx97/z53nzEBt+IAAgWjRg+XJCabk9MC0jFvhvfpMiXvE48MEH/PWFFyrzWnt79Y3qfINQ4Iccgvi0mam3QxvhEQv8eechhnIAanSH7+VxwQVKnCVf69KdO3n0LxIBvva1wESH6SwtvyMm6XHHIT5yFACgLBLP8QO58crAtARjclH72tek0opYbxvta3msW8eNnmHDgFNPLVhpaRtT+lKJi7kybRriow5Jve13JW4ZIY+ZMxEf3ggAKEv2Wr6cr+XR18fnC6Bf4MusR7x8HS0XevSII4BJk5RFh/ftc7cxJRk8fucf/+DPEyYgNnI0ACDKrLvfvlZae/bwghsAmDEDsShfoaMx641BfC2PTz7hzxMn8qhGgUqruFju4vO1PCZNQuxAafCENqX18cf8edIkxEYMRocTPZYv5+sFfuNGXqA7dChw4onS4GEhNQA1YwMHH6wspZVMAm52riGDx88wBnz2GX992GGIj+BVtaH10oQsmpqAykrEqg8AAET79lm+ZCDkcdhheqVVFNKIl0YescaDAQDFkYTlHTReqUuwRE8P0Mx37eGwwxAf3gAAKItbPycxEGPj0EOBykrEy7mzVNbZZvmSgZDHYYcBY8cW7CxVVEhjyc35QgaPn2lrk40NDjkEscGwdHTAupfm60kqun0fdhgAID6kDgBQ1m39j/G1PLRK/IADEI8MFunua7V8SV/XJWjkEW84CAAQReHR0M5OYMB66Ys7fP45fx46FKirQ2zYoO6IFx4N9eXYELrj0EMBALEK/sdEO3ZbvqSv5aHVHVpnqb/L8iW9EAEkg8fPiEl64IFARQViQ7mXFu23HjMMzAIPIFY1qLQK8NJ87cVr5RGJIFbMt41E23ZYvqRvx0d3t4xoHHooYgcM1ruxGI+zW0CMDcCH4yN9rtSIaGhI07/p8ijnudtoxy7LlwyMPGpqpMHjc91BBo+f0YYdAcSrebOHQsLSXrDCLZMe4SmrBgCU9e6zfEkvTFLLpHutkcGdOF0hDNOnRTTEXIkiZrn9a0kJb04J+FAe6XNFpHB87sFbJs3giZfwU5QL0R2+lcfAAO8gCQCHHgrGgH6R0vK580gGj59JX9BEkW5/l+VSeLGgxWI+PPU4zQCMDSqtaK/1fua+XeC7u4GWFv5aLGooBaBGaflOHukePOMKPIoYsLvwtIXv5VE2BAAQjVF0GABiRbyterQnhOnwLVu40RONAk1NukOp/R7xIoPHz4jO1wcfDACIDyqtMtYHdFnz1Kqr+UGAgE8nKgCMGQMAiEUGlVZvCJWW8NBqa1N/RGqR7wzhAr9pE38+hO/OSp2UjnhBBo9vDcB0eZQIg6dw56C9PXUigT9IJOR8EfIYrHeLdu2xfFnf1vCIsTF2LFBUpOu5VYjB09TEqy+KXLQ6TB0tQXiMbdv484F8S6nOa21rk/F2ExQVcSW+Zw9X4o2Nqm7WZhIJYMdgfnkUr8+IF/EUTllXCA0eYQwfdFDqrViCT/doewiLloU8RvPWDcJrVRXh8Z08hO4Q8hApnP5uHtotLzd9SW1NU0eH/ngFT7NzJ49oFBWlzo9JdeFWYPD4VnekzRUAKNu70/Jlf/3rQm5KDa5HeN58802ceeaZaGpqQiQSwXPPPaf7/qWXXopIJKJ7TJ8+XfeZWCyGq6++GiNGjEBVVRXOOussbBMTOsgMHgopFvhYnJ93EsowfWurPKWvgRdvxwbzztFu60rLtx68UFqDYyORABKM778ua/d3WNoSaQu88FpDOVeA/Ra1VFGqcJYsEI3KA3Z9JQ8hi6YmXpgFIMZ4+jfaRWNDzJUS9KNoj3V5eAHXDZ7u7m5MmTIF9913X9bPfPnLX0Zzc3Pq8eKLL+q+v3DhQixduhRLlizBihUr0NXVhTPOOAMJX8VVLZAW4RGWeBnilpUW4NOJKmTR0JA6mjjVO6J7r+UYu5BFT4/e0/E8Oby06D7rXpovxwaQVYkXmtLypTw6O2WhtpDHoLMUSnmkGcMAEEsOGjzkHChzDryA6ymt+fPnY/78+Tk/E41G0TDotafT3t6Ohx56CI8//jjmzp0LAHjiiScwevRovPrqqzj99NMz/lwsFkNMk5zs6LC+HdMVurtlHF1EeBQNTF9GNUS0a9D4A4BYYlBpoY//MSNGmL6s6CwMcHGPHFnITTpIlgUeAKJ7mi1f1pdjA8id0gqbcyBkMXQoMITX7qhM8e3Y4VN5DOpRAIgnNNFQxviZUibR7kpKJt2tXTFFlrlSqDHsBXzxL3jjjTcwcuRIHH744fjWt76F1lZZg7B69Wr09/dj3rx5qfeampowceJErFy5Mus1Fy9ejNra2tRjtMa69wViga+qSh1yFOoIT1p6D1CT4tMep7DHembMeXJEeErbWixfto73cvSXLAYGZA8em1JavpKH8OC1c0Urj7DpjrS5AgCxAW7wRJM9ltsWiLni9nEKpkkzAIMU4fG8wTN//nw8+eSTeO211/Czn/0Mq1atwqmnnpqKzrS0tKCsrAzD0irk6uvr0dKSXbHfeOONaG9vTz22in+yX9BGNAa9D1UD05eLWlp6D1DnmQznLVv8JY+sKZwYIm0hGxs7dvBVp7QUqK8HoC6lFYSxAaifKwXYTM6TyeCJFZ7iKy+XNU1+lkeQIjyup7TyceGFF6ZeT5w4EdOmTcOYMWPwpz/9CQsWLMj6c4wxRHKEIaPRKKJWT0LzAhkiGqoiPL5U4pkiPIq81ro63rfON0qLsdxKq7eXFyVVVpq+tBgb3d1cvr6YQlpjeDCvoCqF40sDMOMCz5+jiAG7rNet+FIeGWp4dONj165ULyuzDB/OL79nT2rHu7fJVN+laGx4Ac9HeNJpbGzEmDFjsGHDBgBAQ0MD4vE49qbFUFtbW1E/6M0FkgwRDdURHt8s8ABFeLTs28cNGkC2LNCODcDyH1NbK2sRfCOPHCmcMsQL+kN8GdHIl9IqIB8VSHkU0HPAd7pUyKKmJtXWRCeLri6g3/rhw27jO4Onra0NW7duReNgg5ipU6eitLQUy5YtS32mubkZ69atw8yZM926TfvJF9GwmHcGfLjAA5mLlhXJw3dKS9SrDB2aiuKkZBEZVFYW5VFU5MO6FdGfKYMxrGps+EYWgJTHYM8ZIM05CJPuSCblfBkcH4mEPF4tdPLINzYA3mTJp7ie0urq6sJGcUQCgE2bNmHNmjWoq6tDXV0dFi1ahPPOOw+NjY344osvcNNNN2HEiBE499xzAQC1tbW4/PLLce2112L48OGoq6vDddddh0mTJqV2bQWSfBENBZPUNws8Y2QAasmltIoHgAEUvMi3tflofIgFTdNFU/XYaGuzvJnHeYQ8NONDLw/rJ8j7zjloa+NF7ZHIfvVdQIidpUxjo6gfSILLQwx8n+G6wfPuu+9i9uzZqa+vueYaAMAll1yCBx54AGvXrsVjjz2Gffv2obGxEbNnz8bTTz+Nak0X4bvuugslJSW44IIL0Nvbizlz5uCRRx5B8WA/lkBi4wLvu0na3s6LSgBbDEDfySPXAq/A4Bk+HNiwwd8GoC6l1d3NF70S8+pQjI1YjJdGWSiLch4hj6wGoPVD9HzrHBxwAC9qh1qDx3fyyGXwlCSAOAqSh9u4bvDMmjULLMdBly+//HLea5SXl+Pee+/Fvffeq/LWvE2+CE8BYUffTVJh/NXVpbZFMEYRnsxKKwnEEHoDUJfSAvh8EX+YCYYM4etkfz+Xh+cNnv5+WXhqQ0orSGMDAEowEC55ZDCGU2OjhHGDx8cpLd/V8BDg3ujOwW65NkZ49u3jv8rzZDD+Egl5YHyhBqDvlFYOJV5WOlicECaDOFdEo2RQHhbnSyTiszqenTv5xCgp0TXiJOcgg3NQ3I8IEC555IrwlBU2V7wAGTx+pKWFV9WVlOha/+5XTW/xOAWto+uLQxFzFCwDIVTiuZRW6aAVGCavNYc8ysoHi27CUvMmZNHQoGv9q0vxKSrizhG49w65jOHSwhd4382VXPIoG3yDDB7CUUREo7FRp7RUVdOXlMjuwr6YqDnqmYAQ1jTlUlrRwg0eXxmAvb3Sas+U0iofnD9hGR8ZxgagbteaGBsDAz7pLpzBGJYpnMINHl/NFSC3PKKFOwduQwaPH8mwwAMZvPiwpHFy1DNFIgzFSJDSEkqrrHCl5auxIWRRUaE7GC01VyoHNzaEJcWXYWwAadHheFzvMZigooJ3GAZ8Io+cEY2QRUMZyy0PBdFQtyGDx49kWOABzaI2ZDD2GJZFPlcPnjJWcB5eKK2uLh+cmJ5PaVWoS+H4YmxoZaHZM55K4VQO7tsIy6KWJ8JThsL6NAE+TfFlSv+KLuJhmSudnbJhaab6v4rCo6FuQwaPH0lrlCVITdQhIVXimRrLKcg7Dx0q10rPK66ODp7GATIrrbClcLJENFLjo6rwueKrRS1fhGcI35odGnnk2pWkMBq6d6/lkkrnELKoqeGHUg8inaXBaCgZPISj5MvDVw+6JmHx0nL1WYlq3rAYptd2F/a8PIQsamt1e6RVKi2/L2iA2gXeVwZgBnkwptEdNYXrDt/II5nkG0CAzBEeBSkcIQvGfGAn5DOGq8jgIdwgwwIPaBZ5YfCEoS5hYABobeWvc+WdgXDIwwGl5ZsFDcgb4Qld+jeDPLRHI5XV8j5WoZBHW5v84zXnLsr6rsHlsaPD8pazsjLeq0n8Ok+TL91ZWbhz4DZk8PiRDH1WAM1ErR2sGgzDoib6ihQX826pg+jC0kLjhEEeRpWWAuOvr0+m/D1LvghPdeEGj2/GBpCzvgvQRHjCsOFB6NEDDuCWySAy/TvoHCQSBQ1030TLjaY7qfEg4ShZIjypiVozaPAoWNQ8P0m1CjxDX5FoFKlTfwvZJyt6tBVw6Loz5I3wDNasFCCL6upUF37/y0MYPF1dln+Fb8aGNhqaIYUDaCI8YZgr+YzhyiJZvBeG8ZHPkR5SuO5wGzJ4/Ia2r4hGaWXMwyuYpKILvWfJMklTslBk8IjgkeflkSfdmfLSCpBFJOIjJZ4v4iXSv2EYG3miocXFQHHNYLFqGOSRzxiOaqLDYZBHPke6qnDd4TZk8PgNMUnLy3V9RTLm4RVMUt8saNnqmcoQzghPtgVeKK2+voLODfGNEjca4VEwV/bu9fhRLHm6LEejkAt8Ac6Sb8ZGPmOYdAcA7Vwp3JF2GzJ4/IZ2gdf0FenTHHBcPnQwpRUGryTPJC0rA3lp0CitGlmrEPhFrbeXWyFA/nq3AmSh3Ynj6UJdWuD15I3wgKLDyLAZhiI8hGNkWeC1Bk902OB2ZEURnmTS8mXsJ8skFfKoqIBUWkFf4IH8BmBFiSzQDPqiJrYcR6O8mZKG1CKvIBpaUiKNHk+PD1rg9eSp4dE5SyHWHfuVSsRi+pSCjyCDx29kWeBFr7nyciBSXXhEQyxoicJOZbCfPAZPeTmUeq2eVlraLsu5DMCwRLyyREMBzfgYVrjBA/gkBZxlgbdzrnj6AFGHDEBfOAedndKoyzI+orVR/ed9CBk8fiPLJM2otArwSqJReRlPL2pZvBJhAOoiPEGvacrSGh5Qv6j5wuDJMjYAzfioU2Pw+MIgNuIcKIxoxOMeXxfzGICqdYenx4aYK9XVcgwMkpJHdamMDvu0jocMHr/hkJcG+GSimlHiQVda2tbwmi7LQBYDMOi7+LLMlWRShunLhw/uSurqKigc4QuD2CHnoLJSDj/PyoMxmfIkZynrXAHsWVvcggwev5ElwqN6kgI+WOSz9BUB1NfwiAW+p8fDzfaynLEG2Bfh8bQSz3PmHKAxeJJJOYks4Pm5AjiW/gV8YBC3tUmrN5fzqCDi5XlZADl1hx1ri1uQweM3HIpoAD5Y1ERfkZISqVUG0dY0qZikNTU+aLaXZWwAaUorbBGvLM4BAFQMr5T1PUGv8XJBd3hWHkIWI0bouiwD9kV4OjosH+dnPzl0hx3jwy3I4PEbZlJaBeZZPa/EhSzS+ooA6r3WSMRHSjyf0gpLEXeeBb64GCgpK5InQwc54tXfnzUaaocH7/lCXQfnytChfKwBHu5cb9RZUrS2uAUZPH4iS5dl8S0gbVD29ga7uZyRolRFEQ3AB4u82Ty8gsJUTzfbyxPhqRisVw5F24IsXZYBe5wlz8vD7AJfgO4oKpJH9fhRHlTDQ7hDli7LQJZBCQRbiZudpIqUuB+9VtVKXChwTzfbM5LCAcIR8dI6B2nR0FDW/zmcwvGNPNKcJcaohodwC23Bcra+IuXgOWlRcBLkML3DXolvlJYDSrykBBg2jL/2pDx6emQ0NFf6FwhHEbfZsVHg0SOBS2mF1FkaGJCNZ6mGh3AWox48EI4wvdGUFhk84ZOHGBsVFftFQ/ebK4qLuD3ZbM/s2ACCXdSeZbcrYG9NkyflYaBhKaDWAHQLMnj8hNEaDSAcYXqHw9KelkcOpcVYCOs0jHRZTp8rCrYee7bZntG5UlampLmcGBuiTtpzUHRY0tGRtWGpdkcj1fAQzpLDK7HD4Bk5kj+3tnrUazUb4SmwuVx9PX/eudPyJexj3z45CDKchSP+bJVeq5CHJxc1K9HQApvtCbvak+PD6AIPKJGHp8cG4GgLB8DjukPIYujQ/RqWpo6ViA76DWTwEI6RI8JjhxIXk7Svz6Pj26yXVmBzOV8orbo6zcrF2S8srViJi4a1nsLMAq9IHg0N/NnT48OI7lAgD+3Y8JyzlEwadx4VRUN9MTaMOAdUw0M4hpkIj4KBWVkp57vnJmqOLstAmjxEnxVAiRL3nCwAQwt8JDKYrVAc4fGrPFQ6B0CADMCgO0u7dvFTkSMReaMastbwKIgOB2ZsUA0PYTsuDEzPTtQcXZaBNKVVVKTEABRemie9VgMefHl5Wlg65F6rXXPFr/JQueGhqsrDKT4hi5Ejuf5II7TRYYfSv25CBo+fcDilBXh4UcvRZRmwJ+IllFYsxuv8PIXD9V2Ah41hwPGIBuDhuRKLyf3QND5yjg0gzSDW1rQoig571llycGy4BRk8fiFHl2UghEorR8EykCNtUYDX6ukUnwt5eM8u8IDxbcdA8GuaxA2VlsqOkRrslofnxkeOuTIwINsP7RcdLkB3CFn09nrQVqAaHsJz5OgrAoSwENOMlwYE3wC04qUVePSIpwtTXfBafbHAp23RB0IY8coxNrSHe6qUhy9SfFTDQ3gGbUQjg9KyIw8P+HOBB0K+qKWRdWwAQHe35V/p2RRfZ6f8P5tJ/wa1psnqXAmh7tiv7wwQHt3hUH83NyGDxy+4vMB7TmnlSGntF5YGQh3x2m9sRKNKjh7xbIpPjI3qar1xN0jo5orBaGjo6v9yzJXSUnnCuWrd4anxkaNhKZBjbBR49IhbkMHjF3JY4QCFpbXs13cGCLbXmkdp7Tc2gGDXrZidKzbUrHgqxZejnglwRh6ewswCDwR7F9+ePbwzKWAswiPGBuDLKA8ZPH4hj9IKXSGmVYMniAZgWxvQ389fixvUkFOJB3FRcymi4dneMy7Lw3O6w8yORiAcc2X4cB75TWO/saGNDvuwjocMHr/gUh5eu8B70mvNUaNRVqbZsR4GpTVihDwHSYOdStyTBmAh6d8CBrk2xeepRd4DusMzDAzIGzLSowlQPld8PTYAX9fxkMHjFwxuw7arLiEel7viXcdMl2VBkCNeZj14INgpPqsRjWRSHx60gCcXeZcjPJ5yllpb+f+5uFie6Klhv3YWQLBTfIXoDjJ4CNtwSWmVl8td8J6ZqGa6LAuC7LVa8dJCrMT3k4eio0cAj8sjg7PEmNyKbVcNT1+fh3bxCVnU12uqkiU5IxpBrOExW98F+LoXDxk8fsGlomXAg1682S7LgC11CZ7xWl300gIRpi8qkkZP0CKAvb3A3r38tYN9ZwCPpvg8MFeEjeEJzPYzA3zdi8d1g+fNN9/EmWeeiaamJkQiETz33HO67zPGsGjRIjQ1NaGiogKzZs3C+vXrdZ+JxWK4+uqrMWLECFRVVeGss87Ctm3bHPwrbCZPl2XxESCDl1ZgcznAg4uaWeMPUK604nG5jriOi3l48S8Qt+AJXFzUxK/0jDzE6lpeDgwdut+3tX1nVPclAjw4PjwwV5qbeVbNExiUB6W0FNHd3Y0pU6bgvvvuy/j9O+64A3feeSfuu+8+rFq1Cg0NDTjttNPQqRH2woULsXTpUixZsgQrVqxAV1cXzjjjDCQSCaf+DHsRxltVVcYuy4mE9NRS0XlFzeUA4MAD+fP27QVdRh1CHqNGZfx2Tw9/1h6DoyoMW14uu/N7Rh7iRlzw0sTY8MyCpt2ib8UgViQPT46NHF2Wi4o052gqTFl4bnwYnCt21PCI4djfzzdWegIhDxecRzdw3eCZP38+br31VixYsGC/7zHGcPfdd+Pmm2/GggULMHHiRDz66KPo6enBU089BQBob2/HQw89hJ/97GeYO3cujjnmGDzxxBNYu3YtXn31Vaf/HHsQC/zo0Tm7LAOaRV5RcznAg0rcisGj0Gv1nDy2buXPo0dn/LadBqCQxc6dcme8q+zZIyeECwaxWEf9ODZSqkXR0SOAh+dKlrFhZ/1fWRk/oB3woDzyjA87DEA3cN3gycWmTZvQ0tKCefPmpd6LRqM45ZRTsHLlSgDA6tWr0d/fr/tMU1MTJk6cmPpMJmKxGDo6OnQPz5JnkmoDOHZY4p5VWlkmqZCHthZVpVfiOXkYNADtkMcBB3C7mjGPpDzF2DjggLTJILFzfPhtbAhZZHQOgOBFvLTOYwZCpTvicTlprciDanjU0jL4z6gXlYCD1NfXp77X0tKCsrIyDBs2LOtnMrF48WLU1tamHqOz/MM9gQkvTVfDq9iL98QkBaxFNBQqLU958X19wK5d/HUepWWHPIqKZDTcE/LIMzYAe8eHX+eKbkFT2FzOr/IIhe5obuaeSmlpxi36gL3Okht42uARRNLSOIyx/d5LJ99nbrzxRrS3t6ceW8VE8CJWUjhAcOsSrHitWuOvwO1VnpKHkEVFBVBXl/EjOZVW0FJ8eRY0xuz1WoUstOeXuorBaOh+uiOIKT7GrEWHg1rTpM0cZNjtCtjrLLmBpw2ehsEtMemRmtbW1lTUp6GhAfF4HHvTtsxoP5OJaDSKmpoa3cOzWJmkgC07T1zfip1M5g1L51zgFTSX89QCn6e+CzBgABaIpxa1PGMjHpc7ZOyQx5AhgFAlnljUrMwVQHnEyxOy2Ls3b31XzgU+ZM4BkGV8UA2PPYwdOxYNDQ1YtmxZ6r14PI7ly5dj5syZAICpU6eitLRU95nm5masW7cu9Rnfk6eGJ2+ER5HBE48Du3cXdKnC2b2b30gkknWnRc6iVCBYSjzP2ADsD0v7SYlr691CkbZw2VnSzhXXt2IbqO/KO1eCFB02YPAErYanJP9H7KWrqwsbN25Mfb1p0yasWbMGdXV1OOigg7Bw4ULcdtttGDduHMaNG4fbbrsNlZWVuOiiiwAAtbW1uPzyy3Httddi+PDhqKurw3XXXYdJkyZh7ty5bv1ZajFYaGdXWLqsjOuIXbv4RM2S7nUGMUkbGmSdQRoZJ6loLtfdzeUhtktYwK9Ky64F3k8GoFjQSkvTho9ieXzyiQfGRywmj2BxKR3e0MB9k4EBrj9yBN3tx4BzkHOuJBI8OqzbsmQOT+mOPKUBQPBSWq4bPO+++y5mz56d+vqaa64BAFxyySV45JFHcP3116O3txdXXHEF9u7dixNOOAGvvPIKqjU7Ce666y6UlJTgggsuQG9vL+bMmYNHHnkExRlah/uOnh6+1RYwtwsHUB6KFQbP0UcXfDnrWC1KBbgBKAyeAhBKq7WVB5synNfpHFbD0kEN01vZhQMEUx5CFtrmUWlklYciZ6m0lBs5LS1cHp4weMzOlfSjRwowePwU/QOoaFk5s2bNAmNsv8cjjzwCgBcsL1q0CM3Nzejr68Py5csxceJE3TXKy8tx7733oq2tDT09PXjhhRe8vevKDEJpDRmSsekgkCPCE8S0RZ4FDbBfHtpDyV1vE2/VS7OhENP1scGY69FQwEPyMFDfZXc6HPDQIm9Vd2iPHlFU1N7Wpj/WwxXyGDwDA9yhA+zTHU7jusFD5EE7KPMoLbvy8ICHlLjVmhVAmRevLR/yjDysemk9PTxUXwDaseFqUfuuXXwViUTkTaURyrlitkYDCGbK0+pcAZTJo66O7/oHPCAPgwXtQHBqeMjg8TomFvhQRHis1qwAoZRHMik3ptjdXK672+VTsa3WdwG2RDRcX9BULPBBSvF5QHdobXFX5RGLyWPb8+xYKyqSRhoASmkRNmK10A4Idpi+kAhPUML02vquLEpce+zIfs3lxOFJBS5qlZXyXEpX5WFibNhVpAt4cK5YWeCDrDusGIBBk4f45eXlPEefAe3Y0CUXFB494jRk8HidzZv588EHZ/1IqLw0IY8xY7J+JGfRMqBEaYk1VehQVxDGsIH6LiCt1jISsUWJuyqPLVv4s5UUjg1jo7nZ5fVAyMOAs2SncyB+vau9XZPJwpxHG3Spq/LQysJsqYS2xYfP0lpk8HidL77gzzkMHidSOAcdxJ+FDnWF/n65ohqQh50GoLC3hP3lCtqxkUdpVVRkaKaqcHx4Sh5jx2b9iBPp34YGXtSeSLjsIHhEHp4YGzt38jROcbHrNU1CdXlirlhZVxRGh52GDB6vY2BgOpHCEUqrvR3Yt6/gy1lj2zbuqZWX59zfGholXojSAkItj5xzpcDK66Iiuaa6Jg/G1MhDoXOwZYuLRe1CFqNGycU6Dcac1aVenytZZRGJ+LaOhwweL5NMypBKjhSOE3n4qiqZ6nVtoopJOmZM1ogG4EzEy/dKC1C6qIlbELfkCibkkXVsJBJK9guL8eGaPPbskf9XEZ7NgFPp30iE9+wTfRAdx8DYiMWyHDsCKJWHX3SHU86Sk5DB42Wam3kap7g46zZbwJkaHsADoVgDkxRwpvBQ3EJrq377pqMUqrRCrMT3GxvpzeUKxDNzpbEx6zEKgDMpnLIyqb5cMwBNGMOAvTU8fnEOso4NwLe9eMjg8TJiUI4enTUMCziTwgE84LVqIzxZyNosC1CqtIYOlZdzra6pUKUVpIhXR4fcsWagoH0/eRQXywETBHkU6hzYpDu8LA8xV/Y7dgSwpR6yo8PF8gAPRYedhAweL2NQaeVN4ShoLqe9DS8rrazNsgClSisS8ZABaCWFA9hSiLl9Ow9KOo4YlMOH63sMpeF0TZOXxwbgzK4kwB8Gj6EFPgjlAQMDcpcWpbQIz2BgCzZgIA8PKC0+9LISF7KIRNKaZQHKJ6mrBmBvLz+gSHsjGXAqwjNyJJd3MunS1vRCIxqAnC8K0xZeXuABZ9K/gD90h1PpX+1tuDI+tm/nDnBZGU95ZsEp3eEkZPB4GYNKS4y5/Rxb7fZBhV68a0rLQE8i8WdWVWWoa7ZJibuitEQebcgQ3q8+C4aUuIIFvqhIhupdkYeBdCfgfIRnyxZZCOsoFB2WJJOGdIehsaE44uWKLtXOlf16VUhyRoephodQjkGlJdr519SkfUO7fdDvXuvAgKEePGL+7ScLwLYibleVVo4ePIBBeQTBiy/UOdC+qagRY1ERrycTHfwdxYA8BgZkJ+795KHw6BHAZedA9OApKsq5+UP8mXaPDcBleWzaxJ9VzBWq4SGU4TElLiZpW5sL43zbNhmGzdGDxylZAC4rLY+NDe2teFkeWZ0DQKk8SktlQ1/HDUBtD54cES/tHM4ZHVacDne8F4+2B0+WM9YA58YG4I+54qTucAoyeLyKwR48sZgsErV7YNbUAMOG8deOT1SDYVjDSkuB1nU1omEgRA+4E+HxrRJXmOIDXJSHwR48Yq5Eo9yP0KH46BEhi64uYO/egi9nDpVjI0TRUCcNQKcgg8erbN/OrZmSkpyt0LXjTVujvN+bfp+on33Gn3O0yQcMKq1EgndBKxChL5qblfSqM8fnn+tvIgtCaTm5wLuixFWG6f1uAApZNDSkHaCmJ6cstN9QII+KCl7YDrgoDxULvN+NYUDKI0+9m5MGoFOQweNVNm7kz2PH5uzBIyZpZWWWjwWl+aCQx7hxOT9maJICSuRxwAFckTPmwkGAKuQRlDB9W5sMGxx6aM6POum1umYAbtjAnw87LOfHcsoCCI48xFzJIw/Dc0VhdHj3bv0Bv45gUB5OGoBOQQaPV1ExSbXfULyoCSfBMUzKI+MkVdxcLhKR8hABF0dgzPCi5mRKSwTfNm92uBePGBsHHphlSwknmXS2MFXIw9GxAagxhgHlXrxr8lA5VwYGlIRzhw6V5QGOyqO7G9ixg7/2kLPkFGTweBWPGjzCgRa35xgmvRKn5CF0htCpjrB7N/9DIxHgkENyftRQSkuRLJqaeMQrkXDYize4oOUs0gWUp/gOP5w//+MfSi5nHNVzJSjyyLPA55SH4qNHtLfjqDxEacCwYTnbWQBk8BBOYtJLyxqWVryouaK0GFNnACqWhysGj5DF6NE5z0kCnN2mX1Qk/z2uyMPg2CgpySI2m4zhLVscrvFSEdEAguEcdHbKBp2qosOK5ouruiPPugLkSWlRDQ+hFNURHsWT9LPPlPQjM8bOnfz+i4oMFy3nVeJ+VloGFzQgj9cq3uzuVtYdz8tKXDtXMrYuUrzA19fzdSGZdDhtoSKiof2Gnw0eEdEYMYLnkXLgtDyE8+hF54Ax6sNDOIWJiIbTk/Sgg/gW1ljMwUJdIYuDDspwXoQet5SWoxEvg2MDMBjhAfydtvBokW4k4sIi394O7NrFXxca4bEpGrptm/7MO1tRNVeAYBiA4pflMYb7+ni5EkDb0gm7aW7mGqG4uLCtg9pvKBqYxcWyjsexiWpBaTnttW7a5GChrkGllddLKy+XPY38rMQ9mu4EXDAAhSzq63Meogo4X8MzfLgs1HWsBtDgXAEMyCNI6XCDcwXI0u5E8dEjTkEGjxcRg3LMmAwdwfQ47aUBLipxFV6aDYW6lZUOF+oalEdPj8xUZVTiio8eAVxQ4nv28AfguSJdwAV5eNg5cCXiZUeER/FcaWmRY9N2TEZDq6qy9HlV3OLDKcjg8SIeVlqAC7lnD8tDW6jriAFoYUt6JJLlxGPAthTf5s0OFeqKsdHYmOOP5DidsgBcWOAtRDRIHhyndUdtLe/lBTgU8erp4Q1tgcI3w5SX83A/QAYPUSAWKund8Fodj/B4XB6OKPG2Nl6nARhuspe1SFd8E1CmxEeO5JdkTNaL2opdxrCiA5/8EA11MsXn5QhP4A1AUTk/dGhhW9IBfXTYR3U8ZPB4EaEdPRjRABxW4iYiGoA7Xryj8hAKfNSonMcGAAZkAShf1BxPW6iMaAhZKGoup72t7dsdKtS1I8Kj0DlwdK50d/N6SCCv7ojH5b/cjRovx+dKVg+Ik3dsAGTwEIr46CP+PGFC3o8KZ7+2NssHbPRKvviCKwpb2bGDz77iYkNbKQPvpX38MX8ePz7vR/Maw9pv+jXi9ckn/FmsHDkwHNEA/Fmoy5iUhwdTOIBLY2PECPlPyIL2TwxstFzl2AB82YuHDB6vEY9LbWDA4BH1mlnnsw2DUpRLJBIOHDEhjL9x4/IWcHd3y51STsrDUSUu5HHUUXk/Ko6Xytl+xO8Rr/Xr+bMKeZSUyKiZH8dHaytXCEVFwBFH5P34vn38Oas8bDR4du50oFDXxFwRsqiqynF0od8NQAvyMKQ7qIaHsMzGjTykXl3NzwbKg1DiWRd4G7YPatMWti9qJqJdQhalpTmOVLIxTL9liwNpC7HAmzCGc6brbTR4Pv1U2SUzMzAgf4mJ8ZHT2bdRHsLBtg0xVw45JG+6E3DHWaqtlaem2z4+LBjDbo4NRWVj2TEhj7xjA6CUFqEA7QKfJ88KmDB4AKXH8h55JH8Wc8g2TCzwWlk4VaQL8J0WI0ZwhSUyTrZhwQDMqbRsWNSEPl23zmYl/vnnPCJaUSFPcc2BIQPQBnlMnMif161TdsnMmJgryaRMh+fVHYoXNMfkYWKumHIOFIamxo/n2fp9++SZnraQSEjlZEJ3OC0PuyGDx2uYmKSMGVjUolEe8gCUDsxJk/jz2rXKLpkZ1Qu8KO4R2l4BkYhD8ujq4vu9AXXyEDFrEcNWwJFH8qzKnj2yZtQWxNgQvzAPbslDLPBemivt7dIYzSoPIYueHqVdNX2rO4Q8FOqO8nIZLbdVHl98wdsnR6N5DxwG3JsrdkMGj9cwMUm1eijrwIxE5MAUo1gBjigtxiwprZxeiRCUQlkADnmtwkOrr+fVsHlwSx6OKXETEQ3AoBK3QR5irnz6qc1F/hZSFpWVOU5r0RZwKJSHI3Olp0duw1aVwrFBjwJyfNgqD6FHjzhC9s/JgSF5iG+SwUNYRuu15kHMu5KSLO2/BTYq8U8+sfFIhZ07+T0XFRnalWRqku7dqzTf4ogBaML4A9xVWo4qcQMLGmAwbWHDXBk9mgcWtSVHtqA6olFcLCOiCseHI3Pl00/5/B4+XHb3y4GbzpIj8jBhDAPuysNOyODxEgUUYeYs97FhYB50ENeF/f02KnGhwA89lIcN8mDKg4/HeYhXEY6kLUwaPG5FNADvGYDJpFyznTYAIxEHxseuXcDu3fyXGdihZWhBA2wZH+Lf1dLCb9kWtAu8ilpI7Tf9GB32ke6wEzJ4vIS2CDPPoaGAwUGp/YDCgemIErdjkg4ZIus9bAjTNzfzZsi2YIc8bArT267EEwm57cmA19rRYaBmRftNv6UtxAI/dmyOLYoSQ9E/7QcUyqO6mt8mYKM8LEZDDUU0OjqUHpgpxsZHH9l4DqfJ9K8heVAND1EQdhRhaj/gNy/ejgW+qMiWRb66Wm4Usn1R80FYWoyN9ettUuKbNvEIXXm5qR1aOWtWANvrNHw1VwDbFjXb5WFxrhhyDgClhctjx3Ift6/PpuNYkklZ/6dSHhThIQpCzH6VgxKw3Yu3TWmJC6tW4jaHpm2RR3e3PI7dQH0XYKGmSSGiFYxtSlwsaAaLML0yNmw3hk3OFTdSWoD35GForpSWygNqFcqjuFiqfFt0xxdfAL29vHGrgR1a8bjsYEI1PIR9vPcefz72WEMfd1uJ2+qlJZPAmjX89THHGPoRt5W4rWmLDz7gOZnGRtm5LQema1Z6e5Ueb15cLNcaW+Tx/vv8ecoUQx93M4UDyLHxxRc29WkTc2XyZEMf94o8bNEdHR3Syha/KA9u6w5bDUAxNiZMyNFGWiL+tEgkx5FFAO3SIgpEGDwmF3i3ldbmzUojvJyNG3nfmYoKQzu0AO/I44MPlF6WY9IY7uzkRg+QRx61tbKo06a0hRfkYXpsKJZFXR3Q1MRff/ih0kvznKFY1KZONfQjbstDa/AoT3kKWYwebWiHFuAd3SFuXSlirpgcG7W1eSortGNDKBuPQwaPV9i9m59NAABHH23oR3bt4s8jRuT5oE2TtK6O79YCpMOtDDFJp0wx5JUAcseHYS9NsRIXa++aNTZs1Te5wAsPvqIizwa3oiLpxikeH0K/vvuu0styLMrDLQ8esFEen37K+85UVRk6GBJwP8Izfjyvp+rqsmGX5+rV/NngAg+YkIdN5QHTpvFnW+aKSXmYlkUy6ZvjJTxv8CxatAiRSET3aGhoSH2fMYZFixahqakJFRUVmDVrFtbbft6BDQiL4bDD8sQRJa2t/DlvhsNGJX788fz5739XfGGTCxrA2/YAvC9fTmySx7hx/F/X12fDkRsmvTQhCwPZL9vkcdxx/Pnvf1d8xMTOncD27TwyZdA58MJc0cpDKWJBO/poQ/VMgPvyKCmRU3vVKqWXNq07enpkzYpb8jj2WO57bNumuDs5Y3J8GJSH4bFRXi69KZ/U8Xje4AGAo446Cs3NzanHWk3i94477sCdd96J++67D6tWrUJDQwNOO+00dPrE4kxh5wIv3FphuivENiVuQWmJ80ANy0Px/vGiIpvkobWgDMrD8NgAZNdmxfKYMoXXee7eLU/EUIIYG+PH5+m4KTEsDyGLri6lNU2AdA5sW+BNRDRMy8OGXgu2y8PkXCkv1x89mBGb5DFkiNyLoFQe27fzVEBxseH6LlO6Q6QXbOvFoRZfGDwlJSVoaGhIPQ4YzMsyxnD33Xfj5ptvxoIFCzBx4kQ8+uij6OnpwVNPPZXzmrFYDB0dHbqHq4gIjwmDx7AlLgalDV2+bInwMGZaaQlZRKMGlJaN8rDF4Fm7ljelHDECGDXK0I9YUlqK5VFeLnWsUnnY6RzU1sooiWJ5iLTFhg2KHWKTHjxgQh5ibIj8uUJsmSvd3bI/k8loaH29gR6FoibIRl2q1OARc2XCBJ7fNoAl3WHD+LADXxg8GzZsQFNTE8aOHYuvf/3r+HzwjJRNmzahpaUF8+bNS302Go3ilFNOwcqVK3Nec/HixaitrU09Ro8ebevfkBeTBcuAXOTzDkwxSffsUV4hOHUqVxJbt/LOqUrYvJmvCKWlhrfoa2URWKUlhG0Aw8YwYKvSsl0eBjGc4isqss0AHD6cNw0HFNZqJJPSWTIoj95eWXJh2OCxca588IHCM8Y++IDLpLER0JQ+5MJU+tdvBqCdzgFg6/iwA88bPCeccAIee+wxvPzyy/jVr36FlpYWzJw5E21tbWgZXGHr0/4z9fX1qe9l48Ybb0R7e3vqsXXrVtv+hrx0dHC3DzBs8PT1yZ1ReSeqSOEwpjytVV0ttx8rW9TEJJ00ifeOMIBXlJZQ4uvWybqAgrFbadloANqixC1ENAw7B4AjEUBlc2XDBp5+Ky83dKQEIGVRVmagXFA7NhTvxBk7lhuB8bjCnWt2pvcAR+bKu+8qrHmzUMDtFXnYgecNnvnz5+O8887DpEmTMHfuXPzpT38CADz66KOpz0TSvF7G2H7vpRONRlFTU6N7uIaFbZRirS4t1TcAzUhpqSy2s3GRV7aoOaW0bJBFUxN/JJPyzygYO1MWgCNe/OrVioKLbW2yIMhENNQrYXrlBqCF3YymUjiiZiWRUN57IhKRaT5l8vCxMTx5MjdC9+yRB70XTAHOktvOox143uBJp6qqCpMmTcKGDRtSu7XSozmtra37RX08zd/+xp/F7DeAdlAaynI4kMZRprTefps/mzB4TKVwtLJQun2Io1QefX2yO5tdBqCNSuuII/hu6e5u2d2+IEQuyMRuRm001G2vVTs2lAw9ESqyyxjWFsX5wVkS48Nu58AGWZSVyU2H77yj4II7dvCHid2MgHecJTvwncETi8Xw8ccfo7GxEWPHjkVDQwOWLVuW+n48Hsfy5csxc+ZMF+/SJCtW8OeTTjL8I6a8EsDWiXrCCfz57bd5bW1B9PdLg+fEEw3/mKVJGovJrV0KmT6dP4t/a0GsWsVj/g0Nhs6MEpjy0mxc4IuL5fh46y0FFxRCNTG/tSmcvNFQwFYlfuyxPODa3KzIi//rX/mzCXmYmiuAreNjxgz+rGRs7N0rdzOKCxvASykc8W9UIg8xNqZMkUdiGMDU2kIpLbVcd911WL58OTZt2oR33nkHX/va19DR0YFLLrkEkUgECxcuxG233YalS5di3bp1uPTSS1FZWYmLLrrI7Vs3RjIJiAJrEwaPqQUNsDWNM3kyd7Y7OhQ0IPzgAx4OGDrU8Dk4gMkIT1WV3LFgw0SdNYs/L1+uoOxBawwbLFgGvOO1AlIeb7yh4GIWnAPL0VAb5FFZKQ3AguXR3S1TFl/6kuEf85KzdNJJ3Cj+/HPZd9UyK1fysNnhh5tQjBbnSnc3r/5WjNK5IqwmE3PFdDSUUlpq2bZtG77xjW9g/PjxWLBgAcrKyvD2229jzJgxAIDrr78eCxcuxBVXXIFp06Zh+/bteOWVV1Cdd2+yR/jkE560ragwVZMgsnhe8NKKi4GTT+avC56oYkE78URDJ8YLTMvDxok6dSrvq7F3r4JiTKG0TCxosZhsIu0FL02rxAtK48TjMvpnQh6mnQObw/TKFjURUh01SrY8N4CX5FFdLTP5y5cXeDELcwUwafDU1PAQHWCLPL70JW6Uf/KJgl2vQpdaMIYN1YYClNJSzZIlS7Bjxw7E43Fs374dv//97zFB4/lHIhEsWrQIzc3N6Ovrw/LlyzFRnMTmB8SgnD5dTiQDCG/IsJ6z2RKfPZs/v/56gRey4MEDUh6GuwvY6MWXlEgdU9CilkhYiv5t28afy8sNHKUAyLGxb58NZ2LwOo2KCq5MC6rjee897oKOGGH4fDVAysNgCyNH50pBBqB2QTMR/RMbUg880OAPOBQBLFh3WIhoMCbHhzjrLCeRiK2LfF2dPA+3IAOwo0MeYmdBdzQ1GRxSFOEhTFHgAj8Y6MqPjQs8IJX4W28VsGYyZkkeyaRU4oYNQJvlocSLX7eOx5eHDDHcJRXQG8OGlNawYTKaZoM8olFZm1CQPLQLmokFXmzqMjw2ROhDuLuKmT6d1xNt3y4P9baEhQUesKA7hDxEKEQxSuZKb68s4DYR0dizR7aPMD0+vCyPlSu5YjzkEIOWHEfMFdNjo61NQQGn/ZDB4zYFGjyGJ6lowqWsO6CeyZO5d9LVVcB27M8+40qkrMz0jrX+fr5mG/ZahTyUHlwjEUrrzTcLqOPRFuga3HIMWFjgi4sdk0dBStwp56CxkT/bJAsldTza4n6TKRzTi5pYMG2Sx4kn8iG4aVMBR5CsWsVl0tDAF3mDiLFRX5/nkF0tNstD6VyxODZMOY7FxdxZtckAVAkZPG6yYwef5UVFcmuPARizMDDFJN2+3dw9GqSoCDjlFP7acmhaeKzHHWdC+0hZHHigCbtAWEY7dhi/PxMce6ys4xGRZdM4tcADcnzYJA+tErdkACaTluVhea7s2cNTaDZQcBpnzRpZ3G+wGznAf0RkYkwbPDaNDW0dj+VF3mJ6z/TYAKRBbJM8Tj5Z1vFYtqmciv4VFdkuD5WQweMmf/kLfz76aF4MZ5D2dtka3nDNis0LPACceip/fuklixd47TX+bNIr8eICX1IiF7U//9nCBRiT2t9uDx6wXR7HH88NwF27ZG84U6xfL4v7TfRYASzIY+hQaXDb5MXPncufX37ZYkNGUeAxc6ap4n4xV2pqDLcxsj2iAUh5vPiixQsIeVg0hr00V4YNky23LOmO3l7Z2CgA8lAJGTxuIiyDL3/Z1I8JpTViBA+PG0JY4V1d0lpSzFe/yp9XrLBwgkUyybU/AJx+uqkfNZ3eAxyZpGeeyZ+ff97CD3/wAU8/VlWZ6ikCWPRabZZHWZkc5i+8YOECQvPPnm2quL+/X/5JhpV4JGK7PGbO5AtbW5vsO2oKIY/TTjP1YwUvaDY06gTkXPnzny2cq9XTIw0ek/LworMEFKg7li/nkclRo0wV9wNk8BB2kUjIBd6iwWNqQRsyREaRbEprjR3Lj79KJCx4au+9x93/IUNMNVEDvLnAA8AZZ/Dnd96xUDolFrRTT+VVvyYIpBIX8pg/39SPbd/ObemyMlOtWRyJAH7lK/y1aXl0dsqUhUl5WBobwlnq6eG7f2zguON4HU1nJ697M8Xrr/NeDGPGGD5PTOBV3XHWWfz5lVcstPvRzhUT6T1tqYTXdIcqyOBxi9WruXtXU2OqfgewOEkBR9JaYqKaVuIi2jV3ruEDQwUFLfDNzcoPRdT+CnF20h//aPKHhdIyaQwnk96NeH3lKzz78sEHJotTOzpkjUYBzoGJzI+ji5rpufL66zx0NXYsb7JnAku6o7JSNmWxSR5FRdJBMC0Piws84N0FfsoUXq7Q2ysz/Yax6Bzs2ycbzxsulQDI4CEMoF3gTYToAeDTT/nzuHEmf6eDSvyll7jTZRiL6T0A+Mc/+LOJzRlyV1J/v61Ns4Q8TKVx2ttl/x0LEY1YjG+cMNx3BnBkbIwYIYN3pgzAv/yFb3k97DD+MMHGjfzZxKkcHAfkcfrpPNLz6adyDBtCLGhf+YrpBV5sgx871tSPORoBfOEFE5kzxiwv8IxJeZgaH0IWLS22OUuRiMWI6GefARs28IE1Z46p3ylkMXKkiVIJgIqWCQMUsMB/9BF/PvJIkz/oQIRn2jQ+/js7Tey42LtXFjKYlEc8zuc3YOokCm5kihyHAwbgsmU8I2CIV1/lecHx402vTGJsjBtnMlDmkJcm5PGHP5j4ITFXTC5ogJSHqbEBOCKP2lpZ2G54UStggQfkUVNelMfcubxW/Isv5Hm5edmwgZ9LUVoqm4EZZOdOrnqKikyWuohj5gcGbHWWtAagYbtKjI2TTjK1EQZQMFdsKpVQCRk8brB7tzwO14LBI7rVmjZ4xMAU7TRtoKhILmpPP23wh5Yt4zP6yCNNxpa5vksk+NZWwz14BOIHRNdCG5g0idssvb3Ac88Z/KECFjShtEzsVOaIcFBrq21bsQHgnHP482uvGaxrUrTAm5aHGBsFH/CUm3PP5c9PPWXwBz75hOdholHTC/zAgIwOm17UhDwsN8rJT1WV3K9gWB5ibHzpS/JUd4OIsXHooaa6YPDoiYhq2CiP2bO5UdzcbMJ5dGOuCN1hox5VBRk8bvDss3yBP/pok8lSnu0QTpZpg0dEC5Qc05ydf/on/vzb3xo8jPx3v+PPwqUxgdYrMRndlzmwTZtM/16jRCLAxRfz148+auAH+vulZSS2vZnAspdWVyc9wi++MP17jTJuHC9ZSySAJ5808AOrVnFFWlkpGz2ZwLI8HBgbAHDhhTw48f77BqMav/89f54922Tegacs+vu5YWG6/s8heYi58vjjBrfrC3k4OVcAR+QRjfLxARjUHfv28egw4Kw8xLqybx8PmXkYMnjcQIQ+vv510z8qojtNTSb6aAjEJLXZ4DnxRO41dXdz2y4nnZ2yoEPMbhNYjnYBjsnjn/+ZP7/6qoGo71/+wovZR46U+Q4TWFZakYhj8rjkEv786KMGajWWLOHPZ51leoHv7JQBGssGz7ZtJovRzDF8uCzWNbSoCXlYmCvaVLipAm7AsbFxxhl8u/6OHbJNWVa2bZO71c4/3/TvshwNBRyfK7//vQHn8bnneI7/qKMs/VGWIzxVVfLkVZsN4kIhg8dpdu6U8ckLLjD948oWeJuK7QC+dl56KX/9yCN5PvzCCzyFMm6cqdPiBUq8tIIONMrPoYfyiHsyyT3XnIgF7fzzTR0nAXDjwXKNBuCYEr/wQu69rl3LGwZnJZmUzsE3vmH694i50tBg8BBVLQccwBU5Y7ZGvAC5qD3xRJ7jiNat4//gsjKZGzSBkrFh84IWjcp/dV4D8Le/5c9f+pLpSDlQoDwcipbPmMFVY3e3DGZl5Te/4c8WHOnubjnMvaw7CoUMHqd55hmuyI8/3sJWCRn2tjQoDzqIb9+JxWztmgrwqEYkwnfQ5lwvtB6r6ZwUXwMAiwbgoYfyZwcmqaGoRl8fsHQpf21Bae3YwVOeRUWmdytzHDIAhw0Dzj6bv865qK1Ywf+o2lrTzSiBAhe0SMSx8TF/Pt/BtnOnbM2VETFX5s+X28RNYNmDB6Qstm610BnQHGKuLF3Kx3NWhDwszBWtc+DlCE8kIiPEOedKa6sMiVmI/n3yCZfJiBHyXGVTkMFDZKSAdBYgzwsU/V1MUVIii4JtHpgHHSSPmvjlL7N8aO9euQPHgjza22WEx8RZoxLtJLWpg6zg/PN5RuaTT3L01XjpJd5zZtQo080XAVkHP2GCySJMgYNKSxsBzNrLTixoCxaYbr4ISHkcfbTpH+U4JI+yMuCb3+Sv7703y4cYk/KwEO0C5GkDU6ZY+GGxV1nb6MkmjjuOj+HeXuChh7J8aONGXt9VVAR87Wumf8fnn/Nu8GVlpnsVchycKxdfzP/M11/PUef1+9/zoqepUy30K5Fjw+tzpVDI4HGSDRt4zjkSsZRz7uuT5xBZWA85wlOz2YsHgO9/nz8/8EAWT23JEl5FOXGiJTfrnXf4OnDIIbKtjilEN7q+PtsjXjU1wOWX89f/9V9ZPvTYY/z5ggssFFnI1j0nnmj+/gA4FuEBeMDmyCP5uPjf/83wgb4+mbKw4LECwF//yp/9II/vf5//y19+OUua729/4/dRWSmLfkzQ0sLXokjEdJ9TjrbGy2Z5RCLAD3/IX995Z5aA0hNP8Oc5c0y20OaIsTF1aoHOwZYtXIfZyJgxwHnn8dd33JHlQyJXbtEY9tNcKQQyeJxEhDq+8hWTXeE4773HJ//IkSab7GkRjdvE/lQbOeMMbsd0dAD335/2TcaAX/yCv/7WtyxdXyzwlo2/0lIpyE8+sXgR41xzDc8oLluW4QDNLVtkc5rLLrN0/YKVlsiDbdyYp5ikcIqKgH/7N/76rrsy1AU//TQv3j7oINMN1AC+YUSkLAqWhwNj45BDpA+UcVETc+XCC3ltkUnE2Jg82cJmB4GQhyiOspGLL+Y7v7dvz7BFvb8fePBB/vpf/sXS9YU8TJ6tKWls5MfgJBKyu6WN3HADf/7NbzLshH/vPW4Ql5YCF11k6fqikXnBc8WBsVEIZPA4RU8P8PDD/PUVV1i6hOjNN3OmpXIXzsSJ/NlwZy/rFBXJiXr33Wlnwrz5Jl+RKitlktokBRs8gKPyOPhg6YDtt6j97//ydMGsWZaiXb29CqJ/Y8bwxTQWk90cbeSb3+TtXZqbpcOeQizw3/2u6eJtgM8VxnhAU2wgMY2DYwOQc+Xpp9Nqg3fulK0brrrK0rULNoYBKQ9ROGcj0SiwcCF/fccdaXssli7lg6a+XoY+TFKwPCIROU8dGB9Tp3K7P5HgUS8dYq587WuyP5AJtm/nRlRRkcXoHyDHxvbtnt6aTgaPUzz9NB8IY8daKsAEZE1aQQv8pEn82SEl/vWv83W0tTUtHy9CPv/0T5YKMPv6FKRwAMflcf31/PmZZzSBg1gM+NWv+GuLC9o773DHt76+gOhfUZFU4g4samVlPOoF8DRfKnXx97/z+oyyMuBf/9XStcUBlEoW+G3beMjIZo45Bpg3jy/ut9+u+cavfsX/udOnA8cea+naSuXh0Fz5znd4Kvjjj2UtPwDgvvvkB0yeuwfwvq8i+qdElzowVwBpEP/615oMfFubDIFZ1B1ibEyebLp3o6SmRjZ3ckgeViCDxwkYk5P0u9/leQ2TaHtKWUjhS4TS2rIlzxYINZSWyom6aBGfn9ixQzbosRjteuUVvpVy1Cj5J1nCQa8V4Dry7LP5ovaDHwzWSj/zDD8p/sAD5fYlk4gtq1/+cgHRP3GDgGOL2re+xXeFbNgA3HPP4Jva9I2FLSOMSXlY9C04tbVyu7ND4+M//oM///rXPFOB/n6ZCre4oH3xBY/+FRVZyg5KxNhYv97WthaC2lo+RwDg2msHj2b58ENeB1lSwg0eCwjj6ZhjLO5IEjhsAM6dC5xwApeDcJzw8MPc+zv6aL6H3QJCFRc0VwDHDUBLMIIxxlh7ezsDwNrb29Vf/E9/YgxgrKKCsV27LF3i8cf5JY48UsH9jBrFL/bWWwoulp94nLGJE/mv/Na3GGPf/z7/4qSTLF/z4ov5JX7wgwJv7qOP+IWqqhhLJAq8mDE2bmQsGuW/9pnfDjB21FH8i//3/yxdL5FgrLGRX+KPfyzw5u6+m1/o7LMLvJBx/u//+K8cMoSxbX/9grGSEv7GO+9Yut4HH/Afj0YZ6+go8Obmz+cX+8UvCryQcb7+df4rp09nLPGrh/gXI0cy1tdn6Xr//d/8ErNmFXhj/f1y4G7cWODFjNHVxdjo0fxX/uhHTArnggssX/O00/glbrutwJv7y1/4hQ45pMALGefvf2csEuG/9s1lfYw1NfEvfv1rS9fr6uLLEsDYu+8WeHM33MAv9N3vFngh8xhdv8ngGcQ2gyeZZAPHTecD4dprLV/mnHP4Jf7jPxTc05ln8ov97GcKLmaMN9/kvzISSbK/lZzEv1i2zNK1YjHGamsV2Wz9/dzYARhbu7bAixnnxz/mv3JUXRfrQiVjQ4cytnevpWsJ2dbWctkUhLhYQwNjyWSBFzNGIsHYjBn813794L/xF/PmWb7ef/yHQptNXOySSxRczBjbtnHjD2Ds/+qu5S/+538sX+/44xXabOJiTz6p4GLGeOaZQQO2LME24hD+xZo1lq61axdjxcX8Ehs2FHhje/bwCwGWHVkrfPvb/FdOamxl/ShmbMwYy8bwb3/LrzV2rILpLi52zDEFXsg8ZPCYxC6D57Xb32Hj8Cn7ODqFsZYWS9fYtYux8nI+lt5/X8FNLV7ML3beeQouZpxLLuG/9iisZV0nzrM8w5Yu5ddpbFQUlDn1VH7B//1fBRczRk8PYwcfnGQAY9/GLxm79VbL1/re9/jt//M/K7oxEWHZtEnBBY3x3nuMFRVxefwO51mO7iQSjI0bx2//iScU3NiLL/KLjRun4GLG+Z//4b92GNrYpgOO4/8XC2zcyK9TVMRYc7OCG1u4kF/wyisVXMwYySS3fwHGTsKbLH7+RZavdf/9itfkI4/kF/zDHxRdMD+7dzNWN4zPlR/hPxl76CHL1zr3XH7711+v4Ma2buUXKy5mrLNTwQWNQwaPSewweJJJxuYNfYenouqa2b591q5z001ykipxul3w4hljbOc7m1gDdjCAsW/M2WnpVyeTjB13nMJJypgrXjxjjL3ywxdZBAkGMPbwA9YWtB07pDH86quKbswFL54xxq4f/xxPbRX3sI8/tnYN4WTW1ipIZzGm9+JbWxVc0BjxvV3s+NLVDGBs6kE7WW+vtev867/yW//ylxXdmBDwsccquqAxNv7uPVaDfQxg7IeXtFm6RjzOIxkAY3feqejGLr+cX/CGGxRd0BhPfu3Z1LD80/MDlq6xfr1Mj334oaIbO+ggfsHXXlN0QWOQwWMSuyI8zWt3sQOH7GUAY1/5Cp90Ztizh7Hqaj6Gfv97RTfV08NYaamiuK5BkknG5sxhb+IkVhLpZwCvLTDLn/8sy6F27lR0b8KLVxLXNcjOnYzV1bGf4D8YwI2Wt982fxnhcM+YofDWxUW/8x1FFzTAn//M+lHMZuG1VK1am8l1LZGQ5VCLFim8twkTFE9AA/zwh2wzRrPhRW0pW9xsNPPzz2Ww7q9/VXRf27bJkJHFFKxp4nHGpkxhS3F2apF//HHzl3lIUw7V1aXo3sRFZ8xQdEEDbNjAWEUF+x5+waOAw5glB+HCC/mtn3uuwnsTF1U6AfNDBo9J7CxaXrVKeuHnnmsu3SrSFRMnKq6pPeUUfuGf/1zhRXPw8MMpS+XnP9qVUlxmPK2eHln8fM01Cu+to4OxsjJ+YauhBbMMFl8mJh/NzvgKj/LU1DC2cqXxS6xfL8fVyy8rvLc//pFfdPRoZwzAjo6UZ9jy7R+l6jCnTDFXGvHLX8rojtK1WBTZX365wovm4O23U673stv+zoqK5K83qgOSScYWLCi4HCozRxzBL/z004ovnIWf/pT/vro6dsNVXSl7y0zKsq1NFj8XUA61P5s3SwPQiTqeZJJXnwOsb/aX2Qkn8NRWfT3XB0Z56y0Z3fngA4X39+tf84sed5zCi+aHDB6T2LpLi/E1RGxwmDfPWHR8yRIZTVe6oDEmiwTmzlV84Qy0tHA3BGDsv/6LJZOyoB/gKbv+/vyXuewy6aEpi+4IRJHAHXcovnAGXnhBKslVq1hnJ2Mnn8zfGjKEseeey3+Jjg7Gxo+X40mpXdLTI7duKNWGWbjqKhlh6+pi69ZxBQ7w4IoRG/Tdd+X8UrqgMcbYK6/IFLDdO/liMWnV/9M/Mcb4wi6MngsuYMyIirrzTv750lIFu2/Sue46fvGLL1Z84Qx88on8xz72GEskZBYpEuH7LvL9SxIJHl0H+IYqZdEdweTJ1sNOZnnwQf67KisZ++wztmsXdwwAxg44gLE33sh/ieZmuatTSd2flh07pGJXUjRmDDJ4TGK3wcMY35RUWclSFvkzz2SfrP/3f3Ke33STDTfz6adSI5rNHZghHmds9mxZhDRo2SSTPOop5sb06dnX1r4+uTOhqIjvBlXOPfc4E5revJlbbABfOAbp6mJszhwpj299K7tRt2ULYyecwD83apRNpSVnnMF/wS232HBxDc89J/9oza69Tz6RO24rKvi/J1tk9C9/4coeYOyss2ywSfr65LYpZbmhLFx9Nf89I0boIgZLlsjdRYccwm2wTEZuMslTxeKz995rwz2+8UYq4mJ1d5Ahuru5zgAYO/301B+cSPCdz2LYnH46Y//4R+ZLtLczdv75LJU2VrLpIx1RZLlggQ0X17B2rRyHmh22bW2MTZ0qjcDrr88e4fzoI1lnPWGCTbXF06bxX/DAAzZcPDNk8JjECYOHMT7hREmAqFX46U+5Anv9dZ75EfaBmENGoh+WEK7B3Xfb9AuYTAcMGcLYunX7ffvJJ+UWc6G87ruP11UvW8YDLmLXTSTCFz5b2L5drhJmYsNm0CrwKVP41xr6+qTzLBT05ZdzD3/FCl5q9P3v8x3sIndvpe7HEKLx00EHMTZgrSgyL1oFftVV+317+3YegBTyaGpi7MYbeYDszTd5/ez558vox9FH21hWIho/XXaZTb+AMfarX8k/NkOY7623+A5k8ZHjjuPz47XX+OOXv5SGMMBLsGzJSPb3M3bggfyXLFliwy9g/MYvuECGLrZs2e/b998vU7qRCNeVDz7I5fTKK9xWF2ms0lLGfvMbe2411fiptNSG0PMgu3fLiuvZs/ebk52dMvIl0uNXXsnnyIoVfM58+9vS4W5s5E6FLYjGTw6mtcjgMYlTBg9jjPX2cqegpkYO0PRHURFj//mfNkfQf/ELaXXZoRlFUQXA95JnYfNmrtvEwpXpUVfHC5Zt5eyz+S9buFD9tfv7Gfva16QC/+KLrB997TW5Ey3b49hjeVGqbfT0yDTkiy+qv35LCw9VCAWepZo/keAGsIj2ZHv8y79Y3rltjLfekqkEq9stc/H663IjQY4GlPv2caNXZBwzPcrKuHNta/mV2Nl46qn2XP+WW6QRkaPZ1vr1jH31q7nHxqhRjP3tb/bcZgqxs/G//kv9tXt7U3U7bOxYbvxk4bnnZOF+tsfs2ZY7pBijtVWO5ffes/EXScjgMYmTBo9g3z4ecr7gAh7FGD+eZ1RuuYUbAY7cgGi6p3oHitbYMVixv3Ej/9tPP53P64kTeVfUX/1K0RbjfIjdWpWVPBetinhc7l4oKeHhiTwkk3wNXLiQe+2HHMKDQl//Om/cbVvUT4vYrTV9utrVc9s2WYCUR4EL+vp40Olf/oUr9MMP55HzH/zApjRFOsmkXEl+/GO11162TFow559vSNY7d/KsxrnnMnbYYTxqfNJJfL3dvl3t7WVk0yYZEV2xQt1103PdDz5o6Mc+/JA7kbNn87kyaRI3hJ54Yr9Aqj2IduEjR6rNE3V1yTDnkCGGmqMmElxHXHkld4wOO4xHPy+9lDtTjjSUFx2xlW4Byw4ZPCZxw+DxBD/6ER+Yhx+uJh+fTMpdFSJa4mCvn4JIJvniDgyegaGA9nbZ2bq0lLFnn1VzXSfYsUPGwH/3OzXXXL9eRnYOOsi5tggq+N3v+H1XVXGjTQW//a0s1vvyl20OUynmW9/i9z1zppq0Z38/Yz/8odQdBZ/94CDxOGOHHqrWIN65k1uxYsy9/rqa6zrB+vUyZO/AEUZk8JgktAZPe7ssoi30YKq2NnkGBsCr5/xi7AiWL5f3/8ILhV3rgw+4IQnwRa3Q67mBSF2MGFFY6CCZZOypp2REcezYnGk9T5JMyiKZOXMKW+T7+nhvBTHWzjrL3gJgO9i2TRrEixcXdq3t22WrDEBhZ0AHEU0Zi4sLL6576y2Zx62psb9Y3g5E18uxY+1JA2sgg8ckoTV4GJN9VwDG7rrL/M8nEow99pjcKlNWZjgU7Ul+8AP+d1RXW0v+d3Qw9u//Lru+jRplY3WxzfT18Xg4wLffGkg/7cdnn8ldX6KIwK7iTrv55BO5yP/rv1rLD7z6qkzpCcfAkRylDYi+K5GItbM84nGe1xcFjUOGqIsmOk0yKVPXI0fyLVFmaWvjW9BEk5wjjrBvE4Xd7NvH2MEH87/j5JNt6AcgIYPHJKE2eBiTRYJCkRvZqt7ZybeVabedTZjAj/T1M9oiwfJyrpCNLEhbtvD6g7o6KY9zznH0SAJb2LCB96ABuAIz0jY+meQdNy+9VNZ6lJbycebXxV3w29/KcP28ecaqx+Nxft6SaLgE8N4UOYr5fUEyybeDib/p3/7NWA3Lnj28Gl0siACv1Heq8add7NsnHYSaGu4IGjGKN2zgshO7FgE+dxwpXrSRd9+VxuxRRzG2erUtv8bo+h1hjDEQ6OjoQG1tLdrb21FTU+P27TgPY8BPfwr8+Mf8dXU1cOGFwJw5wPjxQE0NEIsB27YB69cDy5cDr74KdHfzn6+tBW64Abj2WqCszN2/RQXd3cAFFwAvvsi/Pvhg4KKLgBNPBMaMAaJR/plNm4D33gNeew1YuZLLDgDGjQP+53+As85y7U9QyscfA2ecAXz+Of965kzgvPOAqVOBxkb+3t69wMaNwN/+BixbBvzjH/Ln580D7r4bOPJIx2/dFn77W+DSS4HeXqC0FDj7bGD+fGDSJKCuDhgYAJqbgU8/Bd56C3j5ZWD3bv6zZWXAd74D/OQnwNChbv4VakgmgR/+ELjnHv718OHAN74BzJ4NHHoo1yW9vcDmzcDatcAbb/D5Eo/zz48cCdxyC5dJcbFrf4Yydu/m42HlSv71EUdwecyYAYwaxcdLRwefS+++C/zlL/xZMGUKnyuzZrlx9+p5+23g3HOBlhYgEuHrzI03Kv0VhtdvW8wtHxL6CI/gtddkfx4jj3HjeP7e5hytKyQSPLozYoRxeZx8Mm/4YVfvGjfZt4+xK66Qqbp8j/JyvlvDr+m8fKxfLzt0G3nU1/NGS1u3un3n9rB0Kd8SZFQekyfzxlqObKNymHicb97I1XtE+ygq4mPp+ef9V/dohJYWxi66yLYiZorwmCT0ER4tySSP4Dz7LPD3vwNbtnCPJBoFmpqAww7jHv6cOcCxx3KrPch0dwN/+APw5z8D77/PPff+fqC8nEd7jjgCOOUU4LTT+NdBZ8cOYMkSPkbWrwd27eLvV1cDhxzCPdRZs7g8wjCX3n+fR3xWruRe+9693IsfMYJHOE44gcvjS18CSkrcvlt7GRjg0b3nngNWrQK2b+fzp7wcOPBAHvk86SRg7lxg4kS379Z+2tuBZ57hMlmzBti5E0gkgMpKYOxYYMIE4OSTeQRUREqDzIYNfAwoxuj6TQbPIGTwEARBEIT/MLp+Fzl4TwRBEARBEK4QKIPn/vvvx9ixY1FeXo6pU6firbfecvuWCIIgCILwAIExeJ5++mksXLgQN998M95//3186Utfwvz587Flyxa3b40gCIIgCJcJTA3PCSecgGOPPRYPPPBA6r0jjzwS55xzDhYvXpz356mGhyAIgiD8R6hqeOLxOFavXo158+bp3p83bx5Wil4IacRiMXR0dOgeBEEQBEEEk0AYPLt370YikUB9fb3u/fr6erS0tGT8mcWLF6O2tjb1GD16tBO3ShAEQRCECwTC4BFE0vrBMMb2e09w4403or29PfXYunWrE7dIEARBEIQLBKIL1ogRI1BcXLxfNKe1tXW/qI8gGo0iGo06cXsEQRAEQbhMICI8ZWVlmDp1KpYtW6Z7f9myZZg5c6ZLd0UQBEEQhFcIRIQHAK655hpcfPHFmDZtGmbMmIEHH3wQW7ZswXe/+123b40gCIIgCJcJjMFz4YUXoq2tDT/5yU/Q3NyMiRMn4sUXX8SYMJxtRBAEQRBETgLTh6dQqA8PQRAEQfiPUPXhIQiCIAiCyAUZPARBEARBBJ7A1PAUisjsUcdlgiAIgvAPYt3OV6FDBs8gnZ2dAEAdlwmCIAjCh3R2dqK2tjbr96loeZBkMokdO3aguro6a3dmK3R0dGD06NHYunUrFUPbDMnaGUjOzkBydgaSszPYKWfGGDo7O9HU1ISiouyVOhThGaSoqAijRo2y7fo1NTU0mRyCZO0MJGdnIDk7A8nZGeySc67IjoCKlgmCIAiCCDxk8BAEQRAEEXjI4LGZaDSKW265hQ4qdQCStTOQnJ2B5OwMJGdn8IKcqWiZIAiCIIjAQxEegiAIgiACDxk8BEEQBEEEHjJ4CIIgCIIIPGTwEARBEAQReMjgsZn7778fY8eORXl5OaZOnYq33nrL7VvyNW+++SbOPPNMNDU1IRKJ4LnnntN9nzGGRYsWoampCRUVFZg1axbWr1/vzs36mMWLF+O4445DdXU1Ro4ciXPOOQeffvqp7jMk68J54IEHMHny5FQzthkzZuDPf/5z6vskY3tYvHgxIpEIFi5cmHqPZK2GRYsWIRKJ6B4NDQ2p77spZzJ4bOTpp5/GwoULcfPNN+P999/Hl770JcyfPx9btmxx+9Z8S3d3N6ZMmYL77rsv4/fvuOMO3HnnnbjvvvuwatUqNDQ04LTTTkudlUYYY/ny5bjyyivx9ttvY9myZRgYGMC8efPQ3d2d+gzJunBGjRqF22+/He+++y7effddnHrqqTj77LNTCwDJWD2rVq3Cgw8+iMmTJ+veJ1mr46ijjkJzc3PqsXbt2tT3XJUzI2zj+OOPZ9/97nd17x1xxBHs3//93126o2ABgC1dujT1dTKZZA0NDez2229PvdfX18dqa2vZL3/5SxfuMDi0trYyAGz58uWMMZK1nQwbNoz9+te/JhnbQGdnJxs3bhxbtmwZO+WUU9gPfvADxhiNZ5XccsstbMqUKRm/57acKcJjE/F4HKtXr8a8efN078+bNw8rV6506a6CzaZNm9DS0qKTeTQaxSmnnEIyL5D29nYAQF1dHQCStR0kEgksWbIE3d3dmDFjBsnYBq688kp89atfxdy5c3Xvk6zVsmHDBjQ1NWHs2LH4+te/js8//xyA+3Kmw0NtYvfu3UgkEqivr9e9X19fj5aWFpfuKtgIuWaS+ebNm924pUDAGMM111yDk046CRMnTgRAslbJ2rVrMWPGDPT19WHIkCFYunQpJkyYkFoASMZqWLJkCd577z2sWrVqv+/ReFbHCSecgMceewyHH344du7ciVtvvRUzZ87E+vXrXZczGTw2E4lEdF8zxvZ7j1ALyVwtV111FT788EOsWLFiv++RrAtn/PjxWLNmDfbt24ff//73uOSSS7B8+fLU90nGhbN161b84Ac/wCuvvILy8vKsnyNZF878+fNTrydNmoQZM2bg0EMPxaOPPorp06cDcE/OlNKyiREjRqC4uHi/aE5ra+t+1i2hBrETgGSujquvvhrPP/88Xn/9dYwaNSr1PslaHWVlZTjssMMwbdo0LF68GFOmTMHPf/5zkrFCVq9ejdbWVkydOhUlJSUoKSnB8uXLcc8996CkpCQlT5K1eqqqqjBp0iRs2LDB9TFNBo9NlJWVYerUqVi2bJnu/WXLlmHmzJku3VWwGTt2LBoaGnQyj8fjWL58OcncJIwxXHXVVXj22Wfx2muvYezYsbrvk6ztgzGGWCxGMlbInDlzsHbtWqxZsyb1mDZtGr75zW9izZo1OOSQQ0jWNhGLxfDxxx+jsbHR/TFte1l0iFmyZAkrLS1lDz30EPvoo4/YwoULWVVVFfviiy/cvjXf0tnZyd5//332/vvvMwDszjvvZO+//z7bvHkzY4yx22+/ndXW1rJnn32WrV27ln3jG99gjY2NrKOjw+U79xff+973WG1tLXvjjTdYc3Nz6tHT05P6DMm6cG688Ub25ptvsk2bNrEPP/yQ3XTTTayoqIi98sorjDGSsZ1od2kxRrJWxbXXXsveeOMN9vnnn7O3336bnXHGGay6ujq17rkpZzJ4bOYXv/gFGzNmDCsrK2PHHntsalsvYY3XX3+dAdjvcckllzDG+LbHW265hTU0NLBoNMpOPvlktnbtWndv2odkkjEA9vDDD6c+Q7IunMsuuyylHw444AA2Z86clLHDGMnYTtINHpK1Gi688ELW2NjISktLWVNTE1uwYAFbv3596vtuyjnCGGP2x5EIgiAIgiDcg2p4CIIgCIIIPGTwEARBEAQReMjgIQiCIAgi8JDBQxAEQRBE4CGDhyAIgiCIwEMGD0EQBEEQgYcMHoIgCIIgAg8ZPARBEARBBB4yeAiCIAiCCDxk8BAEEXgWLlyIc845x+3bIAjCRcjgIQgi8KxatQrHH3+827dBEISL0FlaBEEElv7+flRVVaG/vz/13vHHH4933nnHxbsiCMINSty+AYIgCLsoLi7GihUrcMIJJ2DNmjWor69HeXm527dFEIQLkMFDEERgKSoqwo4dOzB8+HBMmTLF7dshCMJFqIaHIIhA8/7775OxQxAEGTwEQQSbNWvWkMFDEAQZPARBBJu1a9di8uTJbt8GQRAuQwYPQRCBJplM4sMPP8SOHTvQ3t7u9u0QBOESZPAQBBFobr31Vjz99NM48MAD8ZOf/MTt2yEIwiWoDw9BEARBEIGHIjwEQRAEQQQeMngIgiAIggg8ZPAQBEEQBBF4yOAhCIIgCCLwkMFDEARBEETgIYOHIAiCIIjAQwYPQRAEQRCBhwwegiAIgiACDxk8BEEQBEEEHjJ4CIIgCIIIPGTwEARBEAQReP4/kwqh8OmXwtUAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.99 ms ± 13 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" - ] - } - ], - "source": [ - "# Cython with complex diffeq\n", - "# 0.5.0 1.99ms\n", - "\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff3, time_span, initial_conds_complex,\n", - " rtol=rtol, atol=atol, rk_method=1)\n", - "print(message)\n", - "diff_plot(time_domain, np.real(y_results))\n", - "diff_plot(time_domain, np.imag(y_results))\n", - "\n", - "%timeit cyrk_ode(y_diff3, time_span, initial_conds_complex, rtol=rtol, atol=atol, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "ca01607b", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "687 µs ± 3.62 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Numba with complex diffeq\n", - "# >>0.5.0 687us\n", - "\n", - "time_domain, y_results, success, message = nbrk_ode_tester(y_diff4, time_span, initial_conds_complex,\n", - " rtol=rtol, atol=atol, rk_method=1)\n", - "print(message)\n", - "diff_plot(time_domain, np.real(y_results))\n", - "diff_plot(time_domain, np.imag(y_results))\n", - "\n", - "%timeit nbrk_ode_tester(y_diff4, time_span, initial_conds_complex, rtol=rtol, atol=atol, rk_method=1)" - ] - }, - { - "cell_type": "markdown", - "id": "ea37ce99", - "metadata": {}, - "source": [ - "### Check DOP" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "7a2f52af", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAGwCAYAAACtlb+kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACUHElEQVR4nO2deXxU1d3/P5NMdpJAWLIIIiqiCKIFBWlVEMRi1apt1dpfq492sSpPqdr2QZ8+pa2VPrYuFR/tY8uDVmuxi1RbV6iKRVwAQQGtgqKsIWzZk5kkc35/nJw5905mucu5c7fv+/UaZphMbm5uvvd7Pt/lnBNhjDEQBEEQBEEEmAK3T4AgCIIgCMJpSPAQBEEQBBF4SPAQBEEQBBF4SPAQBEEQBBF4SPAQBEEQBBF4SPAQBEEQBBF4SPAQBEEQBBF4om6fgFdIJBLYs2cPKisrEYlE3D4dgiAIgiAMwBhDW1sbGhoaUFCQOY9DgqefPXv2YNSoUW6fBkEQBEEQFti5cydGjhyZ8eskePqprKwEwC9YVVWVy2dDEARBEIQRWltbMWrUqOQ4ngkSPP2IMlZVVRUJHoIgCILwGbnaUahpmSAIgiCIwEOChyAIgiCIwEOChyAIgiCIwEM9PARBEAThA/r6+tDT0+P2aeSdoqIiFBYW2j4OCR6CIAiC8DCMMTQ2NqK5udntU3GNwYMHo66uztY6eSR4CIIgCMLDCLEzYsQIlJeXh2pxXMYYOjs70dTUBACor6+3fCwSPARBEAThUfr6+pJiZ+jQoW6fjiuUlZUBAJqamjBixAjL5S1qWiYIgiAIjyJ6dsrLy10+E3cRv7+dHiYSPARBEAThccJUxkqHit+fBA9BEARBEIGHBA9BEARBEIGHBA9BEARBEIGHBA8RSjo73T4DgiD8SCLh9hkQViHBQ4SOH/8YqKoC1qxx+0wIr9HUBIwfD9x2m9tnQniRG28EamuBXbvcPhPCCiR4iNDxz38CfX3A88+7fSaE13j1VeC994Bf/9rtMyG8yNNPAwcOACtWuHgSjAEdHe48GDN1qiNHjsT999+ve2/NmjUoLy/HJ598ovKqGIIWHgwRhw/zzIaCLUl8zaFD/Pndd909Dy/x+uvAunXA9dcDYZ79Klbu370bOHgQCOk6bzoYA958Ezj+eKC62u2zcZfDh/nz5s0unkRnJzBokDs/u70dqKjQvdXRAfT0AIMHD/z4tGnTsHbt2uT/GWOYP38+5s+fj9GjRzt8sgOhDE9I+MtfgPp64AtfcPtM3Ec4rS1b3D0Pr7BzJ3DOOcC8ecAbb7h9Nu4ibAMA3nnHvfPwErffDkybBtxwg9tn4i6MeUTweIjubuD994Ft24BYbODXUwXPI488gh07dmDBggUAgL///e8YN24cxo4di9/+9reOny9leELAH/8IXHEFL+OEfUADpNPauhWIx4HiYnfPx00Y4wNZezv/f9h7E7R7M77zDjBzpmun4gmeew744Q/56/fec/dc3KajA+jt5a83bXLxRMrL5Q3rxs/uhzFg+3bZxB2PAyUl+o9PmzYNP/jBD9De3o6CggLccsstuO2221BZWYne3l7ceOONeOmll1BVVYVPfepTuOSSS1BTU+PY6ZPgCThtbcBVV3GxA/A0PWPhLVv09QEtLfx1by8XPSee6O45ucny5cBTT8n/Hzjg3rl4AW2G5+233TsPL9DczAMl0bZBtiFf793rYskzEhlQVnKDffu4CBQIMahlypQpKCwsxFtvvYWVK1di6NChuPrqqwEAb775Jk488UQcccQRAIDzzjsPzz//PL785S87ds5U0go4+/YBXV1AtF/a9vRwERRWtBE8QGWtpUv5s7CPsA9qqRmeMLNhAx/kRQY07LahFTwA+Q7RCymC53SCp7S0FJMmTcITTzyBX/7yl7jrrrtQUMBlx549e5JiB+ANzrt373b0nEnwBByhwIcOBfo3nMXBg+6dj9uIm1QQ9sZlMcAfdRR/pkFNvt68Ob0TDwvCdxx5pPx/d7d75+M2qYLH1bKWBxBVAyGIM90r06ZNw7333ovZs2dj1qxZyfdZmhlfTu8XRoIn4AinVVEBDBvGX4d5UKMoTY9oBSDBw9HaRyzGS55hRfiOI46QMzvDHCyl+o6wNy6L3h3Rt5NJ8Jx88smIRqP4xS9+oXv/iCOO0GV0du3ahfr6eidONQkJnoCjFTyi3hxmp5Wa4Qm74BH2QYKHIzJeYoAPcx+PEMODBknfEWb7IMGjRwieXBme3//+97juuuswbtw43funnXYaNm/ejN27d6OtrQ3PPPMMzj33XAfPmARP4KEMjx7htI49lj+LmVphRdiHWBIjzLYBSPuYPJk/h7mPh3yHHmEbEybw582bTa/DFxgYy17SSiQS2LdvH26//Xa8//77+PGPfzzgGNFoFHfeeSdmzpyJU045Bd/73vcw1OEucBI8ASddhifMTktkeE46CaislDO1wkqq4Nm/371z8QIiw3PWWfw5zBkeYRuDBknBE+bssBA8p5/OM4DNzXyByjCiFXrpBM8rr7yC+vp6PProo3jiiSdQnWHFygsvvBAffPABtm3bhm9+85sOnjGHBE/AEWlpbZRGTguoqeF7JgHhblymDI8kFuMzGgHg05/mzx984N75uA1lePQI31FbC4jqTFjLWtoNVNP18MyYMQOJRALvvvsupk6dmt+TywIJnoBDGR49IsMzZAhfKh8I76AWj0snJQRPZ2d4d5IX2Z1IBDj6aP17YUQbLJHvkIJnyBB5v+zZ4975uIkoZ0UiQFERf+2HGY208GDASRelUYaHZ3hElBLWQU27aFh9PXdcPT3cPjQLqoYGYRvV1XxQA/gilWFdqFPrO8TvT4KH24bYN0osYho2hO8sKJBrePX18fcLPJxG8fCpESqgtLQebYZHlJXD6rSEbUSjvA4fdvsQwnfwYGkbPT2yzBU2qIdHj1bwhN13CMFTWKjfjNrrWR4SPAGHpqXr0WZ4wu60tLYBkODRDmiDBslIleyDbANIL3jCmh3WZngiEZnlIcFDuAo5LT3pMjxhdVokePRoMzyRCAnidBMewmobAGV4tGgFD0CCh/AI2rS0tvEwrOtHUIZHorUNgAY17YAGkCCmCQ8SxkjwaBFNyyR4CE+RLsMTj+sbVsME9fBItBE8QIJHm+EByD7S9fCE1TY6O3k/F0BNywBleAiPohU85eVyzYQwOq7ubrn5IWV4Bpa0hg/nz2G0DWBghifsg1q6YKmzM5xN3MI2olF+PcLuO7RNywAJHsIjpE4tDfNsC+G0Cgr4Ksthd1rUw6MnU0krrPahzQBWVclBLcy+Y8gQ6u8CqKRFeBQa1CTaclZBgXRa2nR1mMhkG2HdXiJTSYt6ePTBUhh9B/V36aGSFuFJUge1ME9Nz+S0AKC1Nf/n4zYkhvVQSUuSSMgVt6mpPXv2L4wTQIyWtEaOHIn7779f996aNWtQXl6OTz75xOGzHAittBxwaFCTiAxPTQ1/LirifU2dndxxObxRr+cg29BDTcsSbZ8OBUuZBU9PD+8LLCvL37kw5t72L+XlPNuXmuHJtL3EtGnTsHbt2uT/GWOYP38+5s+fj9Fif448QoIn4FCGR5LqtADuuITgCRvZBE8Yt1OgsoVE9O8AcjAPsyBOtY3KSn5/MMZ9Rz4FT2enzLrlm/Z27i+M9vBMmzYNDz30UPL/jzzyCHbs2IEFCxYAAC6++GK8/PLLmDVrFv785z87fPZU0go0iYSM1CiK1/fwCMIcxWcSwz094SzxUYZHImyjvFwOamH2HamCp6CAN3ID4bQPoz0806ZNw3vvvYf29nZ0dnbilltuwW233YbKykoAwL//+7/jd7/7XZ7OmjI8gUab9kwd1MLstERJC6BBDZC2IZYtiMX49dD2OAWdREIKHurhGWgbAPkOYGCw1NKS/wxgebk+A5fvnw0MFDyilyeR0G8gOmXKFBQWFuKtt97CypUrMXToUFx99dXJ482cORMvv/xyfk4eJHgCjXZxQZFyFYO9uIHDRLYMTxjLFqkrLQM8at2/P3wZnrY22XxKs7TS24a4LmGzDSCz4AHyL4gjEb0QdYPUpmXtBqJ9fVLwlJaWYtKkSXjiiSfw4IMP4m9/+xsKXNxOnUpaASZdWlqkYdva3DknN/GS0/IC6aL4/kxz6OxD2EZpKX8AZBtAetsgwcMJs32k9vBEIvK1EEOCadOm4d5778Xs2bMxa9as/J1kGkjwBBhyWnrSRa1hdlqpW0sAUhCHzT5S+3e0r8k2OBQskeARpJa0AJnlEWJIcPLJJyMajeIXv/hFfk4uC64LngceeAAnnXQSqqqqUFVVhdNPPx3PPvts8uuMMSxcuBANDQ0oKyvDjBkzsGXLFt0xYrEY5s2bh2HDhqGiogIXXnghdu3ale9fxXOkEzxhdlqxGH8W22sA4XZalOGRZBvQWlsHRq1Bh2xDT7YSXxh9R2pJC5DiJ1Xw/P73v8d1112HcePG5efksuC64Bk5ciR+/vOfY926dVi3bh3OPvtsfP7zn0+KmjvuuAN33XUX7rvvPqxduxZ1dXU455xz0Ka56+bPn4/ly5dj2bJlWL16Ndrb23H++eejL/XKhwzK8OgRgkeULAASPABleAD5+4rfH5C2kUi41yTqFpn6u4Dw2QZAviOV1JIWkNq4nMC+fftw++234/3338ePf/zjtMc599xz8aUvfQnPPPMMRo4cqVuzxwlcb1q+4IILdP//2c9+hgceeACvv/46xo8fj3vuuQe33norLrnkEgDAww8/jNraWjz22GP41re+hZaWFixZsgSPPPIIZs+eDQB49NFHMWrUKKxcuRLnnntu2p8bi8UQE1YMoDWAd3G6tLQ2SgvbWiuU4dFDglgiNpXVrqdSWgoUFwPxOLcPrRgKOpTh0ZPNd4StqZ2x3CWtV155BWeffTaOP/54PPHEE6jOMOXz+eefd/hs9bie4dHS19eHZcuWoaOjA6effjq2b9+OxsZGzJkzJ/mZkpISnHXWWVizZg0AYP369ejp6dF9pqGhARMmTEh+Jh2LFi1CdXV18jFq1CjnfjGXyBaladfoCQtiUCPBw6GSpyTdgBbmTSKzBUthE8MA+Q4t2q00MgmeGTNmIJFI4N1338XUqVPze4JZ8ITg2bRpEwYNGoSSkhJce+21WL58OcaPH4/GxkYAQG1tre7ztbW1ya81NjaiuLgYQ7TF95TPpGPBggVoaWlJPnbu3Kn4t3KfdAOa2AgQCJ/jSjeohbkOTxkeSTrbAMIbxWcTw+3t4etpouywRPu31wqeTD08XsL1khYAjBs3Dhs3bkRzczP+8pe/4Morr8SqVauSX4+k1F0YYwPeSyXXZ0pKSlCS6t0CRjqnFYnwQa21lUfxdXXunJsbkNOS9PTIHeIpw5Nb8ITNPtJlh4UYZox/Xfw/DFCwJBGCRjsVHdD38HgVT2R4iouLceyxx2LKlClYtGgRJk2ahF/96leo6x+NUzM1TU1NyaxPXV0d4vE4DqespKf9TFhJJ3gAiuKp8VC/KCVleDILnrAOaul8R1mZHNRIEIfXd6Tr3wEyT0v3Ep4QPKkwxhCLxTBmzBjU1dVhxYoVya/F43GsWrUK06dPBwBMnjwZRUVFus/s3bsXmzdvTn4mrOQSPOS0wuu0hG1Eo7wxV0AZHv37YbWPdD08IjsMhMs++vrkIO5msMS0zTMukm5Kuvb/TgkeFb+/6yWtW265BXPnzsWoUaPQ1taGZcuW4eWXX8Zzzz2HSCSC+fPn4/bbb8fYsWMxduxY3H777SgvL8cVV1wBAKiursY111yDm266CUOHDkVNTQ1uvvlmTJw4MTlrK6xkEjxhHdSyNR52dvIST1FR/s/LDbS2oa38hjXDk842AOrhSec7mpvDZR+aybyuzNIq6ndKnZ2dKMvntuwZyJThcbqHp7N/c8giG07adcGzb98+fPWrX8XevXtRXV2Nk046Cc899xzOOeccAMD3v/99dHV14brrrsPhw4cxdepUvPDCC8ndVgHg7rvvRjQaxaWXXoquri7MmjULDz30EApTJWjIoJKWnnRRvHaqcUuL3BE66KSL4IHwimEqaelJ18MDhDPDk0vwtLQ4u8RHYWEhBg8ejKamJgBAeXl5zh5WJ9HO7hWBAiCFUE+P/n27MMbQ2dmJpqYmDB482Na47rrgWbJkSdavRyIRLFy4EAsXLsz4mdLSUixevBiLFy9WfHb+hkpaEsbSD2pFRXyvsc7OcAkeEsN6qKSlh+xDIgbvggJeAhYI2+jr4/7DyQ09RT+rED1u0tEBHDjA7xWt9ujs5O9rN+JVyeDBg5PXwSquCx7COXKVtMLktMSMJEBfhwe44xKCJyxQuVMPTUvXQxlASSbbGDSIi6BEgvsOJwVPJBJBfX09RowYgR6tM3OBJ54AbrkFOPNM4MEH5furVwPXXguMGwc8+aTan1lUVKSkYkOCJ8BQhkeSKS0N8EFt714SPEA4I3iASlqpkO+QZLINsTDl4cPcPhoanD+XwsJC11s1Dh0CPvmEl7a0weOgQfz9SGRgUOkVPDlLi1ADRfESbU2Zyha5baO7W58VCzpU0tKTqYcnjNnhTLYBhDMD6GcxTIInwFAULxFOKxodOLsgjINaLtsAvO24VEOCR4+fBzXVGBE8YbIPP5c7SfAEGHJaEnJaejLZRlGRvEZkHzLDEaZr0dcnM6LU/5d+wVKBHwZ51eQaV+JxfQuBlyDBE2CoaVmSzWmJG1VELmEgk20A4baPVMETZtsAKFgCsgdLYbwefs4Ok+AJMJThkZDT0pOpRwMI5/XIJXjCdC2EbaRrPg1jOTzTopSAvH/CKIhTx5XCQr7EB+Bd+yDBE1AY41OtgcyNh2Fy4tmcVpgHNcrwcHKVtHp6vJumV43wG+XlAxfTC6PvoGBJjxHf4dXrQYInoHR1ycWfqGk5u9MKY5QmVktNt1J9GJ14LsEDhMc+jJR/yTY4YbweInjM5ju8OraQ4Ako2jq8SDMKwniTktPSk+16UIZHEo1Kxx4W+4jH+bN2U1kB2YaeMAZLwj6y+Q6v3iskeAKKEDxlZQOnYWudlkc24HWcbFFrmJ1WukGNBKCesNkHBQd66HroEdcjm+/wqiAmwRNQjKQdtdNPgw718OgxEqV51Wk5AZVxJEbEMNkGJ4zLFvg5WCLBE1CyqXBtX4JXDVM1FKXpMRKlhfF6ZMvwhOV6GBHD7e3hyQ4bCZbCkv0D/B0skeAJKNlUeEGBdOJeNUzVUMlCD/Vp6DEiiMNiH0bEcCIhZ3MFHQqW9Pg5WCLBE1CyDWiA9w1TNeS09ND10EMlT0k231FeLnsCwyKIKVjS4+dgiQRPQMmWdgS8b5iqoR4NPX52WqpJJORGqVTSyu47IpHw3S8UHOjx8/UgwRNQsqUdAe8bpmqMrJYaj0tnH3T83HioGu3fnEpauX1H2ASxnwd4J/BzsESCJ6BQSUuPkbQ0EL5BzY+Nh6rRrqBMgxr5jlSopKUnWwbQ67ZBgiegUElLTzanVVwsnXtYHBdleCRawZNtVmPYrkcm3xG2qelGyuFhyg7TOjyE5zBa0vKqYarGqBMPy6BmJEoLi/gTtlFUNHCRTiB81yNXhsfrq+mqxkg5HAjP9TASLHn1XiHBE1CMpqW9apiqIcGjx8g6TWG7FmQbnFzZ4bCVcbLZR1GRfD8M16O3lzf5A1TSIjwE1eH1iCgtXVoaCJ8TNxKldXby1biDTi7BE1YBSL6DQ4JYoi3bZQuWvOpHSfAElFxRWphuUoCcVipGm7i1m9AGFaO24VUnrppcwVJYBSBlvIzPaPSqbZDgCSi5orQw3aQACR4tjGUf1EpLgcJC/joM14MyPHpIAOoh3yHRNvgXFQ38urgWXV28/OU1SPAEFCpp6aEoTdLXJ/dBosXlaEBLhXyHHrIPibCNoiLuJ1LxenaYBE9AobS0HnJaklzTsIFwCUDKaOgh36GHgiVJrlaJkhIgGuWvvWgfJHgCitEenjDcpAA1LWvJ1XgIhFMAUkmLQwJQTy7fEcZ7JZPf8Hp2mARPQKGZFnoowyMRgicSkdFYKmEa1IzaRne3N/sSVEMlLT3kOyS5bAPwdvBIgiegGE1Le9EonYCclkQrhtPV4YFwZTWM2gYQjvvF6Do8YbANgEpaWnJdC8DbvpQET0Chael6yGlJjERpYbKPXLZRXCxnpITpetCipRwKliR+9x0keAKKGaclVs4MMuS0JGaitDAMan6PWlVDJS091OMlyRVIA94OHknwBBSjJS2Ar6gbdKjxUGKmDh+G65FtrySBl524amiA10NN3JJcgTTgbV9Kgieg5BrUysvlRoleNEzVUElLYiRK87LTUk223bAFYboeRjM8HR3Bzw7n2jsKINtIxcu+lARPQMk1qEUi4YrUqKQlMROledFpqYZKfHqMCh7Am4vLqURk/wBa0gLwf7BEgiegGBnUwnSjUoZHQiUtPUYED10PSWlpeLLD2kU6KViikhbhUfzeTa+Svj65fgo5LXNRWhgEIDUt68nlO7SLywXdPoRtFBbK/eVSCaNt+LXfjQRPQCHBI9FGabmaljs7uUAKMmayf0G3DYBKWqmYGdSCbh9msn9hsA3K8BCexO9KXCVG0tJe3/ROJSSG9VBJSw/1eEko+6fH776DBE9A8bsSV4lW8IgF5FIpLZUp67BcD8pocGhQ0+P3QU0lZmyjqyv4W4/4PZAmwRNQyGlJtE4r01YKXt/0TiXUtKyHBKAeynhJzFwLIPjZYb8H0q4LnkWLFuHUU09FZWUlRowYgYsuugjvv/++7jNXXXUVIpGI7jFt2jTdZ2KxGObNm4dhw4ahoqICF154IXbt2pXPX8VT+F2Jq8SI0wLCcz38PrVUNTTA6zETLAX9Xsm1YCnA7UZswht0+/B7IO264Fm1ahWuv/56vP7661ixYgV6e3sxZ84cdKRI5c9+9rPYu3dv8vHMM8/ovj5//nwsX74cy5Ytw+rVq9He3o7zzz8ffUHvQM2A35W4Sow4LSA818NsjwZjzp+Tm1BJSw8JYokR29CuaRZ0Aej3QDrq9gk899xzuv8vXboUI0aMwPr163HmmWcm3y8pKUFdXV3aY7S0tGDJkiV45JFHMHv2bADAo48+ilGjRmHlypU499xznfsFPIrflbhKKMOjx0xJizE+c62iwvnzcguaiSPp65OzFKnkadx3VFYCzc3huR5+HVdcz/Ck0tLSAgCoqanRvf/yyy9jxIgROO644/CNb3wDTU1Nya+tX78ePT09mDNnTvK9hoYGTJgwAWvWrEn7c2KxGFpbW3WPIOH3JcBVYsZpAd68UVVi5HpUVMh+J7KP8NiG8BsAlbQA8h2pmMnweHHrEU8JHsYYbrzxRnzmM5/BhAkTku/PnTsXv//97/Hiiy/izjvvxNq1a3H22Wcj1m+NjY2NKC4uxpAhQ3THq62tRWNjY9qftWjRIlRXVycfo0aNcu4XcwFKS0vIaekxIobDtPUICR6JVvDQ9aDscCpmMjwiO+wlXC9pabnhhhvwzjvvYPXq1br3L7vssuTrCRMmYMqUKRg9ejSefvppXHLJJRmPxxhDJMO0nAULFuDGG29M/r+1tTUwoocx/6ceVUJOS48RwQPw69HWRvYBhMc2jCzhAJAYTiUsvtSI7ygv5wETY/x6aGexuY1nMjzz5s3DU089hZdeegkjR47M+tn6+nqMHj0aW7duBQDU1dUhHo/j8OHDus81NTWhtrY27TFKSkpQVVWlewSFvj7ZaEolLWpaTsWsEw+6fVCGRyIGtKKizEs4AGQbqYTNPvzaxO264GGM4YYbbsATTzyBF198EWPGjMn5PQcPHsTOnTtRX18PAJg8eTKKioqwYsWK5Gf27t2LzZs3Y/r06Y6du1ehtLQeclp6jGZ4wnI9zAgeL/YlqITuFT0iWKLsMMdI5QDwrn24XtK6/vrr8dhjj+HJJ59EZWVlsuemuroaZWVlaG9vx8KFC/GFL3wB9fX1+Pjjj3HLLbdg2LBhuPjii5Ofveaaa3DTTTdh6NChqKmpwc0334yJEycmZ22FCbONh14zStVQSUuPkSgNCE/ZwsigJu4VgNtHgBLCOsyUO4Hg24bwHZQd5hj1HV69Hq4LngceeAAAMGPGDN37S5cuxVVXXYXCwkJs2rQJv/vd79Dc3Iz6+nrMnDkTjz/+OCo1Xujuu+9GNBrFpZdeiq6uLsyaNQsPPfQQCjNtcRtgtHX4aJa/cFgGeIpa9ZiN0sg+5NYjfX3cPoIueKjcySHfocesIPaafbgueFiOVc3Kysrw/PPP5zxOaWkpFi9ejMWLF6s6Nd+iNUojdfi2Nt7zk+2zfsZoWpqclp6wRfG5+hKqqoDDh4HWVuCII/JzbvnGqBgm29AjBHDAVjcZgN9LWq738BDqMRulJRJ847ugYjQtHTanRVG8fkYjCWLq70qFbEOP30taJHgCiFEVrl09N8iDGjktPTSoSXp65GuK4q2VtIK89QhlePSYzQB6bVwhwRNAjA5oBQVS9AR5UCOnpYdKWhJtvxs1ppof0IKeHaZyuB6/B0skeAKIUaMEvGuYKvH7TaoaKmlJtIKHBLHxe0WbHQ7y/ULBkh6zMzy95jtI8AQQo0YJeNcwVWL0eoTNaZEAlANaYSF/ZCNM1yPXvVJQEA7fQeVwPdS0THgOo0YJeNcwVWJ2gO/u1vd2BA1ah0didEADpCAO8vUwkx0Og31QsKSHmpYJz0FOS4/ZqASg6wGEq6RlRPCI6xHkQc1Mdtirg5pKrGRDg9zE7fd1eEjwBBArTstrhqkSozdpcbFsXCUnHq4BjTI8HCvZYfId0jZ6evR9YUGDSlqE56CmZT1WrkeQo3jaakNCtqGHssN6zGY0gHBcDyppEZ7BTJRGTktPGGrxlOGRUHCgx0qJL8jXw6h9FBbKmWtB9R19ffwBUEmL8BBWnLjXDFMlNKjpob4ECYlhPeQ79FBPk0S7KTVleAjPQDepHhrU9JgtafX26p1dkCAxrIdKWnrId0i0PsCv2WESPAHESkmLojSOV29UlVBfgoQGND1U0tJDgliibcYuKsr+We244qXsMAmeAEI3qR4a1CR9fXw7ACD3oFZYCJSV8ddBtQ+6V/RYyfCEIVgi3yGvRVERX3gyG+Je6euT23N4ARI8AYScuB66HhJtlEZ9GjSgpULZUD3kOyRmKgde3ZiaBE8Aoa0l9NCgJjFThweC78StNumKLFnQoFXa9ZDvkJi5FoWFQHk5f+0l+yDBE0DIaemhKE1ipg4PBF8Qm7lXxIAGBPd6UElLD/kOiZlAGvDm9SDBE0DoJtVDUZpEey0ikdyfD7p9mLGN0lK5wWhQrwc1Lesh3yExExwA3hTEJHgCCJW09JAAlAQhSlOJGduIRIK/vQTdK3roekiC4DtI8AQQukn1UJQmCUKUphIztgEEf3sJKmlJtDMazfiOoPpSq/eKl64HCZ4AYqWHJ8ib3pEAlATBaanEbNQa9EGNSloSqzMagyqGgxAskeAJIFaiNMBbhqkSyvBIgpCWVgllePRYDQ68tLicKszOaAy6GA6C7yDBE0DMGGY0ypsxAW8ZpkoowyOxGqUF9XqYFTw0qEmCvvWI9ncyMqMx6GLYrO/woi8lwRNAgmCYqrBahw+q06IBXg9lePRY2ZYGCKZ9aFcWNjKjMSz3itEMjxeDJRI8AcSsE/dirVUVVtPSsVgwo1YzPRqAvB4tLc6cj9tQT5MeM9cjGg321iMkhvVYDZa8dD1I8AQQcuISqysLA8G+HkZto7qaP3vJaakkCE5cJWYFcZAHeTvZ0CD2NJmtHAjf4aVgiQRPALHaXBZkpwUYq8Nro9YgXw+jtuFFp6USCg70kCCWWLWNoM54teo7vGQbJHgCiFUl7iXDVIW4FtFo7h1+BUEe1MzaBpW09AQ9w0OCWGK1ZwUIpu+wKoa9ZBskeAJIEAxTFWavBRDsQY0ieD2U4dFDglhi1jYKC+Uu4UG8X4JgGyR4AojVxdS8ZJiqMHstgGAPahTB66FZa3pIEEvsBEtBtI8g+A4SPAGEMjwSyvDosRqlxWLB7kugmTicIAxqqrDiO4JsH0FolSDBE0CCYJiqsOO0ghylmR3gAbIPINgRfCLBFxEEKFgCKMOTip2mZa/MWiPBE0AowyOhDI8es9OOCwul6AmifVhdpDOItmF2CQcgHOVwyvBwrAYHfX1AR4cz52QWEjwBhNLSEsrw6CEBqIc2D5VoS5Z+nnqsCsrw6DEbHFRU8IAJ8M7YQoIngAShm14VNMDrsdLETYJYohXDYsuSoGB2zSqAbCOVMGR4jPqOSMR7vpQET8BgjEpaWijDo8esGAZIEGsR1wLwTppeFdq9o4yuWUW2oSfIGR4r18NrYwsJnoAhmg4BaloGKMOTih2nRdcDKC2VafqgXQ8rYphsQ0+QMzxm+/8AEjyEw2jT0tTDQ04rlSA4LZWYtQ9tmj5oUXwQIniV2MmGBs02AHvBo1fsgwRPwNA2HprN8HR18X1gggSlpfUEwWmphASxhPq79JBt6AlCBpAET8AQN2kkIlPvudCutRI0x0UlLT1U0tJDPV4SOxkNL621ogoKlvQEQRCT4AkYWqOMRIx9T1ERUF7OXwdtUKMBTQ+VtPTQoCaxI4b7+oDOTvXn5CaU4dEThJKn64Jn0aJFOPXUU1FZWYkRI0bgoosuwvvvv6/7DGMMCxcuRENDA8rKyjBjxgxs2bJF95lYLIZ58+Zh2LBhqKiowIUXXohdu3bl81fxBFaMEvCeYaqCMjx6qKSlhwY1iRUxXFEhZ3QFzT5IDOsJwgxP1wXPqlWrcP311+P111/HihUr0Nvbizlz5qBDM+fzjjvuwF133YX77rsPa9euRV1dHc455xy0aaxq/vz5WL58OZYtW4bVq1ejvb0d559/Pvr6+tz4tVzDilECJHi0BDnDYyctHbQBvq9PrqVDg5q1e0XbxE2+I7hiGAiG74i6fQLPPfec7v9Lly7FiBEjsH79epx55plgjOGee+7BrbfeiksuuQQA8PDDD6O2thaPPfYYvvWtb6GlpQVLlizBI488gtmzZwMAHn30UYwaNQorV67Eueeem/ffyy2sZnjIaUnEtYjHuYA0c4N7HTuNh0G1DYAGNcDagAZw+2huDu71IDHMoZKWA7T0X5mamhoAwPbt29HY2Ig5c+YkP1NSUoKzzjoLa9asAQCsX78ePT09us80NDRgwoQJyc+kEovF0NraqnsEATtOCyCnBQCDBsnXQXNcVNKSWBU8QR3UKDusx4ov1YrhoDVxB6H/z1OChzGGG2+8EZ/5zGcwYcIEAEBjYyMAoLa2VvfZ2tra5NcaGxtRXFyMIUOGZPxMKosWLUJ1dXXyMWrUKNW/jiuQ09JjZYCPRoPbxG3HaQXtWljZSgEIfoaHfAfHTnDQ26tfIiQIBCFY8pTgueGGG/DOO+/gD3/4w4CvRVKmHDHGBryXSrbPLFiwAC0tLcnHzp07rZ+4hyCnpcdqxiuofTxBcFqqENciGjW+lQIQ/AyP2XslqE3+drPDQbsetA6PQubNm4ennnoKL730EkaOHJl8v66uDgAGZGqampqSWZ+6ujrE43EcPnw442dSKSkpQVVVle4RBOyWtII6qFntafLKjaoKO3X4oG2YaVcMk21wyHdICgqk6AmaIKZ1eBTAGMMNN9yAJ554Ai+++CLGjBmj+/qYMWNQV1eHFStWJN+Lx+NYtWoVpk+fDgCYPHkyioqKdJ/Zu3cvNm/enPxMWNBuAGiGoEfxZp14UDM8dkpajAHt7erPyS2sln+DmuEhwaOHgiU9QWhadn2W1vXXX4/HHnsMTz75JCorK5OZnOrqapSVlSESiWD+/Pm4/fbbMXbsWIwdOxa33347ysvLccUVVyQ/e8011+Cmm27C0KFDUVNTg5tvvhkTJ05MztoKC1bT0l5LParC7qAWtOthxWmVlHAB3dPDHVdAkqG2xXDQbMOu7/DKoKYKCpYkiYTcmNqMfQhfEYt5Y8ar64LngQceAADMmDFD9/7SpUtx1VVXAQC+//3vo6urC9dddx0OHz6MqVOn4oUXXkClZk+Eu+++G9FoFJdeeim6urowa9YsPPTQQyg0ur9CQCCnpYeclh4raelIhNvHgQPBGuTtRvBBtQ0KDjh0PSR2ZzQC/HoMH67unKzguuBhBubuRSIRLFy4EAsXLsz4mdLSUixevBiLFy9WeHb+gwSPHnJaeuzM4jtwIFj2QWJYD/X/6SH7kFgVPIWFvKepvZ3bh9uCx/UeHkItJHj0UNlCDy1MKSExrIeWtNBD9iHRTrH3s32Q4AkYNLVUD5UtJH19/AFQjxdgXwy3twdz1hoN8BzK8EisLuEAkOAhHISiND2U4ZFYTUsDwbQPuwM8Y4Bmyz/fQ9lhPTThQWL1WgDeuh4keAKG3Tp8UNdaoQyPXvBYzQAGaVCzahulpbw3AQimfZAY5lCGR2J1XAG8ZR8keAKG3SiNsWDeqBSl6evwZtdpopKWJBIJdgaQBA+HfIfE6rUAvGUfJHgChlXBI9ZaAbxhmKqgKE2iXZQyx64sA/CS01KFHScexAyg3f6/7m59FtHvkO+QWLUNwFu+gwRPwLBqmGKtFYAiEyDYUZoVp0UlLT2U4ZGkrrUSFMh3SFQEB164HiR4AkZQlLgqKEqT2Gk8JDGsJ4gZHquCOBoFKir4a/Id5DtS8dK4QoInYATFMFVBUZpExQAfRNuwEhwEMcMTlJk4qiDfIaGmZcKTUIZHj4oozcBi4L6AbEMPZXj0BKUxVQV21qwKYoYnKLZBgidgqOjTCGJkYjVK6+nRz27yMyqcFtkGJ4iDGgliSU+PfE0ZHnu24aXrQYInYJDT0mNVAA4aJF8HZVCjpmU9VOLTE5QoXgV2FukMYnY4KLZBgidgkODRY/VGLSyUjZheiExUQE3LeuxcjyFD+PPhw+rOx20oOyzRCh6za1aJa9HbC3R1qTsnNyHBQ3gSEjySRII7HYCieECN04rFqMQHBFPw0IQHiZ29owYNkitxB8U+gjKukOAJGCpqrV4wTBXYqcMDQE0Nfw6K07ITwWtLfEGxDxI8eoISxavAzrWIRIJnHyrKv+3tshHcLUjwBAwqW0js1OEB6bQOHVJzPm5jxzYKC4M3FduOExdiOCi2AVBJS4sd2wCCZx8qxhXA/X5IEjwBIyjrJajATh0eoCgtlaDaB2V4OFTSkti9V4JmH3bGlZIS+X1u2wcJnoARlFqrCsRNWlgoa+pmCJrTsmMbQPBKniR49FBJS0KCR09QgiUSPAGDBI9EVVqanBYnqCVPO4KnuZk3xwcB8h0SEjx67AZLXvEdJHgCRlAWiFKBnRQ9ELweHjtpaYAyPFqEbTAWjPtF1YzGIFwLQJ3vCIrgsSsAveI7SPAEDFVRWhAWzKIoTY9dJ05RvKSkBCgr46+DYB/aGY2U4SHfkUooS1o7d+506jwIRahoPAzKglnktPRQSUuP3YxXkOxDu7YS9fDQLK1UVJW03LYPU4Ln+OOPxw9/+EN0dHQ4dT6EDexseAfwtVbEIltuG6YKqIdHDzUt6yFBLLG7hIN2M9Ug9DSRbegJSrBkSvCsWLECL7zwAsaOHYulS5c6dU6ERbROy8qgFokEqxavymkFJUoLSlpaFTSoSeysLAxI22CMLzDnd8g29AQlWDJl2tOnT8cbb7yBn//85/iv//ovnHLKKXj55ZcdOjXCLNq0tN8NUwXktPQEJUpTBdmHxG5/V2mpXOuKfEewbAMITrBkqWn5a1/7Gj744ANccMEF+NznPoeLL74Y27ZtU31uhEm0gsfKQnuAdwxTBaqcVkuL+0uiqyAoUZoqaFCT2L0WkQj5Di1Bsg0g5IIHABhjmDNnDr75zW/iqaeewoQJE3DTTTehze21o0NM7CDPJZeUcAdkBa8Ypi0aG4GLL0Z8/SYA9p0W4PPr0U9QnJZtbr8dWLiQGlM12BXDQEDK4f/6F3DRRYh/sheA/Yb2Q4eCMeM1lOvw/PrXv8Y111yDk046CdXV1Zg9ezZeffVVXH/99bj//vuxceNGjB8/HuvWrXPqfIlM3H8/YieeAsCe0wrEoPa//wv89a+IP74cgPUBrbgYqKjgr4MQqdmdleQVp2WLvXuBW28FfvxjxLv4wjMUxdsXw0BAfMcddwBPPon48y8BsC+Ge3uBIMzxCeU6PD/72c/Q2tqKK6+8Ei+//DJaWlrw5ptv4t5778XVV1+Nf/zjH/j2t7+Nq666yqHTJdLCGHD33YiBj2R2nFYgorTXXwcA21EaEIDG5dZWYOVKoLfXdp+GV5yWLd58M/ky1kGCR9Rr7YphICCC5403AADxnfsAWLeN8nLZVuBb++jsBLZuBRCc7LDpdXj+9Kc/4aabbsKnP/1plKS5O6655hq89957yk6QMMBbbwHbtiUFT6idViIhBU87H+Gt9jMBARjUvvtd4JxzgFNPRbypGUDIm5Y1gice47WG0AqerVuBESOAE05AbM16AGoyPL61j5YWoH/siu/jEY6dnibf28fllwPHHQdcdhli7VzxhGodHiOMGDECL774ourDEtlYtgwAEAe/O0MteD74gG9wBCQFYGmp9cP5fi2et97izxs3IraGl5rtOi1fr7Wydm3yZbyHN7qFVvCsWcND961bEf/eLQCA4mLrDSe+zwCuXZtsuIknogDsCUDf20d/4Ig//hHxLXxSkt+DJeWCJxKJ4KyzzlJ9WCITiQTw+OMAQBkeQN6kALrBlY6KkpYvnRZjwIcf8tennZYUxHZLWoxx0eM7Egm94LE5qPnaNgDgo4/488iRiIl7hXVbPpzvfUd/OQuAkvYAX9tHWxuwfz9/PXEiYoynyVXM8HSziZv20vI7a9YAO3cCxcVS8NiI0ryixC3z2mv8ubIyKXjsZHh83cNz8KBUJjfcYFvwlJbK7/WlfWzbxrN/paXoKy5DH0jwAOC2UTsKAFCMeJZvyE5gBE9VFfmO7dv5c00N8K1v2fYdwjb6+nhrkFuQ4PE7/eUsXHopYgXlAICSAutOy/dpaZHh+epXlZS0fD2oiezOEUcAo0YpyQD62j5E/86nPoX4pFOTb9sVPM3NPi3xCcFz9NGID+K122Jm33f4UgwzJgXPlVeS7xC+45hjgGHDbAueigqgsJC/dtN3kODxM319wJ/+xF9/5SuIDakDABSzWJZvyo6vo7S2NmDzZv762mtlSSti3Yn7uodH67SGD7fttACf24cQPKeeithJUvCIXc/NIgY0xnw6yGsET6yCG3poS1qffAI0NfEZDldfLX1HkXUl62vfobENDB9uO1jyyrZFJHj8zJ49/CaNRoFZs5KCpyRhfatzXzuttWt5qH3kkcDEieiuGAYAKG1tsnzIwERpGsFTUthr+ZC+tw8AOO00dE+YAgAoQB+iUWuHKymRYsl39tHZyRfoBHiGp4IbenFfSH2HyO5MmsR9R+EgAEBpG/kOFRkewBv2QYLHz+zaxZ+POAIoKkK8ejgAoKTXepHUC0ZpGVHOOv10AED30CMAAKWH9lg+pK/r8FqnVVMjGzG7rYdYvnXi8TiwYQN/fdpp6D7+ZABACWKIsBBG8aJHY/BgYMgQxMv4jV/SZ32VvED4jqlTgcJCdFePAACUNn5i+ZC+vVeAARmeZLBkI+PlhXI4CR4/IwTPKN5wGKsSgsf6dsXCafXP7PYXb7/Nn6fw6D02mDutkqadlg/p2wENkILn6KOBaBTxSL/gabeu3obxpBkOHLB7cnlm82a+Pv6QIcAxx6B75LEAgFJ02/plfDuoaQc0ALFSfuMX91gPlny91YZGDANAbFB/dnjfx5YP6VvbAKR9HHMMEjXD0CMyPB3WfxkvCGISPH5mZ/9APnIkACBWORQAUBKzPmd4KD8EYjF3u+ktsXs3fx49GgDQXcY9cGhLWhqnBQCxSH9fQof1EUnYh+8Ez8cf8+dx44BIBN29vI5Vim5bHti3GcAUwRMvrQQAFMetB0vCNg4etHVm7iB8af+90h3le8qUdDZbPqRvbaOvT94vRx+NHsiVW4vbrP9xvTADmASPnxEZHiF4yvsbD7utO/BBg2Sd1neDmhA8R/BSVnJqacz+gOY7wdPVxXu8gKQTT9bhW63/YUWGx3eDWoptiG02StFtK53pW/tIzfAUccFTErceLAnbaG8Huq33Pucfxgb6DtbvO7qbLR/Wt7axaxfQ08MHgiOOSN4rAFDSYj14PPlkYOZMaSduYLFdj/AEAwQPv8NKupotHzIS4Qa5Zw8XPEceafck8wRjcoAXg1r/AF8aa7Z8WOG02tq4D7CzTUVeEQNadXWy1hAXi4e17rd8WN+WtFIHtP4BuRTdtkYk3w5qqRmeYt6ka6e/q7qaTz3u6+OCuP9Se5/Dh6UCrq8HAHSzft9hQ/D4thwuSuFHHQUUFib30QKAombrvuOnP7V3WipwPcPzyiuv4IILLkBDQwMikQj++te/6r5+1VVXIRKJ6B7Tpk3TfSYWi2HevHkYNmwYKioqcOGFF2KXEANBRqRhRQ9PCe8KK+44bGs5S18OagcOyB3uhNNK9Dfa2UhLDx4sX/uqr0nbsByJIJEAeln/Qnst1p2Wb8sWGQRPCWKU4QEQj/av4WVjgI9EfFryFLYxbFhy3nUswYOD0k7r9Sitbbi5urBpUkrhwq0WoheFh6z7Di/guuDp6OjApEmTcN9992X8zGc/+1ns3bs3+XjmmWd0X58/fz6WL1+OZcuWYfXq1Whvb8f555+Pvr4+p0/fXVIzPMX9aem+Dlse2JeDmsjuDB+erMl199l3WtGonF3gq0FN27AM6KK04mbraWlfimEge4YnbIKHsYElrUI+v7443g5dDcMkvix5ptgGAHT39mdDbfS7Cdvo6+NlPt+Qahv95lCCmA9vfD2ul7Tmzp2LuXPnZv1MSUkJ6urq0n6tpaUFS5YswSOPPILZs2cDAB599FGMGjUKK1euxLnnnpv2+2KxGGKaG7vVbyuH9fYCe/fy1/2CR+wNVIIYF0Mip2oSXw5qaZxWrK+/MbWnld+1FlfNGjKEN9r5alDTZnigFzwlh/ZaPqwvI3hACuKGBgAhFzyNjfwCFBQka9ZxsWQB4lyt9F8nswTFd3T38mWBS9ut/yJlZTz2ise5fVRW2jrL/JHBdxQjLvfX8imuZ3iM8PLLL2PEiBE47rjj8I1vfANNTTJCXb9+PXp6ejBnzpzkew0NDZgwYQLWrFmT8ZiLFi1CdXV18jGqvyzkGxobeegQjQK1tQBSlLi4iS0QGKfVw51WCWJKZuL4alBLnaGlCdqLDu2zfFhtBO+rND1leCRiQDvyyGRTmtg5vgQxW4OaL31HihgGgO54v+Bp22/Z0CMRn87USi139gueIGR4PC945s6di9///vd48cUXceedd2Lt2rU4++yzk9mZxsZGFBcXY4iwrH5qa2vRKFYSTcOCBQvQ0tKSfOzcaX2tFlcQ5ayGhuQmJSR4oHda3dyJ2x3UfLm+SIYoLYoeFBywXtLSLlvQYX2NuvzS2iprCjRLa8CABsjrUYy4rRvfl+XwdNnhfgFYmuiwZei+tI8U36GzDZ9neFwvaeXisssuS76eMGECpkyZgtGjR+Ppp5/GJZdckvH7GGOIRCIZv15SUoISO7souk1K/w6QInhsNG37UvCkzNACUga1MGV4GON7AwHAmDEA1NXhKyp4ZTAW44PaoEF2TzYPiAGtupr/Agh5hieN4FFVtvCl70iXHdY2tbe0WDZ0383Uam6WJ9vvO3S24as/7EA8n+FJpb6+HqNHj8bWrVsBAHV1dYjH4zicYlFNTU2o7S/1BJKUVZYBdRmeoERpoZ2Jk2aa7YABzUaa3neDmoO24bsBDZCLyvUPaIA6Qew72wAG2EdvL9DXpyY77DvfIa5FTU0yONDZhs8zPL4TPAcPHsTOnTtR3+/IJ0+ejKKiIqxYsSL5mb1792Lz5s2YPn26W6fpPCmrLAMpqcewZXiyDGqhc1oi21VTA5TyBdR0dfh4nC8sZBHfNS6n69FQbBvNzXzfWl+QJhuqKor3te9IaWgHQuw7NPdKkJqWXS9ptbe3Y9u2bcn/b9++HRs3bkRNTQ1qamqwcOFCfOELX0B9fT0+/vhj3HLLLRg2bBguvvhiAEB1dTWuueYa3HTTTRg6dChqampw8803Y+LEiclZW4EkV0nLRnomCE4LSBnUbJS0fNfDI2bv9QcFgEYMR3oABv7HFfPtTeK7qcd5EMOMcRNLaSX0JsI+0gxqdqN432WHe3oAMQkmpb8LUJcd9rPv0NlGVxffc6i83IWTs4/rgmfdunWYOXNm8v833ngjAODKK6/EAw88gE2bNuF3v/sdmpubUV9fj5kzZ+Lxxx9HpWaO3913341oNIpLL70UXV1dmDVrFh566CEU9jfzBpI0JS2dYdqI4LWChzFexvA0MU0aXpeW5m+FrqSVLUor7AN6wQc1TQ+HGXyX4UnXlKqoabm4mPv+zk5uH74QPMI+0gnisGV4xABfXJw8eSGGo5FeFLJE6H3HgGBp//7kfoV+w3XBM2PGDLAs/QTPP/98zmOUlpZi8eLFWLx4scpT8zZZSlqqBI+YieP5xlThtEpKkqOxNkoLXdNytigtmpCCxyKU4dEzZIgUPJ4nFpPphkxliwPWV8nzneDRZob7I7ukbRT28HslTIIni+8oLgIQB//j+lTw+K6HhwBPXQgl7oDgKS+Xa/T5YlDL4rQAyvAAmiituD+4UDD12DeDWpYenmSa3sbqwr6yD21woElHqS5pdXT4ZAPRbKXwaC9/oaAc7gvbALL6juSkZh/38ZDg8SP79nHRU1gIaFag1gme9vbwzMRJ47TEtYgW9CGKvnCtw5OlR6N/141wTT3OmuHpN5SwZAC1EbymVq2qpCU2EAV8EixlW84i2l8TD1OwlM13lPbbi29u/IGQ4PEjopylWXQQSHFaiQSPXC3iq0EtjdNKRvBF/VNnwjKgAVl7NEpK+p1WWEpafX18VXIgveAp7X8jLINaGtsA0szSCluwlM53FPf7jrDYBpDWPqTg6R9rKMND5JU0M7QAbYan30IVNS57nmwRvEKn1dmp35PKs2SL0oTgsbF3nK9KWtpsqGZdrqR9VPQ78bAMamlsA0jJDvf02NrtMjC+o6Rf9IVllhZjae0jaRtl/XLBZs+bm5Dg8SNpZmgBmjp8eb8TD7HgSaalFTit6mqZ/ff8oMZY1iitRGQ0FNiGLzI8wjbq6tJmQ0MneHJleCL9fSsK1mnylX2k6+ERPSthWaepuVn+8ppWiQHBkg3bcBsSPH5ECB7NAA9olPggviEgOS1No52NklZBATB4MH/t+UEtzSrLgKbcqcBpaTM8nt9ANE0TJqCxD3GvhEXw5MjwFFfY9x2+Cpay9fCU9d8rCmwjkfCBThC2oVmwFNAES2UkeAg3SHOTAmoFj9+dVjJKU+C0AB+lpoXTGjIkrdMqLu2/5RXYRnc3L/N5mjTZP0BjH1X9Xdxh2V4iTYaHMdnuV1bZv1JJGEpajGXv4RElHBvBUlmZDLo8bx8Zsn/ieiR7eGzYhtuQ4PEjaaJWxjRKvLLfiYdB8GRwWskorbzfxFtb5UqEFvBNFJ8ho5Ec0Cr6r4cNpzVoEFDUr6k9nwHMJXiq7Y9GvrENIK199PTIckt5pf1yuG96vFpb5U7o6UpaFWp6VnwjiHP4jvJB9oMltyHB40eyrKQLACVV/U48DIKnuVnekelKWuWyb8PO9fDNoJZm4TBAK3jsD2i+moljVPCEpTE1TUlLO5kzmeEJQ4+XsI3Bg3VbJUjB038tmptt1W4D4zsG2fcdbkOCx49kWRwKAIqr+ksZYYjShNMaMoTnj/uRJa0C+X4YyhYZojRRelLltHwzqOUo/5YO7r9XwtDDE9PssacZ1IRtFBSo8R2+EcNGWwPicVurKPpGEOfyHQrEsNuQ4PEbbW2yHJGmKRUASqrVOS2/Dmi6dVaqq/l/FKzF43mnlSNKK69W47R8J4gzNC2X1vRH9mEQPGI9ouJiqeChieDLgEhV/x6FYejhyZX9GxTlKhAIh33k9B39ApB6eIi8IQb4qirdJleipBWNAgVV/e8r3EDUs2RwWrrl0MUUqzA4rVw9PKJJ18ZK3EBwBrWSmgr+woZtCPHX3Mz7YTyLtilVs8pyMoIvAyA2ZQ7DDM9cgqcsojRY8r3vqLbfG+o2JHj8Rgaj1A3wCpyWGNDicY8L+lxOqxRKBI9vtpfIkZYuH9LvtBizNcXKF4NaR4ccqDLZx1A1gkcs8ePpRWgzTElPRvDlkEFUGEpaRnyHEDw27MM31yNDhifpOwaT4CHyTZ4ET3m5bH3x9I2aq2ShqKQ1YgR/bmqyfIj8kKvxsKpYRvdBH9SEbQwaxDOi/fT28gcAlA7rH+BtDGgFBdI+RNXIk2SYdqwtaakMljo6bO1u4zwZfIfq7LBYw0/cmp5Eu2BppgzPkP4G/44OH6yimB4SPH4j19LwigQP4JMoPlfjoWKn5ekBLYvTSpYtyiNKo3hf2EaGewUASkf0CyGb9QZhH/v22TqMs2TwHckIvhzSd9hI61ZV8dI64BP7cDg7LPSlp31HS4v8xTNkeMqGyEkhyen8PoMEj9/I4cSLi6FM8PgqinfYaflC8DQ3p11lGUgpWygY1HzRtJyjvwvQ9PDYrNv6wj7ylOGJRHwSLJHvkAjbSFmwFND4jiElsonbp2UtEjx+I08lLSBAgkdBSUs4raYmWQ7xHAacluqyhZ9to7AQiA7uz3bZTNP7YlDLkeEpK4OS7B/gA/vo7ZV/rGy+Q8G94gvbyDCuABrfUR5RNra4BQkev5EhStMJnrA4rZ4eWUPIIAB1TsvmVNuCAl418mxjaob+HSClbKHAPgITwQvbAGw1cftqUDOS/Qu679i3jwvcwkJg+HDdl9L6Uhu+Q9jGgQMensWXR9/hJiR4/EYGJZ7cViJMGZ59+7gCiUZl12g/us1DFTitwkKgtpa/9uygZiRKC1OGx0iPRmmpTNMrGNQ8axtAzllaqmwD8IEg1oo/McWuH519KPAd2ll8np30YNZ3eHrqbmZI8PiJLE2poWxaFhF8fb0ctPpR7bQAHwxqWaI01YOasI2uLg9vIGpkBl8kojSK96xtxONSnWZqSlU4oHleEGfI/gEZMoA2rkdBgQ+CpQy+o69Pji0qBbFbkODxEy0tcuTKVtIKS4Ynw4AGpJS0FKVhPT+oZYnSQjkTJ0fTcrLNKQyCR5xYUZFUq/2oXocH8JHvyCV4whIsZfAd2h01VJY83YIEj5/QNqVq9o0CMggem42YQXBaqkpagA/W0zCallYwqHl+A9FEwlhJCwiH4NHahmaVZUD9SsuAx20DMBQsOeE7PGsfOdbvAtQ2tbsFCR4/kWVASzstHQj2njgZBjQgpFFaBqfV2yubJVVGaZ4uee7fz3/xSET+4frRiWFAiRMXP6K11aMlPgPlzgHZPxvBkqdtAyDfkUqO9buKi/u7BqiHh8gbBgRPSQn4nSq65ILcmJrntLTnFxDLsVIqEKIoXlyL2lpextHgRIanslIez5OLD5ptSgVsKTdP2wZAJS0tjOXeOLR/j10qaRH5I4vT0s3SiqhZL0EbpXlyA1FKS0sMOC1AXSMm4PEoPottOCF4tIkkTwueLNOOy8r6/1GwuBwJHj2e9h1ZekN1tgGQ4CHyiNEMD6BU8PT0eNS+yWlJmptzLw1f1t++EYbGVKO2AYTDPjJMSQdSoviImq1HPL8SNwVLEmEbgwcP6A0dkOGhHh4ib+RZ8JSXS0P3pOMyW4fv6ZGpMAv43WmpjtI8PahlETxOzNICPG4fRjM8gNJ1mjo7PbiBaHs7b7YCKFgCjJc7AerhIfJIngUP4OEovq1N/m5GozRAyUyctjYP7p1ndEo6oNw2PFnSMiCGBzQtB3lQM5rhAYK/bIGwjcpKfc9SP6Hr/zPgO6ikReQfo7O0AOV9Gp4TPCKCN+K0olEZzttsTK3o32vSc44rSwTvVJTmWTEM5L2HB/C44DFjH0FftiBL9q+3ly+2B6QInnhcSXa4vd2DyRGjM/gAEjxEnsiyyjKQxokHPYrP4rSAEA5qBiJ4lQMa4JOmZerh0a+ynMco3rP2YaB/B1CbHR40SAZLnmtqN5PhUXSvuAUJHr9w8KBcTCVlXRFAlljETRX4klaWkgWQpsQX9EHNxZKW52wDIMGjJcsqy4BzUbxn7cOAbQD9vqOoSDqRoNoHZXgIzyEGtOHDNXUriRA8yYAkxE4rkZDZ59AMakb30QL0JS0b6w0I29i/32PLFnR1AYcO8ddGmpYVlfh8YRspqywDISx5GujvikZlD1LgfYeVpmUSPISjZDFKQN6LocnwGExLDxA8ivbT8tz2ElacViJhawqN0FZdXXxWvGcQf5yyMj5rLYV8NC17SgDm8B0ZyxaKfIfndgg3k/0Dgr81TZZgiZqWCXfI4bScyvCMGMGfPXeTGph2DKjP8Hh2toUBp5VMSydfwPayBTU1/PXOnZYPox6tGE6T0chY0rJ5r4gdsWMxvpabZ8hiG4BzZQtxa+7aZesw6jG6Bo8gyBmeHL2hGdfhsblPo1uQ4PELWWZZAPJeTAoeRU581Cj+7KkBDTCUlo5EQpKWNui0klFaQYFy+/DUoOZSQ3tpKVBdzV97qjE1i21o91lTHcV71ne4nOHxlO9obc24yjKQJcPDmEc3jcsOCR6/YDDDo7qk5XenlQzwg+y0Dh/OuMoykCbDAwTbPlwSPIBH7cNAfxegdh0ewKO2kUjI60GCR44raRYsBdJkeMrLlWw94hYkePxClmnHQJoMj+IB7eBBDwn6vr6s1yN0TmvHDv48fHhWp6X7UpAHtRwz+EIneIQAzCF4VJf4tLbhmZ6m/ft5Wku7+ZmG0PkOceNmuFcG+A5FW4+4BQkev+BS0/LgwdK+PVO2aGrioqegIK3Tykcdft8+D5WwheA58si0X04reBQ5rZEj+bNnbAPImeHJurWEzZHZk4NaFvsQQYwuG6rIdwjb6OjwUFO7sI3aWk29WxK6Hh5hG6NHp/3ygJIW4OvtJUjw+IUsgieRkIapOsMTiXgwihfXIoPTcjJKGzGCX5PeXg8tqJZD8IS2pJUhOMg4S4sx2xs/eW5QYyzroDagZAEos43ycrnsj2fsw2y5E6BgCSn2QRkewlG0decMTakiMFWd4QHkoCbuDddx0WkVFcnptp4Z1D75hD9niNKylrSCLHiM2ofWmwctij90SDb4iT+WBqcjeM/Zh9lyJ6A0WAJ4sCSWiXIdF32HG7gueF555RVccMEFaGhoQCQSwV//+lfd1xljWLhwIRoaGlBWVoYZM2Zgy5Ytus/EYjHMmzcPw4YNQ0VFBS688ELs8lSO3Sb79/MSTiQi575q0G5k6cSKmJ5zWjkieCfT0oAHBzU7GR6FPTye6NPQzlgzOqgVFMhIIWiCR9hGbW3KKM5xOoL3rO8wI3gU3SvFxTLj5Tn7yOE7SPAooqOjA5MmTcJ9992X9ut33HEH7rrrLtx3331Yu3Yt6urqcM4556BNc7Hnz5+P5cuXY9myZVi9ejXa29tx/vnno0/sAud3cpRwtP07ooE+aZTd3TyksIHnnJaLURrg4UHNhR4e8Sfo7vZI1HrokFS8GZZwCFVjqojgzdgGBUuOBUueW8fLSkmLenisM3fuXNx222245JJLBnyNMYZ77rkHt956Ky655BJMmDABDz/8MDo7O/HYY48BAFpaWrBkyRLceeedmD17Nk455RQ8+uij2LRpE1auXJnvX8cZzE5JB/Q7iAetbOFiSQvw4IqpVgSPokGttJRPDgM8Yh/CNoYNSxm1JAOaloHgCh67Tak203aB8h0KBKCn7CORkH8YM/ZBPTzOsH37djQ2NmLOnDnJ90pKSnDWWWdhzZo1AID169ejp6dH95mGhgZMmDAh+Zl0xGIxtLa26h6exeAMLe3Gvigulntu2TRMMY76xWmFKkqLx6XycqFpGfDYoJbDNoA0TcuAMvsQFWdRhXYdgxmetLahYHE5T9kGQNlhLY2NfNXJwkLjq3ADVNJyisZ+q6hN6Vupra1Nfq2xsRHFxcUYMmRIxs+kY9GiRaiurk4+RqVp6PMMVjI8gPLG1B07PNKnYXAWTiic1q5d/I9SUiK7IlMIVdnChOBxIoofPpy32vX1eWQWn5UMT3m5nKNO2eHg+g5hG0cckbZVAqCmZVeIpOyHwxgb8F4quT6zYMECtLS0JB87PXNHpsFKhgdQLnja2z2yR1COKM3pNKwnndaRR6bdNwrI0ZiqwIl7ai2eHLbBmLODWjQqS3yesA8rPTwKF5fTbj3ierDU1SUbzVzKDnvKd+SYoQXQOjx5pa7fOlIzNU1NTcmsT11dHeLxOA4fPpzxM+koKSlBVVWV7uFZzC46KFC4noZnNons6uJbKQAZnZb4dbVtTIF1Wjn6dwDnZ1p4KorPEcH39so1UHSDmkIn7kn7yDHtWCeGAaUbiEYiXEjs32/rUPYRfrSsTG56lkJaXxpS36FdlorW4ckDY8aMQV1dHVasWJF8Lx6PY9WqVZg+fToAYPLkySgqKtJ9Zu/evdi8eXPyM74nx/LfA3ZKFwRxUBMDWhanlVbwiP/EYnK3RIt4qmnZgOAJZUkrR3AApNwvQRzUurvlLqZmph0DyuyjuFj2NbluH1oxnCEbSsGSRGRCgeCUtNIX7vJIe3s7tm3blvz/9u3bsXHjRtTU1ODII4/E/Pnzcfvtt2Ps2LEYO3Ysbr/9dpSXl+OKK64AAFRXV+Oaa67BTTfdhKFDh6KmpgY333wzJk6ciNmzZ7v1a6mDMeCjj/jrMWPSfsTpkhbAB7W33/aH0xL957qknfbidHTwPTMsIvr7mpu5U0izvEn+yBHBA/lrWvZESStHhkf8utqefgDBHNTEzVpRIVO0KWTM8Ci8HqNG8WuxcycwebLtw1knR7kTkPaR1ncEyTYAw4sOAiR4lLFu3TrMnDkz+f8bb7wRAHDllVfioYcewve//310dXXhuuuuw+HDhzF16lS88MILqNRI8LvvvhvRaBSXXnopurq6MGvWLDz00EMoLCzM+++jnEOHpGEddVTajzjdtAx4aKaWCaeli9KKi/kyyT093HHZEDzV1bwcEovxADqL1nCeHFFaIiH7EtL2NCnu4WEsow7NDzkET1oxDARzUNP272T4ozid4QG44Fm71gO+w0BDu7CPtBkesaZZhgZfIwjbOHiQT7DUie58Y3A5i2iUu84kPu7hcV3wzJgxAyxLN1skEsHChQuxcOHCjJ8pLS3F4sWLsXjxYgfO0GW2b+fP9fVpd8IG8pfhAfzhtNIKHoBfoMOHbd+oYqPlTz7hg5qrgidHU6o2Le1Uhie1TyPDZDHnicdlo4iZ/i4gmILHQPYvbbkTCLbvyFDuBHKUwwEeXWYopRthyBAZdzU1yWDBFayssgxQDw/hIDnKWUCWDI8DS8S7vp+WVacFBG9Q024MmcNpAVnS0janz3imT0M0VWnX8E8hNLYB5BTDgPNNy4AHBY/V7DBg2z4KCuS94moPYFubnPxhZo0mwNclLRI8XkdkeI4+OuNHKMOjJ5+DmqtO69AhqWgyrCMlnFZxsWbbEUBenETC9g7h2h/vah+PVgyb6e8Cgil4TPR3ZYzig7SBqNVyOBA8+xC2MWRIml+Wk49yZ74hweN1DGR4nJ6WDnhoPQ0xopLTyrkxJJChYRnQG0tQBjWPiGERwYsJUq5BGR49HrEPT/kOO7ahYOuRfEOCx+uIDI+BklbGDI+Cm9Qz62l8+CF/zpLxyofT8sT2ElanpAP6HcIVDGqiF8G3gke8oWCLGTGgafcxdQWP9fDs3u3idhu9vTJYypANZSw/GUBP+A4TYjhj9k/B1iP5hgSP1zFR0nIyw1NcLB25a4NaWxvv9AOAY47J+jEgBFGanQgeCN7UdHGvZLkeaacda99QIHiGDJGzb1wreWo3hjS7KCWg1Dbq6/l2TX19Lt4vO3fyTuGSkoyCuKtLLkqZ0XcoFMSeCJaslDsrKpRtPZJvSPB4mb4+OajZyfAoMkrXU9MiuzN0aMZp5YxJPZOPKN7VHh6rqywLgla2EOt5jR2b8SNppx0DSgVPJCJvV2GyeWffPj5rraAga8YrH+vwFBbKOQau2YewjaOPTmlmk2hvgwHBo5iZpcA+XL8WgL2SlsKtR/INCR4vs3s3j0qKirI6rXw0LQMemKklRo9jj834kY4OWVZ2clATgZFosXIFOyUtIHiNqWJQy2IfGbN/Cm0DAI47jj9/8IGSw5lHBEpZNoYE8teY6rp9mLCNQYPSaCKF9iFOYetW24eyjoHssKFgyWdr8ZDg8TIiRT96NA+TMpCPhQcBDzktA+WsgoI0kYmI0hTsgCqc1oEDcj/CvGOiR8Ppkpbo4dm9W5YF8kpvr7xfDAxqA0pawja6u3lmxCauCx4DtgHkp4cH8IDvMBAsZRTDgFLBM26cPKXeXtuHs4ad/i6AMjyEAxiYoQXkP8PjZaelLVkMmJms0GkNGiSTbq4Pah4oaTU0cJEpFlTLO9oejSyruWUsaWnfUGAfQvC4FsUbiOCB/K214rrvsJP9A5QGS0ccwe/Hnh75Z8orvb2ywd8D/X/5hASPlzHQsMwYZXi05CtKA2Sk5orgicVkA5EHnFY0KmefuGIfWtvI0KMBZLGPaFReJAX2IdqIXBfDOTI8+ViHB/CH78g4Q0v7pgLbKCiQ9vH++7YPZ549e3h/aFGRbEZMQ76CpXxCgsfLGMjwdHfLEkLGDE9Pj5L5sa47LbtpaYVRGiCjeFeclpgOVVYGDBuW8WNZnVaQBjUDETyQpaQFKG1MFbbx0Uf89ss7BjI82n3WAp3hSSSkL/VASQtwueQpxPCoUVmDA0PBEvXwEMowsAaP1t4yzrQAlG4gunu3C7XnWEx6S8rw6MtZWXbrzFqHVzyouboWj0HBk7GkBUj7UCCIGxr4/djXJ2/jvGKiRwPI0sOjaHE5VwXP3r38l41Gs14PN4Il131HFijDQ+QXAyUtUc4qK0vT1xyNSmtVYJi1tfyQiYQL07G3b+eOd9CgrLtTktPSk886vKtr8ZjM8DgtiCMRl+3DxBpNQBbBk0goWVxO2EZjo5KecHMI2xg9OuuMtdBkeEz2d1HTMuE8XV1SVRjI8AwoZwkUDmqFhbJRN++RmrYGnyWj4YbT2rrVhZlJHozS/FTSyrd95JXWVqC5mb82IHiKi9MES1qFrKBsMXw4/zmMyS2t8oZK2whSsGRwBh81LRPO8/HH/LmyEqipyfixjA3LgqAMagb6d4D8ZniOOor3/XV1uZDVMJnhCXQPTyJhyD4SCfmrOt3DA7jYuGxgY0gghxguKFAaxRcUuFjyNOk78mEbohy+c6cLuzOoDJaoh4dQgmiyO/rorBmNfGZ4ABcHNQOzLACDUVpHh5JNfaJReTp5b1w2mJbOuHko4FgPT97F3+7dvMerqCjjPkmA3jcHOooXtmEnggdC5zsM9XcpEjw1NXzBeMCFDKDdJQsAyvAQijHQsAxQhicVQ4JH+0GbuNa4bHdhOcAx28j7JpFiQBszxlCPRmFhhs3lg9KnoSKCB4LjOzxY0gJcsg/GDAtiQzM8SfAQSjDQsAzkP8MjfGjet5dQkeEpKeEPwN9T0xkzPKhltQ/FtlFXx/VG3jeJNDlDq6oqQ9LUIcGza1eeyxYmMzwZBU8QSp6MqRE8oqQVjytZ4gNwSfC0tMi/Z5ZsKECztIh8YnKV5YwZHsVK3BWn1dsre5rsTDsGgjE1/eBBOVplWVUYkNtepG0DU2wbrm0SqWJAA5T3adTUyOsuTjEvGBTD2r2j0hKEDM+BA/z8tTu6ZiCrfWgvkp8zgEIMDxuWpZbJEX3vQ4ak+SL18BBKMVnSCrTTEtsGFBdn3UQVyNF4CARjaroYPRsaZMYqA0Lw5MtpudLHo0rwBKVsYTDDI2xD9JIMIAi+Q9jGyJEZ6piSrPZRWCidrJ99h8H+HSBHsEQZHkIZjHm2pCWcVlOTssxubkT/ztFHZ91EFTAxqCmO0j7+mK96nRe2bOHP48fn/Ojhw/w5p9NSsLgc4PKgZqKklRbFtgG4NKiJ++Woo7J+7OBB/pxxEmiQBE8O2wAM2IfiDKArtvHee/xZpKYz0NMjf818ZIfzBQkeL3LokLS2HE4r303LQ4fKQClvUbzB/h3ARNlCUZQ2YgQ/JGNynHEcIXgmTMj6sUTCYJTW16dMrYlBLW89Xqp6NADlAxrgwqB24ACwbx9/fcIJWT+aM8PjUDn8wAH9ooeOYkLw5DtYEqd06JAUn46zeTN/PvHErB8T5SwAGDw4zQcow0MoQ2R36uuzdBRy8p3hiURcGNQMztAC8u+0tCvq5q1xWQieHE6rrU0uiJi2pKVVyYrs4/jj+bPwq47T2Mi7KwsLc5Zw8m0bgAtr8QjbGDMmi1PgZBXDgPKS55Ah0uRES57jCN+hIlhSXPIsL5eVpbz7jhzBksgMV1VlmPioeOuRfEGCx4sYbFgG8p/hAaQTf/ddZYfMjhMZHoWDWt4blw1GacJplZVlaF8oLJSNi4oGtZNP5s8bNuTJD2q3DSguzvpRwyUtP/fwCNvIMaABJgSPwmBp4kT+euNGJYfMjcEMT2+vTHIGNgPY1yeddg77MGwbiUQe03X2IcHjRQw2LAP5z/AAwKc+xZ/fekvZIbPjRIbHgUEtL1Ha4cNybf4cgien0wKU28eECTwiPHgwTyVPD5csAHlaBw/Kv4ejeFjwAMApp/DnDRuUHTI7JsudQH7tI6+C58MPeeNlWVnOsSWnbWhnePmorEWCx4sYbFgGDExL97vT0jbH5Mjw9PTIRup8Oq28ZnhESnrUqCypCk7WGVoCxfZRUiJ7qfMSxasUPCKCj8WUdeQPGiQnFuZlRV2VgseBxlThO/ISLDU3y+YYg+t3FRdnSRQq7v8D8ix4tJMdCrIP/TltQ/HWI/mCBI8XsVDSciPDs3lzHmZqiR6NgoKcDdyGojQHnVZeMjwG+3eAHDO0BA44LW1Zy3FUzsLRGo0DJWDHBzXGnMnwKFy2QBssOV7yFIFSbW3OfqactqH9ol8zPCptA/DlWjwkeLyIx0tao0fzrEFPjxx/HUMMaEcembNHQ/yKJSV8W6W0ONiYevBgHmZbGGw6BNxzWnnNAKrM8BQWylSpH6P4PXt4VqOwMOe0Y8CdkpYoeR46lIfp6SptA3C0HL51q5xg4BgGe/8Ad8rh+YAEj9fo6ZGLQ3m0aTkSyeOgprJ/B3Akw1NRIRfcc7xsYcFpZS1pOeDERYbH8ZKWiSnpgMlBzY9RvLCN447LuSBlPC41bj5LWqWlsuTpuO9QbRsONC2PHs2Ds+7uPPS8OZXhUXg9nIYEj9f417+46KmqyrnXCWAgwyMcuHaOsgLy1rhsYoZWzm0lAEcGNCCPZS0TGR5DJS3xRYUdtULwfPyxPAdHOHCA/x0NbBsAGCxbODgTJ29i2MSAFonIX3kAQikr/iPmPVhSMbsTcMR3RKPy9Bz1HfG4VNyqBI8DvsNpSPB4DaEgTj45Z2MZYCDDI4ySMaVRfN4Ej4UMT74HNCBPjcv79/MlroGci8oBBp2WWHVOYS1u8GCpPxzN8ggxPGpUzm0DAPfLFh984HDfigXBM2RIlsXLtbah8MTz1rjsg5IWkCff8cEHfO59VVXO/fcAEjxEvhBeQCiKLDBmIMNTUiLVkMJBTTitt9/myzs4hso1eADHnFZeMjzaReUyKlyJoZKWQ04rL2UtEwMa4F4UP2YMj106OoC9e5UddiCqSxbii729/uzxsiB43AiW8lLy1JbCI5GcHzeUHXYgWHIaEjxeQ3gBA4InHpdiI+v454Bhjh3Lf2ZXl8ODvFM9PH50WibKWYC7Tisvg5pFwZPvQa24WGa8HLOPREJ9Q3t5uewFUmgfQgzv2sWrko6gVZcmZvC5WQ73ku8wFCyR4CFskUjIEUKMGFkQA1okkmPWpQOGWVgITJrEXzuWmj5wQP6SBtYkMhXBd3dzxagIkZZ2dLaFiSnpgLtpaa8JHsbcy/AAeRjUtm/n0UdJiaFsqCHbiEQc8R1VVfJP5ph9iKU9hgzJMWpzvJAdzluGxwBU0iKcZ9s2njouLZWbEmWhsZE/jxiRYxNxYZiKlbhIQjnmtNav58/HHmuohGPIaWm/6NBsC8em21p0Wm5EaSKKf+89B3eRFyOEgQG+s1MKUTcHNccal4VtjB+fwxlwDA1ogH8zgO+8w58NTM8HLGSHFfY0Cdv4+GMH1zUzUe7MuemwgDI8hC1EqmTSpAw7tukRgqeuLscHhWEqVuKONy6/+SZ/njrV0McNOa1o1JG1VqJRGbU6UuJjzNmSlmLbOOIIYNgwXnJ1ZCPRWEwOaiLVmAVhG5FIDu3sUIbH8cUHTQxogAnB43AG0HHfcdpphj5uKsOj3XhLAbW1/OcmEjIxpZSuLtkaYMA+cm46LCDBQ9jCRDkLsCB4HIzSHJl94oTTAvxZtti3jw86BQWGsn+xmJzBZ6hpWfFMHMfXanr7bV6SHDbMULlT26ORtWfTrz1eTgkeh3yH49nhN97gzyqDpYoKaTwKg6VIxOFJD++9x+/toUN5OSAHwjbKyvgjI1TSImxhYoYW4L7gGT+eN2S2tMjFoZXBmGnBY6jxEPDn1HQxoB17rKEp2Nr+rozrrADSNmIx5bseOzpTSwxop51maNaJV8Twhx/yBIFyfCZ4hBjeutWBnQliMamkTPqOrA3tBQX+DJa0tmHgXnHbNpyEBI9XYMyy4Kmvz/FBhwyzuBiYOJG/Vp6a/uQTvuZMNCpHzhyITcRzXg8/Tk032bAsBM+QITmWcxo0SJZP/dSnYTKCb27mzzn2W3XMNkaN4v3E2oXUlRGP8wVLAdOCR7iGjDgUxY8YATQ0cLf39ttKD81LnfE4/+UM9HcBfIkrwMD1cEjwOBosWZyhZbjc2dbGDdsHkODxCjt3ckuLRg0bptsZHsDBQU1kdyZNMpTRAOTS7DnX1fJj2cLiDK2cE1QcmokDOLxWk0nBI2xD7FyeEWEbQiEpoqBA9ngpb1zeupWnjSorDa3ODsg/tZtRvGO+w2T2D5D2kfPyCcGj2D7ykuFROUML4CuMiuvrk7IWCR6vIFIkJ56Ycx8cgRcEj2ONyybLWYwBu3fz1zkFj1ABiq+HiNI++UR5dci5koX2Q4qd1tixfCmXzk45g1wJBw7IAxq0D8MDmuhxECtaK0QMau+9p/jAJksWgDfKFo41Lpv0HR0dMiOa03cMG8afFS8glLeSlgEMTXYA+GxAh3ypU3he8CxcuBCRSET3qNOM8IwxLFy4EA0NDSgrK8OMGTOwxfEtvB3AZDkLkOtq5RQ8DjaXaZ2W0sZlk06rpUU26eaM4mtr+fO+fdbOLQPDh/MEAWOKHZd2hpbJkpYhwePQoFZYCJx0En+tNIoXtjFunKE1VgC5VEDOAU3YRlOT8gWVpkzhzy+/rPSwpgc0wILgccB3ONa4bDL7JwKlykoDJU+HfMdxx3Gtum+fPB8ltLYCO3bw16ozPNoPUYZHHSeeeCL27t2bfGzatCn5tTvuuAN33XUX7rvvPqxduxZ1dXU455xz0OajLesBmFphWeCFDM9JJ/F0fVOTwmXze3vlGjwmI/iamhwzCwDptMQFVEQkIn3siy8qPPCuXdxxRaMyFMyB4ZIW4OigJtqvlA5qJgc0wEKGp69P+fU491z+/OKLSte8NC14enpkNddwn4aDGZ4tWxRej8OHZbRx6qmGvsVwKRxwTPBUVkpX9/zzCg/87rv8ub7eoIKx6Dsow6OOaDSKurq65GP48OEAeHbnnnvuwa233opLLrkEEyZMwMMPP4zOzk489thjWY8Zi8XQ2tqqe7iKyPAYnJLe2SmdlmHB096u2NPykoXYx1JZavrdd/kvWFlpaAo2YKKcBTjmtADgs5/lz88+q/CgIrtz3HG8U9wAlqI0Bwc1pTO1LAgewxmeoiJ5PRTbxymn8Cxgezvw2msKD2xS8GjbTwYPzvFhBwe00aP5oNrTI03cNmvX8udjjpHlpxxYEjyKgyVA+o7nnlN4UCezf9oPkeBRx9atW9HQ0IAxY8bg8ssvx0f9qzNt374djY2NmDNnTvKzJSUlOOuss7BmzZqsx1y0aBGqq6uTj1EGm/0cYd8+PsUoEjG0iJr4FoD38+ZMww4eLKfq+KH5UJQsTj3V0I7xgImmVEAqRAcEz9y5/HnVKllis43JchZgsaTlYMlT2VpNiYTpBSkBExkeQGZ5FNtHQQFwzjn8tbIovrPT1KJygPwzV1cbWN9U2EZzs/LO80jEgQygjeyfV4KlFSsULl3gtOBx0Hc4gecFz9SpU/G73/0Ozz//PH7zm9+gsbER06dPx8GDB9HYr7JrhRH2U1tbm/xaJhYsWICWlpbkY6dj+wEYQNzt48bl2BRLoi1n5exTLChwtLlMeeOydpaFQbzitMaNA446iifSXnpJ0UFtOC1DaWkHo7QJE3gvz/79ctkAW2zdytVcaalsEMpBZ6e8Hqbsw4HGZTGoKRM8YlG54cMNLSoHWIzgGVM+MwlwoHHZZO8f4B3fceqp/H5tbpa/hm0sBEuWBA9leNQwd+5cfOELX8DEiRMxe/ZsPP300wCAhx9+OPmZSMqIzxgb8F4qJSUlqKqq0j1cw2Q5CzCxBo/ATzO1LDgtyyUtxUtERyIyy6OsrCW2UHDaaTkQpZWVyaqkkrKWEMOTJ/PykwHEgDZoUI5FGAUODmoiGf3WW4r0lNMRfFGRXK3RQd+hJMPDmK8zPIWF0j6UlbXyVdKiDI8zVFRUYOLEidi6dWtytlZqNqepqWlA1sfTWJihZbhhWZCHxtQdOxT4xI4OeZM6FaWJSLinR9Z+FKIVPLb11MGDcjSYNs3wt5kqaTlch1da8rTZv2No1raDg1ptrbxfXnhBwQFFc7+FAS3nInuCPExNV7JW0yef8FRiUZHhxUoBi4KnqcmR/XSU9vFs28YHimiUMjz9+E7wxGIxvPfee6ivr8eYMWNQV1eHFStWJL8ej8exatUqTJ8+3cWzNImFGVqGp6QLHBzUqqvlgqa2B7W33uJ9Gg0NBhtyOKZ6eEpLZbemA4PazJm8t3j7dgXT01eu5I51wgRT18Mrs7QAxX0aTs7QEjgoeAA5W0tJWUscZMYMw99ieNFBgYP2MW4czwJ2dChYq0nYhonFSgGLgiced6TEJ2xj3Tq5+rNlhG18+tOGWyUAalp2lZtvvhmrVq3C9u3b8cYbb+CLX/wiWltbceWVVyISiWD+/Pm4/fbbsXz5cmzevBlXXXUVysvLccUVV7h96sY4fFhukWsiKrGc4XE4irdd1rJQzgJMOi3A0UFt0CDgjDP4a9uRmnBawhMaRKyL5oWppcpmanV1yX0ILGR4DAseh5qWBeJP+cILNpf6+egjrqijUWDWLMPfZmpA037QAftQulaTBd/R3S2FhSHfoZ0l4oB91NdzvcYYb162hXA+Im1kgK4uvhUZ4H453Ak8L3h27dqFL3/5yxg3bhwuueQSFBcX4/XXX8fo0aMBAN///vcxf/58XHfddZgyZQp2796NF154AZU5dwn0CGIUOOooEx7Ie4JHWS3egtPq7DSxUqrAwemlgKI+HsYsCZ79+/n1iESAMWMMfIO2Du9Aml7o+I8+srlF1YYNfPpKbS1w5JGGv81LYhjgAXdFBa+K2NpHSgxo06cbbE7imBY8fgmWLGT/RO9fWZnhNSwdtw8lZa1YTM6aMCF4xMSCkhKDSSEqaall2bJl2LNnD+LxOHbv3o2//OUvGD9+fPLrkUgECxcuxN69e9Hd3Y1Vq1Zhgol6tutYKGcB3hU8yjI8FpxWRYWBKfoCh52WEDwvv8wFmSW2bOEeqKxMpowMIFqgjj6aX5OcCNvo7ZXbiiukpkbqE1tZntdf589TpxreQgGwkOFxcJYWwMudM2fy17bKWhYieECWjgwLQIejeCXBUk+PdD4WG5YNm5SDy1oA+pl8ljOAr77K64S1tYZnMwKAWNN3/HiD14NKWoQpLDQsA95qWgZklLZ1q40xs6kJ+PhjfqdNnmz42yw5LYcFzwkn8EE+FrOxlYAYDc86y1RPgnBahnV/WZk8vpfLWhYieMBmhseBjBegYHp6LCaX8xbq2iBi0p/BJb/yluGxtVbT5s28HlNdzTdxM4hp2wAc9x3Tp/PsSlOTjftFiOFzzzW8lhkgbWPiRIPfIGyju9uBDQTVQ4LHTRgDxAKJJqakM+ataekAb3s44gh+bpbT9CK7c/zxplL0pqakCxyO0pRMT7fYvyMyPIadFpC3KN7WlhtC8JiYrQbY6OGJxeRy5ooRf9JXX+UrL5tm9WoewdfVmVAuvNy5dy+3T8OC2OEoXqzVdPAgn2hlCe3aXSYGeC8KnuJi2ZJluawlfIfJ7J8Ilgz7jspKuXqlD7I8JHjcZP16PpWnvJxH8QY5fJhncAHDa43JAU3xLr9aRNvN3/5m8QD5algGHO/hAWxuM9HZCbzyCn9tUvCYdlqANCSHrseXvsSfn37a4uaI+/bx0TASkbtwGsDUTtiC8nLZwODQoHbssbzk2NNjcYFKbTnLRHlPRPDHHGNi4o7YosH2tKH0lJYCp5/OX//+9xYP4obvcMg2AJt9PHv28D90JCKX9jaIsA/DVbBIRNqHg9dDFSR43GTZMv58wQUGmy04YkyqqeHNZYYQU5p37nQsTf+1r/Hn//s/nuE0jU2nZWLWdl6c1qxZfEmQDz/kpT5TrFrFMwxHHml4PzGA1/wtrDUmm2wsh9jZOeEE4Mwz+VorS5ZYOICI4MePN9GoJW2jstJU0jAv9mFrerpQ0SYjeNMDGiBTY2LXbQf45jf584MPWlyPJ1/lTiCvtrFmjYVGf2FQU6YY3k8M4BUp0d9lKljqn0DklO9QCQket0gkgMcf568vv9zUt5pegweQA1p7uyOL7QHA+edz33jgAPCnP5n8ZsYsCx5LJa08OK3KSuAzn+GvTWd5tOUsExH8jh38T1xcbKqVgc8SBHgPlUN861v8+be/tTCoaRuWTWBpQAO8LXh27uQN7drNuQwiys0mqmDSNnbssDmPPjNf+hJPQu/YATzzjMlvbm3lW2wAgcnwjBnD1yjq6wP+8Q+T32yxnPXuu/zPO2yYybGFBA+Rk1df5XdbdbXppkPTDcsAb0wV3+DQoBaNykHt/vtNfvP69ab3SBJYclraHh6HMl6A/NOaTk1b7N8R5azjjze88wInD07rC1/gg9rOnRYEoMUI3nT/jsDhmVoAn6kVjfKoWizFZQhhTFOnmlrKArCY4Wlo4E02PT0y2lJMaSnwb//GXz/wgMlvXrOG38OjR8u/m0G8KngAi2Wtvj65hLfF7N/EiaZiLBI8hAH+8Af+fPHFJupSHEuCB5CG6WAU//Wv84H29ddNTlFfupQ/X3wxT0+YwJLTcnh7CYEQPC+9ZGISw44dwL/+xQcZEwvKARYbloG8OK2SEuCqq/jrX//axDceOAD885/8tUiZGcTLGZ6qKj4jBzCZ5REjoMlAqadH7iVpSvBEo1IxOmgfIlh67jne2miYRx7hzyavRzwu/7yWBY+DwZJW8Bj+MWvXcn9WXW062yWCJZPxJgkeIge9vbLm8+Uvm/72Dz/kz6Z6VoC8lC1qa4EvfpG/Npzl6e4GHnuMvxZhnkF6eqTTMnU9SktlU4eDg9qJJ3Jn2t3N23IMIUa/qVPlFhgGsdSwDOTNaYlejWefNdES8sgj/A89ZQrv4TGB5QyPw6stC0xPT+/p4duNaL/ZIB98wAf5ykrpCgyTh2Dp2GP55pmMAf/7vwa/6fBh4C9/4a+vucbUz9u7l/+s4mJTrS5S8HR3O7JulUCsRrFzp6zY5USI4XPOkbOnDGJ6SrogD+OKKkjwuMGLL/Kodfhw4OyzTX+7mLxjcnauNEyHB7XrruPPjz1mMHny17/yfWmOPNL09bDstIC8RPGRiIXZWhbLWYCFNXgEYkBrbLTYcW6M447jf+JEgvfy5IQx4De/4a+//nXTP8/LGR5A/on/8Q8uRnLy2mu8Z2XYMFNrVQH6Ac3EzG1OnnzHt7/Nn5cskVscZOWxx/gHTzrJ9PXQ2oap65GHWXwA70IQk3cNl7Us9u8A3g+WVECCxw1EOetLXzKtwvfvl2npM880+XPzpMQ//Wl+03R1AQ8/bOAb/u//+POVV/Iyjgm0M7RMO/E8DWqm1uPp7ZURvEnBE4/zShhgwWkNHcodOeDobBxAli6WLOG/blZee42Ht+XllrKhtnt4HLaNk0/mcU97O/9VcyKMyOSCcoBsWDZdsgDykuEB+MSHkSN5PCgSN1kRU/6uucZk44kNMQx4s4/n4EE58cOk79i3j7erRSKmNlbnCNs4fNjRjJcKSPDkm1gMeOIJ/trk7CxAZncmTrSQ0ciT04pEgOuv56/vvz/HxI4dO+QALxo8TGBpSrpANEE5uBYPAMyezXXt1q2yHJmRN9/k81BrakytNwPwkkVvL+8NMT3ARyJ5i9QuuohXjPbsAf7+9xwfFmmgyy4zNR1dIASP6UFNrOgpDMwhCgp4GQcwWNayuJ0EYGGFZS15yvBEo8A3vsFf52xe3rCBP4qLga98xfTPUiJ4HPYd4s+8ahVfUyorK1dyZyvq6CYQ2Z1jjjG1QgqnslI2z3s8y0OCJ988+yxPSY8cyVMhJhHbFMyYYeFn58lpAdz/VFbyQT7rtMqHH+Zlixkz+EpsJhEZDRN7SUqEU3BYAFZVyT91ziyPGPVmzzad7dKWs0wGu5w82UdxsWzVytq83Noql26wUM5qb+eVUsCCADzuOP68c6fFpZCNY3h6+t69fK+BSMRSudMPGR6A/6kLC/li0sKm0yIywxddJBdWNYH4VSwFS8JXmV5gyxzjxvFLH48b6AFUUM6yZBtAXu3DDiR48o1YbPCyyyzUYGwKHmGULS1yJHCIQYN4hQrI0rycSAAPPcRfX321pZ/z9NP8WWzGaArRACtqhA5iuKxlo3/H8gwtQR5r8SKKf+GFLDNy/vAHvuL0CSfIpXhNIGYJDh1qITk0bBivNQHA+++b/tlmEBmet97KMQte2MbkyfLcDHLggNwJ25J9aMWwgzOTAD4L/qKL+OuMgri7Wy7LbLJZWbBiBX822frDEb7j3Xct/WyjaHsAs5a1GFOS/fOD77ADCZ580tEh912wUM7av18Oaqb7dwDeByFmn+RBiYvm5aeekqUFHa+8whcgqazki7SYZO9eWbI+/3wLJyiK1Q47LUA/PT1jT/ChQ3xaKSBHQRNYblgW5NFpHXMMn0ii7UkegChnfeMbllJWy5fz5/POs3aOOOEE/mx4iow1amt5Lw8gB+G0WJyODkjbOPpofruZRuzM293t6NpEAtG8/MgjGRJsf/0r7xk58kjTSzcAXMO+/z5fQsPC5cyb4AEMCp5Nm7hDLCszvXSD+HaABA+hkqee4hHrscdaCitE/86ECRb6dwR5TD2ecALPvCQSGaaZirV3Lr9cNsyaQPR/nHaahTWJxAkCfKlm0+u3m2PiRB65dnVlKfHZqMED/nNa117Ln//v/+TecEk2bgTWreMj0le/avrYjEnBc8klFk8wT4IHkIPuvfdmWIW6t9fygnKAzXIWwOuQovaTB/s4+2xeVWxry7C/lmhWvuoq06VfAHjySf48c6al1jApeN57z7HVpwVnny17ANety/Ahkf2bOZPPZTdBX5/F9Zm05LFdwg4kePKJKGddfrmliFXUcC2VswR5NkyR5fnNb1Km3ba2yrWILJazRLLswgstntzgwVyFAI4PapGIHHhvvjlNlocxPtoBllISbW1Sw9rO8OSpDn/BBVyo7tsnB6AkIrtz8cWW1P3GjdzEy8osJcs4eYzib7iBLwv15pvSDHSsXs0zGkOGmF5QDrDZsCzIo31EIlIQP/BAShXt4495cBCJmF63SyDs7fOft3iCY8bwlTS7uhz3pVVVcvPdr389TXDQ1ydVoYVS+LZt3B+VlVlqo+RQDw+h4/Bh2cBhoZwF2OzfEeR5kajPf55riqYmOTkNAG9G7erieyCY3C4A4Ikykf63LHgAWdbKQx/PwoW8fPGvfwE/+lHKF594gm83Ul4OfOc7po8tTr++3lL/Jkc4rd27DcwXt09RkWy/0GUAu7qARx/lr0Wzj0lEduezn7WUPOTkMcPT0AD88pf89a23pmw1wRiwYAF//YUvmF7KAlCQ4QHyngG88kqerHj7bbmVGgCZGZ41y8IKilxgiyUALPuOaJR3FAN5EcT33MPv67ffBn7+85QvPvII/0J1NXDFFaaPrS2FW0iWcaikRehYvpxL84kTLSx0wJsOhWFa6t8RCAdhavMe6xQVydV1/+d/NF8QTuvqqy1lu1au5FHJUUfZyGgAeY3ihw6VA/svf6lx4vE48IMf8Nc332xp2ojtchbA1VJpKY8Yc86fV4Noz1m5Uu7UjD//mZcYjzrK0sKcgBQ8F19s4+SEbWzbZnBVQHtccw2vSHR18euSzGr84Q/cWCoqgB//2PRxe3ulILaV4RG+I/mHcpaaGhkbJqeo9/XpfYcF/vY3fm2nTLE4JV2QR98xYgSweDF//dOfamavtbcDt9zCX//nf1rKhtpuWAZ4xgvgatLh9gA7kODJF9pylgVE/86JJ5qeoKFHqIP1620cxBzf+IacZvrOO+AR82uv8Tct9GcAspx1wQUWp2AL8ui0AJ7x+n//j5f9r7qqf3+t++/nAqOuDvje9ywdVzSz2xJ/BQXAKafw16J52mFGj5YtKQ8+2P+mKGddc42lmYxbt/LrEY1abGYXNDTwDt++PsenHwPcjn/zG15aePHF/lnXnZ1SDC9YIEuwJti6lS//VVEhxyVLiM7qPNkGIJuX//hHvq4e/vEPPgNiyBDLatZ2OUsgMoB58h2XX87PuaeHV/J6ewH84he8Wfnoo4F58ywd1/aUdID/PYRx5XFsMQsJnnywb5/sVHWznAXwZunCQl62cHhRNUFDg/RNDzwAORX9vPMsdRsnEgr6dwR5LGkJfvUr/mu//z7wX9/vAn7yE/6Fn/5ULllvEiUZHkD2h4jpb3lArLy8dCkQ27yVq/uCAksLUQIyuzNzJvfDlolE8lrWAvjstZ/+lL++6SZgzw8f4Pfp6NHAjTdaOqYoZ1naUkKLKD2/8w4XYnng1FOBT32KC7alSyGblb/yFdPNuQCfKCvWObUteLSNy3kgEuH+c/Bgrinu/K8WLngA4I47TG9CLVCS4QGk73jjDZsHcg4SPPngz3/mo/Rpp1nuClMmeCoqpGXn0TDFysuPPMLQ8lD/iGQxJb12LdeQVVU2y3uAHNB27uSN1HmgpkZmM+68rwSvHR7HUzMWGzAZ87fg+dzneBXvwAFg+YL+n3veeZbrDUrKWYI8D2oAb+E69VReGbjunuPAAD6glZVZOp6ShmWAr95YV8czXhs22DyYMSIRmeX59f19SCzvT89YXHvnhRd4KXzMGJvZUECfHXZ4bSJBfT3v5wGAH/13Gf7VdSRwxhmWpyK2t8vuBj/6DrOQ4HEaxpB4pL+D3sJeQABP5Srp3xGISC2Pguess7i26OiI4JGmObwu97nPWTrWU0/x589+ls+WtUVNjcwyiWWb88AFFwBfvagNDAW4Cg+h62d3We4YfOIJLhZKS6V+s4xwWhs25KVvBeClJ7GQ8q+fP4q/sLCyMsAX1xO9UbYjeCDvZQuAX48lS4BopBdPJi7An4//TzlNxySJhJyxbKtkAXD14YLv+PKXeT/uh9sLsbLnTF52FeU1k2jLWbZK4QBfXiQa5VMkd++2eTDjfO1rwNzpzYglivFvWIq+X9xl+Zf54x/5c0ODzVYJgAQPAay+Zx0mvPFbfFB0Il9d2QKif2f8eLluoC3ENuu6qQ/OEonIKep347tovOQ63tFsAWXlLIEoa2Vdx149v0rMQz324AOMww9fOcfSMTo7ZaXje9+zMSNJcMwxvA4Uj8vUQB74+teBggKGVT2fxn9W3A0219pqgWJAmzbNUrvLQEQUv3GjgoMZZ2LH67iF/QwAcEPTf+HgIWsD2m9/y1dwrqxUlPFyQfBUVABf+yrPoPwA/439l15v6Ti9vdJ3iJWcbVFcDIwdy1+LumEeiIDhf3uuQSVa8TpOx69eNbfnnuDwYdke9t3vKjixT32KB2179uStXcI0jGCMMdbS0sIAsJaWFmXHTCQYO3vwOgYwNnHYbtbYaO04//7vjAGMXXedohN7911+wLIyxnp6FB00Ny3/WMvqsZsBjI05Isb+9S/zx/joI37qhYWMHTyo6MRuvZUf9ItfVHRAA6xezRjA/ha5gAGMRSKMvfqq+cMsXMhPfdQoxjo6FJ3buefyg95/v6IDGuMXxz3IeG2AsWuvZay31/wxzjmHf/9//7eikzp0iLFolB902zZFB81BXx9jU6eybhSz8YN3MYCxK680f5h9+xgbMoSf+j33KDq3lSv5AUePVnRAY2x/dDUbiv0MYGzsMb3so4/MH+Pll/mp19QodHvf+IZi52yAP/+ZMYA9WHQdAxgrLWXsgw/MH+b66/mpn3ACY/G4onM7+WR+0L/8RdEBjWF0/CbB048Tgocxxna/1chGlLUygLG6OsZeesnc97/+OtclSm2or4+x6mp+0LfeUnTQHHz0EWPDh7OtOIYdU7GHAYwNHcrYmjXmDvOrX/HTnjFD4bmtXcsPWlHBWFeXwgNnIJFgbOpU/jO//nV25ZX85dix5kTLxx9zZwcw9vjjCs/vhz/kB73qKoUHzcHddzMGsF/jWywSSTCAscsuYywWM34IrTaxMgBk5Oyz+UHvukvhQbPw6KP85w0axF77234WifD/PvecucNcdRX/vpNPVjjAt7Sw5AlZjeDM8q9/MVZTw/6F49joQfuTvnTjRnOH+e53+Wl/7WsKz+3vf+cHHTmS39dO093N2NFHMwawxA//i82axX/8mWdyt26Ut95irKCAf+8//qHw/L75TX7QH/xA4UFzQ4LHJE4JHsZ4QmX8eG4HBQWM/fSnxqLXbdsYGz6cf9955ylOxohQ+N57FR40A4cOMXb88fznnXIK2/dROzv1VJaMTpYvN3aY99/ngSXA2J13Kjy/RIKxI47gB/773xUeOAPLlkmBtWcPO3yYsYYG/tZ3v2v8MF/8ohR/Sn3t3/4m00ZW0ixmefxxOYguWsSWLWOsqIj/97OfZay9PfchEgmZqJswQfH53XOPAyo7A+3t0hZvv50xxtj8+fy/Rx7JWGurscO88gpLZg5fe03xOQpnplRlZ2DfvuQAz047je3e1skmTuT/rapi7MUXjR3mnXekL1WafOjq4vcxwNi6dQoPnIFf/IL/rPp6xtrb2fbt8scvXmzsEH19jJ1+OksGFUpZsoQfeMoUxQfODgkekzgpeBjjfkxEXADXG/v2Zf78/v084gcYmzyZsbY2xSf0y1/yg0+a5GxkEosxNnOmjIJ272aM8etx/vlSBP7P/2Q/zGuv8YwQwP3f/v2Kz1Pkd7/+dcUHTqGri7GjjuI/68c/Tr799NNygLrvvtyJJlFZKCjgzlwpnZ2yFuK0AHz5ZcaKi/nPuuGGpC0+9xxj5eX87enTuWbORHc3Y//2b/LeMur4DfPhhw7UUTPwox/xn3XUUUkjaG+XJjNrFk9IZiMe56IP4AG3cn7wA37w2bMdOLiGjg7GTjtN3vT9DvPwYZ7RALjp/PGP2Q/z/POMVVbyz594IjdvpXzhC/zg//mfig+cQlMTV3kAY0uXJt++7z4ZPy1Zwu+HbCxdKj+/c6fic2xslNHK+vWKD54ZEjwmcVrwCJYulSWq+nru71Pp7JQK/KijGNu714ETOXhQnsiqVQ78AMYHL1Gvqaxk7O23dV/u6ZEZUJEFTZeWffJJeapTpjiUSRcKYsQIZ7Mad9zBf05Dw4DUhXbQHjGC66FUYdfVxTNiQgzfcIND53njjfwHfO5zDv0AxtimTbK0esklA677mjWMDR7MvzxxImN79gw8RFMTY2ecIcXfvfc6pN+Fgnj0UQcO3s+OHdLQ//Qn3ZdWrpTlOoCxOXO470j9XT/8UGr3YcMYO3DAgfPcvl1m5N57z4EfwLgtfP7zsunm/fd1X+7q4iajDRLS8ZvfcJ0qEnTZhLNlfvc7aaROct11ySy51lH29cmYUriWX/yCVx+1tLfz9p8RIxT3uaXy5S/nJ3jUQILHJPkSPIwxtnmzvsR1/fWM3XwzY1dfze/xE07gXxsyxDl/whiTDXdONev+5CcyMs7QgJBI8BKfuFlPPpmxCy/kOmn+fMbmzZO15vPOcyDTJYjH5ei6erUzP2P/fjnAayI0QSzG20SOPFJej7Iy3sC7bBljV1whI1WAp+gdSzh88IEcTbZvV3/8HTtk6eYzn8kYdr/zDg8MAJ7h+8xnuLnOm8fYbbcxNmaMLG88+6z600wi6mVf+pJzP+OKK/jPOOOMtKptyxbGvvpVOYCL7NcjjzC2YAHPXoj3Acb+7/+cO1V24YX8h8ybp/7YiQRX8gBjJSWM/fOfaT/W28vYt78tf99TT2Xsggt44PC97zF2zTXya1/9qrl+MFMcPCj/KFa6qY2wZYv8GWkaQdvbucgRpXGAu5r/+A/GHn6YsYsukv1+AO8wcOx6/POf0nk5ojAHQoLHJPkUPIxxAxXJj3SPkhJeh3eUd96RgmTHDrXHFo2XAGP/+785P750qd6Rpz6uuSYPE8r+3//jP+zaa9Uf+9Ah3pAiyohZskg9PYz94Q+8lJnuWowaxXt9HJ80JPq8/uM/1B738GE5Op9wQk7V9uGHjB1zTGbbOPpo3ifnKG+8IesAu3apP/6TT0qBmaMU8NFHfKAvKRl4LQoLeSZjyRKHe2hfeEEqTaONRUa58075C+WoVyUSMq7K9PjRj/LQTzxjhvxhqmlqkin/iy7K+tFYjAtd0TKZ+hgzhrGbbnLGhJMkEizZaHX33Q7+IInR8TvCGGNuTIf3Gq2traiurkZLSwuqqqry9nP/+Ee++ufgwXwNvKFD+fNpp8kNaB1lxgxg1Sq+Ad3PfqbmmK+8ApxzDl/L5Xvf46vEGmDbNr7e3eHD+sfUqXwRYtsLheVixQpgzhz+g/7xD743gQrefBO49FK+k3BxMV/b/owzcn4bY/xS3nUXvzbnnsvXn5s61eYWAUZZvpyv4Dp8OF+J2uLS9Tq6u/mKkatW8YVyXnsNOPJIQ9+2bh3fNqixUT5XV/M9Ey3vEG+URIIv7rN2LbeR555TY5A9PcAPfwj893/z/3/963xDLQPs3QvcfTfw97/zVZQvuACYO9fmdhpGSST4oowffMD3ghPLIdvlz3/m9wpjfIfdm24y9G3vvce3atm/ny/CeeAA9x0XXqhozZ1c/P73fJO8oiJ+v1tcGHEAr7zCV17cs4cvSLRhg1z7JwuJBLeLX/0KaG7me8pdfDG3E8f9KAD8+tfcJsaO5Qu6OuywDI/feZFfPiDfGR7P8Je/yIK/im6+f/1LNrx+8Yvm5kp6AZEHP+II+/WiRILPoxdNfEcfnddGPtv09Miyk4r6SF8fLwmJzEBKT5fnee89WRfI1DRiho8+kssTADxtk49lEVQh1og48UQ1fW+vvirTVpoGdl+QSMieIxWd0b29vNYv6vknnMB73vxCa6usvz/9tOM/jkpaJgmt4OnpkU0j551nb/U67RTSadMcmA6RB9raZEfwF79o3ek2N8vZGwDvsGxuVnuu+UA0WJWU8OnqVkkkGPvOd/ixioqMzyf2GmKQLytjllbOFPzxj7Kfa/Bg3k3qN5qbGRs0iP8Ol19ub/W699+X0zAvvDA/yyGopqmJsdpa/jt85zvWj9PYyGfACd9x5ZXG1mbwGvPmyeDG4f4MEjwmCa3gYYzX48XskE9/mvdYmGHHDt51LaZMjhmTfc6913nzTTklxkpm4623ZNNJNMrXcfFTtKqlu5v3DYjfJWX2UE56e/m0srPOkg78D39w4kzzQ1+fHIxOO818Y1lnJ2Pf+pa8Fqef7kxTeL74859lBtNKwLRtGx8YxWIyp56qcMlwF3jmGfm3ff5589//j3/wVRUBvi7DQw+pP8d80dIip1CWlfFr49iPIsFjilALHsZ4Z72IODPNAU5l/Xo+s0Q7X3b8eHuRr1e4/XaZ2bjxxtxrA/T08HnUt9wi0/JHHsmXyvY78TiP4AGeYn/44dwCrrmZN5+KaVSiozYfC106zc6dckbflCnckee6Hvv2MfbYY3J6eyTCp1YpW9PfRZ59VgZMZ56ZO5OZSPCI/6KL5PR2cS3ztXqzk4h1ASor+arluWYqxeP8enznO/J6nHgin5nldzo6uBAWAdOyZY78GGpaNolbTcue4p13eGdsYyNvUD3jDN58LJp39+0Dmpr484oVwEsvye+dOZM3GM6dm6eOWofp6+NdfmK3wdJS3lB6+um8U7a6mjcRrlvHu85XruTdgYLzzwcefph3oAeBvj7gG98Ali7l/x8zhv+tzzsPGDWKd4mKjtEtW4BHHgHa2/lna2qAb32L7x47cqR7v4NKnnwSuOIKvnsrwO3iyit5g3dNDX/s3s3tYuVK/UastbX8+pxjbcNYT7J6NfC5zwGtrXwH2xkzuC8580zecd7UxO1j3z7giSeA9evl9553Ht8B9+yz89RR6zCdnfxvu2YN/39VFbf9k07is1OGDOGTF159VfpRca8AwNVXA4sXK9gJ2CPE4/zeWLaM/30ffJD7UoVQ07JJQp/hEWzbJqPQXI/CQp7h8VMjrhkSCR69T5tm7HoMHsz7fh591H/N2kbo6+MLnIgSRq7H+PGMPfigv0sU2di3j8/x1S5wku0xaRK/fkHIYqRj/Xp9Ri/bo7SUl/YcXWjMRfr6eLlPTM/O9Rg2jGdRn3zS7TN3ht5e/vcuLGTsqaeUH54yPCahDI8GxvhUwhUrePbitdd4tDFiBI9Oa2uBo48GrrqKR/dBhzE+TX3JEh6htrTwR1sbcMwxPJI991zg1FOBwkK3z9Z52tuBF18Enn2W20dbG89sDBvGH7W1fDr7rFnBiNhzsXcvn/+7ZQtw6BB/HD7MM4Bnnw3Mns2fhw93+0ydhzGezXr+eW4b69fzbOiIEfJxwgl8nYlhw9w+W+dJJPjyDo8/zrOfzc3cNtrb+Rzxc87hj5NPDkZmPBuMARs3AqecovzQRsdvEjz9kOAhCIIgCP9hdPwOuKQkCIIgCIIImOC5//77MWbMGJSWlmLy5Mn45z//6fYpEQRBEAThAQIjeB5//HHMnz8ft956KzZs2IAzzjgDc+fOxY4dO9w+NYIgCIIgXCYwPTxTp07Fpz71KTzwwAPJ90444QRcdNFFWLRoUc7vpx4egiAIgvAfoerhicfjWL9+PebMmaN7f86cOVgj1kJIIRaLobW1VfcgCIIgCCKYBELwHDhwAH19faitrdW9X1tbi8bGxrTfs2jRIlRXVycfo8IwvZogCIIgQkogBI8gkrLmB2NswHuCBQsWoKWlJfnYuXNnPk6RIAiCIAgXiLp9AioYNmwYCgsLB2RzmpqaBmR9BCUlJSgpKcnH6REEQRAE4TKByPAUFxdj8uTJWLFihe79FStWYPr06S6dFUEQBEEQXiEQGR4AuPHGG/HVr34VU6ZMwemnn44HH3wQO3bswLXXXuv2qREEQRAE4TKBETyXXXYZDh48iJ/85CfYu3cvJkyYgGeeeQajR492+9QIgiAIgnCZwKzDYxdah4cgCIIg/Eeo1uEhCIIgCILIBgkegiAIgiACT2B6eOwiKnu04jJBEARB+Acxbufq0CHB009bWxsA0IrLBEEQBOFD2traUF1dnfHr1LTcTyKRwJ49e1BZWZlxdWYrtLa2YtSoUdi5cyc1QzsMXev8QNc5P9B1zg90nfODk9eZMYa2tjY0NDSgoCBzpw5lePopKCjAyJEjHTt+VVUV3Ux5gq51fqDrnB/oOucHus75wanrnC2zI6CmZYIgCIIgAg8JHoIgCIIgAg8JHocpKSnBj370I9qoNA/Qtc4PdJ3zA13n/EDXOT944TpT0zJBEARBEIGHMjwEQRAEQQQeEjwEQRAEQQQeEjwEQRAEQQQeEjwEQRAEQQQeEjwOc//992PMmDEoLS3F5MmT8c9//tPtU/I1r7zyCi644AI0NDQgEongr3/9q+7rjDEsXLgQDQ0NKCsrw4wZM7BlyxZ3TtbHLFq0CKeeeioqKysxYsQIXHTRRXj//fd1n6FrbZ8HHngAJ510UnIxttNPPx3PPvts8ut0jZ1h0aJFiEQimD9/fvI9utZqWLhwISKRiO5RV1eX/Lqb15kEj4M8/vjjmD9/Pm699VZs2LABZ5xxBubOnYsdO3a4fWq+paOjA5MmTcJ9992X9ut33HEH7rrrLtx3331Yu3Yt6urqcM455yT3SiOMsWrVKlx//fV4/fXXsWLFCvT29mLOnDno6OhIfoautX1GjhyJn//851i3bh3WrVuHs88+G5///OeTAwBdY/WsXbsWDz74IE466STd+3St1XHiiSdi7969ycemTZuSX3P1OjPCMU477TR27bXX6t47/vjj2X/8x3+4dEbBAgBbvnx58v+JRILV1dWxn//858n3uru7WXV1Nfv1r3/twhkGh6amJgaArVq1ijFG19pJhgwZwn7729/SNXaAtrY2NnbsWLZixQp21llnse985zuMMbJnlfzoRz9ikyZNSvs1t68zZXgcIh6PY/369ZgzZ47u/Tlz5mDNmjUunVWw2b59OxobG3XXvKSkBGeddRZdc5u0tLQAAGpqagDQtXaCvr4+LFu2DB0dHTj99NPpGjvA9ddfj8997nOYPXu27n261mrZunUrGhoaMGbMGFx++eX46KOPALh/nWnzUIc4cOAA+vr6UFtbq3u/trYWjY2NLp1VsBHXNd01/+STT9w4pUDAGMONN96Iz3zmM5gwYQIAutYq2bRpE04//XR0d3dj0KBBWL58OcaPH58cAOgaq2HZsmV46623sHbt2gFfI3tWx9SpU/G73/0Oxx13HPbt24fbbrsN06dPx5YtW1y/ziR4HCYSiej+zxgb8B6hFrrmarnhhhvwzjvvYPXq1QO+RtfaPuPGjcPGjRvR3NyMv/zlL7jyyiuxatWq5NfpGttn586d+M53voMXXngBpaWlGT9H19o+c+fOTb6eOHEiTj/9dBxzzDF4+OGHMW3aNADuXWcqaTnEsGHDUFhYOCCb09TUNEDdEmoQMwHomqtj3rx5eOqpp/DSSy9h5MiRyffpWqujuLgYxx57LKZMmYJFixZh0qRJ+NWvfkXXWCHr169HU1MTJk+ejGg0img0ilWrVuHee+9FNBpNXk+61uqpqKjAxIkTsXXrVtdtmgSPQxQXF2Py5MlYsWKF7v0VK1Zg+vTpLp1VsBkzZgzq6up01zwej2PVqlV0zU3CGMMNN9yAJ554Ai+++CLGjBmj+zpda+dgjCEWi9E1VsisWbOwadMmbNy4MfmYMmUKvvKVr2Djxo04+uij6Vo7RCwWw3vvvYf6+nr3bdrxtugQs2zZMlZUVMSWLFnC3n33XTZ//nxWUVHBPv74Y7dPzbe0tbWxDRs2sA0bNjAA7K677mIbNmxgn3zyCWOMsZ///OesurqaPfHEE2zTpk3sy1/+Mquvr2etra0un7m/+Pa3v82qq6vZyy+/zPbu3Zt8dHZ2Jj9D19o+CxYsYK+88grbvn07e+edd9gtt9zCCgoK2AsvvMAYo2vsJNpZWozRtVbFTTfdxF5++WX20Ucfsddff52df/75rLKyMjnuuXmdSfA4zP/8z/+w0aNHs+LiYvapT30qOa2XsMZLL73EAAx4XHnllYwxPu3xRz/6Eaurq2MlJSXszDPPZJs2bXL3pH1IumsMgC1dujT5GbrW9rn66quT/mH48OFs1qxZSbHDGF1jJ0kVPHSt1XDZZZex+vp6VlRUxBoaGtgll1zCtmzZkvy6m9c5whhjzueRCIIgCIIg3IN6eAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCIAiCCDwkeAiCCDzz58/HRRdd5PZpEAThIiR4CIIIPGvXrsVpp53m9mkQBOEitJcWQRCBpaenBxUVFejp6Um+d9ppp+GNN95w8awIgnCDqNsnQBAE4RSFhYVYvXo1pk6dio0bN6K2thalpaVunxZBEC5AgocgiMBSUFCAPXv2YOjQoZg0aZLbp0MQhItQDw9BEIFmw4YNJHYIgiDBQxBEsNm4cSMJHoIgSPAQBBFsNm3ahJNOOsnt0yAIwmVI8BAEEWgSiQTeeecd7NmzBy0tLW6fDkEQLkGChyCIQHPbbbfh8ccfxxFHHIGf/OQnbp8OQRAuQevwEARBEAQReCjDQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4CHBQxAEQRBE4Pn/q1tV1QYtA/8AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "388 µs ± 5.72 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - DOP\n", - "# 1.78ms\n", - "# >>0.5.0 388us\n", - "time_domain, y_results, success, message = nbrk_ode(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, rk_method=2)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, rk_method=2)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "6f923900", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.83 ms ± 14.1 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Cython - DOP\n", - "# 4ms\n", - "# 2.92ms\n", - "# 2.8ms\n", - "# 2.65ms\n", - "# 2.51ms\n", - "# >>0.5.0 1.83ms\n", - "\n", - "\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, rk_method=2)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit cyrk_ode(y_diff2, time_span, initial_conds, rtol=rtol, atol=atol, rk_method=2)" - ] - }, - { - "cell_type": "markdown", - "id": "3991aa3c", - "metadata": {}, - "source": [ - "### Check t_eval" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "4428d366", - "metadata": {}, - "outputs": [], - "source": [ - "teval = np.linspace(0., time_span[1], 50)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "d1a16110", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "431 µs ± 4.56 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - t_eval\n", - "# >>0.5.0 431us\n", - "time_domain, y_results, success, message = nbrk_ode(y_diff, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, t_eval=teval)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "78d4ccfd", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "With teval\n", - "404 µs ± 286 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", - "Without teval\n", - "662 µs ± 6.41 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba tester - t_eval\n", - "# 449us\n", - "# >>0.5.0 (404us, 662us)\n", - "time_domain, y_results, success, message = nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "print('With teval')\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval)\n", - "print('Without teval')\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "6de1fece", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "With teval (extra with Interpolation)\n", - "459 µs ± 57.8 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", - "Without teval (extra with Interpolation)\n", - "703 µs ± 129 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "With teval (extra without Interpolation)\n", - "416 µs ± 6.3 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n", - "Without teval (extra without Interpolation)\n", - "648 µs ± 4.19 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba tester - t_eval - extra output (Interpolation)\n", - "# >>0.4.0:: 437us, 457us\n", - "# >>0.5.0:: 459us, 703us\n", - "time_domain, y_results, success, message = nbrk_ode_tester(y_diff_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, t_eval=teval,\n", - " capture_extra=True, interpolate_extra=True)\n", - "diff_plot(time_domain, y_results[:2, :])\n", - "diff_plot(time_domain, y_results[2:, :])\n", - "\n", - "print('With teval (extra with Interpolation)')\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval, capture_extra=True, interpolate_extra=True)\n", - "print('Without teval (extra with Interpolation)')\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, capture_extra=True, interpolate_extra=True)\n", - "\n", - "# Test Numba tester - t_eval - extra output (No Interpolation)\n", - "# >>0.4.0:: 419us, 408us\n", - "# >>0.5.0:: 416us, 648us\n", - "time_domain, y_results, success, message = nbrk_ode_tester(y_diff_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, t_eval=teval,\n", - " capture_extra=True, interpolate_extra=False)\n", - "diff_plot(time_domain, y_results[:2, :])\n", - "diff_plot(time_domain, y_results[2:, :])\n", - "\n", - "print('With teval (extra without Interpolation)')\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval, capture_extra=True, interpolate_extra=False)\n", - "print('Without teval (extra without Interpolation)')\n", - "%timeit nbrk_ode_tester(y_diff, time_span, initial_conds, rtol=rtol, atol=atol, capture_extra=True, interpolate_extra=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "c6aaafe5", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "50 50\n", - "2.09 ms ± 10.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" - ] - } - ], - "source": [ - "# Test Cython - t_eval\n", - "# 2.74ms\n", - "# >>v0.4.0 2.1ms, 2.13ms\n", - "# >>v0.5.0 2.1ms\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, t_eval=teval)\n", - "print(message)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "print(teval.size, time_domain.size)\n", - "\n", - "%timeit cyrk_ode(y_diff2, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "afd997b9", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2.07 ms ± 51.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" - ] - } - ], - "source": [ - "# Test Cython - t_eval - extra output (Interpolate extra off)\n", - "# 2.74ms\n", - "# >> v0.4.0 2.19ms, 2.15ms\n", - "# >>0.5.0 2.07ms\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, t_eval=teval,\n", - " capture_extra=True, num_extra=2, interpolate_extra=False)\n", - "print(message)\n", - "diff_plot(time_domain, y_results[:2, :])\n", - "diff_plot(time_domain, y_results[2:, :])\n", - "\n", - "%timeit cyrk_ode(y_diff2_extra, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval, capture_extra=True, num_extra=2, interpolate_extra=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "6df74f5a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2.13 ms ± 28.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" - ] - } - ], - "source": [ - "# Test Cython - t_eval - extra output (Interpolate extra on)\n", - "# 2.74ms\n", - "# >> v0.4.0 2.35ms, 2.36ms\n", - "# >>0.5.0 2.13ms\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2_extra, time_span, initial_conds,\n", - " rtol=rtol, atol=atol, t_eval=teval,\n", - " capture_extra=True, num_extra=2, interpolate_extra=True)\n", - "print(message)\n", - "diff_plot(time_domain, y_results[:2, :])\n", - "diff_plot(time_domain, y_results[2:, :])\n", - "\n", - "%timeit cyrk_ode(y_diff2_extra, time_span, initial_conds, rtol=rtol, atol=atol, t_eval=teval, capture_extra=True, num_extra=2, interpolate_extra=True)" - ] - }, - { - "cell_type": "markdown", - "id": "d4acfa61", - "metadata": {}, - "source": [ - "### Check larger t domain" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "7e5f214c", - "metadata": {}, - "outputs": [], - "source": [ - "time_span_2 = (0., 5000.)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "45fe18b8", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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LlyoadOmaffu3REvtkc6/KXTFQAAEBNM6wnHPvuyAs+l3Idn+vTp+ulPf3rFBQEAAERaxO+0nJGRoY0bN0b6bXsuB+85AABATHFw1nLEA4/H49HIkSMj/bYAAABXjGdpAQAA1yPwAACAqOgxj5bA5fMwiQcAAMcReAAAQHT0xDstAwAAXA4nn6dN4AEAAK5H4LGZx8McHgAAJGdvTUfgsRt5BwAAxxF4AABAlLjoTsuXa8uWLZo4caKys7Pl8Xj01ltvhR2fNm2aPB5P2FZUVBTWJhQKafbs2UpPT1dKSoomTZqkQ4cORfEsAADAxTl32cPxwHP8+HENGTJES5cuPW+bu+++Ww0NDda2bt26sOOlpaWqrKxURUWFtm7dqtbWVk2YMEGdnZ12l39R3IcHAADnXdbT0u0wfvx4jR8//oJtvF6v/H5/t8eCwaBeeuklvfrqqxo7dqwk6bXXXlNOTo7effddjRs3rtufC4VCCoVC1uvm5uYrPIMLM44uwgMAIJb04ktal2Lz5s3KyMjQTTfdpB/+8IdqbGy0jtXW1qqjo0MlJSXWvuzsbOXn56umpua871leXi6fz2dtOTk5tp4DAAC9HY+WuIDx48fr9ddf18aNG/WLX/xC27dv15133mmNzgQCASUlJal///5hP5eZmalAIHDe950/f76CwaC11dfX23QGXNICAECS5HFuhMfxS1oX8+CDD1p/zs/P19ChQzVo0CC9/fbbmjx58nl/zhgjzwU61uv1yuv1RrTW7nBBCwCA0xwc4on5EZ6zZWVladCgQdq/f78kye/3q729XU1NTWHtGhsblZmZ6USJAACgGw4O8PS8wHP06FHV19crKytLklRYWKjExERVVVVZbRoaGrR7924VFxc7VSYAADibg4HH8Utara2t+vTTT63XBw4c0M6dO5WWlqa0tDSVlZXp/vvvV1ZWlj7//HMtWLBA6enpuu+++yRJPp9P06dP19y5czVgwAClpaVp3rx5KigosFZtOYll6QAAnGJML57D89FHH2n06NHW6zlz5kiSpk6dquXLl6uurk6vvPKKjh07pqysLI0ePVqrV69Wamqq9TPPP/+8EhIS9MADD6itrU1jxozRqlWrFB8fH/XzAQAAscfxwDNq1CiZC0xieueddy76Hn369NGLL76oF198MZKlAQAAl+hxc3gAAAAuF4HH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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "5 s ± 14.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "# Test python\n", - "# 5.3 s, 5s\n", - "time_domain, y_results, success, message = nbrk_ode_py(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode_py(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "139c7167", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAGwCAYAAACtlb+kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsAklEQVR4nO3df3RU9Z3/8dfk1xBiGAkxmUQipm3UagK7DULIcQsIBvkKVLFfrXpYOHK6ikDNAeq34Omab48Slp6irRQ4bT3gzw3br8SyK0XiAYI0ohihBLAsrohBMqawYZJAnITk8/0DuNuB8Hvu3MnN83HOPTL3fjLzvp9A59XP/Xzu9RhjjAAAAFwszukCAAAA7EbgAQAArkfgAQAArkfgAQAArkfgAQAArkfgAQAArkfgAQAArpfgdAGxoqurS4cPH1Zqaqo8Ho/T5QAAgEtgjFFLS4uys7MVF3f+cRwCz2mHDx9WTk6O02UAAIArUF9fr4EDB573OIHntNTUVEmnOqxfv34OVwMAAC5Fc3OzcnJyrO/x8yHwnHbmMla/fv0IPAAA9DAXm47CpGUAAOB6BB4AAOB6BB4AAOB6zOG5TJ2dnero6HC6jKhLTExUfHy802UAAHBFCDyXyBijQCCgY8eOOV2KY6699lr5/X7uUwQA6HEIPJfoTNjJyMhQ3759e9WXvjFGJ06cUGNjoyQpKyvL4YoAALg8BJ5L0NnZaYWdAQMGOF2OI5KTkyVJjY2NysjI4PIWAKBHYdLyJTgzZ6dv374OV+KsM+ffG+cwAQB6NgLPZehNl7G609vPHwDQcxF4AACA6xF4AACA6xF4AACA67FKKwq6uk79t6dPgTHm1H+7uk792ZhT53Rm/5k/R+q/dr3nGT2lXt4zsr/3s/GekX3PnlavG9+zqyv8dXeu9t/VlbynJMU5OMxC4LFZKCTV1TldReQcOSKNHy8dPOh0JQCAniYYlPr1c+azuaR1JYyRjh+/pO3IweOKa4vcdsn/9+q0e+4ZqN//flnYvj//uUZ33NFXDQ2kFgBA9Lz2mnOfzQjPlThxQrrmmktqev3pLVI+3tKqruSUS26fn1+kvXu3W6+NMVqypFQPPVSqrKxBEawMAIALO9/lsGhghMflzg4869a9qkDgC02bNl+S9N57/6H7779Zkyfn6a23fudUmQAA2IoRnivRt6/U2npJTb/8Uvrqq8h9dFefy7vbc0FBkZYu/T86caJVcXFxWrZsgWbMeFYpKak6efKkXnhhjpYv36SUlH6aMuU7Gj16sny+tMgVDABADCDwXAmPR0q5tMtKpq/UlWxzPRfw7W8PVVxcvP7yl4/14YfvyucboEmTHpUk7dnzob7xjduUkXHqoltx8f/Stm3vaNy4h5wrGAAAGxB4XM7r7aO8vCHatGmNKit/oyVL/l1xp9cFHjlyWNdd9z8zjDIzB6qx8UunSgUAuNxlrruJKObw9AIFBUVavfpXGjZsrIYNG2PtN938zeN5WQAANyLw9AI33fR3io9P0I9+9POw/dddd73++tf/GdH56qtDSk/PinZ5AADYjsDTC6xf/7q+//0ndOONN4ftv+22Yfqv/9qtxsYvdfx4i2pq1qmoaJxDVQIAYB/m8LhUV1eXmpr+qrVrX9LBg/v0859XntMmISFBTz75C82YMVpdXV2aMuUpXXvtAAeqBQDAXgQel9qxY4tmzLhTN954ixYvXqNrrvF1227kyEkaOXJSlKsDACC6CDwuVVg4Sh9+2OV0GQAAxATm8AAAANcj8AAAANcj8AAAANcj8AAAANcj8AAAANcj8AAAgKjgWVoAAAA2IvDYjGdxAgDgPAIPAABwPQIPAACICievehB4XO6eewbq979fFrbvz3+u0R139FVDw0GHqgIAILp4ltYVMEY6ceLS2h4/LrW1Re6z+/S5vIScn1+kvXu3W6+NMVqypFQPPVSqrKxBkSsMAICLcHKVFoHnCpw4IV1zjTOfvWWLlJx86e3z84v0H/+xynq9bt2rCgS+0LRp8yVJP/7xfaqt3azbbx+jf/mX/xfhagEAiA1c0nK5goIiff75JzpxolVff31Cy5Yt0IwZzyolJVWS9OCDP1JZ2SsOVwkAgL0Y4bkCfftKra2X1vbwYSkQiNxn9+lzee2//e2hiouL11/+8rE+/PBd+XwDNGnSo9bxoUNHq7Z2c+QKBAAgBhF4roDHI6WkXFrbvn0v7xJUpHm9fZSXN0SbNq1RZeVvtGTJvysujoE9AEDvwjdfL1BQUKTVq3+lYcPGatiwMU6XAwDopXi0BGx1001/p/j4BP3oRz93uhQAABzheOBZvny5Bg8erH79+qlfv34aMWKE/vjHP1rHjTEqKytTdna2kpOTNWrUKO3ZsyfsPUKhkGbPnq309HSlpKRo0qRJOnToULRPJWatX/+6vv/9J3TjjTc7XQoAAI5wPPAMHDhQixYt0kcffaSPPvpId955p773ve9ZoWbx4sVasmSJli5dqu3bt8vv9+uuu+5SS0uL9R6lpaWqrKxURUWFtm7dqtbWVk2YMEGdnZ1OnZbjurq6dPToV1q5cqEOHtynxx77v922mz17nH7yk/+tP/1pne65Z6D27NnebTsAAHoyxyctT5w4Mez1c889p+XLl2vbtm269dZb9cILL+jpp5/W5MmTJUkvv/yyMjMz9cYbb+ixxx5TMBjUSy+9pFdffVVjx46VJL322mvKycnRu+++q3HjxkX9nGLBjh1bNGPGnbrxxlu0ePEaXXONr9t2L774TpQrAwD0Vjxa4rTOzk5VVFTo+PHjGjFihA4cOKBAIKCSkhKrjdfr1ciRI1VTUyNJqq2tVUdHR1ib7Oxs5efnW226EwqF1NzcHLa5SWHhKH34YZf+7d/2Kj9/uNPlAADgqJgIPHV1dbrmmmvk9Xr1+OOPq7KyUrfeeqsCp29gk5mZGdY+MzPTOhYIBJSUlKT+/fuft013ysvL5fP5rC0nJyfCZwUAAP5Wr1+ldfPNN2vnzp3atm2bZsyYoalTp2rv3r3Wcc9ZY2DGmHP2ne1ibebPn69gMGht9fX1V3cSAAAgZsVE4ElKStK3vvUtDR06VOXl5RoyZIh++ctfyu/3S9I5IzWNjY3WqI/f71d7e7uamprO26Y7Xq/XWhl2ZgMAAO4UE4HnbMYYhUIh5ebmyu/3q6qqyjrW3t6u6upqFRcXS5IKCwuVmJgY1qahoUG7d++22kSyrt7NyBhnhyQBALgSjq/SWrBggcaPH6+cnBy1tLSooqJCmzdv1vr16+XxeFRaWqqFCxcqLy9PeXl5Wrhwofr27auHH35YkuTz+TR9+nTNnTtXAwYMUFpamubNm6eCggJr1dbVSkxMlCSdOHFCyU4+J8JxJ9TeLh05kuh0IQAAXBbHA89XX32lKVOmqKGhQT6fT4MHD9b69et11113SZKeeuoptbW16YknnlBTU5OGDx+uDRs2KDU11XqP559/XgkJCXrggQfU1tamMWPGaNWqVYqPj49IjfHx8br22mvV2NgoSerbt+9F5xCdcfJkREpwmJF0QseONWrt2mt14kRk+hUAgGjxGK7TSJKam5vl8/kUDAa7nc9jjFEgENCxY8cu632PHZOCwcjU6BRjpPZ2ae3aa7VypV/GOHgjBQBAj/WrX0mzZ0f2PS/2/X2G4yM8PYXH41FWVpYyMjLU0dFxyT/3wgvSihX21RUNxpy6jMXIDgCgpyLwXKb4+PjLulTW2iodPGhjQQAA9BDcadnFnPzlAgCAUwg8AADA9Qg8AADA9Qg8NmMNHAAAp/T6Z2kBAADYicADAABcj8BjM1ZpAQDgPAIPAABwPQIPAABwPQIPAABwPQIPAABwPQIPAABwPQKPzVilBQCA8wg8AADA9Qg8AAAgKni0hIvxLC0AAJxH4AEAAK5H4AEAAK5H4LEZq7QAAHAegQcAALgegQcAALgegQcAALgegQcAALgegQcAALgegcdmrNICAMB5BB4AAOB6BB4AABAVPEvLxXiWFgAAziPwAAAA1yPwAAAA1yPw2IxVWgAAnOLkdyKBBwAAuB6BBwAARAWrtAAAAGxE4AEAAK5H4AEAAK5H4LEZq7QAAHAegQcAALgegcdmPFoCAIBTevUqrfLyct1+++1KTU1VRkaG7r33Xu3bty+szbRp0+TxeMK2oqKisDahUEizZ89Wenq6UlJSNGnSJB06dCiapwIAAGKU44GnurpaM2fO1LZt21RVVaWTJ0+qpKREx48fD2t39913q6GhwdrWrVsXdry0tFSVlZWqqKjQ1q1b1draqgkTJqizszOapwMAAGJQgtMFrF+/Puz1ypUrlZGRodraWn33u9+19nu9Xvn9/m7fIxgM6qWXXtKrr76qsWPHSpJee+015eTk6N1339W4cePO+ZlQKKRQKGS9bm5ujsTpAACA8+DREn8jGAxKktLS0sL2b968WRkZGbrpppv0wx/+UI2Njdax2tpadXR0qKSkxNqXnZ2t/Px81dTUdPs55eXl8vl81paTk2PD2bBKCwCAWBBTgccYozlz5uiOO+5Qfn6+tX/8+PF6/fXXtXHjRv3iF7/Q9u3bdeedd1ojNIFAQElJSerfv3/Y+2VmZioQCHT7WfPnz1cwGLS2+vp6+04MAAA4OmnZ8Utaf2vWrFnatWuXtm7dGrb/wQcftP6cn5+voUOHatCgQXr77bc1efLk876fMUae8wyxeL1eeb3eyBQOAABiWsyM8MyePVtr167Vpk2bNHDgwAu2zcrK0qBBg7R//35Jkt/vV3t7u5qamsLaNTY2KjMz07aaAQBAz+B44DHGaNasWVqzZo02btyo3Nzci/7M0aNHVV9fr6ysLElSYWGhEhMTVVVVZbVpaGjQ7t27VVxcbFvtAACgZ3D8ktbMmTP1xhtv6A9/+INSU1OtOTc+n0/JyclqbW1VWVmZ7r//fmVlZenzzz/XggULlJ6ervvuu89qO336dM2dO1cDBgxQWlqa5s2bp4KCAmvVFgAA6L0cDzzLly+XJI0aNSps/8qVKzVt2jTFx8errq5Or7zyio4dO6asrCyNHj1aq1evVmpqqtX++eefV0JCgh544AG1tbVpzJgxWrVqleLj46N5OudglRYAAM5zPPCYi0zZTk5O1jvvvHPR9+nTp49efPFFvfjii5EqDQAARFCvfrSE2/EsLQAAnEfgAQAAUcGdlgEAAGxE4AEAAK5H4LEZq7QAADiFScsAAAA2IvAAAADXI/AAAADXI/AAAADXI/AAAADXI/DYjFVaAAA4j8ADAABcj8BjM56lBQCA8wg8AADA9Qg8AADA9Qg8AAAgKni0hIuxSgsAAOcReAAAgOsReAAAgOsReAAAgOsReAAAQFQwaRkAAMBGBB6bsUoLAIBTnPxOJPAAAADXI/DYjGdpAQDgPAIPAABwPQKPzZjDAwDAKazSAgAAsBGBBwAAuB6Bx2Zc0gIAwHkEHgAA4HoEHgAAEBVMWgYAALARgcdmzOEBAOAUHi0BAABgIwKPzXi0BAAAziPwAACAqGDSsosxhwcAAOcReAAAgOsReAAAgOs5HnjKy8t1++23KzU1VRkZGbr33nu1b9++sDbGGJWVlSk7O1vJyckaNWqU9uzZE9YmFApp9uzZSk9PV0pKiiZNmqRDhw5F81QAAECMcjzwVFdXa+bMmdq2bZuqqqp08uRJlZSU6Pjx41abxYsXa8mSJVq6dKm2b98uv9+vu+66Sy0tLVab0tJSVVZWqqKiQlu3blVra6smTJigzs5OJ07LwhweAABigIkxjY2NRpKprq42xhjT1dVl/H6/WbRokdXm66+/Nj6fz6xYscIYY8yxY8dMYmKiqaiosNp8+eWXJi4uzqxfv/6SPjcYDBpJJhgMRvBsjHnuOWNOzUtnY2NjY2Pr3dvPfx7Rr1hjzKV/fzs+wnO2YDAoSUpLS5MkHThwQIFAQCUlJVYbr9erkSNHqqamRpJUW1urjo6OsDbZ2dnKz8+32pwtFAqpubk5bAMAAO4UU4HHGKM5c+bojjvuUH5+viQpEAhIkjIzM8PaZmZmWscCgYCSkpLUv3//87Y5W3l5uXw+n7Xl5ORE+nQkcUkLAIBYEFOBZ9asWdq1a5f+9V//9ZxjnrOSgzHmnH1nu1Cb+fPnKxgMWlt9ff2VFw4AAGJazASe2bNna+3atdq0aZMGDhxo7ff7/ZJ0zkhNY2OjNerj9/vV3t6upqam87Y5m9frVb9+/cI2AADgTo4HHmOMZs2apTVr1mjjxo3Kzc0NO56bmyu/36+qqiprX3t7u6qrq1VcXCxJKiwsVGJiYlibhoYG7d6922oDAACcZYxzn53g3EefMnPmTL3xxhv6wx/+oNTUVGskx+fzKTk5WR6PR6WlpVq4cKHy8vKUl5enhQsXqm/fvnr44YetttOnT9fcuXM1YMAApaWlad68eSooKNDYsWOdPD0AABADHA88y5cvlySNGjUqbP/KlSs1bdo0SdJTTz2ltrY2PfHEE2pqatLw4cO1YcMGpaamWu2ff/55JSQk6IEHHlBbW5vGjBmjVatWKT4+PlqnAgAAYpTHGCcHmGJHc3OzfD6fgsFgROfzlJdLCxZE7O0AAOixFi+WfvzjyL7npX5/Oz6HBwAAwG4EHptxHx4AAE5x8poSgQcAALgegQcAAESFk1c9CDw245IWAADOI/AAAADXI/AAAICoYNIyAACAjQg8AADA9Qg8AADA9Qg8AADA9Qg8AADA9Qg8NuM+PAAAnMIqLQAAABsReAAAQFTwaAkAAAAbEXhsxhweAACcR+ABAABRwaRlAAAAGxF4AACA6xF4AACA611W4Kmvr7erDgAAANtcVuC55ZZb9NOf/lTHjx+3qx4AAOBSPWbSclVVlTZs2KC8vDytXLnSrppchWXpAAA477ICT3FxsT744AMtWrRI//zP/6y///u/1+bNm20qDQAAIDKuaNLyP/7jP+o///M/NXHiRN1zzz2677779Omnn0a6NgAA4CI98tESxhiVlJTon/7pn7R27Vrl5+dr7ty5amlpiWR9PV9Hh9MVAADQ611W4FmxYoWmT5+uwYMHy+fzaezYsfrTn/6kmTNnatmyZdq5c6duvfVWffTRR3bV2+N4qjc7XQIAALGh4bBjH51wOY2fe+45FRUVaerUqSoqKtLQoUPl9Xqt448++qgWLlyoadOmaffu3REvtkc6/KXTFQAAEBNM6wnHPvuyAs+l3Idn+vTp+ulPf3rFBQEAAERaxO+0nJGRoY0bN0b6bXsuB+85AABATHFw1nLEA4/H49HIkSMj/bYAAABXjGdpAQAA1yPwAACAqOgxj5bA5fMwiQcAAMcReAAAQHT0xDstAwAAXA4nn6dN4AEAAK5H4LGZx8McHgAAJGdvTUfgsRt5BwAAxxF4AABAlLjoTsuXa8uWLZo4caKys7Pl8Xj01ltvhR2fNm2aPB5P2FZUVBTWJhQKafbs2UpPT1dKSoomTZqkQ4cORfEsAADAxTl32cPxwHP8+HENGTJES5cuPW+bu+++Ww0NDda2bt26sOOlpaWqrKxURUWFtm7dqtbWVk2YMEGdnZ12l39R3IcHAADnXdbT0u0wfvx4jR8//oJtvF6v/H5/t8eCwaBeeuklvfrqqxo7dqwk6bXXXlNOTo7effddjRs3rtufC4VCCoVC1uvm5uYrPIMLM44uwgMAIJb04ktal2Lz5s3KyMjQTTfdpB/+8IdqbGy0jtXW1qqjo0MlJSXWvuzsbOXn56umpua871leXi6fz2dtOTk5tp4DAAC9HY+WuIDx48fr9ddf18aNG/WLX/xC27dv15133mmNzgQCASUlJal///5hP5eZmalAIHDe950/f76CwaC11dfX23QGXNICAECS5HFuhMfxS1oX8+CDD1p/zs/P19ChQzVo0CC9/fbbmjx58nl/zhgjzwU61uv1yuv1RrTW7nBBCwCA0xwc4on5EZ6zZWVladCgQdq/f78kye/3q729XU1NTWHtGhsblZmZ6USJAACgGw4O8PS8wHP06FHV19crKytLklRYWKjExERVVVVZbRoaGrR7924VFxc7VSYAADibg4HH8Utara2t+vTTT63XBw4c0M6dO5WWlqa0tDSVlZXp/vvvV1ZWlj7//HMtWLBA6enpuu+++yRJPp9P06dP19y5czVgwAClpaVp3rx5KigosFZtOYll6QAAnGJML57D89FHH2n06NHW6zlz5kiSpk6dquXLl6uurk6vvPKKjh07pqysLI0ePVqrV69Wamqq9TPPP/+8EhIS9MADD6itrU1jxozRqlWrFB8fH/XzAQAAscfxwDNq1CiZC0xieueddy76Hn369NGLL76oF198MZKlAQAAl+hxc3gAAAAuF4HH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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "43.9 ms ± 720 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - RK45\n", - "# 1800 ms\n", - "# 2350 ms\n", - "# >>0.2.3 1.83 s\n", - "# >>0.3.0 44.3 ms\n", - "# >>0.5.0 43.9 ms\n", - "time_domain, y_results, success, message = nbrk_ode(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "b6122dbf", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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LlyoadOmaffu3REvtkc6/KXTFQAAEBNM6wnHPvuyAs+l3Idn+vTp+ulPf3rFBQEAAERaxO+0nJGRoY0bN0b6bXsuB+85AABATHFw1nLEA4/H49HIkSMj/bYAAABXjGdpAQAA1yPwAACAqOgxj5bA5fMwiQcAAMcReAAAQHT0xDstAwAAXA4nn6dN4AEAAK5H4LGZx8McHgAAJGdvTUfgsRt5BwAAxxF4AABAlLjoTsuXa8uWLZo4caKys7Pl8Xj01ltvhR2fNm2aPB5P2FZUVBTWJhQKafbs2UpPT1dKSoomTZqkQ4cORfEsAADAxTl32cPxwHP8+HENGTJES5cuPW+bu+++Ww0NDda2bt26sOOlpaWqrKxURUWFtm7dqtbWVk2YMEGdnZ12l39R3IcHAADnXdbT0u0wfvx4jR8//oJtvF6v/H5/t8eCwaBeeuklvfrqqxo7dqwk6bXXXlNOTo7effddjRs3rtufC4VCCoVC1uvm5uYrPIMLM44uwgMAIJb04ktal2Lz5s3KyMjQTTfdpB/+8IdqbGy0jtXW1qqjo0MlJSXWvuzsbOXn56umpua871leXi6fz2dtOTk5tp4DAAC9HY+WuIDx48fr9ddf18aNG/WLX/xC27dv15133mmNzgQCASUlJal///5hP5eZmalAIHDe950/f76CwaC11dfX23QGXNICAECS5HFuhMfxS1oX8+CDD1p/zs/P19ChQzVo0CC9/fbbmjx58nl/zhgjzwU61uv1yuv1RrTW7nBBCwCA0xwc4on5EZ6zZWVladCgQdq/f78kye/3q729XU1NTWHtGhsblZmZ6USJAACgGw4O8PS8wHP06FHV19crKytLklRYWKjExERVVVVZbRoaGrR7924VFxc7VSYAADibg4HH8Utara2t+vTTT63XBw4c0M6dO5WWlqa0tDSVlZXp/vvvV1ZWlj7//HMtWLBA6enpuu+++yRJPp9P06dP19y5czVgwAClpaVp3rx5KigosFZtOYll6QAAnGJML57D89FHH2n06NHW6zlz5kiSpk6dquXLl6uurk6vvPKKjh07pqysLI0ePVqrV69Wamqq9TPPP/+8EhIS9MADD6itrU1jxozRqlWrFB8fH/XzAQAAscfxwDNq1CiZC0xieueddy76Hn369NGLL76oF198MZKlAQAAl+hxc3gAAAAuF4HH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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "43.9 ms ± 740 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" - ] - } - ], - "source": [ - "# Test Numba - tester - RK45\n", - "# 1800 ms\n", - "# 2350 ms\n", - "# >>0.2.3 1.83 s\n", - "# >>0.3.0 1.56 s, 1.46s, 1.41s, 1.42s, 45.6ms,\n", - "# >>0.3.0a2 43.3\n", - "# >>0.5.0 43.9ms\n", - "time_domain, y_results, success, message = nbrk_ode_tester(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit nbrk_ode_tester(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "fc1c89e4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Integration finished with no issue.\n" - ] - }, - { - "data": { - "image/png": "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LlyoadOmaffu3REvtkc6/KXTFQAAEBNM6wnHPvuyAs+l3Idn+vTp+ulPf3rFBQEAAERaxO+0nJGRoY0bN0b6bXsuB+85AABATHFw1nLEA4/H49HIkSMj/bYAAABXjGdpAQAA1yPwAACAqOgxj5bA5fMwiQcAAMcReAAAQHT0xDstAwAAXA4nn6dN4AEAAK5H4LGZx8McHgAAJGdvTUfgsRt5BwAAxxF4AABAlLjoTsuXa8uWLZo4caKys7Pl8Xj01ltvhR2fNm2aPB5P2FZUVBTWJhQKafbs2UpPT1dKSoomTZqkQ4cORfEsAADAxTl32cPxwHP8+HENGTJES5cuPW+bu+++Ww0NDda2bt26sOOlpaWqrKxURUWFtm7dqtbWVk2YMEGdnZ12l39R3IcHAADnXdbT0u0wfvx4jR8//oJtvF6v/H5/t8eCwaBeeuklvfrqqxo7dqwk6bXXXlNOTo7effddjRs3rtufC4VCCoVC1uvm5uYrPIMLM44uwgMAIJb04ktal2Lz5s3KyMjQTTfdpB/+8IdqbGy0jtXW1qqjo0MlJSXWvuzsbOXn56umpua871leXi6fz2dtOTk5tp4DAAC9HY+WuIDx48fr9ddf18aNG/WLX/xC27dv15133mmNzgQCASUlJal///5hP5eZmalAIHDe950/f76CwaC11dfX23QGXNICAECS5HFuhMfxS1oX8+CDD1p/zs/P19ChQzVo0CC9/fbbmjx58nl/zhgjzwU61uv1yuv1RrTW7nBBCwCA0xwc4on5EZ6zZWVladCgQdq/f78kye/3q729XU1NTWHtGhsblZmZ6USJAACgGw4O8PS8wHP06FHV19crKytLklRYWKjExERVVVVZbRoaGrR7924VFxc7VSYAADibg4HH8Utara2t+vTTT63XBw4c0M6dO5WWlqa0tDSVlZXp/vvvV1ZWlj7//HMtWLBA6enpuu+++yRJPp9P06dP19y5czVgwAClpaVp3rx5KigosFZtOYll6QAAnGJML57D89FHH2n06NHW6zlz5kiSpk6dquXLl6uurk6vvPKKjh07pqysLI0ePVqrV69Wamqq9TPPP/+8EhIS9MADD6itrU1jxozRqlWrFB8fH/XzAQAAscfxwDNq1CiZC0xieueddy76Hn369NGLL76oF198MZKlAQAAl+hxc3gAAAAuF4HH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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "204 ms ± 5.71 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "# Test Cython - RK45\n", - "# 238 ms\n", - "# 229 ms\n", - "# >>0.2.3 231 ms\n", - "# >>0.5.0 204ms\n", - "\n", - "time_domain, y_results, success, message = cyrk_ode(y_diff2, time_span_2, initial_conds,\n", - " rtol=rtol, atol=atol, rk_method=1)\n", - "print(message)\n", - "diff_plot(time_domain, y_results)\n", - "\n", - "%timeit cyrk_ode(y_diff2, time_span_2, initial_conds, rtol=rtol, atol=atol, rk_method=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "898e5889", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext line_profiler" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8f628e4a", - "metadata": {}, - "outputs": [], - "source": [ - "%lprun -f nbrk_ode_tester.py_func nbrk_ode_tester.py_func(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7a6ca352", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext memory_profiler" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "db9b0531", - "metadata": {}, - "outputs": [], - "source": [ - "from CyRK.nb.nbrk import nbrk_ode\n", - "%mprun -f nbrk_ode nbrk_ode.py_func(y_diff, time_span_2, initial_conds, rtol=rtol, atol=atol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d358389e", - "metadata": {}, - "outputs": [], - "source": [ - "# distutils: language = c++\n", - "import cython\n", - "import numpy as np\n", - "cimport numpy as np\n", - "np.import_array()\n", - "from libc.math cimport isnan\n", - "\n", - "# Get machine precision.\n", - "cdef double EPS\n", - "EPS = np.finfo(dtype=np.float64).eps\n", - "\n", - "# Determine cache limits.\n", - "cdef int LIKELY_IN_CACHE_SIZE = 8\n", - "\n", - "@cython.cdivision(True)\n", - "@cython.boundscheck(False)\n", - "@cython.wraparound(False)\n", - "@cython.nonecheck(False)\n", - "cdef int binary_search_with_guess(double key, double[:] array, int length, int guess) nogil:\n", - " \"\"\" Binary search with guess.\n", - " \n", - " Based on `numpy`'s `binary_search_with_guess` function.\n", - " \n", - " Parameters\n", - " ----------\n", - " key : float\n", - " Key index to search for.\n", - " array : np.ndarray\n", - " Array to search in.\n", - " length : int\n", - " Length of array.\n", - " guess : int \n", - " Initial guess of where key might be.\n", - " \n", - " Returns\n", - " -------\n", - " guess : int\n", - " Corrected guess after search.\n", - " \"\"\"\n", - "\n", - " cdef int imin = 0\n", - " cdef int imax = length\n", - "\n", - " if key > array[length - 1]:\n", - " return length\n", - " elif key < array[0]:\n", - " return -1\n", - "\n", - " # If len <= 4 use linear search.\n", - "# if length <= 4:\n", - "# raise NotImplemented\n", - "\n", - " if guess > (length - 3):\n", - " guess = length - 3\n", - " if guess < 1:\n", - " guess = 1\n", - "\n", - " # check most likely values: guess - 1, guess, guess + 1\n", - " if key < array[guess]:\n", - " if key < array[guess - 1]:\n", - " imax = guess - 1\n", - " # last attempt to restrict search to items in cache\n", - " if guess > LIKELY_IN_CACHE_SIZE and key >= array[guess - LIKELY_IN_CACHE_SIZE]:\n", - " imin = guess - LIKELY_IN_CACHE_SIZE\n", - "\n", - " else:\n", - " return guess - 1\n", - " else:\n", - " if key < array[guess + 1]:\n", - " return guess\n", - " else:\n", - " if key < array[guess + 2]:\n", - " return guess + 1\n", - " else:\n", - " imin = guess + 2\n", - " # last attempt to restrict search to items in cache\n", - " if guess < (length - LIKELY_IN_CACHE_SIZE - 1) and key < array[guess + LIKELY_IN_CACHE_SIZE]:\n", - " imax = guess + LIKELY_IN_CACHE_SIZE\n", - "\n", - " # Finally, find index by bisection\n", - " cdef int imid\n", - " while imin < imax:\n", - " imid = imin + ((imax - imin) >> 1)\n", - " if key >= array[imid]:\n", - " imin = imid + 1\n", - " else:\n", - " imax = imid\n", - "\n", - " return imin - 1\n", - "\n", - "@cython.cdivision(True)\n", - "@cython.boundscheck(False)\n", - "@cython.wraparound(False)\n", - "@cython.nonecheck(False)\n", - "cpdef double interp(double desired_x, double[:] x_domain, double[:] dependent_values) nogil:\n", - " \"\"\" Interpolation function for floats.\n", - " \n", - " Provided a domain, `x_domain` and a dependent array `dependent_values` search domain for value closest to \n", - " `desired_x` and return the value of `dependent_values` at that location if it is defined. Otherwise, use local \n", - " slopes of `x_domain` and `dependent_values` to interpolate a value of `dependent_values` at `desired_x`.\n", - "\n", - " Based on `numpy`'s `interp` function.\n", - "\n", - " Parameters\n", - " ----------\n", - " desired_x : float\n", - " Location where `dependent_variables` is desired.\n", - " x_domain : np.ndarray[float]\n", - " Domain to search for the correct location.\n", - " dependent_values : np.ndarray[float]\n", - " Dependent values that are to be returned after search and interpolation.\n", - "\n", - " Returns\n", - " -------\n", - " result : float\n", - " Desired value of `dependent_values`.\n", - " \n", - " \"\"\"\n", - "\n", - " cdef int lenx\n", - " lenx = len(x_domain)\n", - " # TODO: Needs to be at least 3 item long array. Add exception here?\n", - "\n", - " cdef double left_value\n", - " left_value = dependent_values[0]\n", - " cdef double right_value\n", - " right_value = dependent_values[lenx - 1]\n", - "\n", - " # Binary Search with Guess\n", - " cdef int i, j\n", - " j = 0\n", - " cdef double slope\n", - "\n", - " cdef double result\n", - " cdef double fp_at_j\n", - " cdef double xp_at_j\n", - " cdef double fp_at_jp1\n", - " cdef double xp_at_jp1\n", - "\n", - " # Perform binary search with guess\n", - " j = binary_search_with_guess(desired_x, x_domain, lenx, j)\n", - "\n", - " if j == -1:\n", - " result = left_value\n", - " elif j == lenx:\n", - " result = right_value\n", - " else:\n", - " fp_at_j = dependent_values[j]\n", - " xp_at_j = x_domain[j]\n", - " if j == lenx - 1:\n", - " result = fp_at_j\n", - " elif xp_at_j == desired_x:\n", - " result = fp_at_j\n", - " else:\n", - " fp_at_jp1 = dependent_values[j + 1]\n", - " xp_at_jp1 = x_domain[j + 1]\n", - " slope = (fp_at_jp1 - fp_at_j) / (xp_at_jp1 - xp_at_j)\n", - "\n", - " # If we get nan in one direction, try the other\n", - " result = slope * (desired_x - xp_at_j) + fp_at_j\n", - " if isnan(result):\n", - " result = slope * (desired_x - xp_at_jp1) + fp_at_jp1\n", - " if isnan(result) and (fp_at_jp1 == fp_at_j):\n", - " result = fp_at_j\n", - "\n", - " return result\n", - "\n", - "\n", - "@cython.cdivision(True)\n", - "@cython.boundscheck(False)\n", - "@cython.wraparound(False)\n", - "@cython.nonecheck(False)\n", - "cpdef double complex interp_complex(double desired_x, double[:] x_domain,\n", - " double complex[:] dependent_variables) nogil:\n", - " \"\"\" Interpolation function for complex numbers.\n", - "\n", - " Provided a domain, `desired_x` and a dependent array `dependent_values` search domain for value closest to \n", - " `desired_x` and return the value of `dependent_values` at that location if it is defined. Otherwise, use local \n", - " slopes of `desired_x` and `dependent_values` to interpolate a value of `dependent_values` at `desired_x`.\n", - "\n", - " Based on `numpy`'s `interp` function.\n", - "\n", - " Parameters\n", - " ----------\n", - " desired_x : float\n", - " Location where `dependent_variables` is desired.\n", - " desired_x : np.ndarray[float]\n", - " Domain to search for the correct location.\n", - " dependent_values : np.ndarray[complex]\n", - " Dependent values that are to be returned after search and interpolation.\n", - "\n", - " Returns\n", - " -------\n", - " result : complex\n", - " Desired value of `dependent_values`.\n", - "\n", - " \"\"\"\n", - " \n", - " cdef int lenx\n", - " lenx = len(x_domain)\n", - " # Note: Needs to be at least 3 item long array. Add exception here?\n", - " \n", - " cdef double complex left_value\n", - " left_value = dependent_variables[0]\n", - " cdef double complex right_value\n", - " right_value = dependent_variables[lenx - 1]\n", - " \n", - " # Binary Search with Guess\n", - " cdef int i, j\n", - " j = 0\n", - " cdef double slope_real\n", - " cdef double slope_imag\n", - " cdef double x_slope_inverse\n", - " \n", - " cdef double result_real\n", - " cdef double result_imag\n", - " cdef double fp_at_j_real\n", - " cdef double fp_at_j_imag\n", - " cdef double xp_at_j\n", - " cdef double fp_at_jp1_real\n", - " cdef double fp_at_jp1_imag\n", - " cdef double xp_at_jp1\n", - "\n", - " # Perform binary search with guess\n", - " j = binary_search_with_guess(desired_x, x_domain, lenx, j)\n", - " \n", - " if j == -1:\n", - " result_real = left_value.real\n", - " result_imag = left_value.imag\n", - " elif j == lenx:\n", - " result_real = right_value.real\n", - " result_imag = right_value.imag\n", - " else:\n", - " fp_at_j_real = dependent_variables[j].real\n", - " fp_at_j_imag = dependent_variables[j].imag\n", - " xp_at_j = x_domain[j]\n", - " if j == lenx - 1:\n", - " result_real = fp_at_j_real\n", - " result_imag = fp_at_j_imag\n", - " elif xp_at_j == desired_x:\n", - " result_real = fp_at_j_real\n", - " result_imag = fp_at_j_imag\n", - " else:\n", - " fp_at_jp1_real = dependent_variables[j + 1].real\n", - " fp_at_jp1_imag = dependent_variables[j + 1].imag\n", - " xp_at_jp1 = x_domain[j + 1]\n", - " x_slope_inverse = 1.0 / (xp_at_jp1 - xp_at_j)\n", - " slope_real = (fp_at_jp1_real - fp_at_j_real) * x_slope_inverse\n", - " slope_imag = (fp_at_jp1_imag - fp_at_j_imag) * x_slope_inverse\n", - " \n", - " # If we get nan in one direction try the other\n", - " # Real Part\n", - " result_real = slope_real * (desired_x - xp_at_j) + fp_at_j_real\n", - " if isnan(result_real):\n", - " result_real = slope_real * (desired_x - xp_at_jp1) + fp_at_jp1_real\n", - " if isnan(result_real) and (fp_at_jp1_real == fp_at_j_real):\n", - " result_real = fp_at_j_real\n", - " \n", - " # Imaginary Part\n", - " result_imag = slope_imag * (desired_x - xp_at_j) + fp_at_j_imag\n", - " if isnan(result_imag):\n", - " result_imag = slope_imag * (desired_x - xp_at_jp1) + fp_at_jp1_imag\n", - " if isnan(result_imag) and (fp_at_jp1_imag == fp_at_j_imag):\n", - " result_imag = fp_at_j_imag\n", - " \n", - " cdef double complex result\n", - " result = result_real + 1.0j * result_imag\n", - " \n", - " return result\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Tests/D_Numba_Tests/test_a_numba.py b/Tests/D_Numba_Tests/test_a_numba.py index caa5fd4..4a53918 100644 --- a/Tests/D_Numba_Tests/test_a_numba.py +++ b/Tests/D_Numba_Tests/test_a_numba.py @@ -122,7 +122,7 @@ def test_max_step(rk_method, complex_valued): initial_conds_to_use = initial_conds time_domain, y_results, success, message = \ - nbrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step_size=time_span[1] / 2.) + nbrk_ode(diffeq, time_span, initial_conds_to_use, rk_method=rk_method, max_step=time_span[1] / 2.) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -319,8 +319,8 @@ def correct_answer(t, c1_, c2_): @pytest.mark.parametrize('complex_valued', (True, False)) @pytest.mark.parametrize('rk_method', (0, 1, 2)) -def test_max_steps(rk_method, complex_valued): - """Check that the numba solver is able to utilize the max_steps argument """ +def test_max_num_steps(rk_method, complex_valued): + """Check that the numba solver is able to utilize the max_num_steps argument """ if complex_valued: initial_conds_to_use = initial_conds_complex @@ -329,7 +329,7 @@ def test_max_steps(rk_method, complex_valued): # First test a number of max steps which is fine. time_domain, y_results, success, message = \ - nbrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=1000000) + nbrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_num_steps=1000000) # Check that the ndarrays make sense assert type(time_domain) == np.ndarray @@ -350,7 +350,7 @@ def test_max_steps(rk_method, complex_valued): # Now test an insufficient number of steps time_domain, y_results, success, message = \ - nbrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_steps=4) + nbrk_ode(diffeq, time_span_large, initial_conds_to_use, rk_method=rk_method, max_num_steps=4) # Check that the ndarrays make sense assert not success diff --git a/pyproject.toml b/pyproject.toml index 29826dc..229a237 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0a5' +version = '0.7.0a6' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'} From 72dbc87611cf50c2be0d0d037ec9ab45dfe6c002 Mon Sep 17 00:00:00 2001 From: Jrenaud-Desk Date: Mon, 28 Aug 2023 15:59:13 -0400 Subject: [PATCH 29/29] updated version and readme --- Benchmarks/CyRK - SciPy Comparison.ipynb | 20 +++++++++--------- Benchmarks/CyRK_CySolver.pdf | Bin 13904 -> 13904 bytes .../CyRK_SciPy_Compare_predprey_v0-7-0a6.png | Bin 0 -> 40705 bytes Benchmarks/CyRK_cyrk_ode.pdf | Bin 13904 -> 13904 bytes Benchmarks/CyRK_numba.pdf | Bin 13874 -> 13874 bytes Benchmarks/SciPy.pdf | Bin 13874 -> 13874 bytes CyRK/cy/cysolver.pyx | 2 +- Performance/cyrk_performance-DOP853.csv | 1 + Performance/cyrk_performance-RK23.csv | 1 + Performance/cyrk_performance-RK45.csv | 1 + Performance/performance.py | 14 ++++++------ README.md | 10 ++++----- pyproject.toml | 2 +- 13 files changed, 27 insertions(+), 24 deletions(-) create mode 100644 Benchmarks/CyRK_SciPy_Compare_predprey_v0-7-0a6.png diff --git a/Benchmarks/CyRK - SciPy Comparison.ipynb b/Benchmarks/CyRK - SciPy Comparison.ipynb index c098f87..8d850cf 100644 --- a/Benchmarks/CyRK - SciPy Comparison.ipynb +++ b/Benchmarks/CyRK - SciPy Comparison.ipynb @@ -446,7 +446,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACd80lEQVR4nOzdeVxUVf8H8M+dAZRNQNBEBMQlBTJ3NJPFBeWn5p5lKoilBmq4pKVpLmmWGmomZLmvj0vikopbbC6pEC4g5MIiICIICLLDPb8/kMlhBpiBGQZmvu/X67yemXPOPfecmeHx27n3nMsBYCCEEEIIIY2eQNUdIIQQQgghikGBHSGEEEKImqDAjhBCCCFETVBgRwghhBCiJiiwI4QQQghRExTYEUIIIYSoCQrsCCGEEELUBAV2hBBCCCFqggI7QgghhBA1QYEdIaTB6tKlC3bu3Im4uDgUFBQgNzcXERERWLhwIUxMTORuLz4+HowxUXr16hUiIiIwa9YsibrOzs5gjGHcuHFi+bq6ujh79iyKi4sxZcqUWo/tTVpaWvj2228RHx+PwsJCxMTEYPbs2TIdu2vXLrExVU59+vSpsY0WLVpg165dSE9PR15eHq5du4aBAwfWdViYOnUqbty4gVevXuHly5eIiIjAyJEj69wuIaR6jBIlSpQaWvrss89YcXExu3fvHvPy8mLOzs5s8ODB7Ouvv2aPHz9mx48fl7vN+Ph4FhYWxvr06cP69OnDxowZw8LCwhhjjC1evFisrrOzM2OMsXHjxonymjVrxsLCwlhBQQEbOXKkwsb622+/sYKCAvbll18yZ2dn9v3337OysjKJPklL7dq1E43nzfT8+XOWlJTEBAJBtcfr6Oiwu3fvsidPnrBPPvmEDR48mAUEBLDi4mLm5ORU6zH5+/uzgoIC9v3337OBAweyIUOGsAULFrCPP/5Y5b8tSpTUPKm8A5QoUaIklvr27ctKSkrY2bNnmY6OjkS5trY2++CDD+RuNz4+np0+fVosz9DQkGVlZbGEhASx/MqBXYsWLdg///zDXr58yVxcXBQ2Vjs7O1ZWVsa+/vprsfxt27axvLw8ZmJiInebTk5OjDHGVq1aVWNdLy8vxhhjffv2FeUJhUIWFRXF/v7771qNadSoUYwxxj788EOV/5YoUdLApPIOUKJEiZJYOnXqFCsuLmZt2rSpse727dvZixcvmK6urkTZ5cuXWVRUlOi9tMAOALtx4wYrKCgQy3szsLOysmL//vsve/78OevZs2eNfTIzM2NFRUVSA6tOnToxxhibM2cOA8CWLFnCGGPsrbfeEqvXt29fxhhjEydOlPvz27NnDysrK2Nt27atse6FCxdYTEyMRP7XX3/NGGOsdevWojxvb28WEhLC0tLS2KtXr9jdu3fZwoULmZaWltixf/31F4uLi1P574gSJU1MdI8dIaRBEQgEGDhwICIiIpCcnFxj/c2bN6N58+b45JNPxPJtbW0xcOBAbN26tdrjhUIhLC0t8eDBA6nltra2uHLlCnR1deHk5ISIiIga+5SRkYE///wTHh4e4DhOrMzT0xNFRUU4cOAAAOCdd97B8+fPkZaWJlbv7t27onJ5NGvWDOPHj8fly5eRkJBQY/133nlHdC5p57e3txfltW/fHgcPHsSUKVMwYsQI7NixAwsXLsS2bdtEdYRCId577z1ERkZi3rx5SEhIQGlpKR4/fowFCxbINRZCSO2oPLqkRIkSpYrUsmVLxhhjBw8elPmYoKAg9s8//4jlbd26lWVnZzN9fX1RXnx8PPvzzz+ZUChkQqGQWVpasm3btrGioiI2bNgwseMrZuwYY6ykpIR17txZrnGMGDGCMcbY4MGDRXkCgYAlJyezo0ePivLOnz8vdcYMACssLGS//vqrXOedOXMmY4yxjz76SKb6RUVFzN/fXyK/YsawqnviOI5jQqGQTZ48mZWUlDBjY2MGgL311luMMcays7PZkydP2JQpU9iAAQOYn58fY4yx1atXq/w3RomSmieVd4ASJUqURKk2gd3o0aMZY4z169ePAeX3zeXk5LDNmzeL1YuPj2fSzJgxQ6LNisDu1KlTrKysjF2+fFnq5d6qklAoZE+fPmUHDhwQ5f3f//0fY4yx//u//xPlnT9/nt2/f19qG4WFhVKDrurSzZs3WXp6utR7E6WloqIi5ufnJ5FfEdi9GSB269aNnTx5kmVkZEh8hg4ODgwAMzc3F+X16dNHrM3jx4+z/Px8sWCbEiVKik10KZYQ0qBkZGQgLy8PNjY2Mh9z8uRJxMfHi7YtmTp1KvT19aVehg0LC0OvXr3Qp08fTJ48GfHx8fjll1/w/vvvS217z549mD59OlxcXHDmzBno6enJ1KeysjLs27cPY8aMgZGRkahfT58+xfnz50X1Xrx4AVNTU4nj9fT00KRJE2RmZsp0PqB8e5jevXtj//79KC4ulumYqs7fvHlzABCd39LSEmFhYbCwsICPjw/69++PXr16wdvbG0D5NjAAkJWVBZ7n8fLlS9y4cUOszXPnzkFXVxd2dnYyj4kQIj+VR5eUKFGi9GY6efIkKy4uZhYWFjIfs2DBAlZUVMRatWrFYmJi2IULFyTqSFs80aFDB5aXl8fu3LnDOI4T5VdeFTt16lRWWlrKgoODmZ6enkx96ty5M2OMsZkzZzJjY2NWUFDA1q5dK1Zn8eLFUhdP9OnTR+7FE5s2bWKMMWZvby/zMVXNGH711VeMMcbMzc0ZADZnzhzGGGNWVlZi9T799FPGGGPOzs6ivNjYWJadnS3R5owZMxhjTKYFKJQoUap1UnkHKFGiREksvbndiba2tkS5lpYWGzFihFiekZERy83NZZcvX2aMMan7zFW1Knb58uUS95NJ28fOw8ODlZaWspCQEJkvJ16/fp39/fffzNvbmzHG2Ntvvy1WXrHdyaJFi8Ty/f395druREdHh2VkZMi9Rcnnn38udikVKL+MfO/ePXb9+nVR3uzZs6UGoH///bdEYLdmzRrGGGPvvfeeWN0TJ06wnJwc1rRpU5X/xihRUuOk8g5QokSJkkSq2KD47t27zMvLizk5ObFBgwaxL7/8kj148EDqBsVbt25ljDEWHx8vNvtWkaoK7PT19VlqaiqLiYkRbegrLbADwKZMmcJKS0tZaGioTMHd9OnTGWOMPXnyhF25ckVqnYoNihcsWMCcnJzY6tWrpW5QvGzZMlZSUiJ14+AJEyYwxhj77LPPquzL9u3bWUlJidism46ODrt37x5LTExkEydOZIMGDWJ//PGHxAbFnTp1YoWFheyvv/5ibm5ubPTo0ez8+fPs33//lQjsTExMWEJCAktOTmaenp7M1dWVbdu2jTHG2Pz581X+26JESc2TyjtAiRIlSlLTu+++y3bt2sUSEhJYYWEhy83NZREREWzFihXMzMxMon7FxryVZ78qUlWBHfDfRr1TpkxhQNWBHQA2adIkVlJSwq5cucIMDAyqHYOhoSHLy8tjjDH26aefSq2jpaXFli9fLhpnbGwsmz17tkS9ipnFN4OoinT+/HmWm5tbbX927drFGGPM2tpaLL9ly5Zs9+7dLCMjg+Xn57Nr166xQYMGSRw/fPhwFhkZyfLz81lSUhL78ccf2dChQ6X2qU2bNuzgwYPsxYsXrLCwkN2+fZtNnTpV5b8pSpTUPXGvXxBCSKO3YcMGeHl5wdLSUq5FB4QQoi60VN0BQgipqz59+uDtt9+Gt7c3tm3bRkEdIURj0YwdIaTRY4whLy8PZ8+ehaenJ/Ly8lTdJUIIUQkK7AghhBBC1ARtUEwIIYQQoiYosCOEyGTZsmWIjo4We6g9Y0wsZWdnIygoCMOGDauXPi1fvhyM1e6iw8SJE+Hj46PgHlVP1Z+XLJydncX6WFRUhOfPn+PKlStYvXo1rKysJI7x8PAAYwzW1tZi+d999x0SExNRUlKCrKwsAIC2tjb8/f3x9OlTlJaWIjIyEgAQHx8v8flUpKCgILnHoaWlhUePHtX7d0xIQ6DypbmUKFFq2Mnc3Jzl5uZKbP3BGGNHjhxhffr0Ye+99x6bNGkSi4mJYWVlZWzYsGFK71fF9h+1Ofb06dMsPj6+Xj9HVX9esqSKbV6+/vpr1qdPH9avXz/2wQcfsNWrV7OnT5+yvLw89sknn4gdY2Zmxvr06SP2fNqRI0cyxhj77rvvWL9+/URPm/jiiy8YY4zNmjWL9e3bl73zzjsMKN+KJiwsjPXp00ci2dra1mos7u7u7MWLF6x58+Yq/1wpUarHpPIOUKJEqYGnH374gSUlJUls+ssYY1u2bBHLa9euHWOMSX2kV0XS0tJiQqGwzv1qiIFddU9VUPXnJUuqbv8+ExMTFhERwYqLi0UBWVVpyZIljDHGWrRoIZb/22+/sby8PIn61e0xWNukra3NMjIyJDZ6pkRJnRNdiiWEVEtbWxuffvopDh48KNNlz7i4ODx//lx0Wa7i0t7kyZOxYcMGJCcno6ioCB06dAAADBo0CJcuXcLLly+Rl5eHK1euYODAgRLtDhs2DJGRkSgsLERcXBwWLFgg9fze3t4ICQlBWloaXr16hbt372LhwoXQ0vpvd6egoCCMGDECbdu2FbvkV8HExARbt24V9fXx48dYvXo1dHR0xM7FGMOWLVswc+ZM3L9/H0VFRfDw8Kj5Q1Xi59W/f38wxvDxxx9LnGvKlClgjKFXr15y9bFCVlYWZs6cCW1tbcybN0+UX/lSbHx8PNasWQMAeP78ORhjosvm06dPh56enugzl/fzAqT/FqRdli8pKcHhw4cxY8aMWo2XkMZK5dElJUqUGm7q378/Y4wxNzc3iTJpM1DGxsastLRU9PisihmgpKQkduTIETZixAg2bNgwZmJiwiZNmsTKysrY8ePH2ejRo9nw4cPZqVOnWElJCRs4cKCozYEDB7KSkhIWGhrKRo8ezcaNG8du3LjBEhISJGbsfvrpJzZz5kw2ZMgQ5uLiwnx8fNjz58/Zjh07RHVsbW1ZWFgYe/r0qdglPwCsSZMm7Pbt2yw3N5fNnz+fDR48mK1cuZIVFxezP//8U2L8SUlJ7Pbt2+zjjz9mLi4uzM7OrsrPsr4+r4iICBYWFiZx/hs3brAbN25U+31XN2NXkVJSUtjDhw9F7z08PMSeaNGtWzf2+++/M8YYGzJkCOvTpw+zsLBgffr0YX/++SfLy8sTfeYVTxCJj49nf/75JxMKhRLpzXPL81sAwD788EPGGKtxhpESJTVKKu8AJUqUGnBauHAhY4yxli1bSpQxxtgvv/zChEIh09LSYp06dWJnzpxhjDHm5eXFgP8CheDgYLFjdXV1WUZGBjt58qRYPsdxLDIyUuxh9tevX2fJycmsSZMmojwDAwOWkZFR7aVYjuOYUChkkydPZiUlJczY2FhUVtWl2BkzZjDGGBs/frzUz2Hw4MFi48/KyhJrt7pUX59XRaDVtWtXUV6vXr0YY/89Mq2qJEtgd/36dbHLqZUDO+C/y+SmpqZix+7atYvl5uZKtBkfH8+q8s0339T6t9C+fXvGGGMzZ85U+d8SJUr1kehSLCGkWq1btwbP88jIyJBaPmvWLJSWlqKkpASxsbHo168fli1bBn9/f7F6f/zxh9j7fv36wdTUFHv27IFQKBQlgUCAwMBA9O7dG3p6etDT00Pv3r1x/PhxFBUViY5/9eoVTp8+LdGfbt264eTJk8jIyADP8ygtLcW+ffugpaWFt99+u8bxDhw4EK9evcKxY8fE8nfv3g2g/FLom/766y9kZ2eL3gsEArHxvLmKuD4+LwA4dOgQ0tLSMGvWLNHxc+bMwfPnz3H48OEaP4OaVB6TooSFhaFXr14SaceOHQAg928BKL8UDAAWFhZK6TMhDQ09UowQUi1dXV2UlJSA53mp5YcPH8b69evBGENubi4eP34stW5qaqrY+7feeguAZADzpubNm4MxBqFQiGfPnkmUV86ztLREWFgY/v33X/j4+CAhIQGFhYVwcHCAn58fdHV1axyvqamp1HOlp6ejpKQEpqam1Y7r8ePHaNu2rej9ihUrsHLlStF7ZX9e+fn5KC4uxrZt27BgwQIsXLgQ2tramDBhAnx9fVFcXFz14GVkZWWFp0+f1rmdyl6+fImIiIgqy01MTGT+LVQoLCwEAJm+e0LUAQV2hJBqZWRkoEmTJtDT00N+fr5EeXp6erX/GFeofGN7xQzg7Nmz8ffff0s9Ji0tDdra2uB5Hq1atZIor5w3evRoGBgYYOzYsXjy5Ikov1u3bjX2r8KLFy/Qp08fifwWLVpAW1tbYuay8rg++OADNGnSRPS+cgCk7M+rgr+/P77++mtMmzYNTZs2hZaWFn799dcaz1uT3r17w9zcHNu3b69zW/LKysqS+bdQoXnz5gBQ5YwzIeqGAjtCSLViY2MBAO3bt8e9e/cU1u7Vq1eRlZUFOzs7bN26tcp6JSUluHnzJsaOHYuFCxeKLsEZGBjggw8+EKtbEQy9eZkOAKZPny7RblFRkdRZnMuXL+Ojjz7C6NGjceLECVG+u7u7qLw6UVFR1ZbXlqyfV4Vnz57h6NGj8Pb2ho6ODk6fPo2kpKQ69cHExAS//voriouLsXHjxjq1VRv5+fky/xYqtGvXDgBw//79eusnIapEgR0hpFrBwcEAgL59+yo0sMvLy8OcOXOwZ88eNG/eHMeOHcPz58/RokULdO3aFS1atIC3tzeA8qdeBAYG4uLFi/jpp58gFArx1VdfIS8vT+zS6MWLF1FUVIRDhw5h3bp1aNq0Kby8vGBiYiJx/nv37mHcuHH4/PPPERERAZ7nERERgb1792LWrFnYs2cPli9fjnv37qF///5YsmQJzpw5U2NgpyzyfF4VNm/ejJs3bwIAPD095Tpfx44d0adPHwgEApiamqJPnz749NNP0axZM7i7uyslUDI2NpY6W1pUVITbt28DkP23UKFv374oLS1FaGiowvtLSEOl8hUclChRatgpJCREYqsPQPr2HZVTTassHR0d2enTp1lGRgYrKipiSUlJ7PTp0xL1R4wYwW7fvs0KCwtZQkICW7RokdQNiocPH84iIyNZfn4+S0pKYj/++CMbOnQoY4wxZ2dnUT1jY2N25MgRlpmZycrKysTaMTExYX5+fiwlJYUVFxez+Ph4tmbNGrEnK8g6flV9XhUpLi6ORUdHy9zHivNXKC4uZunp6ezq1ats9erVzMrKSuIYZa+KTUpKqtVvoeK3W3klMSVKap5U3gFKlCg18DR27FhWUlLCWrdurfK+UJI9denShTH231Yq6pykBXbt2rVjZWVlYlvUUKKk7om2OyGE1Oj48eO4desWFi9erOquEBm0a9cOAwYMwG+//YanT5+KtmrRNEuXLsXly5dx6dIlVXeFkHpDgR0hRCbTp0/H06dPlbaHGVGcZcuW4eLFizAwMMCHH36IgoICVXep3gmFQjx+/FhsLz9CNAGH8qk7QgghhBDSyNGMHSGEEEKImqDAjhBCCCFETVBgRwghhBCiJiiwI4QQQghRE/TkiXrQunVr5ObmqrobhBBCCGmkDA0NJZ49LQ0FdkrWunVrpKSkqLobhBBCCGnkLCwsagzuKLBTsoqZOgsLC6XM2gmFQri6uuLixYsoKytTePsNjaaNF9C8MdN41Z+mjZnGq/6UPWZDQ0OkpKTIFEdQYFdPcnNzlRbYFRQUIDc3VyP+gDRtvIDmjZnGq/40bcw0XvXXkMZMiycIIYQQQtQEBXaEEEIIIWqCAjtCCCGEEDVB99g1ALq6umjRokWtHq4uFAphZmYGa2trlV/Xrw+aNl5A88asivEyxpCbm4vs7GwwRo/PJoQ0XhTYyaCkpARRUVEAgPDwcEyfPl1hbb/zzjuYN28etLW1a92Grq4uBg4cqLA+NXSaNl5A88asqvHGxsbi999/R3p6er2fmxBCFIECOxlkZ2eje/fuCm9XV1cX8+bNQ0xMDAICAlBaWlqrdgwNDTVqA2RNGy+geWOu7/EKhUK0bNkSEyZMwJo1a+Dt7V3rv0dCCFElCuxUqEWLFtDW1kZAQAAeP35c63aMjIzw8uVLBfasYdO08QKaN2ZVjDcuLg6ZmZlYunQpWrVqheTk5Ho9PyGEKILaL55wdHTEqVOnkJKSAsYYRo0aJVHHy8sLcXFxKCgoQHh4OPr37y9W3qxZM4SHhyMsLAxOTk4K61vFPXU0M0BIw1BUVASgfAaPEEIaI7UP7PT19XHnzh3Mnj1bavmECROwadMmrFmzBt27d0dYWBjOnTsHS0tLUZ22bduiV69e+Pzzz7F3714YGhrWV/dlwpgeAPY66am4N4QQQghRFbW/FBsYGIjAwMAqy+fPn48dO3Zgx44dAIB58+Zh6NCh8PLywpIlSwAAqampAIDo6Gjcv38fb7/9NiIiIqS2p6OjgyZNmojeVwSBQqFQYhZAEbMCtVlJq2oeHh7YtGkTTExM5D62Yrwcx2nM6kVNG3NDGK+0v1dlnksgEGjULKGmjZnGq94YE4DjnPH0qTM4rhACQQg4jlfoOeT5LNU+sKuOtrY2evbsiR9++EEs/8KFC+jXrx8AwNjYGPn5+SguLoaFhQXs7OwQFxdXZZuLFy/GihUrJPJdXV1RUFAglmdmZgZdXV0YGhrCyMio1uNo2tQAOTnlr/X03KClFaTwH1VlZmZm+OabbzB48GC0bNkS2dnZiIqKwg8//IBbt25Ve2xgYCB69eolGvMnn3wCPz8/UfmzZ89w/fp1rFixAomJiRLH6+vrK3YwjYCmjVlV4zU0NISuri6cnJyQkZFRL+cUCoXo0aMHOI7TiO1sAM0bM41XfaWmvofo6OkoLGyBf/4BgC/RtGk67O1/h7n5dYWdR1dXV+a6Gh3YmZmZQUtLC2lpaWL5aWlpaNWqFQDA1tYW27ZtA8/zYIzBx8cHWVlZVba5du1a+Pr6it5XPLj34sWLEqv8rK2tMXDgQOTm5tbhRvGxyMnZInqXn/8HgCQAPgACatlmzU6fPg1tbW24u7sjLi4Ob731FgYNGgQdHZ0ax/Ly5Uuxzzw/Px8vX75Ep06dwHEcOnfujG3btmH//v3o1q0beP6/ILViNicnJ0cjZq8AzRuzKsdrbGyMgoIChIaGSv2PCmUQCoVgjCEwMFDt/xGsoGljpvGqJ8ZGg+e/lsgvLDRFRMTXEAgmgONOKORc8twCptGBXYXK/3i8eQno+vXrePfdd2Vuq7i4GMXFxRL5ZWVlEj/wuv/gxwA4Csl/+ywAHAMwHsoI7oyMjODo6AhnZ2eEhoYCAJ48eSI2U2dkZIR169Zh1KhRMDIywqNHj/D111/jzJkzUi/FMsZEwd6zZ8+wcuVKHDhwAB06dMBXX32Fli1b4oMPPhB9LwKBAMnJyViyZAl27dql8DE2JBVj1oSgDmgY45X296pMPM/X+zlVTdPGTONVNwIAG994XbmMB8/7ovzf4LpfQZPnc9TowC4jIwOlpaWi2bkKLVu2lJjFk5e3tzdmzZoFgUBZ61MEADa/8bpyGQ9gE4CTUMSP6k2vXr1Cbm4uRo8ejb///lsikOU4DufOnYOhoSEmT56Mx48fw87OTq4fZsVla21tbWzfvh2hoaFo1aoVnj17BgAYNmwYDAwMcOTIEcUNjBBCCJGJIwDLasoFAKxe1wuplx69eWaNVVJSgoiICLi6uorlu7q64tq1a3Vq28/PD/b29nBwcKhTO1Wr+FFV9RW++aNSrLKyMkydOhUeHh7Izs7GlStXsGbNGnTp0gUAMHjwYDg4OGDs2LG4dOkS4uPjcebMmWoXsbzJwsICCxcuRFJSEh48eIDr16/j33//xZQpU0R1PD09cfToUeTl5Sl8fIQQQkj1zBVcT3HUPrDT19dH165d0bVrVwCAjY0NunbtKtrOxNfXF5999hk8PT3RuXNn+Pr6wsrKCr/++mudzuvt7Y3o6GjcvHmzzmOQTrU/quPHj6N169YYOXIkzp8/DxcXF/zzzz/w8PBAt27dkJycjIcPH8rcnrGxMXJzc/Hq1SskJydDR0cHY8eORUlJCQBg+/bt8PT0BFB+b+Tw4cOxc+dOpYyNEEIIqV6qguspFlPn5OzszKTZtWuXqI6XlxeLj49nhYWFLDw8nDk6Oirs/IaGhowxxgwNDSXKrK2t2d69e5m1tXUt2nZmAJMhOdfbZ/3777+zhIQENnv2bJaQkFBlPQ8PD5aVlSX2/uXLl6x9+/bMxsaG6enpSRzTvHlzVlhYyPr27cuWLFnC/v33X5X/tuozGRkZqbwPmjDeuv1N1i4JhUI2YsQIJhQKVf6505hpvDReWZOAAU8YUMYg9d/eMgYkvq5X9/NVF0tUTmp/j11ISEiNe735+/vD39+/nnqkKGEoX/1qAekTrzyA5Nf16sf9+/cxevRo3L17F23atEHHjh1lnrXjeb7ax6plZmbixIkT8PT0xPvvv6/2CyYIIYQ0ZDzKd5849vq1oFIZAMyFou9xl4XaX4pVFeVfiq34UVW8rlwGKOtH1bx5c1y+fBmTJk1Cly5d0LZtW4wfPx6LFi3CyZMnERoaitDQUPzxxx8YPHgw2rZtCzc3NwwdOrRO592+fTs8PDzQqVMn7NmzR0GjIYQQQmojAOW7T6RUyk+GsnalkIXaz9ipip+fH/z8/GBoaIicit2DFa78R8Vxv4Cx1m/kJ6M8qFPOj+rVq1e4ceMG5s2bh/bt20NbWxtJSUn4/fff8f333wMAxo0bhw0bNuDQoUPQ19cXbXdSF5cuXUJqair+/fdf0dNACCGEENUJAHASAoELunZ1w507geD5YKhipq4CBXaNXgAMDG4iNzf59Xs3ABehzB9VcXExlixZInrkmjRZWVn49NNPpZbt2bNHbMat8vuq6OrqwtjYGPv375e/04QQQohS8OC4EFhY6OHu3RCoMqgD6FKs0ij/Uux/xB8fFgZV/6gUjeM4mJub47vvvsPLly9x9uxZVXeJEEIIaZBoxk5J6udSbDmOywdQ/QKRxszKygoJCQlISkrC1KlT1Xgnc0IIIaRuKLAjDV5iYqLYymYjIyMV9oYQQghpuOhSLCGEEEKImqDATknq8x47QgghhBCAAjulUf6zYgkhhBBCxFFgRwghhBCiJiiwI4QQQghRE7QqVg0wLQaseP1mDYASFXaGEEIIISpDM3ZKQosniDzi4+Ph4+NTc0VCCCGkGhTYKUl9Lp5gHPvvjRXqZa/it956Cz///DMeP36MwsJCPHnyBKdOncLAgQNlbmPXrl1gjIExhpKSEiQmJsLPzw/GxsZi9aQFPRs2bEBOTg4GDBgAAAgKCoKHh0etxuLh4QHGGM6dOyeWb2RkBMYYnJ2da9UuIYQQUt/oUmxjZwu8Gvbqv/dTALwEEAggRjmntLa2xtWrV5GdnY1Fixbh7t270NbWxtChQ7F161bY2trK3Na5c+fg6ekJLS0t2NnZYefOnTA2NsYnn3witb5AIMAvv/yCoUOHYuDAgQgPD1fImEpKSjBo0CC4uLggODhYIW0SQggh9Y1m7BozWwATAGbAxPObledD9vhKLn5+fmCMwcHBAX/88QcePnyI+/fvY+PGjejbty8AYMeOHTh9+rTYcUKhEKmpqfD09BTlFRUVIS0tDSkpKbh48SIOHz6MIUOGSD2vjo4Ojh49ChcXFzg5OVUb1C1fvhyJiYkoLCxESkoKNm/eXO2Y8vLysGvXLvzwww9V1nF2dgZjTOzJF127dgVjDNbW1gDKZ/+ysrIwfPhwxMbGIi8vD0ePHoWenh7c3d0RHx+PzMxM/PzzzxAIxP/8DA0NceDAAeTm5iIlJQWzZ88WK583bx7u3r2LV69e4cmTJ9i6dSv09fWrHRchhBDNQoFdY8UBcHvjdeUyvC5X8GVZExMTuLm5YevWrcjPz5cof/nyJQBg+/btcHNzQ6tWrURlw4YNg4GBAY4cOSK1bRsbG7i5uaGkRHL1h4GBAc6cOQN7e3u4ubkhNja2yj6OGzcO8+bNw8yZM9GxY0eMHj0a9+7dq3FsK1asQJcuXTBu3Lga61ZHT08PX3zxBT7++GO4ubnBxcUFx48fx7BhwzBs2DBMmTIFM2bMwPjx48WOW7hwIe7evYsePXpg7dq12LhxIwYPHiwq53keX3zxBd555x14eHhg4MCBWLduXZ36SgghRL3QpdjGyhpAdY9M5V6XWwNIUNxpO3ToAIFAUG1gBQDXr1/Hv//+iylTpmD9+vUAAE9PTxw9ehR5eXmieiNGjEBubi6EQiF0dXUBlM9MVbZs2TLk5ubCzs4OxcXFEuUV99oBgJWVFZ49e4ZLly6htLQUSUlJuHXrVo1jS01NxebNm7FmzRqcOHGixvpV0dHRgZeXF+Li4gAAx44dw5QpU/DWW28hLy8PMTExCAoKwoABA8SC3KtXr+LHH38EADx8+BDvv/8+5s2bh0uXLgGA2KxjQkICli1bBn9/f8yaNavWfSWEEKJeaMausTJQcD0ZcVz5FCBjrIaa5bN2FZddW7RogeHDh2Pnzp1idYKCgtCtWzf06dMHP//8MwIDA7FlyxaJti5cuAB9fX0sWbKkxvMePXoUurq6iIuLw2+//YbRo0dDKBTKMjz8+OOPaNGiBaZNmyZTfWny8vJEQR0ApKWlISEhQSygTUtLQ8uWLcWOu379usT7N+9XdHFxwYULF5CcnIycnBzs3bsXZmZm0NPTq3VfCSGEqBcK7JRE6dudvKq5ilz1ZPTw4UPwPC/TAom9e/eiXbt26Nu3LyZPnoyEhARcuXJFrE5eXh4eP36Me/fuwcfHB02aNMHy5csl2rp8+TJGjhyJGTNm1Hj5MTk5GZ06dcKsWbNQUFAAPz8/hIaGQkur5gnqly9fYu3atVi+fLlEwMTzPID/glsA0NbWlmij8qXkilW/lfMq32MnTUUAbWlpibNnzyIqKgrjxo1Dz549RTN10vpACCFEM1FgpyRK3+4kEeWrX6uaOGOvyxMVe9qsrCycP38es2bNkjpT9ObCgszMTJw4cQKenp7w9PTErl27amx/5cqV+PLLL2Fubi5RdunSJYwYMQKTJk3CL7/8Um07hYWFOH36NHx8fODi4oJ+/fqhS5cuMowQ2LJlC3iel9hiJT09HQDE+tatWzeZ2pRFxcKTN99XXPLu3r07tLS0sGDBAty4cQMPHz5E69atFXZuQggh6oECu8aKoXxLk4rXlcvwurzmK6Zy8/b2hlAoxM2bNzF27Fh06NABnTt3xpw5cyQuJ27fvh0eHh6wtbXFnj17amw7JCQE0dHRVV5yDQoKwkcffQQPDw9s3bpVah0PDw9MmzYN9vb2sLGxwZQpU5Cfn4/ERNmi3KKiIixfvhxffPGFWP6jR4/w5MkTrFixAh07dsSwYcOwYMECmdqUxfvvv4+FCxeiY8eO8Pb2xocffii6ry4+Ph7a2tqYM2cObGxsMHnyZHz++ecKOzchhBD1QIFdYxYD4AjAvaq09DWnPF9Z+9glJCSgR48eCAoKwk8//YSoqChcvHgRgwYNgpeXl1jdS5cuITU1FefPn0dqaqpM7fv6+mL69Olo06aN1PIrV66IVpf6+/tLlGdnZ2P69Om4evUq7t69i0GDBuGDDz5AZmamzGPcs2eP2H1yAFBaWoqJEyeic+fOuHPnDr766issXbpU5jZr8tNPP6Fnz56IjIzEsmXLsGDBAly4cAEAcO/ePcybNw9fffUVoqKiMGnSJCxevFhh5yaEEKI+GCXlJUNDQ8YYY4aGhhJl1tbWbO/evcza2rpu5zAzZFiB8tQeDJzqx12RdHV1WVZWFhszZozC2jQyMlL5uOo7adqYVTVeRf1NypOEQiEbMWIEEwqFKv/cacw0XhpvwxxzdbFE5UTbnagBjr0xY/cE5V+tinEch1atWmHBggV4+fIlTp06peouEUIIIWqPAjs1wJVywApV90KclZUVEhISkJSUhKlTp6KsrEzVXSKEEELUHgV2RCkSExPFtgUhhBBCiPLR4gklUfo+doQQQgghlVBgpyRK38eOEEIIIaQSCuwIIYQQQtQEBXaEEEIIIWqCAjtCCCGEEDVBgZ0a0NNhYAcAdgDQa6Lq3hBCCCFEVSiwI0TJGGMYNWqUSs6tra2Nhw8fol+/fko9z/LlyxEZGanUc1QWHx8PHx8fmevPmjULJ0+eVGKPCCFE9SiwUwMC7r9HTTh2AgT1sH3cW2+9hZ9//hmPHz9GYWEhnjx5glOnTmHgwIEyt7Fr1y4wxsAYQ0lJCRITE+Hn5wdjY2OxetL+Ad+wYQNycnIwYMAAAEBQUBA8PDxqPR5tbW0sXLgQt2/fRl5eHtLT03HlyhVMnToVWlqybfeoiuCmJjNmzEBiYiKuXbum6q6o3O+//47evXvj/fffV3VXCCFEaWiD4kZuTC/gl6mvRO8DvwKSXgA+e4GAcOWc09raGlevXkV2djYWLVqEu3fvQltbG0OHDsXWrVtha2src1vnzp2Dp6cntLS0YGdnh507d8LY2BiffPKJ1PoCgQC//PILhg4dioEDByI8vO6D1NbWxvnz59G1a1csW7YMV69eRU5ODvr27Ysvv/wSkZGRuHPnTp3Powpz5szBihUrlHoOoVCo1PYVpbi4GAcPHsScOXNw9epVVXeHEEKUgmbsZKSrq4uEhASsX79e1V0RGdMLODYXaGUs/nBYC5Py/DG9lHNePz8/MMbg4OCAP/74Aw8fPsT9+/exceNG9O3bFwCwY8cOnD59Wuw4oVCI1NRUeHp6ivKKioqQlpaGlJQUXLx4EYcPH8aQIUOknldHRwdHjx6Fi4sLnJycqg3qli9fjsTERBQWFiIlJQWbN2+usu7cuXPh5OSEQYMGwc/PD3fu3EF8fDwOHTqEPn364OHDh5gyZQoyMjKgo6MjduyxY8ewZ88eeHh4YMWKFejWrZtoFvLNGUQzMzMcP34ceXl5ePDgAT744AOxdpycnHDjxg0UFhbi6dOnWLt2rVjA9Oeff2Lz5s348ccf8eLFC6SmpmL58uVVjgkAunfvjg4dOuDMmTNi+RYWFjh06BBevHiBV69e4datW3BwcIC1tTXKysrQs2dPsfqzZ89GQkICAMDZ2RmMMQwZMgS3bt1CUVERHB0dJc7dtm1bPHz4EH5+fjI9gWTs2LGIiopCYWEh4uPjMXv2bLHyFi1a4NSpU8jPz0dcXJzUwL9Zs2bYtm0b0tLS8PLlS1y+fBnvvvuuWJ1Tp05h9OjRaNq0aY19IoSQxogCOxl98803uHHjhqq7ISLggM3u/70WKxMAYMCmKYq/LGtiYgI3Nzds3boV+fn5EuUvX74EAGzfvh1ubm5o1aqVqGzYsGEwMDDAkSNHpLZtY2MDNzc3lJSUSJQZGBjgzJkzsLe3h5ubG2JjY6vs47hx4zBv3jzMnDkTHTt2xOjRo3Hv3r0q60+aNAmXLl3C7du3JcpKS0uRn5+Po0ePQigUYuTIkaIyU1NTjBgxArt27cLhw4exYcMGREVFoVWrVmjVqhUOHz4sqrt8+XIcOXIE7777Ls6ePYsDBw7AxMQEANC6dWucPXsWt27dQteuXeHl5YVPP/0US5cuFeuLh4cH8vLy0KdPHyxatAjffvstBg8eXOW4nJyc8ODBA+Tm5ory9PX1ERISgtatW2PkyJHo2rUr1q1bB4FAgMTERFy6dEks8AYAT09P7N69Wyxv3bp1WLx4MWxtbXH37l2xMnt7e1y9ehVHjx6Ft7c3GBP/D4/KevTogSNHjuB///sfunTpghUrVmDJkiVigfHu3bvRtm1bDBw4EOPHj4e3tzdatmwp1s6ZM2fQqlUrDBs2DD179sQ///yDy5cviz5nAAgPD4e2tjZtHE4IUWuMUvWpQ4cO7NixY8zDw4OtX79ermMNDQ0ZY4wZGhpKlFlbW7O9e/cya2trufvkbAvGDtScnG0V+1n07t2bMcbY6NGja6wbFRXFFi5cKHp//PhxtnPnTtH7Xbt2sZKSEpabm8vy8/NZhblz54q1Ex8fzwoLC1l6ejpr0aIFMzIyqva88+bNY7GxsUxLS0umMeXl5bFNmzbVWG/r1q3szJkzovdffPEFe/Tokej98uXLWWRkpMRxjDG2atUq0Xs9PT1WVlbGhg4dygCw1atXs5iYGLFjvLy8WE5ODuM4jgFgYWFhLDQ0VKzOjRs32Nq1a6vs78aNG9mlS5fE8qZPn85evnzJTExMpB7z4YcfshcvXjAdHR0GgL377rusrKxM9Bt1dnZmjDE2cuRIseMqxt63b1+WkZHBFixYIPNvav/+/ez8+fNieZs2bWJRUVEMAOvYsSNjjDEHBwdReadOnRhjjPn4+DAAbMCAASw7O1vU74r08OFDNn36dLG8Fy9eMHd3d6l9qcvfZG2TUChkI0aMYEKhsN7OqeqkaWOm8ap/UvaYq4slKie1n7FzdHTEqVOnkJKSUuXqRC8vL8TFxaGgoADh4eHo37+/WPmGDRuwePHi+uqyTMyNFVtPVhWX1WqahQHKZ+0qZn9atGiB4cOHY+fOnWJ1goKC0K1bN/Tp0wc///wzAgMDsWXLFom2Lly4AH19fSxZsqTG8x49ehS6urqIi4vDb7/9htGjR1d7HxjHcTKN5/fff8eQIUPQunVrANJnsqry5qxWfn4+cnNzRTNOtra2uH79ulj9q1evwtDQEG3atJHaBgCkpqZKzFq9SVdXF4WFhWJ53bp1Q2RkJLKysqQec+LECZSWlmLMmDEAgGnTpiEoKAiJiYli9aRdBreyssKlS5ewevVq/PTTT1X2qzJbW1uJe95u3LiBjh07QiAQwNbWFiUlJWLn/Pfff8XG0LNnTxgYGODFixfIzc0VJRsbG7Rv316s7YKCAujp6cncP0IIaUzUPrDT19fHnTt3JO7ZqTBhwgRs2rQJa9asQffu3REWFoZz587B0tISADBy5Eg8ePAADx8+rM9u1yg1W7H1ZPXw4UPwPC/TAom9e/eiXbt26Nu3LyZPnoyEhARcuXJFrE5eXh4eP36Me/fuwcfHB02aNJF679jly5cxcuRIzJgxA+vWrav2vMnJyejUqRNmzZqFgoIC+Pn5ITQ0tMrVrQ8ePJBpPLdv38adO3fg7u6O7t27o0uXLjIHdpUvLzPGIBCU//lJCyylBdDVtSFNRkaG2GVIoDyoqamf+/btg6enJ7S1tfHJJ59IBONA+fdWWXp6Om7evImPP/4YhoaG1Z7nTdWN/83X1QXfAoEAqamp6Natm1jq1KmTxH2xzZs3R3p6usz9I4SQxkTtA7vAwEAsW7YMAQEBUsvnz5+PHTt2YMeOHYiNjcW8efOQlJQELy8vAEDfvn3x8ccfIz4+Hhs2bMD06dOxbNmy+hyCVGGx5atfeV56Oc8DTzLK6ylSVlYWzp8/j1mzZkmd9TAyMhK9zszMxIkTJ+Dp6QlPT0/s2rWrxvZXrlyJL7/8Eubm5hJlly5dwogRIzBp0iT88ssv1bZTWFiI06dPw8fHBy4uLujXrx+6dOkite7BgwcxePBgdOvWTaJMKBSKjbNiFnLatGm4dOkSkpOTRWXFxcW1WiF6//59iX3m+vXrh5ycHKSkpMjdXoXIyEh07txZLO/u3bvo1q2bRMD3pu3bt2Pw4MHw9vaGtrY2jh8/LtP5CgoKMGLECBQWFuL8+fMwMDCQ6bj79+9LzJI7ODjgwYMH4HkeMTEx0NbWRq9e/60Gevvtt8XG8M8//6BVq1YoLS3F48ePxdKLFy9E9dq1awddXd0Gty0NIepDAMackZLiBMacoQFhRoOj0Z+4trY2evbsiQsXLojlX7hwQfQP7ZIlS2BlZQUbGxt8+eWX+P333/Hdd99V2aaOjg4MDQ3FElAeIEhLtcWz8i1NwJW/Fivjy/Pn7pMsUwRvb28IhULcvHkTY8eORYcOHdC5c2fMmTNH4pLi9u3b4eHhAVtbW+zZs6fGtkNCQhAdHV3lJdfg4GB89NFH8PDwwNatW6XW8fDwwLRp02Bvbw8bGxtMmTIF+fn5EpcTK2zatAlXr17F5cuX4e3tjXfffRc2Njb48MMPRZcEKxw4cAAWFhaYPn26xExWQkICbGxs0LVrV5iamkqsoK2Kn58fLC0tsWXLFnTq1AkjR47EypUr4evrC8aYaMZKltWlbwoKCoK+vj7s7e1FeYcOHcKzZ89w4sQJ9OvXDzY2Nhg7dqxoNTMAxMbG4u+//8aPP/6IQ4cOSVzOrU5+fj6GDx+O0tJSnDt3Dvr6+jUe89NPP2HQoEFYunQpOnbsCA8PD0yfPl10OffBgwc4d+4cfv/9dzg4OKBHjx7Yvn272OKdS5cu4fr16zhx4gSGDBkCa2trvPfee/juu+/EVvk6Ojri8ePHiIuLq7ZPVf29KisJBIJ6P6eqk6aNWRPGKxCMA5AAnr+MyMiF4PnLABIgEIxTed/U4TuWlUbvY2dmZgYtLS2kpaWJ5aelpYmt5pTH4sWLpe4b5urqKnEZzMzMDLq6ujA0NBSb6ZLVXw8Bj99LsG5CIcyN/5u6e5rNYfExXfz1UBu1aLZGWVlZcHFxwYIFC7Bx40a89dZbyMjIwJ07d7Bw4UKxsdy6dQtpaWmIiYlBfn6+WJmOjg60tbUlxv7rr79i69at8Pf3R0pKCgQCAXR1dUX1IiMjMWHCBBw+fBhNmzbF/PnzxY4vKSnBrFmz4OvrC6FQiPv37+Pjjz9GWVlZlZ9zxUpLb29vbNiwAQUFBfj333+xfft2JCUliR13+vRpDBkyBEFBQWL5ly5dwuXLlxEcHAxjY2N4e3vj4MGDAMpvCXizLsdx0NPTg5GREfLy8jBhwgSsWrUK06dPR1ZWFvbv348tW7aIjhEIBNDR0RFrQ1tbWyLvTWVlZTh9+jSmTZuGVatWiY119erVOHv2LLS0tPDvv//iyy+/FGvn0KFDeP/993HkyBGx/IpZuMrnbNq0KYRCoSj/448/xh9//IELFy5g/PjxUldQV4iLi4OnpycWL16MZcuWIS0tDRs2bEBAQICoPR8fH/z8888ICQlBeno6Vq9eDWtra7HfxcSJE7Fs2TLs2rULZmZmSEtLw7Vr11BQUCCqM2XKFOzbt6/Kz8zQ0BC6urpwcnJCRkZGlX1WJKFQiB49eoDjOJSVldXLOVVN08asCeNNTX0PERHS7kW3AM8fRc+ea2Fufl1KuXpQ9nesq6srV32Vryapr8QYY6NGjRK9Nzc3Z4wx1rdvX7F6S5YskVilKGvS0dFhhoaGotS6dWvGGGPGxsZMKBSKpXbt2tV5BR7HccyipaFoFezQd8EEnOo/64qkq6vLsrKy2JgxYxTSHsdxzMjISLRaVBXpwoULbPPmzfV2vrqM+Z133mHPnj1jBgYGch23ZMkSdvfuXZV8vsr6ju3t7dmzZ89Ys2bNqqxTsSq2Xbt2En+vyko6Ojps5MiRTEdHp97OqeqkaWNW9/EKBNoMeMKAMgYwKamMAYlMINBWeV8b63dsbGws86pYjZ6xy8jIQGlpqcTsXMuWLSVm8WRVXFyM4uJieHt7Y9asWaKb28vKyiSieEVE9Ywx8Oy/S3Rh/yrn8qu8OI5Dq1atsGDBArx8+RKnTp1SSLsVN9DLsopV0UxMTDBkyBAMHDiwysU4ylCXMUdFRWHRokVo27YtoqKiaqyvr68PW1tbzJkzR2X3kirrO27dujXc3d2Rk5NTY11pf6/KxPN8vZ9T1TRtzOo93v4ALKspFwCwAs/3AxBSP11SAWV+x/K0qdGBXUlJCSIiIuDq6ooTJ06I8l1dXev8sHA/Pz/4+fnB0NBQpn9I6iK/mAM3SamnkJuVlRUSEhKQlJSEqVOnqsX/mf3zzz8wMTHBV199hQcPHqi6OzLbu3evzHV/+eUXTJw4ESdOnJC6GrY2zp49K/XpFADw/fffY+3atQo5T00uXrxYL+chRPNILnarWz1SF2of2Onr66NDhw6i9xU3t2dmZiIpKQm+vr7Yt28fwsPDcf36dcyYMQNWVlb49ddf63TeyjN2miYxMVHum/0bOhsbG1V3QekqVjAr0meffVbl/SGZmZkKPRchRBVSFVyP1IXaB3a9evVCcHCw6P3GjRsBlD+iyNPTE0eOHIGpqSm+/fZbmJubIyoqCsOGDcOTJ0/qdN76nLEjpCF7+vSpqrtACFGqMABJACwgfbMNHkDy63pE2dQ+sAsJCalx5sjf3x/+/v711CNCCCFEnfAAfAAce/1aUKkMAOa+8Zook2ZeJ6wH3t7eiI6Oxs2bN1XdFUIIIUTJAgCMB1B5U/Xk1/kB9d4jTUWBnZL4+fnB3t4eDg4Oqu4KIYQQUg8CALSFQDAI3buvh0AwCIANKKirXxTYEUIIIURBeHBcCCwsQsFxIaDLr/WPAjs1oKejA/a/w2D/Owy9Jk1U3R1CCCGEqAgFdkpC99iRCowxjBo1SiXn1tbWxsOHD0XPPm5o4uPj4ePjo/TzzJo1q857UxJCSGNAgZ2S1Oc9doI3Vv06du4s9l5Z3nrrLfz88894/PgxCgsL8eTJE5w6dQoDBw6UuY1du3aBMQbGGEpKSpCYmAg/Pz8YGxuL1ZP2j/+GDRuQk5ODAQMGACh/4L2Hh0etx6OtrY2FCxfi9u3byMvLQ3p6Oq5cuYKpU6dCS0u2xePLly9HZGRkrfugDDNmzEBiYiKuXbsmlu/i4oIzZ84gIyMDeXl5iI6OxoYNG9C6dWuZ23ZxccFff/2FFy9eIC8vDw8ePMDu3bvlelh1ffn999/Ru3dvvP/++6ruCiGEKBUFdo3cmN4OuLnyvwe8By5egoRffsGY3soLKK2trREREYGBAwdi0aJF6NKlC9zc3BAUFIStW7fK1da5c+fQqlUrtG3bFp999hk++OAD+Pn5VVlfIBDgl19+gbu7OwYOHIigoKC6Dgfa2to4f/48vv76a/z222/o168fHBwcsHXrVsyZMwf29vZ1PoeqzJkzB9u3bxfLmzFjBi5duoRnz55h3LhxsLOzw+effw4jIyMsWLBApnbt7Oxw7tw53Lp1C05OTujSpQvmzJmDkpKSBrcpt1AoRHFxMQ4ePIg5c+aoujuEEKJ0KnnQt6YkQ0PDKh/cW/HAcWtr61q1Paa3Ays79D9Wduh/jP3vsCiVHTzEyg79j43p7aCUMZ05c4YlJSUxPT09iTIjIyMGgO3YsYOdPn1arEwoFLLU1FTm6enJALBdu3axgIAAsTobNmxgGRkZYnnx8fHMx8eH6ejosD/++IMlJSWxzp07i9UJCgpiHh4eovfLly9niYmJrLCwkKWkpLDNmzdXOZ6FCxey0tJS1q1bN4kyLS0tpqenx6ZMmcIyMjKYjo6OWPmxY8fYnj17mIeHB6usoj+MMfbpp5+y48ePs7y8PPbgwQP2wQcfiLXj5OTEbty4wQoLC9nTp0/Z2rVrmVAoFJWHhYWxzZs3sx9//JG9ePGCpaamsuXLl1f7PXXv3p2VlpaK/fYsLCxYYWEh8/X1lXqMkZER09PTYy9fvmTjxo0TKxsxYgR79eoVMzAwYD4+PiwuLq7G38rYsWNZVFQUKywsZPHx8Wz+/PlSv1sA7ODBg+zQoUNivyMtLS2Wnp7Opk6dKvZ9PX78mOXn57Pbt2+L9dPZ2ZkxxtiQIUPYrVu3WFFREXNxcRF9xoWFhaxp06ZV9reuf5O1SUKhkI0YMULs+1b3pGljpvGqf1L2mKuLJSqnhvWf1mpE2ffYCTgOm6d6iF6LlQkEAGPY5OGh8MuyJiYmcHNzw9atW5Gfny9R/vLlSwDA9u3b4ebmhlatWonKhg0bBgMDAxw5ckRq2zY2NnBzc0NJSYlEmYGBAc6cOQN7e3u4ubkhNja2yj6OGzcO8+bNw8yZM9GxY0eMHj0a9+7dq7L+pEmTcOnSJdy+fVuirLS0FPn5+Th69CiEQiFGjhwpKjM1NcWIESOwa9cuHD58GBs2bEBUVBRatWqFVq1a4fDhw6K6y5cvx5EjR/Duu+/i7NmzOHDgAExMTACUP5z+7NmzuHXrFrp27QovLy98+umnWLp0qVhfPDw8kJeXhz59+mDRokX49ttvMXjw4CrH5eTkhAcPHiA3N1eU9+GHH6JJkyZYt26d1GNevnyJ/Px8/O9//5N4tJinpyeOHTuGV69e4dmzZzA3N6/yGbAA0KNHDxw5cgT/+9//0KVLF6xYsQLfffddlZfMDxw4gJEjR0JfX1+UN3ToUOjr6+OPP/4AAKxevRqenp7w8vKCvb09Nm7ciP3798PJyUmsrXXr1mHx4sWwtbXF3bt3AQDh4eHQ1tamLYgIIWpP5ZGuOidlzdg529mJzdJVlZzt7BQ6nt69ezPGGBs9enSNdaOiotjChQtF748fP8527twper9r1y5WUlLCcnNzWX5+vmima+7cuWLtxMfHs8LCQpaens5atGghms2pKs2bN4/FxsYyLS0tmcaUl5fHNm3aVGO9rVu3sjNnzojef/HFF+zRo0ei98uXL2eRkZESxzHG2KpVq0Tv9fT0WFlZGRs6dCgDwFavXs1iYmLEjvHy8mI5OTmM4zgGlM/YhYaGitW5ceMGW7t2bZX93bhxI7t06ZLEGLKzs2X6nktKSpi5uTkDwExNTVlRURFzcnJiAJhAIGA7d+5kjDH29OlTdvz4cTZr1iyx3/n+/fvZ+fPnxdr98ccfWVRUlNh3WzFjp6WlxZ4/f84mT54s+o4PHDjADh8+LPrc8vPzWd++fcXa/P3339mBAwfK/y5ez9iNHDlS6rhevHjB3N3dqxw3zdjRmGm8NN6GOGaasdMA5pUWGNS1nqwqHs/GGKux7vbt20WzPi1atMDw4cOxc+dOsTpBQUHo1q0b+vTpg59//hmBgYHYsmWLRFsXLlyAvr4+lixZUuN5jx49Cl1dXcTFxeG3337D6NGjq72hn+M4mcbz+++/Y8iQIaIFBp6enti9e3eNxwEQzRoBQH5+PnJzc9GyZUsAgK2tLa5fvy5W/+rVqzA0NESbNm2ktgEAqampojak0dXVRWFhoVierGO9desWoqOj4e7uDgCYMmUKnjx5gtDQUAAAz/OYNm0aLCwssGjRIjx9+hTffPMNoqOjRbO0tra2uHr1qsS4OnbsKPU+vNLSUhw9ehSTJk0CAOjp6WHUqFE4cOAAgPL7+nR1dXHx4kXk5uaKkru7O9q3by/WVnh4uNRxFRQUQE9Pr8bxE0JIY0WBXSOVmp2t0HqyevjwIXieh62tbY119+7di3bt2qFv376YPHkyEhIScOXKFbE6eXl5ePz4Me7duwcfHx80adIEy5cvl2jr8uXLGDlyJGbMmFHlZcQKycnJ6NSpE2bNmoWCggL4+fkhNDS0ytWtDx48kGk8t2/fxp07d+Du7o7u3bujS5cuMgd2lS8vM8ZEwY20YEtaAF1dG9JkZGSILvdWePDgAYyNjcUukVflzcDc09MTu3btkqjz9OlT7N+/H7Nnz4adnR2aNm2Kzz//vMZxVeXAgQMYPHgwzMzMMHr0aBQWFuLcuXMAIBrr8OHD0a1bN1Gys7PD+PHjxdrJy8uT2n7z5s2Rnp5e49gJIaSxosCukQqLiUHSiwzwvPRdvXmex5OMDITFxCj0vFlZWTh//jxmzZoldebDyMhI9DozMxMnTpyAp6dnlYFBZStXrsSXX34Jc3NzibJLly5hxIgRmDRpEn755Zdq2yksLMTp06fh4+MDFxcX9OvXD126dJFa9+DBgxg8eDC6desmUSYUCsXGWRHsTJs2DZcuXUJycrKorLi4uFZbfdy/f19in7l+/fohJycHKSmVn7sou8jISHTu3Fks79ixYygqKsKiRYukHvPm97d//35YWVmJVgbv2bOn2vNlZ2cjNTVVdI/c/fv30b9/f7E6/fr1w4MHD6r83V67dg1JSUkYO3YsJk2ahKNHj4oC2vv376OwsBBWVlZ4/PixWHrze6hKu3btoKur2+C2pCGEEEWiwE5JlL14gmcMPrv3ABwHvtKsCM/zAMdh7p49EmWK4O3tDaFQiJs3b2Ls2LHo0KEDOnfujDlz5khcUty+fTs8PDxga2tbY2AAACEhIYiOjq7ykmtQUBA++ugjeHh4VLm1ioeHB6ZNmwZ7e3vY2NhgypQpyM/PR2JiotT6mzZtwtWrV3H58mV4e3vj3XffhY2NDT788EPcuHEDHTt2FNU9cOAALCwsMH36dInLygkJCbCxsUHXrl1hamoKHR2dGscLlO95aGlpiS1btqBTp04YOXIkVq5cCV9fX5kum1YlKCgI+vr6Ytu1JCcnY968efDx8cH27dvh5OQEKysr9OvXD7/++iuWLVsmqpudnY3jx49j/fr1uHDhgliQOWPGDPj5+cHV1RXt2rWDnZ0dfvjhB9jb2+P06dMAgJ9++gmDBg3C0qVL0bFjR7i7u2P27NnYsGFDtf0+ePAgPD094erqiv3794vyX716hQ0bNmDjxo1wd3dHu3bt0K1bN3h7e4suGVfH0dERjx8/RlxcnMyfISGENEYqv+lQnZMytzsByrc8SfH/VWzBROIvW5W21UlFatWqFduyZYtoYUNSUhI7ceIEc3Z2lqgbHx/P/vzzT4l8adudAGATJ05khYWFrE2bNqLjK26wB8q3wnB0dGQ5OTnM399f4vhRo0ax69evs+zsbJabm8uuXbvGBg4cWO14dHR02FdffcXu3LnD8vPzWUZGBgsLC2Pu7u4SN8Pu2bNH6tYnOjo67OjRoywzM1Niu5NRo0aJ1c3KyhLbnkWW7U42btwo1kZAQADbtWtXteM6ePAg+/777yXyBw0axM6dO8devHjB8vPz2f3799m6detYq1atxOoNGDCAMcbY+PHjxfK7devG9u7dyx4/fswKCgpYeno6Cw4OZiNGjBCrV7HdSVFREUtISGALFiyQ+G28+d0CYLa2towxxuLj46WOac6cOSwmJoYVFRWxtLQ0du7cOebo6MiA/xZPSFtgExgYyL766qtqPy9aPEFjpvHSeBvimOVZPAFVfxjqnpQd2AFgFi1bioK6oV27MsHrlZQNIenq6rKsrCw2ZswYhbVZ06pYZacLFy5Uuy+eMlJtx/zOO++wZ8+eMQMDg1od/8knn7D09HSmra3dKMZbVbK3t2fPnj1jzZo1q7YeBXY0ZhovjbchjplWxWqYNy+3hsXGKuXyq7w4joO5uTm+++47vHz5EqdOnVJ1l+rMxMQEH330EQYOHCj3EzZUJSoqCosWLULbtm3lOk5XVxd2dnZYvHgxtm3bJnVvwcakdevWcHd3R05Ojqq7QgghSiXbQzBJg5ZfXAzu449U3Q0xVlZWSEhIQFJSEqZOnYqysjJVd6nO/vnnH5iYmOCrr77CgwcPVN0dme3du1fuYxYtWoRvvvkGoaGhWLt2rRJ6Vb8uXryo6i4QQki9oMCOKEViYmKNW1s0NjY2NqruQr1ZuXIlVq5cqepuEEJIgyfgAOfODE7WKcjvzBB8H+BVeOGMAjsl8fb2xqxZsxrcA9EJIYQQohhjegGb3QFLUx5AJBb2A5JeAD57gQDp+6QrHUUdSuLn5wd7e3t6LiUhhBCihsb0Ao7NBSyai+dbmJTnj+mlil5RYKdSFXuU1WZTW0KI4lU8naQu+wcSQtSfgCufqat4LVYmAMCATVMky+oDBXYqlJubCwDVPu+TEFJ/Kp7UkZGRoeKeEEIaMsfOgKVp1YGbQABYmZXXq290j50KZWdnIzY2FhMmTEBmZiaKiopq1Y6hoSGMjY0V27kGTNPGC2jemOt7vFpaWujcuTMmTJiA4OBg5Ofn19u5CSGNj7mxYuspEgV2KsQYw++//441a9Zg6dKltW5HV1cXBQUFCuxZw6Zp4wU0b8yqGm9wcLBMzzQmhGi21GzF1lMkCuxULD09Hd7e3mjVqlWt7rUTCoVwcnJCaGioWuwVVxNNGy+geWNWxXgZY8jIyKCZOkKITMJiy1e/Wpi8vqeuEp4HkjPL69U3CuwagNLSUiQnJ9fqWKFQiIyMDCQmJmrMP/qaNF5A88asaeMlhDQ+PCvf0uTY3PIg7s3gjucBcMDcfarZz44WTxBCCCGEyCkgHBi/CUjJEs9PzizPV9U+djRjpyS0QTEhhBCi3gLCgZMRgIudAG4uXREYfAfB93mVPnmCog4loQ2KCSGEEPXHMyAklkNoogVCYjmVBnUABXaEEEIIIWqDAjtCCCGEEDVBgR0hhBBCiJqgwI4QQgghRE1QYEcIIYQQoiYosCOEEEIIURMU2BFCCCGEqAkK7GpgYGCAmzdvIjIyEnfv3sVnn32m6i4RQgghhEhFT56oQX5+PpydnVFQUABdXV1ERUXh+PHjyMzMVHXXCCGEEELE0IxdDXieR0FBAQCgadOmEAqF4DhOxb0ihBBCCJGk9oGdo6MjTp06hZSUFDDGMGrUKIk6Xl5eiIuLQ0FBAcLDw9G/f3+xciMjI9y+fRvJyclYt24dXrx4UV/dJ4QQ0qgJwJgzUlKcwJgzNOCfXaJiav8L09fXx507dzB79myp5RMmTMCmTZuwZs0adO/eHWFhYTh37hwsLS1FdV6+fIlu3brBxsYGn3zyCVq2bFlf3SeEENJojQGQAJ6/jMjIheD5ywASXucTtcEBzJohpXkKmDUDVHxRT+3vsQsMDERgYGCV5fPnz8eOHTuwY8cOAMC8efMwdOhQeHl5YcmSJWJ1nz9/jrt378LJyQnHjh2T2p6Ojg6aNGkiem9oaAgAEAqFEAqFdR2OBKFQCIFAoJS2GyJNGy+geWOm8ao/TRgzY6PB80eklFgAOAaBYAI47kQ996p+aML3W4F1ZuCH8OCNeEQiEmgH4CUguCAAF6u4CE+ez1LtA7vqaGtro2fPnvjhhx/E8i9cuIB+/foBAFq2bImCggLk5ubC0NAQTk5O8Pf3r7LNxYsXY8WKFRL5rq6uonv1FEkoFKJHjx7gOA5lZWUKb7+h0bTxApo3Zhqv+lP3MTMmwOXL/igs5CA5fSMAwENHxx+DBpWA43gV9FC51P37rZBqnIqI9hGSBc0AfjyPno97wjzbXCHn0tXVlbmuRgd2ZmZm0NLSQlpamlh+WloaWrVqBQBo06YNduzYAY7jwHEcfvnlF9y7d6/KNteuXQtfX1/Re0NDQ6SkpODixYvIzc1V+BiEQiEYYwgMDFTrP6AKmjZeQPPGTONVf+o+ZsacwfMtqqkhQGFhC5w79wocF1Jv/aov6v79AgDjGPg5r4PyyrE7B4ABES0iIPifAByr+8xdxdU/WWh0YFeBMSb2nuM4Ud4///yD7t27y9xWcXExiouL4e3tjVmzZkEgKL+NsaysTGk/cJ7nldp+Q6Np4wU0b8w0XvWn3mOW7T5snm8JQB3Hr+7fL4C2AIyqKefKy/k2fPltlXUkz+eo9osnqpORkYHS0lLR7FyFli1bSsziycvPzw/29vZwcHCoUzuEEEIam1QF1yMNjoGC6ymQTDN2c+bMkbvhXbt24dWrV3IfV59KSkoQEREBV1dXnDhxQpTv6uqKkydPqq5jhBBCGrEwAEkoXyghbf6EB5D8uh5plGQNb1QQBskU2G3atAnJyckyTwVaWlrizz//bBCBnb6+Pjp06CB6b2Njg65duyIzMxNJSUnw9fXFvn37EB4ejuvXr2PGjBmwsrLCr7/+WqfzVr4USwghRFPwAHwAHHv9WlCpDADmvvGaNDqJAF4CaAbp25swADmv69Uzme+x69WrF9LT02Wqm5OTU+sOKVqvXr0QHBwser9x40YAwO7du+Hp6YkjR47A1NQU3377LczNzREVFYVhw4bhyZMndTqvn58f/Pz8YGho2KA+D0IIIfUhAMB4AJsBWL6Rn4zyoC5ABX0iCsMABAKY8Po1V6kMr8sZ6p1Mgd3KlSvlmn37/vvvG8yzVENCQmp8BJi/v3+1W5gQQggh8gsAcBICgQu6dnXDnTuB4Plg0EydmogBcASAG8QXUuSgPKiLUUWnZAzsVq1aJVejlfeF00R0KZYQQgjAg+NCYGGhh7t3Q0BBnZqJARALCGwE6Nq/K+5cuQM+nlfJTF0FuaOOpk2bim2UZ2VlBR8fH7i6uiq0Y40drYolhBBCNAADuEQOFpkW4BI5lQZ1QC0Cu5MnT8Ld3R0AYGRkhBs3bmDBggU4efIkPv/8c4V3kBBCCCGEyEbuwK5Hjx4ICytfoj1+/HikpaXB2toa7u7u+OKLLxTewcbK29sb0dHRuHnzpqq7QgghhBANIfeTJ/T09ESPxhoyZAiOHz8Oxhj+/vtvWFtby9SGjo4OHBwc0LZtW+jp6SE9PR2RkZFISEiQtzsNFq2KJYQQQkh9kzuwe/ToEUaPHo2AgAAMHTpUtH1Iy5Ytawxg3nvvPcyZMwejR4+Gjo4OsrOzUVBQgObNm6NJkyaIi4vDb7/9hl9//bVB7IFHCCGEENKYyH0pdtWqVdiwYQMSEhJw48YN/P333wDKZ+8iIyOrPO7EiRM4duwYUlJSMHToUBgaGsLMzAyWlpbQ19dHx44dsXr1agwaNAgPHjzA4MGDaz8qQgghhBANJPeM3R9//AErKyuYm5vjzp07ovzLly8jIKDqDRcvXLiADz/8ECUlJVLL4+PjER8fj71798LOzg6tW7eWt2sNCm13QgghhJD6JndgBwBpaWlIS0sTy7t161a1x/j5+QEABAIB+vfvj7t37yI7O1tq3fv37+P+/fu16VqDQffYEUIIIaS+yR3YNWnSBHPmzMGAAQPQsmVLiRmpnj17Vns8z/M4f/48bG1tqwzsCCGEEEKI/OQO7Hbu3AlXV1ccO3YMN2/eBGPy78R37949tGvXTq1WwRJCCCGEqJrcgd3w4cMxbNgwXLt2rdYn/eabb7BhwwYsW7YMERERyMvLEyuv2E6FEEIIIYTITu7ALiUlpc6BV2BgIADg1KlTYjN+HMeBMQYtrVrd+teg0OIJQgghmkbAAc6dGZysU5DfmSH4PsCr+BFbmkbuCGrBggX48ccf8fnnn+PJkye1OumAAQNqdVxjQosnCCGEaJIxvYDN7oClKQ8gEgv7AUkvAJ+9QEC4qnunOeQO7MLDw9G0aVPExcUhPz9fYvsSU1PTGtsIDQ2V97SEEEIIaaDG9AKOzZXMtzApzx+/iYK7+iJ3YHfo0CFYWFhgyZIlSEtLq9XiCQDo378/Zs6ciXbt2uHDDz/E06dPMXnyZMTHx+Pq1au1apMQQggh9UvAlc/UVbwWKxMAPA9smgKcjKDLsvVB7sCuX79+eO+993D37t1an3Ts2LHYt28fDhw4gB49eqBJkyYAAENDQyxZsgTDhw+vdduEEEIIqT+OnQHLai7WCQSAlVl5vZCY+uuXppL7zv7Y2Fjo6urW6aRLly7F559/jhkzZohdyr127Rp69OhRp7YJIYQQUn/MjRVbj9SN3IHd119/jZ9++gnOzs5o3rw5DA0NxZIsOnXqJPU+u5ycHBgbG8vbpQbJ29sb0dHRuHnzpqq7QgghhChNarZi65G6kftSbMVWJZcvXxbLl2erktTUVHTo0AGJiYli+f3790dcXJy8XWqQaFUsIYQQTRAWW7761cKk/LJrZTwPJGeW1yPKJ3dgp4itSrZt24bNmzdj2rRpYIyhdevWeO+997BhwwasWrWqzu0TQgghpH7wrHxLk2Nzy4O4N4M7ngfAAXP30cKJ+iJ3YKeIrUrWr18PIyMjBAUFoWnTpggNDUVRURE2bNiArVu31rl9QgghhNSfgPDyLU3K97H7Lz85szyoo61O6o9MgV2XLl0QFRUl89YmdnZ2+Pfff1FWVlZlnaVLl2LNmjWws7ODQCDA/fv3JR4tRgghhJDGISC8fEsTFzsB3Fy6IjD4DoLv8zRTV89kWjwRGRkp08bDFa5fvw4rK6sqy3fs2AEDAwMUFBQgIiICt27dQl5eHvT09LBjxw6Zz0MIIYSQhoNnQEgsh9BEC4TEchTUqYBMM3Ycx+G7775Dfn6+TI3q6OhUW+7h4YGvv/4ar169EsvX1dWFu7s7Pv30U5nOQwghhBCiSgKOg7OtLZzatkW+rS2Co6PB1/LhDYogU2AXGhqKTp06ydzo9evXUVBQIJFvaGgIjuPAcRwMDQ1RWFgoKhMKhRg2bBieP38u83kIIYQQQlRlTG8HbJ7qAUtTMwDAwv6OSHqRAZ/dexBwSzXbnckU2CliJSwAZGdngzEGxhgePHggUc4Yw/LlyxVyLkIIIYQQZRnT2wHH5s+XyLcwaY5j8+djvK+vSoI7uVfF1sWAAQPAcRz++usvjBs3DpmZmaKy4uJiJCYmIjU1tT67pDTe3t6YNWsWBNI29SGEEEJIoyXgOGye6iF6LVYmEIDneWzy8MDJ8Fv1flm2XgO7iq1SbGxs8OTJE6l1LC0tkZSUVJ/dUgraoJgQQghRT462tqLLr9IIBAJYmZnB0dYWIffv12PPavFIMUWIi4tDixYtJPKbN2+O+Ph4FfSIEEIIIUQ25jI+/lTWeoqkksCOqzRtWcHAwEBsQQUhhBBCSEOTmp2t0HqKVK+XYn/66ScA5YskVq1aJbZ9ilAoRJ8+fXD79u367BIhhBBCiFzCYmKQ9CIDFibNpd5Lz/M8kjMzERYTU+99q9WM3eTJk3HlyhWkpKSINiL28fHByJEjqz2ue/fu6N69OziOQ5cuXUTvu3fvjs6dO+POnTuYOnVqbbpECCGEEFIveMbgs3sPwHHgeV68jOcBjsPcPXtUsp+d3DN2n3/+OVatWoVNmzbhm2++gVAoBFC+lcncuXNx6tSpKo8dOHAgAGDnzp3w8fFBbm5uLbtNCCGEEKI6AbduYryvr9g+dgCQnJmJuXsa+D52b5ozZw6mT5+OkydP4uuvvxblh4eHY8OGDTK1MW3aNABA+/bt0b59e4SGhtK9dYQQQghpVAJu3cTJ8FtwsbeHm4sLAoODVf7kCbkvxdrY2CAyMlIiv6ioCPr6+jK1YWJigkuXLuHBgwc4e/YszM3NAQDbt2+XOTgkhBBCCFE1njGExMQgNCEBITExKg3qgFoEdvHx8ejWrZtE/v/93//hvox7tWzatAklJSWwsrISW0Bx+PBhuLm5ydslpWrTpg2CgoIQHR2NO3fuYPz48aruEiGEEEKIVHJfil2/fj22bt2Kpk2bguM4ODg4YOLEiVi8eDE+++wzmdoYMmQIhg4dipSUFLH8hw8fwtraWt4uKVVpaSnmzp2LO3fuoEWLFvjnn39w9uxZsYCUEEIIIaQhkDuw2717N7S0tLBu3Tro6enh4MGDSElJgY+PDw4fPixTG/r6+lIDIzMzMxQVFcnbJaV69uwZnj17BgBIT09HZmYmmjdvToEdIYQQQhqcWm13sn37drRt2xYtW7ZEq1atYGVlhZ07d8p8fGhoKNzd3UXvGWPgOA4LFy5EUFBQbbpUJUdHR5w6dQopKSlgjGHUqFESdby8vBAXF4eCggKEh4ejf//+Utvq2bMnBAIBkpOTFdpHQgghhBBFqNMGxS9evKjVcQsXLkRwcDB69eoFHR0drFu3Dvb29mjevDnef//9unRJgr6+Pu7cuYNdu3bh+PHjEuUTJkzApk2b4O3tjatXr2LmzJk4d+4c7OzsxJ5Z27x5c+zdu1fmy82EEEKkEYAxZ6SkOIGxfADBAPgajiGNBgcwa4aU5ilg1gyIB6DatQQaR+7Arnnz5li1ahUGDBiAli1bSuy4bGpqWmMbMTExePfdd+Hl5YWysjLo6+vj+PHj2Lp1q+iyp6IEBgYiMDCwyvL58+djx44d2LFjBwBg3rx5GDp0KLy8vLBkyRIAgI6ODgICArB27Vpcv3692vPp6OigSZMmoveGhoYAyp+sUbHnnyIJhUIIBAKltN0Qadp4Ac0bM41XfTE2Gjy/ETxvifLNFRYCSIJAMA8cd0K1nVMiTfmOWWcGfggP3ohHJCKBdgBeAoILAnCx0h8lqi6U/R3L067cgd3+/fvRvn177NixA2lpaWC1XNablpaGFStW1OpYRdHW1kbPnj3xww8/iOVfuHAB/fr1E73fvXs3/vrrL+zfv7/GNhcvXix1XK6urigoKKhznysTCoXo0aMHOI5DWVmZwttvaDRtvIDmjZnGq55SU99DRMRiKSUW4Pmj6NlzLczNq/8P58ZKE77jVONURLSPkCxoBvDjefR83BPm2eb137F6ouzvWFdXV+a6cgd2/fv3R//+/XH37l15D5VKT08PH330EXR1dXHhwgU8evRIIe3KwszMDFpaWkhLSxPLT0tLQ6tWrQAA77//Pj766CPcvXsXo0ePBgBMmTIFUVFRUttcu3YtfH19Re8NDQ2RkpKCixcvKuVJG0KhEIwxBAYGqu3/YbxJ08YLaN6YabzqhzEBeN4P5dfkKt/aLQDAIyJiMgSCFeA49bssq+7fMeMY+Dmvv7fKE3McAAZEtIiA4H8CcEw9Z+6U/R1XXP2ThdyBXWxsrFyR45ssLS2xb98+9OjRA3///Tc+/fRTXLx4ER07dgQAFBQU4P/+7/8QFhZWq/Zrq/KsI8dxoryrV6/KNQVaXFyM4uJieHt7Y9asWaJL1WVlZUr7g+Z5XqntNzSaNl5A88ZM41U3/QFYVlMuAGAFnu8HIKR+ulTP1Po7bgvAqJpyrrycb8MDCfXSI5VQ5ncsT5tyr4r19vbGmjVr4OTkhObNm8PQ0FAsVWfDhg3Q0dGBl5cX8vPzcf78eTx8+BDm5uZ46623cPbs2Xq9PJuRkYHS0lLR7FyFli1bSsziycvPzw/29vZwcHCoUzuEENL4yXoJTn0v1ak1AwXXI3Ui94xddnY2jIyM8Ndff4nlV8xyaWlV3aSTkxNGjhyJW7du4ezZs8jIyMC0adPw/PlzAMDq1atx+fJlebtUayUlJYiIiICrqytOnDghynd1dcXJkyfrrR+EEKLeUhVcjzQorxRcj9SJ3IHdgQMHUFxcjE8++UTuxRMtWrRAYmIiACArKwv5+fliM2PPnj2DiYmJvF2qlr6+Pjp06CB6b2Njg65duyIzMxNJSUnw9fXFvn37EB4ejuvXr2PGjBmwsrLCr7/+WqfzVr4USwghmisMQBIAC0i/UMQDSH5djzQ6iQBeAmgGyXvsgPJbK3Ne1yNKJ3dg984776B79+548OCB3Cd78941QPLeNmXo1asXgoODRe83btwIoHylq6enJ44cOQJTU1N8++23MDc3R1RUFIYNG4YnT57U6bx+fn7w8/ODoaEhcnJy6tQWIYQ0bjwAHwDHXr8WVCoDgLmg/ewaKQYgEMCE16+5SmV4XU772dULuQO78PBwWFpa1iqwA4BVq1aJHselo6ODb775Bi9fvgRQvkJW0UJCQsBx1a/C8ff3h7+/v8LPTQghpEIAgPEANkN8IUUyyoO6ABX0iShMDIAjANwgvpAiB+VBXYwqOqWZ5A7stmzZgs2bN2P9+vW4d+8eSkpKxMrv3btX5bGhoaHo1KmT6P21a9fQrl07iTrqgC7FEkJIZQEATkIgcEHXrm64cycQPB8MmqlTEzEAYgGBjQBd+3fFnSt3wMfzNFNXz+QO7A4fPgwAYs+GrXjWa02LJwYMGFCLLjZOdCmWEEKk4cFxIbCw0MPduyGgoE7NMIBL5GBhZ4G7iXcpqFMBuQM7GxsbZfSDEEIIIYTUkdyBXV0XFWgKuhRLCCGEkPomU2D3wQcf4Ny5cygtLcUHH3xQbd3Tp08rpGONHV2KJYQQQkh9kymwO3HiBFq1aoX09HSxjXwrq+keO0IIIYQQojwyRWFCoRCWlpai14QQQgghpOGR+Qaw+Ph4tGjRQiEnHTp0KN5//33Re29vb0RGRuLAgQMwNjZWyDlUzdvbG9HR0bh586aqu0IIIYQQDSFzYFfTJr/yWL9+PZo1awag/EkWP/30E86ePYt27drB19dXYedRJT8/P9jb28PBwUHVXSGEEEKIhlDJDXE2Nja4f/8+AGDcuHH4888/8c0336B79+44e/asKrpECCGEENLoyRXYffbZZ3j16lW1dbZs2VJjO8XFxaLHhw0ePBh79+4FAGRmZopm8gghhBBCiHzkCuw+//xzlJWVVVnOGJMpsLty5Qp8fX1x9epVODg44KOPPgIAvP3220hOTpanS4QQQggh5DW5ArtevXohPT29ziedPXs2/Pz8MH78eHh5eeHp06cAgP/7v/9DYGBgndtvCGiDYkIIIQIOcO7M4GSdgvzODMH3AZ4es0WUSObAjjHF/RKTkpKkbnQ8f/58hZ1D1WiDYkII0WxjegGb3QFLUx5AJBb2A5JeAD57gYBwVfeOqCuZA7u6roo1NDREbm6u6HV1KuoRQgghjdGYXsCxuZL5Fibl+eM3UXBHlEPmwG7lypU1LpyoTlZWFszNzZGeno7s7GypM4Acx9HTKwghhDRqAq58pq7itViZAOB5YNMU4GQEXZYliidzBLVq1ao6nWjgwIHIzMwEAAwYMKBObRFCCCENlWNnwNK06nKBALAyK68XElN//SKaod6mxkJDQ6W+JoQQQtSJubFi6xEiD1qyqST0SDFCCNFMqdmKrUeIPCiwUxJ6pBghhGimsNjy1a88L72c54EnGeX1CFG0WgV2QqEQgwYNwowZM2BgYAAAMDc3h76+vkI7RwghhDQ2PCvf0gScZHDH8+X5c/fRwgmiHHIHdlZWVrh37x5OnjyJrVu3okWLFgCARYsWYcOGDTK30bRpU3lPTQghhDQKAeHlW5qkZInnJ2fSVidEueQO7DZv3ozw8HCYmJigoKBAlB8QEIBBgwbVeDzHcXj48CHatGkj76kJIYSQRiMgHGjrAwz6XoD117pj0PcC2MyloI4ol9yrYvv374/3338fJSUlYvmJiYmwsLCo8XjGGB4+fAhTU1M8evRI3tMTQgghjQbPgJBYDno2FgiJvUuXX4nSyT1jJxAIIBQKJfLbtGkj8xMjFi1ahPXr18Pe3l7e0xNCCCGkgRJwHJxtbeHUti2cbW0hqONTq4j85J6xu3jxIubOnYuZM2cCKJ+B09fXx8qVK3H27FmZ2ti/fz/09PRw584dFBcXi13SBQBT02p2diSEEEJIgzOmtwM2T/WApakZAGBhf0ckvciAz+49CLhFW3/VF7kDu3nz5iEoKAjR0dFo2rQpDh48iI4dOyIjIwMTJ06UqY25c+fKe1pCCCGENFBjejvg2Pz5EvkWJs1xbP58jPf1peCunsgd2KWmpqJbt26YOHEievToAYFAgB07duDAgQMoLCyUqY29e/fK3dHGxtvbG7NmzYJAQFsFEkIIUV8CjsPmqR6i12JlAgF4nscmDw+cDL8FXspz4oli1eqRYoWFhdi1axd27dpV6xO3a9cOnp6eaN++PXx8fJCeno6hQ4ciKSkJ9+/fr3W7DYWfnx/8/PxgaGiInJwcVXeHEEIIUQpHW1vR5VdpBAIBrMzM4GhrixA1+Pe9oZM7sPvggw+k5jPGUFhYiEePHiEhIaHaNpycnHDu3DlcvXoVTk5O+Oabb5Ceno53330Xn332GT788EN5u0UIIYQQFTA3NlZoPVI3cgd2J06cAGMMXKXp1oo8xhiuXLmC0aNHIzs7W2obP/zwA5YuXYqNGzeKzWYFBQXBx8dH3i4RQgghREVSq/i3vrb1SN3IfQOYq6srbt26BVdXVxgZGcHIyAiurq64efMmRowYAScnJ5iamlb7FIouXbogICBAIj89PZ1WxBJCCCGNSFhMDJJeZICv4uG4PM/jSUYGwmJi6rlnmqlWT56YP38+/vrrL7x69QqvXr3CX3/9hS+//BLr16/HtWvXMHfuXLi6ulbZRnZ2NszNzSXyu3fvjpSUFHm7RAghhBAV4RmDz+49AMdJBHc8zwMch7l79tDCiXoid2DXvn17qYsBcnJy0K5dOwDAw4cPYWZW9Y2UBw8exI8//oi33noLjDEIBAL069cPGzZs0IgVs4QQQog6Cbh1E+N9fZGSlSmWn5yZSVud1DO577GLiIjA+vXr4e7ujoyMDACAmZkZ1q1bh1u3bgEAOnbsiOTk5Crb+Oabb7B7926kpKSA4zjcv38fQqEQBw8exOrVq2s5FEIIIYSoSsCtmzgZfgsu9vZwc3FBYHAwgqOjaaaunskd2H366ac4efIkkpOTkZSUBMYYrKysEBcXh1GjRgEADAwM8N1331XZRmlpKSZPnoxvv/0W3bt3h0AgQGRkJD07lhBCCGnEeMYQEhMDvbZtERITQ0GdCsgd2D148AC2trYYOnQo3n77bXAch9jYWFy8eBHs9Rd48uTJatvo0KEDHj16hLi4OMTFxdWu5/Xo+PHjcHFxweXLl2krFkIIIYQ0WLXaoBgAzp8/j/Pnz9fq2H///RepqakICQlBSEgIgoOD8eDBg9p2Rel+/vln7Ny5Ex4eHqruCiGEEEJIlWoV2Onp6cHZ2RlWVlbQ0dERK9uyZUuNx5ubm2PgwIFwdnbGvHnz4O/vj7S0NFGQt23bttp0S2mCg4Ph7Oys6m4QQgghhFRL7lWx3bp1w6NHj3Do0CH88ssvWLp0KTZt2oTvv/8ec+fOlamN58+f43//+x+8vLxga2uLt99+G+fPn8e4ceOwdetWebtULUdHR5w6dQopKSlgjInuA3yTl5cX4uLiUFBQgPDwcPTv31+hfSCEEEIIqQ9yB3YbN27E6dOn0bx5cxQUFKBv376wtrZGREQEvvzyS5na0NfXx9ChQ7F27Vpcu3YN9+7dw7vvvostW7Zg7Nixcg+ipnPduXMHs2fPllo+YcIEbNq0CWvWrEH37t0RFhaGc+fOwdLSUqH9IIQQQghRNrkvxXbr1g0zZ84Ez/MoKytDkyZNEB8fj0WLFmHPnj1SnyhRWVZWFjIzM7Fv3z6sXr0aV65ckbo3niIEBgYiMDCwyvL58+djx44d2LFjBwBg3rx5GDp0KLy8vLBkyRK5z6ejo4MmTZqI3hsaGgIAhEIhhEKh3O3VRCgUQiAQKKXthkjTxgto3phpvOpP08ZM41V/yh6zPO3KHdiVlJSIVr+mpaXBysoKsbGxePnyJaysrGRq48yZM+jfvz+mTJkCS0tLWFlZITg4GLGxsfJ2p060tbXRs2dP/PDDD2L5Fy5cQL9+/WrV5uLFi7FixQqJfFdXVxQUFNSqzeoIhUL06NEDHMehrKxM4e03NJo2XkDzxqxJ42VMgOzsLtDR6Y7evbvA2PgeOE76Y5nUiUZ9x2DINsqGTkcd9DbsDeOXxuDA1XxgI6ZJ328FZY9ZV1dX5rpyB3aRkZHo1asXHj58iKCgIKxatQpmZmaYMmUK7t27J1MbY8aMAVD+zFhnZ2cMGjQIK1asAGMMwcHBmDhxorzdqhUzMzNoaWkhLS1NLD8tLQ2tWrUSvQ8MDESPHj2gr6+PpKQkjBkzBuHh4VLbXLt2LXx9fUXvDQ0NkZKSgosXLyI3N1fhYxAKhWCMITAwUCP+gDRtvIDmjVlTxsvYaPD8RgAVt32MA5AEgWAeOO6E6jpWDzTmO+7MwA/hAaPXGR0BvAQEFwTgYtU3uNOU7/dNyh5zxdU/Wcgd2C1ZskR0gmXLlmHPnj3w9/fHo0eP4OnpKVdb9+7dg1AohLa2Npo0aQI3NzeF32MnC1ZpA0WO48Ty3NzcZG6ruLgYxcXFEvllZWVK+4FXXBbXlD8gTRsvoHljVv/xjgFwREq+BXj+CIDxAGq+raUxU/vv2BblX2NlzQB+PF/+9cfUc5/qkdp/v1Ioc8zytCl3YJeeno7o6GgAQEZGBoYPHy5vE5g7dy5cXFzg6OgIQ0ND3L59GyEhIdi2bRtCQ0Plbq+2MjIyUFpaKjY7BwAtW7aUmMWTl7e3N2bNmgWBQO71KYQQtSYAsPmN15XLeACbAJx8/Zo0OhwAtzdeVy5jr8tjX78mRIHkijo4jsPDhw/Rpk2bOp100qRJePjwIdzd3WFqagoHBwcsXLgQZ86cUcrlyqqUlJQgIiICrq6uYvmurq64du1andr28/ODvb09HBwc6tQOIUTdOKL88mtV//crAGD1uh5plKxRfvm1qqut3Oty63rrEdEgcs3YMcbw8OFDmJqa1um5rr179671sfLS19dHhw4dRO9tbGzQtWtXZGZmIikpCb6+vti3bx/Cw8Nx/fp1zJgxA1ZWVvj111/rdF6asSOESGeu4HqkwTFQcD1C5CD3pdhFixZh/fr18PLyEl2SrQ0jIyN8+umnsLW1BWMMMTEx2LFjh8K3PenVqxeCg4NF7zdu3AgA2L17Nzw9PXHkyBGYmpri22+/hbm5OaKiojBs2DA8efKkTuf18/ODn58fDA0NlbaVCyGkMUpVcD3S4LxScD1C5CB3YLd//37o6enhzp07KC4ultjCw9TUtMY2evbsifPnz6OgoAA3b94Ex3GYN28elixZgiFDhiAyMlLeblUpJCQEHFf96iN/f3/4+/sr7JyEEFK1MABJACwg/XIsDyD5dT3SKCUCeAmgGaRfjmUAcl7XI0TB5A7sZH1sWHU2btyIU6dOYfr06aKVHkKhENu3b8emTZvU4rmsdCmWECIdD8AHwLHXrwWVygBgLmjhRCPGAAQCmPD6NVepDK/LaeEEUQK5A7u9e/fW+aS9evUSC+qA8qW869atq3J/uMaGLsUSQqoWgPK9MDbjv33sgPKZurlQ961ONEIMyrc0ccN/+9gB5TN1gVDrrU6IatVqOqldu3b47rvvcPDgQbRo0QIAMHToUNjZ2cl0fE5OjtSnVFhaWtbrqlhCCFGdAABtIRAMQvfu6yEQDAJgAwrq1EgMgE2AYK8A3eO6Q7BXUL6TDQV1RInkDuycnJxw79499OnTB2PHjoWBQfmynnfffRcrV66UqY3Dhw9jx44dmDBhAtq0aQMLCwt89NFH2L59Ow4dOiRvlxokb29vREdH4+bNm6ruCiGkweLBcSGwsAgFx4WALr+qIQZwiRwsMi3AJXJ0+ZUondyXYn/44QcsXboUGzduFLvEGBQUBB8fH5na+PLLL8EYw969e6GlVd6FkpIS+Pv74+uvv5a3Sw0SXYolhBBCSH2TO7Dr0qULPvnkE4n89PR0mVbEAuVB3Ny5c7F48WK0b98eHMfh0aNHKCkpgbm5OZKSkuTtFiGEEEKIxpP7Umx2djbMzSU3zuzevTtSUlLkaqugoABRUVG4d+8eCgoKYGdnh/j4eHm7RAghhBBCUIvA7uDBg/jxxx/x1ltvgTEGgUCAfv36YcOGDQpZMasu6B47QgghhNQ3uQO7b775Bk+ePEFKSgoMDAxw//59hIaG4tq1a1i9erUy+tgo0bNiCSGEEFLf5L7HrrS0FJMnT8a3336L7t27QyAQIDIysk7PjiWEEEIIIXUnd2Dn5OSE0NBQxMXFIS4uTq5ju3TpUm15p06d5O0OIYQQQgh5Te7A7uLFi3j27BkOHjyI/fv3Izo6WuZjb9++DcaY1Ge3VuQzRpv8EEIIIYTUhtyBXevWrfHxxx9j4sSJWLRoEaKiorB//34cPHiwxlWxNjY2te5oY0PPiiWEEEkCDnDuzOBknYL8zgzB9wGe/nueEIWRO7B78eIFtm7diq1bt6Jt27b45JNP4O7uju+//x6hoaEYNGhQlcc+efKkTp1tTGiDYkIIETemF7DZHbA05QFEYmE/IOkF4LMXCFCPx4QTonJ1mk5KSEjADz/8gK+//hr37t2Ds7NzlXUtLS2rLJOmdevWdekaIYSQBmRML+DYXMCiuXi+hUl5/phequgVIeqn1oFdv379sHXrVqSmpuLgwYOIjo7GiBEjqqx/69Yt/Pbbb+jdu3eVdZo1a4bPPvsM9+7dw9ixY2vbNUIIIQ2IgCufqat4LVYmAMCATVMkywgh8pP7UuyaNWswceJEtG7dGpcuXcLcuXNx4sQJFBQUVHucra0tlixZgsDAQJSUlCA8PBxPnz5FYWEhTExMYGdnB3t7e4SHh2PhwoUIDAys9aAIIYQ0HI6dActqnjgpEABWZuX1QmLqr1+EqCO5AzsXFxds2LABhw8fxosXL8TKunbtijt37kg9LisrCwsXLsTSpUsxbNgwODo6om3bttDV1UVGRgYOHDiA8+fPy7XKlhBCSMNnbqzYeoSQqskd2L3//vti75s1a4ZJkybhs88+Q9euXaGlVX2TRUVFCAgIQEBAgLynblRoVSwhhJRLzVZsPUJI1WoddQwYMAD79u1Damoq5syZg7Nnz6JXL7r7tQI9UowQQsqFxZavfuV56eU8DzzJKK9HCKkbuWbsLCwsMHXqVEybNg36+vo4cuQItLW1MW7cOMTE0I0RhBBCJPGsfEuTY3PLg7g3L2TwPAAOmLuP9rMjRBFknrE7c+YM7t+/Dzs7O8yZMwetW7fGF198ocy+EUIIURMB4cD4TUBKlnh+cmZ5Pu1jR4hiyDxjN2TIEPz888/w9/fHo0ePlNknQgghaiggHDgZAbjYCeDm0hWBwXcQfJ9X65k6AcfB2dYWTm3bIt/WFsHR0eDp0ZlEiWQO7BwdHTFt2jSEh4cjNjYW+/btw+HDh5XZN0IIIWqGZ0BILAc9GwuExN5V66BuTG8HbJ7qAUtTMwDAwv6OSHqRAZ/dexBw66aKe0fUlcyXYv/++2/MmDED5ubm2LZtGz7++GOkpKRAIBDA1dUVBgYGyuwnIYQQ0miM6e2AY/Pnw6K5+AZ+FibNcWz+fIzpTQvriHLIvSq2oKAAu3btgqOjI7p06YKffvoJX3/9NZ4/f46TJ08qo4+EEEJIoyHgOGye6iF6LVYmEACMYZOHh0QZIYpQp03WHjx4gK+++gpt2rTBxIkTFdUnQgghpNFytLWFpalZlYGbQCCAlZkZHG1t67lnRBMoZPdcnudx8uRJjBo1ShHNqQVvb29ER0fj5k26j4IQQjSJubGxQusRIg96LIKS0AbFhBCimVKzsxVajxB5UGBHCCGEKFBYTAySXmSAr+JRGzzP40lGBsJoY3+iBBTYEUIIIQrEMwaf3XsAjpMI7nieBzgOc/fsof3siFJQYEcIIYQoWMCtmxjv64uUrEyx/OTMTIz39aV97IjSyPWsWEIIIYTIJuDWTZwMvwUXe3u4ubggMDiYnjxBlI4CO0IIIURJeMYQEhMDvbZtERITQ0EdUTq6FEsIIYQQoiYosCOEEEIIURMU2Mlg+PDhiI2NxYMHD/Dpp5+qujuEEEIIIVLRPXY1EAqF8PX1xYABA5CTk4N//vkHx48fR1ZWlqq7RgghhBAihmbsauDg4IDo6Gg8ffoUr169wtmzZzF06FBVd4sQQgghRILaB3aOjo44deoUUlJSwBiT+jxbLy8vxMXFoaCgAOHh4ejfv7+orHXr1khJSRG9T05OhoWFRb30nRBCCCFEHmof2Onr6+POnTuYPXu21PIJEyZg06ZNWLNmDbp3746wsDCcO3cOlpaWAACO4ySOYbRcnRBCCCENkNrfYxcYGIjAwMAqy+fPn48dO3Zgx44dAIB58+Zh6NCh8PLywpIlS5CSkiI2Q9emTRvcuHGjyvZ0dHTQpEkT0XtDQ0MA5ffqCYXCug5HglAohEAgUErbDZGmjRfQvDHTeNWfpo2Zxqv+lD1medpV+8CuOtra2ujZsyd++OEHsfwLFy6gX79+AICbN2/inXfeQevWrZGTk4Nhw4Zh1apVVba5ePFirFixQiLf1dUVBQUFCu0/UP5l9+jRAxzHoaysTOHtNzSaNl5As8bMmADZ2V2go9MdvXt3gbHxPXCc9AepqwtN+n4raNqYabzqT9lj1tXVlbmuRgd2ZmZm0NLSQlpamlh+WloaWrVqBQAoKyvDggULEBQUBIFAgHXr1iEzM1NacwCAtWvXwtfXV/Te0NAQKSkpuHjxInJzcxU+BqFQCMYYAgMDNeIPSNPGC2jOmBkbDZ7fCMDydc44AEkQCOaB406ormNKpinf75s0bcw0XvWn7DFXXP2ThUYHdhUq3zPHcZxY3unTp3H69GmZ2iouLkZxcbFEfllZmdJ+4DzPK7X9hkbTxgtowpjHADgiJd8CPH8EwHgAAfXbpXqk/t/vGziAWTMkGSehtE0p+Hge0IDbljXqO4bmjRdQ7pjlaVOjA7uMjAyUlpaKZucqtGzZUmIWT17e3t6YNWsWBAK1X59CSB0JAGx+43XlMh7AJgAnX78mjZYtADeAN+IRiUigHYCXAAIBxKi2a4SoC42OOkpKShAREQFXV1exfFdXV1y7dq1Obfv5+cHe3h4ODg51aocQ9eeI8suvVf3fkQCA1et6pNGyBTABQLNK+c1e59vWe48IUUtqP2Onr6+PDh06iN7b2Niga9euyMzMRFJSEnx9fbFv3z6Eh4fj+vXrmDFjBqysrPDrr7/W6bw0Y0eIrMwVXI80OBwAtzdeVy5jr8tjoRGXZQlRJrUP7Hr16oXg4GDR+40bNwIAdu/eDU9PTxw5cgSmpqb49ttvYW5ujqioKAwbNgxPnjyp03n9/Pzg5+cHQ0ND5OTk1KktQtRbqoLrkQbHGoBRNeXc63JrAAn10SFC1JfaB3YhISFSNxl+k7+/P/z9/eupR4QQcWEAkgBYQPrlWB5A8ut6pFEyUHA9QkiV6Dqhknh7eyM6Oho3b95UdVcIaeB4AD5vvK5cBgBzpZSRRuOVgusRQqpEgZ2S0OIJQuQRgPItTVIq5SdD3bc60QiJKF/9WtX9c+x1eWK99YgQtUWBHSGkgQgA0BYCwSB0774eAsEgADagoE4NMJRvaVLxunIZXpfTwglC6owCO0JIA8KD40JgYREKjgsBXX5VIzEo34O68lqynNf5tI8dIQqh9osnVIW2OyGEkEpiAMQCAhsBuvbvijtX7mjMkycIqS8UdSgJ3WNHCCFSMIBL5GCRaQEukaOgjhAFo8COEEIIIURNUGBHCCGEEKImKLBTEtrHjhBCCCH1jQI7JaF77AghhBBS3yiwI4QQQghRExTYEdKgCcCYM1JSnMCYM+hPlhBCSHXoXwkloXvsSN2NAZAAnr+MyMiF4PnLABJe5xNCCCGSKLBTErrHjtTNGADHAFhUyrd4nU/BHSGEEEkU2BHS4AgAbH7jdeUyANgkpYw0NgIOcO7M4GSdAufODAJO1T0ihDR29EgxQhocRwCW1ZQLAFi9rhdSLz0iijemF7DZHbA05QFEYmE/IOkF4LMXCAhXde8IIY0V/Sc/IQ2OuYLrkYZmTC/g2FzAorl4voVJef6YXqroVf0QcBycbW3h1LYtnG1tIeBompIQRaIZO0IanFQF1yMNiYArn6mreC1WJgB4Htg0BTgZAfBq9hzVMb0dsHmqByxNzQAAC/s7IulFBnx270HALVpoRogi0IwdIQ1OGIAkAHwV5TyAJ6/rkcbGsTNgaSoZ1FUQCAArs/J66mRMbwccmz8fFs1NxfItTJrj2Pz5GNObFpoRoggU2ClJ/Wx3oml7nGnKeHkAPm+8rlwGAHOllJHGwNxYsfUaAwHHYfNUD9FrsTKBAGAMmzw86LIsIQqgrv8yqpzytzvRtD3ONG28AQDGA0iplJ/8Oj+g3ntEFCM1W7H1GgNHW1tYmppVGbgJBAJYmZnB0da2nntGiPqhwK5R0rQ9zjRtvBUCALSFQDAI3buvh0AwCIANKKhr3MJiy1e/8lVMuPI88CSjvJ66MDc2Vmg9QkjVKLBrdDRtjzNNG29lPDguBBYWoeC4ENDl18aPZ+VbmoCTDO54vjx/7j71WjiRmp2t0HqEkKqp67+Gaqxij7Oqvro39zhTB5o2XqIJAsKB8ZuAlCzx/OTM8nx128cuLCYGSS8ywFcxTcnzPJ5kZCAsJqaee0aI+qHArtHRtD3ONG28RFMEhANtfYBB3wuw/lp3DPpeAJu56hfUAQDPGHx27wE4TiK443ke4DjM3bMHPFOjaUpCVIQCu0ZH0/Y407TxEk3CMyAklkNoogVCYjm1uvxaWcCtmxjv64uUrEyx/OTMTIz39aV97AhRENqguNGp2OPMAtLjch7lKyfVZY8zTRsvIeor4NZNnAy/BRd7e7i5uCAwOBjB0dE0U0eIAtGMXaOjaXucadp4CVFvPGMIiYlBaEICQmJiKKgjRMEosFMS5W5QrGl7nGnaeAkhhJDaocBOSZS/QbGm7XGmaeMlhBBC5EeBXaOmaXucadp4CSGEEPlQYEcIIYQQoiYosCOEEEIIURMU2BFCCCGEqAkK7AghhBBC1AQFdoQQQgghaoICOxkcP34cmZmZOHr0qKq7QgghhBBSJQrsZPDzzz/D3d1d1d0ghBBCCKkWBXYyCA4ORm5urqq7QQghhBBSrUYf2Dk6OuLUqVNISUkBYwyjRo2SqOPl5YW4uDgUFBQgPDwc/fv3V0FPCSGkEg5g1gwpzVPArBnAqbpDhJDGTkvVHagrfX193LlzB7t27cLx48clyidMmIBNmzbB29sbV69excyZM3Hu3DnY2dkhKSkJABAeHo4mTZpIHDtkyBCkpqYqfQyEEA1kC8AN4I14RCISaAfgJYBAADGq7RohpPFq9IFdYGAgAgMDqyyfP38+duzYgR07dgAA5s2bh6FDh8LLywtLliwBAPTq1ate+koIIQDKg7oJUvKbvc4/AgruCCG10ugDu+poa2ujZ8+e+OGHH8TyL1y4gH79+inlnDo6OmKzf4aGhgAAoVAIoVCo8PMJhUIIBAKltN0Qadp4Ac0bs7qPl3EMvNvr5xxXvvTKAWAA3ADBQwE4pp7XZtX9O66Mxqv+lD1medpV68DOzMwMWlpaSEtLE8tPS0tDq1atZG4nMDAQPXr0gL6+PpKSkjBmzBiEh4dLrbt48WKsWLFCIt/V1RUFBQVy9V8WQqEQPXr0AMdxKCsrU3j7DY2mjRfQvDGr+3gzDDPwt9HfVVfgABgBDh86wCzXrN76VZ/U/TuujMar/pQ9Zl1dXZnrqnVgV4ExJvae4ziJvOq4ubnJXHft2rXw9fUVvTc0NERKSgouXryolJW1QqEQjDEEBgZqxB+Qpo0X0Lwxq/t4eXse6FT+WgAOjnq2MBcaI7UsG2H5MeBR/v9NN6JvQBDd6Ne3SaXu33FlNF71p+wxV1z9k4VaB3YZGRkoLS2VmJ1r2bKlxCyeohQXF6O4uBje3t6YNWsWBILy/2MuKytT2g+c53mltt/QaNp4Ac0bs1qPN6f8f8YYOGDzWx6w1P5vVi6pJAM+aXsQ8OomWA5Tz/G/ptbfsRQ0XvWnzDHL06Z6/ufgayUlJYiIiICrq6tYvqurK65du6bUc/v5+cHe3h4ODg5KPQ8hpJFJBMYIHHDMYj4stEzFiiy0muOYxXyMETgAiSrqHyGkUWv0M3b6+vro0KGD6L2NjQ26du2KzMxMJCUlwdfXF/v27UN4eDiuX7+OGTNmwMrKCr/++qsKe00I0VQCcNj8lkf5a058cYSAE4BnPDa95YGTuCW6LEsIIbJq9IFdr169EBwcLHq/ceNGAMDu3bvh6emJI0eOwNTUFN9++y3Mzc0RFRWFYcOG4cmTJ0rtV+VLsYQQAgCOtrawNKp6UYSAE8DKyAyOtrYIuX+/HntGCFEHjT6wCwkJAcdVvyWAv78//P3966lH5fz8/ODn5wdDQ0Pk5OTU67kJaawEHODcmcHJOgX5nRmC7wO8mk1amRsbK7QeIYS8iaaTlMTb2xvR0dG4efOm0s4h4Dg429rCqW1bONvaSlzWUTeaNl5As8Y8pheQsJnD5SWdsfB9XVxe0hkJmzmMUbP9w1OzsxVajxBC3tToZ+waKmXP2I3p7YDNUz1gaVp+SWdhf0ckvciAz+49CLilvGBSVTRtvIBmjXlML+DYPAdwAg+A++8yZZsWGTg2bw/Gb7yJAOlbRzY6YTExSHqRAQuT5lJv1eB5HsmZmQiLoUdPEELkRzN2jdCY3g44Nn8+LJpXWlFn0hzH5s/HmN7qtRJX08YLaNaYBRzw23QHcIL54CA+Xg7NwQnmY9tnDhCoyWQlzxh8du8BOA48z4uX8TzAcZi7Zw94OfbaJISQChTYNTICjsPmqVWsqBMIAMawycNDbS7Zadp4Ac0bs7MtB7NmHuVP16o8Jk4ADgwtjDzgbKse4wWAgFs3Md7XFylZmWL5yZmZGO/rq3YzsoSQ+kOXYpVEWatiHW1tRZfmpBEIBLAyU58VdZo2XkDzxuxiZyt2+VUCJwBgBhc7WwSpwXgrBNy6iZPht+Bibw83FxcEBgcjODqaZuoIIXVCM3ZKoqwNijVtRZ2mjRfQwDFzxoqt14jwjCEkJgahCQkIiYmhoI4QUmcU2DUymraiTtPGC2jemIOjsxVajxBCNBkFdo1MxYq6yjddV+B5Hk8yMtRmRZ2mjRd4Y8ysijEz9RpzSEwMMnIzwKoYL2M80nMyEKIm4yWEEGWiwE5JlLWPnaatqNO08QLlYz54ZQ84cBLBDmM8OHA4dFV9xswzhhm/7QGqGC/AYebv6jNeQghRJgrslERZ99gBmreiTtPGK+CAT967Ccb7goP4mDlkgpX5YmLfm2qz/QdQ/h2P8/VFcqb4eJNeZGKcGn7HhBCiLLQqtpEKuHUTpyNuYY6bHQY4dEXQzTvYEngfper2/KXXNGm8jp0BS1MAuAnwtwDYli8cYNkAYiDgGKzMyuuFqNHVSVolSgghdUeBXSM1phew2Z3B0jQaQDQ+6AjMcwN89kJtduh/kyaN19z4zXcMwP3y/6m2nnqoWCWq17YtrRIlhJBaoEuxjdCYXsCxuYBFc/F8C5PyfHV7tqamjTc1W7H1CCGEaA4K7JREWYsnBByw2f2/12JlAgAM2DRFsqyx0rTxAkBYLJD0AqhiITB4HniSUV6PEEIIeRMFdkqirMUTFfdfVRXICAQQ3X+lDjRtvADAs/JLzOAkgzu+fJEo5u4rr0cIIYS8iQK7RkbW+6rU5f4rTRtvhYBwYPwmICVLPD85szxf3e4rFOEAZs2Q0jwFzJoBajQTSwgh9YEWTzQymnb/laaN900B4cDJCMDFTgA3l64IDL6D4Pu8+s7U2QJwA3gjHpGIBNoBeAkgEIAarf4lhBBlohm7RkbT7r/StPFWxjMgJJZDaKIFQmI59Q7qJgBoVim/2et823rvESGENEoU2DUymnb/laaNVyNxANzeeF25DK/L6bIsIYTUiAI7JVHWqlhA8+6/0rTxahxrAEaoOnDjXpdb11uPCCGk0aJ77JTEz88Pfn5+MDQ0RE5OjsLbDwgHTv4DOLtw6NPLCjfCnyAkmFV5ybKx07TxilReTPD/7d17UJT1Ggfw7+6ihLDacQwUFGXCbKWgxCguio5yonLSyrSTFdndxrxRmabYSa1BOyVNUY6ZB6bLmOdoZUfTnPASaYoQyC0KFgQUwljiEiiX5/xh7LRcBGUv7Pt+PzO/Gfd9333f5/u+7s7Du78FI7r8ZcVOzcPK2xERqRgbO2dlANqigZQhghSUAJMBBEG5E83VlhdQz5cJ6q28HRGRivGjWGektonmassLqCtzCS42rN3diZQ/15fYrSIiIqfFxs7ZqG2iudryAurLLLh4F7L93x3X4c/1SvsImojIBtjYORu1TTRXW15AnZnzAHwGoON01No/lyvpo2ciIhviHDtno7aJ5mrLC6gzM3CxecsHtH5aBEUEIfO7TLQZ23injojoMvCOnbNR20RzteUF1Jm5nQCaEg18qn2gKdGwqSMiukxs7JyN2iaaqy0voM7MRERkFWzsbMRmv6BYbRPN1ZYXUGdmIiKyCjZ2NpKYmIiAgACEhIRYf+dqm2iutryAOjMTEVGf8csTzkptE83VlhdQZ2YiIuoT3rFzZmqbaK62vIA6MxMR0RVjY0dERESkEGzsiIiIiBSCjR0RERGRQrCxIyIiIlIINnZERERECsHGjoiIiEgh2NgRERERKQQbOyIiIiKFYGNHREREpBD8k2J2otfrbbJfnU4HNzc36PV6tLa22uQY/Yna8gLqy8y8yqe2zMyrfLbOfDk9BBs7G2u/GOXl5Q6uhIiIiJyZXq9HXV3dJbfRgH990ua8vb17vBBXSq/Xo7y8HD4+PjY7Rn+itryA+jIzr/KpLTPzKp89Muv1epw5c6bH7XjHzg56cyH6qq6uTjUvIEB9eQH1ZWZe5VNbZuZVPltm7u1++eUJIiIiIoVgY0dERESkEGzsnNz58+fxyiuv4Pz5844uxS7UlhdQX2bmVT61ZWZe5etPmfnlCSIiIiKF4B07IiIiIoVgY0dERESkEGzsiIiIiBSCjR0RERGRQrCxUwkPDw8cP34cGRkZyMrKwhNPPOHokmxu5MiRSElJQU5ODjIzMzF79mxHl2RzO3fuRHV1NXbs2OHoUmzirrvuQn5+PgoKCvD44487uhy7UPo1/Su1vWbV+L7czs3NDcXFxdi4caOjS7G55uZmZGRkICMjA1u2bLHLMYVD+UOr1Yqbm5sAEDc3NyksLJShQ4c6vC5bjuHDh0tQUJAAkGuuuUZKS0tl0KBBDq/LlmPKlCkyY8YM2bFjh8NrsfbQ6XTy008/ibe3t3h4eEhBQYH87W9/c3hdvKbWG2p7zarxfbl9rFu3TrZv3y4bN250eC22HlVVVXY9Hu/YqURbWxsaGxsBAFdddRV0Oh00Go2Dq7KtiooKZGZmAgCqqqpQXV2NoUOHOrgq2zp48KBi/4RPSEgIcnJycObMGdTX12PPnj24/fbbHV2WzSn5mnakttesGt+XAcDf3x/XX3899uzZ4+hSFImNXT8xadIkfPnllygvL4eIYObMmZ22WbBgAYqKitDY2Ii0tDRERERc1jGGDBmCH3/8EWVlZdiwYQN+++03a5V/ReyRuV1wcDC0Wi3Kysr6WvYVs2fe/qiv+b29vVFeXm5+XFZWBh8fH7vUfqXUds2tmbc/vGZ7Yo28/e19uSfWyPzGG29gxYoV9iq5T6yRd/DgwUhLS8ORI0cwefJkm9fMxq6fcHd3R2ZmJhYuXNjl+jlz5mDTpk1Yv349br75Zhw5cgR79+7FqFGjzNukpaXh1KlTncaIESMAAL///jtuuukm+Pn54cEHH4Snp6ddsnXHHpkBYOjQoUhOTsZTTz1l80yXYq+8/VVf83d1J0NEbFpzX1njmjsTa+XtL6/Znlgjb397X+5JXzPffffdKCgowM8//2zPsq+YNa7xmDFjMHHiRDzzzDNITk6GXq+3ed0O//yZw3KIiMycOdNi2bFjxyQxMdFiWW5urrz22mtXdIzExESZPXu2w7PaOvPAgQPl0KFD8tBDDzk8o72ucWRkZL+fj3Ul+UNDQ2Xnzp3mdZs2bZJ//OMfDs9ij2vuDNfUWnn762vWlte3ffS392VbZH7ttdfk9OnTYjQapaqqSmpqamT16tUOz2Kva7xnzx4JDg62aZ28Y+cEBgwYgODgYOzfv99i+f79+xEWFtarfXh6epp/StDr9Zg8eTJ++uknq9dqLdbIDAD//ve/8e233+Kjjz6ydolWZa28zqo3+Y8fP44bbrgB3t7e8PDwwJ133ol9+/Y5olyrUNs1721eZ3nN9qQ3eZ3tfbknvcm8cuVK+Pr6ws/PD88//zy2bNmCtWvXOqLcPutN3quvvhoDBw4EAPj4+GD8+PEoKiqyaV0uNt07WcWwYcPg4uKCyspKi+WVlZUYPnx4r/YxcuRIbN26FRqNBhqNBu+88w5OnTpli3KtwhqZw8PDMXfuXGRlZWHWrFkAgIcffhjZ2dnWLrfPrJEXAL7++mtMmDAB7u7uKC0txT333IO0tDRrl2t1vcnf2tqK2NhYpKSkQKvVYsOGDaiurnZEuVbR22vurNe0o97kdabXbE96k9fZ3pd7Yq33MWfRm7wGgwGbN29GW1sbRASLFy+GyWSyaV1s7JxIx/lEGo2m13OM0tPTcfPNN9uiLJvqS+bU1FTodDpblGUzfckLANHR0dYuya56yr97927s3r3b3mXZVE+Znf2adnSpvM74mu3JpfI66/tyT3r7PpaUlGSvkmzqUnmPHj2KwMBAu9bDj2KdwLlz59DS0tLpJx5PT89OPykohdoyqy1vR2rMr7bMzHuRUvMC6svcX/OysXMCzc3NOHnyJKKioiyWR0VF4fvvv3dQVbaltsxqy9uRGvOrLTPzXqTUvID6MvfnvA7/pgkHxN3dXYKCgiQoKEhERJYsWSJBQUEyatQoASBz5syR8+fPy/z58+X666+XN998U+rq6sTX19fhtTMz8zI/MzOv8vOqMbOT5nX8ieO4+OsMurJt2zbzNgsWLBCj0ShNTU2SlpYmkyZNcnjdzMy8zM/MzKuOvGrM7Ix5NX/+g4iIiIicHOfYERERESkEGzsiIiIihWBjR0RERKQQbOyIiIiIFIKNHREREZFCsLEjIiIiUgg2dkREREQKwcaOiIiISCHY2BEREREpBBs7IqIOIiMjISIYMmSIo0txuJiYGJhMJpsfZ9u2bdi1a5fNj0OkBg7/W2wcHBzON7Zt2ya7du26rOeIiMycOdPhtf91pKSkyFtvvWWxbMCAAeLl5WWXc9juwoULUlFRIfv375f58+eLRqNx+LkBIFdddZVcc801fd7PU089JT/++KPU19eLyWSS9PR0efHFF83rBw8eLEOGDHF4Xg4OZx8uICJSIBcXF7S0tFzRc5ubm1FZWWnlirq2d+9ezJ8/HzqdDl5eXoiOjkZCQgJmz56Nu+++G62trXapoztNTU1oamrq0z4ee+wxvPnmm1i0aBEOHToEV1dXBAYGYvz48eZtamtr+1oqEf3J4d0lBweH842Od+xSUlIkISFB4uPj5bfffpOzZ8/KmjVrzOuNRqP8ldFoNK+bMWOGpKWlSWNjoxQWFkpcXJzodDrz+nHjxsmRI0eksbFRcnJyZNq0aRZ3/0aPHi0iIvfff7+kpKRIY2OjPProozJ06FD55JNPpLS0VBoaGiQrK0seeOABiwwdjR49WiIjI0VELO4g3XvvvZKdnS1NTU1iNBpl2bJlFufDaDTKihUrZOvWrVJbWyslJSXy5JNPXtY5bB9Tp04VEZHHH3/cvGzUqFHy+eefS11dnfz++++yfft28fT0NK9fs2aNZGRkyPz586WkpETq6uokMTFRtFqtvPDCC3L27FmprKyUlStXWhxr6dKlkpWVJfX19XL69Gl59913xd3d3bw+JiZGTCZTp+M89NBDYjQapaamRj799FPx8PDoNueuXbvkww8/7PW5aL+eHaWkpJi3Dw0NlUOHDskff/whp0+floSEBBk0aJDDXxccHP1gOLwADg4OJxxdNXY1NTUSFxcn/v7+8vDDD0tra6tMnz5dAMiwYcNERCQmJka8vLxk2LBhAkD+/ve/S01NjTzyyCPi5+cn06dPl6KiIomLixMAotFoJC8vT/bt2yeBgYESHh4ux44d67KxKyoqknvuuUfGjBkjI0aMEG9vb4mNjZWgoCDx8/OThQsXSnNzs4SEhAhw8eO/1NRU2bx5s3h5eYmXl5dotdpOjd2ECROkpaVFVq1aJWPHjpWYmBhpaGiQmJgYc36j0Sjnzp2TBQsWyLXXXivLly+XlpYWGTduXK/P4V9HRkaG/O9//zM/PnnypBw+fFgmTJggISEhkpaWZtHorFmzRmpra+Wzzz4Tg8EgM2bMkKamJtm7d68kJCTIddddJ48++qiIiNx6663m5y1evFimTJkiY8aMkalTp0peXp68++675vVdNXa1tbXyn//8RwICAiQiIkLOnDkj69at6zbne++9J7m5ueLr69urc6HVas3Xw8vLS4KCgqSqqkr++c9/CgC54YYbpLa2VhYvXiz+/v4SGhoqJ0+e7LF55OBQyXB4ARwcHE44umrsDh8+bLHNDz/8IK+//rr5cVdz7A4dOiQvvfSSxbJ58+ZJeXm5AJDbb79dLly4YDHnrbs7dosWLeqx7q+++ko2btxoUXfHOXYdG7uPPvpI9u3bZ7FNfHy8ZGdnmx8bjUZJTk622KaiokKefvrpXp/Dv45PP/1UcnJyBIBMnz5dmpubZeTIkeb1BoNBREQmTpwowMWGq76+3uLO2d69e6WoqMhivl5eXp4sX76825pmz54tVVVV5sddNXYdjxMfHy9Hjx7tdp/Dhw+X77//XkRE8vPzZdu2bXL//fdb1NXduXB1dZWjR4/Kl19+ad4+KSlJ3n//fYvtwsPDpaWlRVxdXR3+2uDgcOTgHDsispqsrCyLx2fPnoWnp+clnxMcHIxbbrkFL7/8snmZTqeDm5sb3NzcMG7cOJSWllrMeTt+/HiX+0pLS7N4rNVq8dJLL2Hu3Lnw8fGBq6srXF1d0dDQcFm5DAYDvvjiC4tlqampWLJkCbRaLdra2gB0zl9RUdFj/u5oNBqIiPn4paWlKCsrM6/Py8uDyWSCwWAw5y4uLkZ9fb15m8rKSrS2tpr3077srzVNmTIFK1euxPjx4zF48GC4uLjAzc0NgwYNwh9//NFlbR2P09N1rqioQFhYGAICAhAZGYmwsDAkJSXhiSeeQHR0tEV9HW3duhV6vR5RUVHm7YKDg+Hv74958+ZZnC+dTgc/Pz/k5+d3uz8ipWNjR0RW09zcbPFYRKDVXvq3Kmm1WqxZswY7d+7stK6pqcmiwelJx4YtNjYWS5cuxZIlS3Dq1Ck0NDRg06ZNGDhwYK/2166rGjQaTaftriR/dwwGA4xGY7fH72p5V8e/VE2+vr7Ys2cP3n//faxevRrV1dWIiIjAhx9+iAEDBnRb25XmzMnJQU5ODhITExEeHo7vvvsOkZGROHjwYJfbv/zyy4iOjkZISIhFI6nVarF582a8/fbbnZ5z+vTpHusgUjI2dkRkNxcuXIBOp7NYlp6ejnHjxqGwsLDL5+Tn58PX1xeenp749ddfAQC33HJLr443adIkfPHFF/j4448BXGyExo4di7y8vEvW1FFubi4iIiIsloWFhaGgoMB8t86apk6disDAQLz11lvm4/v6+mLkyJHmu3YGgwFXX321RZbLNXHiRLi4uCA2NtbcIM6ZM6fvAXohNzcXAODu7t7l+nvvvRdxcXG44447UFRUZLEuPT0dAQEB3f6fIVIzNnZEZDfFxcWYNm0aUlNTcf78edTU1ODVV1/FV199hdLSUuzYsQNtbW0IDAzEjTfeiNWrV+Obb75BYWEhkpKS8OKLL0Kv12P9+vUA0OOdvF9++QX33XcfQkNDYTKZsGzZMgwfPtyiGSouLsatt96K0aNHo76+HtXV1Z32869//QsnTpzAqlWrsH37doSGhmLhwoV49tln+3xOXF1d4eXlZfHrTlasWIHdu3cjOTkZAHDgwAFkZWXh448/xpIlS+Di4oLExEQcPHgQJ0+evOJjFxYWYsCAAXjuueewe/duhIeH45lnnulzpo4SExNx5swZfPvttygrK8OIESOwatUq/Prrrzh69Gin7QMCApCcnIz4+Hjk5OTAy8sLwMUm3GQyIT4+HseOHcM777yDLVu2oKGhAQaDAVFRUVi0aJHV6ydyJvzLE0RkN7GxsYiKikJpaSkyMjIAAPv378eMGTMQFRWFEydO4NixY1i2bBlKSkoAAG1tbZg1axY8PDxw4sQJfPDBB1i3bh0A9Pj71dauXYv09HTs27cPBw8eREVFBT7//HOLbd544w20trYiNzcX586dg6+vb6f9ZGRkYM6cOXjggQeQnZ2NV199FXFxcUhKSurzObnjjjtQUVGB4uJifP3115g6dSoWLVqEmTNnWtwNnDVrFkwmEw4fPowDBw6gqKgIc+fO7dOxMzMzsXTpUixfvhzZ2dmYN28eVqxY0ddInRw4cAC33XYbduzYgYKCAvz3v/9FU1MTpk2b1mUjPXHiRLi7u2P16tWoqKgwj/aP60+dOoXIyEiMHTsWR44cQUZGBtauXYuzZ89avXYiZ6PBxW9REBE5jbCwMKSmpuLaa6/t9DEdEZGasbEjon5v1qxZqK+vx88//wx/f38kJCTAZDJh0qRJji6NiKhf4Rw7Iur39Ho9NmzYgFGjRuHcuXM4cOAAYmNjHV0WEVG/wzt2RERERArBL08QERERKQQbOyIiIiKFYGNHREREpBBs7IiIiIgUgo0dERERkUKwsSMiIiJSCDZ2RERERArBxo6IiIhIIdjYERERESnE/wFgJCZb3RKKUAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -510,15 +510,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "end_time-1.0e-03: Numba=10.269x; Cython(cryk_ode)=6.316x; Cython(CySolver)=4.597x; NbCy=1.626x; NbCyS=2.234x\n", - "end_time-1.0e-02: Numba=10.356x; Cython(cryk_ode)=6.308x; Cython(CySolver)=4.638x; NbCy=1.642x; NbCyS=2.233x\n", - "end_time-1.0e-01: Numba=14.636x; Cython(cryk_ode)=7.817x; Cython(CySolver)=6.779x; NbCy=1.872x; NbCyS=2.159x\n", - "end_time-1.0e+00: Numba=28.605x; Cython(cryk_ode)=13.384x; Cython(CySolver)=14.547x; NbCy=2.137x; NbCyS=1.966x\n", - "end_time-1.0e+01: Numba=90.358x; Cython(cryk_ode)=28.422x; Cython(CySolver)=115.414x; NbCy=3.179x; NbCyS=0.783x\n", - "end_time-1.0e+02: Numba=113.148x; Cython(cryk_ode)=27.252x; Cython(CySolver)=311.789x; NbCy=4.152x; NbCyS=0.363x\n", - "end_time-1.0e+03: Numba=116.315x; Cython(cryk_ode)=26.986x; Cython(CySolver)=419.783x; NbCy=4.310x; NbCyS=0.277x\n", - "end_time-1.0e+04: Numba=99.076x; Cython(cryk_ode)=26.626x; Cython(CySolver)=442.357x; NbCy=3.721x; NbCyS=0.224x\n", - "end_time-1.0e+05: Numba=94.681x; Cython(cryk_ode)=33.062x; Cython(CySolver)=443.274x; NbCy=2.864x; NbCyS=0.214x\n" + "end_time-1.0e-03: Numba=10.426x; Cython(cryk_ode)=6.495x; Cython(CySolver)=4.096x; NbCy=1.605x; NbCyS=2.546x\n", + "end_time-1.0e-02: Numba=10.618x; Cython(cryk_ode)=6.471x; Cython(CySolver)=4.158x; NbCy=1.641x; NbCyS=2.554x\n", + "end_time-1.0e-01: Numba=14.987x; Cython(cryk_ode)=8.106x; Cython(CySolver)=6.118x; NbCy=1.849x; NbCyS=2.449x\n", + "end_time-1.0e+00: Numba=28.806x; Cython(cryk_ode)=13.781x; Cython(CySolver)=13.899x; NbCy=2.090x; NbCyS=2.073x\n", + "end_time-1.0e+01: Numba=88.286x; Cython(cryk_ode)=27.966x; Cython(CySolver)=108.279x; NbCy=3.157x; NbCyS=0.815x\n", + "end_time-1.0e+02: Numba=118.196x; Cython(cryk_ode)=26.798x; Cython(CySolver)=315.621x; NbCy=4.411x; NbCyS=0.374x\n", + "end_time-1.0e+03: Numba=112.056x; Cython(cryk_ode)=28.214x; Cython(CySolver)=447.151x; NbCy=3.972x; NbCyS=0.251x\n", + "end_time-1.0e+04: Numba=95.941x; Cython(cryk_ode)=26.812x; Cython(CySolver)=458.845x; NbCy=3.578x; NbCyS=0.209x\n", + "end_time-1.0e+05: Numba=99.605x; Cython(cryk_ode)=33.748x; Cython(CySolver)=474.228x; NbCy=2.951x; NbCyS=0.210x\n" ] } ], diff --git a/Benchmarks/CyRK_CySolver.pdf b/Benchmarks/CyRK_CySolver.pdf index 31bf3d5033b8a8d28e9690eee17a42c6ffc1ca61..8c4baf2d65bc62bb9bace190da9def99a5a694f8 100644 GIT binary patch delta 19 acmcbRb0KF#zcHJksfn3^#pbETyO{t|;Rj&= delta 19 acmcbRb0KF#zcHJEg`ts=+2*OnyO{t|y9ZnV diff --git a/Benchmarks/CyRK_SciPy_Compare_predprey_v0-7-0a6.png b/Benchmarks/CyRK_SciPy_Compare_predprey_v0-7-0a6.png new file mode 100644 index 0000000000000000000000000000000000000000..b0529d6dac0daba59beaa77cb4b92cbe0cd371d5 GIT binary patch literal 40705 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 literal 0 HcmV?d00001 diff --git a/Benchmarks/CyRK_cyrk_ode.pdf b/Benchmarks/CyRK_cyrk_ode.pdf index 31bf3d5033b8a8d28e9690eee17a42c6ffc1ca61..2019657131445116a064e6074bf516410eb8a7a2 100644 GIT binary patch delta 19 acmcbRb0KF#zcHJksfn3^`R1v{yO{t|+Xr9( delta 19 acmcbRb0KF#zcHJEg`ts=+2*OnyO{t|y9ZnV diff --git a/Benchmarks/CyRK_numba.pdf b/Benchmarks/CyRK_numba.pdf index 556a94b05717a13ac99887ebbe068289ba088513..6e40e4875d45988d0f546961615f3d655d032038 100644 GIT binary patch delta 19 acmdm#vngjop)s4Gsfn3^`Q~!t-An*XhX&{X delta 19 acmdm#vngjop)s3*g`ts=+2(TN-An*XX9nZ| diff --git a/Benchmarks/SciPy.pdf b/Benchmarks/SciPy.pdf index 0a8d726b15456a56599bec6d11086c62058c20d6..f345d398311a6c770a9873a7a85e244fba183a77 100644 GIT binary patch delta 18 Zcmdm#vngjop)sqWsfnrS<}%|wOaMl(2DAVG delta 18 Zcmdm#vngjop)sq0g`tt*<}%|wOaMlF2CM)8 diff --git a/CyRK/cy/cysolver.pyx b/CyRK/cy/cysolver.pyx index 61ff874..6227167 100644 --- a/CyRK/cy/cysolver.pyx +++ b/CyRK/cy/cysolver.pyx @@ -228,11 +228,11 @@ cdef class CySolver: (double, double) t_span, const double[::1] y0, tuple args = None, - unsigned char rk_method = 1, double rtol = 1.e-3, double atol = 1.e-6, double[::1] rtols = None, double[::1] atols = None, + unsigned char rk_method = 1, double max_step = MAX_STEP, double first_step = 0., Py_ssize_t max_num_steps = 0, diff --git a/Performance/cyrk_performance-DOP853.csv b/Performance/cyrk_performance-DOP853.csv index 99d390e..80edced 100644 --- a/Performance/cyrk_performance-DOP853.csv +++ b/Performance/cyrk_performance-DOP853.csv @@ -13,3 +13,4 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 19:01:55, 1.1085, 0.0280, 0.1259, 0.0038, 0.1928, 0.0068, 10.5592, 0.1295, 0.7260, 0.0161, 1.9403, 0.1159, 0.5095, 0.0229, 0.0981, 0.0039, 0.1154, 0.0031, 5.1162, 0.2334, 0.4771, 0.0345, 0.9215, 0.0410, 1.5993, 0.0191, 0.1972, 0.0056, 0.3029, 0.0043, 21.7690, 0.3977, 1.8171, 0.0565, 3.9987, 0.0936, 1.9748, 0.1240, 0.2101, 0.0042, 0.5470, 0.0321, 25.2882, 0.2939, 1.9768, 0.0476, 7.2745, 0.1060 0.7.0.dev7, 27/08/2023 01:13:33, 1.0344, 0.0015, 0.0966, 0.0002, 0.1670, 0.0005, 10.2972, 0.0150, 0.5214, 0.0006, 1.5239, 0.0135, 0.4878, 0.0017, 0.0772, 0.0001, 0.0991, 0.0005, 4.5979, 0.0411, 0.3331, 0.0003, 0.8044, 0.0036, 1.4902, 0.0025, 0.1425, 0.0003, 0.2587, 0.0039, 20.1369, 0.0811, 1.2903, 0.0119, 3.3198, 0.0182, 1.7607, 0.0080, 0.1521, 0.0002, 0.4969, 0.0036, 24.0781, 0.1145, 1.3241, 0.0021, 6.6531, 0.0005 0.7.0a1, 27/08/2023 01:23:48, 1.0094, 0.0030, 0.0955, 0.0002, 0.1660, 0.0003, 10.0515, 0.1271, 0.5152, 0.0038, 1.6281, 0.1728, 0.4916, 0.0152, 0.0772, 0.0003, 0.1002, 0.0004, 4.5604, 0.0592, 0.3398, 0.0057, 0.7978, 0.0034, 1.5030, 0.0145, 0.1439, 0.0036, 0.2601, 0.0077, 20.6049, 0.3711, 1.2741, 0.0087, 3.3549, 0.0756, 1.7522, 0.0166, 0.1538, 0.0012, 0.4985, 0.0037, 23.7129, 0.0492, 1.3207, 0.0154, 6.6875, 0.0549 +0.7.0a6, 28/08/2023 15:54:30, 1.0249, 0.0023, 0.1009, 0.0001, 0.1745, 0.0003, 10.0953, 0.0187, 0.5086, 0.0004, 1.6063, 0.0157, 0.4882, 0.0005, 0.0831, 0.0001, 0.1019, 0.0039, 4.6144, 0.0984, 0.3383, 0.0006, 0.7983, 0.0067, 1.4988, 0.0178, 0.1394, 0.0006, 0.2681, 0.0004, 20.1680, 0.0990, 1.2133, 0.0049, 3.4577, 0.0201, 1.7582, 0.0131, 0.1490, 0.0031, 0.5073, 0.0059, 24.8074, 0.4213, 1.2755, 0.0208, 6.5607, 0.0177 diff --git a/Performance/cyrk_performance-RK23.csv b/Performance/cyrk_performance-RK23.csv index 28256c1..4b63830 100644 --- a/Performance/cyrk_performance-RK23.csv +++ b/Performance/cyrk_performance-RK23.csv @@ -13,3 +13,4 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 18:59:35, 58.6676, 93.5182, 0.3900, 0.0126, 0.9633, 0.0266, 45.5975, 1.1797, 3.1403, 0.0138, 10.5973, 0.2912, 55.7416, 91.5188, 0.3192, 0.0082, 0.6436, 0.0150, 28.7644, 0.9448, 2.6510, 0.0471, 6.7978, 0.2528, 56.1384, 88.3532, 0.4677, 0.0044, 1.0281, 0.0150, 85.8300, 3.9745, 7.5308, 0.1815, 23.5595, 0.4995, 58.8041, 91.3233, 0.5090, 0.0065, 1386.0843, 2397.3464, 106.3878, 1.1220, 8.5241, 0.3540, 38.2326, 0.7181 0.7.0.dev7, 27/08/2023 01:11:14, 4.8113, 0.1391, 0.3115, 0.0004, 0.8552, 0.0036, 45.1068, 0.6880, 2.6107, 0.0100, 9.8739, 0.6100, 2.8775, 0.0067, 0.2522, 0.0009, 0.6097, 0.0030, 28.9372, 0.8937, 2.0232, 0.0052, 6.1300, 0.1653, 4.9043, 0.0304, 0.3955, 0.0062, 0.9908, 0.0052, 82.1498, 1.0284, 5.9321, 0.0159, 20.9002, 0.4163, 5.8702, 0.1321, 0.4181, 0.0009, 1183.0684, 2046.0616, 100.8534, 0.6015, 8.7392, 0.1784, 35.7355, 0.3580 0.7.0a1, 27/08/2023 01:21:31, 4.5590, 0.0620, 0.3149, 0.0066, 0.8748, 0.0195, 43.6144, 0.1123, 2.6232, 0.0313, 9.2402, 0.1733, 2.8469, 0.0036, 0.2520, 0.0032, 0.6048, 0.0044, 27.8211, 0.1951, 2.0357, 0.0363, 6.3501, 0.0787, 4.8713, 0.0372, 0.3889, 0.0021, 1.0088, 0.0276, 81.8194, 0.1423, 5.8619, 0.0337, 20.3528, 0.1749, 5.7740, 0.0594, 0.4174, 0.0006, 1139.2328, 1970.1475, 100.0822, 0.6212, 7.8009, 0.0816, 36.2940, 1.2287 +0.7.0a6, 28/08/2023 15:52:13, 4.5831, 0.0535, 0.3040, 0.0014, 0.8701, 0.0066, 44.4575, 0.1312, 2.5780, 0.2150, 10.0452, 0.5722, 2.8942, 0.0355, 0.2581, 0.0066, 0.6178, 0.0021, 28.1092, 0.4533, 2.0150, 0.0244, 6.2654, 0.0942, 4.8829, 0.0073, 0.3678, 0.0006, 1.0106, 0.0144, 83.3562, 0.5923, 5.4591, 0.0302, 22.3938, 0.7174, 5.8152, 0.0915, 0.3946, 0.0008, 1267.8939, 2192.9856, 102.3280, 1.0445, 7.0396, 0.2830, 36.1755, 0.3725 diff --git a/Performance/cyrk_performance-RK45.csv b/Performance/cyrk_performance-RK45.csv index b5330b5..0c3206f 100644 --- a/Performance/cyrk_performance-RK45.csv +++ b/Performance/cyrk_performance-RK45.csv @@ -13,3 +13,4 @@ CyRK Version, Run-on Date, cython (avg), cython (std),CySolver (avg),CySolver (s 0.6.0a4, 27/07/2023 19:01:00, 1.3026, 0.0252, 0.1270, 0.0003, 0.2370, 0.0077, 13.1688, 0.2770, 0.7357, 0.0104, 2.0835, 0.0676, 0.9441, 0.0522, 0.1292, 0.0056, 0.1934, 0.0100, 8.5366, 0.0426, 0.7844, 0.0494, 1.6277, 0.0193, 1.7297, 0.0254, 0.1885, 0.0038, 0.3590, 0.0067, 25.4444, 0.1438, 2.2064, 0.1480, 5.1500, 0.1446, 2.1667, 0.1251, 0.2131, 0.0095, 0.6540, 0.0405, 32.0478, 1.1447, 2.0710, 0.0607, 9.6978, 0.4326 0.7.0.dev7, 27/08/2023 01:12:37, 1.2641, 0.0062, 0.1031, 0.0019, 0.2173, 0.0053, 12.2412, 0.0395, 0.5690, 0.0008, 1.9169, 0.0142, 0.8811, 0.0057, 0.0958, 0.0004, 0.1712, 0.0007, 8.4969, 0.0834, 0.5321, 0.0026, 1.4975, 0.0028, 1.6713, 0.0148, 0.1467, 0.0011, 0.3058, 0.0012, 26.5646, 1.9359, 1.5104, 0.0006, 4.2413, 0.0166, 2.0245, 0.0408, 0.1609, 0.0097, 0.5685, 0.0021, 29.3066, 0.1643, 1.5506, 0.0036, 8.2832, 0.0310 0.7.0a1, 27/08/2023 01:22:52, 1.2283, 0.0057, 0.1010, 0.0001, 0.2117, 0.0010, 11.9199, 0.0385, 0.5796, 0.0084, 1.8945, 0.0104, 0.8679, 0.0094, 0.0958, 0.0005, 0.1726, 0.0033, 8.2955, 0.0659, 0.5338, 0.0010, 1.4996, 0.0135, 1.6907, 0.0290, 0.1458, 0.0004, 0.3058, 0.0036, 24.5503, 0.1658, 1.5368, 0.0370, 4.3002, 0.1004, 2.0103, 0.0434, 0.1557, 0.0013, 0.5757, 0.0059, 28.7147, 0.0734, 1.5439, 0.0018, 8.2652, 0.0295 +0.7.0a6, 28/08/2023 15:53:37, 1.2422, 0.0017, 0.1071, 0.0001, 0.2161, 0.0008, 12.0481, 0.0702, 0.5705, 0.0113, 2.0538, 0.0396, 0.8788, 0.0042, 0.1046, 0.0002, 0.1716, 0.0003, 8.3498, 0.0205, 0.5435, 0.0008, 1.4974, 0.0019, 1.6924, 0.0167, 0.1459, 0.0001, 0.3222, 0.0085, 24.6399, 0.0578, 1.3955, 0.0234, 4.2863, 0.0472, 1.9800, 0.0062, 0.1529, 0.0005, 0.5698, 0.0008, 29.2582, 0.4323, 1.4362, 0.0020, 8.3727, 0.1087 diff --git a/Performance/performance.py b/Performance/performance.py index e06621b..a6143f7 100644 --- a/Performance/performance.py +++ b/Performance/performance.py @@ -115,21 +115,21 @@ def run_performance(integration_method_name): if 'extraout' in diffeq_name.lower(): cy_timer = timeit.Timer( - lambda: cyrk_ode(cy_diffeq, time_span, y0, args_, RTOL, ATOL, rk_method=int_method, + lambda: cyrk_ode(cy_diffeq, time_span, y0, args=args_, rtol=RTOL, atol=ATOL, rk_method=int_method, capture_extra=True, num_extra=3)) nb_timer = timeit.Timer( - lambda: nbrk_ode(nb_diffeq, time_span, y0, args_, RTOL, ATOL, rk_method=int_method, + lambda: nbrk_ode(nb_diffeq, time_span, y0, args=args_, rtol=RTOL, atol=ATOL, rk_method=int_method, capture_extra=True)) cysolver_timer = timeit.Timer( - lambda: CySolverClass(time_span, y0, args_, RTOL, ATOL, rk_method=int_method, capture_extra=True, num_extra=3, auto_solve=True)) + lambda: CySolverClass(time_span, y0, args=args_, rtol=RTOL, atol=ATOL, rk_method=int_method, capture_extra=True, num_extra=3, auto_solve=True)) else: - cy_timer = timeit.Timer(lambda: cyrk_ode(cy_diffeq, time_span, y0, args_, RTOL, ATOL, rk_method=int_method)) - nb_timer = timeit.Timer(lambda: nbrk_ode(nb_diffeq, time_span, y0, args_, RTOL, ATOL, rk_method=int_method)) - cysolver_timer = timeit.Timer(lambda: CySolverClass(time_span, y0, args_, RTOL, ATOL, rk_method=int_method, auto_solve=True)) + cy_timer = timeit.Timer(lambda: cyrk_ode(cy_diffeq, time_span, y0, args=args_, rtol=RTOL, atol=ATOL, rk_method=int_method)) + nb_timer = timeit.Timer(lambda: nbrk_ode(nb_diffeq, time_span, y0, args=args_, rtol=RTOL, atol=ATOL, rk_method=int_method)) + cysolver_timer = timeit.Timer(lambda: CySolverClass(time_span, y0, args=args_, rtol=RTOL, atol=ATOL, rk_method=int_method, auto_solve=True)) # Run the numba function once to make sure everything is compiled. print('\t\tPrecompiling numba') - _ = nbrk_ode(nb_diffeq, time_span, y0, args_, RTOL, ATOL, rk_method=int_method) + _ = nbrk_ode(nb_diffeq, time_span, y0, args_, rtol=RTOL, atol=ATOL, rk_method=int_method) # Cython print('\t\t\tWorking on cyrk_ode.', end='') diff --git a/README.md b/README.md index 723c0a7..24db332 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,11 @@ functionality of [scipy's solve_ivp](https://docs.scipy.org/doc/scipy/reference/ Currently, CyRK's [numba](https://numba.discourse.group/) (njit-safe) implementation is **10-100x faster** than scipy's solve_ivp function. The [cython](https://cython.org/) `cyrk_ode` function that works with python (or numba) functions is **5-40x faster** than scipy. -The [cython](https://cython.org/) `CySolver` class that works with cython-based cdef classes is **5-430x faster** than scipy. +The [cython](https://cython.org/) `CySolver` class that works with cython-based cdef classes is **5-500x faster** than scipy. An additional benefit of the two cython implementations is that they are pre-compiled. This avoids most of the start-up performance hit experienced by just-in-time compilers like numba. -CyRK Performance +CyRK Performance ## Installation @@ -190,9 +190,9 @@ MyCyRKDiffeqInst = MyCyRKDiffeq(time_span, initial_conds, args=(0.01, 0.02), rk_ # Once complete, you can access the results via... MyCyRKDiffeqInst.success # True / False MyCyRKDiffeqInst.message # Note about integration -MyCyRKDiffeqInst.t # Time domain -MyCyRKDiffeqInst.y # y dependent variables -MyCyRKDiffeqInst.extra # Extra output that was captured during integration. +MyCyRKDiffeqInst.t # Time domain +MyCyRKDiffeqInst.y # y dependent variables +MyCyRKDiffeqInst.extra # Extra output that was captured during integration. # See Documentation/Extra Output.md for more information on `extra` ``` diff --git a/pyproject.toml b/pyproject.toml index 229a237..1abbd2d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name='CyRK' -version = '0.7.0a6' +version = '0.7.0' description='Runge-Kutta ODE Integrator Implemented in Cython and Numba.' authors= [ {name = 'Joe P. Renaud', email = 'joe.p.renaud@gmail.com'}