Skip to main content

Entropy coders for research and production (Rust and Python).

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.2.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.float64)
stds    = np.array([6.2,  5.3,  3.8, 3.2, 4.7], dtype=np.float64)
entropy_model1 = constriction.stream.model.QuantizedGaussian(-50, 50)
entropy_model2 = constriction.stream.model.Categorical(np.array(
    [0.2, 0.5, 0.3], dtype=np.float64))  # Probabilities of the symbols 0,1,2.

# 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.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (369.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

constriction-0.2.0-cp310-none-win_amd64.whl (299.1 kB view details)

Uploaded CPython 3.10Windows x86-64

constriction-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (368.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

constriction-0.2.0-cp310-cp310-macosx_11_0_arm64.whl (315.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

constriction-0.2.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (643.5 kB view details)

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

constriction-0.2.0-cp310-cp310-macosx_10_7_x86_64.whl (341.5 kB view details)

Uploaded CPython 3.10macOS 10.7+ x86-64

constriction-0.2.0-cp39-none-win_amd64.whl (299.8 kB view details)

Uploaded CPython 3.9Windows x86-64

constriction-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (368.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

constriction-0.2.0-cp39-cp39-macosx_11_0_arm64.whl (316.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

constriction-0.2.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (645.2 kB view details)

Uploaded CPython 3.9macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

constriction-0.2.0-cp39-cp39-macosx_10_7_x86_64.whl (342.5 kB view details)

Uploaded CPython 3.9macOS 10.7+ x86-64

constriction-0.2.0-cp38-none-win_amd64.whl (299.9 kB view details)

Uploaded CPython 3.8Windows x86-64

constriction-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (368.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

constriction-0.2.0-cp38-cp38-macosx_11_0_arm64.whl (316.8 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

constriction-0.2.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (645.9 kB view details)

Uploaded CPython 3.8macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

constriction-0.2.0-cp38-cp38-macosx_10_7_x86_64.whl (342.8 kB view details)

Uploaded CPython 3.8macOS 10.7+ x86-64

constriction-0.2.0-cp37-none-win_amd64.whl (300.0 kB view details)

Uploaded CPython 3.7Windows x86-64

constriction-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (368.9 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

constriction-0.2.0-cp37-cp37m-macosx_11_0_arm64.whl (316.9 kB view details)

Uploaded CPython 3.7mmacOS 11.0+ ARM64

constriction-0.2.0-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (646.1 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

constriction-0.2.0-cp37-cp37m-macosx_10_7_x86_64.whl (342.8 kB view details)

Uploaded CPython 3.7mmacOS 10.7+ x86-64

File details

Details for the file constriction-0.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6b7300bc2dec4485a4adacc41a44a0d6623e49d6b2b29dc20b053da9629fe8cc
MD5 14d5e38d3663d32db65f54253353b834
BLAKE2b-256 dff229c820bf3e4cb9c547fab5c58f360a424f67936b6810d5724a0c167f2f0c

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp310-none-win_amd64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 299.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for constriction-0.2.0-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 64154c601b96f68eb2b9881a0e5d0d004ef921d8a72961d532194a0da7f4fb9d
MD5 49e85a1278832e028fd14d6def3cd026
BLAKE2b-256 f1899c22da5e782266fddee2fdac35562266058ab5c746e8962dc746cb2d2a44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8cdc7482c54ebc3398747f4ad0ce8a10422def2c3126470571a01d3f8528468
MD5 8794cd9073abf8fd8a1c814b32f2c7cc
BLAKE2b-256 222fd40581c0aef9bed9413ca12daec480ff0248ca46eedafb718d97df1a9ba2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: constriction-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 315.8 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07d388db5de436e2d8bd32b9571e1968c65a8a128b0f0fd9379620ff3b7d8932
MD5 e6da8260ec85df709ef68a8449f6b9cc
BLAKE2b-256 d56355a03c7876219c3dab807926dda0ebca43be25979c23ad07f63b5edfc8c1

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9d748a588a837df7f89c7690075fa2cfd406d0707c877d42cb4237ddf8c2d223
MD5 e41a569fb79c7d8f83457c24355956e4
BLAKE2b-256 6a89354452258205e2207172d1b2b1508c71e6cf38265cec2153c68fb7aa6c61

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp310-cp310-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp310-cp310-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 341.5 kB
  • Tags: CPython 3.10, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 ffebdd273f706c889226b156f043beeb4df11494806590c2c857e916aac4ae84
MD5 c00d9a83cfac831cfeecca45144420c2
BLAKE2b-256 9a504dac52eb1534a5b3d2614326acb197cacfe3cc67ff37d8fb553aa68ce8c2

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp39-none-win_amd64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 299.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for constriction-0.2.0-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 92b09f51b254749ac3791d9c157ad222b4dd31cc68f0cbc378d779118fdc713f
MD5 6b4d81f54405a64a2bd2a7c4a1bab062
BLAKE2b-256 b3ad48040ba49b51212d3ce4e97b0db081a4be0944ee4b6df6b6abf0beb1a8ca

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3ebe13ac72fab709dc1b67bf0ae5ff826e15fe01ca5fa4406cc22fdfecca6fd3
MD5 883c1b1d0d329b332c683b885fcbe600
BLAKE2b-256 e3502339ac972ab79b69de6cc591eb16f2460254a815c7a350dd5a9f0767ac1c

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 316.6 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40e9894d9c3a5aa1ec8c86c4112c2c404238a4212c5a98c70e4d7651dbeaad15
MD5 e05ef5da7c292bf3a55147fe77f168d5
BLAKE2b-256 647a256738ce7aa16d9f1df0211292a957d40e57279bd1dbc64499b5d424bbfa

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2b9424f4155614308cff1b07120b6871e2844decccea9b371d614d1500fd46fe
MD5 56c982dc1ea42fe8d76fa9e6ec2e28ec
BLAKE2b-256 7e270b7387c25dad5d0b6474a45779fedf258568a63417cd3b992f02f624480f

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp39-cp39-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp39-cp39-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 342.5 kB
  • Tags: CPython 3.9, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp39-cp39-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 014b21809e52324da7fc12f0ffafa9a0a7a36beeb30f7d3c8d43309dd36d1030
MD5 986a04aebd4e6faeee5043815206229f
BLAKE2b-256 bc7a2340bccbbc40ec1d6709188cf19de279ffc79a1e153c1a1ffbb9ee130475

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp38-none-win_amd64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 299.9 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for constriction-0.2.0-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 0834a013448a60aa5d0d1b19ca7940eb4056f0678f2d13c4783133b6c377a2ef
MD5 cf50ad078e4b7e11aa47725839388d26
BLAKE2b-256 b51ae473ee2e9df83cccea0e0163a8a448412bb064fd048dcc6ada215b9180a4

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cc45e743e041923f012c032e6c7be88e52b879140da60a162575f67bec490e8e
MD5 6659099537c5f94b1285b74a41551a87
BLAKE2b-256 3f472548d45b63e3a714615408faf55a66a12b53605899aa0ef949d4ec33dbb4

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 316.8 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0f857a401664c096b28bc04ff5740afa5ec3dff5721dde8d83e343d0d205deb
MD5 fe8883307029f21c6312b2e1e801af61
BLAKE2b-256 4e12dc9425252cc804b5dc8db9c94431acabf7ef9a947278f7ec0778997e086b

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d1977e8e3da4e4f9eff86395ab749eaaa4efd9598300507ec22928ec351fa89d
MD5 3230266ef9fc12f0b9f0d3bc748da4f4
BLAKE2b-256 74877c21d73cb5d9ee021c4fc6f0c7acc561205d10f23c2d23a59f0a2b616a9a

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp38-cp38-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp38-cp38-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 342.8 kB
  • Tags: CPython 3.8, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 d961fa0d1874ade26750caad71c9df4f30681f29bd22b2b1da01b35d2c9f6aad
MD5 cf7a638a078205e5c82a72e02775bcfd
BLAKE2b-256 ac4c2187c08bbf416d6db5203359e6dc885080195aa0a870551e5f12a2f790b7

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp37-none-win_amd64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp37-none-win_amd64.whl
  • Upload date:
  • Size: 300.0 kB
  • Tags: CPython 3.7, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for constriction-0.2.0-cp37-none-win_amd64.whl
Algorithm Hash digest
SHA256 7adcc65f1f5b1ceece2ea65946f0ee5913c73f2ca0b08072be1f52f697c5ae04
MD5 7203eb920e43c16370e70f9c56fe73e8
BLAKE2b-256 38a2f728532c31d6fe6eafd4cc3fa94b4709745f059a04496f53b25428bc98a2

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 649f5be76d9597ff7eb1394d6824e933349e58a722d748b9819f3b531b8c751a
MD5 75716fea58d9beb2803cb9f382e80ebb
BLAKE2b-256 4d0948387c2afe73a091ae960bf2cd8fbaa738428d0a4f503a6c1757c248c702

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp37-cp37m-macosx_11_0_arm64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp37-cp37m-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 316.9 kB
  • Tags: CPython 3.7m, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp37-cp37m-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5395947749ede7d91e0c7f9ca9925db44747305f80ac5054964854e8e1b67ff
MD5 4af41f129e25e6d2ba6e2b377ea364b0
BLAKE2b-256 60fc42ce72d928de6bd0e99934be1a664326347b8aff3f26b46a14ec9306883c

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.2.0-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9e1d7a10f392f22cbb3c4204ccd9564922b0c9f4edb62dc6263831a1ac7863f9
MD5 70b727ecdde20d8989296d651e6c4f3e
BLAKE2b-256 b2f6df4edaee5f48950a5a6a5198c3cfb343f4dc6b58d43b669b873e5b8ecd42

See more details on using hashes here.

File details

Details for the file constriction-0.2.0-cp37-cp37m-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: constriction-0.2.0-cp37-cp37m-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 342.8 kB
  • Tags: CPython 3.7m, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for constriction-0.2.0-cp37-cp37m-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 e225d79455c144beaac57f987135924a137f7a208d826b8ce825b36c869fdba0
MD5 e12d11fc489854b2d5e84d6a8333b19c
BLAKE2b-256 c7d5b4bc9f2538d6a241cd90025da430b9ea82817f42f8b72fe0f2995f0a08ac

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