pygm


Namepygm JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://pgm.di.unipi.it/
SummarySorted containers with state-of-the-art query performance and compressed memory usage
upload_time2024-04-02 16:22:29
maintainerNone
docs_urlNone
authorGiorgio Vinciguerra
requires_pythonNone
licenseApache-2.0
keywords tree list array btree b+tree vector skiplist container sortedlist sorted set query index data structure
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
  <img src="https://gvinciguerra.github.io/PGM-index/images/pygm.svg" alt="pygm" style="width: 300px" />
</p>

<p align="center">PyGM is a Python library that enables fast query operations on sorted lists of numbers (like integers and floats) with a tiny memory overhead. Internally, it features the <a href="https://github.com/gvinciguerra/PGM-index">PGM-index</a>, a state-of-the-art learned data structure that robustly scales to billions of elements in just a few tens of megabytes.</p>

<p align="center">
    <a href="https://github.com/gvinciguerra/PyGM/actions/workflows/build.yml"><img src="https://github.com/gvinciguerra/PyGM/actions/workflows/build.yml/badge.svg" alt="Build status" /></a>
    <a href="https://codecov.io/gh/gvinciguerra/PyGM"><img src="https://codecov.io/gh/gvinciguerra/PyGM/branch/master/graph/badge.svg?token=G20KV3DLAN" alt="Code coverage"/></a>
    <a href="https://pypi.org/project/pygm/"><img src="https://img.shields.io/pypi/v/pygm" alt="PyPI"/></a>
    <a href="https://github.com/gvinciguerra/PyGM/blob/master/LICENSE"><img src="https://img.shields.io/github/license/gvinciguerra/PyGM" alt="License" /></a>
    <a href="https://github.com/gvinciguerra/PyGM/stargazers"><img src="https://img.shields.io/github/stars/gvinciguerra/PyGM" alt="GitHub stars" /></a>
    <a href="https://github.com/gvinciguerra/PyGM/network/members"><img alt="GitHub forks" src="https://img.shields.io/github/forks/gvinciguerra/PyGM" /></a>
</p>

## Quick start

Install with pip:

```bash
pip install pygm
```

PyGM supports both standard and other useful list and set operations:

```python
>>> from pygm import SortedList, SortedSet
>>> sl = SortedList([0, 1, 34, 144, 1, 55, 233, 2, 3, 21, 89, 5, 8, 13])
>>> sl
SortedList([0, 1, 1, ..., 144, 233])
>>> sl.find_gt(9)                                   # smallest element > 9
13
>>> sl.count(1)                                     # frequency of 1
2
>>> 42 in sl                                        # membership test
False
>>> list(sl.range(0, 21, inclusive=(False, True)))  # elements 0 < x <= 21
[1, 1, 2, 3, 5, 8, 13, 21]
>>> sl[2:10:3]                                      # slicing syntax support
SortedList([1, 5, 21])
>>> (sl + [-3, -2, -1]).rank(0)                     # number of elements <= 0
4
>>> ss = SortedSet([1, 2, 3, 4]) ^ {3, 4, 5}        # set symmetric difference
>>> ss.find_lt(5)
2
```

The full documentation is available [online](https://pgm.di.unipi.it/docs/python-reference/) and in the Python interpreter via the `help()` built-in function.

## Installation

PyGM is compatible with Python 3.3+. The easiest way to install it is through PyPI:

```bash
pip install pygm
```

Otherwise, you can clone the repo, build it from source and install it as follows:

```bash
if [[ "$(uname)" == "Darwin" ]]; then brew install libomp; fi
git clone https://github.com/gvinciguerra/PyGM.git
cd PyGM
git submodule update --init --recursive
pip install .
```

Remember to leave the source directory `PyGM/` and its parent before running Python.  

## Performance

Here are some plots that compare the performance of PyGM with two popular libraries, [sortedcontainers](https://github.com/grantjenks/python-sortedcontainers) and [blist](http://github.com/DanielStutzbach/blist), on synthetic data.

<p align="center">
  <img src="https://gvinciguerra.github.io/PGM-index/images/pygm-lists-time.svg" alt="Query performance of Python packages implementing sorted lists" style="width: 700px" />
</p>

All the graphs are log-log and show, for increasing data sizes, the average time it takes to perform each operation (lower is better). In particular, the `__init__` plot shows the construction time, `__contains__` measures membership queries, and `__getitem__` shows the cost of accessing an element given its position.

The interesting operations on sorted lists are: (i) `index`, which returns the position of the first occurrence of a given element; (ii) `count`, which returns the number of occurrences of a given element; (iii) `bisect_left`, which returns the insertion point for a given value in the list to maintain the sorted order (and is used to implement `find_[ge|gt|le|lt]`).

You can run and plot the experiments on your computer and your data with the notebook in [tests/benchmark.ipynb](https://github.com/gvinciguerra/PyGM/blob/master/tests/benchmark.ipynb).

## License

This project is licensed under the terms of the Apache License 2.0.

If you use the library in an academic setting, please cite the following paper:

> Paolo Ferragina and Giorgio Vinciguerra. The PGM-index: a fully-dynamic compressed learned index with provable worst-case bounds. PVLDB, 13(8): 1162-1175, 2020.

```tex
@article{Ferragina:2020pgm,
  Author = {Paolo Ferragina and Giorgio Vinciguerra},
  Title = {The {PGM-index}: a fully-dynamic compressed learned index with provable worst-case bounds},
  Year = {2020},
  Volume = {13},
  Number = {8},
  Pages = {1162--1175},
  Doi = {10.14778/3389133.3389135},
  Url = {https://pgm.di.unipi.it},
  Issn = {2150-8097},
  Journal = {{PVLDB}}}
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://pgm.di.unipi.it/",
    "name": "pygm",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "tree list array btree b+tree vector skiplist container sortedlist sorted set query index data structure",
    "author": "Giorgio Vinciguerra",
    "author_email": "i@gvdev.com",
    "download_url": "https://files.pythonhosted.org/packages/70/59/f86d019d9b427b7a03a98b677abc59f7d8c44e2a97e1458e3f2133d52513/pygm-1.0.1.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n  <img src=\"https://gvinciguerra.github.io/PGM-index/images/pygm.svg\" alt=\"pygm\" style=\"width: 300px\" />\n</p>\n\n<p align=\"center\">PyGM is a Python library that enables fast query operations on sorted lists of numbers (like integers and floats) with a tiny memory overhead. Internally, it features the <a href=\"https://github.com/gvinciguerra/PGM-index\">PGM-index</a>, a state-of-the-art learned data structure that robustly scales to billions of elements in just a few tens of megabytes.</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/gvinciguerra/PyGM/actions/workflows/build.yml\"><img src=\"https://github.com/gvinciguerra/PyGM/actions/workflows/build.yml/badge.svg\" alt=\"Build status\" /></a>\n    <a href=\"https://codecov.io/gh/gvinciguerra/PyGM\"><img src=\"https://codecov.io/gh/gvinciguerra/PyGM/branch/master/graph/badge.svg?token=G20KV3DLAN\" alt=\"Code coverage\"/></a>\n    <a href=\"https://pypi.org/project/pygm/\"><img src=\"https://img.shields.io/pypi/v/pygm\" alt=\"PyPI\"/></a>\n    <a href=\"https://github.com/gvinciguerra/PyGM/blob/master/LICENSE\"><img src=\"https://img.shields.io/github/license/gvinciguerra/PyGM\" alt=\"License\" /></a>\n    <a href=\"https://github.com/gvinciguerra/PyGM/stargazers\"><img src=\"https://img.shields.io/github/stars/gvinciguerra/PyGM\" alt=\"GitHub stars\" /></a>\n    <a href=\"https://github.com/gvinciguerra/PyGM/network/members\"><img alt=\"GitHub forks\" src=\"https://img.shields.io/github/forks/gvinciguerra/PyGM\" /></a>\n</p>\n\n## Quick start\n\nInstall with pip:\n\n```bash\npip install pygm\n```\n\nPyGM supports both standard and other useful list and set operations:\n\n```python\n>>> from pygm import SortedList, SortedSet\n>>> sl = SortedList([0, 1, 34, 144, 1, 55, 233, 2, 3, 21, 89, 5, 8, 13])\n>>> sl\nSortedList([0, 1, 1, ..., 144, 233])\n>>> sl.find_gt(9)                                   # smallest element > 9\n13\n>>> sl.count(1)                                     # frequency of 1\n2\n>>> 42 in sl                                        # membership test\nFalse\n>>> list(sl.range(0, 21, inclusive=(False, True)))  # elements 0 < x <= 21\n[1, 1, 2, 3, 5, 8, 13, 21]\n>>> sl[2:10:3]                                      # slicing syntax support\nSortedList([1, 5, 21])\n>>> (sl + [-3, -2, -1]).rank(0)                     # number of elements <= 0\n4\n>>> ss = SortedSet([1, 2, 3, 4]) ^ {3, 4, 5}        # set symmetric difference\n>>> ss.find_lt(5)\n2\n```\n\nThe full documentation is available [online](https://pgm.di.unipi.it/docs/python-reference/) and in the Python interpreter via the `help()` built-in function.\n\n## Installation\n\nPyGM is compatible with Python 3.3+. The easiest way to install it is through PyPI:\n\n```bash\npip install pygm\n```\n\nOtherwise, you can clone the repo, build it from source and install it as follows:\n\n```bash\nif [[ \"$(uname)\" == \"Darwin\" ]]; then brew install libomp; fi\ngit clone https://github.com/gvinciguerra/PyGM.git\ncd PyGM\ngit submodule update --init --recursive\npip install .\n```\n\nRemember to leave the source directory `PyGM/` and its parent before running Python.  \n\n## Performance\n\nHere are some plots that compare the performance of PyGM with two popular libraries, [sortedcontainers](https://github.com/grantjenks/python-sortedcontainers) and [blist](http://github.com/DanielStutzbach/blist), on synthetic data.\n\n<p align=\"center\">\n  <img src=\"https://gvinciguerra.github.io/PGM-index/images/pygm-lists-time.svg\" alt=\"Query performance of Python packages implementing sorted lists\" style=\"width: 700px\" />\n</p>\n\nAll the graphs are log-log and show, for increasing data sizes, the average time it takes to perform each operation (lower is better). In particular, the `__init__` plot shows the construction time, `__contains__` measures membership queries, and `__getitem__` shows the cost of accessing an element given its position.\n\nThe interesting operations on sorted lists are: (i) `index`, which returns the position of the first occurrence of a given element; (ii) `count`, which returns the number of occurrences of a given element; (iii) `bisect_left`, which returns the insertion point for a given value in the list to maintain the sorted order (and is used to implement `find_[ge|gt|le|lt]`).\n\nYou can run and plot the experiments on your computer and your data with the notebook in [tests/benchmark.ipynb](https://github.com/gvinciguerra/PyGM/blob/master/tests/benchmark.ipynb).\n\n## License\n\nThis project is licensed under the terms of the Apache License 2.0.\n\nIf you use the library in an academic setting, please cite the following paper:\n\n> Paolo Ferragina and Giorgio Vinciguerra. The PGM-index: a fully-dynamic compressed learned index with provable worst-case bounds. PVLDB, 13(8): 1162-1175, 2020.\n\n```tex\n@article{Ferragina:2020pgm,\n  Author = {Paolo Ferragina and Giorgio Vinciguerra},\n  Title = {The {PGM-index}: a fully-dynamic compressed learned index with provable worst-case bounds},\n  Year = {2020},\n  Volume = {13},\n  Number = {8},\n  Pages = {1162--1175},\n  Doi = {10.14778/3389133.3389135},\n  Url = {https://pgm.di.unipi.it},\n  Issn = {2150-8097},\n  Journal = {{PVLDB}}}\n```\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Sorted containers with state-of-the-art query performance and compressed memory usage",
    "version": "1.0.1",
    "project_urls": {
        "Documentation": "https://pgm.di.unipi.it/docs/python-reference/",
        "Homepage": "https://pgm.di.unipi.it/",
        "Source": "https://github.com/gvinciguerra/PyGM/",
        "Tracker": "https://github.com/gvinciguerra/PyGM/issues"
    },
    "split_keywords": [
        "tree",
        "list",
        "array",
        "btree",
        "b+tree",
        "vector",
        "skiplist",
        "container",
        "sortedlist",
        "sorted",
        "set",
        "query",
        "index",
        "data",
        "structure"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e237d725a4b4777d6dedb093b3e1d21a88d1fce4bdaeea650f0ab06ea9b8a6b9",
                "md5": "dab54628cec8b9aa4aadf9c1b7ce2f76",
                "sha256": "d0dd7124e08ecf425c4384798d437eeda1365d9f3a61cbab155f20385af0ddb5"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dab54628cec8b9aa4aadf9c1b7ce2f76",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1608201,
            "upload_time": "2024-04-02T16:21:35",
            "upload_time_iso_8601": "2024-04-02T16:21:35.315076Z",
            "url": "https://files.pythonhosted.org/packages/e2/37/d725a4b4777d6dedb093b3e1d21a88d1fce4bdaeea650f0ab06ea9b8a6b9/pygm-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3231e0427e5e8ecbc2c646778b72b0298d62cffe2a1abd32e077877ec112bfc7",
                "md5": "93764be2d504351a0feb65030456b287",
                "sha256": "37c258199288bb0cdf89ea24042cfa77c2a114df66ee1bd78910f0e1c47d7560"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "93764be2d504351a0feb65030456b287",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 4600892,
            "upload_time": "2024-04-02T16:21:39",
            "upload_time_iso_8601": "2024-04-02T16:21:39.386830Z",
            "url": "https://files.pythonhosted.org/packages/32/31/e0427e5e8ecbc2c646778b72b0298d62cffe2a1abd32e077877ec112bfc7/pygm-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a040b38e05fb6e263fb96f83f14981e6676e3d6711c6e44a0bbff5932d01dbb0",
                "md5": "673d801f66d666d2ae9df6bf0ee04b92",
                "sha256": "bd121e65719129e3f40fb272005b46131fe591f58aa845e247ecdd555b99dd6b"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "673d801f66d666d2ae9df6bf0ee04b92",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 5074787,
            "upload_time": "2024-04-02T16:21:42",
            "upload_time_iso_8601": "2024-04-02T16:21:42.321372Z",
            "url": "https://files.pythonhosted.org/packages/a0/40/b38e05fb6e263fb96f83f14981e6676e3d6711c6e44a0bbff5932d01dbb0/pygm-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "84b3d6a27bb373881fed08efb6d091a00005b3460a91c39cc1d9de0be1810e77",
                "md5": "2a6f2087c9d8ce49519765cbb9148f35",
                "sha256": "41bff772a9fc7f24e047ef7658bf084a8296c30f23742793dd9bfc02858f7e74"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2a6f2087c9d8ce49519765cbb9148f35",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1609677,
            "upload_time": "2024-04-02T16:21:43",
            "upload_time_iso_8601": "2024-04-02T16:21:43.960472Z",
            "url": "https://files.pythonhosted.org/packages/84/b3/d6a27bb373881fed08efb6d091a00005b3460a91c39cc1d9de0be1810e77/pygm-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "07636e6cb3b5d43e21f1a382d524102d35cfe1dfb8163a954f0d0061ad205abc",
                "md5": "ab115ff4f3e8bf06408f339abe27d41b",
                "sha256": "4a086f4711b3fc5486797c23eb558e792f1b78456d4e53e08464e26649949166"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ab115ff4f3e8bf06408f339abe27d41b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 4623302,
            "upload_time": "2024-04-02T16:21:46",
            "upload_time_iso_8601": "2024-04-02T16:21:46.229316Z",
            "url": "https://files.pythonhosted.org/packages/07/63/6e6cb3b5d43e21f1a382d524102d35cfe1dfb8163a954f0d0061ad205abc/pygm-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6a9f74e55ec126b1aaac1d710c342efb09ccc4b965bbab3f1b580f21b4b1d10d",
                "md5": "92b9069c89ab5dd916a44ce337fe57d8",
                "sha256": "da22e2fc9efc93f347fc46813989618456569c8d94b10e03f4b29d9884ddb237"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "92b9069c89ab5dd916a44ce337fe57d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 5086857,
            "upload_time": "2024-04-02T16:21:48",
            "upload_time_iso_8601": "2024-04-02T16:21:48.668049Z",
            "url": "https://files.pythonhosted.org/packages/6a/9f/74e55ec126b1aaac1d710c342efb09ccc4b965bbab3f1b580f21b4b1d10d/pygm-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b7c71817f65ea973b60d7b666c1e7e1338c730171f84764f696993187655d51d",
                "md5": "a426fee97e9a65dcbccb6d463632f89d",
                "sha256": "ab26bfdbedf7a7a91bbc10f90468315c1b60dc4dd15874c0f59c8c9195c767fc"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a426fee97e9a65dcbccb6d463632f89d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 1609827,
            "upload_time": "2024-04-02T16:21:50",
            "upload_time_iso_8601": "2024-04-02T16:21:50.584507Z",
            "url": "https://files.pythonhosted.org/packages/b7/c7/1817f65ea973b60d7b666c1e7e1338c730171f84764f696993187655d51d/pygm-1.0.1-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "119c144c1b6f24e1c92eb996a2ba23905832ebf348232fc726eb23f07d9faeca",
                "md5": "28dcb911019ff35ecf9200659a3c6f8f",
                "sha256": "3aa929a4971febe3ded4c8221d0c3986622eaa4f18d7f71cb7bf2cd1c2b5f2ef"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "28dcb911019ff35ecf9200659a3c6f8f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 4700787,
            "upload_time": "2024-04-02T16:21:52",
            "upload_time_iso_8601": "2024-04-02T16:21:52.605964Z",
            "url": "https://files.pythonhosted.org/packages/11/9c/144c1b6f24e1c92eb996a2ba23905832ebf348232fc726eb23f07d9faeca/pygm-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fa0ea4bdcf7bd5479d05ef95ac04bc84ceb35febdc8542d034e773cc8988fef9",
                "md5": "c3587044029d774221ebf5c1cb2dd372",
                "sha256": "f8916dd43b5a88535058c4737524dee44aa5e6d0913ce921e706819db8aac5f6"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp312-cp312-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c3587044029d774221ebf5c1cb2dd372",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 5150523,
            "upload_time": "2024-04-02T16:21:54",
            "upload_time_iso_8601": "2024-04-02T16:21:54.308785Z",
            "url": "https://files.pythonhosted.org/packages/fa/0e/a4bdcf7bd5479d05ef95ac04bc84ceb35febdc8542d034e773cc8988fef9/pygm-1.0.1-cp312-cp312-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "86504517a375814007aab68453b8821d7cf606a89d6e084e086d143f54ec5c40",
                "md5": "9063cfd066f28e4eeb96894e33ff6417",
                "sha256": "d380c3f4ccf74a42c44b7139d27e4fcab12f9b57da4b41358fcd7321c6a486f4"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp36-cp36m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9063cfd066f28e4eeb96894e33ff6417",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": null,
            "size": 1643634,
            "upload_time": "2024-04-02T16:21:56",
            "upload_time_iso_8601": "2024-04-02T16:21:56.513788Z",
            "url": "https://files.pythonhosted.org/packages/86/50/4517a375814007aab68453b8821d7cf606a89d6e084e086d143f54ec5c40/pygm-1.0.1-cp36-cp36m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a154f30e3ee11f7631542bd5dbee702a3286f585a41099c72923a2ff01a89d16",
                "md5": "f78074e940c15877f698f0da58fa1251",
                "sha256": "95abd94aa18784897404deacdea6c15b2dfc963434ef1c4096deedf64ac1a182"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f78074e940c15877f698f0da58fa1251",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": null,
            "size": 4815957,
            "upload_time": "2024-04-02T16:21:57",
            "upload_time_iso_8601": "2024-04-02T16:21:57.963460Z",
            "url": "https://files.pythonhosted.org/packages/a1/54/f30e3ee11f7631542bd5dbee702a3286f585a41099c72923a2ff01a89d16/pygm-1.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4b02a31e6b900d3951ef7088e2dec8d3a54f51ce9b6975938dd6df9323b27ae6",
                "md5": "910ecca5f70fda06a28ed977aba5d11a",
                "sha256": "0d239efa148d4caaa1dfd96fa7962a6f7bcf8976d97c334c6c74f0d70b1bfdf4"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "910ecca5f70fda06a28ed977aba5d11a",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": null,
            "size": 5305669,
            "upload_time": "2024-04-02T16:22:00",
            "upload_time_iso_8601": "2024-04-02T16:22:00.180295Z",
            "url": "https://files.pythonhosted.org/packages/4b/02/a31e6b900d3951ef7088e2dec8d3a54f51ce9b6975938dd6df9323b27ae6/pygm-1.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8cb379732b09f42102d528ae5db927324f11370ed57a69ef9ee1d2c1904a9608",
                "md5": "271e816a54e0f1e07b97aecd4557bfd0",
                "sha256": "4d070c0c5a1b284e74bdc3eab88783dcd237ddbfb43f719a241abfe27ddfae14"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "271e816a54e0f1e07b97aecd4557bfd0",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 1642743,
            "upload_time": "2024-04-02T16:22:01",
            "upload_time_iso_8601": "2024-04-02T16:22:01.849146Z",
            "url": "https://files.pythonhosted.org/packages/8c/b3/79732b09f42102d528ae5db927324f11370ed57a69ef9ee1d2c1904a9608/pygm-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1cf2daedeeaa0495f0ce4762efa55f11e50295f6b91e3ed20cb285cb91acbfda",
                "md5": "c5ef1f75f7ba75eb708e3bf8867b8cb2",
                "sha256": "12bbfa3799f0ac2a2f162ae8c1acb4c30938c42c68d0ae0fac00ab1d336e0ace"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c5ef1f75f7ba75eb708e3bf8867b8cb2",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 4813892,
            "upload_time": "2024-04-02T16:22:03",
            "upload_time_iso_8601": "2024-04-02T16:22:03.485123Z",
            "url": "https://files.pythonhosted.org/packages/1c/f2/daedeeaa0495f0ce4762efa55f11e50295f6b91e3ed20cb285cb91acbfda/pygm-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "10bf2df844bd0146d62c94e79c8ea802b1ee356982deb3a6bc90a22c6e5e029d",
                "md5": "7873630d3590765c8daf96677e6e572a",
                "sha256": "0aaedb8e6bca344f5d8a9334db9d14ab39a601d68cefc22230f0c12a903d2188"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7873630d3590765c8daf96677e6e572a",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": null,
            "size": 5306279,
            "upload_time": "2024-04-02T16:22:05",
            "upload_time_iso_8601": "2024-04-02T16:22:05.040962Z",
            "url": "https://files.pythonhosted.org/packages/10/bf/2df844bd0146d62c94e79c8ea802b1ee356982deb3a6bc90a22c6e5e029d/pygm-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "388f2cf1e4c091838b3c597d4a3a4adf74c804a8b29f31c765c9ddb03ca8e389",
                "md5": "9e7899c9a45db23bdaccdeca6bd17909",
                "sha256": "5d225d20aaa14e59cac14151c525ffef3cd98f46a511ba330fbab9247591836e"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9e7899c9a45db23bdaccdeca6bd17909",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 1608572,
            "upload_time": "2024-04-02T16:22:07",
            "upload_time_iso_8601": "2024-04-02T16:22:07.206169Z",
            "url": "https://files.pythonhosted.org/packages/38/8f/2cf1e4c091838b3c597d4a3a4adf74c804a8b29f31c765c9ddb03ca8e389/pygm-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a41fb7bdffafd0b78937298cd481f23c937e690eb75e31ee0c57262a2eb89d7b",
                "md5": "4271a5db0e594e0b137ba34fff82e32d",
                "sha256": "da117ee43fd750fc298d301ef14a044dbf4872dd41ba5aeeb85d236ee23af218"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4271a5db0e594e0b137ba34fff82e32d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 4617383,
            "upload_time": "2024-04-02T16:22:09",
            "upload_time_iso_8601": "2024-04-02T16:22:09.265178Z",
            "url": "https://files.pythonhosted.org/packages/a4/1f/b7bdffafd0b78937298cd481f23c937e690eb75e31ee0c57262a2eb89d7b/pygm-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8050e7d06a9f506f8a3351aba47fe1be2f31e6c5148b1bb57dd35982c2c7dc94",
                "md5": "4778ddb89223f9a8de96a1a16bdb1344",
                "sha256": "5b73a5baa2340cceb0dfeadc564c0e986bdb97685d66888bd6733b9a55269062"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4778ddb89223f9a8de96a1a16bdb1344",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": null,
            "size": 5106688,
            "upload_time": "2024-04-02T16:22:11",
            "upload_time_iso_8601": "2024-04-02T16:22:11.551159Z",
            "url": "https://files.pythonhosted.org/packages/80/50/e7d06a9f506f8a3351aba47fe1be2f31e6c5148b1bb57dd35982c2c7dc94/pygm-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "88cd4cca3eb6ffccf0d14a6ee82eb544a930acee72dc6ac1f753bf210853d5a1",
                "md5": "9623f86613a355707ee9eb5eb75c7070",
                "sha256": "5f04cfa63cb45a6664e8aef95c5bf31ed2975856e2a51d4be50d5e1038b7b58c"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9623f86613a355707ee9eb5eb75c7070",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1608131,
            "upload_time": "2024-04-02T16:22:13",
            "upload_time_iso_8601": "2024-04-02T16:22:13.081926Z",
            "url": "https://files.pythonhosted.org/packages/88/cd/4cca3eb6ffccf0d14a6ee82eb544a930acee72dc6ac1f753bf210853d5a1/pygm-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fc115216d0ec21097195b1cd36223093c79d1b68e072bde2af920aee130ad744",
                "md5": "0fd11e4a16c156b4a1c4fff77adf33e6",
                "sha256": "3f03419add86af192e1d7626bf6692b211776a5e8cfc089fe558367da3dec453"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0fd11e4a16c156b4a1c4fff77adf33e6",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 4597189,
            "upload_time": "2024-04-02T16:22:14",
            "upload_time_iso_8601": "2024-04-02T16:22:14.566443Z",
            "url": "https://files.pythonhosted.org/packages/fc/11/5216d0ec21097195b1cd36223093c79d1b68e072bde2af920aee130ad744/pygm-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1f603ff91708d5c0a0d9dd52d991bd20666c3ef71a74212e51a22d799ec18e3a",
                "md5": "dd20e7d16092dc97963e431756c8e5a4",
                "sha256": "c9d212aaddaee844dae6fe74c718bea139097193087ce957ee4ff50651c9512b"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dd20e7d16092dc97963e431756c8e5a4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 5079033,
            "upload_time": "2024-04-02T16:22:16",
            "upload_time_iso_8601": "2024-04-02T16:22:16.196511Z",
            "url": "https://files.pythonhosted.org/packages/1f/60/3ff91708d5c0a0d9dd52d991bd20666c3ef71a74212e51a22d799ec18e3a/pygm-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5bc19f868f4e18efda793cdc03b3ce49809a1d513c6b7b79cfce78d5a62c6df6",
                "md5": "0e4a356d294edaa5826a96c7bfe31627",
                "sha256": "ffa552710c39edd80f32903814b42a77d82faea1ebbf40115f425a5f84f86cde"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0e4a356d294edaa5826a96c7bfe31627",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": null,
            "size": 1570001,
            "upload_time": "2024-04-02T16:22:17",
            "upload_time_iso_8601": "2024-04-02T16:22:17.703007Z",
            "url": "https://files.pythonhosted.org/packages/5b/c1/9f868f4e18efda793cdc03b3ce49809a1d513c6b7b79cfce78d5a62c6df6/pygm-1.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5bd33f97848752e2549334b7c76e1e914eb5cafbb0fd3a47de2aa078b34aff0f",
                "md5": "1c4449d3076d8718e4a243c1077d81e4",
                "sha256": "be5158f5bf1e3e5f310515e211fef81a2acce65974286d9222bff5b1b564022f"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1c4449d3076d8718e4a243c1077d81e4",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": null,
            "size": 367320,
            "upload_time": "2024-04-02T16:22:19",
            "upload_time_iso_8601": "2024-04-02T16:22:19.044644Z",
            "url": "https://files.pythonhosted.org/packages/5b/d3/3f97848752e2549334b7c76e1e914eb5cafbb0fd3a47de2aa078b34aff0f/pygm-1.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2d1e0b8659c821ef2250653b82ccbf4f62f969c05b867ca90a916df032cdcafb",
                "md5": "016eee6fb53ad5fecf6c6b1998429ace",
                "sha256": "57486ad757f0a969128a6e00ce3fe577e4f89a751a11400dc8a2fbcc5fb78f2a"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "016eee6fb53ad5fecf6c6b1998429ace",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": null,
            "size": 1569356,
            "upload_time": "2024-04-02T16:22:20",
            "upload_time_iso_8601": "2024-04-02T16:22:20.240436Z",
            "url": "https://files.pythonhosted.org/packages/2d/1e/0b8659c821ef2250653b82ccbf4f62f969c05b867ca90a916df032cdcafb/pygm-1.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5d5c9b3145c8dad6d0219d6692e3c57f1fa1fc9abc04c8e9b8043aac12b0f53a",
                "md5": "4769163c1ed391c834d25124cb268764",
                "sha256": "0b115e475e30085ca11b610bd236a2b79d5cc3d700a65099cb6d5e21d2f9470d"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4769163c1ed391c834d25124cb268764",
            "packagetype": "bdist_wheel",
            "python_version": "pp37",
            "requires_python": null,
            "size": 367530,
            "upload_time": "2024-04-02T16:22:22",
            "upload_time_iso_8601": "2024-04-02T16:22:22.138202Z",
            "url": "https://files.pythonhosted.org/packages/5d/5c/9b3145c8dad6d0219d6692e3c57f1fa1fc9abc04c8e9b8043aac12b0f53a/pygm-1.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c3f7c12ed5b75a7b9644ec3a15d45b0223ad0f5c35dadb5ec762d111f7a1c4ec",
                "md5": "75438f544746747ed10aeec75b4cfb90",
                "sha256": "5d96aff0cb4ce84a88a3238d6192cd15d4f1a63b8e4d06694a760b0189a6f839"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "75438f544746747ed10aeec75b4cfb90",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": null,
            "size": 1569437,
            "upload_time": "2024-04-02T16:22:23",
            "upload_time_iso_8601": "2024-04-02T16:22:23.383749Z",
            "url": "https://files.pythonhosted.org/packages/c3/f7/c12ed5b75a7b9644ec3a15d45b0223ad0f5c35dadb5ec762d111f7a1c4ec/pygm-1.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c8ecba7b7cdf52dc087b780c116d3fc4f6650b45997ac1f2efe690dc0f1cf00c",
                "md5": "1888882debcf6e464e9b8865361e2435",
                "sha256": "d2bd4a07745e03d10e4705eda1bcd58f22b6c9bb9f4f4a44081e6fbf08aee83f"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1888882debcf6e464e9b8865361e2435",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": null,
            "size": 367193,
            "upload_time": "2024-04-02T16:22:25",
            "upload_time_iso_8601": "2024-04-02T16:22:25.331687Z",
            "url": "https://files.pythonhosted.org/packages/c8/ec/ba7b7cdf52dc087b780c116d3fc4f6650b45997ac1f2efe690dc0f1cf00c/pygm-1.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8de8e22de084575e00a70c43371cc404692e75c4a94e6946e3356cf75a145707",
                "md5": "115bcc2ae9f2d1370bcb1247b0150139",
                "sha256": "bdb51c5feaa29eba0716ddaf8d861875ffa1db873d50304633795cac95c0efc2"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "115bcc2ae9f2d1370bcb1247b0150139",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": null,
            "size": 1569109,
            "upload_time": "2024-04-02T16:22:26",
            "upload_time_iso_8601": "2024-04-02T16:22:26.710372Z",
            "url": "https://files.pythonhosted.org/packages/8d/e8/e22de084575e00a70c43371cc404692e75c4a94e6946e3356cf75a145707/pygm-1.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e0fddb86d45b1021744d5f01f6ac9df6348db7d875146332dff12f0e7cd57708",
                "md5": "562f36993da793ce4dea6c7a2d39a7ac",
                "sha256": "b75202b3f3bddd1adb6901bc7b41dc5616143b22d203ccc4a52febe178939564"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "562f36993da793ce4dea6c7a2d39a7ac",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": null,
            "size": 366692,
            "upload_time": "2024-04-02T16:22:28",
            "upload_time_iso_8601": "2024-04-02T16:22:28.075559Z",
            "url": "https://files.pythonhosted.org/packages/e0/fd/db86d45b1021744d5f01f6ac9df6348db7d875146332dff12f0e7cd57708/pygm-1.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7059f86d019d9b427b7a03a98b677abc59f7d8c44e2a97e1458e3f2133d52513",
                "md5": "457db79a19ed321e9073b0a5d73f5771",
                "sha256": "ed103cbc342f8f6621994888017cda9d909ec5c84ac153d318318f12d35d070e"
            },
            "downloads": -1,
            "filename": "pygm-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "457db79a19ed321e9073b0a5d73f5771",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 29046,
            "upload_time": "2024-04-02T16:22:29",
            "upload_time_iso_8601": "2024-04-02T16:22:29.639269Z",
            "url": "https://files.pythonhosted.org/packages/70/59/f86d019d9b427b7a03a98b677abc59f7d8c44e2a97e1458e3f2133d52513/pygm-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-02 16:22:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "gvinciguerra",
    "github_project": "PyGM",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "pygm"
}
        
Elapsed time: 0.21706s