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

Uploaded CPython 3.14Windows x86-64

tract-0.23.0.dev6-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.dev6-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.dev6-cp314-cp314-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tract-0.23.0.dev6-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.dev6-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.dev6-cp313-cp313-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.13Windows x86-64

tract-0.23.0.dev6-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.dev6-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.dev6-cp313-cp313-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tract-0.23.0.dev6-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.dev6-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.dev6-cp312-cp312-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.12Windows x86-64

tract-0.23.0.dev6-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.dev6-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.dev6-cp312-cp312-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tract-0.23.0.dev6-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.dev6-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.dev6-cp311-cp311-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.11Windows x86-64

tract-0.23.0.dev6-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.dev6-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.dev6-cp311-cp311-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tract-0.23.0.dev6-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.dev6-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.dev6-cp310-cp310-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.10Windows x86-64

tract-0.23.0.dev6-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.dev6-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.dev6-cp310-cp310-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

tract-0.23.0.dev6-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.dev6-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.dev6-cp39-cp39-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.9Windows x86-64

tract-0.23.0.dev6-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.dev6-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.dev6-cp39-cp39-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

tract-0.23.0.dev6-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.dev6-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.dev6.tar.gz.

File metadata

  • Download URL: tract-0.23.0.dev6.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.dev6.tar.gz
Algorithm Hash digest
SHA256 90d58ead05a2a38760a9e04448d9116508073ac450d0a4c201c0a430618b3cb8
MD5 097ee98c854ce158d3345e717aafc127
BLAKE2b-256 0fbbbaa94b823da599671dda971a64136f4d218a6969a997cd57e4796dd73dbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 836b40b4f448aa9e3a3db2d1f140e65dfa32c9b9bcfea5fdd5fa0094d96ff392
MD5 7db05c742bfd8cea66157533501c459c
BLAKE2b-256 620d53132f44ac3f22a5ed169bba131b1f807ae5f257062da078fcbdb5c972cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 441ed69ebd8f314e5f1510ce4006fd6d95a4593180b464b806b9d6887f166369
MD5 162df7aab1779b402fef72f7e39788fb
BLAKE2b-256 4ee146606f558023df7487129f76e3d9d20d3c6eb1bcb9a4d68180d465a2fe81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d7b210f6cd1905f5ac269a9851cf417463b04da92f64f3e8e80ef919edb1a7a8
MD5 5760802bc0936656ef3152610d95665f
BLAKE2b-256 dcef96a8700a13a2860ea082d39d061afaafc2fd9fb0e5bd3905498df3dee5b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9876f2593e1ceb5279fe5c3c957dbda6d68af44cfaf85d4155a5f7a28017233c
MD5 839091c692b75be2753b8ab20ca1d105
BLAKE2b-256 1e7c07205e90ac9254331bad49ee147e7942bd2db41ef8841a1ae17d76a963dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6cf51294175ca16295ad6b0b82c95112b6f7efabac2519efa44ee44e79aeff1c
MD5 f0ad028928320e3a0c1df53fd5c40788
BLAKE2b-256 c740acd65d3b090f3f10d0c99eacb88aa096710e1b7c2af5ad654d7862b932d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp314-cp314-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 dce72d39104ee7c96d113912a11642836e4c88afd8c7643e4cb6e12a12b74989
MD5 7be1bd784444015f9a3c187ec778e7c4
BLAKE2b-256 7f094567a844a760de1cabf55715a0287dae1596aadda51e152ad2ea6615896a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 90812609b32107fa08d98bda021c991f7b82ac5d692eb4e0368d2fb4b2f5488e
MD5 f83fce02c309c73d8be98fb88b08ae41
BLAKE2b-256 74ab7c9e54c3f38fde7d536f3f3eb6c49a0779e6af47b4cd6d473ec1b92a7304

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d0974efdc6fd896c7db4f96481938cfec864c374482541322e3649a424f03b1e
MD5 edc6badd6a3cce753fa3f69c4180591f
BLAKE2b-256 5b256b2730c56edb8f9ee2a7d79b147b033f9c688bf1c635e434bb986fd86bf7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a8576683924b6fef1759fa113a1ab215363bf4d11e2805d1fea752c94e4110b
MD5 5f3319ebdd3b7fda0cf4dadd71f06243
BLAKE2b-256 303eff0b469f0e62b437b93a68a97a873bcfc6358b990c76ce87ae4770c426b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53668207ac19ee0382d0ba51a2301023705cdc65e708440c84fa3e820cde3a87
MD5 81da3480720378693e17fff4b003417f
BLAKE2b-256 00cd454a23657145ec7676b7300454b93dd6c21034423fd02cd12fef9bab7fc6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6fef8a71ebb7c760d909f22ad4b1c0924eb03a2cdc036367632d77d2f33d7eea
MD5 2d357742e84a30d9585381e56c552254
BLAKE2b-256 d725f9c71ca2e3041a3b1f4b56372a20c069e5977e4b8bb4fbf0f1c31c7e8a47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 337fb5fe8f44beb88c81fdd3493eef17b3b804bc3ca306c06c0d53b7787ad0d6
MD5 597ff00ed7ac82169262b7db3e99abc7
BLAKE2b-256 06f824b4bbd0b503fe86a23388444b2f0b33a356bf0d54986c9953ab54808c55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4176aa3482e35537e1d9d9323642f373418685ad2186cadd01b17b2f6de215aa
MD5 a2e28cd80a8b08b65538011af159d332
BLAKE2b-256 d0d2ff254845a7d3fb848c9dea3cece3b28b40b09e7a2f4df5b84b1a2ee87a58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 98c6f814ca14f91f710904eedc864b836329d1700a90ef5773a59d1626a79843
MD5 dc419bebb603edf27d084aa2bd635c52
BLAKE2b-256 f0872d747f614c805a016a2932540dc1fa5a295fd710000051430d4447cebb12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 42827476607e8e05e39f481cc5bc588792c101f45d156ce50cc641a724323447
MD5 49c9e324404a8a67a3bfb8a9693ae54d
BLAKE2b-256 df2338de6eab3f7144254749cc53f1e340f6f254ef5587691613e17925766930

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a619dc7cba481152765b51dae71c581e643f6b81cd5e4ee87d37196c27b76350
MD5 f6bc8cfcaf38f5c584a31735718566ce
BLAKE2b-256 bc7d63b25e6d2dfee772fb498433d91b4009341c010e6c891b3a3e9fd276fc02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 95b6341c5ae7592d3109b424729acc63c640e23c55017879b303c7733225c887
MD5 b4f1ef8ee48e723c08bc2d787625c41e
BLAKE2b-256 93c620b633cdcf8dfcd4d0d6d9cdefbf4c2d63c8a17c7f82798a554f8882e1b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 9cb62d04df060e57bbf347576eaf49bb8ca159de3275a1433faaad622c3afddb
MD5 4b85cc1c889895fb76d212cd40adee64
BLAKE2b-256 523850ff70025be60ab3f10e9fffc856528737fab9667bb41626698b9bdcd429

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 94f95fbb3a1602dec7aedc1b41781e3399c8297b69f5eddf11e83fa1c3f2d818
MD5 f46093d31a8cc83fc9d78d52acda5dec
BLAKE2b-256 b20372bd00d97e4539c538796c11d0b7d0ca4389e5d10e72bef4719b17f9e368

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d984b150a29805ca2c063e13865b484443b96898714217287632f7a35d97bafc
MD5 b580a7a6d73915678cba02985d0b6d4b
BLAKE2b-256 3d8156b2c6b6b26fba134b8cc8342a20a89092fb1c4f2ea5d0a70e3f7c88113c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6df808bf9c3228b1b3ef268bf3b3833a065a5a34fa5fc46904200c8881e5644e
MD5 397503819a97ab9054f0ba2eeb8d6c6b
BLAKE2b-256 2e95c597b2b0ed0438d8ca998bcbb3f1d9aefdc9579dc3193e80cbc87f6a8781

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff47ff91490d2f92d653d6e9f3443e82a2955fd388d4b70fda414fd3049e411d
MD5 2dd20048ecbf9e31ec8431662bc021a6
BLAKE2b-256 8479dcf864b616d7e32f9279839eb28e23085abd30ca461743664c98c9f19a2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp311-cp311-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4a22d7a26fbb0834c37ef5f3fdbb88b65517728e515479a210deb70fb3b2ba0b
MD5 3b464920e64a5b4f10e039e3d14dc379
BLAKE2b-256 b1e3c3947c1e9668501c8f2b3eb2eb7e24dd589101ef649c5c7c9caf0fba568e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp311-cp311-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 8163c60abe79bf0a3fabd792c945de6ce13343db65e97668133bd252ead0c7c2
MD5 8e8146b754242fca7cb304c69c292109
BLAKE2b-256 ba8e6cd1dcfbf56e56b60dad67dbd3a5e4be83623891afd0d59623fef1625c73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 72273db2a8289c357a855f2f5d60a9a9ff4396c1f7b0ded7485184393ce41e1a
MD5 d68b551c9d500ad60783c4dd89f48798
BLAKE2b-256 d95b96f2d87d46b971b8713f619da77d1605530cae9143666c1b9219c3e95e76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c9b8284892824d9e3cf36d3296db06ed41f0ae9c18ee859808d2f15aeeec42fb
MD5 ff9a35d22e650ef4db621c5364bb01ed
BLAKE2b-256 4634bc342061dcb216fe078e3104ccf424d2a49eb5b5a749e66c9677b5659d3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 53bd8dfff862b8efd3a982245597a6e629b7f8f3aa8d114927528e393d455eaf
MD5 c7b60e1da5188ed28f033e5384d014cb
BLAKE2b-256 ddcf9e87b35aa2ad83dfd40804b140329532c4a60bfb6ce411c00bd099499443

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39aeda713ea4412ad46a37c2b4fa767672a916404ef496cef7550f80922eaefd
MD5 3f4a6b496fa20cbb2d83f8ac1c94677b
BLAKE2b-256 3e1bdc7007ab5bec5ba77c0c41fa6582244d3bb1b6b020fad7e38e5a3632b7fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp310-cp310-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 432699cf4aca1cbaf5519b5f485d16111e3f423aec7e5b5cd051cfd5dcec9d06
MD5 3303b70b4ada96307f0826d39be50459
BLAKE2b-256 50c7ccb4f6987ba972d0e9d26c3fc5e962e905d79396ffd9ebe9ea36d6eae426

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp310-cp310-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 bd4205963b331f232c5de687f3dcd84d5da3a01b69b0e6cda024d4f4616b07ae
MD5 cfb6cd7525f88dbcd9d47e038bf21817
BLAKE2b-256 da63b08f45bc797b9f1a18df4cf102cf52211a4db352f61c13166c582f372a72

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tract-0.23.0.dev6-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.dev6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5b97452bb571dbeb7772e5d09fc5ed2f9fbd657cf95926311c6cf0f236d605ac
MD5 3d3f955e37b1c54e77f3d812d2a8de10
BLAKE2b-256 e8b7445cdc448c478ae64440d85005e905d515c3bb6ecee465d6096e5ea7e682

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4945bf203677cf763c0613a5a20c18ce674f43edce4081cc68534062fbf7be83
MD5 2abf6e2468cb4db7046973a8d9993b6c
BLAKE2b-256 07a970913710ae59949b5e972ee6d26c0fc64ee79bb7cf93713ce43cd11f6747

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 902653a9347640e3934ee9712b123e7cf3f0a81a0e1be7262fb15c7e409676da
MD5 d309f4180ad4e86d85226bbed382f69e
BLAKE2b-256 e3c84a811fd5a923be0a743ad07f31054b950b396063be08c7f8f550a5720a8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 69f9cfd6966932119f5ffb955db542886b5f4b892e07481a59808c584ad88e71
MD5 1e840a2cba4f051b53f7478a6f82b3bf
BLAKE2b-256 6771b596ae348f37499e242cd20e7badcf6bfcb410a06c0b2651c058620b4ccf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp39-cp39-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0ce3592bbf78f8dd4b96e4d801bc7161527d9f9bc18af02b4a9e115dbc676a02
MD5 6fa700e73af7d2b700622334e21da4a6
BLAKE2b-256 d5c09eec2fd893c9a43fe57efad365b147ba708c6574870a715f2a0cfa49ed56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tract-0.23.0.dev6-cp39-cp39-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 777183494a11d359f1d9d8899c6e8fe8cdd15f353365104156f6240492a3d46a
MD5 692617b6415c8769f0bb4af9b4dcd73f
BLAKE2b-256 fd8cda19a6dabb90f9f5b0f0acc96066ecc30be71b6c2d8a9c95a8362777dcae

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