{"id":23485,"library":"cyrk","title":"CyRK","description":"CyRK is a Python package providing fast Runge-Kutta ODE integrators implemented in Cython and Numba. Version 0.17.1 supports Python 3.9–3.14 and offers drop-in replacements for scipy.integrate.solve_ivp with improved performance via C++ backends and optional numba acceleration. It has a moderate release cadence, roughly monthly.","status":"active","version":"0.17.1","language":"python","source_language":"en","source_url":"https://github.com/jrenaud90/CyRK","tags":["ode","runge-kutta","numerical-integration","cython","numba","scientific-computing"],"install":[{"cmd":"pip install cyrk","lang":"bash","label":"latest stable"}],"dependencies":[],"imports":[{"note":"The package import is case-sensitive 'CyRK', not 'cyrk'.","wrong":"from cyrk import cysolve_ivp","symbol":"cysolve_ivp","correct":"from CyRK import cysolve_ivp"},{"note":"Same casing issue. 'CyRK' uses capital letters.","wrong":"from cyrk import pysolve_ivp","symbol":"pysolve_ivp","correct":"from CyRK import pysolve_ivp"},{"note":"WrapCySolverResult is exported at package level, not a submodule.","wrong":"from CyRK.cy_solver import WrapCySolverResult","symbol":"WrapCySolverResult","correct":"from CyRK import WrapCySolverResult"}],"quickstart":{"code":"import numpy as np\nfrom CyRK import cysolve_ivp\n\ndef diffeq(t, y):\n    return np.array([-0.5 * y[0]])\n\nt_span = (0.0, 10.0)\ny0 = np.array([1.0])\nresult = cysolve_ivp(diffeq, t_span, y0, method='RK45', rtol=1e-6, atol=1e-8)\nprint(result.success, result.t[-1], result.y[0, -1])","lang":"python","description":"Basic usage of cysolve_ivp to solve a simple ODE. Note the case-sensitive import."},"warnings":[{"fix":"Use from CyRK import ...","message":"Package import is case-sensitive: import CyRK not cyrk. Wrong casing raises ImportError.","severity":"gotcha","affected_versions":"all"},{"fix":"Use only methods like 'RK45', 'RK23', 'DOP853' (strings) supported by CyRK.","message":"CyRK uses its own solver classes and does not accept scipy OdeSolvers as input. Passing a scipy solver object will fail.","severity":"gotcha","affected_versions":"all"},{"fix":"Update to v0.15+; if you used optional fields, access them as regular attributes now.","message":"In v0.15.0, std::optional was removed from integrator configs. Code relying on accessing optional fields directly may break.","severity":"breaking","affected_versions":"<0.15.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use `from CyRK import cysolve_ivp` or `import CyRK`.","cause":"Incorrect import casing: the package is installed as 'cyrk' but the Python module is 'CyRK'.","error":"ModuleNotFoundError: No module named 'cyrk'"},{"fix":"Use one of the supported methods: 'RK23', 'RK45', 'DOP853', 'RKF45', 'RKCK45'. Check CyRK documentation for full list.","cause":"Passing an invalid method name to cysolve_ivp. CyRK supports a limited set of methods.","error":"ValueError: Unknown solver method 'RK45'. Supported methods: ..."},{"fix":"Call `result.setup_for_reuse()` before reusing, or simply create a new result object.","cause":"Using the reuse functionality without properly resetting the result object between runs.","error":"TypeError: 'NoneType' object is not callable"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}