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.4.2

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.4.2-cp314-cp314-win_amd64.whl (301.5 kB view details)

Uploaded CPython 3.14Windows x86-64

constriction-0.4.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (407.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

constriction-0.4.2-cp314-cp314-macosx_11_0_arm64.whl (373.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

constriction-0.4.2-cp314-cp314-macosx_10_12_x86_64.whl (384.3 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

constriction-0.4.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (740.5 kB view details)

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

constriction-0.4.2-cp313-cp313-win_amd64.whl (309.3 kB view details)

Uploaded CPython 3.13Windows x86-64

constriction-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (412.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

constriction-0.4.2-cp313-cp313-macosx_11_0_arm64.whl (377.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

constriction-0.4.2-cp313-cp313-macosx_10_12_x86_64.whl (390.6 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

constriction-0.4.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (752.8 kB view details)

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

constriction-0.4.2-cp312-cp312-win_amd64.whl (309.7 kB view details)

Uploaded CPython 3.12Windows x86-64

constriction-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (412.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

constriction-0.4.2-cp312-cp312-macosx_11_0_arm64.whl (377.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

constriction-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl (390.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

constriction-0.4.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (752.8 kB view details)

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

constriction-0.4.2-cp311-cp311-win_amd64.whl (307.3 kB view details)

Uploaded CPython 3.11Windows x86-64

constriction-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (414.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

constriction-0.4.2-cp311-cp311-macosx_11_0_arm64.whl (376.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

constriction-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl (388.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

constriction-0.4.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (749.5 kB view details)

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

constriction-0.4.2-cp310-cp310-win_amd64.whl (306.8 kB view details)

Uploaded CPython 3.10Windows x86-64

constriction-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (413.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

constriction-0.4.2-cp310-cp310-macosx_11_0_arm64.whl (376.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

constriction-0.4.2-cp310-cp310-macosx_10_12_x86_64.whl (388.2 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

constriction-0.4.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (749.0 kB view details)

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

constriction-0.4.2-cp39-cp39-win_amd64.whl (308.8 kB view details)

Uploaded CPython 3.9Windows x86-64

constriction-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (415.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

constriction-0.4.2-cp39-cp39-macosx_11_0_arm64.whl (379.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

constriction-0.4.2-cp39-cp39-macosx_10_12_x86_64.whl (390.2 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

constriction-0.4.2-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (753.9 kB view details)

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

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4c86fd0129dba7c2f54021d539a5a0e9b92504f02a85ddac0fdf7a065f6a9e06
MD5 0241d68090230a1b7a8910ca9f7eb7db
BLAKE2b-256 b3ce65579ec4f46cb6622e39576e9868c7d6ce1963a29d93d2f1692c677f4035

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ca08433c0e48f339c5caed842963adfee5a9c653db83d405e4c493ba3a59d190
MD5 a1363c66153f7b5b3460c8827b834786
BLAKE2b-256 95b5dd3777b66c360abcdccc49973b7029c2d20abc2a9e466a3b99a78ec41217

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f04a0aff68e5c7542bed721094d16ded20fba1feb69e8867ab83f5dc814df54b
MD5 c206fe0ce52ed7fb7d8e0eb41af24944
BLAKE2b-256 86c16a6880c61c6bfc3c4529b8c325e95a9cf2274dad32fe03d1c2249cd8d7b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7d0829d681967076521dfdd61804c23c8b05d69dfb59fb3c783ff174d0c7d223
MD5 5ddce7abf388e8303b4d07ca585ebe7d
BLAKE2b-256 aec912fef148757fa28887f7ed3ea54c85c458a39cb3e175486da4a05e72afc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 dd9d2f730f0193830fded4e99d285e0847003665743f3d8d6e048d9789fc71e2
MD5 aa0b789ba0a523b2ccec093cbc1102e4
BLAKE2b-256 a6ea70277d61f33752d9d231d43a94e2cc113c3b6e79bd19f28d6fcf4e941dab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 32e5bd35eb38280ea7e0e0dfb5048df14bcec6cfea5f3dcabbe20d3e5638fbe7
MD5 79a0a11f15e5b919456dd5712b49a030
BLAKE2b-256 de91b218009ad56a6659b8cfd2186fa3845d2a2917659fa8610655cec01da346

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb7b47aed91dd73cf7588d295cbcd27334ecb3b3d49bf0ba38c9508a457311a4
MD5 c8206015e853b13ee11a9447e2aa579b
BLAKE2b-256 51e964ad3682efceb961fbb2b434615c3ea03226db4733f8e1266a18cd36ea1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1e2660802ae809abbb755abf2402ff43bb6649e997073fca48e7717368c58be
MD5 41b8a33565fcd7cb7057d5a4c199ed55
BLAKE2b-256 124891e13befce4d67e107b4c4b299f48b31afa6e31790766ad96b2cb2adcce6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8837940bde60fcd96d513f04a2e49dcc0e8c64bf3ca98fab3f9c832b2bdc5f5a
MD5 2def47719b1a34d439e9d01afb3c7b7c
BLAKE2b-256 1c4774380150894ac3ddf9a98a0028e604cc4382f06091b5a5e6fe65ee8a8e85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 074b4143c94de6e94bb3b89588e9b923f3ef675e9cec7a754a816938c29eca42
MD5 b0c74a8286664a8abb0f517339dda248
BLAKE2b-256 f11cffd1d5d2eed15c44271768abdbcc0e76382a2e97c285971256489a367745

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 89354332e53210eeb535b8097cb75ab282f9bdfee6383528b221cd036345293e
MD5 dec64bca1682a108d641df7b50b180b6
BLAKE2b-256 68fdc17680dfc118e7b86c3719f0a4ce43d7b3c5560a0c2b4e94e668c777420a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 858423f15e499e2a151d9add69de377f33fd17e4b181a51c8b29987504d9f92a
MD5 fd2886d477bef86f338b9078bb3ad003
BLAKE2b-256 c1f60ccdcd854e765166925823a60d9f974d4b1765cdb7eb917f61d11eecb8f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e53f0aadef1de62a0ee8c2c207c0e43a1fd6866c873b28cae0802b7a0b2db971
MD5 e0e9baf53b9d8f304939f4fe200b6e66
BLAKE2b-256 d330cdbdd28774c5ee919c6951894d7ab6bcb47868023db28ed72a935c958b47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1b9d3936ce71e7e42e246fad23e103d7a79f50c974aab53c8d7b57839db13f32
MD5 01b2b4527217705921f8ee5166f422a0
BLAKE2b-256 b010d1ef792fc3a73fc4915d0b4d4efd5295038548a9e3e2378dd3d3778cc894

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 bc721813cea057aebedb2c467ffda34f3c276a09c7a9aa7a36e850755d548f99
MD5 ea5b1947489ebadfb380d2b10960ba7c
BLAKE2b-256 1fab74562c9b67fbde0041905accad8042b6b0663b0b585a768d247e998c47f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 84d10f79843ec0254189770c0a77e8142f11e56f2ddf14c33b35db4520e43c5c
MD5 83d3720ebd6c6f9e93710d51ecab8ded
BLAKE2b-256 8823774784b57b27417c335a264e3673387c8634db2f8f80e475bfaac8bc34db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 57b92402afbac77613125c19a320ee72aa0e7943ec1393624991208ef37fb8b1
MD5 d78296a6f384b5ab211bd9896bdc30bb
BLAKE2b-256 142059c667d1f18e92d6f917e4d6a90b320d158517f3eb179581e881248ac80c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40c45e360be007d336085913e07071c22c5219aaa5132f79edce288c11a0ad56
MD5 50407258b74296daac2372244a5ada96
BLAKE2b-256 439c4029090465a045cdc08d8a5dfbd3cf98fec04ab0d4ba62a80e2a5e434c92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e2146b8b33c2cb5c0ec0f7cdbd6a565adc81386ff47687839c84eea2117ef70f
MD5 1be45926b74635f240075fb59922719c
BLAKE2b-256 af90fbfc1a85399979e62948d77707dbfd67d8af54d9ebf392321fd9b4cf7fb5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 7c5955b482a1ffee9a266602a7a4041dbbd1c7030e3823b59f7c6b2c22f887d9
MD5 14b2457b3cacbea7b93acb0c801859e2
BLAKE2b-256 375a8627504867248bbf8de4d04a671ec8c5d7caf48680ad99d6b6f768458d45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 25aa21ad26087d4b55cfab5173d3371733e8e7271e429ddd9b7890c91465f3dc
MD5 e53d3aa8de4d36404c6569570c29d69c
BLAKE2b-256 37b885db28c3d51ebf79079471d0fbed32f98a489c2cd8637330160fb25fc8ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f104f35a6156809e9240ab11ee3b321a7b390df54b4dd43942257f3018a6346
MD5 2d7559c9b489b8a084c64739d89e4a3c
BLAKE2b-256 fc3ed1664367ad659ea2f61a848168a5c819dd6f4e3f9e03db2cfa2aaf819dfd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b64b8c18c197c1ea151d86a310eb8e1dc3d2034e558e8cc21b38e784e26a709
MD5 517540a032bf2399a4fa3bda1c0a722c
BLAKE2b-256 02e2344d9e1f160e055b8a1fa4983b83b38115e305cfed42890230c2acbe58ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f0d39965b911001c7e05f93f04b9a45a22f86bf3bfb4938c8880cb1afc6b02bb
MD5 92351353eb29fdc70d4d5220dec44b49
BLAKE2b-256 baa51218e6b275aa0e4555a675c9c0833602f8eb06ad8b0eb6518f80d4f3e260

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 1a08a6825965e85e467cac0aa84a68fc75293722cd94237dd170b24f849c8772
MD5 32d934281d6d72e6bc5f714da6eafd13
BLAKE2b-256 03df0c38760942c55858949f8a37cbcc120f9a99c8dc85c3e8c3230d1f447abe

See more details on using hashes here.

File details

Details for the file constriction-0.4.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: constriction-0.4.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 308.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for constriction-0.4.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a1466268029567b022b1ec0dd5e535b71b54bb7c58dbe6ad0c94fa71985d49d8
MD5 0d7b291f318052bcf9327b9c2357681d
BLAKE2b-256 3056400e50ef8ab6bc17d766e6d40f7cac7a11b1412d9e90022c3080744cfbdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c2a04bb08c1fe38be66196f136a34fb233cbad894f2862152641a8c934b06e92
MD5 cfee23278c1a32cb29d304e320bf769f
BLAKE2b-256 b60f98c3e6d8ee7310b65c6a58f02271870c5117087750ec97665550a155374f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for constriction-0.4.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8aeb642d4508982331210638c3635f4c16908d59b05d2c3a1561922490efb94a
MD5 5d4b89514a75570f2c0d5a2c4e1ce2e9
BLAKE2b-256 e4f38c88acf7c0ebc4e318d58cd8ebf171aa261464aaed72ede110597bd090b4

See more details on using hashes here.

File details

Details for the file constriction-0.4.2-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for constriction-0.4.2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f60ffd0c9b7145de69c2048bb4b49e67d97e2c27b6caf8d5f2ec5cf3bff4f91c
MD5 174024b9f3e8990e550857aa7ad0c7a5
BLAKE2b-256 21f534d3ee4f30e00a63b0f8631ab3be884e469e00e78faf34b4146f10b29c7b

See more details on using hashes here.

File details

Details for the file constriction-0.4.2-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for constriction-0.4.2-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 310eef50545968404d874a900ecd9ba7f9c3f1193b09ddcfab9ad7db2c6395f7
MD5 7b6d5696d3c6ad5465678c9261547d93
BLAKE2b-256 c041cc18f8bfbb0956485360a782e7e394b4ed6e38ea9d4220cb4a1fba1fe502

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