<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_boomer_dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_boomer_light.svg">
<img alt="BOOMER - Gradient Boosted Multi-Label Classification Rules" src="https://github.com/mrapp-ke/MLRL-Boomer/raw/main/.assets/logo_boomer_light.svg">
</picture>
</p>
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/py/mlrl-boomer) [](https://mlrl-boomer.readthedocs.io/en/latest/?badge=latest)
**🔗 Important links:** [Documentation](https://mlrl-boomer.readthedocs.io/en/latest/) | [Issue Tracker](https://github.com/mrapp-ke/MLRL-Boomer/issues) | [Changelog](https://mlrl-boomer.readthedocs.io/en/latest/misc/CHANGELOG.html) | [License](https://mlrl-boomer.readthedocs.io/en/latest/misc/LICENSE.html)
<!-- documentation-start -->
This software package provides the official implementation of **BOOMER - an algorithm for learning gradient boosted multi-output rules** that uses [gradient boosting](https://en.wikipedia.org/wiki/Gradient_boosting) for learning an ensemble of rules that is built with respect to a specific multivariate loss function. It integrates with the popular [scikit-learn](https://scikit-learn.org) machine learning framework.
The problem domains addressed by this algorithm include the following:
- **Multi-label classification**: The goal of [multi-label classification](https://en.wikipedia.org/wiki/Multi-label_classification) is the automatic assignment of sets of labels to individual data points, for example, the annotation of text documents with topics.
- **Multi-output regression**: Multivariate [regression](https://en.wikipedia.org/wiki/Regression_analysis) problems require to predict for more than a single numerical output variable.
# The BOOMER Algorithm
To provide a versatile tool for different use cases, great emphasis is put on the *efficiency* of the implementation. Moreover, to ensure its *flexibility*, it is designed in a modular fashion and can therefore easily be adjusted to different requirements. This modular approach enables implementing different kind of rule learning algorithms (see packages [mlrl-common](https://pypi.org/project/mlrl-common/) and [mlrl-seco](https://pypi.org/project/mlrl-seco/)).
## 📖 References
The algorithm was first published in the following [paper](https://doi.org/10.1007/978-3-030-67664-3_8). A preprint version is publicly available [here](https://arxiv.org/pdf/2006.13346.pdf).
*Michael Rapp, Eneldo Loza MencÃa, Johannes Fürnkranz Vu-Linh Nguyen and Eyke Hüllermeier. Learning Gradient Boosted Multi-label Classification Rules. In: Proceedings of the European Conference on Machine Learning and Knowledge Discovery in Databases (ECML-PKDD), 2020, Springer.*
If you use the algorithm in a scientific publication, we would appreciate citations to the mentioned paper.
## 🔧 Functionalities
The algorithm that is provided by this project currently supports the following core functionalities for learning ensembles of boosted classification or regression rules.
### Deliberate Loss Optimization
- **Decomposable or non-decomposable loss functions** can be optimized in expectation.
- **L1 and L2 regularization** can be used.
- **Shrinkage (a.k.a. the learning rate) can be adjusted** for controlling the impact of individual rules on the overall ensemble.
### Different Prediction Strategies
- **Various strategies for predicting scores, binary labels or probabilities** are available, depending on whether a classification or regression model is used.
- **Isotonic regression models can be used to calibrate marginal and joint probabilities** predicted by a classification model.
### Flexible Handling of Input Data
- **Native support for numerical, ordinal, and nominal features** eliminates the need for pre-processing techniques such as one-hot encoding.
- **Handling of missing feature values**, i.e., occurrences of *NaN* in the feature matrix, is implemented by the algorithm.
### Fine-grained Control over Model Characteristics
- **Rules can be constructed via a greedy search or a beam search.** The latter may help to improve the quality of individual rules.
- **Single-output, partial, or complete heads** can be used by rules, i.e., they can predict for a single output, a subset of the available outputs, or all of them. Predicting for multiple outputs simultaneously enables to model local dependencies between them.
- **Fine-grained control over the specificity/generality of rules** is provided via hyperparameters.
### Support for Post-Optimization and Pruning
- **Incremental reduced error pruning** can be used for removing overly specific conditions from rules and preventing overfitting.
- **Post- and pre-pruning (a.k.a. early stopping)** allows to determine the optimal number of rules to be included in an ensemble.
- **Sequential post-optimization** may help improving the predictive performance of a model by reconstructing each rule in the context of the other rules.
## ⌚ Runtime and Memory Optimizations
In addition to the features mentioned above, several techniques that may speed up training or reduce the memory footprint are currently implemented.
### Approximation Techniques
- **Unsupervised feature binning** can be used to speed up the evaluation of a rule's potential conditions when dealing with numerical features.
- **Sampling techniques and stratification methods** can be used for learning new rules on a subset of the available training examples, features, or output variables.
- **[Gradient-based label binning (GBLB)](https://arxiv.org/pdf/2106.11690.pdf)** can be used for assigning the labels included in a multi-label classification dataset to a limited number of bins. This may speed up training significantly when minimizing a non-decomposable loss function using rules with partial or complete heads.
### Sparse Data Structures
- **Sparse feature matrices** can be used for training and prediction. This may speed up training significantly on some datasets.
- **Sparse ground truth matrices** can be used for training. This may reduce the memory footprint in case of large datasets.
- **Sparse prediction matrices** can be used for storing predicted labels. This may reduce the memory footprint in case of large datasets.
- **Sparse matrices for storing gradients and Hessians** can be used if supported by the loss function. This may speed up training significantly on datasets with many output variables.
### Parallelization
- **Multi-threading** can be used for parallelizing the evaluation of a rule's potential refinements across several features, updating the gradients and Hessians of individual examples in parallel, or obtaining predictions for several examples in parallel.
<!-- documentation-end -->
## 📚 Documentation
Our documentation provides an extensive [user guide](https://mlrl-boomer.readthedocs.io/en/latest/user_guide/boosting/index.html), as well as [Python](https://mlrl-boomer.readthedocs.io/en/latest/developer_guide/api/python/boosting/mlrl.boosting.html) and [C++](https://mlrl-boomer.readthedocs.io/en/latest/developer_guide/api/cpp/boosting/filelist.html) API references for developers. If you are new to the project, you probably want to read about the following topics:
- Instructions for [installing the software package](https://mlrl-boomer.readthedocs.io/en/latest/quickstart/installation.html) or [building the project from source](https://mlrl-boomer.readthedocs.io/en/latest/developer_guide/compilation.html).
- Examples of how to [use the algorithm](https://mlrl-boomer.readthedocs.io/en/latest/quickstart/usage.html) in your own Python code or how to use the [command line API](https://mlrl-boomer.readthedocs.io/en/latest/quickstart/testbed.html).
- An overview of available [parameters](https://mlrl-boomer.readthedocs.io/en/latest/user_guide/boosting/parameters.html).
A collection of benchmark datasets that are compatible with the algorithm are provided in a separate [repository](https://github.com/mrapp-ke/Boomer-Datasets).
For an overview of changes and new features that have been included in past releases, please refer to the [changelog](https://mlrl-boomer.readthedocs.io/en/latest/misc/CHANGELOG.html).
## 📜 License
This project is open source software licensed under the terms of the [MIT license](https://mlrl-boomer.readthedocs.io/en/latest/misc/LICENSE.html). We welcome contributions to the project to enhance its functionality and make it more accessible to a broader audience. A frequently updated list of contributors is available [here](https://mlrl-boomer.readthedocs.io/en/latest/misc/CONTRIBUTORS.html).
All contributions to the project and discussions on the [issue tracker](https://github.com/mrapp-ke/MLRL-Boomer/issues) are expected to follow the [code of conduct](https://mlrl-boomer.readthedocs.io/en/latest/misc/CODE_OF_CONDUCT.html).
Raw data
{
"_id": null,
"home_page": null,
"name": "mlrl-boomer",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "gradient boosting, machine learning, multi-label classification, multi-output regression, multi-target regression, rule learning, scikit-learn",
"author": null,
"author_email": "Michael Rapp <michael.rapp.ml@gmail.com>",
"download_url": null,
"platform": null,
"description": "<p align=\"center\">\n <picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_boomer_dark.svg\">\n <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_boomer_light.svg\">\n <img alt=\"BOOMER - Gradient Boosted Multi-Label Classification Rules\" src=\"https://github.com/mrapp-ke/MLRL-Boomer/raw/main/.assets/logo_boomer_light.svg\">\n </picture>\n</p>\n\n[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/py/mlrl-boomer) [](https://mlrl-boomer.readthedocs.io/en/latest/?badge=latest)\n\n**\ud83d\udd17 Important links:** [Documentation](https://mlrl-boomer.readthedocs.io/en/latest/) | [Issue Tracker](https://github.com/mrapp-ke/MLRL-Boomer/issues) | [Changelog](https://mlrl-boomer.readthedocs.io/en/latest/misc/CHANGELOG.html) | [License](https://mlrl-boomer.readthedocs.io/en/latest/misc/LICENSE.html)\n\n<!-- documentation-start -->\n\nThis software package provides the official implementation of **BOOMER - an algorithm for learning gradient boosted multi-output rules** that uses [gradient boosting](https://en.wikipedia.org/wiki/Gradient_boosting) for learning an ensemble of rules that is built with respect to a specific multivariate loss function. It integrates with the popular [scikit-learn](https://scikit-learn.org) machine learning framework.\n\nThe problem domains addressed by this algorithm include the following:\n\n- **Multi-label classification**: The goal of [multi-label classification](https://en.wikipedia.org/wiki/Multi-label_classification) is the automatic assignment of sets of labels to individual data points, for example, the annotation of text documents with topics.\n- **Multi-output regression**: Multivariate [regression](https://en.wikipedia.org/wiki/Regression_analysis) problems require to predict for more than a single numerical output variable.\n\n# The BOOMER Algorithm\n\nTo provide a versatile tool for different use cases, great emphasis is put on the *efficiency* of the implementation. Moreover, to ensure its *flexibility*, it is designed in a modular fashion and can therefore easily be adjusted to different requirements. This modular approach enables implementing different kind of rule learning algorithms (see packages [mlrl-common](https://pypi.org/project/mlrl-common/) and [mlrl-seco](https://pypi.org/project/mlrl-seco/)).\n\n## \ud83d\udcd6 References\n\nThe algorithm was first published in the following [paper](https://doi.org/10.1007/978-3-030-67664-3_8). A preprint version is publicly available [here](https://arxiv.org/pdf/2006.13346.pdf).\n\n*Michael Rapp, Eneldo Loza Menc\u00eda, Johannes F\u00fcrnkranz Vu-Linh Nguyen and Eyke H\u00fcllermeier. Learning Gradient Boosted Multi-label Classification Rules. In: Proceedings of the European Conference on Machine Learning and Knowledge Discovery in Databases (ECML-PKDD), 2020, Springer.*\n\nIf you use the algorithm in a scientific publication, we would appreciate citations to the mentioned paper.\n\n## \ud83d\udd27 Functionalities\n\nThe algorithm that is provided by this project currently supports the following core functionalities for learning ensembles of boosted classification or regression rules.\n\n### Deliberate Loss Optimization\n\n- **Decomposable or non-decomposable loss functions** can be optimized in expectation.\n- **L1 and L2 regularization** can be used.\n- **Shrinkage (a.k.a. the learning rate) can be adjusted** for controlling the impact of individual rules on the overall ensemble.\n\n### Different Prediction Strategies\n\n- **Various strategies for predicting scores, binary labels or probabilities** are available, depending on whether a classification or regression model is used.\n- **Isotonic regression models can be used to calibrate marginal and joint probabilities** predicted by a classification model.\n\n### Flexible Handling of Input Data\n\n- **Native support for numerical, ordinal, and nominal features** eliminates the need for pre-processing techniques such as one-hot encoding.\n- **Handling of missing feature values**, i.e., occurrences of *NaN* in the feature matrix, is implemented by the algorithm.\n\n### Fine-grained Control over Model Characteristics\n\n- **Rules can be constructed via a greedy search or a beam search.** The latter may help to improve the quality of individual rules.\n- **Single-output, partial, or complete heads** can be used by rules, i.e., they can predict for a single output, a subset of the available outputs, or all of them. Predicting for multiple outputs simultaneously enables to model local dependencies between them.\n- **Fine-grained control over the specificity/generality of rules** is provided via hyperparameters.\n\n### Support for Post-Optimization and Pruning\n\n- **Incremental reduced error pruning** can be used for removing overly specific conditions from rules and preventing overfitting.\n- **Post- and pre-pruning (a.k.a. early stopping)** allows to determine the optimal number of rules to be included in an ensemble.\n- **Sequential post-optimization** may help improving the predictive performance of a model by reconstructing each rule in the context of the other rules.\n\n## \u231a Runtime and Memory Optimizations\n\nIn addition to the features mentioned above, several techniques that may speed up training or reduce the memory footprint are currently implemented.\n\n### Approximation Techniques\n\n- **Unsupervised feature binning** can be used to speed up the evaluation of a rule's potential conditions when dealing with numerical features.\n- **Sampling techniques and stratification methods** can be used for learning new rules on a subset of the available training examples, features, or output variables.\n- **[Gradient-based label binning (GBLB)](https://arxiv.org/pdf/2106.11690.pdf)** can be used for assigning the labels included in a multi-label classification dataset to a limited number of bins. This may speed up training significantly when minimizing a non-decomposable loss function using rules with partial or complete heads.\n\n### Sparse Data Structures\n\n- **Sparse feature matrices** can be used for training and prediction. This may speed up training significantly on some datasets.\n- **Sparse ground truth matrices** can be used for training. This may reduce the memory footprint in case of large datasets.\n- **Sparse prediction matrices** can be used for storing predicted labels. This may reduce the memory footprint in case of large datasets.\n- **Sparse matrices for storing gradients and Hessians** can be used if supported by the loss function. This may speed up training significantly on datasets with many output variables.\n\n### Parallelization\n\n- **Multi-threading** can be used for parallelizing the evaluation of a rule's potential refinements across several features, updating the gradients and Hessians of individual examples in parallel, or obtaining predictions for several examples in parallel.\n\n<!-- documentation-end -->\n\n## \ud83d\udcda Documentation\n\nOur documentation provides an extensive [user guide](https://mlrl-boomer.readthedocs.io/en/latest/user_guide/boosting/index.html), as well as [Python](https://mlrl-boomer.readthedocs.io/en/latest/developer_guide/api/python/boosting/mlrl.boosting.html) and [C++](https://mlrl-boomer.readthedocs.io/en/latest/developer_guide/api/cpp/boosting/filelist.html) API references for developers. If you are new to the project, you probably want to read about the following topics:\n\n- Instructions for [installing the software package](https://mlrl-boomer.readthedocs.io/en/latest/quickstart/installation.html) or [building the project from source](https://mlrl-boomer.readthedocs.io/en/latest/developer_guide/compilation.html).\n- Examples of how to [use the algorithm](https://mlrl-boomer.readthedocs.io/en/latest/quickstart/usage.html) in your own Python code or how to use the [command line API](https://mlrl-boomer.readthedocs.io/en/latest/quickstart/testbed.html).\n- An overview of available [parameters](https://mlrl-boomer.readthedocs.io/en/latest/user_guide/boosting/parameters.html).\n\nA collection of benchmark datasets that are compatible with the algorithm are provided in a separate [repository](https://github.com/mrapp-ke/Boomer-Datasets).\n\nFor an overview of changes and new features that have been included in past releases, please refer to the [changelog](https://mlrl-boomer.readthedocs.io/en/latest/misc/CHANGELOG.html).\n\n## \ud83d\udcdc License\n\nThis project is open source software licensed under the terms of the [MIT license](https://mlrl-boomer.readthedocs.io/en/latest/misc/LICENSE.html). We welcome contributions to the project to enhance its functionality and make it more accessible to a broader audience. A frequently updated list of contributors is available [here](https://mlrl-boomer.readthedocs.io/en/latest/misc/CONTRIBUTORS.html).\n\nAll contributions to the project and discussions on the [issue tracker](https://github.com/mrapp-ke/MLRL-Boomer/issues) are expected to follow the [code of conduct](https://mlrl-boomer.readthedocs.io/en/latest/misc/CODE_OF_CONDUCT.html).\n",
"bugtrack_url": null,
"license": null,
"summary": "A scikit-learn implementation of BOOMER - an algorithm for learning gradient boosted multi-label output rules",
"version": "0.12.3",
"project_urls": {
"changelog": "https://raw.githubusercontent.com/mrapp-ke/MLRL-Boomer/refs/heads/main/CHANGELOG.md",
"documentation": "https://mlrl-boomer.readthedocs.io/en/latest",
"download": "https://github.com/mrapp-ke/MLRL-Boomer/releases",
"homepage": "https://github.com/mrapp-ke/MLRL-Boomer",
"issues": "https://github.com/mrapp-ke/MLRL-Boomer/issues",
"source": "https://github.com/mrapp-ke/MLRL-Boomer.git"
},
"split_keywords": [
"gradient boosting",
" machine learning",
" multi-label classification",
" multi-output regression",
" multi-target regression",
" rule learning",
" scikit-learn"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3b2a1afed9bd87fd8950b24375c1ca4fec9efc319d8ddc81f4be27be0d6b29f9",
"md5": "21d6640a15bf17fa81efd139420a7f59",
"sha256": "1f16d7058ff80ce6f9721d6854f6392b92f4b2c02fa50e1a5c23e1110897eae2"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "21d6640a15bf17fa81efd139420a7f59",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 3049514,
"upload_time": "2025-08-02T16:55:44",
"upload_time_iso_8601": "2025-08-02T16:55:44.558500Z",
"url": "https://files.pythonhosted.org/packages/3b/2a/1afed9bd87fd8950b24375c1ca4fec9efc319d8ddc81f4be27be0d6b29f9/mlrl_boomer-0.12.3-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1f992910c8c65e043dd02dae6fe2489db7fcc48fcd99cea3ef18e040f0f2212a",
"md5": "892db9bbf790ed29e707cbdd8e153c42",
"sha256": "0362f2d95e77f801ee773adc615670e178e1c29d9326556d5c2f119cc1bb1e5b"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "892db9bbf790ed29e707cbdd8e153c42",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 7140183,
"upload_time": "2025-08-02T16:55:46",
"upload_time_iso_8601": "2025-08-02T16:55:46.273638Z",
"url": "https://files.pythonhosted.org/packages/1f/99/2910c8c65e043dd02dae6fe2489db7fcc48fcd99cea3ef18e040f0f2212a/mlrl_boomer-0.12.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "210dbbba9f6fa86227913f77bd81b357d86cf1be820cc168faf9c2c1cd3ff959",
"md5": "9d7f212a3cf77fc048058ed6dcc479f2",
"sha256": "ed9a57568c2932e2dc26ff552afe08f51558a0d381db2f0a27f5b304d8c2e1e5"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "9d7f212a3cf77fc048058ed6dcc479f2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 7312703,
"upload_time": "2025-08-02T16:55:48",
"upload_time_iso_8601": "2025-08-02T16:55:48.217302Z",
"url": "https://files.pythonhosted.org/packages/21/0d/bbba9f6fa86227913f77bd81b357d86cf1be820cc168faf9c2c1cd3ff959/mlrl_boomer-0.12.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "30d8d1cba6656e8ebfc6a109250e215f4ba579db8e78023afacfdce157f09061",
"md5": "8c5397968ce11bf4ad3ca261d85fb8a4",
"sha256": "ab0c1fa54f35b71a8cc6ff04ca8b536591c03dbc539fc52b20e518191bf557f2"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "8c5397968ce11bf4ad3ca261d85fb8a4",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.11",
"size": 1171914,
"upload_time": "2025-08-02T16:55:50",
"upload_time_iso_8601": "2025-08-02T16:55:50.044957Z",
"url": "https://files.pythonhosted.org/packages/30/d8/d1cba6656e8ebfc6a109250e215f4ba579db8e78023afacfdce157f09061/mlrl_boomer-0.12.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2744b59c5ee6499cca32628a005033a1e3e18810baa198ba39671aa6a0948e62",
"md5": "46e9757de94a98cb2168c1be8e3ee9cc",
"sha256": "2f5d520829635bb5c28bd54a88c1cf34baf56c925f9b609d7d4ff495a0054f77"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "46e9757de94a98cb2168c1be8e3ee9cc",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 3052931,
"upload_time": "2025-08-02T16:55:51",
"upload_time_iso_8601": "2025-08-02T16:55:51.742263Z",
"url": "https://files.pythonhosted.org/packages/27/44/b59c5ee6499cca32628a005033a1e3e18810baa198ba39671aa6a0948e62/mlrl_boomer-0.12.3-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1b92f0414c2707fe0637990f9e198f2789762be5553cfcaa755ac524897620ce",
"md5": "2c04699c83ae9cb7d718d6a70e2f99f6",
"sha256": "e22a0e1f31b1b09e5236fba959bb30c9a9f76433334fd980eeff645ac3c742b1"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "2c04699c83ae9cb7d718d6a70e2f99f6",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 7137164,
"upload_time": "2025-08-02T16:55:53",
"upload_time_iso_8601": "2025-08-02T16:55:53.365576Z",
"url": "https://files.pythonhosted.org/packages/1b/92/f0414c2707fe0637990f9e198f2789762be5553cfcaa755ac524897620ce/mlrl_boomer-0.12.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c2fe397e132d4e356eb4cde5bffaf08631a876c12d930601b199d7273ab2651",
"md5": "12dee756323333c5066d512275ac35c8",
"sha256": "7dad72887ba5ff8db38dd255061020bf9163f81ad6b0ab9991cd3f8b7d5a4309"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "12dee756323333c5066d512275ac35c8",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 7310302,
"upload_time": "2025-08-02T16:55:54",
"upload_time_iso_8601": "2025-08-02T16:55:54.989065Z",
"url": "https://files.pythonhosted.org/packages/6c/2f/e397e132d4e356eb4cde5bffaf08631a876c12d930601b199d7273ab2651/mlrl_boomer-0.12.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9847205284531c8dfb82bbffdac45c4b577a8c3250e3e83a2fbc3e8408545443",
"md5": "cb58c374414a2f56045a4ab8904ae4d1",
"sha256": "2741318f8a266014741749f8ab27d37684a166b9b9590230e9402d15e243e939"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "cb58c374414a2f56045a4ab8904ae4d1",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.11",
"size": 1169814,
"upload_time": "2025-08-02T16:55:56",
"upload_time_iso_8601": "2025-08-02T16:55:56.760372Z",
"url": "https://files.pythonhosted.org/packages/98/47/205284531c8dfb82bbffdac45c4b577a8c3250e3e83a2fbc3e8408545443/mlrl_boomer-0.12.3-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "10f0d9a2648147fb7d409d60b33519ea363a1f15947ecfc45abaf199388de6d2",
"md5": "e0ef4789c025c0ce7919a5e85740e51c",
"sha256": "fafec0dfa1542279c9ce766f2d08f3758b65fe3ea6f5bcd193f01b6f0a2dd655"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e0ef4789c025c0ce7919a5e85740e51c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 3048067,
"upload_time": "2025-08-02T16:55:58",
"upload_time_iso_8601": "2025-08-02T16:55:58.003265Z",
"url": "https://files.pythonhosted.org/packages/10/f0/d9a2648147fb7d409d60b33519ea363a1f15947ecfc45abaf199388de6d2/mlrl_boomer-0.12.3-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b97681df1e8708f3956d883decb9ee2cd099608b0acf82f356a5331cef5080b3",
"md5": "7c1cbc9c067eb0fb4ece2dd0c5303db2",
"sha256": "3c2dd56b6034995d141075708f1b84111e8ea5cbe8a22322b6ed3af979a0258a"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "7c1cbc9c067eb0fb4ece2dd0c5303db2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 7129868,
"upload_time": "2025-08-02T16:55:59",
"upload_time_iso_8601": "2025-08-02T16:55:59.787843Z",
"url": "https://files.pythonhosted.org/packages/b9/76/81df1e8708f3956d883decb9ee2cd099608b0acf82f356a5331cef5080b3/mlrl_boomer-0.12.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a5905d9dfd278a056ef18a24472cf1fdcff7c8919f1b1e4b0db25445de66cfd3",
"md5": "2634398b0fa85259801552d908098814",
"sha256": "437842304aeef19d5ff7d1e9b7c331671fe2266507bd7f6bc7243dbc87daf2bb"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "2634398b0fa85259801552d908098814",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 7302173,
"upload_time": "2025-08-02T16:56:01",
"upload_time_iso_8601": "2025-08-02T16:56:01.335048Z",
"url": "https://files.pythonhosted.org/packages/a5/90/5d9dfd278a056ef18a24472cf1fdcff7c8919f1b1e4b0db25445de66cfd3/mlrl_boomer-0.12.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b277a6c2fdc0463bebc23c3f919c6642b0d8937e845da105c91372c8a812f8d2",
"md5": "67088298302928d8277ee2ee64c86576",
"sha256": "12dd8cd553083fe81cbc3b8088c3d24b20fd991f88bc7546e7ed33135e569958"
},
"downloads": -1,
"filename": "mlrl_boomer-0.12.3-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "67088298302928d8277ee2ee64c86576",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.11",
"size": 1164073,
"upload_time": "2025-08-02T16:56:03",
"upload_time_iso_8601": "2025-08-02T16:56:03.128939Z",
"url": "https://files.pythonhosted.org/packages/b2/77/a6c2fdc0463bebc23c3f919c6642b0d8937e845da105c91372c8a812f8d2/mlrl_boomer-0.12.3-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-02 16:55:44",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mrapp-ke",
"github_project": "MLRL-Boomer",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "mlrl-boomer"
}