Skip to main content

CMake build Pip install

STreeD: Separable Trees with Dynamic programming

By: Jacobus G. M. van der Linden (e-mail)

STreeD is a framework for optimal binary decision trees with separable optimization tasks. A separable optimization task is a task that can be optimized separately for the left and right subtree. The current STreeD Framework implements a broad set of such optimization tasks, from group fairness constraints to regression.

  • Classification (accuracy, accuracy with a sparsity cost, f1-score)
  • Cost-sensitive classication (feature costs, cost matrix, costs per instance)
  • Regression (constant leaf predictors, constant leaf predictors with a sparsity cost, (simple) linear regression in every leaf)
  • Survival analysis
  • Classification with a fairness constraint (demographic parity, equality-of-opportunity)
  • Prescriptive policy generation

For an explanation of each application, see below. For details on what tasks are separable and how the algoritm works, see our paper and the follow up papers on survival analysis and regression:

  • Van der Linden, Jacobus G. M., Mathijs M. de Weerdt, and Emir Demirović. "Necessary and Sufficient Conditions for Optimal Decision Trees using Dynamic Programming." Advances in Neural Information Processing Systems (2023). pdf
  • Huisman, Tim, Jacobus G. M. van der Linden, and Emir Demirović. "Optimal Survival Trees: A Dynamic Programming Approach." Proceedings of AAAI-24 (2024). pdf
  • Van den Bos, Mim, Jacobus G. M. van der Linden, and Emir Demirović. "Piecewise Constant and Linear Regression Trees: An Optimal Dynamic Programming Approach." In Proceedings of ICML-24 (2024). pdf

Python usage

Install from PyPi

The pystreed python package can be installed from PyPi using pip:

pip install pystreed

Install from source using pip

The pystreed python package can also be installed from source as follows:

git clone https://github.com/AlgTUDelft/pystreed.git
cd pystreed
pip install . 

Example usage

pystreed can be used, for example, as follows:

from pystreed import STreeDClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# Read data
df = pd.read_csv("data/classification/anneal.csv", sep=" ", header=None)
X = df[df.columns[1:]]
y = df[0]

# Fit the model
model = STreeDClassifier(max_depth = 3, max_num_nodes=5)
model.fit(X, y)

model.print_tree()

yhat = model.predict(X)

accuracy = accuracy_score(y, yhat)
print(f"Train Accuracy Score: {accuracy * 100}%")

See the examples folder for a number of example usages.

Note that some of the examples require the installation of extra python packages:

pip install matplotlib seaborn graphviz scikit-survival pydl8.5 pymurtree

Note that pymurtree is currently not available for pip install yet. It can be installed from source (install the develop branch)

Graphviz additionaly requires another instalation of a binary. See their website.

C++ usage

Compiling

The code can be compiled on Windows or Linux by using cmake. For Windows users, cmake support can be installed as an extension of Visual Studio and then this repository can be imported as a CMake project.

For Linux users, they can use the following commands:

mkdir build
cd build
cmake ..
cmake --build .

The compiler must support the C++17 standard

Running

After STreeD is built, the following command can be used (for example):

./STreeD -task accuracy -file ../data/cost-sensitive/car/car-train-1.csv -max-depth 3 -max-num-nodes 7

Run the program without any parameters to see a full list of the available parameters.

Docker

Alternatively, docker can be used to build and run STreeD:

docker build -t streed .
docker container run -it streed /STreeD/build/STREED -task accuracy -file /STreeD/data/cost-sensitive/car/car-train-1.csv -max-depth 3 -max-num-nodes 7

Applications

Currently, STreeD implements the following optimization tasks:

Classification

STreeDClassifier implements the following optimization tasks:

  • accuracy: Minimizes the misclassification score.
  • cost-complex-accuracy: Minimizes the misclassification score plus the cost for adding a branching node by the parameter cost_complexity.
  • f1-score: Maximizes the F1-score.

See examples/accuracy_example.py for an example.

Cost-Sensitive Classification

STreeDCostSensitiveClassifier implements a cost-sensitive classifier. Costs can both be attributed to features and misclassifications.

The costs can be specified with CostSpecifier object. This object is either initialized with a file name for the cost specification and the number of classes; or with the misclassification cost matrix, and the cost specifier per feature. When testing a feature in a branch node, the cost for that feature is paid for every instance that passes through it. When another feature from the same group was tested before, the discounted cost is paid. When another feature that is binarized from the same original feature is already tested, the cost is zero.

Note that currently STreeDCostSensitiveClassifier does not support automatic binarization.

See examples/cost_sensitive_example.py for an example.

Instance-Cost-Sensitive Classification

STreeDInstanceCostSensitiveClassifier implements an instance-cost-sensitive classifier. Each instance can have a different misclassification cost per label.

The costs can be specified with a CostVector object. For each instance, initialize a CostVector object with a list of the costs for each possible label.

See examples/instance_cost_sensitive_example.py for an example.

Classification under a Group Fairness constraint

STreeDGroupFairnessClassifier implements a classifier that satisfies a group fairness constraint. The maximum amount of discrimination on the training data can be specified by the discrimination-limit parameter, e.g., 0.01 for maximum of 1% discrimination.

Currently two fairness constraint optmization tasks are implemented:

  • group-fairness: This satisfies a demographic parity constraint. Demographic parity requires that the positive rates for both groups is equal.
  • equality-of-opportunity: This satisfies a equality of opportunity constraint. Equality of opportunity requires that the true positive rates for both groups is equal.

Note:

  1. STreeDGroupFairnessClassifier assumes binary classification (only two labels: positive = 1, negative = 0).
  2. STreeDGroupFairnessClassifier assumes that the first binary feature column is the discrimination-sensitive feature. Otherwise the sensitive feature can be specified with the sensitive_feature parameter.

See examples/group_fair_example.py for an example.

Regression

STreeDRegressor implements two variants of regression, as specified by the optimization task parameter

  • regression: Miminimizes the sum of squared errors.
  • cost-complex-regression: Minimizes the sum of squared errors plus the cost for adding a branching node by the parameter cost_complexity. For runtime improvement, custom lower bounds can be specified if use_task_lower_bound=True. The custom lower bound regression_bound can be set to either "equivalent" to use the equivalent-points bound or "kmeans" to use a k-means lower bound.

See examples/regression_example.py for an example.

If you use STreeD for regression, please cite our paper:

  • Van den Bos, M., Jacobus G. M. van der Linden, and Emir Demirović. "Piecewise Constant and Linear Regression Trees: An Optimal Dynamic Programming Approach." In Proceedings of ICML-24 (2024).

Piecewise Linear Regression

STreeDPiecewiseLinearRegressor implements a solver for optimizing piecewise linear regression trees, with a linear elastic net regression predictor in every leaf node. The lasso and ridge penalization can be set with the lasso_penalty and ridge_penalty and parameters. The addition of a new branching node is penalized by the cost_complexity parameter. Alternatively, STreeDPiecewiseLinearRegressor can learn a simple linear regression model in every leaf by setting simple = True. The simple linear regression model is penalized only with the ridge penalization.

STreeDPiecewiseLinearRegressor only uses the continuous features for fitting the linear lasso regression model in every leaf node. These continuous features can be automatically inferred from the data or explicitly specified using the continuous_columns parameter of the fit method.

To prevent fitting linear models on too little data, STreeDPiecewiseLinearRegressor by default sets the min_leaf_node_size parameter to at least 5 times the number of continuous features or to at least 5 when fitting a simple linear regression model.

See examples/piecewise_linear_regression_example.py for an example.

If you use STreeD for piecewise linear regression, please cite our paper:

  • Van den Bos, Mim, Jacobus G. M. van der Linden, and Emir Demirović. "Piecewise Constant and Linear Regression Trees: An Optimal Dynamic Programming Approach." In Proceedings of ICML-24, 2024. pdf

Prescriptive policy generation

STreeDPrescriptivePolicyGenerator implements a policy generation solver. Counterfactual scores need to be provided. The current implementation allows for three different teacher methods, as specified by the teacher_method parameter:

  • DM: the direct method or Regress & Compare method. This teacher specifies for every treatment (label) what the expected outcome is.
  • IPW: the inverse propensity weighting method. This teacher provides the propensity scores mu(x, k): the probability of treatment k happening for feature vector x.
  • DR: the doubly robust method: a combination of the direct methodand the inverse propensity weighting method.

The teacher data needs to be passed to the solver by initializing a PPGData object for every instance. The PPGData initializer expects the following parameters:

  • historic_treatment : int : the historic treatment label
  • historic_outcome : float : the historic outcome
  • propensity_score : float : the propensity score for the historic treatment
  • predicted_outcome : List[float] : the regress & compare prediction for each possible treatment Optional (for testing)
  • optimal_treatment : int : the optimal treatment
  • counterfactual_outcome : List[float] : the counterfactual outcome

Only the data which will be used by the teacher method needs to be specified, the rest can be initialized with zero's.

See examples/prescriptive_policy_example.py for an example.

Survival analysis

STreeDSurvivalAnalysis implements an optimal survival tree method, by optimizing the proportional hazard function of LeBlanc and Crowly, "Relative Risk for Censored Survival Data," Biometrics 48.2 (1992): 411-425. Each leaf node predicts a risk factor $\theta$ which is used to shift the base hazard model $\hat{\Lambda}(t)$. The Nelson-Aalen estimator is used as a stepwise survival function $\hat{S}(t) = e^{-\theta \hat{\Lambda}(t)}$.

Instead of a label, the input data expects a two-dimensional array with for each instance 1) a binary censoring indicator and 2) a time-of-event (death or censoring).

See examples/survival_analysis_example.py for an example.

If you use STreeD for survival analysis, please cite our paper:

  • Huisman, Tim, Jacobus G. M. van der Linden, and Emir Demirović. "Optimal Survival Trees: A Dynamic Programming Approach." Proceedings of AAAI-24 (2024). pdf

Parameters

STreeD can be configured by the following parameters:

  • max_depth : The maximum depth of the tree. Note that a tree of depth zero has a single leaf node. A tree of depth one has one branching node and two leaf nodes.
  • max_num_nodes : The maximum number of branching nodes in the tree.
  • min_leaf_node_size : The minimum number of samples required in each leaf node.
  • time_limit : The run time limit in seconds. If the time limit is exceeded a possibly non-optimal tree is returned.
  • feature_ordering : The order in which the features are considered for branching. Default is "gini" which sorts the features by gini-impurity decrease. The alternative (and default for regression and survival analysis) is "in-order" which considers the feature in order of appearance.
  • hyper_tune : Use STreeD's special hyper-tune method.
  • use_branch_caching : Enables or disables the use of branch caching.
  • use_dataset_caching : Enables or disables the use of dataset caching.
  • use_terminal_solver : Enables or disables the use of the special solver for trees of depth two.
  • use_similarity_lower_bound : Enables or disables the use of the similarity lower bound.
  • use_upper_bound : Enables or disables the use of upper bounds.
  • use_lower_bound : Enables or disables the use of lower bounds.
  • verbose : Enable or disable verbose output.
  • random_seed : The random seed.

Binarization

STreeD provides optimal decision trees for a given binarization. To help with the binarization, the pystreed package provides automatic binarization of categorical and continuous features.

Categorical features can be specified in the fit method by using the categorical_columns parameter. These features are binarized using one-hot encoding. The maximum number of categories per categorical feature is specified with the n_categories parameter. If the categorical feature exceeds this number, the n_categories - 1 most common categories are encoded with one binary feature each, and all other categories are encoded with an 'other' category.

Continuous features are automatically recognized by STreeD. Each continuous feature is binarized into a number of binary features as specified by the n_thresholds parameter. Each binary feature has the form x <= t, with x the continuous feature and t the threshold. Currently STreeD provides three ways of automatically binarizing continuous features, as specified by the continuous_binarize_strategy parameter:

  • uniform : Select thresholds uniformly from the interval [min(x), max(x)]
  • quantile : Select thresholds uniformly from the quantile distribution
  • tree : Train a CART tree using only one continuous feature with up to n_thresholds branching nodes, and select the thresholds from the branching nodes.

Note that STreeD provides an optimal decision tree for the given binarization. The binarization should therefore be chosen with care.

See examples/binarize_example.py for an example.

See also our latest paper on optimizing trees with continuous features:

  • Briţa, Cătălin E., Jacobus G. M. van der Linden, and Emir Demirović. "Optimal Classification Trees for Continuous Feature Data Using Dynamic Programming with Branch-and-Bound." In Proceedings of AAAI-25 (2025). pdf / source

Overfitting and tuning

To prevent overfitting the size of the tree can be tuned. This can be done in the standard way using scikit-learn methods, see examples/gridsearch_example.py.

For improving runtime performance, STreeD also provides a custom tuning method that in some cases can reuse the cache from previous runs. To use this, initialize the STreeD model with hyper_tune=True.

STreeD's default method of hypertuning directly tunes the depth and the number of branching nodes using five-fold cross validation. Some optimization tasks specify their custom tuning method, such as cost-complex-accuracy which tunes the cost_complexity parameter.

Miscellaneous

  • STreeD assumes classification labels are in the range 0 ... n_labels - 1. Not meeting this assumption may influence the algorithm's performance. Use sklearn's LabelEncoder to prevent this.

References

This work is a continuation of the following previous papers (with corresponding repositories)

  1. Demirović, Emir, et al. "Murtree: Optimal decision trees via dynamic programming and search." Journal of Machine Learning Research 23.26 (2022): 1-47. pdf / source
  2. Demirović, Emir, and Peter J. Stuckey. "Optimal decision trees for nonlinear metrics." Proceedings of the AAAI conference on artificial intelligence. Vol. 35. No. 5. 2021. pdf / source
  3. Van der Linden, Jacobus G. M., Mathijs M. de Weerdt, and Emir Demirović. "Fair and Optimal Decision Trees: A Dynamic Programming Approach." Advances in Neural Information Processing Systems. 2022. pdf / source

This work also incorporates ideas from the following papers (with their corresponding repositories)

  1. Hu, Xiyang, Cynthia Rudin, and Margo Seltzer. "Optimal sparse decision trees." Advances in Neural Information Processing Systems (2019). pdf / source
  2. Lin, Jimmy, et al. "Generalized and scalable optimal sparse decision trees." International Conference on Machine Learning (2020). pdf / source

Metadata

Release files for pystreed 1.3.9

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

Source distribution (sdist)

Source distribution for pystreed 1.3.9
File Size Uploaded
pystreed-1.3.9.tar.gz 152.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pystreed 1.3.9
File
pystreed-1.3.9-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
pystreed-1.3.9-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details
pystreed-1.3.9-cp312-cp312-musllinux_1_1_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ x86-64 Details
pystreed-1.3.9-cp312-cp312-musllinux_1_1_i686.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ x86-32 Details
pystreed-1.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
pystreed-1.3.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-32 Details
pystreed-1.3.9-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
pystreed-1.3.9-cp312-cp312-macosx_10_9_universal2.whl CPython 3.12 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64) Details
pystreed-1.3.9-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
pystreed-1.3.9-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
pystreed-1.3.9-cp311-cp311-musllinux_1_1_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ x86-64 Details
pystreed-1.3.9-cp311-cp311-musllinux_1_1_i686.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ x86-32 Details
pystreed-1.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
pystreed-1.3.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-32 Details
pystreed-1.3.9-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
pystreed-1.3.9-cp311-cp311-macosx_10_9_universal2.whl CPython 3.11 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) Details
pystreed-1.3.9-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
pystreed-1.3.9-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
pystreed-1.3.9-cp310-cp310-musllinux_1_1_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ x86-64 Details
pystreed-1.3.9-cp310-cp310-musllinux_1_1_i686.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ x86-32 Details
pystreed-1.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
pystreed-1.3.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-32 Details
pystreed-1.3.9-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
pystreed-1.3.9-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 31.3 MB

Release files / pystreed-1.3.9.tar.gz

Download URL pystreed-1.3.9.tar.gz
Size 152.7 kB
Tags Source
SHA-256 checksum
How to use checksums
250435fb37a42bc85aae4c5ac1c12a9d9974081531c4c6fa75c8b83e109392de
BLAKE2b-256 checksum
How to use checksums
19d8ec06cfeb01ee0f3bdf442407b16bab8c985d83e474cd2066356bbf00a16a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-win_amd64.whl

Download URL pystreed-1.3.9-cp312-cp312-win_amd64.whl
Size 786.7 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
964d1013910f734380084ade2140f3e292b279397b5ff3ada0bd99f0b441bf1d
BLAKE2b-256 checksum
How to use checksums
ae077fa9a4ac7a8c8bd5fa3f7be74e71e7601ebd210a5a0b5301a5e3f78d2a6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-win32.whl

Download URL pystreed-1.3.9-cp312-cp312-win32.whl
Size 574.3 kB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
aaa57a3fb710077e8b29a93b1b3b44decdaa34a5106f10d2ac6668c935bba742
BLAKE2b-256 checksum
How to use checksums
44c0b6ac20b13cef8652e887b186d0f9c61882b3ac75fd030d8c0d301a2b0920
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-musllinux_1_1_x86_64.whl

Download URL pystreed-1.3.9-cp312-cp312-musllinux_1_1_x86_64.whl
Size 1.6 MB
Tags CPython 3.12 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
2775a55a34e7e5d609030f6528388ad1701e8df11027c5546fdf6afd9953b0b3
BLAKE2b-256 checksum
How to use checksums
67f5e6517a54208c67208b3a3737aea5de9611e97888051a41a179593853522c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-musllinux_1_1_i686.whl

Download URL pystreed-1.3.9-cp312-cp312-musllinux_1_1_i686.whl
Size 1.8 MB
Tags CPython 3.12 Linux musl 1.1+ x86-32
SHA-256 checksum
How to use checksums
02fb97ebe4fda97a4999e6461009d99be09b5171aadd966b36afdc2bcf531190
BLAKE2b-256 checksum
How to use checksums
7ade8f7155dc4f303a936ec7a2b20538ea6a3c7fb75a22f0fb6ffd044588a9b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pystreed-1.3.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
7fdccaa92ce83dcdf7167ec1f8475809b7c5324fac65f9573210869b9a8d3dd1
BLAKE2b-256 checksum
How to use checksums
30c607e31865f755c81885bb719cec2a1565abaa9bb12764e97024c8a799c9dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL pystreed-1.3.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Size 1.3 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
e918111bde4da797b7d6625defa73d96efad07fb4edfb99b02341914cd8e4641
BLAKE2b-256 checksum
How to use checksums
9054b5c6ff6fab33e5ff6a888a9cc6cdc41d9bdd5baa362b75911819807fca32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-macosx_11_0_arm64.whl

Download URL pystreed-1.3.9-cp312-cp312-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7ec7cfef66069ab3ddc2b33f6acbcc4190a59b627354126e09ef4c202d78087c
BLAKE2b-256 checksum
How to use checksums
b013fb23ca9d88b6bcd03d2669f3e840b5cefccfc2275621f9219958f4b82331
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp312-cp312-macosx_10_9_universal2.whl

Download URL pystreed-1.3.9-cp312-cp312-macosx_10_9_universal2.whl
Size 2.2 MB
Tags CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
783f4ca30cda92bc19060f1ebafb6a5e302a3ded2903c6d76ea01e267ce4348e
BLAKE2b-256 checksum
How to use checksums
1578d283df3ef6c0e96a809d76193807c895c33c0fa33bea4d8049ad0a51a483
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-win_amd64.whl

Download URL pystreed-1.3.9-cp311-cp311-win_amd64.whl
Size 782.1 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
c800502ad708657ba35c2254f8a7115171c68070d504b57f3ca21e84a0d60c87
BLAKE2b-256 checksum
How to use checksums
c9976e7c50cdc02d4c3eea2daa40f45c2d6633114c839af4cf43f0883534cf1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-win32.whl

Download URL pystreed-1.3.9-cp311-cp311-win32.whl
Size 573.1 kB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
4e06e0759f1c3097f2531a768c0014b688fb958f8b6393bf27a4b149a21d230c
BLAKE2b-256 checksum
How to use checksums
fb9d593d4ad2302ee394c4094fdf5814a6d983852743406c3ddf51cccd08c049
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-musllinux_1_1_x86_64.whl

Download URL pystreed-1.3.9-cp311-cp311-musllinux_1_1_x86_64.whl
Size 1.6 MB
Tags CPython 3.11 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
8e3ef6461cc8f86a885570ce2eb4ad05fdcf1e6243dba62780cf9a46647ada41
BLAKE2b-256 checksum
How to use checksums
2464df370e46d376a57e152f8a3aa93259f5e257131af25ee8f152e7f363cade
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-musllinux_1_1_i686.whl

Download URL pystreed-1.3.9-cp311-cp311-musllinux_1_1_i686.whl
Size 1.8 MB
Tags CPython 3.11 Linux musl 1.1+ x86-32
SHA-256 checksum
How to use checksums
7af6053a1483eea22b61b9479ac5aa117269cd070e3a6dd23230378d632b512c
BLAKE2b-256 checksum
How to use checksums
83083310aebb48b529213e433b9402527850a24fc31ff021f9572264b8737a3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pystreed-1.3.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
32e8c9cdb9269c1a83e0762a2b18788572b87f8a13a849fd896fd9e5193cbc35
BLAKE2b-256 checksum
How to use checksums
9febbcc6087539aa29850e6c985ada6141fbfda58fce9b12dd0f2a556fe44618
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL pystreed-1.3.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
98e24a1278a5ece500191d2ec5bc4eca0c53f18f53e2f5aa9bf1d79eb36f048f
BLAKE2b-256 checksum
How to use checksums
9dd065b995d83b270792e2e50b6b77f8cea09292e1d6327f79c9c54b7ab7a9a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-macosx_11_0_arm64.whl

Download URL pystreed-1.3.9-cp311-cp311-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bf2c1762e4dfb289b483bef450761384ef31f6c5589f92ed2d746baeb6a4199e
BLAKE2b-256 checksum
How to use checksums
2fec2726f7d11ce034db39ff6234218e427435568207b6986784b5dec54502e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp311-cp311-macosx_10_9_universal2.whl

Download URL pystreed-1.3.9-cp311-cp311-macosx_10_9_universal2.whl
Size 2.2 MB
Tags CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
be7e51d0b24113f7f38920abfb62cd757b4204ffa9b74534c9712bc17f2c19b5
BLAKE2b-256 checksum
How to use checksums
c7712c5eb90f02266375771cddc7ce241ec2d9aadb11bce82606afdfd8bf0a50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-win_amd64.whl

Download URL pystreed-1.3.9-cp310-cp310-win_amd64.whl
Size 781.3 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4d126ab67413812290d9247b8778c8765269b3000fd2723335559dacf1826e31
BLAKE2b-256 checksum
How to use checksums
6a65ac6a8c973bf274c06725cd2058a8fa40c9c189807b67cb077cc9183ce20c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-win32.whl

Download URL pystreed-1.3.9-cp310-cp310-win32.whl
Size 572.4 kB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
7c531219685f3d4587015ed6a9e53164dff36f5b03db7468c4b5dc5aaba54bf8
BLAKE2b-256 checksum
How to use checksums
43930cca404ce6298a46bda9ce6715b4db5384682bacea351800e893ba72d943
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-musllinux_1_1_x86_64.whl

Download URL pystreed-1.3.9-cp310-cp310-musllinux_1_1_x86_64.whl
Size 1.6 MB
Tags CPython 3.10 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
4e1ab11e1a92032b4a097a443c41852fc62983921ef11fe611790c4302b8e0d2
BLAKE2b-256 checksum
How to use checksums
d1a8866e37ea84ac82c1f0d89bce1dea1b94dab64268667d580394b9e8566641
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-musllinux_1_1_i686.whl

Download URL pystreed-1.3.9-cp310-cp310-musllinux_1_1_i686.whl
Size 1.8 MB
Tags CPython 3.10 Linux musl 1.1+ x86-32
SHA-256 checksum
How to use checksums
914cd3661b792c0571a4643e507682018fbb649cd79527fcdf380c030c905f53
BLAKE2b-256 checksum
How to use checksums
a15039611e34b3658d078c0f50f2578c603b328b4269e7836aa08b434f0e64f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pystreed-1.3.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d64dea22720a5c6430b8853e3c15eb9d1d5744c4e82d89dd54f1ac4d8c5909f9
BLAKE2b-256 checksum
How to use checksums
1b9740da8fc5e62a4f88ae19f61bac43657065d9923b9bc3716d05cbe6ab1fc7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL pystreed-1.3.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-32
SHA-256 checksum
How to use checksums
2ef98ed129b5a7671773886ae065432d9a41f78a7ee80e71efcd79d99132443e
BLAKE2b-256 checksum
How to use checksums
599e6d6bdc37948d3b806f5dfe51f3b4d94488de23c3fa7b6fc7d443953f8356
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-macosx_11_0_arm64.whl

Download URL pystreed-1.3.9-cp310-cp310-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
226d9ec0ebe047e14fb17d86b444aeddd3d656b480348a0d7a3a505182d9cc48
BLAKE2b-256 checksum
How to use checksums
2fcf44d23aab769eb2deae00d8c7d6533a337436468553f65718b5ff0ec3bcb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pystreed-1.3.9-cp310-cp310-macosx_10_9_universal2.whl

Download URL pystreed-1.3.9-cp310-cp310-macosx_10_9_universal2.whl
Size 2.2 MB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
5c173dabf9cd3dd5f52bb524e44b208a224e4211fb668141268618de1bfabcc8
BLAKE2b-256 checksum
How to use checksums
655805a74a3360624cc28e74d9a6679cb7cac32db006d30949f378c78b141e7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

1.3.9 This release

25 release files

1.3.8

25 release files

1.3.6

41 release files

1.3.5

41 release files

1.3.4

53 release files

1.3.3

53 release files

1.3.2

53 release files

1.3.1

53 release files

1.3.0

53 release files

1.2.3

53 release files

1.2.2

53 release files

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