Skip to main content

Implementation of General Optimal Sparse Decision Tree

Project description

Fast Sparse Decision Tree Optimization via Reference Ensembles

License example workflow

This project is the cannonical implementation of the following papers:

  • McTavish, H., Zhong, C., Achermann, R., Karimalis, I., Chen, J., Rudin, C., & Seltzer, M. (2022). Fast Sparse Decision Tree Optimization via Reference Ensembles. Proceedings of the AAAI Conference on Artificial Intelligence, 36(9), 9604-9613. https://doi.org/10.1609/aaai.v36i9.21194
  • Jimmy Lin, Chudi Zhong, Diane Hu, Cynthia Rudin, and Margo Seltzer. 2020. Generalized and scalable optimal sparse decision trees. In Proceedings of the 37th International Conference on Machine Learning (ICML'20), Vol. 119. JMLR.org, Article 571, 6150–6160.

A scikit-learn compatible library for generating Optimal Sparse Decision Trees. It is a direct competitor of CART[3] and C4.5[6], as well as DL8.5[1], BinOct[7], and OSDT[4]. Its advantage over CART and C4.5 is that the trees are globally optimized, not constructed just from the top down. This makes it slower than CART, but it provides better solutions. On the other hand, it tends to be faster than other optimal decision tree methods because it uses bounds to limit the search space, and uses a black box model (a boosted decision tree) to “guess” information about the optimal tree. It takes only seconds or a few minutes on most datasets.

To make it run faster, please use the options to limit the depth of the tree, and increase the regularization parameter above 0.02. If you run the algorithm without a depth constraint or set the regularization too small, it will run more slowly.

This work builds on a number of innovations for scalable construction of optimal tree-based classifiers: Scalable Bayesian Rule Lists[8], CORELS[2], OSDT[4].

Table of Contents

Installation

GOSDT is available on PyPI and can thus be easily installed using pip.

pip3 install gosdt

Note: Our x86_64 wheels all use modern ISA extensions such AVX to perform fast bitmap operations. If you're running on an older system where that's not possible, we recommend that you build from source following the instructions bellow.

Example

This is a classification example using GOSDT with threshold guessing, lower bound guessing and a depth limit. Additional examples and notebooks are available in the examples/ folder.

import pandas as pd
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from gosdt import ThresholdGuessBinarizer, GOSDTClassifier

# Parameters
GBDT_N_EST = 40
GBDT_MAX_DEPTH = 1
REGULARIZATION = 0.001
SIMILAR_SUPPORT = False
DEPTH_BUDGET = 6
TIME_LIMIT = 60
VERBOSE = True

# Read the dataset
df = pd.read_csv("datasets/compas.csv", sep=",")
X, y = df.iloc[:, :-1], df.iloc[:, -1]
h = df.columns[:-1]

# Train test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2021)
print("X train shape:{}, X test shape:{}".format(X_train.shape, X_test.shape))

# Step 1: Guess Thresholds
X_train = pd.DataFrame(X_train, columns=h)
X_test = pd.DataFrame(X_test, columns=h)
enc = ThresholdGuessBinarizer(n_estimators=GBDT_N_EST, max_depth=GBDT_MAX_DEPTH, random_state=2021)
enc.set_output(transform="pandas")
X_train_guessed = enc.fit_transform(X_train, y_train)
X_test_guessed = enc.transform(X_test)
print(f"After guessing, X train shape:{X_train_guessed.shape}, X test shape:{X_test_guessed.shape}")
print("train set column names == test set column names: {list(X_train_guessed.columns)==list(X_test_guessed.columns)}")

# Step 2: Guess Lower Bounds
enc = GradientBoostingClassifier(n_estimators=GBDT_N_EST, max_depth=GBDT_MAX_DEPTH, random_state=42)
enc.fit(X_train_guessed, y_train)
warm_labels = enc.predict(X_train_guessed)

# Step 3: Train the GOSDT classifier
clf = GOSDTClassifier(regularization=REGULARIZATION, similar_support=SIMILAR_SUPPORT, time_limit=TIME_LIMIT, depth_budget=DEPTH_BUDGET, verbose=VERBOSE) 
clf.fit(X_train_guessed, y_train, y_ref=warm_labels)

# Step 4: Evaluate the model
print("Evaluating the model, extracting tree and scores", flush=True)


print(f"Model training time: {clf.result_.time}")
print(f"Training accuracy: {clf.score(X_train_guessed, y_train)}")
print(f"Test accuracy: {clf.score(X_test_guessed, y_test)}")

FAQ

  • Does GOSDT (implicitly) restrict the depth of the resulting tree?

    As of 2022, GOSDT With Guesses can now restrict the depth of the resulting tree both implicitly and explicitly. Our primary sparsity constraint is the regularization parameter (lambda) which is used to penalize the number of leaves. As lambda becomes smaller, the generated trees will have more leaves, but the number of leaves doesn't guarantee what depth a tree has since GOSDT generates trees of any shape. As of our 2022 AAAI paper, though, we've allowed users to restrict the depth of the tree. This provides more control over the tree's shape and reduces the runtime. However, the depth constraint is not a substitute for having a nonzero regularization parameter! Our algorithm achieves a better sparsity-accuracy tradeoff, and saves time, with a well-chosen lambda.

  • Why does GOSDT run for a long time when the regularization parameter (lambda) is set to zero?

    The running time depends on the dataset itself and the regularization parameter (lambda). In general, setting lambda to 0 will make the running time longer. Setting lambda to 0 is kind of deactivating the branch-and-bound in GOSDT. In other words, we are kind of using brute force to search over the whole space without effective pruning, though dynamic programming can help for computational reuse. In GOSDT, we compare the difference between the upper and lower bound of a subproblem with lambda to determine whether this subproblem needs to be further split. If lambda=0, we can always split a subproblem. Therefore, it will take more time to run. It usually does not make sense to set lambda smaller than 1/n, where n is the number of samples.

  • Is there a way to limit the size of the produced tree?

    Regularization parameter (lambda) is used to limit the size of the produced tree (specifically, in GOSDT, it limits the number of leaves of the produced tree). We usually set lambda to [0.1, 0.05, 0.01, 0.005, 0.001], but the value really depends on the dataset. One thing that might be helpful is considering how many samples should be captured by each leaf node. Suppose you want each leaf node to contain at least 10 samples. Then setting the regularization parameter to 10/n is reasonable. In general, the larger the value of lambda is, the sparser a tree you will get.

  • In general, how does GOSDT set the regularization parameter?

    GOSDT aims to find an optimal tree that minimizes the training loss with a penalty on the number of leaves. The mathematical description is min loss+lambda*# of leaves. When we run GOSDT, we usually set lambda to different non-zero values and usually not smaller than 1/n. On page 31 Appendix I.6 in our ICML paper, we provide detailed information about the configuration we used to run accuracy vs. sparsity experiments.

How to build the project

Step 1: Install required development tools

GOSDT uses CMake as its default cross-platform build system and Ninja as the default generator for parallel builds. GOSDT relies on pybind11 for Python bindings and scikit-build-core as its Python meta build system for the generation of wheel files. GOSDT also uses delocate, auditwheel and delvewheel to copy all required 3rd-party dynamic libraries into the wheel archive (Each of these different tools are used for the three OS platforms we support: macOS, Linux, and Windows).

Note that delocate, auditwheel and delvewheel are only only needed if building wheels for deployment to PyPI.

macOS: We rely on the brew package manager to install 3rd-party libraries and dependencies.

brew install cmake ninja pkg-config
pip3 install --upgrade scikit-build-core pybind11 delocate

Ubuntu:

sudo apt install -y cmake ninja-build pkg-config patchelf
pip3 install --upgrade scikit-build-core pybind11 auditwheel

Windows: Please make sure that you launch Powershell as Admin.

Step 1.1.: Install Chocolatey

In addition to Windows Package Manager (a.k.a. winget), Chocolatey is used to install tools that are not yet provided by winget. Please follow this guide or use the following commands to install Chocolatey.

Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

Step 1.2: Install vcpkg

GOSDT requires the C++ package manager vcpkg to install all necessary C and C++ libraries on Windows. Please follow this guide or use the following commands to install vcpkg to C:\vcpkg.

cd C:\
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat

Once you have installed vcpkg, for example, to C:\vcpkg, you need to...

  • Update your PATH variable to include C:\vcpkg.
  • Add a new environment variable VCPKG_INSTALLATION_ROOT with a value of C:\vcpkg.

The following Powershell script modifies the system environment permanently. In other words, all users can see these two new variables.

$vcpkg = "C:\vcpkg"
$old = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).path
$new = "$old;$vcpkg"
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $new
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name VCPKG_INSTALLATION_ROOT -Value $vcpkg

You can verify whether the new variable VCPKG_INSTALLATION_ROOT is set properly by typing the following command in Powershell: Note that you may need to restart your terminal or reboot your computer to apply the changes.

$ENV:VCPKG_INSTALLATION_ROOT

Step 1.3: Install required development tools

winget install Kitware.CMake
choco install -y ninja
choco install -y pkgconfiglite
pip3 install --upgrade scikit-build
pip3 install --upgrade delvewheel

If choco install -y pkgconfiglite reports SSL/TLS-related errors, please use the following commands to install it manually.

Invoke-WebRequest -UserAgent "Wget" -Uri "http://downloads.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip" -OutFile "C:\pkgconfig.zip"
Expand-Archive "C:\pkgconfig.zip" -DestinationPath "C:\"
Copy-Item "C:\pkg-config-lite-0.28-1\bin\pkg-config.exe" "C:\Windows"
Remove-Item "C:\pkg-config-lite-0.28-1" -Force -Recurse
Remove-Item "C:\pkgconfig.zip"

Step 2: Install required 3rd-party libraries

GOSDT relies on IntelTBB for concurrent data structures, and GMP for fast bitwise operations.

macOS:

brew install tbb gmp

Ubuntu:

sudo apt install -y libtbb-dev libgmp-dev

Windows:

vcpkg install tbb:x64-windows
vcpkg install gmp:x64-windows

Step 3: Build the project

There are two main methods for building the project:

  • for local use (and development).
  • wheel generation for distribution and deployment to PYPI.

The following assumes that your working directory is the project root.

Method 1: Local use/development and debugging

Note that the following command also produces the gosdt_cli target that can be used to hook gdb or other debuggers/sanitizers into the GOSDT C++ implementation. The project build artifacts can be found in the pyproject-build directory.

pip3 install .

Method 2: Wheel generation

macOS:

pip3 wheel --no-deps . -w dist/
delocate-wheel -w dist -v dist/gosdt-*.whl

Windows:

pip3 wheel --no-deps . -w dist/
python3 -m delvewheel repair --no-mangle-all --add-path "$ENV:VCPKG_INSTALLATION_ROOT\installed\x64-windows\bin" dist/gosdt-1.0.5-cp310-cp310-win_amd64.whl -w dist

Ubuntu:

We are using Ubuntu as the host, but manylinux wheel building relies on Docker. For this specific target we recommend using the cibuildwheel tool which hides some of the painful details related to wheel building for manylinux.

pipx run cibuildwheel

Project Versioning

This project uses the setuptools_scm tool to perform project versioning for the built Python library. This tool uses git commit tags to pick a reasonable version number. In the odd case where one wishes to build this project while removing all references to the git repo, there is a patch for pyproject.toml included at scripts/non_git.patch

Project Structure

This repository contains the following directories:

  • datasets: Datasets that are used to generate plots and figures from the papers and run examples.
  • examples: Contains sample code and notebooks demonstrating how to use the gosdt library.
  • scripts/build: Scripts used while building the python library.
  • scripts/gosdt: Scripts to replicate the plots and figures from the ICML 2020 paper[5].
  • scripts/gosdt-guesses: Scripts to replicate the plots and figures from the AAAI 2022 paper[9]
  • src: Implementation of the gosdt Python and C++ library.
  • tests: pytest tests for the Python library.

Debugging

Unfortunately, there is no super clear way to run gdb on the final python version of the project, for this we've added the debug configuration option to the GOSDTClassifier class. Enabling this flag will create a debug_(current time) directory that is populated with a serialized copy of the Dataset and Configuration classes as well as some other useful debugging information.

We additionaly provide the gosdt_cli target which is a C++ terminal application that takes as an argument the path to a debug_* directory and runs the GOSDT algorithm on it. This enables the developper to use standard C++ tools to debug the algorithm, such as debuggers or sanitizers.

An example that uses the debug flag can be found at examples/debug.py

Related Work

[1] Aglin, G.; Nijssen, S.; and Schaus, P. 2020. Learning optimal decision trees using caching branch-and-bound search. In AAAI Conference on Artificial Intelligence, volume 34, 3146–3153.

[2] Angelino, E.; Larus-Stone, N.; Alabi, D.; Seltzer, M.; and Rudin, C. 2018. Learning Certifiably Optimal Rule Lists for Categorical Data. Journal of Machine Learning Research, 18(234): 1–78.

[3] Breiman, L.; Friedman, J.; Stone, C. J.; and Olshen, R. A. 1984. Classification and Regression Trees. CRC press.

[4] Hu, X.; Rudin, C.; and Seltzer, M. 2019. Optimal sparse decision trees. In Advances in Neural Information Processing Systems, 7267–7275.

[5] Lin, J.; Zhong, C.; Hu, D.; Rudin, C.; and Seltzer, M. 2020. Generalized and scalable optimal sparse decision trees. In International Conference on Machine Learning (ICML), 6150–6160.

[6] Quinlan, J. R. 1993. C4.5: Programs for Machine Learning. Morgan Kaufmann

[7] Verwer, S.; and Zhang, Y. 2019. Learning optimal classification trees using a binary linear program formulation. In AAAI Conference on Artificial Intelligence, volume 33, 1625–1632.

[8] Yang, H., Rudin, C., & Seltzer, M. (2017, July). Scalable Bayesian rule lists. In International Conference on Machine Learning (ICML) (pp. 3921-3930). PMLR.

[9] McTavish, H., Zhong, C., Achermann, R., Karimalis, I., Chen, J., Rudin, C., & Seltzer, M. (2022). Fast Sparse Decision Tree Optimization via Reference Ensembles. Proceedings of the AAAI Conference on Artificial Intelligence, 36(9), 9604-9613.

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

gosdt-1.0.1.tar.gz (184.8 kB view details)

Uploaded Source

Built Distributions

gosdt-1.0.1-cp312-cp312-win_amd64.whl (803.7 kB view details)

Uploaded CPython 3.12 Windows x86-64

gosdt-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

gosdt-1.0.1-cp312-cp312-macosx_14_0_arm64.whl (608.4 kB view details)

Uploaded CPython 3.12 macOS 14.0+ ARM64

gosdt-1.0.1-cp312-cp312-macosx_13_0_x86_64.whl (699.2 kB view details)

Uploaded CPython 3.12 macOS 13.0+ x86-64

gosdt-1.0.1-cp311-cp311-win_amd64.whl (803.1 kB view details)

Uploaded CPython 3.11 Windows x86-64

gosdt-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

gosdt-1.0.1-cp311-cp311-macosx_14_0_arm64.whl (607.6 kB view details)

Uploaded CPython 3.11 macOS 14.0+ ARM64

gosdt-1.0.1-cp311-cp311-macosx_13_0_x86_64.whl (697.1 kB view details)

Uploaded CPython 3.11 macOS 13.0+ x86-64

gosdt-1.0.1-cp310-cp310-win_amd64.whl (802.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

gosdt-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

gosdt-1.0.1-cp310-cp310-macosx_14_0_arm64.whl (606.4 kB view details)

Uploaded CPython 3.10 macOS 14.0+ ARM64

gosdt-1.0.1-cp310-cp310-macosx_13_0_x86_64.whl (695.8 kB view details)

Uploaded CPython 3.10 macOS 13.0+ x86-64

gosdt-1.0.1-cp39-cp39-win_amd64.whl (798.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

gosdt-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

gosdt-1.0.1-cp39-cp39-macosx_14_0_arm64.whl (606.4 kB view details)

Uploaded CPython 3.9 macOS 14.0+ ARM64

gosdt-1.0.1-cp39-cp39-macosx_13_0_x86_64.whl (695.9 kB view details)

Uploaded CPython 3.9 macOS 13.0+ x86-64

File details

Details for the file gosdt-1.0.1.tar.gz.

File metadata

  • Download URL: gosdt-1.0.1.tar.gz
  • Upload date:
  • Size: 184.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for gosdt-1.0.1.tar.gz
Algorithm Hash digest
SHA256 39191261351bcba84b90dbd17debb17d2c046a40ed3f31b5535685e9335f19e4
MD5 74190148326b08f1d535be87dc512c5b
BLAKE2b-256 5b437b08fad80fe3d33b842c4ef193edef4bd585139cbd95baee8abb16d1cf64

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: gosdt-1.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 803.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for gosdt-1.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 61ff0208ba0b9c1bb9bb2ac2040ef047c1b1f1b548dfdd7a08234d00100162c1
MD5 75b29822b0660c65b359d1d08d304824
BLAKE2b-256 8e8c82a3edefabaac22b6365c9168999a04c4b5d832b9a77f056746308b40c44

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e5e866a1b9ef4795648417138afb0a4ecea36a743072a895cdf158e75eac4991
MD5 052aad58ac500afae526ef50d068c24b
BLAKE2b-256 b5c8f704d7a726305f37da319b3d0a55be45a46ee8acf30016fadb83a4f8bf1d

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b6ec13d3aee142300886bb3ac2f403aa7d64ba4240c31b8c96e056eb1a0b2050
MD5 57c5d970129a48de7a5aa8741c936678
BLAKE2b-256 5515f2f2b4c5524ad32422efca37330220bc6b224d448e434eac1d09024dc6b6

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e977bfea7f1adce01436a0a3250891a53404abaa2f85b127f173cb2b1364a54e
MD5 03088375d3fc82410e0bf3959fa1e52d
BLAKE2b-256 f1b0d8c08c9a56d422e19aeaa4d2711fcb71e7451287538671ea770a448a572b

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: gosdt-1.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 803.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for gosdt-1.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bf3d27b8f3c24842f7b9df25f9b34a447c246c6106995ae420e48cd1a06bc236
MD5 3ecef280f4e20036419226ff2422c8ec
BLAKE2b-256 f55ebef6629ae49d85e20781eff1c06d81a4c969b6a73d35c46daf6f7e5dcfa7

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb06f05ea7e61c8e6a8b19b3f115a525fb1ea44fc400fa5b7b086c2707eaf4fb
MD5 8863ae2f934bfefa5a301d383c7417f9
BLAKE2b-256 c2abac1580ad166729a3c48aa0a05260c2dd6c59b25b5aefe0966fff4534ec54

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c8af7a16d2cabac34ab739d1fb75f45b79a3abfa73da7d30fad5a1448fc84563
MD5 d18843fd7bf709121375b97901efa117
BLAKE2b-256 7374147cbbdd8f62032ffbd05bee684a32337a8302b89e5bb354d487bd418526

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f96015750ea4f81879c89e4147f5691485be0cb1478cc7e3c5f2a3702ea98873
MD5 68e913ff9a9601fad5909dda4360b3db
BLAKE2b-256 1e3e2f7ef970dd1c501d7454aef598d0d4f0877af149e5376b86ba47742987bc

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: gosdt-1.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 802.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for gosdt-1.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7d83bdd6160cb0b6cbe72e4e7aab896a3df3d4bc47acc4e6e520fff3c23c3560
MD5 4ff6f628e950a9d05759bac0ad2fc1af
BLAKE2b-256 8005887025343cdb7040a17d6815e2549072bef0890a29ce6d91cf497b9bcfbf

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0306fb7889350a76b39926b1b918e215ac1eefa0ffb3868424e51959a8a8bb5f
MD5 8f3d3f838512a44cc7c9d232216f4167
BLAKE2b-256 317767c99e2630e1f32e3fb600b11790e3b4ce30e46d8060030cf40ac1318ae8

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a6a35931ef03be23653524546c7811440fdf9b5888048e95e7de2189b676b3c1
MD5 158fdfbeaa01c8191e3c6c99f769aa8c
BLAKE2b-256 7013f7c873798097be1a4190b91fa22b60b93af61939e503f0176f9ed1f1117b

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 536721dde4aa3da9e8eebd3ad6be35b80f896805bc1a3ed2f5130a872267143a
MD5 36164c47ff54df32dc92a772063a9192
BLAKE2b-256 7e8640eb0d67f163f8a0568fc1c6ce01bd2666d37e93d5f74faabe7f89d9b9f4

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: gosdt-1.0.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 798.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for gosdt-1.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 bc6b54eb51c8e07d7930ae6157f8d795a926b1fc54e49608648421d83ea6d593
MD5 55facedbb7ffd319cda58669b00761ec
BLAKE2b-256 21804704df6037c3b4858bdf30c26b6ba831a2b7d612acdbb8a149aa35819c9b

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 723e67090a19cb7eb3a0dc02c43aee0dc48b29b016f3acddc5bede78dee0fa43
MD5 27e93ea4b6a1a15c3bfc5b6dc190187c
BLAKE2b-256 3ae4b35cc482b6eeaf29e96d5ae21c91f018a59671a8c7a1245929db52873e93

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp39-cp39-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp39-cp39-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c455799fd3d57feabf0221b6a7151557a203bc6444fdf14ea1c47c288eae7600
MD5 d3021e5f1bcc1fa288f213d0692c9479
BLAKE2b-256 6ca2a264f32f137cdf113f6a80326eee91704b8f5a64e4d642f73599d7956f9f

See more details on using hashes here.

File details

Details for the file gosdt-1.0.1-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for gosdt-1.0.1-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 228a58fc5e11f81af989144aa6aad20ef1f64241dfe3f174f2b3e00055bf1022
MD5 f750d99908bf0cb6a171c486e5f58578
BLAKE2b-256 4261f86de2337cd0fd99093bd50970e59e7be0c2f4420317391f759ff95e6e1c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page