Skip to main content

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.

Metadata

Release files for affinitree 0.23.0

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

Source distribution (sdist)

Source distribution for affinitree 0.23.0
File Size Uploaded Provenance
affinitree-0.23.0.tar.gz 97.1 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for affinitree 0.23.0
File
affinitree-0.23.0-pp310-pypy310_pp73-win_amd64.whl PyPy 3.10 PyPy 3.10 7.3 Windows x86-64 Details
affinitree-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl PyPy 3.10 PyPy 3.10 7.3 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl PyPy 3.10 PyPy 3.10 7.3 macOS 11.0+ ARM64 Details
affinitree-0.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl PyPy 3.10 PyPy 3.10 7.3 macOS 10.15+ x86-64 Details
affinitree-0.23.0-pp39-pypy39_pp73-win_amd64.whl PyPy 3.9 PyPy 3.9 7.3 Windows x86-64 Details
affinitree-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl PyPy 3.9 PyPy 3.9 7.3 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl PyPy 3.9 PyPy 3.9 7.3 macOS 11.0+ ARM64 Details
affinitree-0.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl PyPy 3.9 PyPy 3.9 7.3 macOS 10.15+ x86-64 Details
affinitree-0.23.0-pp38-pypy38_pp73-win_amd64.whl PyPy 3.8 PyPy 3.8 7.3 Windows x86-64 Details
affinitree-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl PyPy 3.8 PyPy 3.8 7.3 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl PyPy 3.8 PyPy 3.8 7.3 macOS 11.0+ ARM64 Details
affinitree-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl PyPy 3.8 PyPy 3.8 7.3 macOS 10.12+ x86-64 Details
affinitree-0.23.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
affinitree-0.23.0-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details
affinitree-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
affinitree-0.23.0-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
affinitree-0.23.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
affinitree-0.23.0-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
affinitree-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
affinitree-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
affinitree-0.23.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
affinitree-0.23.0-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
affinitree-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
affinitree-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
affinitree-0.23.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
affinitree-0.23.0-cp39-cp39-win32.whl CPython 3.9 CPython 3.9 Windows x86-32 Details
affinitree-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
affinitree-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details
affinitree-0.23.0-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
affinitree-0.23.0-cp38-cp38-win32.whl CPython 3.8 CPython 3.8 Windows x86-32 Details
affinitree-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ x86-64 Details
affinitree-0.23.0-cp38-cp38-macosx_11_0_arm64.whl CPython 3.8 CPython 3.8 macOS 11.0+ ARM64 Details
affinitree-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.12+ x86-64 Details

Total release size: 47.8 MB

Release files / affinitree-0.23.0.tar.gz

Download URL affinitree-0.23.0.tar.gz
Size 97.1 kB
Tags Source
SHA-256 checksum
How to use checksums
015dc7ac5ec13afcef6d04c4c71c7f8dfbdb709369881f92669dd8bde2776497
BLAKE2b-256 checksum
How to use checksums
ee788d7affa8987170d3d3f864774451fb9a0e99f895e32ac38c984ea8a296c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp310-pypy310_pp73-win_amd64.whl

Download URL affinitree-0.23.0-pp310-pypy310_pp73-win_amd64.whl
Size 1.3 MB
Tags PyPy 3.10 PyPy 3.10 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
8526f6134e3d75332e486db78a2f40e6d0b7c24de65d1bec6cfb4e15ed2e406e
BLAKE2b-256 checksum
How to use checksums
72aeee2c3c88254779811311aa1153da96f54c46974b18c28eef30254da67bb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags Linux glibc 2.17+ x86-64 PyPy 3.10 PyPy 3.10 7.3
SHA-256 checksum
How to use checksums
1c7526f687c7cb2374db1c24c9209956ba0493e84da55aa9ede18305ef2f02b6
BLAKE2b-256 checksum
How to use checksums
b7629c2c705eb343cb00191ca1f084f638a26f7d009914de76378c322860d4f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Size 1.2 MB
Tags PyPy 3.10 PyPy 3.10 7.3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b1536f8b7ef563069e52f7e9ebc5c63b350f59d6d0356a6373655b82edee3620
BLAKE2b-256 checksum
How to use checksums
7d1d1206f6a862671055cc18d95c5d465368b62fc0c3a9f6626562d72a00bd78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl

Download URL affinitree-0.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags PyPy 3.10 PyPy 3.10 7.3 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
d4325c3bb219463a3ebb5c146b0440fbb6f70f2d3c526a26cd7774760dfc6f2f
BLAKE2b-256 checksum
How to use checksums
d01b05a7172c00233de04bddef29e886765813cfa78cb239223e630e54c9309a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp39-pypy39_pp73-win_amd64.whl

Download URL affinitree-0.23.0-pp39-pypy39_pp73-win_amd64.whl
Size 1.3 MB
Tags PyPy 3.9 PyPy 3.9 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
6bc359fec5207eba5f4ee2421e362b5b0032a8ea43364945a4e2f09bd7fae14e
BLAKE2b-256 checksum
How to use checksums
4bc5e7c92325919a1f79ff06941dad0d0a3f1d34f55734c722fc4c0a82ec9369
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags Linux glibc 2.17+ x86-64 PyPy 3.9 PyPy 3.9 7.3
SHA-256 checksum
How to use checksums
0902b4cf64c1c8e4089ea1b265b3017f86d466238b0b036464bad42dd71794bd
BLAKE2b-256 checksum
How to use checksums
eddcf9004e94cb7a03ce7a7584de2aedff80cbb275f333a05e736df505b252f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Size 1.2 MB
Tags PyPy 3.9 PyPy 3.9 7.3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8ed8f9439d302784fc4fedfea5369723f6428eed285cfa7ad5ddbb8cda18ec45
BLAKE2b-256 checksum
How to use checksums
da87726ccb327f2732df6e00da7c2b08aea275a97cb2d2bd8a948ac4494d5f84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl

Download URL affinitree-0.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Size 1.3 MB
Tags PyPy 3.9 PyPy 3.9 7.3 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
34b9af12a983d13cb9a9b913a10f54d18753d8e258bebe241dfe0cf499a9d2c6
BLAKE2b-256 checksum
How to use checksums
cb99358a7cf6c8b60cbf0feac1775a56522747ebeb3c02c07134826fe1998b8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp38-pypy38_pp73-win_amd64.whl

Download URL affinitree-0.23.0-pp38-pypy38_pp73-win_amd64.whl
Size 1.3 MB
Tags PyPy 3.8 PyPy 3.8 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
24e00a321203b4975e56533a1c013f6c47635d9a745c626e4f20f4abd78155f1
BLAKE2b-256 checksum
How to use checksums
cbd9711ee4ffffc97cc90b772803e2cfcab3d15eff291fdd6e4829eb66736dfe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags Linux glibc 2.17+ x86-64 PyPy 3.8 PyPy 3.8 7.3
SHA-256 checksum
How to use checksums
707df6d8b582c4d338dd23ca6e5c3c3559b4030cf33bc2dbace6df46083f524c
BLAKE2b-256 checksum
How to use checksums
3cda6dd7e557737570f1065f512926f40a8acab9992af0f67704e9a1dfb137a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl
Size 1.2 MB
Tags PyPy 3.8 PyPy 3.8 7.3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
53607540bb3f2b75daf23b9132808a0790fb243985a42b370023b3a168d9cfb5
BLAKE2b-256 checksum
How to use checksums
251df3dd0a77a3c3b77368c806298a022342344591d75a5f9c31539b5b4d3c00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl

Download URL affinitree-0.23.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl
Size 1.3 MB
Tags PyPy 3.8 PyPy 3.8 7.3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
8c4b19c9f775529c38642e4242c2921186432c622a8bde87d82d53a544299d64
BLAKE2b-256 checksum
How to use checksums
3ccce5f0ada5c9cfa7a67ba75cd6c7e2a8f42e972c76d5682b8de206831abed1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp312-cp312-win_amd64.whl

Download URL affinitree-0.23.0-cp312-cp312-win_amd64.whl
Size 1.3 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
ab13a9449e89827b63fef55b418a9e18d6eb476b81a5e2bfbf991ae187ba5ff3
BLAKE2b-256 checksum
How to use checksums
e6bee5a7c02790c639c39aa6f232351a5ae75dc5dde432688615fa12254f9b8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp312-cp312-win32.whl

Download URL affinitree-0.23.0-cp312-cp312-win32.whl
Size 1.2 MB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
6fc41600abf1a6421f0cf33f05ab2ab86005c298fc3cd9888f32f6ac71b73838
BLAKE2b-256 checksum
How to use checksums
8f1dc7a6d80a8f2690ba5044c298561cd16d2a895f8103ae679f62dd661fffae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a29d5842a44e49469d8a6132edd1ac8834b90d741f93f71f506a4b5fdc2faaa9
BLAKE2b-256 checksum
How to use checksums
f16fc62a113e2b210439ff20287c2f2c463fe42fbe542f9d2f9e53c4e48ef9d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-cp312-cp312-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
336644b3d5dbc8272511cfa36e8b5c547b78910f9cd629e68cf296c5a184cbb2
BLAKE2b-256 checksum
How to use checksums
b3f619a054aa54e1af31573a59587a0f46b554204d1d86cf0b0a55195ec8a83c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL affinitree-0.23.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
7320958bc56d80cc125b266855650c06492a40293263992637b5a91f67d195aa
BLAKE2b-256 checksum
How to use checksums
cd62c9c610dabe4e6c73327f0edb08b73aefc3cd1ac105195e9c42f89dd9a483
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp311-cp311-win_amd64.whl

Download URL affinitree-0.23.0-cp311-cp311-win_amd64.whl
Size 1.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
a20b786f27d705bd9a4524af9357792af8681f9357bcf1f283fa54bc308b9b8c
BLAKE2b-256 checksum
How to use checksums
c9229fdfe30646880d0fc033898dad1f17743fde94d4a3f17c9bfe7faadfbf69
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp311-cp311-win32.whl

Download URL affinitree-0.23.0-cp311-cp311-win32.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
1e81309bb6d155d8a3a3f02a730b43a4fe6081d771bc52b033a098310d3af5c1
BLAKE2b-256 checksum
How to use checksums
4faaa6405969313539c4ef4c61b019a6e1e317af3bac23ca2df7227a36705e4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f1b773e3cd6b7a56adc7394e6fe047220740fb94715bde4f9dee6bdf6ecd4100
BLAKE2b-256 checksum
How to use checksums
551e096f70cd2d222a4e21e9640b2f839bec2bc5f3e29e7fcb32dc8ffe49a48c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-cp311-cp311-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
69fa9d8afdb84ab9742b91230af03a5464a44a0604dd5ffa0fc086efe8c067a1
BLAKE2b-256 checksum
How to use checksums
c5e38cb9ef6f4470bce7f68bf8d13cde5d94d420fed601e600b2fb74de3bd99e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL affinitree-0.23.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
d3ed14af87f419fdad8833007cfdf1093cedb7484ee42611592f12c7c90746bf
BLAKE2b-256 checksum
How to use checksums
1628a438192fef367b3dafd7d3b4a595b7bcc965302266763c5fc9c443f0a1fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp310-cp310-win_amd64.whl

Download URL affinitree-0.23.0-cp310-cp310-win_amd64.whl
Size 1.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
86d5882e6001df7b0f51b4ce9fb6a66b08fccfaea14bd94e6976a43931ff7e27
BLAKE2b-256 checksum
How to use checksums
55ffa1433c3b96f6d9054c1e919c50a5385e837b041c23b3ac05648c555e026e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp310-cp310-win32.whl

Download URL affinitree-0.23.0-cp310-cp310-win32.whl
Size 1.2 MB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
72557801abd150189c5065ac45a5cc9eb234ea27d02dfaae6882124f6af37769
BLAKE2b-256 checksum
How to use checksums
d5661651b2fb9fd8bb306f58e53a52d9d095dc418e15c65c5c1610befc640334
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
572b1d3842e007430bdce04ff66bd70ab400bc1a0410eec5f43f8d5378146961
BLAKE2b-256 checksum
How to use checksums
3f108a9bcd24c01ee36badd884d55aa59afc5bedec6c900e7a1889bdc17ac578
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-cp310-cp310-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f1bd8fd3033949363a89edba62f9d2164eea17e4a2348e189d550de98215d4e8
BLAKE2b-256 checksum
How to use checksums
7a612f1dbdbd64cedc3191a309e350e8b0e88b3acbe2e1f4e583a15804f86acb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl

Download URL affinitree-0.23.0-cp310-cp310-macosx_10_12_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
12a530340c4df80bb55c21abcffcf63616ba0d91125fb8b8f58574a3af912259
BLAKE2b-256 checksum
How to use checksums
53ecf3e65e3ae1059ac1e4d9ff294d68fa5292e85375c68f5c5c30646d4e0b96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp39-cp39-win_amd64.whl

Download URL affinitree-0.23.0-cp39-cp39-win_amd64.whl
Size 1.3 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
ea22b5552c1fea681fb8dcc0249a292f62b40e7a8f11094c561791b45e6654dc
BLAKE2b-256 checksum
How to use checksums
454d1164595dee587f8021289e4470ae3e7c9fa40b613e1fcb936ac362efea94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp39-cp39-win32.whl

Download URL affinitree-0.23.0-cp39-cp39-win32.whl
Size 1.2 MB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
e26e77d608d94995e2aafa624149bcb7589c67e26959bfae4e4646fd45930d99
BLAKE2b-256 checksum
How to use checksums
e97251d394fc82023dc8f39f598007b4b554232680145a9b3dbbc6f092548dfe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2b5a5e5b52d39c530da9e170ce8fda71a25b92b6dc6f540043cb2b799995479c
BLAKE2b-256 checksum
How to use checksums
5c83c35dc47792dce5dd4d68864086d07ed373f61e30bb7eced9320752894848
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-cp39-cp39-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c5640c93fdac75726bbbc06b31124ef1fd3d035ced79aaff80952472da319a7a
BLAKE2b-256 checksum
How to use checksums
4b2e52a9fd16dd8ed0e206468d97392fb46f578fc62986c76d67aa16b4207354
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl

Download URL affinitree-0.23.0-cp39-cp39-macosx_10_12_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
692bc2ff64925b729316387a2ba38ed2d09c445cb645e9b3c7877a73d3611ad9
BLAKE2b-256 checksum
How to use checksums
a8480a74dd62f66a4f4aba6d7a252905defca3f56e9cbf08256f34afb01a9f9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp38-cp38-win_amd64.whl

Download URL affinitree-0.23.0-cp38-cp38-win_amd64.whl
Size 1.3 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
b3f6161ab6aa52ccc0c0ca6046aea5c893918f8d792cf1d0b70a79cdce41763b
BLAKE2b-256 checksum
How to use checksums
378744f4fdd8d950a3f9518221adf4a62e8a2fb038fd8637f210af3ffe190485
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp38-cp38-win32.whl

Download URL affinitree-0.23.0-cp38-cp38-win32.whl
Size 1.2 MB
Tags CPython 3.8 Windows x86-32
SHA-256 checksum
How to use checksums
cf015e40d5d1c4a1e74b4a5c1b474d53d074702358cd7c6a861fe9dc68e2de84
BLAKE2b-256 checksum
How to use checksums
a044595987abae2641f4585a686834fdeedf449567417e6fb1fb04a137a144f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL affinitree-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.4 MB
Tags CPython 3.8 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
c99a81947d83d60e378355264bcae1f7742eda919689a25ea6ff6b6fdb5ad6c7
BLAKE2b-256 checksum
How to use checksums
bcbd3ef531021c9575d147157c318385812dcfb5c955fcac30891d6060cd091f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp38-cp38-macosx_11_0_arm64.whl

Download URL affinitree-0.23.0-cp38-cp38-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.8 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d4d48425b1a99fd16f5093c614db0095c929ea39fd17abf21ff1e3865a3951b2
BLAKE2b-256 checksum
How to use checksums
b332a56c92a6a7e587e820d46cbc4b89dc8e49a2981a1c6925f3c10d2c133cb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Release files / affinitree-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl

Download URL affinitree-0.23.0-cp38-cp38-macosx_10_12_x86_64.whl
Size 1.3 MB
Tags CPython 3.8 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
ae7616ec90162bef83f219d29b481daabb9e263b9f9701e787c93dd96c4d7aba
BLAKE2b-256 checksum
How to use checksums
7d7c8460da2c1685be0624d34fccf667b4f4d5302de1694f9a810f245e53b311
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.12

Security for affinitree 0.23.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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