Skip to main content

Runge-Kutta ODE Integrator Implemented in Cython and Numba.

Project description

CyRK

DOI Python Version 3.8-3.11 Code Coverage
Windows Tests MacOS Tests Ubuntu Tests

CyRK Version 0.8.0 Alpha

Runge-Kutta ODE Integrator Implemented in Cython and Numba

CyRK provides fast integration tools to solve systems of ODEs using an adaptive time stepping scheme. CyRK can accept differential equations that are written in pure Python, njited numba, or cython-based cdef classes. These kinds of functions are generally easier to implement than pure c functions. Using CyRK can speed up development time while not making a huge sacrifice when it comes to performance.

The purpose of this package is to provide some functionality of scipy's solve_ivp with greatly improved performance.

Currently, CyRK's numba (njit-safe) implementation is 10-120+x faster than scipy's solve_ivp function. The cython cyrk_ode function that works with python (or numba) functions is 20-40+x faster than scipy. The cython CySolver class that works with cython-based cdef classes is 30-500+x 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 Graphic

Installation

CyRK has been tested on Python 3.8--3.11; Windows, Ubuntu, and MacOS.

To install simply open a terminal and call:

pip install CyRK

If not installing from a wheel, CyRK will attempt to install Cython and Numpy in order to compile the source code. After everything has been compiled, cython will be uninstalled and CyRK's runtime dependencies (see the pyproject.toml file for the latest list) will be installed instead.

A new installation of CyRK can be tested quickly by running the following from a python console.

from CyRK import test_cyrk, test_nbrk, test_cysolver
test_cyrk()
# Should see "CyRK's cyrk_ode was tested successfully."
test_nbrk()
# Should see "CyRK's nbrk_ode was tested successfully."
test_cysolver()
# Should see "CyRK's CySolver was tested successfully."

Troubleshooting Installation and Runtime Problems

Please report 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 environment with the following packages conda install numpy scipy cython llvm-openmp. See more discussion here and the steps taken here.
  • 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.

Development and Testing Dependencies

If you intend to work on CyRK's code base you will want to install the following dependencies in order to run CyRK's test suite and experimental notebooks.

conda install pytest scipy matplotlib jupyter

conda install can be replaced with pip install if you prefer.

Using CyRK

CyRK's API is similar to SciPy's solve_ivp function. A differential equation can be defined in python such as:

import numpy as np

# For even more speed up you can use numba's njit to compile the diffeq
from numba import njit
@njit
def diffeq_nb(t, y):
    dy = np.empty_like(y)
    dy[0] = (1. - 0.01 * y[1]) * y[0]
    dy[1] = (0.02 * y[0] - 1.) * y[1]
    return dy

initial_conds = np.asarray((20., 20.), dtype=np.complex128, order='C')
time_span = (0., 50.)
rtol = 1.0e-7
atol = 1.0e-8

Numba-based nbrk_ode

The system of ODEs can then be solved using CyRK's numba solver by,

from CyRK import nbrk_ode
time_domain, y_results, success, message = \
    nbrk_ode(diffeq_nb, time_span, initial_conds, rk_method=1, rtol=rtol, atol=atol)

Cython-based cyrk_ode

To call the cython version of the integrator you need to slightly edit the differential equation so that it does not return the derivative. Instead, the output is passed as an input argument (a np.ndarray) to the function.

@njit
def diffeq_cy(t, y, dy):
    dy[0] = (1. - 0.01 * y[1]) * y[0]
    dy[1] = (0.02 * y[0] - 1.) * y[1]

Alternatively, you can use CyRK's conversion helper functions to automatically convert between numba/scipy and cyrk function calls.

from CyRK import nb2cy, cy2nb

@njit
def diffeq_nb(t, y):
    dy = np.empty_like(y)
    dy[0] = (1. - 0.01 * y[1]) * y[0]
    dy[1] = (0.02 * y[0] - 1.) * y[1]
    return dy

diffeq_cy = nb2cy(diffeq_nb, use_njit=True)
diffeq_nb2 = cy2nb(diffeq_cy, use_njit=True)

You can then call the ODE solver in a similar fashion as the numba version.

from CyRK import cyrk_ode
time_domain, y_results, success, message = \
    cyrk_ode(diffeq_cy, time_span, initial_conds, rk_method=1, rtol=rtol, atol=atol)

Cython-based CySolver

The cython-based CySolver class requires writing a new cython cdef class. This is done in a new cython .pyx file which must then be cythonized and compiled before it can be used.

"""ODE.pyx"""
# distutils: language = c++
# cython: boundscheck=False, wraparound=False, nonecheck=False, cdivision=True, initializedcheck=False

from CyRK.cy.cysolver cimport CySolver
# Note the `cimport` here^

cdef class MyCyRKDiffeq(CySolver):

    cdef void diffeq(self) noexcept nogil:
        
        # Unpack dependent variables using the `self.y_ptr` variable.
        # In this example we have a system of two dependent variables, but any number can be used.
        cdef double y0, y1
        y0 = self.y_ptr[0]
        y1 = self.y_ptr[1]

        # Unpack any additional arguments that do not change with time using the `self.args_ptr` variable.
        cdef double a, b
        # These must be float64s
        a  = self.args_ptr[0]
        b  = self.args_ptr[1]

        # If needed, unpack the time variable using `self.t_now`
        cdef double t
        t = self.t_now

        # This then updates dydt by setting the values of `self.dy_ptr`
        self.dy_ptr[0] = (1. - a * y1) * y0
        self.dy_ptr[1] = (b * y0 - 1.) * y1

Once you compile the differential equation it can be imported in a regular python file and used in a similar fashion to the other integrators.

"""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)

# To perform the integration make a call to the solve method.
# Only required if the `auto_solve` flag is set to False (defaults to True)
# MyCyRKDiffeqInst.solve()

# 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.
# See Documentation/Extra Output.md for more information on `extra`

Optional Arguments

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: 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.
    • For the cython solvers these arguments must be floating point numbers only.
  • t_eval: Both solvers uses an adaptive time stepping protocol based on the recent error at each step. This results in a final non-uniform time domain of variable size. If the user would like the results at specific time steps then they can provide a np.ndarray array at the desired steps via t_eval. The solver will then interpolate the results to fit this array.
  • rk_method: Runge-Kutta method (default is 1; all of these methods are based off of SciPy implementations):
    • 0 - "RK23" Explicit Runge-Kutta method of order 3(2).
    • 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_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.
    • Please see Documentation\Extra Output.md for more details.
  • expected_size : Best guess on the expected size of the final time domain (number of points).
    • 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 negatively 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.

Limitations and Known Issues

  • Issue 30: CyRK's CySolver does not allow for complex-valued dependent variables.

Citing CyRK

It is great to see CyRK used in other software or in scientific studies. We ask that you cite back to CyRK's GitHub website so interested parties can learn about this package. It would also be great to hear about the work being done with CyRK, so get in touch!

Renaud, Joe P. (2022). CyRK - ODE Integrator Implemented in Cython and Numba. Zenodo. https://doi.org/10.5281/zenodo.7093266

In addition to citing CyRK, please consider citing SciPy and its references for the specific Runge-Kutta model that was used in your work. CyRK is largely an adaptation of SciPy's functionality. Find more details here.

Pauli Virtanen, Ralf Gommers, Travis E. Oliphant, Matt Haberland, Tyler Reddy, David Cournapeau, Evgeni Burovski, Pearu Peterson, Warren Weckesser, Jonathan Bright, Stéfan J. van der Walt, Matthew Brett, Joshua Wilson, K. Jarrod Millman, Nikolay Mayorov, Andrew R. J. Nelson, Eric Jones, Robert Kern, Eric Larson, CJ Carey, İlhan Polat, Yu Feng, Eric W. Moore, Jake VanderPlas, Denis Laxalde, Josef Perktold, Robert Cimrman, Ian Henriksen, E.A. Quintero, Charles R Harris, Anne M. Archibald, Antônio H. Ribeiro, Fabian Pedregosa, Paul van Mulbregt, and SciPy 1.0 Contributors. (2020) SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python. Nature Methods, 17(3), 261-272.

Contribute to CyRK

Please look here for an up-to-date list of contributors to the CyRK package.

CyRK is open-source and is distributed under the Creative Commons Attribution-ShareAlike 4.0 International license. You are welcome to fork this repository and make any edits with attribution back to this project (please see the Citing CyRK section).

  • We encourage users to report bugs or feature requests using GitHub Issues.
  • If you would like to contribute but don't know where to start, check out the good first issue tag on GitHub.
  • Users are welcome to submit pull requests and should feel free to create them before the final code is completed so that feedback and suggestions can be given early on.

Project details


Release history Release notifications | RSS feed

This version

0.8.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

CyRK-0.8.0.tar.gz (989.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

CyRK-0.8.0-pp310-pypy310_pp73-win_amd64.whl (1.4 MB view details)

Uploaded PyPyWindows x86-64

CyRK-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

CyRK-0.8.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

CyRK-0.8.0-pp39-pypy39_pp73-win_amd64.whl (1.4 MB view details)

Uploaded PyPyWindows x86-64

CyRK-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

CyRK-0.8.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

CyRK-0.8.0-pp38-pypy38_pp73-win_amd64.whl (1.4 MB view details)

Uploaded PyPyWindows x86-64

CyRK-0.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

CyRK-0.8.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686

CyRK-0.8.0-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

CyRK-0.8.0-cp311-cp311-win32.whl (1.4 MB view details)

Uploaded CPython 3.11Windows x86

CyRK-0.8.0-cp311-cp311-musllinux_1_1_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

CyRK-0.8.0-cp311-cp311-musllinux_1_1_i686.whl (4.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

CyRK-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

CyRK-0.8.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (4.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

CyRK-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

CyRK-0.8.0-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

CyRK-0.8.0-cp310-cp310-win32.whl (1.4 MB view details)

Uploaded CPython 3.10Windows x86

CyRK-0.8.0-cp310-cp310-musllinux_1_1_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

CyRK-0.8.0-cp310-cp310-musllinux_1_1_i686.whl (3.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

CyRK-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

CyRK-0.8.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (3.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

CyRK-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

CyRK-0.8.0-cp39-cp39-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.9Windows x86-64

CyRK-0.8.0-cp39-cp39-win32.whl (1.4 MB view details)

Uploaded CPython 3.9Windows x86

CyRK-0.8.0-cp39-cp39-musllinux_1_1_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

CyRK-0.8.0-cp39-cp39-musllinux_1_1_i686.whl (3.8 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

CyRK-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

CyRK-0.8.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (3.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

CyRK-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

CyRK-0.8.0-cp38-cp38-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.8Windows x86-64

CyRK-0.8.0-cp38-cp38-win32.whl (1.4 MB view details)

Uploaded CPython 3.8Windows x86

CyRK-0.8.0-cp38-cp38-musllinux_1_1_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

CyRK-0.8.0-cp38-cp38-musllinux_1_1_i686.whl (3.9 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

CyRK-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

CyRK-0.8.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (3.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

CyRK-0.8.0-cp38-cp38-macosx_10_9_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file CyRK-0.8.0.tar.gz.

File metadata

  • Download URL: CyRK-0.8.0.tar.gz
  • Upload date:
  • Size: 989.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0.tar.gz
Algorithm Hash digest
SHA256 de2ec08f1609d0d24ccaeac29d14f1bc9ccc6d6a0efbec6bffa7987461d379c3
MD5 c86c632c82122b81c3143d78f0787282
BLAKE2b-256 d0b52823b8808c69686a93a92d66233ea7eba44914980cfc1522dec7ea7042d2

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 f11fb09f4bc5083751ced58b4e40c55fefddfad5d86b61f15e0bef84ca23040c
MD5 128b5040178bae7a91a7d8e4dbf156b0
BLAKE2b-256 ba94fae86a822b7df94150ee286375423b3c6f729a56a1872026e02d8e8a05d5

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13d0d229d73b75c0bb0d1b1f53442a50fae9da56d88ad47e0831245db7366856
MD5 757161bdab64fb9f4e683ee6d10ef631
BLAKE2b-256 4c77eefbbc74bde06c59180a8c315e47f6f84b73d6b5a028926a55700bd3c577

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3cbbd5ca24da883aa27e46d40cade261dd0025459cad5c78bdcdbf46fee8d514
MD5 c7e3fb43bacfd5b6a31ba8514d0d2ff7
BLAKE2b-256 c7faf73b3cc225b2356675b21363cad4978eb659e8f43eca497dbc69a5aad882

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 839d9f974358b0ffbcd1a07eeef3709bb05cd21a962c5402c0025e5dbac31da2
MD5 8a3effb1a923ea43d93fc50c83544fbe
BLAKE2b-256 c288798cd755a2f478f010104e5e3f09dc4a51ae629d9004753fc885a1cb5065

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6fd373bbbb95d96441dfba243408a5176950b75bdac7e1cd6eed7c66fb55d9bf
MD5 9ff7edb9517a658a8b9702a34ccf594c
BLAKE2b-256 43a890394f8f22d0c01fe2ba939ec0279041280584174628da29d738c0ce246c

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ff6fd81b2f2b007136a9ed0a3d1446fe01edb6b552081235fa6506ba56a9d4af
MD5 88d492a342c9c8e63745eafa9df11d29
BLAKE2b-256 ac6414eb51ffdb5fad69ae3bcac69e90c82cbb36d0f385630e039b2a5f38b61d

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp38-pypy38_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 7fd42a6b004c9cd2b1b1fc77d9510afbbc1e32ef58023d656640f2e4d2f0e4e6
MD5 a6ff95a04e9e3b98559f6fbdda0ad60e
BLAKE2b-256 4d5b17e46c92d8348237fc88196b81eee0a4000d639eecabe022587c0d5018bf

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aaefb9796785b90ed38586fc06c65703aa32e4ff4bcb8338819e34f448356cea
MD5 d28f3ce97509c32cd640c0044286fe10
BLAKE2b-256 08eba1ec7d2436c193eb7aefe3d512cc76d984f1ec79fd49dddd6769c98786c6

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 956cf9c83124c91cb5c1054f30c68f500e4e34f80b22be9b13654a7c283e31fa
MD5 bec89f8d80a0cdd22ed29a7e781df799
BLAKE2b-256 47c7a271fb159c7bf328411b63123ea24b5c1094e6c7bcdbab7c050e7c1f02bb

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5a8a435cbee3beb77d8790ed65d6d7f014b649c23d385f1918a11b651642847e
MD5 6b29e7306a8d602020a761feb10e2321
BLAKE2b-256 876e5cf4aea245eede4031ebd3cf9ca6820aee7dc7f81fde2994d240f4190f46

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 a934a4fb7a4352109a3d361d62d2c1a10999fce86ea5445d2a3e28c34141ad21
MD5 481b59f1e20498031cb0a493750eeec0
BLAKE2b-256 d4712ceb9aaa541ae3463eaca3d70f0fd9ccb3b0019699b67cee0a0a138c6110

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5e1d00a7aef4db793bd09f3b2685210d07795950e0176729962ff15a30f21b36
MD5 72636aa5de8b29008d696ba300616415
BLAKE2b-256 ab5e5e8232e15a0dc2012e70c68a60e735f6594b9131355a9322ab6972d7140b

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 45f280083d3e50302af30b7cac603f33958db10b76889c56e4de61c47c76a9e3
MD5 039f968a1246488f9ee1691e6509630c
BLAKE2b-256 3711e32914581ed5fd255c0df5a1e58a9c35003613d2afdb3cd7f8d7bd85fd82

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3561edc4700ffe0639825fa65596a5fbaa146eb14f35684e73ae44515a12dd2f
MD5 457124476b85d1599b76f2a97002e184
BLAKE2b-256 d3930669852bdd60ae8231fb2a5be8f59a45e0272efb4b8d348ec585cd50624c

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a4ddfea90fbdb0502070e8200d89ec8177f3e2e5719f44755ea083af7e035684
MD5 8acb951845fe0112567060c329767725
BLAKE2b-256 4dbd3ed539fbfc8829eafee78554746413c7a45762a33030af913464f0ea83bf

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 918b6f0d1356ae5b1adb55ad5fb203ea44c2a585c50086f1134f0b3228b16f2a
MD5 9928c38bfa5ef4918495e4d12e9e4579
BLAKE2b-256 72b05f02d743dcda14ef206c54d62d94088c1717e18adeeee2fe44fe765cc194

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c5fe89d2b7ef8409fad5caf0c6af2fb30feaff17142a23266f66949deddbd177
MD5 4b89f978cd06c8a916d10f667fc3559e
BLAKE2b-256 d96857adc76813edac8e34abe2483127e561c3db99bcdc370608127a3db59bd4

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 0b222d92507c39f9a89fdddd21fa8ca83ef5e2951bbfdb929f2c6869d90e094f
MD5 b481385ddcd0215ad7b5a7747255f239
BLAKE2b-256 afb5e1ca2e5922c22b9fb07a308b7d70e552e5905fe85e8d8f6d5b1655a3b49b

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 408cdac06c045748140e095b5506751f1661e5db6a38dbf3ed957bafb89a34c8
MD5 f539fa95b760d118da31efdb6e73d708
BLAKE2b-256 c8460bcbf43d774da7c076a6f8fa54dea59f71b9b5a99c04f4eccf7a1a24a195

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 ce24742f20c5c6b06a7c03b14359d507c5277f987bb8641af73a073dc36594d8
MD5 da4ac66fab75aef570ce827596497fcb
BLAKE2b-256 f50ef38bde6ff15916bf033bfc1b02dd66456cc87aa3d6304db54126055d81c8

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c8a473d555d0b6d47b204ac8ed9a8a0330304d88799529c6b18bb9f5babdca2
MD5 3b2c4969e2c8198f980153e2863d14b6
BLAKE2b-256 0c133d537a281dffdf88dcbf1f92e5ca4d77bb5b25ec57e455cbad6c0b5d643f

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1d26072956dd77dc41f57207fe9f8ccc5a1502aad35f2a407bc9947b545bf813
MD5 23a8e09b4fc32eca54af5787b182e1e8
BLAKE2b-256 fdb6b5c4a934bac11985e3ac5a0d06dd29feaabccac10197d148b64c3e656b7c

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ef3dc12561fb753a6f56644eb76f8a5dbbc89ad26ad65fb0a7873d16818e50b6
MD5 99b60fdcbe83f426c07c1c511fbccee7
BLAKE2b-256 b4f390f463132a92e2d6fbb71d0f08237d45f071821ef7f1f947b6811c8f8a62

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3ef06ffcf74fd69e8adf51f02961bb223d7b50aedbc6f27dcf251a1b67371b5b
MD5 d98e52567063f1a0df51b2345832329b
BLAKE2b-256 5ae0f14c66edf2b695f9f0263fb1717e55f1b1ebaad758823ddebda4ee9bd964

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 5171828159e4d488c148a457efc827b65f8150064239c5649f331fd361442d90
MD5 568c5e083951c940467c28002178bd25
BLAKE2b-256 ef2a019bade3dd7a6dc76eb4b587fbd0456351f51889c65dda4ddc8550b8b0ac

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 4.0 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 33b2bd30c5ba28ac48dcf967db84d4a868b54572969128abe02327c36334a7e3
MD5 0b8e2b7f8ebd1ada9cc76ff0b9314704
BLAKE2b-256 ff421c892f26f80c48965fcb74e49399791ae26ad136a050583391c916d538d7

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 6f797a045ab8b5540c7e6e82069441dabb57c7d04b72c26f45f309a2826aab07
MD5 7e1b14a184704d09c7356086e5fd60ce
BLAKE2b-256 978232b2ad35cd5bd87abebfbc4390379e56cfad6cafa94fa950a10d1bf74c06

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 96e0c5c0ebe26568205173908e9ee3b1c75dca59ce1c5dcd0a124e1db468d742
MD5 a0e88fe7fe998f07d4d022fd1b3d24f0
BLAKE2b-256 72f1d9f72f7b242abacd778190ab7509a68fad4b904d549de2921d4de43bba58

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a8bb34ce5a648361f2f886811c347f2ca6219c76bdb6b44fdfa5320e42f9de3b
MD5 7d472f4a959b263dbc1850019d65449c
BLAKE2b-256 c0c06029ae8707d257c117edc1aa751566771cf72745103af49ae7b75613e489

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 60d7036ada0dd2b4e8681b0f8a9a21ae66db72d0564456ce0a897acad8bf1b3c
MD5 d15f30be695c1f8dd320850626ac152e
BLAKE2b-256 dbfc5115f0ee347952b55836a7e8063cd6ac0bd289d29d8ff4e35a3fa3ea2439

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ddbe37ccfea16889be205d2489845b67af0d034a0190636a900f6a919bd83aa8
MD5 4b96125b2d1ddb651af1a7cd8699fbd7
BLAKE2b-256 4e168aa8a45444343e1b85a5f586302f0f7ad2624617bb88ec4e9eb77a6373c7

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 269d284b46c76368c9269a49493e8a8e3256432b51dcee725c25020634107bcc
MD5 393cbbe03772f8e1f983c94a646c5a1d
BLAKE2b-256 0e6afc979115055a1e7e5319515f875163a81fb4b81ed1f7e184811c5fe85a0e

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 4.1 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 df557c2c5d03530081cb0fcd32fb0ae147c572b17ba694d9dee6ae327cc39f6f
MD5 d59665db0b265c0d1dd9f6f799002bb1
BLAKE2b-256 03a544e56952a3049a08fc3be5081465b2a2cb2011dc16ac4307d5ccbd883764

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: CyRK-0.8.0-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 3da1527ed4696269b9d7ccf4f7d45162a6d6ac62ded0065bb7228ed3c4260fea
MD5 4b03bf801ac1b6ee1376bdf11253c1d8
BLAKE2b-256 a6ffd087574d1a7b8554fd6dbd854de3608cc713a4d34a6fd1c8adb3ac80ada1

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 91e7f13ff9702465c486150a9dbf4b806e8762201c55447d2939803d13a436dc
MD5 c9af06e99665793dc0d8bb0d5eb9cfd4
BLAKE2b-256 c2dee07b20cff44e5bf4ce7b959a7c6751a7d82faed996bca2665edb6987d653

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2cc0643c450faf01f6ff38cc7ef7fdb27250113100923af2ac89ba6b1cd5db4f
MD5 8e2439fbd1a5e937ad1d0f1c2593c072
BLAKE2b-256 0989e5572ff6168bee9ea6cef86c79d5484034d950142dec9e0fd2988b2ba0f3

See more details on using hashes here.

File details

Details for the file CyRK-0.8.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for CyRK-0.8.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d25c234bc16c4b5f6aeaf449f70c8c73c6fb13014c77116da7992d131127b18b
MD5 9f2da85dce720d2577c4d1efb787d86f
BLAKE2b-256 69ba0abbeb52c17191b503148ce6b6acb15894533c21f5fa360260ea7b22e14c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page