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.8.tar.gz (152.1 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.8-cp312-cp312-win_amd64.whl (695.7 kB view details)

Uploaded CPython 3.12Windows x86-64

pystreed-1.3.8-cp312-cp312-win32.whl (573.3 kB view details)

Uploaded CPython 3.12Windows x86

pystreed-1.3.8-cp312-cp312-musllinux_1_1_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

pystreed-1.3.8-cp312-cp312-musllinux_1_1_i686.whl (1.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ i686

pystreed-1.3.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pystreed-1.3.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

pystreed-1.3.8-cp312-cp312-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pystreed-1.3.8-cp312-cp312-macosx_10_9_universal2.whl (2.1 MB view details)

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

pystreed-1.3.8-cp311-cp311-win_amd64.whl (689.5 kB view details)

Uploaded CPython 3.11Windows x86-64

pystreed-1.3.8-cp311-cp311-win32.whl (571.5 kB view details)

Uploaded CPython 3.11Windows x86

pystreed-1.3.8-cp311-cp311-musllinux_1_1_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

pystreed-1.3.8-cp311-cp311-musllinux_1_1_i686.whl (1.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ i686

pystreed-1.3.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pystreed-1.3.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

pystreed-1.3.8-cp311-cp311-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pystreed-1.3.8-cp311-cp311-macosx_10_9_universal2.whl (2.1 MB view details)

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

pystreed-1.3.8-cp310-cp310-win_amd64.whl (688.9 kB view details)

Uploaded CPython 3.10Windows x86-64

pystreed-1.3.8-cp310-cp310-win32.whl (570.7 kB view details)

Uploaded CPython 3.10Windows x86

pystreed-1.3.8-cp310-cp310-musllinux_1_1_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

pystreed-1.3.8-cp310-cp310-musllinux_1_1_i686.whl (1.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ i686

pystreed-1.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pystreed-1.3.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

pystreed-1.3.8-cp310-cp310-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pystreed-1.3.8-cp310-cp310-macosx_10_9_universal2.whl (2.1 MB view details)

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

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8.tar.gz
Algorithm Hash digest
SHA256 0e159011fa5259b8461dbcc89a3febb46591fa8dcf72128fb8b5dbb531148427
MD5 654bac4713cb3d2df069861f3790cdb3
BLAKE2b-256 c30b103f7f0da49e0d7c630583d06efc18f16f86fab8ce6723683fb2d1ff4990

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5424b0253f7452b0ec39ce8991f5e7af28ebc8ba4ddb2e30f159075f72634f94
MD5 f068a2daee65624ff071bae51cdbe7a2
BLAKE2b-256 38f960b362867959b25958a519fe0c10423d4e194d872ecafc54e03976a0089a

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 e2bef4295f4886000064c5d50fefc1535d4e5efbdc162ffb483a1504f822e4a1
MD5 b203d1e81aa7a2b7ecc597a50467603f
BLAKE2b-256 de9b43a435dd901c203001f33f7304dc633001e61916e1b08825d8c808a5ea4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e911c84cbcb994d751371dd2392eb43f9a21ccf3b78fda204ecba173ed0d404f
MD5 e2a9b434ff33a3c9d0da9047de7a8b3a
BLAKE2b-256 d7ac53a9f060f0586e9b670d0d6098b5c5dce9ab304e55d98aed20c80376b29d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 0ba24ce3c5ec35b15e5b87daa26214bf4a9c86dcc820ccf8167004eb3b1de3c1
MD5 20673a3240bd23e581bd31f18e8be739
BLAKE2b-256 695e570fac37cb7fae0bcddc9fdd3c57bdc9f4a99f2036747dcdd4894fb2a691

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 27c86aaabb05cf76a889bf8b987c48bf33f9c333aa99c40383eda12190194f4c
MD5 955dfc6e46065dc3795449c6655ed722
BLAKE2b-256 eda89f4bca2d6271822cb98db64d500ae2cd6cb8691b96b3b8a5ff8e6c48783b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f07e72f652d086fbe5fb25edd3ad48a4de0003d67c3bf645876326e91aacd53f
MD5 f5d326f681ab628272ae80d000d5d2cc
BLAKE2b-256 06ed7dae2a122d4b0cca8927cdb0d67b7d6e5f0472a383bcf8cb699d426b5b8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 22eef9d6ab5f2e2b638b4bf132c656e9cc3d0c380383ffdc632cd073bc4db682
MD5 7b5be9a7fa2d9e876dd1129fe4783adc
BLAKE2b-256 e3bdbcbc496797b3ba375f8d515416107c67b16e6466311318644decffdc6138

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 39fe22b3a138d9c65c8913aae832f1169529448218532ba2ad6fbcfb82b4f134
MD5 b0d56e3e2d699e76b98cd69f98b303cf
BLAKE2b-256 f649fb93707092429b42bb04bc6e393288b1d7129c52d3f8ffd123c9ab5786a1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6881982c5c0cace4af4e44b8211d60622cc0e14b5d00ba819a8dd478543735ff
MD5 1a40d46cbeb58afa101796f31e844cd1
BLAKE2b-256 c56cea82ca539be478c304a432c9aedec32c4a8fb51c346e96165023fc5df2c8

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 5f56751bbe176804707769b826e10a27e5eea2faf3bad8bba72e3d47f3a16f1f
MD5 b7bfa819d76b5e5f2edb8bcc2be49392
BLAKE2b-256 298a1a25c2924672681f243473f400158dd19a4dfe89b57a1327a00ca60d337d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f6f8182d48d122e32f4527cbac7f3b610a24f943d0e998a5c5f76d77cc35cac5
MD5 b06198895e3a553dcf552629806e44ed
BLAKE2b-256 ff5d1854ff92eb1113c87df86c49935ccc24c14e8d632fd423376542aaf19c9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 5ffd714b108fdc14860b2c599f09d53d89d2a7a07ca4689c9d8d7cadc1ae1034
MD5 c377d2ea08163a93a3c2c02dfe9e616f
BLAKE2b-256 a13e7a3cd525ba8699259be2d4062a5b466adb5cdc9d6f2095f3e8e4e8056e73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6e976b014246468f818747600d69706b9c64d4ecbff64fe830c33e0e52bfddeb
MD5 d38f3acb88eec9490a2a43c5b1b76705
BLAKE2b-256 7ecfa1b1b4e42771f81fd07cbb3cc02bf171835b9ca943bc98bdf03a60946b63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 aa9db80a07a632e3140aac985594a4a1a1afe85251752c446451aa1724678853
MD5 4f2985ab085655a2ea9ad46734599df9
BLAKE2b-256 211c03398fbec8d93e179dad32f911561b9da9cd014b2aaf4b6d9d995c3d86c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 11bbaef78f1972fbf6e0baafb927ea6c5f7d96facb4cfdb9f0c774537a319257
MD5 94e9db1e7fb3b73b4dfe1758303894f3
BLAKE2b-256 5d112a9af60b259f242787436050a46abcb5254d68014a79e03bc36ff4724522

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 624a56fa349f9942a0084e5e17fe5399a2b93a288de89ba5fde6fbee9b74b815
MD5 15f2f05c47e9c8ec71e7c2d586aa9733
BLAKE2b-256 81d0ee7b3bb1f42d25f96428c1db1f8b9df7cf14f99303369ffffcf92d402dff

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ec30bc7d8feea955325adf892607c8e4c06cb83dcbcb342114fff05a8b788c5d
MD5 adb3e9f1f366c096e935bedab608fff7
BLAKE2b-256 ddbab82c51e67783ebfe583391a229079573241a2cb36e9ce653a07dcb0dd83d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 9e1b070a6600092594d3a14d8a55e4f66d3890ea6dbe4915d649fe428d48a8a0
MD5 f588b0cb1c4e951b9f828ea0101239ab
BLAKE2b-256 16bcc1c6b1826f61940e5316a6ca635961f9bc656fb65b4067703411d3c46f39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 a97d81a43f884c100ccc53e86e360b546c5cba2df163e6c0a8a15aaee7fd9cdb
MD5 7b013d47d12661c149232688e1d68bf0
BLAKE2b-256 bfc82844467f474854e9a169102abe8932a64a92935c4c9c1899efa5505d8565

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 94b83235fb1d7a08dd4a9ec28da9e5e30119237adedef666949a054099214a5a
MD5 ca789ef9865456b8be7d31899b86ed8d
BLAKE2b-256 37dc309ba76b293294fc8b60af441ebe136efd3466413c7d0d1e0f3a2d5e4a09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ebb77acb902285488b1fc99778b584d29a0cfca1f37417fd3591504bdc02fdb0
MD5 3bff5515507ae6a6c5a5ba0bb9bd926a
BLAKE2b-256 62114b685018e5c1090d78829249d22cea72b6c6c547a9e8dafd615f745309a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 05a3d7c95481e8e574bb44c39eb4d05dd40321541caa7cc6dc8bcd52d6d28fcf
MD5 4df96c7f6df8a868d9583f36e3c07fc1
BLAKE2b-256 8cbc758aee8d9871550e9bc6aaf86ea189e0d67ef6f955c1af794368ce6b03be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ee0a57b40c6f732db4fb5ee7bfb26661b8c2c7f26e01e521578603c7a638259
MD5 6ea357754627538782cfe4e8d0ec86e5
BLAKE2b-256 d617b4f16e87928e67fa4821f8702cd4eec386f1f4512640fc36e88548e2888a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystreed-1.3.8-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6979d6db61e845116b0c9018596af308bd2c8572a20ffd93bc92e41f8d82e6cc
MD5 cf7126b9d42accdd3c8a3d709a228c6a
BLAKE2b-256 85b564a1b1733ac3a8579c89ceec6249958f74a2949245138398b01293bdcdee

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