Skip to main content

No project description provided

Project description

Entropy Coders for Research and Production

The constriction library provides a set of composable entropy coding algorithms with a focus on correctness, versatility, ease of use, compression performance, and computational efficiency. The goals of constriction are three-fold:

  1. to facilitate research on novel lossless and lossy compression methods by providing a composable set of primitives (e.g., you can can easily switch out a Range Coder for an ANS coder without having to find a new library or change how you represent exactly invertible entropy models);
  2. to simplify the transition from research code to deployed software by providing similar APIs and binary compatible entropy coders for both Python (for rapid prototyping on research code) and Rust (for turning successful prototypes into standalone binaries, libraries, or WebAssembly modules); and
  3. to serve as a teaching resource by providing a variety of entropy coding primitives within a single consistent framework. Check out our additional teaching material from a university course on data compression, which contains some problem sets where you use constriction (with solutions).

More Information: project website

Live demo: here's a web app that started out as a machine-learning research project in Python and was later turned into a web app by using constriction in a WebAssembly module).

Quick Start

Installing constriction for Python

pip install constriction~=0.5.0

Hello, World

You'll mostly use the stream submodule, which provides stream codes (like Range Coding or ANS). The following example shows a simple encoding-decoding round trip. More complex entropy models and other entropy coders are also supported, see section "More Examples" below.

import constriction
import numpy as np

message = np.array([6, 10, -4, 2, 5, 2, 1, 0, 2], dtype=np.int32)

# Define an i.i.d. entropy model (see below for more complex models):
entropy_model = constriction.stream.model.QuantizedGaussian(-50, 50, 3.2, 9.6)

# Let's use an ANS coder in this example. See below for a Range Coder example.
encoder = constriction.stream.stack.AnsCoder()
encoder.encode_reverse(message, entropy_model)

compressed = encoder.get_compressed()
print(f"compressed representation: {compressed}")
print(f"(in binary: {[bin(word) for word in compressed]})")

decoder = constriction.stream.stack.AnsCoder(compressed)
decoded = decoder.decode(entropy_model, 9) # (decodes 9 symbols)
assert np.all(decoded == message)

More Examples

Switching Out the Entropy Coding Algorithm

Let's take our "Hello, World" example from above and assume we want to switch the entropy coding algorithm from ANS to Range Coding. But we don't want to look for a new library or change how we represent entropy models and compressed data. Luckily, we only have to modify a few lines of code:

import constriction
import numpy as np

# Same representation of message and entropy model as in the previous example:
message = np.array([6, 10, -4, 2, 5, 2, 1, 0, 2], dtype=np.int32)
entropy_model = constriction.stream.model.QuantizedGaussian(-50, 50, 3.2, 9.6)

# Let's use a Range coder now:
encoder = constriction.stream.queue.RangeEncoder()         # <-- CHANGED LINE
encoder.encode(message, entropy_model)          # <-- (slightly) CHANGED LINE

compressed = encoder.get_compressed()
print(f"compressed representation: {compressed}")
print(f"(in binary: {[bin(word) for word in compressed]})")

decoder = constriction.stream.queue.RangeDecoder(compressed) #<--CHANGED LINE
decoded = decoder.decode(entropy_model, 9) # (decodes 9 symbols)
assert np.all(decoded == message)

Complex Entropy Models

This time, let's keep the entropy coding algorithm as it is but make the entropy model more complex. We'll encode the first 5 symbols of the message again with a QuantizedGaussian distribution, but this time we'll use individual model parameters (means and standard deviations) for each of the 5 symbols. For the remaining 4 symbols, we'll use a fixed categorical distribution, just to make it more interesting:

import constriction
import numpy as np

# Same message as above, but a complex entropy model consisting of two parts:
message = np.array([6,   10,   -4,   2,   5,    2, 1, 0, 2], dtype=np.int32)
means   = np.array([2.3,  6.1, -8.5, 4.1, 1.3], dtype=np.float32)
stds    = np.array([6.2,  5.3,  3.8, 3.2, 4.7], dtype=np.float32)
entropy_model1 = constriction.stream.model.QuantizedGaussian(-50, 50)
entropy_model2 = constriction.stream.model.Categorical(
    np.array([0.2, 0.5, 0.3], dtype=np.float32), # Probabilities of the symbols 0,1,2.
    perfect=False
) 

# Simply encode both parts in sequence with their respective models:
encoder = constriction.stream.queue.RangeEncoder()
encoder.encode(message[0:5], entropy_model1, means, stds) # per-symbol params.
encoder.encode(message[5:9], entropy_model2)

compressed = encoder.get_compressed()
print(f"compressed representation: {compressed}")
print(f"(in binary: {[bin(word) for word in compressed]})")

decoder = constriction.stream.queue.RangeDecoder(compressed)
decoded_part1 = decoder.decode(entropy_model1, means, stds)
decoded_part2 = decoder.decode(entropy_model2, 4)
assert np.all(np.concatenate((decoded_part1, decoded_part2)) == message)

You can define even more complex entropy models by providing an arbitrary Python function for the cumulative distribution function (see CustomModel and ScipyModel). The constriction library provides wrappers that turn your models into exactly invertible fixed-point arithmetic since even tiny rounding errors could otherwise completely break an entropy coding algorithm.

Exercise

We've shown examples of ANS coding with a simple entropy model, of Range Coding with the same simple entropy model, and of Range coding with a complex entropy model. One combination is still missing: ANS coding with the complex entropy model from the last example above. This should be no problem now, so try it out yourself:

  • In the last example above, change both "queue.RangeEncoder" and "queue.RangeDecoder" to "stack.AnsCoder" (ANS uses the same data structure for both encoding and decoding).
  • Then change both occurrences of .encode(...) to .encode_reverse(...) (since ANS operates as a stack, i.e., last-in-first-out, we encode the symbols in reverse order so that we can decode them in their normal order).
  • Finally, there's one slightly subtle change: when encoding the message, switch the order of the two lines that encode message[0:5] and message[5:9], respectively. Do not change the order of decoding though. This is again necessary because ANS operates as a stack.

Congratulations, you've successfully implemented your first own compression scheme with constriction.

Further Reading

You can find links to more examples and tutorials on the project website. Or just dive right into the documentation of range coding, ANS, and entropy models.

If you're still new to the concept of entropy coding then check out the teaching material.

Contributing

Pull requests and issue reports are welcome. Unless contributors explicitly state otherwise at the time of contributing, all contributions will be assumed to be licensed under either one of MIT license, Apache License Version 2.0, or Boost Software License Version 1.0, at the choice of each licensee.

There's no official guide for contributions since nobody reads those anyway. Just be nice to other people and act like a grown-up (i.e., it's OK to make mistakes as long as you strive for improvement and are open to consider respectfully phrased opinions of other people).

License

This work is licensed under the terms of the MIT license, Apache License Version 2.0, or Boost Software License Version 1.0. You can choose between one of them if you use this work. See the files whose name start with LICENSE in this directory. The compiled python extension module is linked with a number of third party libraries. Binary distributions of the constriction python extension module contain a file LICENSE.html that includes all licenses of all dependencies (the file is also available online).

What's With the Name?

Constriction is a library of compression primitives with bindings for Rust and Python. Pythons are a family of nonvenomous snakes that subdue their prey by "compressing" it, a method known as constriction.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

constriction-0.5.0-cp314-cp314-win_amd64.whl (306.9 kB view details)

Uploaded CPython 3.14Windows x86-64

constriction-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (406.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

constriction-0.5.0-cp314-cp314-macosx_11_0_arm64.whl (378.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

constriction-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl (389.2 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

constriction-0.5.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (745.2 kB view details)

Uploaded CPython 3.14macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

constriction-0.5.0-cp313-cp313-win_amd64.whl (305.3 kB view details)

Uploaded CPython 3.13Windows x86-64

constriction-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (405.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

constriction-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (375.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

constriction-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl (387.0 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

constriction-0.5.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (740.4 kB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

constriction-0.5.0-cp312-cp312-win_amd64.whl (305.5 kB view details)

Uploaded CPython 3.12Windows x86-64

constriction-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (405.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

constriction-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (375.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

constriction-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl (387.2 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

constriction-0.5.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (740.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

constriction-0.5.0-cp311-cp311-win_amd64.whl (306.8 kB view details)

Uploaded CPython 3.11Windows x86-64

constriction-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (410.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

constriction-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (379.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

constriction-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl (381.9 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

constriction-0.5.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (740.5 kB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

constriction-0.5.0-cp310-cp310-win_amd64.whl (306.7 kB view details)

Uploaded CPython 3.10Windows x86-64

constriction-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (410.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

constriction-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (379.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

constriction-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl (381.8 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

constriction-0.5.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (740.1 kB view details)

Uploaded CPython 3.10macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file constriction-0.5.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 28c3d737d75e2af593f707fc0320a232a790a69ab60ed6beeaa6baa8a08d8cef
MD5 32868c7f51584ddb72844b6c4971ab47
BLAKE2b-256 f47b9a12b0eac13b1d161319e99d5e1743cca66eec365c9aa75b7aff91c944d5

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e25e26f01afbb51fafb6593856d4d0d7f9486ab50c450fd8568f2743f81fd9be
MD5 2c61586da6355a7d41f9da38c315845b
BLAKE2b-256 8a7d767130bc6d9bd11c21d13db90bdc6aea7e2f4aad855492db28e36ec68ffb

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 daeac125e23505d859c2591bbc3287aa0d82205ae3fb92463989ed8157d954cb
MD5 2e8332b4e97339ef9c991305e87bd9e6
BLAKE2b-256 d0f5c584e1985fd8b530bf1fa72f2cd0ad0ab72a830b29560023a1457618ea07

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 46cc636d06f67cb4b6f4dfb1efcb15123d045263b32645c5ced9bbef42de2b2a
MD5 0c0d9b14064a8f2d93923d7078433167
BLAKE2b-256 e47223ba42295a674024c08c87ecf5c04e3892339dc5fc53782bb44028f15a73

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 c182ba2d82b93a4219f3494efd26cb0c87f865fc3d47645d7a62682f962caa99
MD5 1718fb95557589cc8515e88b5ee7b4c5
BLAKE2b-256 d906c52aa018be1cce58678c52c00527692163244a577a2a53f3921f7a26da6f

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b9a535c33b204d2ee5b02127a52c673fe491f296abd8638649e8af45868fb21e
MD5 83f9714df074b8a5ae2dd82498c52dff
BLAKE2b-256 8ced7133cf387e667407209e0a246d9bd2e0c2f8654426b27d83cd62119b1207

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 345e6e9edc30fb1dfb0e35fadf6ba84e437f177a34e6a9250a56d5e00ae945f9
MD5 e1256ffe9574204938bb993980fa41dd
BLAKE2b-256 add3a9a57d4fd8be519db6fac72ccb2bcd94f34e17dd14e3313bcc649e645a17

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 424aa962db200d80f04b03b1f6b7076ec56d5f1a653eaa0535ccd5eb60328eaa
MD5 e4747504b40fbd89c8694024852da621
BLAKE2b-256 57ef4b1e733307cb5927cf5fc4e18c950d8f34735affe450298aedc47f5b6c1b

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e54fe30470f91a93e6126a339c41b339069f85a95b7d20154f21c4d051a712d4
MD5 714a056931af5a7d105a29eddb2c9801
BLAKE2b-256 757b90f345d7d78d51648a16e2cf1ca16275973eac36fe81937c9219305dc5cf

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 10d5299e2df56cb116db62a8ec291b157d648821e05ddc65d2ce629b033b49cb
MD5 96bbbecee8f995a76027f6174fbf52e7
BLAKE2b-256 d34b1f4e93b935094dec6b8c510d90b8701b0eb44b0db531cef7f24e7228d32d

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f541190e373393c611b0049fffddc197274a66741e75172ff32eb481cc433939
MD5 37333802b263a04a4fe35c9b1a39713d
BLAKE2b-256 4e3c866fc7f84c0121c9d1b2aaec2b8572c7760d895f0884698d6dc725d7e72e

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d74dbfb7f0d413862df31cb634759bd49ffa307f36948ed6ffa6c5f66ac9af0b
MD5 7527ec47d3f07c09cb27c3a03164b6bb
BLAKE2b-256 2a2f5b652525e6ae6e09c574a86b1e07cf50d9c2def834f49d55f5ddd7a4e4d6

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5474c99c7ecbd9d64de975f08b5571303bc1cb9d2544cc70e6925dd3a7713be6
MD5 34bff8866f4ca0b087a1b4943227d951
BLAKE2b-256 90ff934d6b59fc6779b7ac57371fc7c2aa17042aa29d5aff4a4bcc5eb6a0cc84

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7e8fa40ed400f461f1c2809d061a7d036d4e2631b525dc58fd70f92d938027c5
MD5 957ac8177a3fc3a0d637e6439ae6ab53
BLAKE2b-256 8b223cd340a047d24b0d3201d8cc8313c772d885e11edea1211f275c981bb584

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 180630e473fe9417ea5965c99a60f71c33e4554d8016ab80d5ed2a0853c9303a
MD5 9811edaad2561bcc1141d450ce30cffc
BLAKE2b-256 ae4ff8b17efe27bbf50099849b2c469eeb319675cc756785780e5ce8bed626b0

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5840d47681b850c1e0fcb1a0b31a5779edbc6f67352d45d511dbab51dbad42f6
MD5 88fe6262227081c151af77666c654502
BLAKE2b-256 bfac057e3ece1cdec26e221e437d79e8e5474e2e26316e1eda8947785b5ee815

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eb7909d0ad4940d3b74696d98f0dc16dec7294e57f9e0797bc06d5ce7b3b1507
MD5 cd7c235dd3753b70cea8bb31abcac841
BLAKE2b-256 d5621e5355b0a3975841181607a8a721c2fe9576ee4483c891e5903c0bca6cee

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7c4394e3b5ba4d19dc82d4f3a74420384552ef3a6dc80e953839667c1de374fd
MD5 4b4cae589f02267710fed0170598a532
BLAKE2b-256 c3573904fa7940b0e730526733d13bb8fb3f1e6f97b2cc5fd320cc14ee861261

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a6c1e888c74cc46a30797ae532abc107d3c0f847c22d39400b9a82a8e868fccd
MD5 b8156dd132419077e6ceed929b47450d
BLAKE2b-256 51c65f52b17c37406f078074c6b6d17e69c56881bbcc823a51d5a59ac1cf3c43

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 72ffe79afb94ac1f9d7f88b6cfc7c0212ea2105a0328cfc9a75bc1a9dbb19f55
MD5 9dbe5b1a4b8e46c2760f10dde8ddef3d
BLAKE2b-256 ab1f058d48a2e46e28e8c01f45139d547119c746be1fd3b84e2ebdbec0ecc37f

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 618c88e0003b78c8016e0a93cfd829783c138c81ade22ab13e298c3b5fd8c75e
MD5 0320a02ca3a1d67655e49efa14120990
BLAKE2b-256 701a6c4ea3ba07c7e527409f983352708350789ad62ed17c216edfd2c61c3193

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6dd063fd16d135a65700b78fba166e653e60366fa318d5e14a74f76ca507922f
MD5 262a001c7c364a8d58366aabfb47d455
BLAKE2b-256 3050936309b4f6b20dd43c65179e9ecce12a9a633aabf682236a41bd42ebc2f2

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ceed4ee1f447901d6e35279af7289ae7a940d94e6eb9e6d21ed1e6713f3198a2
MD5 110c3b77064d1d12e66f14b4f9bda2fd
BLAKE2b-256 7f3f2a81ae9d61d53ae07462c23828e935725ce1ede1c91c4a26362a9a73dcae

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4711de9a5cea657ca70c60287257f866987dbce231d7f515d97977183fba050b
MD5 cd3853830f9844fce9e670905c1f1ed6
BLAKE2b-256 a78ccda437c3c1dd892c7c3261720f5a0523b7ac89b6eafd88d23f6f2f174683

See more details on using hashes here.

File details

Details for the file constriction-0.5.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.5.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 78593838cabbaca8873a687fac5cdf98dbef7486afcdc73725090906d3336cc1
MD5 4f44b162236f2e704961b0250a680967
BLAKE2b-256 fa9340c73a939b1de1e1aa5af60b6ad7f67c1ce06e437c9e0822260779d7cd31

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