Skip to main content

logo cy-root Build wheels PyPI PyPI - Downloads GitHub


(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 of namedtuple.
  • 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)
    • ✅ Bisect
    • ✅ Hybisect (bisection with interval analysis)
    • ✅ Regula Falsi
    • ✅ Illinois
    • ✅ Pegasus
    • ✅ Anderson–Björck
    • ✅ Dekker
    • ✅ Brent (with Inverse Quadratic Interpolation and Hyperbolic Interpolation)
    • ✅ Chandrupatla
    • ✅ Ridders
    • ✅ TOMS748
    • ✅ Wu
    • ✅ ITP
  • 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)

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 of f_root.
    • converged: True if the stopping criterion is met, False if the procedure terminated prematurely.
    • optimal: True only if the error tolerance is satisfied abs(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 be True 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 arguments etol, ertol, ptol, prtol are equivalent to f_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.

Metadata

Release files for cy-root 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cy-root 1.0.3
File Size Uploaded Provenance
cy-root-1.0.3.tar.gz 2.3 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for cy-root 1.0.3
File
cy_root-1.0.3-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
cy_root-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
cy_root-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details
cy_root-1.0.3-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
cy_root-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
cy_root-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
cy_root-1.0.3-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
cy_root-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
cy_root-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details
cy_root-1.0.3-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
cy_root-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64 Details
cy_root-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.9+ x86-64 Details
cy_root-1.0.3-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details
cy_root-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64 Details
cy_root-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl CPython 3.7 CPython 3.7 pymalloc macOS 10.9+ x86-64 Details
cy_root-1.0.3-cp36-cp36m-win_amd64.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-64 Details
cy_root-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.17+ x86-64 Details
cy_root-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl CPython 3.6 CPython 3.6 pymalloc macOS 10.9+ x86-64 Details

Total release size: 124.5 MB

Release files / cy-root-1.0.3.tar.gz

Download URL cy-root-1.0.3.tar.gz
Size 2.3 MB
Tags Source
SHA-256 checksum
How to use checksums
2d3a19255e798471f147929cb26ce8fab9fd89f67f97eecb07d314781b4705ec
BLAKE2b-256 checksum
How to use checksums
54ff5f299a738475004e65f88517462da5cc27f829d770773999711cee96d5a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp311-cp311-win_amd64.whl

Download URL cy_root-1.0.3-cp311-cp311-win_amd64.whl
Size 3.8 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
5e6b06a4755ef0e4eb8e2b8d5dfadd2bfab89596d5716afc1ab070aa3e5d5cbb
BLAKE2b-256 checksum
How to use checksums
a33cd48ac203b2ab91bf576bfb0417449e2a5ae17672e3d2658d7f83a4d38988
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL cy_root-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.9 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
fefd867e733e5e922267823a0971a585f2d7ba7f7918f34736dcef7b8dced188
BLAKE2b-256 checksum
How to use checksums
5cb223610db45134d439b13aa2958dba2ba1f5c49d4fb4e87b422b36d18979cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl

Download URL cy_root-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl
Size 4.3 MB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
adf8ba7647c814caae1330918a4639efc3f5cb061958f6c53274d9dc9d042057
BLAKE2b-256 checksum
How to use checksums
526e902720a1c3365e2882f8d1859eae735a0fc85d09de061e267debecf67151
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp310-cp310-win_amd64.whl

Download URL cy_root-1.0.3-cp310-cp310-win_amd64.whl
Size 3.8 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
bf858b9071868f44586c0fcf6cb5be29ec837cccd34bb5dd7654970170824f47
BLAKE2b-256 checksum
How to use checksums
5c5cc2c01cd72fe337ab249103ab66d5e0a422235b501e3189414d00bbeb6230
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL cy_root-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.3 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
77f19af4d82df8b2bd2ed5773aeaa230def0312b832813e99f3bb12f81156b24
BLAKE2b-256 checksum
How to use checksums
abdab227bd88bd5362022431b80293c164debdc28b7d08a89f2af38e5b3a1cf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl

Download URL cy_root-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl
Size 4.3 MB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
dc9d2c892dd075b3f2e45fb0e71709b03208912b21da1342437ce46c73cbe1df
BLAKE2b-256 checksum
How to use checksums
dc89391dc1d0f34da454f032442ef80de11479cb8ca815ca91664afccaa8bd70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp39-cp39-win_amd64.whl

Download URL cy_root-1.0.3-cp39-cp39-win_amd64.whl
Size 3.8 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
9a192f6e4f0af4d66cb40824d6f3078cec3f245b3471c3d2e28f39ad38bec48a
BLAKE2b-256 checksum
How to use checksums
e67d1b76d7dcd07fb1244453b368433a09f28d4ed026761bfe8f8c1505f339f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL cy_root-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.5 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3768f6c28285ee0502ccdceb224cde25620f64d08712e0801540b442abeee6c7
BLAKE2b-256 checksum
How to use checksums
5a3a4047f5da6ab11f51681964b73af29c976cd59e18bb5bb0bb990cb6ecbc3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl

Download URL cy_root-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl
Size 4.3 MB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
9fa6b7b1097580aed20d27fdfa12eb2eb4d3f2be6a4311b40fe1bc8225d39044
BLAKE2b-256 checksum
How to use checksums
7f7a74f6174a64d0d15f381b19b8d8721f9f55f7abfc0171e5eee5830597349a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp38-cp38-win_amd64.whl

Download URL cy_root-1.0.3-cp38-cp38-win_amd64.whl
Size 3.8 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
a33eb27550cc157a2fdb1899f7ee89b7e4a88b706fc97bd7ef1869fa0bd8f69a
BLAKE2b-256 checksum
How to use checksums
372c3e9fd98d7c1e7ff0dc8a84832bb763e2c571cfa426de876e751c1f0b5a91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL cy_root-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.6 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d5ea25788e268f6e20a7db26477c0df287de6ed45adba17671eaf07ca4ff8f5a
BLAKE2b-256 checksum
How to use checksums
5dd7b140fe8b329423a0a540800d8a4930aa5812ef765b74399c61aa535314b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl

Download URL cy_root-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl
Size 4.3 MB
Tags CPython 3.8 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
9ab8f5d7b2c97bf7eb11b8a5365976297bda0b1929160a6569e61855c0eacc74
BLAKE2b-256 checksum
How to use checksums
d562000c048d32d2b27d93670dd9382ec78c787bdd9875c87c046bc860992eeb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp37-cp37m-win_amd64.whl

Download URL cy_root-1.0.3-cp37-cp37m-win_amd64.whl
Size 3.8 MB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
f25e86a879020ee1a13e769519c0cd9f28654e41276241ea479ae8cd70abb07f
BLAKE2b-256 checksum
How to use checksums
38121773ef8f0e0f2c992ae0f30a44b4abbe345f96d110647f5cff0324b78e6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL cy_root-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 11.6 MB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
5ab1060e13e8f9ca592aab91e11bd18e8d1ad74d657c99571327e01a516fad8d
BLAKE2b-256 checksum
How to use checksums
5f955f53b1d4a06a15435c55d08912b13c3c42bca4b78c69a61cb8f93ce706a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl

Download URL cy_root-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl
Size 4.3 MB
Tags CPython 3.7 CPython 3.7 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
446d0169fb479cdf77100386db58feaf65cc62a0bd622a5de93655e0441d6ada
BLAKE2b-256 checksum
How to use checksums
d078aba5ee8ec4d3d29c57bfa91debd2e29f438a4306d436fced2e9146aaaf6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp36-cp36m-win_amd64.whl

Download URL cy_root-1.0.3-cp36-cp36m-win_amd64.whl
Size 3.9 MB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
c0c9c6fe99edfd8292d3c69f41e4b329a4adff3afbb0ead34a05c997285a7f4f
BLAKE2b-256 checksum
How to use checksums
3ba296ec24fb4f5165f6bec91ad4cde029e011f32d185c9f00debfb1554d16d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL cy_root-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 11.6 MB
Tags CPython 3.6 CPython 3.6 pymalloc Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
50fb4fd990b54624221be89c5393987d927a19b5bab323d209fc93a94632427c
BLAKE2b-256 checksum
How to use checksums
7a7d9fd69b255c3edb266f73464492ea9822c16ae2a2be926175747a506a081c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / cy_root-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl

Download URL cy_root-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl
Size 4.2 MB
Tags CPython 3.6 CPython 3.6 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
eb2401e088473058112f8af113826ca156942e1579223b6484cb0a8a14001d44
BLAKE2b-256 checksum
How to use checksums
f1c2bd1d352c402ae45789e5b1796656878995a6765c32977c3039133aa8bc54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Security for cy-root 1.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page