Skip to main content

High-performance, versatile implementation of the universal 'sign' function for Python

Project description

csignum-fast

Python Version License Status Performance Tests PyPI Version

High-performance, versatile implementation of the universal 'sign' function for Python

Released on February 24, 2026Gold Edition+

Version 1.2.5: Fixed dead link in docs for v1.2.3.

Version 1.2.3: Preview of two new options from the upcoming version v1.3.1.

  • codeshift as the second positional argument;
  • the simplified fastsign that is up to 1.5 times faster than sign but has no additional options.

Important Note on API Changes

Starting from v1.2.3, the codeshift parameter is preferred as a second positional argument. Using codeshift= as a keyword will trigger a DeprecationWarning and is scheduled for removal in August 2026. This change improves performance and aligns with the upcoming v1.3.1 architecture.

Notes on fastsign

Since v1.2.3, the fastsign(x) function is provided for scenarios where performance is critical.

  • Performance: fastsign(x) provides up to 50% performance boost by simplifying type checks and focusing on core numeric types.

  • Implementation: It is a straightforward C++ port of the fastsign.py prototype. While the Python version uses 4 lines of logic and 17 lines of exception handling, the C++ version is optimized for even tighter execution loops.

  • Implicit Conversion: To process unusual cases, fastsign relies on implicit float(x) conversion. If an incompatible type is passed (like None or a list), you may see a generic TypeError: must be real number. This is expected behavior.

  • Strict vs Fast:

    • sign(x) is a strict analyzer. It performs thorough type checking and is recommended for “wild” data where objects might have incomplete numeric implementations.

    • fastsign(x) is an optimized calculator. It is ideal for large arrays of standard numbers.

    • Validation: The reliability of fastsign is verified by 53 equivalence tests, ensuring it matches sign(x) results in 52 cases. The equivalence is checked for all standard Python numeric types, including int, float, Fraction, Decimal, and sympy numbers. The single exclusion is a specific edge case: a custom type that lacks comparisons but supports conversion to float.

Key Features

  1. Uniform Results: Always returns only -1, 0, or 1 as an int for valid numeric comparisons.
  2. Correct Edge Case Handling:
    • sign(+0.0) and sign(-0.0) return 0.
    • sign(inf) returns 1, sign(-inf) returns -1.
    • For any NaN (float NaN, Decimal NaN, etc.), it returns math.nan (float).
  3. Comprehensive Duck Typing: Delegates comparisons to the argument's class. Works seamlessly with:
    • Built-in int (including arbitrary-precision), bool, and float.
    • fractions.Fraction and decimal.Decimal.
    • Any existing and future objects that support rich comparisons with numbers.
  4. Informative Error Handling for Easy Debugging: Provides clear, descriptive TypeError messages when passed non-numeric, non-scalar, or incomparable arguments.
  5. ⚡ High Performance: Branch-optimized C++20 core; METH_FASTCALL argument scan; static module-level constants. The speed is near maximum for a C++ extension for Python: since v1.0.0 all possibilities to increase performance have been systematically searched and applied.
  6. ✅ Thoroughly Tested: Tested on 263 cases including different types, edge cases, new custom class, keyword and inappropriate arguments. Also tested: memory leaks, and benchmarking against older versions.
  7. ✨ Pre-processing Engine: Use the preprocess keyword argument to transform input before calculation or trigger an Early Exit (recursion permitted).
  8. 🛡️ Exception safety: The if_exc keyword argument allows to define a fallback value (like None, math.nan, or -2) instead of crashing on invalid types.
  9. ✨ 5-way uniform result: Use the codeshift argument to encode all 5 possible sign exits (TypeError, -1, 0, 1, NaN) by subsequent integers for switching or indexing.

Installation

pip install csignum-fast

Standard Usage

sign

from signum import sign # Obligatory for all examples

print(sign(-10**100))       # -1
print(sign(3.14))           #  1
print(sign(float('-nan')))  # math.nan

from decimal import Decimal
print(sign(Decimal("0.0"))) #  0

fastsign

from signum import fastsign

print(fastsign(-10**100))       # -1
print(fastsign(3.14))           #  1
print(fastsign(float('-nan')))  # math.nan

from decimal import Decimal
print(sign(Decimal("0.0"))) #  0

The following advanced features are not available in fastsign.

Advanced Usage (New features since v1.1.0)

☢️ Attention: Contract Programming!

For Performance reasons, keyword argument values are not checked by the sign function. Your responsibility is:

  • To pass a callable for preprocess (accepts one argument, returns None or a tuple).
  • To pass a tuple for if_exc.
  • To pass an int for positional or keyword codeshift.
  • To guarantee that all calculations implied by these arguments do not result in additional exceptions or crashes.

Passing incorrect values to these parameters may result in unpredictable behavior or segmentation faults.

⚡ Custom Pre-processing with preprocess

With preprocess keyword argument, you can pass a callable to transform the input. (Default: preprocess=None without preprocessing).

The callable will be called with the positional argument of sign. It must support a special return protocol:

  • Return None: sign proceed with usual calculation.
  • Return (value,): sign proceed with calculation using value as an argument. Why a tuple? Use (None,) to return None as a value (usually raises TypeError).
  • Return (any, result): Early Exit. Immediately return result as the final answer of sign; any is ignored.
from signum import sign # Obligatory for all examples

# Convert str to float; uses lambda as callable
sign('5.0', preprocess=lambda a: (float(a),)) # Returns 1 instead of `TypeError` exception

# Treat small number as zero through argument replacement only
EPS = 1e-9
sign(-.187e-17, preprocess=lambda a: (0 if abs(a) < EPS else a,)) # Returns 0 (instead of -1)

# Treat small number as zero through argument or result replacement; uses variable as callable
ppf1 = lambda x: (x, 0) if abs(x) < EPS else (x,)
sign(-.187e-17, preprocess=ppf1) # Returns 0 (instead of -1)

# Extract the first number from string, replacing only string argument; supplies function as callable
import re
numeric_finder = re.compile(r"[-+]?(?:\d+\.\d*|\.\d+|\d+)(?:[eE][-+]?\d+)?")

def n_extract(s):
    if isinstance(s, str):
        match = numeric_finder.search(s)
        return (float(match.group()),) if match else None
    return None

sign("☠️15 men on the dead man's chest☠️", preprocess=n_extract) # Returns sign(15) == 1

# Do you want sign(complex) instead of `TypeError` exception?
def c_prep(z):
    if z == 0 or not isinstance(z, complex): return None
    # complex z != 0
    return (0, z/abs(z))

sign(-1+1j, preprocess=c_prep) # Returns (-0.7071067811865475+0.7071067811865475j)

# numpy flavor: float result for float or Decimal argument; uses recursive call of sign
from decimal import Decimal
ppf2 = lambda a: (a, float(sign(a))) if isinstance(a, (float, Decimal)) else None
sign(-5.0, preprocess=ppf2) # Returns -1.0 instead of -1

🛡️ Exception Safety with if_exc

With this keyword, you can avoid try-except blocks. If sign() encounters an incompatible type, it will return your fallback value instead of raising a TypeError. if_exc should be a tuple that permits you to pass None as the fallback value through if_exc=(None,). (Default if_exc=None is totally different).

from signum import sign # Obligatory for all examples

sign("not a number", if_exc=(-2,)) # Returns -2 instead of `TypeError` exception

You can use two keyword arguments at once

With preprocess, you replace arguments (or even results) in specific cases, while if_exc prevents exceptions for all that remains.

Comfortable 5-way processing with codeshift argument

When innocent people lived in the heavenly world of pure mathematics, the sign function was ternary. The results were -1, 0, +1.

In the meantime, people entered the real world and started programming. In the real world, there is the IEEE 754 standard, which describes the tricky number NaN, that is, ‘Not a Number’. Any function of NaN, according to the rules of good taste, should return NaN.

In the real world, programmers make mistakes. Worse, completely inappropriate data can be caught in endless streams of those. Then the function — alas — stops calculating with an error message.

In the real world of confusing standards and distorted data, our divine ternary sign function has become quinary (5-way).

You cannot process the five possible results of sign uniformly.

To catch an error, you need to write an indecently multi-layered construction try: ... sign(...) ... except TypeError as e: ....

To catch NaN, you need to write if isnan(sign(...)):.

Only the usual results -1, 0, 1 do not cause any trouble: a cascade of if ... elif ... else with checks for ==, or match ... case ... solve the problem.

The second positional argument codeshift converts sign into a uniform 5-way switch. All 5 possible sign results are encoded as integers: TypeError and any other exception becomes -2; -1, 0, 1 remain unchanged; NaN is encoded by 2. The value of the codeshift argument, which must be an integer, is added to this code, and the resulting number is returned as the result. (Default is None: usual processing).

In previous version, codeshift was a keyword argument. This is deprecated and will be removed in August 2026.

The easiest way to continue is to use the match ... case ... operator. You can also use the result as an index.

Everything aforementioned is summarized in the table:

Quinary way of signum.sign() through codeshift

Argument Std result sign(x, 0) sign(x, 2)
Invalid TypeError -2 0
Negative -1 -1 1
Zero 0 0 2
Positive 1 1 3
NaN math.nan 2 4

Code Patterns: One Ring Switch to Rule Them All

# The golden match
from signum import sign # Obligatory for all examples

match sign((d := data_input), 2):
    case 0: handle_error(d)
    case 1: handle_negative(d)
    case 2: handle_zero(d)
    case 3: handle_positive(d)
    case 4: handle_nan(d)

# Indexing pattern
function_list = [handle_error, handle_negative, handle_zero, handle_positive, handle_nan]
function_list[sign((d := data_input), 2)](d)

Interaction with other arguments

If there is the if_exc argument, it takes precedence over codeshift: instead of an exception, the if_exc value is returned unchanged. codeshift is applied in the remaining four cases (the results -1, 0, 1, and NaN).

The interaction between preprocess and codeshift is similar. If preprocess returns None or a tuple with one element (x,), then everything goes as usual: codeshift is not about the argument, but about the result. If preprocess returns a tuple with two elements (x, y), it takes precedence over codeshift, and unchanged y is returned as the result.

The general principle is “an explicitly specified special case overrides a more general option”. if_exc is only applicable to exceptions, while codeshift is applicable to all results in general, so codeshift has a lower priority. The same applies to preprocess returning a tuple of length 2: it defines a single specific outcome, which takes precedence over what intercepts and shifts all results and even “no-results”.

Why Gold Edition? (v1.2.2)

The Quinary Revolution

  • New codeshift Argument: The headliner of v1.2.0+. It enables effortless 5-way logic (TypeError, -1, 0, 1, NaN) without extra Python-level overhead.

Evolution of Speed (15.9% faster than v1.1.5, 7.1% faster than v1.0.2)

  • New in v1.2.2: CPython FastCall. Migration to METH_FASTCALL. This eliminated the overhead of using temporary tuple and dictionary for argument parsing.
  • New in v1.2.2: Static Object Caching. The comparison base (Python int(0)) and all keyword names are now static C-objects, pre-allocated at module load time.
  • Since v1.1.0: Branchless Logic Remastered. The optimized cascade of ternary switches replaced the bulky 27-way switch.
  • Since v1.0.0: Branchless Logic. Our state index allows the CPU to execute core logic in a linear pipeline without conditional branching even when handling edge cases and type errors.

📊 Performance & Quality Assurance

Benchmark Results

Gold Edition v1.2.2 delivers a 15.9% performance boost over v1.1.5 and is 7.1% faster than the original v1.0.2, despite the significantly expanded feature set. Detailed metrics are available in the “Benchmarking” section in README for tests.

Note: Benchmarking scripts require psutil (for priority management) and sympy (for sympy numeric types and NaN validation).

Reliability

  • Memory Safety: Verified with rigorous stress test (0 bytes leaked over 9M iterations).
  • Expanded Test Coverage: 210 validation cases (vs 57 for v1.0.2 and 94 for v1.1.0+), plus 53 cases testing equivalence of sign and fastsign (total 263 cases).
  • Strong design principles: See the PRINCIPLES file for details.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Author

Alexandru Colesnicov: GitHub Profile

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

csignum_fast-1.2.5.tar.gz (32.4 kB view details)

Uploaded Source

Built Distributions

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

csignum_fast-1.2.5-cp313-cp313-win_amd64.whl (18.4 kB view details)

Uploaded CPython 3.13Windows x86-64

csignum_fast-1.2.5-cp313-cp313-win32.whl (17.5 kB view details)

Uploaded CPython 3.13Windows x86

csignum_fast-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (109.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

csignum_fast-1.2.5-cp313-cp313-macosx_11_0_arm64.whl (15.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

csignum_fast-1.2.5-cp312-cp312-win_amd64.whl (18.4 kB view details)

Uploaded CPython 3.12Windows x86-64

csignum_fast-1.2.5-cp312-cp312-win32.whl (17.5 kB view details)

Uploaded CPython 3.12Windows x86

csignum_fast-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (109.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

csignum_fast-1.2.5-cp312-cp312-macosx_11_0_arm64.whl (15.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

csignum_fast-1.2.5-cp311-cp311-win_amd64.whl (18.4 kB view details)

Uploaded CPython 3.11Windows x86-64

csignum_fast-1.2.5-cp311-cp311-win32.whl (17.4 kB view details)

Uploaded CPython 3.11Windows x86

csignum_fast-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (109.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

csignum_fast-1.2.5-cp311-cp311-macosx_11_0_arm64.whl (15.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

csignum_fast-1.2.5-cp310-cp310-win_amd64.whl (18.4 kB view details)

Uploaded CPython 3.10Windows x86-64

csignum_fast-1.2.5-cp310-cp310-win32.whl (17.4 kB view details)

Uploaded CPython 3.10Windows x86

csignum_fast-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (109.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

csignum_fast-1.2.5-cp310-cp310-macosx_11_0_arm64.whl (15.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

csignum_fast-1.2.5-cp39-cp39-win_amd64.whl (18.4 kB view details)

Uploaded CPython 3.9Windows x86-64

csignum_fast-1.2.5-cp39-cp39-win32.whl (17.4 kB view details)

Uploaded CPython 3.9Windows x86

csignum_fast-1.2.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (109.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

csignum_fast-1.2.5-cp39-cp39-macosx_11_0_arm64.whl (15.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

csignum_fast-1.2.5-cp38-cp38-win_amd64.whl (18.3 kB view details)

Uploaded CPython 3.8Windows x86-64

csignum_fast-1.2.5-cp38-cp38-win32.whl (17.4 kB view details)

Uploaded CPython 3.8Windows x86

csignum_fast-1.2.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (109.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

csignum_fast-1.2.5-cp38-cp38-macosx_11_0_arm64.whl (14.8 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file csignum_fast-1.2.5.tar.gz.

File metadata

  • Download URL: csignum_fast-1.2.5.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5.tar.gz
Algorithm Hash digest
SHA256 854c2149921f2be133c134e4a5e0e9318f5f1644ba782c27a6efa325c7b6b344
MD5 4aff0699975bd4c9bf29fdc192759a20
BLAKE2b-256 059950401dd4cfdbc3da728ad9b1c5fdaea1f90c1d9e74e2d1e3b19ca5a00405

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1beb6cb8dd062e01f32050f430a429c52cd03870cb17f57e12131427a9fde368
MD5 74abaacbd48c61735f41e7c1c8a37c2f
BLAKE2b-256 187a5fd2b1412be70c3393c03ad14c374f0d6b2eb6e5d306096ee8d4745050d6

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp313-cp313-win32.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp313-cp313-win32.whl
  • Upload date:
  • Size: 17.5 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 3ffc626f18bea4aa4ab3dc956709451b42d76f4f2b276365511a87a1756fd820
MD5 c0d0951ce3fcf8ba425c0bc2c97b8ba8
BLAKE2b-256 091b305f50f8ac29b850f6b8a3e5df7b05bc89e88ef4aef1de15a3463e81f7bc

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e4a92e223ea1afea44768fd855a9664f11bc96512dae82f28e8b72b175a96196
MD5 44a9f899eb3bba61c35992c789528ef9
BLAKE2b-256 0a8badfebfa40916d12c91b9cfdcfd30355d0d26d29de7a55696623a649e0567

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7955cb0880645f3a1aa5af70d24434307dedaea36f1b5ba11c4aa4aab1e87541
MD5 5a74219590d9e7724fc62bdf7db47d2e
BLAKE2b-256 142ac58e7604bfad6971c4bd2fb1328375b49ac4cefdbc1f4e1a3ae331c3e94c

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a0088de6b95efe20d272f16a9db4cd24b712d0fd848e23834415607880b9e24
MD5 4ccaa4635b747b87c2e63d70e20c105d
BLAKE2b-256 66f424ec1a8234676ed3849d08d6b28b7a46ffe4b5c03a72c852579ec893ffbe

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0eb3f2765dc8d25414934c20fd1b0eec2e1180c2223acd20998913b349c00273
MD5 0f4eeb545c5b23380565eabadcb0c82c
BLAKE2b-256 2399140cb26c134898fb217a9321de7d9c8b62a9b7bba27efaa8c6a923ac2cfe

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp312-cp312-win32.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp312-cp312-win32.whl
  • Upload date:
  • Size: 17.5 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 514892d1faf5ddf460a3c4887763acd29cb3d5fce4b77973bca5e949a3032380
MD5 763135b7ab7ab3b23528e499c810e197
BLAKE2b-256 08af6f7c404c70412fb59ac80a106b9955e9c1166b7dc4be4d2e6ec7f3799533

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a37b681dd81ae4309cb7197e6cacca3896aff12f2e0b67f6bf31c4d44aa7cc6b
MD5 b34477b16f261adfd64fefcf95bea469
BLAKE2b-256 35435e63a574e7b8627e03778236b2111df47daa70279fe044641233c4b29fdc

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 29b8bc0894b549d572bc7dc4dc1f86396a34f1d4cffda8ef161d360ef2e0d77f
MD5 ef00cde3e5bfa272eaf9e11571df5bdf
BLAKE2b-256 0d28e68e338e7e56b6411eca8648279ac1d6872d3c3ac49357228d3a60624b9a

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 916859d6d1d2803f6e7df5523790f1f6dd05f9d3394b5ec288a62699581b4052
MD5 8f4cb4891dc30b32beb602a930a81e0c
BLAKE2b-256 a8ceda6e459dc4693cc3d07fe75e6f7b2f0a336acee355580d4af726fceea26f

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fe189c78532332de02dd3f3cc587754a41a22f700f1348f7eb1f680c9112c845
MD5 e64c229cbf9f03ab59c5e9ac0ffa2607
BLAKE2b-256 a95edeb2b4af2779ec1d0a25c97e3728493bc803e807d0d775592ff6c0e04046

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp311-cp311-win32.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp311-cp311-win32.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 090c1c326f8029ecbb055a0fda360ef47323d713bcd0345e33a0063b1ed22cd2
MD5 74356ff32367d29d137d449b576790d8
BLAKE2b-256 8af55386a0d15c575cce949608f7da7ece8f6ee44f20d32275d09c0c6361b510

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f99369f02838767b1bb9cfc3ef0fd6faee4ab55cbc3ff779a7ff89e6e4a1f2b4
MD5 178c7939537656ca660a774ec957957b
BLAKE2b-256 3d3c791c5a9f6ecc9ce312b3939ebe27fcb83cb5fbf431e3a3d0755361646fe7

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 aaf30127b50925bc30597cdce472d9c92ac3d8f9ad0651fe5a5db15530bc3e71
MD5 4e7b3727c46c076af802e78cd970fba7
BLAKE2b-256 1dbc8b203ff7944a2a08018d31e42486aae59178d08d08dbbeaf6d5d27aaa90f

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c134279af98336cfcaeca58fa26318dc10a1b888d12f1ce6920b469dbc3b96ad
MD5 3f600b5b57ba94b7bdac3e84c806449a
BLAKE2b-256 7d1d1d856ece69a1d995bddb6d92ca25e630c114e14579e8319d9754a66f90b6

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b06d217a2db8e43ec42d24e2651b26a93faa10bc85579056cc72273d20ce1e11
MD5 8998b361b0b136cd18a9a039252130fe
BLAKE2b-256 6935079d3a2aa6e07b8115e5f38b841948bee788e99760dd6e7c61dc170ede23

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp310-cp310-win32.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp310-cp310-win32.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 5442adf56427f217dfffb306a7d670232b9c1aada382874699088e36a79953d3
MD5 1dbb3dbac1e88633906725800e63b2cb
BLAKE2b-256 636578db0c9b2b73cb632e9c573d82f09a36cea2adf36d8012925ac6bdfa7925

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f768938d96230b0fcf7b766f5bd23e325b46774611eec0cf6336dad608c79a4
MD5 2a719f4904e2bdbf0e94c7202b2bc790
BLAKE2b-256 3115fbb38614902f35d307913bf2e8bede0387771569d915b83d041e83b98592

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 853ef2f3dba5afe101db4a590704d883c1c699dd7cc14f4e258fc837cd8148a4
MD5 398413bfd0ae8eb9e5fb03aa3607431d
BLAKE2b-256 e4229843e3008590842cbfad9158fa7fdf1f773627cfd97fadf7f108aae5bb7c

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 639a31c119893f13c1557c0c834e7bc8d539a8b124854281cb02e3c40e8fc54e
MD5 6fce845dfe211eaf9b3133cae0282175
BLAKE2b-256 6b65c27be8023a953dfbffb4ba2eb6b92252746e0c09d527c1a74d978cde7c2d

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 962def53d8bd5ebf587d71001ca59a4c2af39e5e7f6afe6ee66a07e69b34189f
MD5 cdb61e14aa387890f07844c2a1a17fa1
BLAKE2b-256 46a66341b1de9340360c02e6854345754251905263c2aa9670d23f7eebe7ea04

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp39-cp39-win32.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp39-cp39-win32.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 19a9d8cfd628890ca0fd6e1936a0fafdf48b77ad308e3ece0b1c5b30612e5af3
MD5 2a4fbb69972db65f1c8dd514f30c17bb
BLAKE2b-256 9f0cb8c428fbf3dfd848f30f52bedb6390484dd075e031d92168c860ae2a2544

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6bef1921941ef7dc24a137b0a7806150b28dc70640f203c4b71d78c9b85f8bc1
MD5 4df27491b95805ebd45d7d50f959bc83
BLAKE2b-256 e9bd98387a5d4eb911c195ffe6dc1ccafc225b4c4d5f0d86185af9d861e51085

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 06a1a3a34291da17559be425ad9298ada3b50b7840c55687ef3b75bef20b2b77
MD5 5a1bb12c7e5682448deda40229f2e7d9
BLAKE2b-256 ea317693dbd75954698428d802c301bf1a992274bf10034b365ffc65163f2acc

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d0a5bfe55a7dca1f76a84cdb9f91607ebfc3f03fbb0eb78e5197a3ab0490e93
MD5 0dc787d9a485d0b0a2b4db270697a033
BLAKE2b-256 0f45f35ac374a81b7168d08a73a3947b4c8939ec2c1651f1307186ccb7010180

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 34a5eab850f4f48ceab684c4f30acb5c66bb31998b5e8d61d585612424571827
MD5 ccf9d9c7871e13fd70bea4a72509f6a2
BLAKE2b-256 fe46b484cbcb1e71e6118cedb801a740092b0d4d3e3fc09d354096c866b74edb

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp38-cp38-win32.whl.

File metadata

  • Download URL: csignum_fast-1.2.5-cp38-cp38-win32.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csignum_fast-1.2.5-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 26b3f4df347b987e023b904613719ff125462ced326d027832b52562dcc54001
MD5 9a09e8a57f9a4f516ed8d35075f87e6c
BLAKE2b-256 ce9b245f35b6ae442a47ad3607b508fee65d5e422d787a25ce803e9acfe66467

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e25744e3de8e1a9d2f95125470ef115ac5a16afc6699ff5d789631b2d8f53795
MD5 93a5e33c380a06948abbcdff6a31a91f
BLAKE2b-256 f2a6ae9687e5e4c9035d8a7ae7fa4015f22971e2f9d69ea962e69f8a2b762af2

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3098d8606a6fa5c9e08f453400f2e4c7913c289949742531516e50e4e076b0ce
MD5 9159ea7e36e40d5d6f66b0d8e7f880b8
BLAKE2b-256 48efac15717dccb2574a872bb913b391b94e9ee6bf6d396b43c2b54a0b535d9d

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.5-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csignum_fast-1.2.5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3156ec1c95a90945f2a4fd3c3a86869bb21dafb5f559e6ab536f22656b325407
MD5 a8b58978c71f6a3ef25dc101b418f14c
BLAKE2b-256 8b9072d3e71eca381eac29633975835b2f5c1728fb3202c028b5521807449f47

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