Cython implementations of multiple root-finding methods.
Project description
cy-root
(Not this root)
A simple root-finding package written in Cython. Many of the implemented methods can't be found in common Python libraries.
News:
- v1.0.3: All methods now return a partially typed
namedtuple
-like Cython Extension object instead ofnamedtuple
. - v1.0.2: Vector root-finding methods can now (try to) solve systems of equations with number of inputs different from number of outputs.
Requirements
- Python 3.6+
- dynamic-default-args
- numpy
- scipy
- sympy
For compilation:
- Cython (if you want to build from
.pyx
files) - A C/C++ compiler
Installation
cy-root is now available on PyPI.
pip install cy-root
Alternatively, you can build from source. Make sure you have all the dependencies installed, then clone this repo and run:
git clone git://github.com/inspiros/cy-root.git
cd cy-root
pip install .
Supported algorithms
Note: For more information about the listed algorithms, please use Google until I update the references.
Scalar root:
- Bracketing methods: (methods that require lower and upper bounds)
- Newton-like methods: (methods that require derivative and/or higher order derivatives)
- ✅ Newton
- ✅ Chebyshev
- ✅ Halley
- ✅ Super-Halley
- ✅ Tangent Hyperbolas (similar to Halley)
- ✅ Householder
- Quasi-Newton methods: (methods that approximate derivative, use interpolation, or successive iteration)
- ✅ Secant
- ✅ Sidi
- ✅ Steffensen
- ✅ Inverse Quadratic Interpolation
- ✅ Hyperbolic Interpolation
- ✅ Muller (for complex root)
Vector root:
- Bracketing methods: (methods that require n-dimensional bracket)
- ✅ Vrahatis (generalized bisection using n-polygon)
- Newton-like methods: (methods that require Jacobian and/or Hessian)
- ✅ Generalized Newton
- ✅ Generalized Chebyshev
- ✅ Generalized Halley
- ✅ Generalized Super-Halley
- ✅ Generalized Tangent Hyperbolas (similar to Generalized Halley)
- Quasi-Newton methods: (methods that approximate Jacobian, use interpolation, or successive iteration)
- ✅ Wolfe-Bittner
- ✅ Robinson
- ✅ Barnes
- ✅ Traub-Steffensen
- ✅ Broyden (Good and Bad)
- ✅ Klement
Derivative Approximation:
Methods that can be combined with any Newton-like root-finding methods to discard the need of analytical derivatives.
- ✅ Finite Difference (for both scalar and vector functions, up to arbitrary order)
Usage
Examples:
Example 1:
Use find_scalar_root
or find_vector_root
and pass method name as the first argument.
This example shows the use of find_scalar_root
function with itp
method.
from cyroot import find_scalar_root
f = lambda x: x ** 2 - 612
result = find_scalar_root(method='itp', f=f, a=-10, b=50)
print(result)
Output:
RootResults(root=24.73863375370596, f_root=-1.1368683772161603e-13, iters=8, f_calls=10, bracket=(24.73863369031373, 24.738633753846678), f_bracket=(-3.1364744472739403e-06, 6.962181942071766e-09), precision=6.353294779160024e-08, error=1.1368683772161603e-13, converged=True, optimal=True)
The names and pointers to all implemented methods are stored in two dictionaries SCALAR_ROOT_FINDING_METHODS
and
VECTOR_ROOT_FINDING_METHODS
.
from cyroot import SCALAR_ROOT_FINDING_METHODS, VECTOR_ROOT_FINDING_METHODS
print('scalar root methods:', SCALAR_ROOT_FINDING_METHODS.keys())
print('vector root methods:', VECTOR_ROOT_FINDING_METHODS.keys())
Example 2:
Alternatively, import the function directly.
You can also see the full list of input arguments of by using help()
on them.
This example shows the use of muller
method for finding complex root:
from cyroot import muller
# This function has no real root
f = lambda x: x ** 4 + 4 * x ** 2 + 5
# But Muller's method can be used to find complex root
result = muller(f, x0=0, x1=10, x2=20)
print(result)
Output:
RootResults(root=(0.34356074972251255+1.4553466902253551j), f_root=(-8.881784197001252e-16-1.7763568394002505e-15j), iters=43, f_calls=43, precision=3.177770418807502e-08, error=1.9860273225978185e-15, converged=True, optimal=True)
Example 3:
Considering the parabola $f(x)=x^2-612$ in Example 1 with initial bounds $(a,b)$ where $a=-b$, many bracketing methods will fail to find a root as the values evaluated at initial bracket are identical.
In this example, we use the hybisect
method which repeatedly bisects the search regions until the Bolzano criterion
holds, thus can find multiple roots:
import math
from cyroot import hybisect
f = lambda x: x ** 2 - 612
# interval arithmetic function of f
interval_f = lambda x_l, x_h: ((min(abs(x_l), abs(x_h))
if math.copysign(1, x_l) * math.copysign(1, x_h) > 0
else 0) ** 2 - 612,
max(abs(x_l), abs(x_h)) ** 2 - 612)
result = hybisect(f, interval_f, -50, 50)
print(result)
Output:
RootResults(root=[-24.738633753707973, 24.738633753707973], f_root=[9.936229616869241e-11, 9.936229616869241e-11], split_iters=1, iters=[43, 43], f_calls=(92, 3), bracket=[(-24.738633753710815, -24.73863375370513), (24.73863375370513, 24.738633753710815)], f_bracket=[(nan, nan), (nan, nan)], precision=[5.6843418860808015e-12, 5.6843418860808015e-12], error=[9.936229616869241e-11, 9.936229616869241e-11], converged=[True, True], optimal=[True, True])
Example 4:
This example shows the use of the halley
method with functions returning first and second order derivatives of f
:
from cyroot import halley
f = lambda x: x ** 3 - 5 * x ** 2 + 2 * x - 1
# first order derivative
df = lambda x: 3 * x ** 2 - 10 * x + 2
# second order derivative
d2f = lambda x: 6 * x - 10
result = halley(f, df, d2f, x0=1.5)
print(result)
Output:
RootResults(root=4.613470267581537, f_root=-3.623767952376511e-13, df_root=(19.7176210537612, 17.68082160548922), iters=11, f_calls=(12, 12, 12), precision=4.9625634836147965e-05, error=3.623767952376511e-13, converged=True, optimal=True)
The householder
method supports an arbitrary number of higher order derivatives:
from cyroot import householder
f = lambda x: x ** 3 - 5 * x ** 2 + 2 * x - 1
df = lambda x: 3 * x ** 2 - 10 * x + 2
d2f = lambda x: 6 * x - 10
d3f = lambda x: 6
result = householder(f, dfs=[df, d2f, d3f], x0=1.5)
print(result) # same result
Example 5:
Similarly, to find roots of systems of equations with Newton-like methods, you have to define functions returning
Jacobian (and Hessian) of F
.
This example shows the use of generalized_super_halley
method:
import numpy as np
from cyroot import generalized_super_halley
# all functions for vector root methods must take a numpy array
# as argument, and return an array-like object
F = lambda x: np.array([x[0] ** 2 + 2 * x[0] * np.sin(x[1]) - x[1],
4 * x[0] * x[1] ** 2 - x[1] ** 3 - 1])
# Jacobian
J = lambda x: np.array([
[2 * x[0] + 2 * np.sin(x[1]), 2 * x[0] * np.cos(x[1]) - 1],
[4 * x[1] ** 2, 8 * x[0] * x[1] - 3 * x[1] ** 2]
])
# Hessian
H = lambda x: np.array([
[[2, 2 * np.cos(x[1])],
[2 * np.cos(x[1]), -2 * x[0] * np.sin(x[1])]],
[[0, 8 * x[1]],
[8 * x[1], 8 * x[0] - 6 * x[1]]]
])
result = generalized_super_halley(F, J, H, x0=np.array([2., 2.]))
print(result)
Output: (a bit messy)
RootResults(root=array([0.48298601, 1.08951589]), f_root=array([-4.35123049e-11, -6.55444587e-11]), df_root=(array([[ 2.73877785, -0.55283751],
[ 4.74817951, 0.6486328 ]]), array([[[ 2. , 0.92582907],
[ 0.92582907, -0.85624041]],
[[ 0. , 8.71612713],
[ 8.71612713, -2.6732073 ]]])), iters=3, f_calls=(4, 4, 4), precision=0.0005808146393164461, error=6.554445874940029e-11, converged=True, optimal=True)
Example 6:
For vector bracketing root methods or vector root methods with multiple initial guesses, the input should be a 2D
np.ndarray
.
This example shows the use of vrahatis
method (a generalized bisection) with the example function in the original
paper:
import numpy as np
from cyroot import vrahatis
F = lambda x: np.array([x[0] ** 2 - 4 * x[1],
-2 * x[0] + x[1] ** 2 + 4 * x[1]])
# If the initial points do not form an admissible n-polygon,
# an exception will be raised.
x0s = np.array([[-2., -0.25],
[0.5, 0.25],
[2, -0.25],
[0.6, 0.25]])
result = vrahatis(F, x0s=x0s)
print(result)
Output:
RootResults(root=array([4.80212874e-11, 0.00000000e+00]), f_root=array([ 2.30604404e-21, -9.60425747e-11]), iters=34, f_calls=140, bracket=array([[ 2.29193750e-10, 2.91038305e-11],
[-6.54727619e-12, 2.91038305e-11],
[ 4.80212874e-11, 0.00000000e+00],
[-6.98492260e-11, 0.00000000e+00]]), f_bracket=array([[-1.16415322e-10, -3.41972179e-10],
[-1.16415322e-10, 1.29509874e-10],
[ 2.30604404e-21, -9.60425747e-11],
[ 4.87891437e-21, 1.39698452e-10]]), precision=2.9904297647806717e-10, error=9.604257471622717e-11, converged=True, optimal=True)
Example 7:
This example shows the use of finite_difference
to approximate derivatives when analytical solutions are not
available:
import math
from cyroot import finite_difference
f = lambda x: (math.sin(x) + 1) ** x
x = 3 * math.pi / 2
d3f_x = finite_difference(f, x,
h=1e-4, # step
order=1, # order
kind='forward') # type: forward, backward, or central
# 7.611804179666343e-36
Similarly, generalized_finite_difference
can compute vector derivative of arbitrary order
(order=1
for Jacobian, order=2
for Hessian), and h
can be a number or a np.ndarray
containing different
step sizes for each dimension:
import numpy as np
from cyroot import generalized_finite_difference
F = lambda x: np.array([x[0] ** 3 - 3 * x[0] * x[1] + 5 * x[1] - 7,
x[0] ** 2 + x[0] * x[1] ** 2 - 4 * x[1] ** 2 + 3.5])
x = np.array([2., 3.])
# Derivatives of F will have shape (m, *([n] * order))
# where n is number of inputs, m is number of outputs
J_x = generalized_finite_difference(F, x, h=1e-4, order=1) # Jacobian
# array([[ 2.99985, -1.00015],
# [ 13.0003 , -11.9997 ]])
H_x = generalized_finite_difference(F, x, h=1e-3, order=2) # Hessian
# array([[[12. , -3. ],
# [-3. , 0. ]],
# [[ 2. , 6.001],
# [ 6.001, -3.998]]])
K_x = generalized_finite_difference(F, x, h=1e-2, order=3) # Kardashian, maybe
# array([[[[ 6.00000000e+00, 2.32830644e-10],
# [ 2.32830644e-10, 2.32830644e-10]],
# [[ 2.32830644e-10, 2.32830644e-10],
# [ 2.32830644e-10, 1.11758709e-08]]],
# [[[ 0.00000000e+00, -3.72529030e-09],
# [-3.72529030e-09, 1.99999999e+00]],
# [[-3.72529030e-09, 1.99999999e+00],
# [ 1.99999999e+00, -1.67638063e-08]]]])
Conveniently, you can use the FiniteDifference
and GeneralizedFiniteDifference
classes to wrap our function and
pass them to any Newton-like methods.
This is actually the default behavior when derivative functions of all Newton-like methods or the initial Jacobian guess of some vector quasi-Newton methods are not provided.
from cyroot import GeneralizedFiniteDifference, generalized_halley
J = GeneralizedFiniteDifference(F, h=1e-4, order=1)
H = GeneralizedFiniteDifference(F, h=1e-3, order=2)
result = generalized_halley(F, J=J, H=H, x0=x)
print(result)
Output:
RootResults(root=array([2.16665878, 2.11415683]), f_root=array([-5.47455414e-11, 1.05089271e-11]), df_root=(array([[ 7.74141032, -1.49997634],
[ 8.80307666, -7.75212506]]), array([[[ 1.30059527e+01, -3.00000000e+00],
[-3.00000000e+00, -4.54747351e-13]],
[[ 2.00000000e+00, 4.22931366e+00],
[ 4.22931366e+00, -3.66668244e+00]]])), iters=4, f_calls=(5, 211, 211), precision=1.0327220168881081e-07, error=5.474554143347632e-11, converged=True, optimal=True)
Output format:
The returned result
is a namedtuple-like object whose elements depend on the type of the method:
- Common:
root
: the solved root.f_root
: value evaluated at root.iters
: number of iterations.f_calls
: number of function calls.precision
: width of final bracket (for bracketing methods), or absolute difference of root with the last estimation, or the span of the set of final estimations.error
: absolute value off_root
.converged
:True
if the stopping criterion is met,False
if the procedure terminated prematurely.optimal
:True
only if the error tolerance is satisfiedabs(f_root) <= etol
.
- Exclusive to bracketing methods:
bracket
: final bracket.f_bracket
: value evaluated at final bracket.
- Exclusive to Newton-like methods:
df_root
: derivative or tuple of derivatives (of increasing orders) evaluated at root.
Notes:
converged
can beTrue
even if the solution is not optimal, which means the routine stopped because the precision tolerance is satisfied.- For
scipy.optimize.root
users, the stopping condition argumentsetol
,ertol
,ptol
,prtol
are equivalent tof_tol
,f_rtol
,x_tol
,x_rtol
, respectively (but not identical).
Configurations:
The default values for stop condition arguments (i.e. etol
, ertol
, ptol
, prtol
, max_iter
) are globally set to
the values defined in _defaults.py
, and can be modified dynamically as follows:
import cyroot
cyroot.set_default_stop_condition_args(
etol=1e-7,
ptol=0, # disable precision tolerance
max_iter=100)
help(cyroot.illinois) # run to check the updated docstring
For more examples, please check the examples
folder.
Contributing
If you want to contribute, please contact me.
If you want an algorithm to be implemented, also drop me the paper (I will read if I have time).
License
The code is released under the MIT license. See LICENSE.txt
for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file cy-root-1.0.3.tar.gz
.
File metadata
- Download URL: cy-root-1.0.3.tar.gz
- Upload date:
- Size: 2.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d3a19255e798471f147929cb26ce8fab9fd89f67f97eecb07d314781b4705ec |
|
MD5 | da3688b07669057d54bcb00cdefd2ea5 |
|
BLAKE2b-256 | 54ff5f299a738475004e65f88517462da5cc27f829d770773999711cee96d5a1 |
File details
Details for the file cy_root-1.0.3-cp311-cp311-win_amd64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e6b06a4755ef0e4eb8e2b8d5dfadd2bfab89596d5716afc1ab070aa3e5d5cbb |
|
MD5 | fbc965d7cdf058f983c3635ed7d1256f |
|
BLAKE2b-256 | a33cd48ac203b2ab91bf576bfb0417449e2a5ae17672e3d2658d7f83a4d38988 |
File details
Details for the file cy_root-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 12.9 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fefd867e733e5e922267823a0971a585f2d7ba7f7918f34736dcef7b8dced188 |
|
MD5 | 4354683158e58252484349b0d6874e1a |
|
BLAKE2b-256 | 5cb223610db45134d439b13aa2958dba2ba1f5c49d4fb4e87b422b36d18979cb |
File details
Details for the file cy_root-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | adf8ba7647c814caae1330918a4639efc3f5cb061958f6c53274d9dc9d042057 |
|
MD5 | 3bcb542b3ce0b0a6f5005d8e7c50cf89 |
|
BLAKE2b-256 | 526e902720a1c3365e2882f8d1859eae735a0fc85d09de061e267debecf67151 |
File details
Details for the file cy_root-1.0.3-cp310-cp310-win_amd64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf858b9071868f44586c0fcf6cb5be29ec837cccd34bb5dd7654970170824f47 |
|
MD5 | 602790e8ec2b2816c9242d064a084256 |
|
BLAKE2b-256 | 5c5cc2c01cd72fe337ab249103ab66d5e0a422235b501e3189414d00bbeb6230 |
File details
Details for the file cy_root-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 12.3 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77f19af4d82df8b2bd2ed5773aeaa230def0312b832813e99f3bb12f81156b24 |
|
MD5 | 315788394042a82db0e74bf485613746 |
|
BLAKE2b-256 | abdab227bd88bd5362022431b80293c164debdc28b7d08a89f2af38e5b3a1cf9 |
File details
Details for the file cy_root-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc9d2c892dd075b3f2e45fb0e71709b03208912b21da1342437ce46c73cbe1df |
|
MD5 | 8dd56c10d01bf20ff66bde1ee1847a81 |
|
BLAKE2b-256 | dc89391dc1d0f34da454f032442ef80de11479cb8ca815ca91664afccaa8bd70 |
File details
Details for the file cy_root-1.0.3-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a192f6e4f0af4d66cb40824d6f3078cec3f245b3471c3d2e28f39ad38bec48a |
|
MD5 | 83c11d0556cf21923a334f6561ab33f6 |
|
BLAKE2b-256 | e67d1b76d7dcd07fb1244453b368433a09f28d4ed026761bfe8f8c1505f339f5 |
File details
Details for the file cy_root-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 12.5 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3768f6c28285ee0502ccdceb224cde25620f64d08712e0801540b442abeee6c7 |
|
MD5 | ee5e8001ef037c78a935f8ad2f88d89a |
|
BLAKE2b-256 | 5a3a4047f5da6ab11f51681964b73af29c976cd59e18bb5bb0bb990cb6ecbc3b |
File details
Details for the file cy_root-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fa6b7b1097580aed20d27fdfa12eb2eb4d3f2be6a4311b40fe1bc8225d39044 |
|
MD5 | 8ce8a5b999889f334a637599f44b3103 |
|
BLAKE2b-256 | 7f7a74f6174a64d0d15f381b19b8d8721f9f55f7abfc0171e5eee5830597349a |
File details
Details for the file cy_root-1.0.3-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a33eb27550cc157a2fdb1899f7ee89b7e4a88b706fc97bd7ef1869fa0bd8f69a |
|
MD5 | e80343c888e2851415321c048285d977 |
|
BLAKE2b-256 | 372c3e9fd98d7c1e7ff0dc8a84832bb763e2c571cfa426de876e751c1f0b5a91 |
File details
Details for the file cy_root-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 12.6 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5ea25788e268f6e20a7db26477c0df287de6ed45adba17671eaf07ca4ff8f5a |
|
MD5 | 85b3ab9ae94259d70bb3ab391c4b354b |
|
BLAKE2b-256 | 5dd7b140fe8b329423a0a540800d8a4930aa5812ef765b74399c61aa535314b4 |
File details
Details for the file cy_root-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ab8f5d7b2c97bf7eb11b8a5365976297bda0b1929160a6569e61855c0eacc74 |
|
MD5 | 560bbc97158b8dda8d69cbbed4553655 |
|
BLAKE2b-256 | d562000c048d32d2b27d93670dd9382ec78c787bdd9875c87c046bc860992eeb |
File details
Details for the file cy_root-1.0.3-cp37-cp37m-win_amd64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp37-cp37m-win_amd64.whl
- Upload date:
- Size: 3.8 MB
- Tags: CPython 3.7m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f25e86a879020ee1a13e769519c0cd9f28654e41276241ea479ae8cd70abb07f |
|
MD5 | b2c7844607fd4093767ca9f11eefc48e |
|
BLAKE2b-256 | 38121773ef8f0e0f2c992ae0f30a44b4abbe345f96d110647f5cff0324b78e6a |
File details
Details for the file cy_root-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 11.6 MB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5ab1060e13e8f9ca592aab91e11bd18e8d1ad74d657c99571327e01a516fad8d |
|
MD5 | b39696c154e082d7a9906157a3a23002 |
|
BLAKE2b-256 | 5f955f53b1d4a06a15435c55d08912b13c3c42bca4b78c69a61cb8f93ce706a4 |
File details
Details for the file cy_root-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.7m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 446d0169fb479cdf77100386db58feaf65cc62a0bd622a5de93655e0441d6ada |
|
MD5 | 12ded9f7007c10e48c4821726878d65c |
|
BLAKE2b-256 | d078aba5ee8ec4d3d29c57bfa91debd2e29f438a4306d436fced2e9146aaaf6e |
File details
Details for the file cy_root-1.0.3-cp36-cp36m-win_amd64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp36-cp36m-win_amd64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.6m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0c9c6fe99edfd8292d3c69f41e4b329a4adff3afbb0ead34a05c997285a7f4f |
|
MD5 | 0d08aebfbace360ef02900b1af617c52 |
|
BLAKE2b-256 | 3ba296ec24fb4f5165f6bec91ad4cde029e011f32d185c9f00debfb1554d16d8 |
File details
Details for the file cy_root-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 11.6 MB
- Tags: CPython 3.6m, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50fb4fd990b54624221be89c5393987d927a19b5bab323d209fc93a94632427c |
|
MD5 | 751ebca162b3d3c8bc900bec87a1d291 |
|
BLAKE2b-256 | 7a7d9fd69b255c3edb266f73464492ea9822c16ae2a2be926175747a506a081c |
File details
Details for the file cy_root-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: cy_root-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 4.2 MB
- Tags: CPython 3.6m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb2401e088473058112f8af113826ca156942e1579223b6484cb0a8a14001d44 |
|
MD5 | aab82b07233839f7878764b4cae2ba80 |
|
BLAKE2b-256 | f1c2bd1d352c402ae45789e5b1796656878995a6765c32977c3039133aa8bc54 |