Skip to main content

Python Implementation of STreeD: Dynamic Programming Approach for Optimal Decision Trees with Separable objectives and Constraints

Project description

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

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

pystreed-1.3.6.tar.gz (151.4 kB view details)

Uploaded Source

Built Distributions

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

pystreed-1.3.6-cp312-cp312-win_amd64.whl (844.1 kB view details)

Uploaded CPython 3.12Windows x86-64

pystreed-1.3.6-cp312-cp312-win32.whl (722.8 kB view details)

Uploaded CPython 3.12Windows x86

pystreed-1.3.6-cp312-cp312-musllinux_1_1_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

pystreed-1.3.6-cp312-cp312-musllinux_1_1_i686.whl (1.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ i686

pystreed-1.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pystreed-1.3.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

pystreed-1.3.6-cp312-cp312-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pystreed-1.3.6-cp312-cp312-macosx_10_9_universal2.whl (2.3 MB view details)

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

pystreed-1.3.6-cp311-cp311-win_amd64.whl (837.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pystreed-1.3.6-cp311-cp311-win32.whl (720.6 kB view details)

Uploaded CPython 3.11Windows x86

pystreed-1.3.6-cp311-cp311-musllinux_1_1_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

pystreed-1.3.6-cp311-cp311-musllinux_1_1_i686.whl (1.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

pystreed-1.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pystreed-1.3.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

pystreed-1.3.6-cp311-cp311-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pystreed-1.3.6-cp311-cp311-macosx_10_9_universal2.whl (2.3 MB view details)

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

pystreed-1.3.6-cp310-cp310-win_amd64.whl (836.6 kB view details)

Uploaded CPython 3.10Windows x86-64

pystreed-1.3.6-cp310-cp310-win32.whl (719.8 kB view details)

Uploaded CPython 3.10Windows x86

pystreed-1.3.6-cp310-cp310-musllinux_1_1_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

pystreed-1.3.6-cp310-cp310-musllinux_1_1_i686.whl (1.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

pystreed-1.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pystreed-1.3.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

pystreed-1.3.6-cp310-cp310-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pystreed-1.3.6-cp310-cp310-macosx_10_9_universal2.whl (2.3 MB view details)

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

pystreed-1.3.6-cp39-cp39-win_amd64.whl (856.6 kB view details)

Uploaded CPython 3.9Windows x86-64

pystreed-1.3.6-cp39-cp39-win32.whl (719.9 kB view details)

Uploaded CPython 3.9Windows x86

pystreed-1.3.6-cp39-cp39-musllinux_1_1_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

pystreed-1.3.6-cp39-cp39-musllinux_1_1_i686.whl (1.9 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ i686

pystreed-1.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pystreed-1.3.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

pystreed-1.3.6-cp39-cp39-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pystreed-1.3.6-cp39-cp39-macosx_10_9_universal2.whl (2.3 MB view details)

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

pystreed-1.3.6-cp38-cp38-win_amd64.whl (836.4 kB view details)

Uploaded CPython 3.8Windows x86-64

pystreed-1.3.6-cp38-cp38-win32.whl (720.1 kB view details)

Uploaded CPython 3.8Windows x86

pystreed-1.3.6-cp38-cp38-musllinux_1_1_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

pystreed-1.3.6-cp38-cp38-musllinux_1_1_i686.whl (1.9 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ i686

pystreed-1.3.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pystreed-1.3.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (1.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

pystreed-1.3.6-cp38-cp38-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

pystreed-1.3.6-cp38-cp38-macosx_10_9_universal2.whl (2.3 MB view details)

Uploaded CPython 3.8macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file pystreed-1.3.6.tar.gz.

File metadata

  • Download URL: pystreed-1.3.6.tar.gz
  • Upload date:
  • Size: 151.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6.tar.gz
Algorithm Hash digest
SHA256 205d1877d731000d6a6359630f0d2018d56dace8fa60f6de0dc6ec994aea803c
MD5 d5ad82cafea51e2cd6cd8c1379aeaefb
BLAKE2b-256 6508092dd21dbbc38eb16fc0ed505adab5eb41fea82483f1fca9e485aef943b8

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 844.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c9ec51c67278518a60aa5c82b328ecf18fda1a8cd594732e3a030e22bf379fe6
MD5 c688f099fd056117af68fd7b7b12b817
BLAKE2b-256 eff87833dc5401a97b17d2c4a1f665f660b854133412d69f56eb81e18570af82

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-win32.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp312-cp312-win32.whl
  • Upload date:
  • Size: 722.8 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 06ff7dcd25d1c4c2c11fc7a36b9511742644d1c82389e92ce327189554662eff
MD5 63e7ad14c4c41ea3a57f8413164670c2
BLAKE2b-256 4e3f0d61705199e6da75c28f1273afd2a50d8e9aedcb8910c131b3895ce32885

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4ac424f906b9f91577b6c8408d68f2d00046cd45db7d54999c158311fb5a53bd
MD5 fefab9a2a3e619a98f8ff9d78c9e0ba0
BLAKE2b-256 5f431d7d6b2c893c8744bbe561acb622694019050d6b9304a271084e2808dacf

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 cba891cc311c7e008547b865f9461549c0c271a09b5e79df8ba91bfd6053ae80
MD5 93c8d85c682a7b441884fd2d1a8638c9
BLAKE2b-256 fa30423e83adf0064567a1da63d98b25f85281bbd0760d947be00e528f6871af

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 997979a93356132db3d7b18e365bd2258371612746112ad14ed4fd19965caaf2
MD5 089d216a1d7af8c8023d688c4fd21ce3
BLAKE2b-256 3b9346ca8a9c1cc0932b980fa666fc01fd73dea507bf82b0ed8fe052d2b361cb

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f9600fbdcc39a7455a1e7afdf2329d80e81f9d6559578c6c021d959ee53e8280
MD5 8735d0ddbc6f8e217978ddcbd2f76f2e
BLAKE2b-256 32a0e796b833e228793609c974e01554d7f473bd4b2be6535246f1cb4f553df3

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aa4fcb8672796e71b17580552796e9e649d68b8eb557e4d3601e6187d1b1626d
MD5 453d8e6b0ebf9fe3b302c40c6b329eed
BLAKE2b-256 1f92e7f2014956b847d8263e5068467bf35a66fba9e64fa8f9430aed0ba9a8e4

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 452c85a34ae1782a36799e693dc472cd15db15038babc24c55c34e11e0a617b6
MD5 ae7cad6ff9a53c7de4d6049d2573ebcc
BLAKE2b-256 7ca4549625d57a37da0f9df64fb9a10165a45abb60f5ba337bedce7e25dee189

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 837.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 81fb1e4bd44f101609d834c05ba0d8102844e2f9918db43191bc9f90e93b1592
MD5 e4749aa647ec274aec957c0d7571aaf5
BLAKE2b-256 9cea7070aef8176c6d87722ae663bbe9278c95b23c5a3d8aa0c23757f553018f

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-win32.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp311-cp311-win32.whl
  • Upload date:
  • Size: 720.6 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 87ace5f4a611cd6b1457faf7bc5307d099ab310c856f51c6569cf5b2d8378dd1
MD5 c06b9ae82e714a61f1555fdad235ac5b
BLAKE2b-256 e554da30a5b46a5c86f925079f1f00c8d05ac3cf586ab2b3b0cf18727ae89055

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 01829cb039629e0b72709628c55c26a06acbdf27b7c8bc4f143262e31bb8a783
MD5 393699472d2e01d8bff61efaa9aff978
BLAKE2b-256 5fe80efad5eb6cb2ff7f2c327c690b97345a1f0cc6ed8812c8337a51ab22b45e

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 c42d934397116245ef7669a2bebf69618c3664769e705ae6ba9f2465d99c7b8e
MD5 598134779406404233b097adcae30f0c
BLAKE2b-256 d0210193a4b715efe36de2cfd55f64752095ae2218b46651537034ec6a834e47

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2926765adb15819e44bc0b6973b77fef9e3099eec0e8a7b1f402392308be40e6
MD5 d1c46cfe15220a29066f7b03056ac05e
BLAKE2b-256 d61eca186c75bdc50148cbb624ad697f7c19875599b42e615ef2e60bfd3fc519

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 47407f37eb7b121c398a4761b0661babbdc52a8db3901251b62c9f1a4c38d3e5
MD5 064bae78293efd0acf4c7e7ab4c521ed
BLAKE2b-256 c64a39fd0523d9e575fea34e7d8a110cba70e8e63611bf3a6a76a8e28f40becb

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7ac2c19097e3217e4c80bd15250b515234774a812de45d1f3cc49e83f6d4360c
MD5 ddcb41aa83a2869d9ec5570d9de0d792
BLAKE2b-256 4c248dddd00a9164fdf85d5c77ddf32a6937a8407da7b81a999dd27b0a373f1f

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d3634ebe486d2ed8ce063bdae34b8fe940023893512b1afb2acafefaca58e755
MD5 f020014c14cbf6b80391a2fe805c8b3a
BLAKE2b-256 a368853be5d91ecc93e9bb1e1d9535b34f2d831d253cef89ceaa55e2fc18b221

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 836.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bae958d07c43998ff266ef4fe9a2db43e5ec8e19a13ce7d753c9191dc0261a4f
MD5 51654d003ec4300731f3f3ecc2d7a3d0
BLAKE2b-256 93d8e434c9be05f2509995bd5c4ae9191bd2a00db1fbcddfeb77f5809c207be9

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-win32.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp310-cp310-win32.whl
  • Upload date:
  • Size: 719.8 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3ab6c43adf90942f9d4aab3d844d89b8c6f2fc9e623b884346def0b541b10727
MD5 a2dfefbfb6adf19ce658bd571f9366ff
BLAKE2b-256 97aec21a4c17dc3151b6bf2680e2023f6cd8483802229cfcd63320c5d2a757b6

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8b56118c0c4d7d71ec2f946b72ec75e3214a34106136d87ea655c761dfd35b15
MD5 96cda3e5911d57d4395f3f31fe6c41e6
BLAKE2b-256 175867637271a07be78652272b61805aec51199884baf3e824831f3a99c74451

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 bc95476d63777a8e5120b27135c13faa42ece2aec79e2f2b0d862909c1edf8d4
MD5 ac2b08eebe3d605bda8711bd977b963c
BLAKE2b-256 b4b52766abe1e43bdc7e36c079905ab06e86968220bc06ce6f3092516fe979ce

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 30f958e455b62e812a10db55f71a0e098fa5fde33cf67998f22a123aea02a875
MD5 65d253cb0c652fe4753ee243b49c2143
BLAKE2b-256 758ab15235fcdc12bafc755fb1ffa2c0b48b16ebb09c369a74e2165d7747dace

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 67fee4888b1d041c3bc9a48366fe0fd20a04c81fb5e0e6954ac22492d5e34e8a
MD5 5d1badb3e5f9b7ab18fb300c23739747
BLAKE2b-256 cf39294d3d44b60c3514b2b516223edd941f334dd524e67449865c3cae2e5a29

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63521b2a8c19fe6ba3080b2e0cb47dfffd0cb953740c1cd53aa35b5af1559689
MD5 359b665e06afd8ce17e798dc9f722bbf
BLAKE2b-256 82f0f2bbee51cebdf792bb0939a03723f9714315e10c881f0fa0eda81e2cf6c2

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f38e26f06e264a8d3d2d49cfb4ffe2fd23bdf79a110ed21070602640849da90c
MD5 1ee1e383c80c90e2ab353e7af4b60cf1
BLAKE2b-256 14e82e068845d7e011ec06303a5f9ec8546960aa5941520f51a75cca8b296277

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 856.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8c329cb1a64690972d491325cdc75e970deef146709066f65439632730952557
MD5 523e62d1976896d53886d15ed52ad98a
BLAKE2b-256 bf1fa517729490ab561c0768e404400f0b22186b2421ba91cba2c0c8a52b00bb

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-win32.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp39-cp39-win32.whl
  • Upload date:
  • Size: 719.9 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 4b82ba1ef0424f3b3805cb5c5bf7a84fec3e494e2fdd192674bbd560e7d8be33
MD5 9db95fb8ad90fe559f2a694a279f0ec9
BLAKE2b-256 f8bca791f569d5239783fd499c0f600f3074475b8ab02b28bdd731b5fc6e2b40

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7f392bb82d939fed3313b4943e86b2416d8e80a19f9821cdb125bb66bfcb7d72
MD5 2a35341f9a3a457047fb4de276879593
BLAKE2b-256 93518fb99a0014d11a4d417c9184d1276899fc8c9e0c96e9e2630ace2c7eb5e0

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0f90f45bbd5a46bc01f066980365c4032313927da6e21ecdb2979eefe69f1dd3
MD5 fc5f5cbf7f58577eb29215648393512f
BLAKE2b-256 7758c5f04f4d3e224e293706313c4500b871e8ef4352be2f485226764540c74c

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2026b94acc0b6966d40395619efd1efe500a822dfe1f64746b3c877f1d455be9
MD5 c03fa15b4c376cf7f1d88a1ec711b837
BLAKE2b-256 c35791abb0c94a1882c82cacce28292e71a0f1e21b73829c5753c307fe96aade

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7f599edfe7ba642f0c5e1ca0ba2fe004877a2c8eb07c49b9874446536071568b
MD5 3a3ee4c87b85cc1e41e1f8f4799477fd
BLAKE2b-256 c7eceec4e125c2b2ad8c3fad34cf30c6560982cfcda310089e375541aab1da41

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 65e4e40db107d481bac20206e8ff9cf9f6b2ea48e1473a03b98e784a784b6f34
MD5 98da0c5b4b75248d7b6ec9229ff6bf41
BLAKE2b-256 f4ff20062e596b081d814da67ae6c782917647c00238e2d9cc299d3ff76ed14b

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c2b671c2ffa750afe4109502f7b2b6eda948e74fadbb365600225b285fa2c535
MD5 11f09b0c6518a9fb6ee8f68e1b03ffe7
BLAKE2b-256 786470d768cf6a9d5904271e8a640888f63911f279c182f560a229f659cb9dfd

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 836.4 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 fc2c11f57e242260491492af4d5b1e8b7f60d4c13c6d70b0fdecd3e8573bab5b
MD5 1479f6003df90b2da23ce7a7ee97f60f
BLAKE2b-256 e66893cca4074d09cb051af8c7d2b06b2f4accb3a09d77f49fb30c58564c037d

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-win32.whl.

File metadata

  • Download URL: pystreed-1.3.6-cp38-cp38-win32.whl
  • Upload date:
  • Size: 720.1 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 1728643d223f066d2abf342f80fc9e3397ff4a3df2a62378aa8d16b29ffcc2c9
MD5 467d742a4393efc7817419ecae34e860
BLAKE2b-256 b8a213dabaafef4901fa52da5cc3c93d72552ff830f288a816ab8bece0f323f7

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 aaf09785ed1fd3b4897ed59aabe0f2ead88c474897ad0c0db358ffd31cd5888e
MD5 572c167ebaa4823bd32eed440d0efbaf
BLAKE2b-256 b59f3681bbde851e48b330ea91fe9277d7820fd828cb54d6366cb60d4ed3f17f

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 cc79de8e58b4804eb2a8abd07019b6fddeb660656572642b3e023726a26dffa3
MD5 60cf9e5404dad4a86f0b5231b185d4d8
BLAKE2b-256 51af52a2083a90897132168238ecbbb0e45d13b87484a4e720fcc80c7cad42fc

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0cc626979e92acb48d92c50595eba5906741f1c5414c726e849eafbd04347281
MD5 8c10459dcab3366c8108a1532e1d83b1
BLAKE2b-256 32a04c228186876f2c76f270851991d0bba4b78696e42991556a32ba8c415575

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 aacc65f6c6b285aec42e8de047ba34f79dd72bcb2b6249f5dac5a67343eeb6b6
MD5 3de31303a56ab2cc85f5f8573a51069d
BLAKE2b-256 1d147fe4acaaf6b3b8ef0f87d06ce6d1b7c10023c88f9748d854e06af4ff4396

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 603ea659f81419f02f03e5bb943ed9297bc42dc6fe82de7d74cccbafeb5e7e09
MD5 2f10248a876ad3137f8ded0e4635dfe4
BLAKE2b-256 33c593637f515ba296a5d38dddca078c1d8538b2c0f55496c508b211b932ad4f

See more details on using hashes here.

File details

Details for the file pystreed-1.3.6-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for pystreed-1.3.6-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5fcf081579e25b2193f4557f9a48b21768dd982cdac67a4dcd902149e42c6d87
MD5 8bd59966d0da2c3cea7c8d45fcce829f
BLAKE2b-256 e2d7256af2e501c3a4d455b8ff866f8fa4ab16d84aa9f190ef0ba1b66e64b1d5

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