Skip to main content

Gradient boosted decision trees for multiple outputs

Project description

OmniGBDT

OmniGBDT packages the original GBDT-MO algorithm as a regular Python library. It keeps the native C++ training core and adds modern Python packaging, cross-platform wheels, and optional sklearn-compatible wrappers.

The main public classes are MultiOutputGBDT and SingleOutputGBDT.

For the original project, benchmark figures, experiment scripts, and upstream research context, please see:

Installation

Install the released package

pip install omnigbdt

or with uv:

uv add omnigbdt

OmniGBDT targets wheel-based installs on:

  • Linux x86_64
  • Windows x86_64
  • macOS arm64 (Apple Silicon, 14+)

The GitHub Actions workflow builds these wheels in CI and publishes them on version tags matching v*.

Optional extras

Install plotting support if you want to render dumped trees with create_graph():

pip install "omnigbdt[plot]"

Install sklearn-compatible wrappers if you want to use tools such as permutation_importance:

pip install "omnigbdt[sklearn]"

The same extras can be installed with uv:

uv add "omnigbdt[plot]"
uv add "omnigbdt[sklearn]"

The optional sklearn wrappers are a fork-specific addition. They make it possible to use sklearn inspection utilities such as permutation-based feature importance:

Quick Start

Minimum workable example

The example below creates a multi-output regression problem with intentionally correlated targets. It compares:

  • one MultiOutputGBDT model trained on the full target matrix
  • one SingleOutputGBDT model per target column
import numpy as np
from omnigbdt import SingleOutputGBDT, MultiOutputGBDT, Verbosity

rng = np.random.default_rng(0)

n_samples = 512
n_features = 4
n_outputs = 3

X = rng.random((n_samples, n_features)).astype("float64")
shared_signal = (
    1.5 * X[:, 0]
    - 0.8 * X[:, 1]
    + 0.4 * np.sin(np.pi * X[:, 2])
)
target_specific = np.column_stack([
    0.3 * X[:, 2] * X[:, 3],
    -0.4 * X[:, 0] + 0.2 * X[:, 3],
    0.5 * X[:, 1] * X[:, 3],
])
shared_noise = 0.05 * rng.standard_normal(n_samples)[:, None]
independent_noise = 0.02 * rng.standard_normal((n_samples, n_outputs))
Y = np.column_stack([
    1.2 * shared_signal,
    0.9 * shared_signal,
    1.1 * shared_signal,
]).astype("float64")
Y += target_specific + shared_noise + independent_noise

params = {
    "loss": b"mse",
    "max_depth": 3,
    "lr": 0.1,
    "num_threads": 1,
    "verbosity": Verbosity.SILENT,
}

multi = MultiOutputGBDT(out_dim=n_outputs, params=params)
multi.set_data((X, Y))
multi.train(1)
multi_preds = multi.predict(X)

single_models = []
for col in range(n_outputs):
    model = SingleOutputGBDT(params=params)
    target = np.ascontiguousarray(Y[:, col])
    model.set_data((X, target))
    model.train(1)
    single_models.append(model)

single_preds = np.column_stack([model.predict(X) for model in single_models])

multi_rmse = np.sqrt(np.mean((multi_preds - Y) ** 2))
single_rmse = np.sqrt(np.mean((single_preds - Y) ** 2))

print("MultiOutputGBDT RMSE:", round(float(multi_rmse), 6))
print("SingleOutputGBDT-per-target RMSE:", round(float(single_rmse), 6))
print("Prediction shape from MultiOutputGBDT:", multi.predict(X[:3]).shape)
print("Prediction shape from stacked SingleOutputGBDT models:", single_preds[:3].shape)

Permutation importance with sklearn

Install the optional sklearn extra first:

pip install "omnigbdt[sklearn]"

or with uv:

uv add "omnigbdt[sklearn]"

Then use the sklearn-compatible multi-output wrapper with permutation importance:

import time

import numpy as np
from sklearn.inspection import permutation_importance

from omnigbdt import MultiOutputGBDTRegressor

rng = np.random.default_rng(0)
X = rng.random((256, 4)).astype("float64")
shared_signal = (
    1.2 * X[:, 0]
    - 0.7 * X[:, 1]
    + 0.3 * np.sin(np.pi * X[:, 2])
)
shared_noise = 0.05 * rng.standard_normal(256)[:, None]
Y = np.column_stack([
    1.1 * shared_signal + 0.2 * X[:, 3],
    0.9 * shared_signal - 0.3 * X[:, 0],
    1.0 * shared_signal + 0.4 * X[:, 1] * X[:, 3],
]).astype("float64")
Y += shared_noise + 0.02 * rng.standard_normal((256, 3))

model = MultiOutputGBDTRegressor(
    num_rounds=10,
    max_depth=3,
    num_threads=1,
)
model.fit(X, Y)

start_time = time.time()
result = permutation_importance(
    model,
    X,
    Y,
    scoring="r2",
    n_repeats=10,
    random_state=42,
    n_jobs=1,
)
elapsed_time = time.time() - start_time

print(f"Elapsed time: {elapsed_time:.3f} seconds")
print(result.importances_mean)

Source and Development Installs

Install from source

pip install .

or with uv:

uv add ./OmniGBDT

That uv add ./OmniGBDT form is a local path dependency, so it builds from source on the current machine.

On Windows, use either uv add .\\OmniGBDT or uv add ./OmniGBDT. Do not use uv add OmniGBDT without ./ or .\\, because that asks the package registry for a published package named omnigbdt instead of using the local folder.

Use OmniGBDT inside an existing uv project

Add OmniGBDT as a normal released dependency:

uv add omnigbdt

Add a sibling checkout as an editable dependency while developing two projects side by side:

uv add --editable ../OmniGBDT

If you copy the OmniGBDT folder inside an existing uv workspace and run:

uv add ./OmniGBDT

then uv may treat it as a workspace member. If you want it to remain a plain path dependency, use:

uv add --no-workspace ./OmniGBDT

On Windows, the same commands are:

uv add .\\OmniGBDT
uv add --no-workspace .\\OmniGBDT

The equivalent manual configuration in pyproject.toml is:

[project]
dependencies = ["omnigbdt"]

[tool.uv.sources]
omnigbdt = { path = "../OmniGBDT", editable = true }

Windows source builds

Local path installs such as uv add ./OmniGBDT and source installs such as pip install . compile the native C++ library during installation.

On Windows, install:

  • Visual Studio Build Tools 2022 (or Visual Studio 2022)
  • the Desktop development with C++ workload
  • MSVC build tools and a working OpenMP-capable compiler

If CMake fails with an error such as:

Running 'nmake' '-?' failed with: no such file or directory
CMAKE_CXX_COMPILER not set, after EnableLanguage

then the package is being built from source but the MSVC toolchain is not available in the current shell.

The most reliable fix is:

  1. Install Visual Studio Build Tools 2022 with the C++ workload.
  2. Reopen the terminal from x64 Native Tools Command Prompt for VS 2022.
  3. Rerun uv add ./OmniGBDT or pip install ..

If the toolchain is already installed, also check that CMAKE_GENERATOR is not forcing NMake Makefiles in a shell where nmake.exe is unavailable.

What OmniGBDT Adds

Compared with the upstream repository, OmniGBDT:

  • replaces the old make.sh and manual shared-library workflow with standard Python packaging
  • bundles the native library inside the Python package
  • keeps load_lib(path=None) for advanced or compatibility workflows
  • adds wheel automation for Linux, macOS, and Windows
  • adds optional sklearn-compatible wrappers so users can apply sklearn inspection tools such as permutation-based feature importance

Core native-code deviations from upstream GBDT-MO

Most changes in this fork are packaging and distribution changes. The native C/C++ training code has only been changed in a few targeted ways so far:

  • stricter min_samples enforcement during split scoring: candidate split points are rejected unless both child branches satisfy min_samples
  • safe child-node materialization after a split: if a branch cannot be split further, it is emitted as an explicit leaf instead of being left implicit or partially unassigned
  • proper root-leaf fallback: if no valid split exists at the root, the model stores a true single-leaf tree and prediction, dump, and load work cleanly for that case

As a consequence, same-seed runs do not necessarily match older buggy runs exactly. Trees can be smaller because invalid small-child splits are filtered earlier, and the control flow through the native code changes accordingly.

Outside of those fixes, the core objective functions, histogram-based split search, and overall training structure are still inherited from the original repository.

Project Provenance

This fork builds directly on the original GBDT-MO implementation by Zhendong Zhang and Cheolkon Jung.

OmniGBDT is intended to make the package easier to build, install, and distribute. It is not the canonical source for the paper, benchmark tables, figures, or research documentation.

For evaluation metrics, dataset-specific experiments, and extended project context, please refer to:

Development

Run tests

For local development with uv, sync the project together with the optional test dependencies:

uv sync --extra test

Then run the test suite with:

uv run pytest

If you only want the smoke coverage in this repository, you can run:

uv run pytest tests/test_smoke.py

Build the documentation locally

The hosted documentation is configured through the repository-level .readthedocs.yaml file and the pinned dependencies in docs/requirements.txt.

To preview the docs locally with the same Sphinx dependency set used on Read the Docs, run:

uv run --no-project --with-requirements docs/requirements.txt sphinx-build -W -n -b html docs _build/html

Build the native library directly

If you only want to build the native library:

cmake -S . -B build
cmake --build build --config Release

Versioning

This fork follows Semantic Versioning independently from the upstream GBDT-MO repository.

License

This fork is distributed under the Apache License 2.0. The main license text for this fork is in LICENSE.

Because this repository incorporates and modifies the original GBDT-MO codebase, the original upstream MIT license notice from Zhendong Zhang is preserved in LICENSE.upstream. Additional attribution and fork-specific notice text is provided in NOTICE.

Citation

If you use this project in research, please credit the original paper by Zhang and Jung:

@article{zhang2020gbdt,
  title={GBDT-MO: Gradient-boosted decision trees for multiple outputs},
  author={Zhang, Zhendong and Jung, Cheolkon},
  journal={IEEE transactions on neural networks and learning systems},
  volume={32},
  number={7},
  pages={3156--3167},
  year={2020},
  publisher={Ieee}
}

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

omnigbdt-0.1.5.tar.gz (80.1 kB view details)

Uploaded Source

Built Distributions

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

omnigbdt-0.1.5-cp313-cp313-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.13Windows x86-64

omnigbdt-0.1.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

omnigbdt-0.1.5-cp313-cp313-macosx_14_0_arm64.whl (325.6 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

omnigbdt-0.1.5-cp312-cp312-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.12Windows x86-64

omnigbdt-0.1.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

omnigbdt-0.1.5-cp312-cp312-macosx_14_0_arm64.whl (325.6 kB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

omnigbdt-0.1.5-cp311-cp311-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.11Windows x86-64

omnigbdt-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

omnigbdt-0.1.5-cp311-cp311-macosx_14_0_arm64.whl (325.6 kB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

omnigbdt-0.1.5-cp310-cp310-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.10Windows x86-64

omnigbdt-0.1.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (200.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

omnigbdt-0.1.5-cp310-cp310-macosx_14_0_arm64.whl (325.6 kB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file omnigbdt-0.1.5.tar.gz.

File metadata

  • Download URL: omnigbdt-0.1.5.tar.gz
  • Upload date:
  • Size: 80.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omnigbdt-0.1.5.tar.gz
Algorithm Hash digest
SHA256 a48735331a02e866150938383c99cba3d1d1b9dc29e793e5fb5432a5ceb930f0
MD5 0c77d95bcdad809f0c056a9096f9d1d6
BLAKE2b-256 62bdad7f4867a625ccec0ca33e3d274651b4c250947ca34c565691c1100ce49d

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5.tar.gz:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: omnigbdt-0.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 81.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omnigbdt-0.1.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 70c700cd2851435c7f19c294a18d5e14f5c72ea54f0aeec64b18a847ecd6e665
MD5 9057cda4efc0273a5d4e30ecd5b0606f
BLAKE2b-256 a14704548507e303c472e637528c7d7219b73dca0e3bde7446f86d4ac105e22a

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp313-cp313-win_amd64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 62f9035b0731eeaa2601c38307966e28ea38d997281aabd36ab1a62f48b90cab
MD5 81f0cc8fe90a6f8ca13fbccaeacdac0c
BLAKE2b-256 0723e1890a95b3db0f7d0a8c4ddbc5bf670600cf71799ba65aa31da131201d41

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5ab3ac5b54cc68b891bb52ace50f4c744b0c816efd40dc790969438fad4f754f
MD5 7d0ebd0d6f49bad3901e97c1b70a409a
BLAKE2b-256 1f02a16bc08103dc203639ef23c8b21b941049cf0721c7bb4926cfb353518855

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: omnigbdt-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 81.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omnigbdt-0.1.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 efdb49ef3ec4234a8747fa505b508c460c5764f4f235a862ac8d0acce771a343
MD5 2b1d81eeb5ea1b9a005d02fd6746d7cd
BLAKE2b-256 4df7518a9a8307994408d7d1c99bff137a29b6a7702cd9cdc236e222ce148f47

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp312-cp312-win_amd64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4382e2ca41eb6fda13ffa506d02cac9e7b0c22aec128cb201a26756e031acff7
MD5 696b4b9b87cc0e018a9e9d1f4c3a2488
BLAKE2b-256 353c3c92ce64e16b70b51ec667622e13a7879078aee4398adbe8d2954c63f4f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 449b6217182cc8d8c4f9a72b905fdff424d4d9b6c42c0736bd76607323e39a5e
MD5 f15141f0f24942738e783beb2c1c91dd
BLAKE2b-256 7382b1037e220154ebe6d774782c7739f7b03fe3cd2339d6464502e348ed5722

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: omnigbdt-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 81.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omnigbdt-0.1.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f57a11602c30e47356e7e084e671ae92d9df78d96457ee50e264aad69c7447ee
MD5 84fe32073414729adadd96e09dc62768
BLAKE2b-256 cc7653b3d026add977ee883bec56e78e303ed2130bdef6e365da5c4d970a985a

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp311-cp311-win_amd64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c3b025d761b7d7afd3e21cdff606b7da53f9ea5b94f883fd08545d0830e06fb2
MD5 61d018afa865682323d5171af1b0ece3
BLAKE2b-256 70da1873a992bc695821eae1fc16b6543f2dada864124e5f45d2239e8a69176b

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6b2ba0ace7a15b3a4d24d1cf35a727df443bc3567ba499040e048a101b762d9b
MD5 d8c04c5526b5c31415e2c6cc6a090c8c
BLAKE2b-256 329e8069dc9214f4aee41028975aa658bca650454ae079ce93c75df7f02d9ed6

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: omnigbdt-0.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 81.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for omnigbdt-0.1.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f94b953b7d86d2df82ed128671e0234dfba4e02ae2d93f089ad10ed00a5df7d7
MD5 63c12b833f15d4997522780daecdd49b
BLAKE2b-256 0ba4519b13eeb0ba71bf17bc768bfe65e0fee0fe737e2787ae554c8ada5894da

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp310-cp310-win_amd64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 253430dac1a1e6c4599b0442c09e0d631683aee42d3e1350bbfee504dd27e0fc
MD5 6cb3ac12bd273afe0cfaaef6b7e0a3ce
BLAKE2b-256 488059d6ed57727f7eaffad01327c06f2d278991a43ce6381e499d06298f0baa

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omnigbdt-0.1.5-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for omnigbdt-0.1.5-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 04e74d001408469a98cfa65f1464ffcc33cd1b0c82f72c0e482651fdf6a85d00
MD5 80e0356ae6398c65f3bc6b618933fb1e
BLAKE2b-256 218bbcc7fe03eb2c5af0721750aa4af13bf212c3c7659118babb5a93fc598fc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for omnigbdt-0.1.5-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: wheels.yml on flacle/OmniGBDT

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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