Skip to main content

Python bindings for tract, a neural network inference engine

Project description

tract python bindings

tract is a library for neural network inference. While PyTorch and TensorFlow deal with the much harder training problem, tract focuses on what happens once the model in trained.

tract ultimate goal is to use the model on end-user data (aka "running the model") as efficiently as possible, in a variety of possible deployments, including some which are no completely mainstream : a lot of energy have been invested in making tract an efficient engine to run models on ARM single board computers.

:hidden:

onnx
nnef
inference_model
model
fact
runnable
tensor

API Reference

Getting started

Install tract library

pip install tract. Prebuilt wheels are provided for x86-64 Linux and Windows, x86-64 and arm64 for MacOS.

Downloading the model

First we need to obtain the model. We will download an ONNX-converted MobileNET 2.7 from the ONNX model zoo.

wget https://github.com/onnx/models/raw/main/vision/classification/mobilenet/model/mobilenetv2-7.onnx.

Preprocessing an image

Then we need a sample image. You can use pretty much anything. If you lack inspiration, you can this picture of Grace Hopper.

wget https://s3.amazonaws.com/tract-ci-builds/tests/grace_hopper.jpg

We will be needing pillow to load the image and crop it.

pip install pillow

Now let's start our python script. We will want to use tract, obviously, but we will also need PIL's Image and numpy to put the data in the form MobileNet expects it.

#!/usr/bin/env python

import tract
import numpy
from PIL import Image

We want to load the image, crop it into its central square, then scale this square to be 224x224.

im = Image.open("grace_hopper.jpg")
if im.height > im.width:
    top_crop = int((im.height - im.width) / 2)
    im = im.crop((0, top_crop, im.width, top_crop + im.width))
else:
    left_crop = int((im.width - im.height) / 2)
    im = im.crop((left_crop, 0, left_crop + im_height, im.height))
im = im.resize((224, 224))
im = numpy.array(im)

At this stage, we obtain a 224x224x3 tensor of 8-bit positive integers. We need to transform these integers to floats and normalize them for MobileNet. At some point during this normalization, numpy decides to promote our tensor to double precision, but our model is single precison, so we are converting it again after the normalization.

im = (im.astype(float) / 255. - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225]
im = im.astype(numpy.single)

Finally, ONNX variant of Mobilenet expects its input in NCHW convention, and our data is in HWC. We need to move the C axis before H and W, then insert the N at the left.

im = numpy.moveaxis(im, 2, 0)
im = numpy.expand_dims(im, 0)

Loading the model

Loading a model is relatively simple. We need to instantiate the ONNX loader first, the we use it to load the model. Then we ask tract to optimize the model and get it ready to run.

model = tract.onnx().load("./mobilenetv2-7.onnx").into_model().into_runnable()

If we wanted to process several images, this would only have to be done once out of our image loop.

Running the model

tract run methods take a list of inputs and returns a list of outputs. Each input can be a numpy array. The outputs are tract's own Tensor data type, which should be converted to numpy array.

outputs = model.run([im])
output = outputs[0].to_numpy()

Interpreting the result

If we print the output, what we get is a array of 1000 values. Each value is the score of our image on one of the 1000 categoris of ImageNet. What we want is to find the category with the highest score.

print(numpy.argmax(output))

If all goes according to plan, this should output the number 652. There is a copy of ImageNet categories at the following URL, with helpful line numbering.

https://github.com/sonos/tract/blob/main/examples/nnef-mobilenet-v2/imagenet_slim_labels.txt

And... 652 is "microphone". Which is wrong. The trick is, the lines are numbered from 1, while our results starts at 0, plus the label list includes a "dummy" label first that should be ignored. So the right value is at the line 654: "military uniform". If you looked at the picture before you noticed that Grace Hopper is in uniform on the picture, so it does make sense.

Running on GPU

The getting started example above runs on the CPU, which is the default runtime. On systems with an NVIDIA GPU, tract can leverage CUDA for accelerated inference. The only change is in how the model is prepared: instead of calling into_runnable(), use a CUDA runtime to prepare the model.

import tract

# load and type the model as before
model = tract.onnx().load("./mobilenetv2-7.onnx").into_model()

# prepare it for the CUDA runtime
cuda = tract.runtime_for_name("cuda")
runnable = cuda.prepare(model)

# run exactly as before
outputs = runnable.run([im])
output = outputs[0].to_numpy()

The Metal runtime works the same way on Apple Silicon Macs: just replace "cuda" with "metal".

Model cooking with tract

Over the years of tract development, it became clear that beside "training" and "running", there was a third time in the life-cycle of a model. One of our contributors nicknamed it "model cooking" and the term stuck. This extra stage is about all what happens after the training and before running.

If training and Runtime are relatively easy to define, the model cooking gets a bit less obvious. It comes from the realisation that the training form (an ONNX or TensorFlow file or ste of files) of a model may is usually not the most convenient form for running it. Every time a device loads a model in ONNX form and transform it into a suitable form for runtime, it goes through the same series or more or less complicated operations, that can amount to several seconds of high-CPU usage for current models. When running the model on a device, this can have several negative impact on experience: the device will take time to start-up, consume a lot of battery energy to get ready, maybe fight over CPU availability with other processes trying to get ready at the same instant on the device.

As this sequence of operations is generally the same, it becomes relevant to persist the model resulting of the transformation. It could be persisted at the first application start-up for instance. But it could also be "prepared", or "cooked" before distribution to the devices.

Cooking to NNEF

tract supports NNEF. It can read a NNEF neural network and run it. But it can also dump its preferred representation of a model in NNEF.

At this stage, a possible path to production for a neural model becomes can be drawn:

  • model is trained, typically on big servers on the cloud, and exported to ONNX.
  • model is cooked, simplified, using tract command line or python bindings.
  • model is shipped to devices or servers in charge of running it.

Testing and benching models early

As soon as the model is in ONNX form, tract can load and run it. It gives opportunities to validate and test on the training system, asserting early on that tract will compute at runtime the same result than what the training model predicts, limiting the risk of late-minute surprise.

But tract command line can also be used to bench and profile an ONNX model on the target system answering very early the "will the device be fast enough" question. The nature of neural network is such that in many cases an untrained model, or a poorly trained one will perform the same computations than the final model, so it may be possible to bench the model for on-device efficiency before going through a costly and long model training.

tract-opl

NNEF is a pretty little standard. But we needed to go beyond it and we extended it in several ways. For instance, NNEF does not provide syntax for recurring neural network (LSTM and friends), which are an absolute must in signal and voice processing. tract also supports symbolic dimensions, which are useful to represent a late bound batch dimension (if you don't know in advance how many inputs will have to be computed concurrently).

Pulsing

For interactive applications where time plays a role (voice, signal, ...), tract can automatically transform batch models, to equivalent streaming models suitable for runtime. While batch models are presented at training time the whole signal in one go, a streaming model received the signal by "pulse" and produces step by step the same output that the batching model.

It does not work for every model, tract can obviously not generate a model where the output at a time depends on input not received yet. Of course, models have to be causal to be pulsable. For instance, a bi-directional LSTM is not pulsable. Most convolution nets can be made causal at designe time by padding, or at cooking time by adding fixed delays.

This cooking step is a recurring annoyance in the real-time voice and signal field : it can be done manually, but is very easy to get wrong. tract makes it automactic.

Project details


Download files

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

Source Distribution

tract-0.23.0.dev5.tar.gz (6.9 MB view details)

Uploaded Source

Built Distributions

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

tract-0.23.0.dev5-cp314-cp314-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.14Windows x86-64

tract-0.23.0.dev5-cp314-cp314-musllinux_1_2_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

tract-0.23.0.dev5-cp314-cp314-manylinux_2_28_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

tract-0.23.0.dev5-cp314-cp314-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tract-0.23.0.dev5-cp314-cp314-macosx_10_15_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

tract-0.23.0.dev5-cp314-cp314-macosx_10_15_universal2.whl (18.5 MB view details)

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

tract-0.23.0.dev5-cp313-cp313-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.13Windows x86-64

tract-0.23.0.dev5-cp313-cp313-musllinux_1_2_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

tract-0.23.0.dev5-cp313-cp313-manylinux_2_28_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tract-0.23.0.dev5-cp313-cp313-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tract-0.23.0.dev5-cp313-cp313-macosx_10_13_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

tract-0.23.0.dev5-cp313-cp313-macosx_10_13_universal2.whl (18.5 MB view details)

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

tract-0.23.0.dev5-cp312-cp312-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.12Windows x86-64

tract-0.23.0.dev5-cp312-cp312-musllinux_1_2_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

tract-0.23.0.dev5-cp312-cp312-manylinux_2_28_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tract-0.23.0.dev5-cp312-cp312-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tract-0.23.0.dev5-cp312-cp312-macosx_10_13_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

tract-0.23.0.dev5-cp312-cp312-macosx_10_13_universal2.whl (18.5 MB view details)

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

tract-0.23.0.dev5-cp311-cp311-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.11Windows x86-64

tract-0.23.0.dev5-cp311-cp311-musllinux_1_2_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

tract-0.23.0.dev5-cp311-cp311-manylinux_2_28_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tract-0.23.0.dev5-cp311-cp311-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tract-0.23.0.dev5-cp311-cp311-macosx_10_13_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.11macOS 10.13+ x86-64

tract-0.23.0.dev5-cp311-cp311-macosx_10_13_universal2.whl (18.5 MB view details)

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

tract-0.23.0.dev5-cp310-cp310-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.10Windows x86-64

tract-0.23.0.dev5-cp310-cp310-musllinux_1_2_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

tract-0.23.0.dev5-cp310-cp310-manylinux_2_28_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tract-0.23.0.dev5-cp310-cp310-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

tract-0.23.0.dev5-cp310-cp310-macosx_10_13_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.10macOS 10.13+ x86-64

tract-0.23.0.dev5-cp310-cp310-macosx_10_13_universal2.whl (18.5 MB view details)

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

tract-0.23.0.dev5-cp39-cp39-win_amd64.whl (10.1 MB view details)

Uploaded CPython 3.9Windows x86-64

tract-0.23.0.dev5-cp39-cp39-musllinux_1_2_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

tract-0.23.0.dev5-cp39-cp39-manylinux_2_28_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

tract-0.23.0.dev5-cp39-cp39-macosx_11_0_arm64.whl (8.6 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

tract-0.23.0.dev5-cp39-cp39-macosx_10_13_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.9macOS 10.13+ x86-64

tract-0.23.0.dev5-cp39-cp39-macosx_10_13_universal2.whl (18.5 MB view details)

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

File details

Details for the file tract-0.23.0.dev5.tar.gz.

File metadata

  • Download URL: tract-0.23.0.dev5.tar.gz
  • Upload date:
  • Size: 6.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for tract-0.23.0.dev5.tar.gz
Algorithm Hash digest
SHA256 91ceb1b1c3dab928e08a49e44163f43a4154e8e3a3485f20b7c67b5b2badcca2
MD5 95def2d24153e632bf30c4cb4a9c8d00
BLAKE2b-256 98523dee4895cdec49b29200fcc398d3a95cc153cdd686fe497b885352a84aef

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 373e203269cffeda4818e9c7489601c3cae25af6f0e034bd8db19f694920e467
MD5 349ce25da3bba8ef2ec54b4c1e6fd10f
BLAKE2b-256 d963e3e57f958703833e9b861d7ec55364ccd46f1be91420ae68f09e3dbe00f7

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 19a633ab5f2b5ae9e1220910f5eced8aa3392521d4e27913e005804d7ae3cd76
MD5 9e3889bda35f015879657640a0492975
BLAKE2b-256 662488e0118321f02018fca364ec614de4e9ce9c29662ce42be8ffc338f555ac

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 12a74872114579620c5b77c5d7aa3806cd9730efc4efcc8d9ac2b99c4975b450
MD5 c816aac2a25b2219f5b65ce5e49f3366
BLAKE2b-256 18a781eabc63def0cbe7604d4ae6158b943f5744d33f3041202d5c56150ccad7

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 820d72d21aee4a8b6a698a3dd38593e89e966389df80aacf1b188b5f5fd3670f
MD5 35c480fdcda52b2690b49bbfd42e9790
BLAKE2b-256 1fc0d3988507345fec79c6421b28025a5a6f645d510f425daf91d117ba6ba6e7

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 95807fbb308fa71fb57c0ed11986c30fd51a7ac8d049736a091415d81895ae5e
MD5 0aa05db80dbb9b7c2dfabadf1d3e5c89
BLAKE2b-256 a1e8a84bf08c3d4bb083ec33dabe231ee5cbaf5085d20c125812506906e30067

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp314-cp314-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 0547e57c0dd24283c5df02e97f87fdb90d12ddf066f71afad1353678b33992f6
MD5 7b01e8c4b4efe7452ebee29b8d30abc6
BLAKE2b-256 e3d05792e3cb0a0be6b5f78f217fd512048d8f15a6b652e7000841d5091d6ef1

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b3e1bd8d444315745b010eaaf0761cd4c4ed4dcceec89424e237a40be283d0a6
MD5 9a1e427e204169212f5c77a81f451e90
BLAKE2b-256 28fb8458502f7f02613cf43368317f2bb173f6d34bd61380deb6dba48a530874

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9db40a2fb5dee58dae755cd46ff451ef8f041490d7c713b5364e94952a54b4ca
MD5 601e9205e8651fb8a30a65a1cb4ba86e
BLAKE2b-256 7e67699cc24d0a4fd87cabb2c0f0e4c92d50216661a2eec86e35117e6f5b742d

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9bf05be85bd9e1e3e231132906b20ce42a2eea265e570d41a080daadd6a1c69e
MD5 7c6e923b7f467113258a66cf57e084ff
BLAKE2b-256 4802fa6bb0cac2d395866c99af923cd0e091828a28ed69e2c7669baa666da612

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b84579aa386f9d95160c143929f1f1bca83d3fb8d9d7d8867e34eefe03fb61a0
MD5 556fbce786a52705df12ca7b3c50dc75
BLAKE2b-256 8ca779f4a559d7ff317efca1d56c113f668ee85e05e38ce85eaf7fce1dbdd3e9

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2df3ebb8b827e908417a8a165bc1dacde8d2a812746053b6f2fe7c554cb930fa
MD5 3ab5fa6fe587838e5564f8c1ca9344f3
BLAKE2b-256 4669dfadb4172ece60d02b0314c0ebc4e620c6bff0b984f93d7fe44c8ad041fd

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 9a8248ab5800087909052027c9c9feb4da5135bd8778169b3d501d6fc0bde070
MD5 3edc0ae0da0ee130ce38514d8db46bc0
BLAKE2b-256 0d6102242249cf7622c90c2a4426f93ccd3fdf3f02bbce8b0dda6234f4bf4976

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6e599afa4df82b8c7e178a6ceba7e41c2cdd4a1cbc38056cf00e12e3433b1722
MD5 749af55e0f8d0af7a28a461a049c9f75
BLAKE2b-256 9231b587e419fb47b7008a6fa49218f4e09b4349ce7602432be8764542e2f34b

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b91f421722a8e2e1c846d7abf3377c6ed13a1a906be280f5d7615ad4f4f591fc
MD5 e255f7fc71015f1611436bc35063bc30
BLAKE2b-256 79567568ed4a1940b20404ef8742c031e322b1dc29bc5fb276c07839e9d9eba6

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd5b488b4cbb0b75bb9384e6c8a393ef57dff6006c32718b6fe5f0bc0490ec74
MD5 65ab616aa4c942800726c95ad0b335fa
BLAKE2b-256 a09770c6520a0e056e65daf5c7909d4d3553cf2facd06ab3f09f72fb5a483359

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d80d31bfcd71dc8cde97a59a1282bc0fcf47040c45e9979fb4cb065f456f7979
MD5 c8761ff57c98022814249068b0e7456e
BLAKE2b-256 ad4b367ee07af7ea899e0e1bbcaa0a8857b23093131c20e1a49303ae4f6f8ab6

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5987cdcaabe2e71a5fd54579df26c0256bc3efad6b5b8bdd08437e1b9b6f6c57
MD5 a920fec357e9020e3839fc5f07fefc23
BLAKE2b-256 0b4442649d6b4a4162a8dccb322ef214f4800649c31e4e94ab74ed23312c4e86

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 d9bb7e7c04c27edc790c18c7d6908021493bd1c8a2597e6554f19047bcb55219
MD5 d63ce963fd05bad953f34761a48f1aff
BLAKE2b-256 50d377f08a2612e8b4d9cd0c890c86f5fe0d29f7cbf1541c2007c3314090f5b9

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8945ffe1ae996ecb91db433a7da5c4fa6d32414707dbcc36616dba77bc9d8d9f
MD5 2dfdf7a9d9f4e96d4d20234ef6bfd9f6
BLAKE2b-256 09462c190734521abac7cd9ce7b75d8323ae1a68a5e6a4904d4122772dc95df2

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8ca185bf23dc51345ca1b8cc52b771a7abb1d8a92b8eda67527e346293db5127
MD5 9caf0e53f66f3d32a054c54f977a2301
BLAKE2b-256 e34bd2c92d01496fce5ba7db0e6ce0e70ddf94dd0b4454692e64bd867735afae

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f8ae096ad9f214bec7e8f53b4ca0a9874a1e0c1f53103cf86de4c6356075063
MD5 2473d73491858dc667a5b8e3f1b45a3f
BLAKE2b-256 d9d23906fb17f2da3bcc45aba059138fcb0603e44ac434d1d9f209412ba841d3

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b97fc93983dc09e3bbb06392b46dc0d39e79cd32e9b442ab04b05dfd93fda96
MD5 f760d96115c53215047fee9657fd1b82
BLAKE2b-256 f37ad11f7045bf5ba018eaec54d11998851cdb41a6d25defe9ba79e56d968d92

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp311-cp311-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp311-cp311-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0960fe5d3a812cb79d45dae04373389fb6f645b640f65e33c176a46933fb491d
MD5 b5f60b1ad8a9c15cdf4d69d1efc079c4
BLAKE2b-256 78d847b077b7ca85e986b4d9e9fc6eba409e15b2bb69c33d2dfab9ac96416173

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp311-cp311-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp311-cp311-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 9cf02afe3795f9a79a3a695843180b497471c250cb784025164a47110aa66eb0
MD5 0d9eb949203f9210a5d5bee5037d40eb
BLAKE2b-256 8cc60ae5d225b850da5132d700e758b182d5f8a8c9ae9f0c57ca25d79bca4b4c

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f2bddca2f47bfbdc0738e14f54d906eb315aac5b2504c63511f48edf994e0eed
MD5 a6359ead66b43fffa221530fd3d34245
BLAKE2b-256 0e69a6125ea0be50b44f4b19b0e04d827e08a3e91092ea6cb349f1772cba8db7

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3efd28181fa9b29825759a0aba3600e42377ee9425d9e413c2314db159b086f7
MD5 8ecdd156d37faae049599caf886a55e3
BLAKE2b-256 7c52b55c264d47b1ff54930c7e6538b3bcbd31f94db7f265fe52357ba2daf6d6

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 69cb334f607f5b90327efb619b7392231ef1296be503c7cd7995d88f093654e7
MD5 88789e7a4f6f14d62020e349c0b1e8b7
BLAKE2b-256 be54c43b194219351f36f66da78467a01c0dd54bee1476e00c80f5e12b38b11f

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 58d30bc4a45730e1b1de2d8a6addfda9deaca617ec51f682577293725773a39f
MD5 e4eb0c02e5565f51cf1a987fcbcaf570
BLAKE2b-256 aaa766e4ea7deace901e5405aeab3a7a8aa8e36f61d29e463436e50f35a8ff08

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp310-cp310-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp310-cp310-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 30266c3317d0b768e1b3f175a1d6e90f38540319aae81d010d9b5b108bf2ded7
MD5 9c4b356b28136e03307274f45fdc2432
BLAKE2b-256 7fdad35c0f64a1d86e87ba46e5fab663c6c3ae4c492e7aec38e2372eda5664a1

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp310-cp310-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp310-cp310-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 0e660700aaa3abff4fdc1d87715d7dce0a27c1736f50b0388a6b351205760e05
MD5 a59ee1992c0c11e4d68def519608286e
BLAKE2b-256 2005872c30c240fa49b27c7367aacea9acbcf066895ad3495476f41320dac07a

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: tract-0.23.0.dev5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 10.1 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for tract-0.23.0.dev5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 615093873252c95a13d8745f600f79801ddaa21d41309eee40490907fe517bc6
MD5 eda5e0acd0fa1fc6e5285d99d2df7fcb
BLAKE2b-256 d48e5c878dc327777414dacb59023fa34ef0bb62619207229c78fe6c6ea67ee4

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0de9eae1f864126b04dd7c77319e378a873801f4dd79bbf19b86de869ba4609d
MD5 14636753deb0b8319c7dff1aed7a9319
BLAKE2b-256 093c89784f3458e051293d4449409f7792920998bb03c8d0681a7d5cbe2f58ed

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 18a9e384e89a7c8d045aaa04897fc0a7e254d2d2cf1a1c7dd4bc89f97db07b98
MD5 f84f6858273551db716b0d5247b78601
BLAKE2b-256 9c5f5ffdd402775b5eba7309a8cebe423e3182af677f0e5b82708efc68742333

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 93118f1606482e2550b3b2f335710062ef915840d9cb4c258090e4c853800b35
MD5 c7b5fd968b1b3d6d7712bbb10e7cdaba
BLAKE2b-256 49bb5756bff702da9492996e48b22722b2bc80abae8deacb85bb4726e61dbde7

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp39-cp39-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp39-cp39-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2bde8ac4817b7a7785456c9d1c83d143be3e5f00ef413fbf6a45b882c98c40e5
MD5 afbdf6c07e34a6dfc235c06ead0e9187
BLAKE2b-256 cb4ca268b90bee2d3f0ac58779f4bb99e82dfe7c9f1c82fb3d9f65cf37b00e82

See more details on using hashes here.

File details

Details for the file tract-0.23.0.dev5-cp39-cp39-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for tract-0.23.0.dev5-cp39-cp39-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 beb86227f6adf3a558414d510508908e86d3603ae494a797c798b033114ea485
MD5 9e0912ed8e39a27cb9a3f8794c76b073
BLAKE2b-256 dfd6235123b12162534c7c8dd0bafbce8f82b7655aa60c4f521457f20d4d8895

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