glum


Nameglum JSON
Version 3.1.1 PyPI version JSON
download
home_pagehttps://github.com/Quantco/glum
SummaryHigh performance Python GLMs with all the features!
upload_time2025-01-13 16:13:20
maintainerNone
docs_urlNone
authorQuantCo, Inc.
requires_python>=3.9
licenseBSD
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # glum

[![CI](https://github.com/Quantco/glm_benchmarks/workflows/CI/badge.svg)](https://github.com/Quantco/glum/actions)
[![Daily runs](https://github.com/Quantco/glum/actions/workflows/daily.yml/badge.svg)](https://github.com/Quantco/glum/actions/workflows/daily.yml)
[![Docs](https://readthedocs.org/projects/pip/badge/?version=latest&style=flat)](https://glum.readthedocs.io/)
[![Conda-forge](https://img.shields.io/conda/vn/conda-forge/glum?logoColor=white&logo=conda-forge)](https://anaconda.org/conda-forge/glum)
[![PypiVersion](https://img.shields.io/pypi/v/glum.svg?logo=pypi&logoColor=white)](https://pypi.org/project/glum)
[![PythonVersion](https://img.shields.io/pypi/pyversions/glum?logoColor=white&logo=python)](https://pypi.org/project/glum)


[Documentation](https://glum.readthedocs.io/en/latest/)

Generalized linear models (GLM) are a core statistical tool that include many common methods like least-squares regression, Poisson regression and logistic regression as special cases. At QuantCo, we have used GLMs in e-commerce pricing, insurance claims prediction and more. We have developed `glum`, a fast Python-first GLM library. The development was based on [a fork of scikit-learn](https://github.com/scikit-learn/scikit-learn/pull/9405), so it has a scikit-learn-like API. We are thankful for the starting point provided by Christian Lorentzen in that PR!

The goal of `glum` is to be at least as feature-complete as existing GLM libraries like `glmnet` or `h2o`. It supports

* Built-in cross validation for optimal regularization, efficiently exploiting a “regularization path”
* L1 regularization, which produces sparse and easily interpretable solutions
* L2 regularization, including variable matrix-valued (Tikhonov) penalties, which are useful in modeling correlated effects
* Elastic net regularization
* Normal, Poisson, logistic, gamma, and Tweedie distributions, plus varied and customizable link functions
* Box constraints, linear inequality constraints, sample weights, offsets

This repo also includes tools for benchmarking GLM implementations in the `glum_benchmarks` module. For details on the benchmarking, [see here](src/glum_benchmarks/README.md). Although the performance of `glum` relative to `glmnet` and `h2o` depends on the specific problem, we find that when N >> K (there are more observations than predictors), it is consistently much faster for a wide range of problems.

![Performance benchmarks](docs/_static/headline_benchmark.png#gh-light-mode-only)
![Performance benchmarks](docs/_static/headline_benchmark_dark.png#gh-dark-mode-only)

For more information on `glum`, including tutorials and API reference, please see [the documentation](https://glum.readthedocs.io/en/latest/).

Why did we choose the name `glum`? We wanted a name that had the letters GLM and wasn't easily confused with any existing implementation. And we thought glum sounded like a funny name (and not glum at all!). If you need a more professional sounding name, feel free to pronounce it as G-L-um. Or maybe it stands for "Generalized linear... ummm... modeling?"

# A classic example predicting housing prices

```python
>>> import pandas as pd
>>> from sklearn.datasets import fetch_openml
>>> from glum import GeneralizedLinearRegressor
>>>
>>> # This dataset contains house sale prices for King County, which includes
>>> # Seattle. It includes homes sold between May 2014 and May 2015.
>>> # The full version of this dataset can be found at:
>>> # https://www.openml.org/search?type=data&status=active&id=42092
>>> house_data = pd.read_parquet("data/housing.parquet")
>>>
>>> # Use only select features
>>> X = house_data[
...     [
...         "bedrooms",
...         "bathrooms",
...         "sqft_living",
...         "floors",
...         "waterfront",
...         "view",
...         "condition",
...         "grade",
...         "yr_built",
...         "yr_renovated",
...     ]
... ].copy()
>>>
>>>
>>> # Model whether a house had an above or below median price via a Binomial
>>> # distribution. We'll be doing L1-regularized logistic regression.
>>> price = house_data["price"]
>>> y = (price < price.median()).values.astype(int)
>>> model = GeneralizedLinearRegressor(
...     family='binomial',
...     l1_ratio=1.0,
...     alpha=0.001
... )
>>>
>>> _ = model.fit(X=X, y=y)
>>>
>>> # .report_diagnostics shows details about the steps taken by the iterative solver.
>>> diags = model.get_formatted_diagnostics(full_report=True)
>>> diags[['objective_fct']]
        objective_fct
n_iter               
0            0.693091
1            0.489500
2            0.449585
3            0.443681
4            0.443498
5            0.443497
>>>
>>> # Models can also be built with formulas from formulaic.
>>> model_formula = GeneralizedLinearRegressor(
...     family='binomial',
...     l1_ratio=1.0,
...     alpha=0.001,
...     formula="bedrooms + np.log(bathrooms + 1) + bs(sqft_living, 3) + C(waterfront)"
... )
>>> _ = model_formula.fit(X=house_data, y=y)

```

# Installation

Please install the package through conda-forge:
```bash
conda install glum -c conda-forge
```

# Performance

For optimal performance on an x86_64 architecture, we recommend using the MKL library
(`conda install mkl`). By default, conda usually installs the openblas version, which
is slower, but supported on all major architecture and OS.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Quantco/glum",
    "name": "glum",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "QuantCo, Inc.",
    "author_email": "noreply@quantco.com",
    "download_url": "https://files.pythonhosted.org/packages/a0/85/42adfc3030273a5453bd120b254af8d4e9d2b6eb91e39920167497811702/glum-3.1.1.tar.gz",
    "platform": null,
    "description": "# glum\n\n[![CI](https://github.com/Quantco/glm_benchmarks/workflows/CI/badge.svg)](https://github.com/Quantco/glum/actions)\n[![Daily runs](https://github.com/Quantco/glum/actions/workflows/daily.yml/badge.svg)](https://github.com/Quantco/glum/actions/workflows/daily.yml)\n[![Docs](https://readthedocs.org/projects/pip/badge/?version=latest&style=flat)](https://glum.readthedocs.io/)\n[![Conda-forge](https://img.shields.io/conda/vn/conda-forge/glum?logoColor=white&logo=conda-forge)](https://anaconda.org/conda-forge/glum)\n[![PypiVersion](https://img.shields.io/pypi/v/glum.svg?logo=pypi&logoColor=white)](https://pypi.org/project/glum)\n[![PythonVersion](https://img.shields.io/pypi/pyversions/glum?logoColor=white&logo=python)](https://pypi.org/project/glum)\n\n\n[Documentation](https://glum.readthedocs.io/en/latest/)\n\nGeneralized linear models (GLM) are a core statistical tool that include many common methods like least-squares regression, Poisson regression and logistic regression as special cases. At QuantCo, we have used GLMs in e-commerce pricing, insurance claims prediction and more. We have developed `glum`, a fast Python-first GLM library. The development was based on [a fork of scikit-learn](https://github.com/scikit-learn/scikit-learn/pull/9405), so it has a scikit-learn-like API. We are thankful for the starting point provided by Christian Lorentzen in that PR!\n\nThe goal of `glum` is to be at least as feature-complete as existing GLM libraries like `glmnet` or `h2o`. It supports\n\n* Built-in cross validation for optimal regularization, efficiently exploiting a \u201cregularization path\u201d\n* L1 regularization, which produces sparse and easily interpretable solutions\n* L2 regularization, including variable matrix-valued (Tikhonov) penalties, which are useful in modeling correlated effects\n* Elastic net regularization\n* Normal, Poisson, logistic, gamma, and Tweedie distributions, plus varied and customizable link functions\n* Box constraints, linear inequality constraints, sample weights, offsets\n\nThis repo also includes tools for benchmarking GLM implementations in the `glum_benchmarks` module. For details on the benchmarking, [see here](src/glum_benchmarks/README.md). Although the performance of `glum` relative to `glmnet` and `h2o` depends on the specific problem, we find that when N >> K (there are more observations than predictors), it is consistently much faster for a wide range of problems.\n\n![Performance benchmarks](docs/_static/headline_benchmark.png#gh-light-mode-only)\n![Performance benchmarks](docs/_static/headline_benchmark_dark.png#gh-dark-mode-only)\n\nFor more information on `glum`, including tutorials and API reference, please see [the documentation](https://glum.readthedocs.io/en/latest/).\n\nWhy did we choose the name `glum`? We wanted a name that had the letters GLM and wasn't easily confused with any existing implementation. And we thought glum sounded like a funny name (and not glum at all!). If you need a more professional sounding name, feel free to pronounce it as G-L-um. Or maybe it stands for \"Generalized linear... ummm... modeling?\"\n\n# A classic example predicting housing prices\n\n```python\n>>> import pandas as pd\n>>> from sklearn.datasets import fetch_openml\n>>> from glum import GeneralizedLinearRegressor\n>>>\n>>> # This dataset contains house sale prices for King County, which includes\n>>> # Seattle. It includes homes sold between May 2014 and May 2015.\n>>> # The full version of this dataset can be found at:\n>>> # https://www.openml.org/search?type=data&status=active&id=42092\n>>> house_data = pd.read_parquet(\"data/housing.parquet\")\n>>>\n>>> # Use only select features\n>>> X = house_data[\n...     [\n...         \"bedrooms\",\n...         \"bathrooms\",\n...         \"sqft_living\",\n...         \"floors\",\n...         \"waterfront\",\n...         \"view\",\n...         \"condition\",\n...         \"grade\",\n...         \"yr_built\",\n...         \"yr_renovated\",\n...     ]\n... ].copy()\n>>>\n>>>\n>>> # Model whether a house had an above or below median price via a Binomial\n>>> # distribution. We'll be doing L1-regularized logistic regression.\n>>> price = house_data[\"price\"]\n>>> y = (price < price.median()).values.astype(int)\n>>> model = GeneralizedLinearRegressor(\n...     family='binomial',\n...     l1_ratio=1.0,\n...     alpha=0.001\n... )\n>>>\n>>> _ = model.fit(X=X, y=y)\n>>>\n>>> # .report_diagnostics shows details about the steps taken by the iterative solver.\n>>> diags = model.get_formatted_diagnostics(full_report=True)\n>>> diags[['objective_fct']]\n        objective_fct\nn_iter               \n0            0.693091\n1            0.489500\n2            0.449585\n3            0.443681\n4            0.443498\n5            0.443497\n>>>\n>>> # Models can also be built with formulas from formulaic.\n>>> model_formula = GeneralizedLinearRegressor(\n...     family='binomial',\n...     l1_ratio=1.0,\n...     alpha=0.001,\n...     formula=\"bedrooms + np.log(bathrooms + 1) + bs(sqft_living, 3) + C(waterfront)\"\n... )\n>>> _ = model_formula.fit(X=house_data, y=y)\n\n```\n\n# Installation\n\nPlease install the package through conda-forge:\n```bash\nconda install glum -c conda-forge\n```\n\n# Performance\n\nFor optimal performance on an x86_64 architecture, we recommend using the MKL library\n(`conda install mkl`). By default, conda usually installs the openblas version, which\nis slower, but supported on all major architecture and OS.\n",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "High performance Python GLMs with all the features!",
    "version": "3.1.1",
    "project_urls": {
        "Homepage": "https://github.com/Quantco/glum"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "289fdbe7048b89796d39d7116516306e1a6689a25342e170a76b0742a93fb228",
                "md5": "adcc53f3c682d244c645e633c26a1d17",
                "sha256": "f83f165a47b9adfd398f2ed9bcdccb15271206b56d3cd29970b358accd4501ac"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp310-cp310-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "adcc53f3c682d244c645e633c26a1d17",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 953317,
            "upload_time": "2025-01-13T16:12:30",
            "upload_time_iso_8601": "2025-01-13T16:12:30.356843Z",
            "url": "https://files.pythonhosted.org/packages/28/9f/dbe7048b89796d39d7116516306e1a6689a25342e170a76b0742a93fb228/glum-3.1.1-cp310-cp310-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fa9b2611eba1f78730f467ef076879dfe317911040ebb02161f0efee61900d8b",
                "md5": "e8978aaa1523cf539f0d625b03371062",
                "sha256": "2c2f4d8f3e59857abae88cf7d3abd8c65c828400ef662e8ee891c0592ef87595"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e8978aaa1523cf539f0d625b03371062",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 832559,
            "upload_time": "2025-01-13T16:12:32",
            "upload_time_iso_8601": "2025-01-13T16:12:32.675754Z",
            "url": "https://files.pythonhosted.org/packages/fa/9b/2611eba1f78730f467ef076879dfe317911040ebb02161f0efee61900d8b/glum-3.1.1-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7d01a65fca389ac01083db55ae37d67f6ab111d10c5f2d19fd577cf8b9c6ff92",
                "md5": "d56414dfcc2d68d0d418a4744e7ef693",
                "sha256": "f2ed32bfc75d25ca67e571c1388e833ba70338ceebe90841bd7463b28f9c6f81"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d56414dfcc2d68d0d418a4744e7ef693",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 3371284,
            "upload_time": "2025-01-13T16:12:34",
            "upload_time_iso_8601": "2025-01-13T16:12:34.801530Z",
            "url": "https://files.pythonhosted.org/packages/7d/01/a65fca389ac01083db55ae37d67f6ab111d10c5f2d19fd577cf8b9c6ff92/glum-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "33db9c700b5dca7083a88b65aec213057d475d7df45166d599e593831dbcaa0b",
                "md5": "2b1dc44568143477d04d0ff461287117",
                "sha256": "00330f722180759fd374b9c041e6b4b330a5fd9d5e9ebba37cc653631a2606bb"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2b1dc44568143477d04d0ff461287117",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 532751,
            "upload_time": "2025-01-13T16:12:37",
            "upload_time_iso_8601": "2025-01-13T16:12:37.075427Z",
            "url": "https://files.pythonhosted.org/packages/33/db/9c700b5dca7083a88b65aec213057d475d7df45166d599e593831dbcaa0b/glum-3.1.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "543dc00f15dd57a944f3a7f43a177759e78adbdadaf9add558e4750213ea412a",
                "md5": "601aa2d382571b0ce7571823a177910d",
                "sha256": "3faf1d2d037e48a6f8ccb2747d0c041bb8e5f45d0c9f2cd3c8081e76d7e00571"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp311-cp311-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "601aa2d382571b0ce7571823a177910d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 942769,
            "upload_time": "2025-01-13T16:12:40",
            "upload_time_iso_8601": "2025-01-13T16:12:40.486407Z",
            "url": "https://files.pythonhosted.org/packages/54/3d/c00f15dd57a944f3a7f43a177759e78adbdadaf9add558e4750213ea412a/glum-3.1.1-cp311-cp311-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d8373f0f0f76322f0f226f0278a31e71e6d1de8e04cea32399845e56e938ba9e",
                "md5": "d6fad2f9ea8762de41a66b1f2b9be998",
                "sha256": "8ce101c2e74a1b0228c28d0102550446ee3200d336c5226db792b0030540e281"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "d6fad2f9ea8762de41a66b1f2b9be998",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 824061,
            "upload_time": "2025-01-13T16:12:42",
            "upload_time_iso_8601": "2025-01-13T16:12:42.136019Z",
            "url": "https://files.pythonhosted.org/packages/d8/37/3f0f0f76322f0f226f0278a31e71e6d1de8e04cea32399845e56e938ba9e/glum-3.1.1-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "125bc00f0d92bf91697dbf0868a7281083ed4ffdcac10a181ab52a7ef555cab2",
                "md5": "9d6b80a13ea18d675a16437eea1b8aa6",
                "sha256": "4a61ecea8b1197d0a3a1f5a92ceefa8dc88ab0053a38b9c3089b4909836b9ebf"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9d6b80a13ea18d675a16437eea1b8aa6",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 3582058,
            "upload_time": "2025-01-13T16:12:45",
            "upload_time_iso_8601": "2025-01-13T16:12:45.182592Z",
            "url": "https://files.pythonhosted.org/packages/12/5b/c00f0d92bf91697dbf0868a7281083ed4ffdcac10a181ab52a7ef555cab2/glum-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7da05d4f070561ea6d6f8c8b6809153c160eb292bebe46bd25ec023e9dd5018f",
                "md5": "f9282a13b6d379c209e82209f9ff7cf4",
                "sha256": "6541ef889fd1adeea3ec542d27cf4ac5bfea3054ed9ba7927af2721f632b6b43"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f9282a13b6d379c209e82209f9ff7cf4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 532499,
            "upload_time": "2025-01-13T16:12:50",
            "upload_time_iso_8601": "2025-01-13T16:12:50.381573Z",
            "url": "https://files.pythonhosted.org/packages/7d/a0/5d4f070561ea6d6f8c8b6809153c160eb292bebe46bd25ec023e9dd5018f/glum-3.1.1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "281507053c290d7487c0a51a1bf07d96ff5bc1a8636a85e457474ae8be537dcf",
                "md5": "b03e7a3b14934b7a944fb187e915fa9a",
                "sha256": "98218b145d5a0da9ba1fd4bcc410fba545733ee04f25577f7c2ca1a981fa9a12"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b03e7a3b14934b7a944fb187e915fa9a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1043317,
            "upload_time": "2025-01-13T16:12:51",
            "upload_time_iso_8601": "2025-01-13T16:12:51.846470Z",
            "url": "https://files.pythonhosted.org/packages/28/15/07053c290d7487c0a51a1bf07d96ff5bc1a8636a85e457474ae8be537dcf/glum-3.1.1-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cd71e9f6987ac5b40d83ed224dbdcb0a02148b2f4b9b616678926053827f1068",
                "md5": "664467cdad2aaf4d8d09f9cb5992e612",
                "sha256": "b27f6ba2e33103322dd131a54416e76a14dc19efabdde25d24d5a8d386db7324"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "664467cdad2aaf4d8d09f9cb5992e612",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 859389,
            "upload_time": "2025-01-13T16:12:54",
            "upload_time_iso_8601": "2025-01-13T16:12:54.957789Z",
            "url": "https://files.pythonhosted.org/packages/cd/71/e9f6987ac5b40d83ed224dbdcb0a02148b2f4b9b616678926053827f1068/glum-3.1.1-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "409076006d7f7cdad3ecaa3e33b82aab5707b6770d73f93a685a0db01503abc4",
                "md5": "53199873e1dd86498b84d6a5337e2b78",
                "sha256": "ecdbbc895c5ec264e96abc378129522171e0c94eb3ed1943772f06485b08cbe8"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "53199873e1dd86498b84d6a5337e2b78",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 3417672,
            "upload_time": "2025-01-13T16:12:57",
            "upload_time_iso_8601": "2025-01-13T16:12:57.721742Z",
            "url": "https://files.pythonhosted.org/packages/40/90/76006d7f7cdad3ecaa3e33b82aab5707b6770d73f93a685a0db01503abc4/glum-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "edf5376bcfd3dacc288ca631807680347c45f355c31ac7dc9c4ed2610366be40",
                "md5": "3f77e0aea265363033b123a3501ccaf0",
                "sha256": "33019188e076d3ce6a9c2b5e5b39dc15ed76904a3572bc4313b09881cf3227d3"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3f77e0aea265363033b123a3501ccaf0",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 541765,
            "upload_time": "2025-01-13T16:12:59",
            "upload_time_iso_8601": "2025-01-13T16:12:59.895579Z",
            "url": "https://files.pythonhosted.org/packages/ed/f5/376bcfd3dacc288ca631807680347c45f355c31ac7dc9c4ed2610366be40/glum-3.1.1-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "824caff2284861a2754d390942eed4369a0581cdb06a40cfa1f799afb4371294",
                "md5": "1332fb6932780c4e6e14cd71d4241caa",
                "sha256": "33158c63c2593ccf74e865d47f8db18726d60304699522efaf2ef732165fbb75"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1332fb6932780c4e6e14cd71d4241caa",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1060055,
            "upload_time": "2025-01-13T16:13:02",
            "upload_time_iso_8601": "2025-01-13T16:13:02.853553Z",
            "url": "https://files.pythonhosted.org/packages/82/4c/aff2284861a2754d390942eed4369a0581cdb06a40cfa1f799afb4371294/glum-3.1.1-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e611535366b4c0402ce4bde13bcb9c06cda097be4f3099687734f8293919dc12",
                "md5": "441ee0f61cc8078b599bdf41c835e941",
                "sha256": "6e2ec1efe9ab6255cb844568c0308c24ee85950c48a57c427a19f4309f92d620"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "441ee0f61cc8078b599bdf41c835e941",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 878753,
            "upload_time": "2025-01-13T16:13:04",
            "upload_time_iso_8601": "2025-01-13T16:13:04.692278Z",
            "url": "https://files.pythonhosted.org/packages/e6/11/535366b4c0402ce4bde13bcb9c06cda097be4f3099687734f8293919dc12/glum-3.1.1-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b72559316cf881365b040965e312bcb26029f92e78e04c341e4e66665185e899",
                "md5": "21aab5e0bb294eba7bbfaebf0230717d",
                "sha256": "6a7695f3f0887576876a02fd3dcdc484ff1f913c681ad055ba6f06f8a915627b"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "21aab5e0bb294eba7bbfaebf0230717d",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 3409870,
            "upload_time": "2025-01-13T16:13:07",
            "upload_time_iso_8601": "2025-01-13T16:13:07.768870Z",
            "url": "https://files.pythonhosted.org/packages/b7/25/59316cf881365b040965e312bcb26029f92e78e04c341e4e66665185e899/glum-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fc00863fcb0dd6c480e899447b4b5bc54b3035ef2281690909a209965913714c",
                "md5": "b24c1c842e021d6272cec04553b1b02e",
                "sha256": "bb0fbdba43ad1c541647b6ad443b553b06753de10879000b5ff1cc5eb1dd0900"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b24c1c842e021d6272cec04553b1b02e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 540953,
            "upload_time": "2025-01-13T16:13:09",
            "upload_time_iso_8601": "2025-01-13T16:13:09.538203Z",
            "url": "https://files.pythonhosted.org/packages/fc/00/863fcb0dd6c480e899447b4b5bc54b3035ef2281690909a209965913714c/glum-3.1.1-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb285b52995e2df8c866edcb2ec0484ca301d12228ded7e2f67b5f8ed6db0476",
                "md5": "c6f198b524293b472cc6378c5b903cab",
                "sha256": "f06193f9c85945ce6fdf52292ea1fe718ae9448c76f73642b9689cc0e26b4f9a"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp39-cp39-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c6f198b524293b472cc6378c5b903cab",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 954618,
            "upload_time": "2025-01-13T16:13:11",
            "upload_time_iso_8601": "2025-01-13T16:13:11.102074Z",
            "url": "https://files.pythonhosted.org/packages/fb/28/5b52995e2df8c866edcb2ec0484ca301d12228ded7e2f67b5f8ed6db0476/glum-3.1.1-cp39-cp39-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "570dc80e90b6661d4f84067996913a2915085d890d620710cb248bcd0fa0f416",
                "md5": "3bb74009c360556aa5391a919a5140dd",
                "sha256": "bbf568f54203f0d268a53a5575468e2095adbb88d3b1573001bdf0ace4add8c1"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "3bb74009c360556aa5391a919a5140dd",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 833560,
            "upload_time": "2025-01-13T16:13:12",
            "upload_time_iso_8601": "2025-01-13T16:13:12.759748Z",
            "url": "https://files.pythonhosted.org/packages/57/0d/c80e90b6661d4f84067996913a2915085d890d620710cb248bcd0fa0f416/glum-3.1.1-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c1479209ee928f19c1701be740048f65298d36a62551e04ab1133236978f9564",
                "md5": "3440e90024706f7631681dc0daaeb3fc",
                "sha256": "fdff7016f57d1835b3b19b07c93667f6cacc6f97e1fe6a0cb74cb741525c1e94"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3440e90024706f7631681dc0daaeb3fc",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 3377514,
            "upload_time": "2025-01-13T16:13:14",
            "upload_time_iso_8601": "2025-01-13T16:13:14.424772Z",
            "url": "https://files.pythonhosted.org/packages/c1/47/9209ee928f19c1701be740048f65298d36a62551e04ab1133236978f9564/glum-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bd32b2533f0e4786310b87170e340a1c902fe86fc3b9c588d2cce2dadf0a9e2c",
                "md5": "259926121ee6f2e68f331e462f106666",
                "sha256": "7200680ca3ba795cb3e34e25fae230bb9128292e37c61ae371d87684798f23e8"
            },
            "downloads": -1,
            "filename": "glum-3.1.1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "259926121ee6f2e68f331e462f106666",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 533766,
            "upload_time": "2025-01-13T16:13:17",
            "upload_time_iso_8601": "2025-01-13T16:13:17.619231Z",
            "url": "https://files.pythonhosted.org/packages/bd/32/b2533f0e4786310b87170e340a1c902fe86fc3b9c588d2cce2dadf0a9e2c/glum-3.1.1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a08542adfc3030273a5453bd120b254af8d4e9d2b6eb91e39920167497811702",
                "md5": "a828642ce24df5692f4826c1ddce5729",
                "sha256": "0354f792a1467ae295b9f9ec9fe2fb1b4af9ee97c0f72cb5ef2cf785c0cca792"
            },
            "downloads": -1,
            "filename": "glum-3.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "a828642ce24df5692f4826c1ddce5729",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 13492393,
            "upload_time": "2025-01-13T16:13:20",
            "upload_time_iso_8601": "2025-01-13T16:13:20.709878Z",
            "url": "https://files.pythonhosted.org/packages/a0/85/42adfc3030273a5453bd120b254af8d4e9d2b6eb91e39920167497811702/glum-3.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-13 16:13:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Quantco",
    "github_project": "glum",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "glum"
}
        
Elapsed time: 0.44986s