mlrl-boomer


Namemlrl-boomer JSON
Version 0.11.2 PyPI version JSON
download
home_pageNone
SummaryA scikit-learn implementation of BOOMER - an algorithm for learning gradient boosted multi-label output rules
upload_time2025-01-22 21:57:27
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords gradient boosting machine learning multi-label classification multi-output regression multi-target regression rule learning scikit-learn
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_dark.svg">
    <source media="(prefers-color-scheme: light)" srcset="https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_light.svg">
    <img alt="BOOMER - Gradient Boosted Multi-Label Classification Rules" src="https://github.com/mrapp-ke/MLRL-Boomer/raw/main/assets/logo_light.svg">
  </picture>
</p>

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![PyPI version](https://badge.fury.io/py/mlrl-boomer.svg)](https://badge.fury.io/py/mlrl-boomer) [![Documentation Status](https://readthedocs.org/projects/mlrl-boomer/badge/?version=latest)](https://mlrl-boomer.readthedocs.io/en/latest/?badge=latest) [![X URL](https://img.shields.io/twitter/url?label=Follow&style=social&url=https%3A%2F%2Ftwitter.com%2FBOOMER_ML)](https://twitter.com/BOOMER_ML)

**:link: 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) | [Contributors](https://mlrl-boomer.readthedocs.io/en/latest/misc/CONTRIBUTORS.html) | [Code of Conduct](https://mlrl-boomer.readthedocs.io/en/latest/misc/CODE_OF_CONDUCT.html) | [License](https://mlrl-boomer.readthedocs.io/en/latest/misc/LICENSE.html)

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.

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. For example, this project does also provide a [Separate-and-Conquer (SeCo) algorithm](https://mlrl-boomer.readthedocs.io/en/latest/user_guide/seco/index.html) based on traditional rule learning techniques that are particularly well-suited for learning interpretable models.

## :book: 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. An overview of publications that are concerned with the BOOMER algorithm, together with information on how to cite them, can be found in the section [References](https://mlrl-boomer.readthedocs.io/en/latest/misc/references.html) of the documentation.

## :wrench: 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.
- **$L_1$ and $L_2$ 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.

## :watch: 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 data set 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 data sets.
- **Sparse ground truth matrices** can be used for training. This may reduce the memory footprint in case of large data sets.
- **Sparse prediction matrices** can be used for storing predicted labels. This may reduce the memory footprint in case of large data sets.
- **Sparse matrices for storing gradients and Hessians** can be used if supported by the loss function. This may speed up training significantly on data sets 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.

## :books: Documentation

An extensive user guide, as well as an API documentation for developers, is available at [https://mlrl-boomer.readthedocs.io](https://mlrl-boomer.readthedocs.io/en/latest/). 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).

## :scroll: 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.10",
    "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_dark.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/mrapp-ke/MLRL-Boomer/raw/main/doc/_static/logo_light.svg\">\n    <img alt=\"BOOMER - Gradient Boosted Multi-Label Classification Rules\" src=\"https://github.com/mrapp-ke/MLRL-Boomer/raw/main/assets/logo_light.svg\">\n  </picture>\n</p>\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![PyPI version](https://badge.fury.io/py/mlrl-boomer.svg)](https://badge.fury.io/py/mlrl-boomer) [![Documentation Status](https://readthedocs.org/projects/mlrl-boomer/badge/?version=latest)](https://mlrl-boomer.readthedocs.io/en/latest/?badge=latest) [![X URL](https://img.shields.io/twitter/url?label=Follow&style=social&url=https%3A%2F%2Ftwitter.com%2FBOOMER_ML)](https://twitter.com/BOOMER_ML)\n\n**:link: 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) | [Contributors](https://mlrl-boomer.readthedocs.io/en/latest/misc/CONTRIBUTORS.html) | [Code of Conduct](https://mlrl-boomer.readthedocs.io/en/latest/misc/CODE_OF_CONDUCT.html) | [License](https://mlrl-boomer.readthedocs.io/en/latest/misc/LICENSE.html)\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\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. For example, this project does also provide a [Separate-and-Conquer (SeCo) algorithm](https://mlrl-boomer.readthedocs.io/en/latest/user_guide/seco/index.html) based on traditional rule learning techniques that are particularly well-suited for learning interpretable models.\n\n## :book: 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. An overview of publications that are concerned with the BOOMER algorithm, together with information on how to cite them, can be found in the section [References](https://mlrl-boomer.readthedocs.io/en/latest/misc/references.html) of the documentation.\n\n## :wrench: 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- **$L_1$ and $L_2$ 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## :watch: 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 data set 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 data sets.\n- **Sparse ground truth matrices** can be used for training. This may reduce the memory footprint in case of large data sets.\n- **Sparse prediction matrices** can be used for storing predicted labels. This may reduce the memory footprint in case of large data sets.\n- **Sparse matrices for storing gradients and Hessians** can be used if supported by the loss function. This may speed up training significantly on data sets 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## :books: Documentation\n\nAn extensive user guide, as well as an API documentation for developers, is available at [https://mlrl-boomer.readthedocs.io](https://mlrl-boomer.readthedocs.io/en/latest/). 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## :scroll: 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.11.2",
    "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": "90af448d702fc9fc1a5648fecf554a3a463444930147a6a26385b2fcdce9e355",
                "md5": "07006c4904cfbfa02c8c885088a170fb",
                "sha256": "a95789f82be02288940fd93789b39a133853bef048dc2ea7cb61b6a7510c1388"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "07006c4904cfbfa02c8c885088a170fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 1716882,
            "upload_time": "2025-01-22T21:57:27",
            "upload_time_iso_8601": "2025-01-22T21:57:27.261772Z",
            "url": "https://files.pythonhosted.org/packages/90/af/448d702fc9fc1a5648fecf554a3a463444930147a6a26385b2fcdce9e355/mlrl_boomer-0.11.2-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d2e96b042cf8145105e8a57f2aacc2eb64a62b0032d25976bab98fde132063f7",
                "md5": "e044ef5235e760de34334737ea728a16",
                "sha256": "362995294660c14dbd50f52e41e2e6b2ad5aca702fb2a8f31dc9983efa805660"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e044ef5235e760de34334737ea728a16",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 3436567,
            "upload_time": "2025-01-22T22:06:00",
            "upload_time_iso_8601": "2025-01-22T22:06:00.484410Z",
            "url": "https://files.pythonhosted.org/packages/d2/e9/6b042cf8145105e8a57f2aacc2eb64a62b0032d25976bab98fde132063f7/mlrl_boomer-0.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2446bdd76a54e81623f0fd399a877773ca1b8458f069546399d5f9f756d6ec8d",
                "md5": "1ab85158426c2d7be72adc5376d14623",
                "sha256": "285f0e10725fd9873848571e8da41e42063b1a318dcd7342c8daa0334ebe9736"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "1ab85158426c2d7be72adc5376d14623",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 906042,
            "upload_time": "2025-01-22T22:13:28",
            "upload_time_iso_8601": "2025-01-22T22:13:28.738757Z",
            "url": "https://files.pythonhosted.org/packages/24/46/bdd76a54e81623f0fd399a877773ca1b8458f069546399d5f9f756d6ec8d/mlrl_boomer-0.11.2-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "adff48da27d8fa2249f83a4037cec4d7c497f4dcc3d18510e36e1d4ebd6cb001",
                "md5": "5b6647b139c710023d4fe7db3d456b3c",
                "sha256": "a389107337c29754d2f24cefa1853ab43de48880c8307fe1d0f33e69ec9a6156"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "5b6647b139c710023d4fe7db3d456b3c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 1708908,
            "upload_time": "2025-01-22T21:57:29",
            "upload_time_iso_8601": "2025-01-22T21:57:29.425139Z",
            "url": "https://files.pythonhosted.org/packages/ad/ff/48da27d8fa2249f83a4037cec4d7c497f4dcc3d18510e36e1d4ebd6cb001/mlrl_boomer-0.11.2-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ea7f371d529f97416c3e9a5bff5d430143eadc99e2ddd780073956ee4d3dcaac",
                "md5": "b05e29e27e5223c5603849da70e19494",
                "sha256": "656191f8be2a623e75bad0b92b2929496975e11722c39ca15cc52933d8fa38ff"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b05e29e27e5223c5603849da70e19494",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 3409274,
            "upload_time": "2025-01-22T22:06:02",
            "upload_time_iso_8601": "2025-01-22T22:06:02.941285Z",
            "url": "https://files.pythonhosted.org/packages/ea/7f/371d529f97416c3e9a5bff5d430143eadc99e2ddd780073956ee4d3dcaac/mlrl_boomer-0.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a6a7d5d2178c5c267f5fb6cb94af7905d061326227e3180b8fa9d9c592e5d3b7",
                "md5": "eaf757878e802721bbaafe2e1c6d0149",
                "sha256": "2c9d2f47fa5bb55f745ce467409b1957192685a84f1949945e198c38618d19ee"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "eaf757878e802721bbaafe2e1c6d0149",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 900108,
            "upload_time": "2025-01-22T22:13:29",
            "upload_time_iso_8601": "2025-01-22T22:13:29.928816Z",
            "url": "https://files.pythonhosted.org/packages/a6/a7/d5d2178c5c267f5fb6cb94af7905d061326227e3180b8fa9d9c592e5d3b7/mlrl_boomer-0.11.2-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "745543b96dac0a7e891f4da2fc5903964548ee6e365a249bcaeb80f01690ca33",
                "md5": "96eca188d7739e758930068a0712ce38",
                "sha256": "40b99ca6ef4747841dbedfa55042bb651cad05a642de48a0d642c0e3652b830c"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "96eca188d7739e758930068a0712ce38",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 1712544,
            "upload_time": "2025-01-22T21:57:30",
            "upload_time_iso_8601": "2025-01-22T21:57:30.825062Z",
            "url": "https://files.pythonhosted.org/packages/74/55/43b96dac0a7e891f4da2fc5903964548ee6e365a249bcaeb80f01690ca33/mlrl_boomer-0.11.2-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "00f8027ec51d0e74fa36d5bfe04769df47d2b6b310d568add7d03bc924b13fd8",
                "md5": "a9dcd2385546f896df1fd2fc9363aadc",
                "sha256": "c9c29fc44fb7530a2f7eef5bfe18b600cfb4a616357dc2fc9c770ff1df5183d9"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a9dcd2385546f896df1fd2fc9363aadc",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 3413611,
            "upload_time": "2025-01-22T22:06:05",
            "upload_time_iso_8601": "2025-01-22T22:06:05.485243Z",
            "url": "https://files.pythonhosted.org/packages/00/f8/027ec51d0e74fa36d5bfe04769df47d2b6b310d568add7d03bc924b13fd8/mlrl_boomer-0.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a45d40c09ed949928755eb05848ac70b01dc6154fcf6b7c6e81aafa10028d6b7",
                "md5": "9ff67db17a0e32039f87fc59695a5bc1",
                "sha256": "64d55bf6cbb0c977e617e2aaa49c032ffc83821d811d0853efd9f9fffab508fc"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9ff67db17a0e32039f87fc59695a5bc1",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 897993,
            "upload_time": "2025-01-22T22:13:31",
            "upload_time_iso_8601": "2025-01-22T22:13:31.796200Z",
            "url": "https://files.pythonhosted.org/packages/a4/5d/40c09ed949928755eb05848ac70b01dc6154fcf6b7c6e81aafa10028d6b7/mlrl_boomer-0.11.2-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bf6d5fa34dd832e95137340f454e79479de9b38d8469dbb9df42a08c0b7e1bb7",
                "md5": "d86158b08100183e5101510d99ce0c0a",
                "sha256": "a4cdbea6f75b0d26cb340d6ac4f5a56fdf29298b4b9e19a9e6f2a5aed3f0ee74"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d86158b08100183e5101510d99ce0c0a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 1704003,
            "upload_time": "2025-01-22T21:57:32",
            "upload_time_iso_8601": "2025-01-22T21:57:32.073762Z",
            "url": "https://files.pythonhosted.org/packages/bf/6d/5fa34dd832e95137340f454e79479de9b38d8469dbb9df42a08c0b7e1bb7/mlrl_boomer-0.11.2-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3b87029f23e0ceab25d2ed862240d0a174e43c50c73ad2991fea4c87079edd72",
                "md5": "c953205fc052f715eb37f17c774ece9e",
                "sha256": "4c3ff1e6cdd70ccc586cd0e480cbaabb27f10c7ad77b2b7bb69d0bf04ad43ccf"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c953205fc052f715eb37f17c774ece9e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 3399616,
            "upload_time": "2025-01-22T22:06:07",
            "upload_time_iso_8601": "2025-01-22T22:06:07.143927Z",
            "url": "https://files.pythonhosted.org/packages/3b/87/029f23e0ceab25d2ed862240d0a174e43c50c73ad2991fea4c87079edd72/mlrl_boomer-0.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9c617a4bd2efaa97174fe378d8852b31132c8a89ce78b683b8e39d80b3bed4db",
                "md5": "a9af5770422377eb05723d1111c02a42",
                "sha256": "8e6df99126e74742b002a7d8972d770b90805d24d9f9b0985a9675c0d59307f4"
            },
            "downloads": -1,
            "filename": "mlrl_boomer-0.11.2-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a9af5770422377eb05723d1111c02a42",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 888004,
            "upload_time": "2025-01-22T22:13:33",
            "upload_time_iso_8601": "2025-01-22T22:13:33.295366Z",
            "url": "https://files.pythonhosted.org/packages/9c/61/7a4bd2efaa97174fe378d8852b31132c8a89ce78b683b8e39d80b3bed4db/mlrl_boomer-0.11.2-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-22 21:57:27",
    "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"
}
        
Elapsed time: 1.29886s