Skip to main content

Differentiable Model Compression via Pseudo Quantization Noise

linter badge tests badge cov badge

DiffQ performs differentiable quantization using pseudo quantization noise. It can automatically tune the number of bits used per weight or group of weights, in order to achieve a given trade-off between model size and accuracy.

Go read our paper for more details.

What's up?

See the changelog for details on releases.

  • 2022-08-24: v0.2.3: fixed a bug when loading old quantized states.
  • 2021-11-25: version 0.2.2: adding support for torchscript.

Requirements

DiffQ requires Python 3.7, and a reasonably recent version of PyTorch (1.7.1 ideally). To install DiffQ, you can run from the root of the repository:

pip install .

You can also install directly from PyPI with pip install diffq.

Usage

import torch
from torch.nn import functional as F
import diffq
from diffq import DiffQuantizer

model = MyModel()
optim = ...  # The optimizer must be created before the quantizer
quantizer = DiffQuantizer(model)
quantizer.setup_optimizer(optim)

# Distributed data parallel must be created after DiffQuantizer!
dmodel = torch.distributed.DistributedDataParallel(...)

penalty = 1e-3
model.train()  # call model.eval() on eval to automatically use true quantized weights.
for batch in loader:
    ...
    optim.zero_grad()

    # The `penalty` parameter here will control the tradeoff between model size and model accuracy.
    loss = F.mse_loss(x, y) + penalty * quantizer.model_size()
    optim.step()

# To get the true model size with when doing proper bit packing.
print(f"Model is {quantizer.true_model_size():.1f} MB")

# When you want to dump your final model:
torch.save(quantizer.get_quantized_state(), "some_file.th")

# You can later load back the model with
model = MyModel()
diffq.restore_quantized_state(model, torch.load("some_file.th"))

# For DiffQ models, we support exporting the model to Torscript with optimal storage.
# Once loaded, the model will be stored in fp32 in memory (int8 support coming up).
from diffq.ts_export import export
export(quantizer, 'quantized.ts')

Documentation

See the API documentation for detailed documentation. We cover hereafter a few aspects.

Quantizer object

A Quantizer is attached to a model at its creation. All Quantizer objects provide the same basic capabilities:

  • automatically switches to quantized weights on the forward if the model is in eval mode.
  • quantizer-specific code on training forward (e.g. STE for UniformQuantizer with QAT, noise injection for DiffQ).
  • provide access to the quantized model size and state.

Quantized size and state

The method quantizer.model_size() provide a differentiable model size (for DiffQ), while quantizer.true_model_size() provide the true, optimally bit-packed, model size (non differentiable). With quantizer.compressed_model_size() you can get the model size using gzip. This can actually be larger than the true model size, and reveals interesting information on the entropy usage of a specific quantization method.

The bit-packed quantized state is obtained with quantizer.get_quantized_state() , and restored with quantizer.restore_quantized_state(). Bit packing is optimized for speed and can suffer from some overhead (in practice no more than 120B for Uniform and LSQ, and not more than 1kB for DiffQ).

If you do not have access to the original quantizer, for instance at inference time, you can load the state with diffq.restore_quantized_state(model, quantized_state).

Quantizer and optimization

Some quantizer will add extra optimizable parameters (DiffQuantizer and LSQ). Those parameters can require different optimizers or hyper-parameters than the main model weights. Typically, DiffQ bits parameters are always optimized with Adam. For that reason, you should always create the main optimizer before the quantizer. You can then setup the quantizer with this optimizer or another:

model = MyModel(...)
opt = torch.optim.Adam(model.parameters())
quantizer = diffq.DiffQuantizer(model)
quantizer.setup_optimizer(opt, **optim_overrides)

This offers the freedom to use a separate hyper-params. For instance, DiffQuantizer will always deactivate weight_decay for the bits parameters.

If the main optimizer is SGD, it is advised to have a second Adam optimizer for the quantizer.

Warning: you must always wrap your model with DistributedDataParallel after having created the quantizer, otherwise the quantizer parameters won't be optimized!

TorchScript support

At the moment the TorchScript support is experimental. We support saving the model with TorchScript to disk with optimal storage. Once loaded, the model is stored in FP32 in memory. We are working towards adding support for int8 in memory. See the diffq.ts_export.export function in the API.

Examples

We provide three examples in the examples/ folder. One is for CIFAR-10/100, using standard architecture such as Wide-ResNet, ResNet or MobileNet. The second is based on the DeiT visual transformer. The third is a language modeling task on Wikitext-103, using Fairseq

The DeiT and Fairseq examples are provided as a patch on the original codebase at a specific commit. You can initialize the git submodule and apply the patches by running

make examples

For more details on each example, go checkout their specific READMEs:

Installation for development

This will install the dependencies and a diffq in developer mode (changes to the files will directly reflect), along with the dependencies to run unit tests.

pip install -e '.[dev]'

Updating the patch based examples

In order to update the patches, first run make examples to properly initialize the sub repos. Then perform all the changes you want, commit them and run make patches. This will update the patches for each repo. Once this is done, and you checked that all the changes you did are properly included in the new patch files, you can run make reset (this will remove all your changes you did from the submodules, so do check the patch files before calling this) before calling git add -u .; git commit -m "my changes" and pushing.

Test

You can run the unit tests with

make tests

Citation

If you use this code or results in your paper, please cite our work as:

@article{defossez2021differentiable,
  title={Differentiable Model Compression via Pseudo Quantization Noise},
  author={D{\'e}fossez, Alexandre and Adi, Yossi and Synnaeve, Gabriel},
  journal={TMLR},
  year={2022}
}

License

This repository is released under the CC-BY-NC 4.0. license as found in the LICENSE file, except for the following parts that is under the MIT license. The files examples/cifar/src/mobilenet.py and examples/cifar/src/src/resnet.py are taken from kuangliu/pytorch-cifar, released as MIT. The file examples/cifar/src/wide_resnet.py is taken from meliketoy/wide-resnet, released as MIT. See each file headers for the detailed license.

Metadata

Release files for diffq 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for diffq 0.2.4
File Size Uploaded
diffq-0.2.4.tar.gz 157.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for diffq 0.2.4
File
diffq-0.2.4-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
diffq-0.2.4-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
diffq-0.2.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.12+ x86-64, Linux glibc 2.5+ x86-64 Details
diffq-0.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.10 CPython 3.10 Linux glibc 2.12+ x86-32, Linux glibc 2.5+ x86-32 Details
diffq-0.2.4-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
diffq-0.2.4-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
diffq-0.2.4-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details
diffq-0.2.4-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
diffq-0.2.4-cp39-cp39-win32.whl CPython 3.9 CPython 3.9 Windows x86-32 Details
diffq-0.2.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.5+ x86-64, Linux glibc 2.12+ x86-64 Details
diffq-0.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.9 CPython 3.9 Linux glibc 2.5+ x86-32, Linux glibc 2.12+ x86-32 Details
diffq-0.2.4-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
diffq-0.2.4-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details
diffq-0.2.4-cp39-cp39-macosx_10_9_universal2.whl CPython 3.9 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) Details
diffq-0.2.4-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
diffq-0.2.4-cp38-cp38-win32.whl CPython 3.8 CPython 3.8 Windows x86-32 Details
diffq-0.2.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.12+ x86-64, Linux glibc 2.5+ x86-64 Details
diffq-0.2.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.8 CPython 3.8 Linux glibc 2.5+ x86-32, Linux glibc 2.12+ x86-32 Details
diffq-0.2.4-cp38-cp38-macosx_11_0_arm64.whl CPython 3.8 CPython 3.8 macOS 11.0+ ARM64 Details
diffq-0.2.4-cp38-cp38-macosx_10_9_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.9+ x86-64 Details
diffq-0.2.4-cp38-cp38-macosx_10_9_universal2.whl CPython 3.8 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) Details
diffq-0.2.4-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details
diffq-0.2.4-cp37-cp37m-win32.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-32 Details
diffq-0.2.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.5+ x86-64, Linux glibc 2.12+ x86-64 Details
diffq-0.2.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.12+ x86-32, Linux glibc 2.5+ x86-32 Details
diffq-0.2.4-cp37-cp37m-macosx_10_9_x86_64.whl CPython 3.7 CPython 3.7 pymalloc macOS 10.9+ x86-64 Details

Total release size: 5.4 MB

Release files / diffq-0.2.4.tar.gz

Download URL diffq-0.2.4.tar.gz
Size 157.1 kB
Tags Source
SHA-256 checksum
How to use checksums
049064861e974ebf00d0badab8b324c775037371419eda3150985b9d477b5bd2
BLAKE2b-256 checksum
How to use checksums
5afd4c58807bf855c5929ffa6da55f26dd6b9ae462a4193f5e09cc49fbbfd451
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-win_amd64.whl

Download URL diffq-0.2.4-cp310-cp310-win_amd64.whl
Size 91.8 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
3467622841b15ece3d953fa42ad65f41703afe30e777bb910b96c89125174c8e
BLAKE2b-256 checksum
How to use checksums
ac9a60beef2ec7718daf4291064b7ae6e01e19496d6c8ade0002ba675cd67322
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-win32.whl

Download URL diffq-0.2.4-cp310-cp310-win32.whl
Size 82.2 kB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
1480ea49785dfdcc793a3f20043aba430f510d51487063e3617020f5a2d2a753
BLAKE2b-256 checksum
How to use checksums
98e55f6c7644b2b9585922ad116a605928db69320484a87dc236940a2e417172
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL diffq-0.2.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 418.8 kB
Tags CPython 3.10 Linux glibc 2.12+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
71a374573ec064227665208a5892d88032cb18736f68560d5522e0c48138ced1
BLAKE2b-256 checksum
How to use checksums
0e3b5ab58fda751ea353aa606260d78a9b58352aebf53d3a69183c593d14cd6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl

Download URL diffq-0.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Size 401.1 kB
Tags CPython 3.10 Linux glibc 2.12+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
d62ffd89498611dbf32cde417f5fc8d222f450085b06afb4e8764307906ab2ca
BLAKE2b-256 checksum
How to use checksums
c95709ee34fd5756b5ebf96c63bcd82f4fabab4f1a95a350e491c1c8f92fdaad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-macosx_11_0_arm64.whl

Download URL diffq-0.2.4-cp310-cp310-macosx_11_0_arm64.whl
Size 97.4 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cf990911fc2c932e505df9958ce50417f182fe9178b2dbe329173b29e6521727
BLAKE2b-256 checksum
How to use checksums
4f45b6d26c9d4c64c1f6481fa8a85b9920951349a786bcfa2615241387a118dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-macosx_10_9_x86_64.whl

Download URL diffq-0.2.4-cp310-cp310-macosx_10_9_x86_64.whl
Size 106.2 kB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
15d5055ebfc629914689d66fcfa36f6d751fd45b4b2331ba0d3390604e2b40fa
BLAKE2b-256 checksum
How to use checksums
992183da39abd8080e4aa5d211c6d17c3eb1b7e6e90b35bf98394ed648c5a039
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp310-cp310-macosx_10_9_universal2.whl

Download URL diffq-0.2.4-cp310-cp310-macosx_10_9_universal2.whl
Size 175.8 kB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
3d8e6d6b882dd93568b41a7da9ff9657845ec08c82e71460544d0d04ed112320
BLAKE2b-256 checksum
How to use checksums
b329592009a585a22f6313e2950b38173975c2be979b18fe4454679f67102cb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-win_amd64.whl

Download URL diffq-0.2.4-cp39-cp39-win_amd64.whl
Size 93.2 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
9729121832c9abbbf4c443effe4e2c2952c48170d8c8255d79012d236c8dcd6d
BLAKE2b-256 checksum
How to use checksums
d348715aef982f49938063b181afe2aa7cd0998bcc6648ba79133dba2020ded7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-win32.whl

Download URL diffq-0.2.4-cp39-cp39-win32.whl
Size 83.5 kB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
71575ca7202628ee1380a993aebee7e15c23ee12a96bc1a4dd1bff023aafdee2
BLAKE2b-256 checksum
How to use checksums
694a85492c979dde4f8762f2879dec5c4e9bc55aa5a82ca9d0caf467f962dea7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL diffq-0.2.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 425.5 kB
Tags CPython 3.9 Linux glibc 2.12+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
a5fc5cf4967d7cea065e75d2044824137ad08f1ccf7571d871cbf03bcf8809bd
BLAKE2b-256 checksum
How to use checksums
8045ff8b779e9aeb653861fff9fceb65690a1b7e5c025d40cd930912731a65f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl

Download URL diffq-0.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Size 409.1 kB
Tags CPython 3.9 Linux glibc 2.12+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
02268472f1646cafe4fb3feaad9ac519f7e65d617871a58b56e71bc552fc8fb3
BLAKE2b-256 checksum
How to use checksums
4f76857ec5bc72d035a69189a629624c0a04adebefbf39c0c30fa3c2dafeea76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-macosx_11_0_arm64.whl

Download URL diffq-0.2.4-cp39-cp39-macosx_11_0_arm64.whl
Size 96.7 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ce966eb21bbb983e5bf5957c5832cad57d0968b7c5602da4065c3d1603ef8a95
BLAKE2b-256 checksum
How to use checksums
a975e898aaed1414c1fc4712090942913217762fa6c670b045cc07cbb91ed9e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-macosx_10_9_x86_64.whl

Download URL diffq-0.2.4-cp39-cp39-macosx_10_9_x86_64.whl
Size 106.0 kB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
78124e86f1e208830bfebe744c2321d92c65ba5d7e125d260ed418b4a2fa93df
BLAKE2b-256 checksum
How to use checksums
4fb927300827a7a4b1aaa9a59d4435dcf5767301dfe8394904134dcbab86cc8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp39-cp39-macosx_10_9_universal2.whl

Download URL diffq-0.2.4-cp39-cp39-macosx_10_9_universal2.whl
Size 174.9 kB
Tags CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
967a30e3a9da922d8705c3dbf44bb82d5b76a3ad49ecaa4c9450d97479fe8a31
BLAKE2b-256 checksum
How to use checksums
cb2366b56a6ec679a24e8449368688674a6752a45962d93add1c7ff770574536
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-win_amd64.whl

Download URL diffq-0.2.4-cp38-cp38-win_amd64.whl
Size 93.1 kB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
7566f823bda2f3f786dfea1ca2cfaa9663b854ccafcb1b185a4370690b628cf5
BLAKE2b-256 checksum
How to use checksums
4ab52edadeb398560dedde227bcceeae70b05d9d3a5eec841172568f2bea12bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-win32.whl

Download URL diffq-0.2.4-cp38-cp38-win32.whl
Size 83.4 kB
Tags CPython 3.8 Windows x86-32
SHA-256 checksum
How to use checksums
e793fed11642fdb4909efc0f87f2dbb52808dc5fa9865d7fcadb93ec5fd3aacd
BLAKE2b-256 checksum
How to use checksums
d77516097cea7c275615c094559aaec841a60fa25ac48b8c876d3134bb25aaeb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL diffq-0.2.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 446.6 kB
Tags CPython 3.8 Linux glibc 2.12+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
0381dedef3b88b4910eedfd894610ecac9affd689c2191c96694b70b3366dd27
BLAKE2b-256 checksum
How to use checksums
1e0a6151b12a53f7278eb0da3befcee0b9e0aa7bef2cbd7e7d14a7c76d526f75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl

Download URL diffq-0.2.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Size 428.1 kB
Tags CPython 3.8 Linux glibc 2.12+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
0b0cf50749d1a80fb74ee9e5135e08f06b519ab57f5b725bb374b2866412b725
BLAKE2b-256 checksum
How to use checksums
7f24a3b46b2a3b764ea1680a7d0eadbbb3326a86de153e167a0a4043b40d71b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-macosx_11_0_arm64.whl

Download URL diffq-0.2.4-cp38-cp38-macosx_11_0_arm64.whl
Size 95.1 kB
Tags CPython 3.8 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8ff6ff92f3978770b0d2d355a5e553a554ea22732236cda9171c0683e5da5577
BLAKE2b-256 checksum
How to use checksums
594575a6021a4a244c02f75c44132630441d0445846fda34389affdfe72daa15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-macosx_10_9_x86_64.whl

Download URL diffq-0.2.4-cp38-cp38-macosx_10_9_x86_64.whl
Size 103.8 kB
Tags CPython 3.8 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
8937f15e45464fd899e9b3a6b1b57700c977367caf50a626f872dbb7883e3c1c
BLAKE2b-256 checksum
How to use checksums
4a2417d7031906a03351d4d3e6cbb4d771b80f25eb1242a16b86a73d39f6a97e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp38-cp38-macosx_10_9_universal2.whl

Download URL diffq-0.2.4-cp38-cp38-macosx_10_9_universal2.whl
Size 171.1 kB
Tags CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
de84917882a3def0d71548e5366813f7e25a7b110d2085fe0b0fa4c9877f5098
BLAKE2b-256 checksum
How to use checksums
b0baaf32f0228b14a72458b25280dec04b03655491132e8604afca9a9f6929c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp37-cp37m-win_amd64.whl

Download URL diffq-0.2.4-cp37-cp37m-win_amd64.whl
Size 91.9 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
ee7f31d56f5131c2577dfa7bdb7d7284c5cce031fca0e30ac10d248b3e0e6841
BLAKE2b-256 checksum
How to use checksums
7b8182390c8c66f8cb4975c728ca3aae828d7f0a3d37adf5bcf8495f1efd4a59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp37-cp37m-win32.whl

Download URL diffq-0.2.4-cp37-cp37m-win32.whl
Size 81.9 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
36f568bb1bbf75ac5601115e6253828c8c7b21a0501d7fcdc3b9545f80dc74f7
BLAKE2b-256 checksum
How to use checksums
89ddeeea6caa7dc113bda4c13b85fd3cf2eff0f447d7657742dd077419b485b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl

Download URL diffq-0.2.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Size 393.8 kB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.12+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
d6779a81fcb8045d006a5f309c52a34e48fefb73db99232b4b1452a8829c083c
BLAKE2b-256 checksum
How to use checksums
5156b5e9725cba5d3e3c45ed7cd35e3f330413268159b592d3cae3bb45d2971c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl

Download URL diffq-0.2.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Size 376.0 kB
Tags CPython 3.7 CPython 3.7 pymalloc Linux glibc 2.12+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
0729231949ec74641709ad9b713ba127898735ba20ec8f44677d984d2ce1c3b9
BLAKE2b-256 checksum
How to use checksums
c4708581f5748e958b6c25d75a86def24e983dcdeb46c39775ff6d7fdcb9fd0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release files / diffq-0.2.4-cp37-cp37m-macosx_10_9_x86_64.whl

Download URL diffq-0.2.4-cp37-cp37m-macosx_10_9_x86_64.whl
Size 104.5 kB
Tags CPython 3.7 CPython 3.7 pymalloc macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
3aef094383d39e12508ddf61c45a377986b2d4bac26ee553b6504fee10e2ff9d
BLAKE2b-256 checksum
How to use checksums
2aeb7b8055f85850771211126ceb4c23e835f5d56f5d171a1ee88eb20500289d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.15

Release history Release notifications | RSS feed

This release

0.2.4 This release

27 release files

0.2.3

27 release files

0.2.2

21 release files

0.2.1

20 release files

0.2.0

21 release files

0.1.1

1 release file

0.1.0

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page