Skip to main content

Distillation of piecewise linear neural networks into decision trees

Project description

PyPi Build License

Affinitree

Affinitree is an open-source library designed to generate interpretable decision trees from pre-trained, piecewise linear neural networks (like ReLU-based DNNs). These decision trees act as faithful surrogate models, offering an interpretable yet functionally-equivalent alternative to the typically opaque nature of deep neural networks. The core part of the library is implemented in Rust for best performance.

Features

Currently the following features are supported:

  • Construction of functionally equivalent decision trees from deep neural networks with piecewise linear activation functions (e.g., ReLU, Leaky ReLU, Hard Tanh, Hard Sigmoid)
  • Modular and extensible API making use of the compositionality of linear algebra
  • On-the-fly redundancy elimination of infeasible paths
  • Visualizations using Graphviz's DOT language and matplotlib

Installation

Affinitree requires Python 3.8 - 3.12.

pip install affinitree

Pre-built wheels are currently available for Linux, Windows, and MacOS. For other architectures, see the instructions below on how to build wheels from Rust.

First Steps

Affinitree provides a high-level API to convert pre-trained PyTorch models into decision trees. The example below demonstrates how to extract a PyTorch model's architecture and build (distill) an interpretable decision tree from it:

from torch import nn
from affinitree import extract_pytorch_architecture, builder

in_dim = 7
model = nn.Sequential(nn.Linear(in_dim, 5),
                      nn.ReLU(),
                      nn.Linear(5, 5),
                      nn.ReLU(),
                      nn.Linear(5, 4)
                     )

# Train your model here ...

arch = extract_pytorch_architecture(in_dim, model)
tree = builder.from_layers(arch)

It may be noted that affinitree is independent of any specific neural network library. The function extract_pytorch_architecture is a helper that extracts numpy arrays from PyTorch models for convenience. Any model expressible as a sequence of numpy matrices can be read (see also the provided examples).

Visualizing the Decision Tree

After distilling the model, you can use the resulting AffTree to plot the decision tree in graphviz's DOT format:

tree.to_dot()

The emitted DOT code can be rendered into an image such as:

fig:afftree example (at GitHub)

Plotting Decision Boundaries

Affinitree provides methods to plot the decision boundaries of an AffTree using matplotlib. In a classifier, decision boundaries are boundaries in the input space that separate regions where the prediction of the classifier changes. Therefore they constitute an important tool for understanding its decision making.

from affinitree import plot_preimage_partition, LedgerDiscrete

tree = # ...

# ...

# Derive 10 colors from the tab10 color map and position legend at the top 
ledger = LedgerDiscrete(cmap='tab10', num=10, position='top')
# Map the terminals of dd to one of the 10 colors based on their class
ledger.fit(tree)
# Plot for each terminal of dd the polytope that is implied by the path from the root to the respective terminal
plot_preimage_partition(tree, ledger, intervals=[(-20., 15.), (-12., 12.)])

The ledger is used to control the coloring and legend of the plot. A resulting plot may look like this:

fig:mnist preimage partition (at GitHub)

Composition and Schemas

Many complex operations on AffTrees can be constructed in a modular fashion using the composition function. In fact, the previously discussed higher-level functions for distillation internally rely on composition. This is powered by a collection of predefined AffTrees that represent commonly used functions in deep learning. These are implemented in the schema module and include currently:

schema.partial_ReLU(dim=n, row=m)
schema.partial_leaky_ReLU(dim=n, row=m, alpha=0.1)
schema.partial_hard_tanh(dim=n, row=m)
schema.partial_hard_sigmoid(dim=n, row=m)
schema.argmax(dim=n)
schema.inf_norm(minimum=a, maximum=b)
schema.class_characterization(dim=n, clazz=c)

Here $n$ refers to the input dimension and $row$ to a single neuron of the current layer.

For example, the AffTree that represents the partial ReLU function $\mathbb{R}^4 \to \mathbb{R}^4$ that acts only on the first neuron is given by:

fig:partial-relu

In code, the composition looks as follows:

from affinitree import AffTree, schema

tree = AffTree.identity(4)

relu = schema.partial_ReLU(dim=4, row=0)
tree.compose(relu)

The interface is easily adaptable to additional needs, one just needs to define a function that returns an AffTree instance that expresses the required piecewise linear function.

Academic Background

Despite their operational effectiveness, deep neural networks (DNNs) are typically characterized as opaque, black-box systems due to their non-linear, sub-symbolic nature, and inherent complexity. As a consequence, their adherence to desirable semantic properties like safety, fairness, legal-compliance, and control cannot be guaranteed, which slows down their adoption in safety-critical applications. To address these issues, it is important to gain access to their semantics in a structured manner. Building on recent work in the field of Explainable AI (XAI), affinitree implements a technique known as model distillation where a separate, more interpretable model is constructed to mimic a given opaque system (DNNs in this case). In XAI literature, decision trees are widely regarded as one of a few model classes comprehensible for humans, making them a prime candidate for such a surrogate model. In contrast to other distillation approaches, affinitree distills piecewise linear DNNs into faithful (that is semantically-equivalent) surrogate models. Therefore the resulting surrogate models can be analyzed with mathematical precision, allowing to derive hard guarantees for the behavior of the original DNNs.

Technically, affinitree enables the distillation of piecewise linear neural networks into specialized decision trees that extend BSP Trees with a suite of algebraic properties (mostly oriented at linear algebra). When the given DNN is piecewise linear these algebraic properties can be defined by decomposing the DNN into its linear pieces. Today many neural network architectures - such as those using ReLU, LeakyReLU, residual connections, pooling, and convolutions - exhibit piecewise linear behavior. Based on these algebraic features, affinitree provides a modular API that simplifies usage and customization. Affinitree provides several optimization techniques - including infeasible path elimination, redundancy elimination, and concolic execution - to improve the size of the resulting surrogate models and with that the running time of distillation.

Build Wheels from Rust

For best performance, most of affinitree is written in the system language Rust. The corresponding sources can be found at affinitree (rust). To make the interaction with compiled languages easier, Python allows to provide pre-compiled binaries for each target architecture, called wheels.

After installing Rust and maturin, wheels for your current architecture can be built using:

maturin build --release

To build wheels optimized for your current system, include the following flag:

RUSTFLAGS="-C target-cpu=native" maturin build --release

An example for setting up a manylinux2014 compatible build environment can be found in the included Dockerfile.

License

Copyright 2022–2025 affinitree developers.

The code in this repository is licensed under the Apache License, Version 2.0. You may not use this project except in compliance with those terms.

Binary applications built from this repository, including wheels, contain dependencies with different license terms, see binary license.

Contributing

Please feel free to create issues, fork the project, or submit pull requests!

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

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

affinitree-0.23.0.tar.gz (97.1 kB view details)

Uploaded Source

Built Distributions

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

affinitree-0.23.0-pp310-pypy310_pp73-win_amd64.whl (1.3 MB view details)

Uploaded PyPyWindows x86-64

affinitree-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

affinitree-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

affinitree-0.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (1.3 MB view details)

Uploaded PyPymacOS 10.15+ x86-64

affinitree-0.23.0-pp39-pypy39_pp73-win_amd64.whl (1.3 MB view details)

Uploaded PyPyWindows x86-64

affinitree-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

affinitree-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

affinitree-0.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (1.3 MB view details)

Uploaded PyPymacOS 10.15+ x86-64

affinitree-0.23.0-pp38-pypy38_pp73-win_amd64.whl (1.3 MB view details)

Uploaded PyPyWindows x86-64

affinitree-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

affinitree-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded PyPymacOS 11.0+ ARM64

affinitree-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded PyPymacOS 10.12+ x86-64

affinitree-0.23.0-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

affinitree-0.23.0-cp312-cp312-win32.whl (1.2 MB view details)

Uploaded CPython 3.12Windows x86

affinitree-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

affinitree-0.23.0-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

affinitree-0.23.0-cp312-cp312-macosx_10_13_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

affinitree-0.23.0-cp311-cp311-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.11Windows x86-64

affinitree-0.23.0-cp311-cp311-win32.whl (1.2 MB view details)

Uploaded CPython 3.11Windows x86

affinitree-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

affinitree-0.23.0-cp311-cp311-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

affinitree-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

affinitree-0.23.0-cp310-cp310-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.10Windows x86-64

affinitree-0.23.0-cp310-cp310-win32.whl (1.2 MB view details)

Uploaded CPython 3.10Windows x86

affinitree-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

affinitree-0.23.0-cp310-cp310-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

affinitree-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

affinitree-0.23.0-cp39-cp39-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.9Windows x86-64

affinitree-0.23.0-cp39-cp39-win32.whl (1.2 MB view details)

Uploaded CPython 3.9Windows x86

affinitree-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

affinitree-0.23.0-cp39-cp39-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

affinitree-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

affinitree-0.23.0-cp38-cp38-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.8Windows x86-64

affinitree-0.23.0-cp38-cp38-win32.whl (1.2 MB view details)

Uploaded CPython 3.8Windows x86

affinitree-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

affinitree-0.23.0-cp38-cp38-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

affinitree-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: affinitree-0.23.0.tar.gz
  • Upload date:
  • Size: 97.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0.tar.gz
Algorithm Hash digest
SHA256 015dc7ac5ec13afcef6d04c4c71c7f8dfbdb709369881f92669dd8bde2776497
MD5 2387e274f458946de35af82307a7edb6
BLAKE2b-256 ee788d7affa8987170d3d3f864774451fb9a0e99f895e32ac38c984ea8a296c6

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 8526f6134e3d75332e486db78a2f40e6d0b7c24de65d1bec6cfb4e15ed2e406e
MD5 cdf10a27cd981547b5b1da96286f423d
BLAKE2b-256 72aeee2c3c88254779811311aa1153da96f54c46974b18c28eef30254da67bb5

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1c7526f687c7cb2374db1c24c9209956ba0493e84da55aa9ede18305ef2f02b6
MD5 625c162e21b56fd0fd88b9c2c6be4d3c
BLAKE2b-256 b7629c2c705eb343cb00191ca1f084f638a26f7d009914de76378c322860d4f6

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1536f8b7ef563069e52f7e9ebc5c63b350f59d6d0356a6373655b82edee3620
MD5 a94d896f8e423abd5c2ca87cbbe7fe48
BLAKE2b-256 7d1d1206f6a862671055cc18d95c5d465368b62fc0c3a9f6626562d72a00bd78

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 d4325c3bb219463a3ebb5c146b0440fbb6f70f2d3c526a26cd7774760dfc6f2f
MD5 d1dff2114a4d27cc276c6d6ec8bc0497
BLAKE2b-256 d01b05a7172c00233de04bddef29e886765813cfa78cb239223e630e54c9309a

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 6bc359fec5207eba5f4ee2421e362b5b0032a8ea43364945a4e2f09bd7fae14e
MD5 3b9570844869dfc5f05ff563c2d8269e
BLAKE2b-256 4bc5e7c92325919a1f79ff06941dad0d0a3f1d34f55734c722fc4c0a82ec9369

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0902b4cf64c1c8e4089ea1b265b3017f86d466238b0b036464bad42dd71794bd
MD5 a9904743a96600ed701ba1f69c29fefc
BLAKE2b-256 eddcf9004e94cb7a03ce7a7584de2aedff80cbb275f333a05e736df505b252f1

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ed8f9439d302784fc4fedfea5369723f6428eed285cfa7ad5ddbb8cda18ec45
MD5 ce9d7af7df2a7d3c724d28c3477bd51b
BLAKE2b-256 da87726ccb327f2732df6e00da7c2b08aea275a97cb2d2bd8a948ac4494d5f84

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 34b9af12a983d13cb9a9b913a10f54d18753d8e258bebe241dfe0cf499a9d2c6
MD5 3b82db500ae26c8b88469719b850b47b
BLAKE2b-256 cb99358a7cf6c8b60cbf0feac1775a56522747ebeb3c02c07134826fe1998b8d

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp38-pypy38_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 24e00a321203b4975e56533a1c013f6c47635d9a745c626e4f20f4abd78155f1
MD5 b53e7aea9d071e36e0ea05fa83834e2d
BLAKE2b-256 cbd9711ee4ffffc97cc90b772803e2cfcab3d15eff291fdd6e4829eb66736dfe

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 707df6d8b582c4d338dd23ca6e5c3c3559b4030cf33bc2dbace6df46083f524c
MD5 4984cbe634cd52c9f8f1b1e8f2ffce47
BLAKE2b-256 3cda6dd7e557737570f1065f512926f40a8acab9992af0f67704e9a1dfb137a0

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53607540bb3f2b75daf23b9132808a0790fb243985a42b370023b3a168d9cfb5
MD5 80d08371122a3ebb505f32d1c2bf1284
BLAKE2b-256 251df3dd0a77a3c3b77368c806298a022342344591d75a5f9c31539b5b4d3c00

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8c4b19c9f775529c38642e4242c2921186432c622a8bde87d82d53a544299d64
MD5 9de0ec3480ae6db0dd9c84d04c26e504
BLAKE2b-256 3ccce5f0ada5c9cfa7a67ba75cd6c7e2a8f42e972c76d5682b8de206831abed1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ab13a9449e89827b63fef55b418a9e18d6eb476b81a5e2bfbf991ae187ba5ff3
MD5 7de67a43f6a52b9637d78b2e25d09100
BLAKE2b-256 e6bee5a7c02790c639c39aa6f232351a5ae75dc5dde432688615fa12254f9b8b

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: affinitree-0.23.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 6fc41600abf1a6421f0cf33f05ab2ab86005c298fc3cd9888f32f6ac71b73838
MD5 13071a08e5e1fcc804a9942d83b8c05d
BLAKE2b-256 8f1dc7a6d80a8f2690ba5044c298561cd16d2a895f8103ae679f62dd661fffae

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a29d5842a44e49469d8a6132edd1ac8834b90d741f93f71f506a4b5fdc2faaa9
MD5 cf20685766fb683b8a50db8a275daf9b
BLAKE2b-256 f16fc62a113e2b210439ff20287c2f2c463fe42fbe542f9d2f9e53c4e48ef9d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 336644b3d5dbc8272511cfa36e8b5c547b78910f9cd629e68cf296c5a184cbb2
MD5 f8b5eca27245d91378d9059590d3d3ed
BLAKE2b-256 b3f619a054aa54e1af31573a59587a0f46b554204d1d86cf0b0a55195ec8a83c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7320958bc56d80cc125b266855650c06492a40293263992637b5a91f67d195aa
MD5 68431bb19713763f3e5e84bc7b9745b6
BLAKE2b-256 cd62c9c610dabe4e6c73327f0edb08b73aefc3cd1ac105195e9c42f89dd9a483

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a20b786f27d705bd9a4524af9357792af8681f9357bcf1f283fa54bc308b9b8c
MD5 02a32f802ed2cee1cedc3d37a9183c2a
BLAKE2b-256 c9229fdfe30646880d0fc033898dad1f17743fde94d4a3f17c9bfe7faadfbf69

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: affinitree-0.23.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 1e81309bb6d155d8a3a3f02a730b43a4fe6081d771bc52b033a098310d3af5c1
MD5 147daa735f2e944db67a0fd9fa8d64e4
BLAKE2b-256 4faaa6405969313539c4ef4c61b019a6e1e317af3bac23ca2df7227a36705e4d

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f1b773e3cd6b7a56adc7394e6fe047220740fb94715bde4f9dee6bdf6ecd4100
MD5 ad17a3ee2f6552e6deb4e190449d1a1c
BLAKE2b-256 551e096f70cd2d222a4e21e9640b2f839bec2bc5f3e29e7fcb32dc8ffe49a48c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 69fa9d8afdb84ab9742b91230af03a5464a44a0604dd5ffa0fc086efe8c067a1
MD5 bd85299f73068cf44b5b25a9252db8f2
BLAKE2b-256 c5e38cb9ef6f4470bce7f68bf8d13cde5d94d420fed601e600b2fb74de3bd99e

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d3ed14af87f419fdad8833007cfdf1093cedb7484ee42611592f12c7c90746bf
MD5 f9361a7ce0ba4f35935b8423cd584784
BLAKE2b-256 1628a438192fef367b3dafd7d3b4a595b7bcc965302266763c5fc9c443f0a1fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 86d5882e6001df7b0f51b4ce9fb6a66b08fccfaea14bd94e6976a43931ff7e27
MD5 6ab7a8de89cdf170d8b116ab1c58a3db
BLAKE2b-256 55ffa1433c3b96f6d9054c1e919c50a5385e837b041c23b3ac05648c555e026e

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: affinitree-0.23.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 72557801abd150189c5065ac45a5cc9eb234ea27d02dfaae6882124f6af37769
MD5 8e7e69c192e329c2f59daebf049ac654
BLAKE2b-256 d5661651b2fb9fd8bb306f58e53a52d9d095dc418e15c65c5c1610befc640334

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 572b1d3842e007430bdce04ff66bd70ab400bc1a0410eec5f43f8d5378146961
MD5 592c1dc9eef22820ef6b3f49bc032fb7
BLAKE2b-256 3f108a9bcd24c01ee36badd884d55aa59afc5bedec6c900e7a1889bdc17ac578

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1bd8fd3033949363a89edba62f9d2164eea17e4a2348e189d550de98215d4e8
MD5 c71d50f55af6d7c7ac1f497e9bfc2c4d
BLAKE2b-256 7a612f1dbdbd64cedc3191a309e350e8b0e88b3acbe2e1f4e583a15804f86acb

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 12a530340c4df80bb55c21abcffcf63616ba0d91125fb8b8f58574a3af912259
MD5 af3569a095892379ccd7f8c57566e2a2
BLAKE2b-256 53ecf3e65e3ae1059ac1e4d9ff294d68fa5292e85375c68f5c5c30646d4e0b96

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for affinitree-0.23.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ea22b5552c1fea681fb8dcc0249a292f62b40e7a8f11094c561791b45e6654dc
MD5 4c7cc161cf6d9a9cdbf3f336e1f9e4c9
BLAKE2b-256 454d1164595dee587f8021289e4470ae3e7c9fa40b613e1fcb936ac362efea94

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: affinitree-0.23.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 e26e77d608d94995e2aafa624149bcb7589c67e26959bfae4e4646fd45930d99
MD5 50f63ce1e6c8606bd009185f2282504f
BLAKE2b-256 e97251d394fc82023dc8f39f598007b4b554232680145a9b3dbbc6f092548dfe

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2b5a5e5b52d39c530da9e170ce8fda71a25b92b6dc6f540043cb2b799995479c
MD5 c30db9880f39b902763d94028542d432
BLAKE2b-256 5c83c35dc47792dce5dd4d68864086d07ed373f61e30bb7eced9320752894848

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for affinitree-0.23.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5640c93fdac75726bbbc06b31124ef1fd3d035ced79aaff80952472da319a7a
MD5 30d8cc22c8a93b4e12d2de85e34bdb99
BLAKE2b-256 4b2e52a9fd16dd8ed0e206468d97392fb46f578fc62986c76d67aa16b4207354

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 692bc2ff64925b729316387a2ba38ed2d09c445cb645e9b3c7877a73d3611ad9
MD5 bdc99578799db2b00ebe084649b43573
BLAKE2b-256 a8480a74dd62f66a4f4aba6d7a252905defca3f56e9cbf08256f34afb01a9f9c

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: affinitree-0.23.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 b3f6161ab6aa52ccc0c0ca6046aea5c893918f8d792cf1d0b70a79cdce41763b
MD5 5e8764a1d5400286423c7eb5ad2f1e10
BLAKE2b-256 378744f4fdd8d950a3f9518221adf4a62e8a2fb038fd8637f210af3ffe190485

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: affinitree-0.23.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for affinitree-0.23.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 cf015e40d5d1c4a1e74b4a5c1b474d53d074702358cd7c6a861fe9dc68e2de84
MD5 54baf5ef2b8d800201d4c9ef07e5c0dd
BLAKE2b-256 a044595987abae2641f4585a686834fdeedf449567417e6fb1fb04a137a144f3

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c99a81947d83d60e378355264bcae1f7742eda919689a25ea6ff6b6fdb5ad6c7
MD5 093c941575c37294d6db2af536a053b0
BLAKE2b-256 bcbd3ef531021c9575d147157c318385812dcfb5c955fcac30891d6060cd091f

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4d48425b1a99fd16f5093c614db0095c929ea39fd17abf21ff1e3865a3951b2
MD5 258cfbd5a82e812e0f6f9d71c69b263d
BLAKE2b-256 b332a56c92a6a7e587e820d46cbc4b89dc8e49a2981a1c6925f3c10d2c133cb3

See more details on using hashes here.

File details

Details for the file affinitree-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for affinitree-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ae7616ec90162bef83f219d29b481daabb9e263b9f9701e787c93dd96c4d7aba
MD5 2b4a7ef0c1447c77681c8134beb37038
BLAKE2b-256 7d7c8460da2c1685be0624d34fccf667b4f4d5302de1694f9a810f245e53b311

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