hstrat


Namehstrat JSON
Version 1.18.0 PyPI version JSON
download
home_pagehttps://github.com/mmore500/hstrat
Summaryhstrat enables phylogenetic inference on distributed digital evolution populations
upload_time2025-02-02 03:36:55
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT license
keywords hstrat
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![hstrat wordmark](docs/assets/hstrat-wordmark.png)

[
![PyPi](https://img.shields.io/pypi/v/hstrat.svg)
](https://pypi.python.org/pypi/hstrat)
[
![codecov](https://codecov.io/gh/mmore500/hstrat/branch/master/graph/badge.svg?token=JwMfFOpBBD)
](https://codecov.io/gh/mmore500/hstrat)
[
![Codacy Badge](https://app.codacy.com/project/badge/Grade/9ab14d415aa9458d97b4cf760b95f874)
](https://www.codacy.com/gh/mmore500/hstrat/dashboard)
[
![CI](https://github.com/mmore500/hstrat/actions/workflows/ci.yaml/badge.svg)
](https://github.com/mmore500/hstrat/actions)
[
![Read The Docs](https://readthedocs.org/projects/hstrat/badge/?version=latest)
](https://hstrat.readthedocs.io/en/latest/?badge=latest)
[
![GitHub stars](https://img.shields.io/github/stars/mmore500/hstrat.svg?style=round-square&logo=github&label=Stars&logoColor=white)](https://github.com/mmore500/hstrat)
[
![Zenodo](https://zenodo.org/badge/464531144.svg)
](https://zenodo.org/badge/latestdoi/464531144)
[![JOSS](https://joss.theoj.org/papers/10.21105/joss.04866/status.svg)](https://doi.org/10.21105/joss.04866)

_hstrat_ enables phylogenetic inference on distributed digital evolution populations

- Free software: MIT license
- Documentation: <https://hstrat.readthedocs.io>
- Repository: <https://github.com/mmore500/hstrat>

## Install

`python3 -m pip install hstrat`

A containerized release of `hstrat` is available via <ghcr.io>

```bash
singularity exec docker://ghcr.io/mmore500/hstrat:v1.18.0 python3 -m hstrat --help
```

## Features

_hstrat_ serves to enable **robust, efficient extraction of evolutionary history** from evolutionary simulations where centralized, direct phylogenetic tracking is not feasible.
Namely, in large-scale, **decentralized parallel/distributed evolutionary simulations**, where agents' evolutionary lineages migrate among many cooperating processors over the course of simulation.

_hstrat_ can

- accurately estimate **time since MRCA** among two or several digital agents, even for uneven branch lengths
- **reconstruct phylogenetic trees** for entire populations of evolving digital agents
- **serialize genome annotations** to/from text and binary formats
- provide **low-footprint** genome annotations (e.g., reasonably as low as **64 bits** each)
- be directly configured to satisfy **memory use limits** and/or **inference accuracy requirements**

_hstrat operates just as well in single-processor simulation, but direct phylogenetic tracking using a tool like [phylotrackpy](https://github.com/emilydolson/phylotrackpy/) should usually be preferred in such cases due to its capability for perfect record-keeping given centralized global simulation observability._

## Example Usage

This code briefly demonstrates,

1.  initialization of a population of `HereditaryStratigraphicColumn` of objects,
2.  generation-to-generation transmission of `HereditaryStratigraphicColumn` objects with simple synchronous turnover, and then
3.  reconstruction of phylogenetic history from the final population of `HereditaryStratigraphicColumn` objects.

```python3
from random import choice as rchoice
import alifedata_phyloinformatics_convert as apc
from hstrat import hstrat; print(f"{hstrat.__version__=}")  # when last ran?
from hstrat._auxiliary_lib import seed_random; seed_random(1)  # reproducibility

# initialize a small population of hstrat instrumentation
# (in full simulations, each column would be attached to an individual genome)
population = [hstrat.HereditaryStratigraphicColumn() for __ in range(5)]

# evolve population for 40 generations under drift
for _generation in range(40):
    population = [rchoice(population).CloneDescendant() for __ in population]

# reconstruct estimate of phylogenetic history
alifestd_df = hstrat.build_tree(population, version_pin=hstrat.__version__)
tree_ascii = apc.RosettaTree(alifestd_df).as_dendropy.as_ascii_plot(width=20)
print(tree_ascii)
```

```
hstrat.__version__='1.8.8'
              /--- 1
          /---+
       /--+   \--- 3
       |  |
   /---+  \------- 2
   |   |
+--+   \---------- 0
   |
   \-------------- 4
```

In [actual usage](https://hstrat.readthedocs.io/en/latest/demo-ping.html), each _hstrat_ column would be bundled with underlying genetic material of interest in the simulation --- entire genomes or, in systems with sexual recombination, individual genes.
The _hstrat_ columns are designed to operate as a neutral genetic annotation, enhancing observability of the simulation but not affecting its outcome.

## How it Works

In order to enable phylogenetic inference over fully-distributed evolutionary simulation, hereditary stratigraphy adopts a paradigm akin to phylogenetic work in natural history/biology.
In these fields, phylogenetic history is inferred through comparisons among genetic material of extant organisms, with --- in broad terms --- phylogenetic relatedness established through the extent of genetic similarity between organisms.
Phylogenetic tracking through _hstrat_, similarly, is achieved through analysis of similarity/dissimilarity among genetic material sampled over populations of interest.

Rather than random mutation as with natural genetic material, however, genetic material used by _hstrat_ is structured through _hereditary stratigraphy_.
This methodology, described fully in our documentation, provides strong guarantees on phylogenetic inferential power, minimizes memory footprint, and allows efficient reconstruction procedures.

See [here](https://hstrat.readthedocs.io/en/latest/mechanism.html) for more detail on underlying hereditary stratigraphy methodology.

## Getting Started

Refer to our documentation for a [quickstart guide](https://hstrat.readthedocs.io/en/latest/quickstart.html) and an [annotated end-to-end usage example](https://hstrat.readthedocs.io/en/latest/demo-ping.html).

The `examples/` folder provides extensive usage examples, including

- incorporation of hstrat annotations into a custom genome class,
- automatic stratum retention policy parameterization,
- pairwise and population-level phylogenetic inference, and
- phylogenetic tree reconstruction.

Interested users can find an explanation of how hereditary stratigraphy methodology implemented by _hstrat_ works "under the hood," information on project-specific _hstrat_ configuration, and full API listing for the _hstrat_ package in [the documentation](https://hstrat.readthedocs.io/).

## Citing

If _hstrat_ software or hereditary stratigraphy methodology contributes to a scholarly work, please cite it according to references provided [here](https://hstrat.readthedocs.io/en/latest/citing.html).
We would love to list your project using _hstrat_ in our documentation, see more [here](https://hstrat.readthedocs.io/en/latest/projects.html).

## Credits

This package was created with Cookiecutter and the `audreyr/cookiecutter-pypackage` project template.

## hcat

![hcat](docs/assets/hcat-banner.png)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/mmore500/hstrat",
    "name": "hstrat",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "hstrat",
    "author": null,
    "author_email": "Matthew Andres Moreno <m.more500@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/61/7b/234b8b7fa31506247b17cbbde7aada1d8520abccd55f47b0b0a0e3268e95/hstrat-1.18.0.tar.gz",
    "platform": null,
    "description": "![hstrat wordmark](docs/assets/hstrat-wordmark.png)\n\n[\n![PyPi](https://img.shields.io/pypi/v/hstrat.svg)\n](https://pypi.python.org/pypi/hstrat)\n[\n![codecov](https://codecov.io/gh/mmore500/hstrat/branch/master/graph/badge.svg?token=JwMfFOpBBD)\n](https://codecov.io/gh/mmore500/hstrat)\n[\n![Codacy Badge](https://app.codacy.com/project/badge/Grade/9ab14d415aa9458d97b4cf760b95f874)\n](https://www.codacy.com/gh/mmore500/hstrat/dashboard)\n[\n![CI](https://github.com/mmore500/hstrat/actions/workflows/ci.yaml/badge.svg)\n](https://github.com/mmore500/hstrat/actions)\n[\n![Read The Docs](https://readthedocs.org/projects/hstrat/badge/?version=latest)\n](https://hstrat.readthedocs.io/en/latest/?badge=latest)\n[\n![GitHub stars](https://img.shields.io/github/stars/mmore500/hstrat.svg?style=round-square&logo=github&label=Stars&logoColor=white)](https://github.com/mmore500/hstrat)\n[\n![Zenodo](https://zenodo.org/badge/464531144.svg)\n](https://zenodo.org/badge/latestdoi/464531144)\n[![JOSS](https://joss.theoj.org/papers/10.21105/joss.04866/status.svg)](https://doi.org/10.21105/joss.04866)\n\n_hstrat_ enables phylogenetic inference on distributed digital evolution populations\n\n- Free software: MIT license\n- Documentation: <https://hstrat.readthedocs.io>\n- Repository: <https://github.com/mmore500/hstrat>\n\n## Install\n\n`python3 -m pip install hstrat`\n\nA containerized release of `hstrat` is available via <ghcr.io>\n\n```bash\nsingularity exec docker://ghcr.io/mmore500/hstrat:v1.18.0 python3 -m hstrat --help\n```\n\n## Features\n\n_hstrat_ serves to enable **robust, efficient extraction of evolutionary history** from evolutionary simulations where centralized, direct phylogenetic tracking is not feasible.\nNamely, in large-scale, **decentralized parallel/distributed evolutionary simulations**, where agents' evolutionary lineages migrate among many cooperating processors over the course of simulation.\n\n_hstrat_ can\n\n- accurately estimate **time since MRCA** among two or several digital agents, even for uneven branch lengths\n- **reconstruct phylogenetic trees** for entire populations of evolving digital agents\n- **serialize genome annotations** to/from text and binary formats\n- provide **low-footprint** genome annotations (e.g., reasonably as low as **64 bits** each)\n- be directly configured to satisfy **memory use limits** and/or **inference accuracy requirements**\n\n_hstrat operates just as well in single-processor simulation, but direct phylogenetic tracking using a tool like [phylotrackpy](https://github.com/emilydolson/phylotrackpy/) should usually be preferred in such cases due to its capability for perfect record-keeping given centralized global simulation observability._\n\n## Example Usage\n\nThis code briefly demonstrates,\n\n1.  initialization of a population of `HereditaryStratigraphicColumn` of objects,\n2.  generation-to-generation transmission of `HereditaryStratigraphicColumn` objects with simple synchronous turnover, and then\n3.  reconstruction of phylogenetic history from the final population of `HereditaryStratigraphicColumn` objects.\n\n```python3\nfrom random import choice as rchoice\nimport alifedata_phyloinformatics_convert as apc\nfrom hstrat import hstrat; print(f\"{hstrat.__version__=}\")  # when last ran?\nfrom hstrat._auxiliary_lib import seed_random; seed_random(1)  # reproducibility\n\n# initialize a small population of hstrat instrumentation\n# (in full simulations, each column would be attached to an individual genome)\npopulation = [hstrat.HereditaryStratigraphicColumn() for __ in range(5)]\n\n# evolve population for 40 generations under drift\nfor _generation in range(40):\n    population = [rchoice(population).CloneDescendant() for __ in population]\n\n# reconstruct estimate of phylogenetic history\nalifestd_df = hstrat.build_tree(population, version_pin=hstrat.__version__)\ntree_ascii = apc.RosettaTree(alifestd_df).as_dendropy.as_ascii_plot(width=20)\nprint(tree_ascii)\n```\n\n```\nhstrat.__version__='1.8.8'\n              /--- 1\n          /---+\n       /--+   \\--- 3\n       |  |\n   /---+  \\------- 2\n   |   |\n+--+   \\---------- 0\n   |\n   \\-------------- 4\n```\n\nIn [actual usage](https://hstrat.readthedocs.io/en/latest/demo-ping.html), each _hstrat_ column would be bundled with underlying genetic material of interest in the simulation --- entire genomes or, in systems with sexual recombination, individual genes.\nThe _hstrat_ columns are designed to operate as a neutral genetic annotation, enhancing observability of the simulation but not affecting its outcome.\n\n## How it Works\n\nIn order to enable phylogenetic inference over fully-distributed evolutionary simulation, hereditary stratigraphy adopts a paradigm akin to phylogenetic work in natural history/biology.\nIn these fields, phylogenetic history is inferred through comparisons among genetic material of extant organisms, with --- in broad terms --- phylogenetic relatedness established through the extent of genetic similarity between organisms.\nPhylogenetic tracking through _hstrat_, similarly, is achieved through analysis of similarity/dissimilarity among genetic material sampled over populations of interest.\n\nRather than random mutation as with natural genetic material, however, genetic material used by _hstrat_ is structured through _hereditary stratigraphy_.\nThis methodology, described fully in our documentation, provides strong guarantees on phylogenetic inferential power, minimizes memory footprint, and allows efficient reconstruction procedures.\n\nSee [here](https://hstrat.readthedocs.io/en/latest/mechanism.html) for more detail on underlying hereditary stratigraphy methodology.\n\n## Getting Started\n\nRefer to our documentation for a [quickstart guide](https://hstrat.readthedocs.io/en/latest/quickstart.html) and an [annotated end-to-end usage example](https://hstrat.readthedocs.io/en/latest/demo-ping.html).\n\nThe `examples/` folder provides extensive usage examples, including\n\n- incorporation of hstrat annotations into a custom genome class,\n- automatic stratum retention policy parameterization,\n- pairwise and population-level phylogenetic inference, and\n- phylogenetic tree reconstruction.\n\nInterested users can find an explanation of how hereditary stratigraphy methodology implemented by _hstrat_ works \"under the hood,\" information on project-specific _hstrat_ configuration, and full API listing for the _hstrat_ package in [the documentation](https://hstrat.readthedocs.io/).\n\n## Citing\n\nIf _hstrat_ software or hereditary stratigraphy methodology contributes to a scholarly work, please cite it according to references provided [here](https://hstrat.readthedocs.io/en/latest/citing.html).\nWe would love to list your project using _hstrat_ in our documentation, see more [here](https://hstrat.readthedocs.io/en/latest/projects.html).\n\n## Credits\n\nThis package was created with Cookiecutter and the `audreyr/cookiecutter-pypackage` project template.\n\n## hcat\n\n![hcat](docs/assets/hcat-banner.png)\n",
    "bugtrack_url": null,
    "license": "MIT license",
    "summary": "hstrat enables phylogenetic inference on distributed digital evolution populations",
    "version": "1.18.0",
    "project_urls": {
        "Documentation": "https://hstrat.readthedocs.io",
        "Homepage": "https://github.com/mmore500/hstrat",
        "Repository": "https://github.com/mmore500/hstrat"
    },
    "split_keywords": [
        "hstrat"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d27c5be874c548518b0694b3d3a8390445fbe769ce487bdcba86d66b5664bd89",
                "md5": "2991159afdd88769e79ac2783b1572a9",
                "sha256": "94cbb424683292cb4509b49b122269d61cec425e726e7db6bec5a711c647405e"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "2991159afdd88769e79ac2783b1572a9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 766582,
            "upload_time": "2025-02-02T03:35:52",
            "upload_time_iso_8601": "2025-02-02T03:35:52.643269Z",
            "url": "https://files.pythonhosted.org/packages/d2/7c/5be874c548518b0694b3d3a8390445fbe769ce487bdcba86d66b5664bd89/hstrat-1.18.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "73681caed92bba405fad965c1a97cd26999def70fc80a56c7b20fe22a82f5142",
                "md5": "16cd2f6ca4cdb4d7bd5f3f1675fede2d",
                "sha256": "3dff7e10c368a8e25fab24e8a8a2a497f154224ec606702f6ba41b597e4a252f"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "16cd2f6ca4cdb4d7bd5f3f1675fede2d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 810866,
            "upload_time": "2025-02-02T03:35:55",
            "upload_time_iso_8601": "2025-02-02T03:35:55.764987Z",
            "url": "https://files.pythonhosted.org/packages/73/68/1caed92bba405fad965c1a97cd26999def70fc80a56c7b20fe22a82f5142/hstrat-1.18.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b2e08ef56a5ce79c1e08f94582e4c80437a6c9458928dc5b878c78787366e54f",
                "md5": "83a4474153ed1aa274595d5e2f51f3a8",
                "sha256": "06a60fc6d9b06a130cc89d48348b574354e58a2b730858c428c1dd9879c776bf"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "83a4474153ed1aa274595d5e2f51f3a8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 800023,
            "upload_time": "2025-02-02T03:35:58",
            "upload_time_iso_8601": "2025-02-02T03:35:58.117002Z",
            "url": "https://files.pythonhosted.org/packages/b2/e0/8ef56a5ce79c1e08f94582e4c80437a6c9458928dc5b878c78787366e54f/hstrat-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "411abc060d017429e6d8eb9be8fb70077fa32b9580c13b78e472b4e02b8cb81e",
                "md5": "69963c9eba58943c162aa929f20414ee",
                "sha256": "3ae5f80682f8337a27ea75b19eeecb80303c9bed70b6c5b96f2d4bfb4ad40e8b"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp310-cp310-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "69963c9eba58943c162aa929f20414ee",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 1872836,
            "upload_time": "2025-02-02T03:36:00",
            "upload_time_iso_8601": "2025-02-02T03:36:00.534528Z",
            "url": "https://files.pythonhosted.org/packages/41/1a/bc060d017429e6d8eb9be8fb70077fa32b9580c13b78e472b4e02b8cb81e/hstrat-1.18.0-cp310-cp310-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "75822b3b0aa030e60256ab9e76af4d4e85656e352125887d596b1f3da3dc1ac2",
                "md5": "ec7c37e6ed5f3b4a393513e1c3383b41",
                "sha256": "c42dd71b3d18af0ee7940cccfa09bc8740bf01ff7b82e51fccd80ef179a4e93e"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ec7c37e6ed5f3b4a393513e1c3383b41",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 1773122,
            "upload_time": "2025-02-02T03:36:03",
            "upload_time_iso_8601": "2025-02-02T03:36:03.042177Z",
            "url": "https://files.pythonhosted.org/packages/75/82/2b3b0aa030e60256ab9e76af4d4e85656e352125887d596b1f3da3dc1ac2/hstrat-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c292e9289fa822943b59b8b76fb8a9d4ff2bf2b4cc76403fefa698de3f1beea7",
                "md5": "e6bcb0b5eed43c76f02c0fba02b2d413",
                "sha256": "5f483cdedff996ab5b9416a157ebd420305816b48dbf72a6ca2be2971d8982e5"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e6bcb0b5eed43c76f02c0fba02b2d413",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 751612,
            "upload_time": "2025-02-02T03:36:05",
            "upload_time_iso_8601": "2025-02-02T03:36:05.456073Z",
            "url": "https://files.pythonhosted.org/packages/c2/92/e9289fa822943b59b8b76fb8a9d4ff2bf2b4cc76403fefa698de3f1beea7/hstrat-1.18.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9063feaea620f559ab1a9b9321ba410d31ea19ac9273ca8b12528e7630e6d577",
                "md5": "98311e540e31240444a03353a5c66566",
                "sha256": "25d213da96bea241fbc5742b83dc1574faee8b2887d4e340b8d1523a1dc9d7b7"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "98311e540e31240444a03353a5c66566",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 768048,
            "upload_time": "2025-02-02T03:36:07",
            "upload_time_iso_8601": "2025-02-02T03:36:07.734817Z",
            "url": "https://files.pythonhosted.org/packages/90/63/feaea620f559ab1a9b9321ba410d31ea19ac9273ca8b12528e7630e6d577/hstrat-1.18.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "47fc17902c5d793e47e08dadc60fa0ccd73eeecf5b71dd21996200f86a9fe895",
                "md5": "814fad89b9d2f15bd9a5301631c59dbf",
                "sha256": "e5540b91564ec0feb969f658e373634a07e63e9e68521fe39cc0e9fcb3b52c88"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "814fad89b9d2f15bd9a5301631c59dbf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 811494,
            "upload_time": "2025-02-02T03:36:09",
            "upload_time_iso_8601": "2025-02-02T03:36:09.901063Z",
            "url": "https://files.pythonhosted.org/packages/47/fc/17902c5d793e47e08dadc60fa0ccd73eeecf5b71dd21996200f86a9fe895/hstrat-1.18.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ed9b9e079bcc9ce52779c191631a1dd082335c091fb19acaecae8dce3b262f5f",
                "md5": "507eec5abc9a6c98158486eb3bbcc4d3",
                "sha256": "6abc467e66770fe6e299f9f8d9480f4f9dc4f1a855ae3f84bbeafd33b97d0d6d"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "507eec5abc9a6c98158486eb3bbcc4d3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 801116,
            "upload_time": "2025-02-02T03:36:12",
            "upload_time_iso_8601": "2025-02-02T03:36:12.424211Z",
            "url": "https://files.pythonhosted.org/packages/ed/9b/9e079bcc9ce52779c191631a1dd082335c091fb19acaecae8dce3b262f5f/hstrat-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7a7382033296850fd61f7ccc22bae1c25c1913d7e5713d5b34e2056574fc7d74",
                "md5": "b05f84012b4d1e4f769d283ebb5c8c81",
                "sha256": "103dcd594f7409fada28cab8649c95a0a5dbf1777c6b7b99a0c6c25533964a66"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp311-cp311-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "b05f84012b4d1e4f769d283ebb5c8c81",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 1873455,
            "upload_time": "2025-02-02T03:36:13",
            "upload_time_iso_8601": "2025-02-02T03:36:13.850680Z",
            "url": "https://files.pythonhosted.org/packages/7a/73/82033296850fd61f7ccc22bae1c25c1913d7e5713d5b34e2056574fc7d74/hstrat-1.18.0-cp311-cp311-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4cc9e3eb0f5d2a82cc20004a0af58fa069ad490379cabddb8c2d78dc7a7d10cc",
                "md5": "0dcb5d3f52d83aed9516d93bde73a795",
                "sha256": "9534dfb2a0c9e8ffbb31cbf8ad3e2b7f9d19ed9aca441f87351df0d24ce43943"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0dcb5d3f52d83aed9516d93bde73a795",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 1774288,
            "upload_time": "2025-02-02T03:36:16",
            "upload_time_iso_8601": "2025-02-02T03:36:16.429218Z",
            "url": "https://files.pythonhosted.org/packages/4c/c9/e3eb0f5d2a82cc20004a0af58fa069ad490379cabddb8c2d78dc7a7d10cc/hstrat-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fa88e57fef6150ca6d3ffa3823ecf844d72e8d9a83117998dae2b52790838fc2",
                "md5": "ef4fdbaab08021b5d00b4692016f6549",
                "sha256": "c9e7c18b4829f8c4cfe95fde3576291926b92e72010a3960d892dc38ba9411c8"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ef4fdbaab08021b5d00b4692016f6549",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 752693,
            "upload_time": "2025-02-02T03:36:19",
            "upload_time_iso_8601": "2025-02-02T03:36:19.264582Z",
            "url": "https://files.pythonhosted.org/packages/fa/88/e57fef6150ca6d3ffa3823ecf844d72e8d9a83117998dae2b52790838fc2/hstrat-1.18.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7669b171644fa81f0a2838bf39b6424fb4c50db9a422d43c17b810fb55fb7e1e",
                "md5": "a18d3acaa65f7c09190bad623b0695ed",
                "sha256": "4da5a57d36c0a228c3d5df311c3a81969143958a8f19aedfee47e7465d7ac851"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a18d3acaa65f7c09190bad623b0695ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 767990,
            "upload_time": "2025-02-02T03:36:20",
            "upload_time_iso_8601": "2025-02-02T03:36:20.722678Z",
            "url": "https://files.pythonhosted.org/packages/76/69/b171644fa81f0a2838bf39b6424fb4c50db9a422d43c17b810fb55fb7e1e/hstrat-1.18.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "81729449bad56c793f2b9fca00cd4941b551b13946e9d1b3b60278cc679d1f8a",
                "md5": "eac3938d31916ea0284261a804db292c",
                "sha256": "a64867e1fb84160883f8606bbf9009c7ed9b404977f5bd1e45d0e6273a3fffab"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "eac3938d31916ea0284261a804db292c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 811273,
            "upload_time": "2025-02-02T03:36:22",
            "upload_time_iso_8601": "2025-02-02T03:36:22.920519Z",
            "url": "https://files.pythonhosted.org/packages/81/72/9449bad56c793f2b9fca00cd4941b551b13946e9d1b3b60278cc679d1f8a/hstrat-1.18.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bd8009b938b38c113527d759c21c71e524941184c4c75904132189a845c800cf",
                "md5": "3b2e9b0e17dd6b45441d17b0ed0d98ee",
                "sha256": "c91b187affe0339b33d3c740c03aef8c2a75c02f0a35cc3e352fba647e59bac0"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3b2e9b0e17dd6b45441d17b0ed0d98ee",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 799939,
            "upload_time": "2025-02-02T03:36:24",
            "upload_time_iso_8601": "2025-02-02T03:36:24.325933Z",
            "url": "https://files.pythonhosted.org/packages/bd/80/09b938b38c113527d759c21c71e524941184c4c75904132189a845c800cf/hstrat-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "acb3a1285167a70560d3b7eed2f962880328cda5d4c751054dfad0fb2712f65a",
                "md5": "31b1be45ede6a8a43c201bf6fca1f1cd",
                "sha256": "d2a8dec4f29f7f3e3df9216490c30826d840ffb24d3e6c8174974e25404dd368"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp312-cp312-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "31b1be45ede6a8a43c201bf6fca1f1cd",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 1872160,
            "upload_time": "2025-02-02T03:36:27",
            "upload_time_iso_8601": "2025-02-02T03:36:27.085477Z",
            "url": "https://files.pythonhosted.org/packages/ac/b3/a1285167a70560d3b7eed2f962880328cda5d4c751054dfad0fb2712f65a/hstrat-1.18.0-cp312-cp312-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "be0d282bede2160f9283c6ad4a49faad3332d7d30e7847fce39c2b426391fca5",
                "md5": "875d1c7d94f00960ac3c8977202f1748",
                "sha256": "8a87899ee6a894c76ec945810d838a3426bdb553f1bcc1c193682e2b5d8634ec"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "875d1c7d94f00960ac3c8977202f1748",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 1773093,
            "upload_time": "2025-02-02T03:36:32",
            "upload_time_iso_8601": "2025-02-02T03:36:32.120614Z",
            "url": "https://files.pythonhosted.org/packages/be/0d/282bede2160f9283c6ad4a49faad3332d7d30e7847fce39c2b426391fca5/hstrat-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3a83c9cd61285db3bc32dbd9536a3b47e21b8954969f7b4d9a4fe2621441bb95",
                "md5": "a6a1bb217bfd98f0431899c89f93c1c5",
                "sha256": "b029ea9b55772fbbb40dd8b582aa056b863d8c1fc12c8e1cd6b65ebd46e14f7b"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a6a1bb217bfd98f0431899c89f93c1c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 752872,
            "upload_time": "2025-02-02T03:36:34",
            "upload_time_iso_8601": "2025-02-02T03:36:34.524816Z",
            "url": "https://files.pythonhosted.org/packages/3a/83/c9cd61285db3bc32dbd9536a3b47e21b8954969f7b4d9a4fe2621441bb95/hstrat-1.18.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2ccf3116a41b6d6181181af5b5dca0bb17ff6747dc55d793ecf7fa760c2e450a",
                "md5": "0eb0577b2cf584512100d0236ac113ea",
                "sha256": "a103fb465ce4beb01331898769228ac30960e3db8e631e029ae336af28e3bb2d"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "0eb0577b2cf584512100d0236ac113ea",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 768094,
            "upload_time": "2025-02-02T03:36:36",
            "upload_time_iso_8601": "2025-02-02T03:36:36.785285Z",
            "url": "https://files.pythonhosted.org/packages/2c/cf/3116a41b6d6181181af5b5dca0bb17ff6747dc55d793ecf7fa760c2e450a/hstrat-1.18.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "74ba49c4b02c50907320a50deb764f9198aab186ad908e6e03347b835b632d02",
                "md5": "22a5d8084950e9a644c9f5b32673e69a",
                "sha256": "68e2790c51839cccf6667323d09dea37a902b454d79a72387005176ec66c546a"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "22a5d8084950e9a644c9f5b32673e69a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 811226,
            "upload_time": "2025-02-02T03:36:38",
            "upload_time_iso_8601": "2025-02-02T03:36:38.303316Z",
            "url": "https://files.pythonhosted.org/packages/74/ba/49c4b02c50907320a50deb764f9198aab186ad908e6e03347b835b632d02/hstrat-1.18.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6d57b18103afbcc4563adab7483a85b04b3882b31ab784b70d6b663f3f7e960e",
                "md5": "1db58f8c7bd3c59fdbdbfaff07b1cea4",
                "sha256": "c4a5b2f6364871850d464763ff33a9dfbdbb2eaabb3d6c4bfd014a814f91b151"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1db58f8c7bd3c59fdbdbfaff07b1cea4",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 799915,
            "upload_time": "2025-02-02T03:36:40",
            "upload_time_iso_8601": "2025-02-02T03:36:40.537273Z",
            "url": "https://files.pythonhosted.org/packages/6d/57/b18103afbcc4563adab7483a85b04b3882b31ab784b70d6b663f3f7e960e/hstrat-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2b486ae5088d1405c16eb9925521bdb8ef6658c6732791ded18e12e7782fa40b",
                "md5": "1f220d53a5137f7fb20fb281c0685ddd",
                "sha256": "d295decd1202a0a9f5985720ae20d3c3337d955b5c0abcf8f88c742ce1ba2234"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp313-cp313-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "1f220d53a5137f7fb20fb281c0685ddd",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 1872729,
            "upload_time": "2025-02-02T03:36:41",
            "upload_time_iso_8601": "2025-02-02T03:36:41.974935Z",
            "url": "https://files.pythonhosted.org/packages/2b/48/6ae5088d1405c16eb9925521bdb8ef6658c6732791ded18e12e7782fa40b/hstrat-1.18.0-cp313-cp313-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "54796b98fc5a9cf446e90c39b52a6801befd82a7e181cd6ed0e67625f1637ba5",
                "md5": "b502828999d5b77e8ef54314452c6974",
                "sha256": "37ddf6e56f2da98420a15d8598ea2f6fdc55a145c5171fa8e45572b1e4631b7d"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b502828999d5b77e8ef54314452c6974",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 1773216,
            "upload_time": "2025-02-02T03:36:43",
            "upload_time_iso_8601": "2025-02-02T03:36:43.435532Z",
            "url": "https://files.pythonhosted.org/packages/54/79/6b98fc5a9cf446e90c39b52a6801befd82a7e181cd6ed0e67625f1637ba5/hstrat-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c8ef67ee83df077a99fde59ffe47b2981477acb69299f30ba53f50c580e082af",
                "md5": "e260f379e737bdaa6fbeba0cbbfea83c",
                "sha256": "ddad7a4e0e6d5f32c8edecac64fbab72969c6e3349232bf86d9423f36e328426"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e260f379e737bdaa6fbeba0cbbfea83c",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 752911,
            "upload_time": "2025-02-02T03:36:46",
            "upload_time_iso_8601": "2025-02-02T03:36:46.607317Z",
            "url": "https://files.pythonhosted.org/packages/c8/ef/67ee83df077a99fde59ffe47b2981477acb69299f30ba53f50c580e082af/hstrat-1.18.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "574b465eecc68010d07c62d6001e19e2bf0782e407343e386ce239e1dddb4a70",
                "md5": "cd18685179527d03c21222dd6747ee17",
                "sha256": "04db15900ff42492217e29907995c77ee8ba392ebfa8e5332948ba101adf0a21"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "cd18685179527d03c21222dd6747ee17",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.10",
            "size": 765534,
            "upload_time": "2025-02-02T03:36:48",
            "upload_time_iso_8601": "2025-02-02T03:36:48.832350Z",
            "url": "https://files.pythonhosted.org/packages/57/4b/465eecc68010d07c62d6001e19e2bf0782e407343e386ce239e1dddb4a70/hstrat-1.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "837df0bb2e5856ffe1ed1eea89bc5b865ee8ad1a98233806e4b53089a9012d4a",
                "md5": "3efbba4ba68e7300e7c871ffd7443d02",
                "sha256": "281c87e7c52530e28bb6047570f62bd0091e05dbe39912f186aa47c0c4b0bb4b"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "3efbba4ba68e7300e7c871ffd7443d02",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.10",
            "size": 810127,
            "upload_time": "2025-02-02T03:36:51",
            "upload_time_iso_8601": "2025-02-02T03:36:51.199147Z",
            "url": "https://files.pythonhosted.org/packages/83/7d/f0bb2e5856ffe1ed1eea89bc5b865ee8ad1a98233806e4b53089a9012d4a/hstrat-1.18.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "958a210ce63ff713ffe14de8dfdd76e946d9c266f27b95825417b66a94c79f2b",
                "md5": "a8f5afe6bf4e54988f72553629bc5c0f",
                "sha256": "c833d7ff7f2d082d811285265738194b174677d7594b6fead534d9dc1278f0c0"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a8f5afe6bf4e54988f72553629bc5c0f",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.10",
            "size": 800392,
            "upload_time": "2025-02-02T03:36:52",
            "upload_time_iso_8601": "2025-02-02T03:36:52.871365Z",
            "url": "https://files.pythonhosted.org/packages/95/8a/210ce63ff713ffe14de8dfdd76e946d9c266f27b95825417b66a94c79f2b/hstrat-1.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "22efc3c6082a784915bf5b10827e11a799809735d66433a52abab3f48dee5cfa",
                "md5": "d783f75c68abfe74cdec34df6cf31231",
                "sha256": "c12a2d9266b4ac4c3e5fafe97dcde057b04847c4caa63d829f9f89829e3bb86e"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0-pp310-pypy310_pp73-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d783f75c68abfe74cdec34df6cf31231",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.10",
            "size": 751650,
            "upload_time": "2025-02-02T03:36:54",
            "upload_time_iso_8601": "2025-02-02T03:36:54.423438Z",
            "url": "https://files.pythonhosted.org/packages/22/ef/c3c6082a784915bf5b10827e11a799809735d66433a52abab3f48dee5cfa/hstrat-1.18.0-pp310-pypy310_pp73-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "617b234b8b7fa31506247b17cbbde7aada1d8520abccd55f47b0b0a0e3268e95",
                "md5": "9c347036c16e1deb8602ea2a03354ab3",
                "sha256": "d0942d13217b9a5e7f1ffd5b666963d96726b08c1cc65b8a852b336b242a2e46"
            },
            "downloads": -1,
            "filename": "hstrat-1.18.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9c347036c16e1deb8602ea2a03354ab3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 904755,
            "upload_time": "2025-02-02T03:36:55",
            "upload_time_iso_8601": "2025-02-02T03:36:55.874178Z",
            "url": "https://files.pythonhosted.org/packages/61/7b/234b8b7fa31506247b17cbbde7aada1d8520abccd55f47b0b0a0e3268e95/hstrat-1.18.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-02 03:36:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mmore500",
    "github_project": "hstrat",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "hstrat"
}
        
Elapsed time: 0.77051s