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.6: Fixed dead link and typos 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.6.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.6-cp313-cp313-win_amd64.whl (18.5 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

csignum_fast-1.2.6-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.6-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.6-cp313-cp313-macosx_11_0_arm64.whl (15.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

csignum_fast-1.2.6-cp312-cp312-win_amd64.whl (18.5 kB view details)

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

csignum_fast-1.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (102.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

csignum_fast-1.2.6-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.6-cp312-cp312-macosx_11_0_arm64.whl (15.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

csignum_fast-1.2.6-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.6-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.6-cp311-cp311-macosx_11_0_arm64.whl (15.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10Windows x86

csignum_fast-1.2.6-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.6-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.6-cp310-cp310-macosx_11_0_arm64.whl (15.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9Windows x86

csignum_fast-1.2.6-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.6-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.6-cp39-cp39-macosx_11_0_arm64.whl (15.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.8Windows x86-64

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

Uploaded CPython 3.8Windows x86

csignum_fast-1.2.6-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.6-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.6-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.6.tar.gz.

File metadata

  • Download URL: csignum_fast-1.2.6.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.6.tar.gz
Algorithm Hash digest
SHA256 7781e4b29c3f62ffa42252c9b287285d862b49dabe0bd5e54a656c6672157408
MD5 7faf2f3f2c942290a8419d07647b5e1b
BLAKE2b-256 1e44716f6394f13662114ee006077bbeb3eb272f3f78ec0a15351c84a39a2f52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 29aff42c9c70d1302328e53038e6ae3e8fd0d7f9f18737e80bbf83a3782c24ba
MD5 3f12e14cdd3b76dcf45537636a6f272d
BLAKE2b-256 d469d182c61937e7d3dd952fc93f827a7e5e67835421a054c365e45a01d46d4d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 e502b1de414ce6f2a5076b58dda19fee6215f49f7c748691e772d9e96f89f750
MD5 cc616601c123d2344ec25a7a5e8a123e
BLAKE2b-256 455ec59cb7d6e9a705b1bef6c23bd125e0f9aaf7b5cefa5754ffd1c64690bdcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 edf3902dd1560e391645a934dc598f865fa520b661fc886b7092c2cc1be8248d
MD5 2b4bbc3176e3fecf4177425e6171ba2f
BLAKE2b-256 53d5e080ac7e28b896170258dca92e1a3cc07bad03cb13de758bb064820ac01a

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.6-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.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a8929b84867f8491da1a045801b1198fc524bf9be3a90fb175a4c8245453537f
MD5 f680e4a0f853042c301d7868d5dc8b51
BLAKE2b-256 f1304c088c7b7be4c530c0275366cce84f300f723a7fdc161a7c456bf52b9a6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 989b3aa0d206850bbd73e373401e9e1fd2d1fdd88040413a30bde410d0e668b2
MD5 823ba98d90ae3f58e0be5f94fd06604d
BLAKE2b-256 8ebef4fef45850b7b32bbae834097da33ba5b2cc79f81be4db776fda03e997dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bf34fd2225691a96acaec24e44b02f48d3f1e50f695cc606bbbecd9ad7c7847c
MD5 5885c0c50781748bdec588e1f59eb5f2
BLAKE2b-256 cc55764afa39ec47417abc8356e58400151824028488f83943424866d1f16910

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 982f3638ccd1207f65c01d6b0e787d0fbefb14f500a7266c70d543771c6d3bc3
MD5 b3634209f0f20967931bec3ff9ac911a
BLAKE2b-256 deb23c3221b87195e8f266c048eb9bfb9ec3b26a727de08c797cf909463cdf46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c6e29061ff01891d0fbf12e5f554d5a1257bc4b2e9ecdbb507de571b1371e95
MD5 6d1eec5c046bdad22180378157b8f31e
BLAKE2b-256 50a209ef5075d012ec9086d34e29a951ccc3387e36b5cb7593a9abf764ff2592

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.6-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.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 519044fc24a0aa0f2cdb2ec8413769054b1a607d3892b217dbb4270b84949ba2
MD5 e0871da2c440465a315c61227a5d8be2
BLAKE2b-256 77eacb9772df8c871955ac225070304a9cbdf1455c539d1872b64b864e2bfa8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c3de39db395c8620236cccea63c1d6c6fa121bfd4d3a54d94ca1f13afca01ac2
MD5 3fa491de7cc3c4aabcb40c868031b950
BLAKE2b-256 d62d550bbf07103a9c317cbc3ca14424339b468c3ad93a02fce96513aa88cbb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 445f85fd5dc9f9c74d4d191492fa4a14896915d21a96845ba9efd56f1290c4a7
MD5 efae3e292d44d9afde76e0c4ebe04c76
BLAKE2b-256 e0e626c6933db466e83dafe84cdf6a940e259bb86eb07d526a6587084e3ceefc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 267594b0c8cfc2eca3ed80bbc54231f02ea0ffbe0197c5835ba28ae190337b98
MD5 8ef25e61577693570c61066657b37bb5
BLAKE2b-256 331cb70050b82fd7d7dc6b57cac4aff4d6de70ff20762f5800aa67948f5b22ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0341c5c14ec643d0910448f8393eb4acfb2092d785abe6c46e11a4be8373e00f
MD5 f1bfcbdc13a764f19c7f822a69be3194
BLAKE2b-256 37d8677560026241afd1c1d718c2a6128b5d1160061cf27a885d328f4d6faab7

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.6-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.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 73fd2b4f227f56021ee53fa64c041bbc85f64427c12ad7482a4165bc5eefdc03
MD5 e17c77e3270e36acb309d9e34d05db2d
BLAKE2b-256 baf3dfdeb62de0c532b5948def4d93e55a33ab9b5288143d01c810dd57825e73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d23a9d1fc1ed51dab36e733523eb10b62559e688136066e10183283c49046362
MD5 aacc851a9f595c316f25a7b93a0d783a
BLAKE2b-256 953c2156cb7c0a89778ff83d6ed662152091ed6322c52f2304dbec7dd2d75ad1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bdb58f1bc9e7f533705a3a58e24f52641d6910c1c36ee70d02f047bf28525297
MD5 7dc87d34052f45141298a9abf209a155
BLAKE2b-256 5887490a59f796ace25221f32b61133fe2393cc4815833090ba3cc663fedbec0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 33ac827eaff60f20b766110fb6d1951cd3c1f9f6665485de6e08a601aec226f8
MD5 2e0e90b88e126702b0d4dae08515b406
BLAKE2b-256 373eabd815402b2cef406a457470a2ab3b6aac9671c398844091dc86e81fdc10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58efc2d57055bf976b62d365accf8e2d2d5755b9265277f07a1c69338958ed67
MD5 a3c4beac14bed9604fe1af36c83f86a7
BLAKE2b-256 33de21e9b8f586352efe7b31a16ab39355f9e75412a3d7d2b507f2121dbeae9d

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.6-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.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 03be959d47d7511eea889efd85424e6a7733a71fa1e252681faae5fb26d0b643
MD5 9534c8b847c31761acffea70cc76da9e
BLAKE2b-256 708fa1b5c78e8f701bbc42167bc7757d6b649ff7368e7d515e835338a8b72ef6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7058ada383720bc2e63f8d171b6fa173db6e7ba9a47378c816e4559f952e929f
MD5 6f30ab9ddcdfd97776db3f84e6801101
BLAKE2b-256 4c077524b7a313bf60f9b5e7fceadd7c9c5d4f3461abca4645be5beb93672ea3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8ad40c3e1175e1ed74a5073f826dda8be00ecf8cf55530feed8eb15e5784ac75
MD5 7bd3c44cbaee9c4fdf3f6e13196e07e7
BLAKE2b-256 5ca18e77b283d0b7f5a7264d58c49a1405456a5ec2b290ffb11eae0427b4127e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 d30b58fd00d884bb242ca3481266e6a4b858defb1f496eea0caaa3da0d6394b3
MD5 4324f204ed5016e5f48adce230a0588c
BLAKE2b-256 d48f3daecfd8ce001bf5fe17fc48fe3c72f750b52014bcc5a75975b5ea0f0f71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f171fa45db8a838387262e3cad7bce18abf98ecb214d6efbe928fdf8ebf5b107
MD5 dabce5e6a82613587ab1141ff78446a4
BLAKE2b-256 e8fbf5678089838e2abb45369b3aa552b2e57d3d279d812fb10741a82c287851

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.6-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.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b700cefc099870de4393ceaecbae2caa46982e79c5b525a7ac19f26a82452710
MD5 f10cbfd9f854039da21c52c395eb39f6
BLAKE2b-256 9e9c351e10d0280f9a75ef33dc15f47f56edc14d013d519427a75332760dab25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b42977282651ef847ec60b580db9dec602b0b4f6535e08f235ab9bd87628115b
MD5 cd2286a9cfbb57fc659399e6ef5e39cb
BLAKE2b-256 0040b3f06772c829a1ad79e413a34d97e242ac525c48ea1c89e6afb69ade0a32

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2de8f97db7e2c88b87cd157804d461ef15bf2c79611d643c16d4782e0b9ec1eb
MD5 bae69160cd8e62b59443ee3b9d9bb9db
BLAKE2b-256 37d816cd1163c156e6a1671976a9f860f6f26826e1bec24f545c7ec3397d7570

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csignum_fast-1.2.6-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.6-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 38b20c53aab6af2ca097534c87460b4332b2a605efdf878b18e3e5f84fb69177
MD5 7dbd78b25964c5bce4e37c77289343f9
BLAKE2b-256 e26bfbaf4d2e53b46d3fbd007e75f719e82191701bb222c4690642e5bb3fab4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78a2787c22d886232043fda402ebf5392ed29efc61e17ba6ef66c7fcda15a565
MD5 8905cd8e239fd3e4f41b072b6edbda40
BLAKE2b-256 83564d8360d81f3fb04024fd3f65494133ef1a22da715a52483d7f3642365520

See more details on using hashes here.

File details

Details for the file csignum_fast-1.2.6-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.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0249499402b61a1dcbf21697a26e43dcb27cb162d4545a0ef43283517188172e
MD5 0a42f28e5b335b561b720416179ea397
BLAKE2b-256 aaaaae6a6e75257f6a337a3e02824aa791c597bccaf40f4ee3c27ebe7ee85d41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csignum_fast-1.2.6-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2690182057d3937f7f89e5d6fb114d249fbbf4403de4a21e2b36fc8f236dc98a
MD5 0c60bec83e1adee7f44606ba9b17fd48
BLAKE2b-256 e313ac49958163483babce36aa538e2868885be4925ae52a11931b37df6d0b89

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