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.tar.gz (7.4 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-cp314-cp314-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.14macOS 10.15+ x86-64

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

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

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.13+ x86-64

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

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

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.13+ x86-64

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

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

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.13+ x86-64

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

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

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.13+ x86-64

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

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

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.13+ x86-64

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

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

File details

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

File metadata

  • Download URL: tract-0.23.0.tar.gz
  • Upload date:
  • Size: 7.4 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.tar.gz
Algorithm Hash digest
SHA256 0f09b9cab2806232ab4719270943456e7ebb298d8a474e02ca43e5a2a9ff437f
MD5 42f94088fedb3250f19a30c241a34c42
BLAKE2b-256 2d194fe726fffa40b18ec1237b81bd59c68e9dec4a37d399bca31d4618e2de32

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.14, 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-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7fb027071e5d7b53546a22f0872313f4d3f939ec34f562c51324870b79a5979d
MD5 b4c4ce474f9852c1330eb22ff7985214
BLAKE2b-256 84b3ad3fe9eafbda5ef0879ebb58c0fc4f9a0473935991b5a822a0a89f000d01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 36c4b63bfa051f48a2c4fcccfc80d1e393242a1322a4cd7ebb5766a941d84a73
MD5 13f51420b567829e205d7d814ffea2e8
BLAKE2b-256 6b5fccf1045b2e7b7aad371f5ef76b497024aac2c62a113c359abe242a14cf30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 56755de73ef1bdc3f9d0e3a033b2515bfc70ab80aa75982d92c53228a20c199a
MD5 ca6ee03347a1ca0d7aaf8ef17cdd0a57
BLAKE2b-256 d60425fd0c2f07b06584c4cd02c4f4946fa61b5040b27238b3d506f4b90fd2cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b15dbce568ed39183306123b867e56a4a6008b2068c4a731816b25c037a9e5c9
MD5 4db4d2b08e5f8a229bd71687293c5472
BLAKE2b-256 a955d2892547c4a23be6a87e1eac47c60c02a5e3e288558a031370fa83d28e62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 1555d2aacbc76286221b7273fe8bf63e901ba36393c1d6401e3ad8b0bc91b2dd
MD5 940e5428519d1fdc0f11178f4b18adf3
BLAKE2b-256 8c441daae3f552f26a48ed4e94e7ffaa17632fbac3e23d7fa63deaef585cb5d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 b32b7c443b9853ed5717f19ad683c3a9a7d11d754f76aa3301dc8e83ae6bcab7
MD5 51268d0cf9178929fd0871e224314d47
BLAKE2b-256 473c489f0f9217d992203d29c34187b9de645764c61f58fe2cf01ee66d93ef68

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.13, 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-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3afa6927b01204c1edb3b0b41d497648fc0a603b38bb6c2d4274b0ce86fd9d39
MD5 012106d06c8f30e0dd2ae97e8484b18b
BLAKE2b-256 6a41504cb1df997eb4ce3c2b4bb55e16abd4fb218dcc9fdbf0cf3aaf4c52fe36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 13c5225ee1afcc932e9cc1e0f546c1409699dc622c55332170e0f99244d09778
MD5 5fe84d532ede87105b7644cf2b7c781d
BLAKE2b-256 796c5c49dd204820cfd7c68e18bfc11be21118e1605f0190de48ff4dc7e0f9d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 822ee642d9bb453ceff0e9cce7607be71b99c61351e4739712b5dd81d2c56b10
MD5 3fd0758c4aa7a969aea3ca5c092b97b0
BLAKE2b-256 b904057f913fc15e63337d17bce36aeb04d2612b98fb8ed3d499b2558b6eee91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d902a5ea0dc5b25b1434332e015caf59d2668eb7f6cef4efa5f12b7c12b7532f
MD5 7495679a5159f6ff8ae1ff1c02866707
BLAKE2b-256 286c1301d23fe477eb3291f1d064efebe37b76ff724185f11449d5fc215fe52a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e87b2a71f7cd424fb35b68157da417d00a3b347d08f98e3c46f30cb4beb3bfcc
MD5 bc27666bd3181e369f55807086347184
BLAKE2b-256 25e698de8e9ca454d671607c74ff932cfa1a3987691d4d5410cd15c0aa86177f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e6b161f8cbf66f351047e1e3b0e0435c336e90405b8a6aac8f7fc6af9e141ad6
MD5 db7fb58b98906e521b01758ccf3b6a2f
BLAKE2b-256 ae2759352cec3dc0c9fd389f4082da11a5669a013a5923434d2abe7a7e960ddc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.12, 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-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 43fecb9d0970cf061109b2c385ce968b8838d799dace0216df602e9b190eb060
MD5 5d7e4e0c75c1403b917bc12376259710
BLAKE2b-256 f22d23b75f2e9d0e4c0e7591d2e0680bfb2a322c6fc10d17b41fb2e7ef80fbef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7263690854a5e91ce55442134b51ea7d07e090bc518f5f3b8cae214cf4d94dc1
MD5 2ab3296ab5db66ee79f21e58474b40c2
BLAKE2b-256 e51a4fb3210873507a03247d696354bcab26c37168cea03c7b9e36b122a62508

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e4b1e2377c474176a26b41936d01fa14dc8a9576f31bac318354e70ca2a8ff91
MD5 0a558982649ca9098d51cca9310fbdee
BLAKE2b-256 9428963645992f70e4e0d0aa321f96e0a1192edd46cb12b896adcbb4f36a568f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 446520802ee579b800c804fe19c061a18ae23b27c5f67ce60bf0bd8d98d69157
MD5 15e63e22dfe742cd98418002ff164f7c
BLAKE2b-256 7df04b75fc9a390abec56e53b6dc547d0dd91c8d14a2d4a300e9f09c7a9509ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0273e11d73d24f892705b63442a72c4ff92bc84b349a48b313118f5a4d815cf7
MD5 4ea7b9e8e3b6963b379cc531773876fd
BLAKE2b-256 3f921460ead967328a49372d188fa5c1d72dad24950b8880b9341ccfe78d52ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 a2535ddb4afd33fe288159d80d2e44befebc07e28941cd8bffa00b7e4f623efd
MD5 5ac3406369e76df5160b00383720efdb
BLAKE2b-256 94c8e3debd2c1e7c9ecb8a816723c1876738b294d6cfdf3d24c30ea81c3760bf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.11, 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-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 01df72f6ede27c33b9f237b230eed48e39077c40a7ac039289da5aacc0f59b80
MD5 2886d8b78ee56c4c043ae3e4a987711f
BLAKE2b-256 289c0fa38fd94c04046959f30257735a7f6625d8d58c46d13e7be797484ec6e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dc72c8be0deac98cb6b25d64edbf07d08932c8310aaabe5638648f07d441df1d
MD5 bbd5d0bb8c70c1657cf4b65f70d2f8e8
BLAKE2b-256 9460a09daa363078d980ceac565b680d291e8ed3d48917a599ce2a7d42afe5a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0c5e6020a11272b35a42c4cb9aff9d840ecd252cc7dd779526d6df22698eed4f
MD5 d1b49d2202b443eb47b3c2f4b0575554
BLAKE2b-256 0d2cdea0fce4e002cebca49eaabde85a8968e828cdb7165643ff47948ecba1c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e2fd6871265a180c6c30614c0ec08e4e5201aa4150c336719b8824d97db87527
MD5 82770acddad1642157b4d705bcb8397b
BLAKE2b-256 11d62c558551d24ffbe6c77572ea98fccfdb43c54eae97fec038ae87f61c63d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp311-cp311-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9f8184dc2981df035312c11826bd37cdfef86f892752424ff8674aee99f06a43
MD5 0d81e7d45d9024c8184fc9587293d414
BLAKE2b-256 1607a1342009c6fc6136ef1888c56260ea0f58666af80c983eac34a9698985c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp311-cp311-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 f67ef65e78afb878ddb7b3f8be2e1869b866f3cfcbc84f4296f4f03d38bbdf37
MD5 e31d0cf2d0f058fb5b006c542801131b
BLAKE2b-256 a1bb122e6b5e9d14acc2559145d4012b8cd00c672e6d4a380f9731c4b78d087c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.10, 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-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d768a0299e8a43e299682238901d551e117c2d892b7e613fd1e4f5bf7bce68f1
MD5 a8a13ae4c07483181aeb105217eb032d
BLAKE2b-256 3aed7e2ec61732278814f69b18482680cde1090c4cd86c6803fed423947e0a71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e9005d8a4e5be5c68166c7b0cc2b0d08b36262b1aa6205429cfcd346bc6f817a
MD5 1b44257c24ed420f5ceb83c8f049df1c
BLAKE2b-256 ff12845472c3bc47a7726fa41bbec1f2bb1fe421ede344488efd80589868ae8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0b3e1689a723ec6e78028081d36966e5c839b1aeea6fcdda8f0ec1a062266219
MD5 15d49a02ad9828eb1d62764124291a12
BLAKE2b-256 b44dfaa7bbe08bb441b82ca91860bf2958dc392c4a716d7b4d0f170e4f1edc3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d57a5dd139f948e95e59b4a2de136a79a276f4c9cdf88f8f2c6c98a4d97f8fd1
MD5 d20b44a76b97c42a99effb89fcfbd32b
BLAKE2b-256 c8b785df7704b6103cd6ced57697ba94dac089eab714e27867166de66e3bd531

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp310-cp310-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ac648a8df23656e66b26a6c4bf38616dddb643f360f033133c5eb2444d304b2a
MD5 cb84d87d5510093a73dace1261910eaa
BLAKE2b-256 80f653b07ed540d152abc86b63f6c8ebe4227592e8742eb565f66c0340eab1b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp310-cp310-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 78c703b6db3b1874f3857c7c73c6e50158c3fad6c4562846a2bff1ef8d0ededa
MD5 80426f5af81b2e2486fc9c515f7c0066
BLAKE2b-256 2cffc79ea589afa468e1084ae3b843a9c229c44476948298a580ac2f35cbf8e0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 10.5 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-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ecef3b568029e49834dd181ba71952ce194525bfc10d599a09707b54ca88330f
MD5 6ca119e542f10b41f216065dc37405f0
BLAKE2b-256 9f1670a475732f803d377fc963e70e44f52b9d0e8318d29608a2f9af5ee3beac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d3ae710d3c9783bd77b7dfe7b0020f61e075561458a8ffad8e841037f3e7c2b3
MD5 d4fa5bcfbfcf7b7e98d9c343e32ce7e3
BLAKE2b-256 57d8ce5c580ca032d63ff63a9fed4c12e0a9cefccfa01ff4806a17891db6227a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2eea62ee959b724eff88ab6467d0de0bd8df714cb54af9902274d3518a02f918
MD5 3538ff59906034ed90578fb7ae70d4ca
BLAKE2b-256 8a912b5b46b1a8d787b9afe1c9aa9c6f4d442ddde1c61136fcf7cd1ce39c324c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9e7533d0ae4e92ed74ebc943c1ce1953e30e0cd69755e7d53b71d97d93b3af5
MD5 38f3951fb9ac254bf7353d7ef911b613
BLAKE2b-256 18d51b0101fb5ee8533f44f2c575219a9a4f736742c3f010dee0b78b7ba1a69f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp39-cp39-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0d66d4c6226bd56bd686be5fd251d3738d276b2808564eba0b714ee1f31b3c34
MD5 f364c04966d9fd141155e337da3ac38e
BLAKE2b-256 b47dc68f9fdd87f6cd24696b995705ec6d331d053d054c77731ae9a6f73e372c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0-cp39-cp39-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 052409a939f091d6f6973b0f9e501cdea5ae764dd733dac505abf4647d2b9c5d
MD5 98f2dc555a50c53b0170513ebeac3809
BLAKE2b-256 b63385c733e3188e8e4c068ff2610bf5afa22754b2501ceabec0dfabbbbe65c9

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