[![PyPI](https://img.shields.io/pypi/v/pymantra)](https://pypi.org/project/pymantra/)
![License](https://img.shields.io/pypi/l/pymantra)
![Linting](https://github.com/lipitum/pymantra/actions/workflows/linting.yaml/badge.svg)
![Tests](https://github.com/lipitum/pymantra/actions/workflows/run_tests.yaml/badge.svg)
[![Documentation](https://readthedocs.org/projects/pymantra/badge/?version=latest)](https://pymantra.readthedocs.io)
[![Coverage](https://codecov.io/gh/LipiTUM/pymantra/branch/main/graph/badge.svg)](https://app.codecov.io/gh/LipiTUM/pymantra)
# Metabolomics-centred graph-based multi-omics integration
![](./docs/_static/Figure1.svg)
**mantra** is a conceptual approach to compute estimates for the change of
metabolic reaction activity between two groups of samples. It relies on linear
relationships between substrate and product metabolites of a reaction and how
the coefficients of these relationships change between conditions. In addition
to analyzing metabolomics data, mantra also provides a correlation-based
approach for *multi-omics integration*.
As an approach to provide smaller, mechanistically interpretable results based
on both the reaction estimates (and multi-omics associations) and the metabolic
network structure, network enrichment on the basis of a simulated-annealing
assisted local search is used.
The ``pymantra`` package provides all functionalities for computing changes in
reaction activity, multi-omics associations and performing the network
enrichment as well as reporting and plotting their results. Additionally, it
contains utilities to perform metabolite ID mapping.
```mermaid
flowchart LR
subgraph in[Required Input]
met(Metabolome Data)
end
subgraph opt[Optional Multi-Omics Data]
direction LR
subgraph opti[Input]
direction LR
org(Organism/Microbiome Data)
cat(Genome/Transcriptome Data)
end
subgraph optc[Associations]
associ[compute_multiomics_associations]
end
end
subgraph db["Databases (online and/or offline)"]
neo4j[(neo4j Graph)]
sql[(SQL ID maps)]
end
namemap[NameMapper<br><i>Metabolite ID Mapping</i>]
netgen[NetworkGenerator]
metnet(((Metabolic Network)))
estimates[Reaction Estimates]
lso[Local Search Enrichment]
res[Enrichment Results]
reac[ ]
sql -.-> namemap
met --> namemap --> netgen
neo4j -.-> netgen
opti --> netgen --> metnet
metnet & opti & estimates --> optc
metnet & met --- reac ----> estimates
estimates & optc --> lso --> res
style reac width:0px,height:0px
```
### Manuscript
If you would like to learn more about the details of the methodology and see
some real-world results please check out our
[manuscript](https://doi.org/10.1101/2023.05.15.540613).
## Getting Started
To get started we recommend going through some
[code examples](https://pymantra.readthedocs.io/en/latest/examples/index.html) provided
in pymantra's documentation and the installation guide below.
### Installation
#### Using `pip`
The recommended installation is via `pip`.
It has pre-compiled wheels available for all major operating systems.
Generally using python version 3.10 or newer is recommended, but backwards
compatability is ensured down to 3.8.
If you would like to run the experiments presented in the paper (code in
the [experiments folder](experiments)), please use the second option to install
the additional dependencies and mind the different version requirements (see
[README](experiments/README.md)).
Additionally, dependencies required for package development and generation of
sphinx documentation can be obtained.
```shell
# install with package dependencies
pip install pymantra
# for including the dependencies to run the paper experiments
pip install pymantra[experiments]
# for including the development dependencies
pip install pymantra[dev]
# for including the documentation dependencies
pip install pymantra[docs]
```
#### Installation from source
To install from source first clone the github repository including submodules
```shell
git clone https://github.com/lipitum/pymantra.git --recursive
```
Additionally, you need to download required database files for name mapping
from [here](https://drive.google.com/drive/folders/1sWTHWRqzglWOjTMwNa_aqkKT__Y7Snmq?usp=sharing)
On macOS and Linux we recommend to use the following from within the pymantra
directory
```shell
pip install gdown
gdown --folder https://drive.google.com/drive/folders/1sWTHWRqzglWOjTMwNa_aqkKT__Y7Snmq?usp=sharing
mv package/chebi.db pymantra/namemapping/ChEBI/
mv package/hmdb.db pymantra/namemapping/HMDB/
mv package/mantra.db pymantra/namemapping/mantra_db/
mv package/reactome.db pymantra/namemapping/Reactome/
rm -r package
```
On Windows the syntax would change to (untested)
```
pip install gdown
gdown --folder https://drive.google.com/drive/folders/1sWTHWRqzglWOjTMwNa_aqkKT__Y7Snmq?usp=sharing
move package\chebi.db pymantra\namemapping\ChEBI\
move package\hmdb.db pymantra\namemapping\HMDB\
move package\mantra.db pymantra\namemapping\mantra_db\
move package\reactome.db pymantra\namemapping\Reactome\
rmdir /s /q package
```
Make sure you have a C++ compiler installed (recommended are gcc for
Linux and OS X and Visual C++ for Windows). Please make sure the
compiler matches the one, with which your python distribution was installed.
The only c++ dependency for compilation is
the [boost library](https://robots.uc3m.es/installation-guides/install-boost.html).
In case it is already installed on your system (with version >= 1.77) you can
also drop the `--recursive` flag in the `git clone` call. In addition to
installing boost from source you can also use `conda`.
In addition to boost, we use OpenMP for parallel processing. It is usually
installed with your compiler, although macOS users might have to run additional
installation steps. Windows has currently no support for new OpenMP standards.
If it is not possible to compile with OpenMP, parallelized options will be
unavailable in the python package, but all other functionalities are not
affected.
On macOS installation can be done on different ways, e.g. through MacPorts or
homebrew (recommended - `brew install libomp`).
Once the c++ dependencies are installed, the package installation can be
invoked by calling `pip install`
```shell
pip install .
```
To verify installation run the unit tests
```shell
python -m pytest
```
Similar to the regular `pip` installation you can also install the optional
dependencies.
## Database
Per default the setup script installs all code, but **not** the neo4j database.
Instead, an online version of the database will be used. Since this is slower
than having a local database, we provide two options to run the neo4j database
locally.
### Docker
We provide a docker script to run the neo4j database on your computer in a
[separate repository](https://github.com/lipitum/pymantra_db_api).
Please follow the instructions there to run the container.
When calling the ``NetworkGenerator`` make sure your provide the correct URI
and the user and password given in your .env file int pymantra-db-api folder.
If you use the default setting this leads to
```python
APINetworkGenerator("127.0.0.1:8084")
```
In this case only `APINetworkGenerator.get_subgraph` and
`APINetworkGenerator.as_networkx` are available instead of the whole
`NewtorkGenerator` function repertoire. Yet, for most use cases these functions
are all you need.
### Manual Installation
If you want to generate the networks outside docker, you will have to install
neo4j on your systems (community version is sufficient).
For instructions see the [installation page](https://neo4j.com/docs/operations-manual/current/installation/).
Having installed neo4j, download the mantra database dump from
[here]() and move the
[comment]: <> (TODO: finish the instruction)
The ``NetworkGenerator`` can now be initialized with
```python
NetworkGenerator("bolt://127.0.0.1:7687", ("<user>", "<password>"))
```
## Manuscript Experiments
All code used to generate the results presented in our [manuscript]()
is located in the [examples](examples) folder. Please mind the higher version
requirements indicated in the [README](examples/README.md) when reproducing
the experiments.
## Citation
If you use `pymantra` for your own work, please cite our manuscript
```bibtex
@article{koehler2023,
title = {Identification and Integration of Key-Metabolic Reactions from Untargeted Metabolomics Data},
author = {K\"ohler, Nikolai and W\"urf, Vivian and Rose, Tim D and Pauling, Josch K},
journal = {bioRxiv},
year = {2023},
publisher = {Cold Spring Harbor Laboratory},
doi = {https://doi.org/10.1101/2023.05.15.540613}
}
```
Raw data
{
"_id": null,
"home_page": "",
"name": "pymantra",
"maintainer": "Josch Konstantin Pauling",
"docs_url": null,
"requires_python": "",
"maintainer_email": "Nikolai Koehler <nikolai.koehler@tum.de>",
"keywords": "Bioinformatics,Computational Metabolomics,Metabolic Network",
"author": "Josch Konstantin Pauling",
"author_email": "Nikolai Koehler <nikolai.koehler@tum.de>",
"download_url": "https://files.pythonhosted.org/packages/50/0d/5095f8139d24ee9d5c44ddd023a696c27f0d32a1d4d5c1c89d62fc9bb488/pymantra-1.0.2.tar.gz",
"platform": null,
"description": "[![PyPI](https://img.shields.io/pypi/v/pymantra)](https://pypi.org/project/pymantra/)\n![License](https://img.shields.io/pypi/l/pymantra)\n![Linting](https://github.com/lipitum/pymantra/actions/workflows/linting.yaml/badge.svg)\n![Tests](https://github.com/lipitum/pymantra/actions/workflows/run_tests.yaml/badge.svg)\n[![Documentation](https://readthedocs.org/projects/pymantra/badge/?version=latest)](https://pymantra.readthedocs.io)\n[![Coverage](https://codecov.io/gh/LipiTUM/pymantra/branch/main/graph/badge.svg)](https://app.codecov.io/gh/LipiTUM/pymantra)\n\n# Metabolomics-centred graph-based multi-omics integration\n\n![](./docs/_static/Figure1.svg)\n\n**mantra** is a conceptual approach to compute estimates for the change of\nmetabolic reaction activity between two groups of samples. It relies on linear\nrelationships between substrate and product metabolites of a reaction and how\nthe coefficients of these relationships change between conditions. In addition\nto analyzing metabolomics data, mantra also provides a correlation-based\napproach for *multi-omics integration*.\n\nAs an approach to provide smaller, mechanistically interpretable results based\non both the reaction estimates (and multi-omics associations) and the metabolic\nnetwork structure, network enrichment on the basis of a simulated-annealing\nassisted local search is used.\n\nThe ``pymantra`` package provides all functionalities for computing changes in\nreaction activity, multi-omics associations and performing the network\nenrichment as well as reporting and plotting their results. Additionally, it\ncontains utilities to perform metabolite ID mapping.\n\n```mermaid\nflowchart LR\n\n\nsubgraph in[Required Input]\n met(Metabolome Data)\nend\n\nsubgraph opt[Optional Multi-Omics Data]\n direction LR\n subgraph opti[Input]\n direction LR\n org(Organism/Microbiome Data)\n cat(Genome/Transcriptome Data)\n end\n subgraph optc[Associations]\n associ[compute_multiomics_associations]\n end\nend\n\nsubgraph db[\"Databases (online and/or offline)\"]\n neo4j[(neo4j Graph)]\n sql[(SQL ID maps)]\nend\n\nnamemap[NameMapper<br><i>Metabolite ID Mapping</i>]\nnetgen[NetworkGenerator]\nmetnet(((Metabolic Network)))\n\n\nestimates[Reaction Estimates]\nlso[Local Search Enrichment]\nres[Enrichment Results]\nreac[ ]\n\nsql -.-> namemap\nmet --> namemap --> netgen\nneo4j -.-> netgen\n\nopti --> netgen --> metnet\n\nmetnet & opti & estimates --> optc\nmetnet & met --- reac ----> estimates\n\n\nestimates & optc --> lso --> res\n\nstyle reac width:0px,height:0px\n```\n\n\n### Manuscript\n\nIf you would like to learn more about the details of the methodology and see\nsome real-world results please check out our \n[manuscript](https://doi.org/10.1101/2023.05.15.540613).\n\n## Getting Started\n\nTo get started we recommend going through some\n[code examples](https://pymantra.readthedocs.io/en/latest/examples/index.html) provided\nin pymantra's documentation and the installation guide below.\n\n### Installation\n\n#### Using `pip`\n\nThe recommended installation is via `pip`.\nIt has pre-compiled wheels available for all major operating systems.\n\nGenerally using python version 3.10 or newer is recommended, but backwards\ncompatability is ensured down to 3.8.\n\nIf you would like to run the experiments presented in the paper (code in\nthe [experiments folder](experiments)), please use the second option to install\nthe additional dependencies and mind the different version requirements (see\n[README](experiments/README.md)).\n\nAdditionally, dependencies required for package development and generation of\nsphinx documentation can be obtained.\n\n```shell\n# install with package dependencies\npip install pymantra\n# for including the dependencies to run the paper experiments\npip install pymantra[experiments]\n# for including the development dependencies\npip install pymantra[dev]\n# for including the documentation dependencies\npip install pymantra[docs]\n```\n\n#### Installation from source\n\nTo install from source first clone the github repository including submodules\n```shell\ngit clone https://github.com/lipitum/pymantra.git --recursive\n```\n\nAdditionally, you need to download required database files for name mapping\nfrom [here](https://drive.google.com/drive/folders/1sWTHWRqzglWOjTMwNa_aqkKT__Y7Snmq?usp=sharing)\n\nOn macOS and Linux we recommend to use the following from within the pymantra\ndirectory\n\n```shell\npip install gdown\ngdown --folder https://drive.google.com/drive/folders/1sWTHWRqzglWOjTMwNa_aqkKT__Y7Snmq?usp=sharing\nmv package/chebi.db pymantra/namemapping/ChEBI/\nmv package/hmdb.db pymantra/namemapping/HMDB/\nmv package/mantra.db pymantra/namemapping/mantra_db/\nmv package/reactome.db pymantra/namemapping/Reactome/\nrm -r package\n```\n\nOn Windows the syntax would change to (untested)\n\n```\npip install gdown\ngdown --folder https://drive.google.com/drive/folders/1sWTHWRqzglWOjTMwNa_aqkKT__Y7Snmq?usp=sharing\nmove package\\chebi.db pymantra\\namemapping\\ChEBI\\\nmove package\\hmdb.db pymantra\\namemapping\\HMDB\\\nmove package\\mantra.db pymantra\\namemapping\\mantra_db\\\nmove package\\reactome.db pymantra\\namemapping\\Reactome\\\nrmdir /s /q package\n```\n\nMake sure you have a C++ compiler installed (recommended are gcc for\nLinux and OS X and Visual C++ for Windows). Please make sure the\ncompiler matches the one, with which your python distribution was installed.\n\nThe only c++ dependency for compilation is\nthe [boost library](https://robots.uc3m.es/installation-guides/install-boost.html).\nIn case it is already installed on your system (with version >= 1.77) you can\nalso drop the `--recursive` flag in the `git clone` call. In addition to\ninstalling boost from source you can also use `conda`.\n\nIn addition to boost, we use OpenMP for parallel processing. It is usually\ninstalled with your compiler, although macOS users might have to run additional\ninstallation steps. Windows has currently no support for new OpenMP standards.\nIf it is not possible to compile with OpenMP, parallelized options will be\nunavailable in the python package, but all other functionalities are not\naffected.\n\nOn macOS installation can be done on different ways, e.g. through MacPorts or\nhomebrew (recommended - `brew install libomp`).\n\nOnce the c++ dependencies are installed, the package installation can be\ninvoked by calling `pip install`\n```shell\npip install .\n```\n\nTo verify installation run the unit tests\n```shell\npython -m pytest\n```\n\nSimilar to the regular `pip` installation you can also install the optional\ndependencies.\n\n## Database\n\nPer default the setup script installs all code, but **not** the neo4j database.\nInstead, an online version of the database will be used. Since this is slower\nthan having a local database, we provide two options to run the neo4j database\nlocally.\n\n\n### Docker\n\nWe provide a docker script to run the neo4j database on your computer in a\n[separate repository](https://github.com/lipitum/pymantra_db_api).\nPlease follow the instructions there to run the container.\n\nWhen calling the ``NetworkGenerator`` make sure your provide the correct URI\nand the user and password given in your .env file int pymantra-db-api folder.\nIf you use the default setting this leads to\n```python\nAPINetworkGenerator(\"127.0.0.1:8084\")\n```\n\nIn this case only `APINetworkGenerator.get_subgraph` and\n`APINetworkGenerator.as_networkx` are available instead of the whole\n`NewtorkGenerator` function repertoire. Yet, for most use cases these functions\nare all you need.\n\n### Manual Installation\n\nIf you want to generate the networks outside docker, you will have to install\nneo4j on your systems (community version is sufficient).\nFor instructions see the [installation page](https://neo4j.com/docs/operations-manual/current/installation/).\n\nHaving installed neo4j, download the mantra database dump from\n[here]() and move the\n\n[comment]: <> (TODO: finish the instruction)\n\nThe ``NetworkGenerator`` can now be initialized with\n```python\nNetworkGenerator(\"bolt://127.0.0.1:7687\", (\"<user>\", \"<password>\"))\n```\n\n## Manuscript Experiments\n\nAll code used to generate the results presented in our [manuscript]()\nis located in the [examples](examples) folder. Please mind the higher version\nrequirements indicated in the [README](examples/README.md) when reproducing\nthe experiments.\n\n\n## Citation\nIf you use `pymantra` for your own work, please cite our manuscript\n\n```bibtex\n@article{koehler2023,\n title = {Identification and Integration of Key-Metabolic Reactions from Untargeted Metabolomics Data},\n author = {K\\\"ohler, Nikolai and W\\\"urf, Vivian and Rose, Tim D and Pauling, Josch K},\n journal = {bioRxiv},\n year = {2023},\n publisher = {Cold Spring Harbor Laboratory},\n doi = {https://doi.org/10.1101/2023.05.15.540613}\n}\n```\n",
"bugtrack_url": null,
"license": "AGPLv3",
"summary": "Reaction-Centred Metabolic Network Analysis",
"version": "1.0.2",
"project_urls": {
"Documentation": "https://pymantra.readthedocs.io",
"Publication": "https://doi.org/10.1101/2023.05.15.540613",
"Source": "https://www.github.com/lipitum/pymantra"
},
"split_keywords": [
"bioinformatics",
"computational metabolomics",
"metabolic network"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "08aaeff950c210bbdccbb5d16ee39e972c0a9f695c98b0d792e65bc3b3ac38c6",
"md5": "19a53cbd3eed29244460b2eb956722bc",
"sha256": "855c8aca8ad53e74a43ef9807233b78e5c1229b56340a7275e30e2870d0ad76a"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp310-cp310-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "19a53cbd3eed29244460b2eb956722bc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 69991456,
"upload_time": "2023-11-17T09:40:39",
"upload_time_iso_8601": "2023-11-17T09:40:39.376881Z",
"url": "https://files.pythonhosted.org/packages/08/aa/eff950c210bbdccbb5d16ee39e972c0a9f695c98b0d792e65bc3b3ac38c6/pymantra-1.0.2-cp310-cp310-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "afe7d50814e2aa38c6ee026866689adcfc9739502e6a7728aaa57a41816667c7",
"md5": "5fe3a82e4aa0a94a74ff9f28f1c862d7",
"sha256": "ed1cbd503901b648d26aa9ab7879d30244df7ba840eb0c4140eaad9390799db8"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "5fe3a82e4aa0a94a74ff9f28f1c862d7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 69937519,
"upload_time": "2023-11-17T09:40:45",
"upload_time_iso_8601": "2023-11-17T09:40:45.547139Z",
"url": "https://files.pythonhosted.org/packages/af/e7/d50814e2aa38c6ee026866689adcfc9739502e6a7728aaa57a41816667c7/pymantra-1.0.2-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c2521c42cdc5a5f79bced885ec4616c6a59736a8409ca040b46513ae2ea38d38",
"md5": "0e4a016fc177357e1173b5513a8de3cf",
"sha256": "693f527c897fa0e99c1b8702d1d0db2d1992d1cd5ee950dbfe147fa91429b059"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "0e4a016fc177357e1173b5513a8de3cf",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 72598147,
"upload_time": "2023-11-17T09:40:50",
"upload_time_iso_8601": "2023-11-17T09:40:50.918783Z",
"url": "https://files.pythonhosted.org/packages/c2/52/1c42cdc5a5f79bced885ec4616c6a59736a8409ca040b46513ae2ea38d38/pymantra-1.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9fac2dece10d92a04a4d73167d8afc0e35ebe7ecfb9e0801afa6363b18b6063c",
"md5": "fbde01e5c46b3028f9f0164d04f709aa",
"sha256": "0b17c012339caf8c048c7d998d17d75ac91e632b9d5de9a4e68a0a5b7d868dfb"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fbde01e5c46b3028f9f0164d04f709aa",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 72651302,
"upload_time": "2023-11-17T09:40:56",
"upload_time_iso_8601": "2023-11-17T09:40:56.951920Z",
"url": "https://files.pythonhosted.org/packages/9f/ac/2dece10d92a04a4d73167d8afc0e35ebe7ecfb9e0801afa6363b18b6063c/pymantra-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "118f3061ee280e7ba73f615f67438d0371fe58888354a80d40e885ef557a2e76",
"md5": "06307ea1a69f5a354b9577fa226ab015",
"sha256": "9fe50b66ca56fbad9c43ab698476be1f852acac3a88563069c76228c8aac2a1b"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "06307ea1a69f5a354b9577fa226ab015",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 69973648,
"upload_time": "2023-11-17T09:41:02",
"upload_time_iso_8601": "2023-11-17T09:41:02.849049Z",
"url": "https://files.pythonhosted.org/packages/11/8f/3061ee280e7ba73f615f67438d0371fe58888354a80d40e885ef557a2e76/pymantra-1.0.2-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4cf85be321de68ce7b809f51852d5ac1379522f66d92393b60c7e16a0686f694",
"md5": "8b0723255f899662a66c3a7be7025694",
"sha256": "baaa5b1a11c8e7a6e83e694708f3eaf8b8d7a9390cb75fb986e0bc4cefcd872c"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "8b0723255f899662a66c3a7be7025694",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 69998055,
"upload_time": "2023-11-17T09:41:08",
"upload_time_iso_8601": "2023-11-17T09:41:08.821757Z",
"url": "https://files.pythonhosted.org/packages/4c/f8/5be321de68ce7b809f51852d5ac1379522f66d92393b60c7e16a0686f694/pymantra-1.0.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "742654a8c166a539f83db5201ec831c461f2957b8d4a6768876ab349a89e834d",
"md5": "9d5b86693eb8b5c5c301b32bef60e2f8",
"sha256": "1f46fc97eac6245d7920c58a1cfd322d13c03e92a477b7b28615bb7859af7716"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp311-cp311-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "9d5b86693eb8b5c5c301b32bef60e2f8",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 69992302,
"upload_time": "2023-11-17T09:41:14",
"upload_time_iso_8601": "2023-11-17T09:41:14.628205Z",
"url": "https://files.pythonhosted.org/packages/74/26/54a8c166a539f83db5201ec831c461f2957b8d4a6768876ab349a89e834d/pymantra-1.0.2-cp311-cp311-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "85c392b4c6dcadcb6402b89a5db5ebe9fe41a114ff22f5e537ccfa2ddfed86b8",
"md5": "f47434cd2d602689a6f9d2b72125042b",
"sha256": "0f1859b33a78f6349b7d6e05170158d9f8c6a6f9b9a718800a145d2b535edda1"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f47434cd2d602689a6f9d2b72125042b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 69937829,
"upload_time": "2023-11-17T09:41:20",
"upload_time_iso_8601": "2023-11-17T09:41:20.376228Z",
"url": "https://files.pythonhosted.org/packages/85/c3/92b4c6dcadcb6402b89a5db5ebe9fe41a114ff22f5e537ccfa2ddfed86b8/pymantra-1.0.2-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ac5f1d0e27104cae3aecfe51561dbd8dedf76f908b5da5b9d3315ceb2b2b093b",
"md5": "2582733baa23f033fb31466c296a8af9",
"sha256": "33baea9bbcc85f2634ee6c8c9e66dbaf5f2d518ff41bf8972dd629322c5ccec9"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "2582733baa23f033fb31466c296a8af9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 72620591,
"upload_time": "2023-11-17T09:41:25",
"upload_time_iso_8601": "2023-11-17T09:41:25.885165Z",
"url": "https://files.pythonhosted.org/packages/ac/5f/1d0e27104cae3aecfe51561dbd8dedf76f908b5da5b9d3315ceb2b2b093b/pymantra-1.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b4a2e959b490868eaf61fbd789d7dbc781d1a4198f75263c6293b0d3dd6a1be5",
"md5": "87f1edae3e10cf3b00cf246bb5ee42a0",
"sha256": "dab892f63f5616f6dffcc1deb8d89a18815daa56ab12035a78213ee109924545"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "87f1edae3e10cf3b00cf246bb5ee42a0",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 72672862,
"upload_time": "2023-11-17T09:41:32",
"upload_time_iso_8601": "2023-11-17T09:41:32.518704Z",
"url": "https://files.pythonhosted.org/packages/b4/a2/e959b490868eaf61fbd789d7dbc781d1a4198f75263c6293b0d3dd6a1be5/pymantra-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "15d63a2170184f16f0a053f234dcb522204557efe1aa7787c9201110e893cd3e",
"md5": "3e9087271bcf9c2675526351d2837560",
"sha256": "ceb20cd98541b6fa717a6ef728b6a38dab5a595e2e7ccc0969e4dc5a08fa3917"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "3e9087271bcf9c2675526351d2837560",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 69973055,
"upload_time": "2023-11-17T09:41:38",
"upload_time_iso_8601": "2023-11-17T09:41:38.091828Z",
"url": "https://files.pythonhosted.org/packages/15/d6/3a2170184f16f0a053f234dcb522204557efe1aa7787c9201110e893cd3e/pymantra-1.0.2-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4f53e63d028c379786d0faceb9ad6991b0bcadf9d8ee3a0d0654229a227414e5",
"md5": "f86b60a715d31c9326dc0172528bc910",
"sha256": "12fdc9d7fb13a457ff7cfb560a704989dcc6d31cdaaeb2cc19683b140e758491"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "f86b60a715d31c9326dc0172528bc910",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 69997794,
"upload_time": "2023-11-17T09:41:43",
"upload_time_iso_8601": "2023-11-17T09:41:43.471225Z",
"url": "https://files.pythonhosted.org/packages/4f/53/e63d028c379786d0faceb9ad6991b0bcadf9d8ee3a0d0654229a227414e5/pymantra-1.0.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ad280b7ecde01efcd9235d2a3da92c3ed768b2a4a8897854739ad48383e11c18",
"md5": "1540c51779f9a5b4d5616533c5fad558",
"sha256": "0a50bd148941213b578f9014a71aa33efccdb7f3bffecbcc834a6f2291ba8ed0"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp38-cp38-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "1540c51779f9a5b4d5616533c5fad558",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 69992189,
"upload_time": "2023-11-17T09:41:49",
"upload_time_iso_8601": "2023-11-17T09:41:49.069135Z",
"url": "https://files.pythonhosted.org/packages/ad/28/0b7ecde01efcd9235d2a3da92c3ed768b2a4a8897854739ad48383e11c18/pymantra-1.0.2-cp38-cp38-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9c933d941954eee214b8698541d8baf4e81d49e1688f813a691018d665ccf8b8",
"md5": "29c6fd496df6734dffb3f6369faa2113",
"sha256": "5637caa15238e42d7deb0d37447555ae56b05beb0e116cbaee27003d92709ff4"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "29c6fd496df6734dffb3f6369faa2113",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 69937717,
"upload_time": "2023-11-17T09:41:56",
"upload_time_iso_8601": "2023-11-17T09:41:56.172952Z",
"url": "https://files.pythonhosted.org/packages/9c/93/3d941954eee214b8698541d8baf4e81d49e1688f813a691018d665ccf8b8/pymantra-1.0.2-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cc3337edfddb9f80692c9396667972bd1d094796c2b2cc7c70d2f0d1ea1337ca",
"md5": "e34149ed60afbae2a23f6dbed48d815e",
"sha256": "c2e9338db8fe96f5e14874ecde4a32ebe9f1cc24bae4eb8667bfb74e5aee929c"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "e34149ed60afbae2a23f6dbed48d815e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 72591725,
"upload_time": "2023-11-17T09:42:02",
"upload_time_iso_8601": "2023-11-17T09:42:02.876627Z",
"url": "https://files.pythonhosted.org/packages/cc/33/37edfddb9f80692c9396667972bd1d094796c2b2cc7c70d2f0d1ea1337ca/pymantra-1.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "81d1d805c0489ed15860fbb78fffcdb8ea987ec0ded6c4290810b8da3d4043f1",
"md5": "84f8729c086f3272f843fbfead5fb422",
"sha256": "790aad9c986a60c3a51c39163f5fe630681bfddd0fad4d1e5dc47e2aae086502"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "84f8729c086f3272f843fbfead5fb422",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 72645519,
"upload_time": "2023-11-17T09:42:08",
"upload_time_iso_8601": "2023-11-17T09:42:08.779065Z",
"url": "https://files.pythonhosted.org/packages/81/d1/d805c0489ed15860fbb78fffcdb8ea987ec0ded6c4290810b8da3d4043f1/pymantra-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7d86278498386dbe30794e8088e5b7a31ab90767f6aa3cb1fd02c3e8bf9997f4",
"md5": "b46ad6a0d1a40b13302cabfcdcfa0692",
"sha256": "04e185921ecd75d826206a964e15da1c0f850fa9a0cb73bdf2e7028434bf2318"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "b46ad6a0d1a40b13302cabfcdcfa0692",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 69974144,
"upload_time": "2023-11-17T09:42:14",
"upload_time_iso_8601": "2023-11-17T09:42:14.680729Z",
"url": "https://files.pythonhosted.org/packages/7d/86/278498386dbe30794e8088e5b7a31ab90767f6aa3cb1fd02c3e8bf9997f4/pymantra-1.0.2-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a7903abd864ef5492046347eab9ac032f6ad5d5645538df42e6d16ad43b9306",
"md5": "86733a0a0b15d21e830050c8e92ddb0b",
"sha256": "24f8500532322ac2d02ce60f2f51e3561f04cb8d5d81e210b84e2181ed26b7db"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "86733a0a0b15d21e830050c8e92ddb0b",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 69998847,
"upload_time": "2023-11-17T09:42:20",
"upload_time_iso_8601": "2023-11-17T09:42:20.471721Z",
"url": "https://files.pythonhosted.org/packages/6a/79/03abd864ef5492046347eab9ac032f6ad5d5645538df42e6d16ad43b9306/pymantra-1.0.2-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4dfdd663c16a53b80978eaae3abf6317a80f14bd8db2a8680b10836dc45b4dc6",
"md5": "7d15614ba7737a6931bf712683cd3ab7",
"sha256": "852e74bb0eaf352e2d1f7f7f958321e79a3b78cb76f63352baf6cdf96f93c0dd"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp39-cp39-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "7d15614ba7737a6931bf712683cd3ab7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 69992494,
"upload_time": "2023-11-17T09:42:25",
"upload_time_iso_8601": "2023-11-17T09:42:25.791422Z",
"url": "https://files.pythonhosted.org/packages/4d/fd/d663c16a53b80978eaae3abf6317a80f14bd8db2a8680b10836dc45b4dc6/pymantra-1.0.2-cp39-cp39-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "12fcfd8be91f62264fc455ea98a0bdef7b315833a4959c30f49cbdf75978596e",
"md5": "1ad39f2db388793bfb2fba06915d0cdb",
"sha256": "8abb805ad4afc1a8dfefa074bd0cb66b7da97a3d55fb09969c6d8bd2df09437a"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1ad39f2db388793bfb2fba06915d0cdb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 69938173,
"upload_time": "2023-11-17T09:42:31",
"upload_time_iso_8601": "2023-11-17T09:42:31.430284Z",
"url": "https://files.pythonhosted.org/packages/12/fc/fd8be91f62264fc455ea98a0bdef7b315833a4959c30f49cbdf75978596e/pymantra-1.0.2-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a00ecd92d5971d2b509afba5170eb29dcef23d7cc281e33f46b0ba0cfa82ef9",
"md5": "5d81d3782cfd812dba5586e7ce522ac6",
"sha256": "b472d6bb95ac2747a5f4b8bbf33ac58a648769b18e3948ba7402eea6da58a4d5"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "5d81d3782cfd812dba5586e7ce522ac6",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 72599287,
"upload_time": "2023-11-17T09:42:36",
"upload_time_iso_8601": "2023-11-17T09:42:36.995851Z",
"url": "https://files.pythonhosted.org/packages/6a/00/ecd92d5971d2b509afba5170eb29dcef23d7cc281e33f46b0ba0cfa82ef9/pymantra-1.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "84c855963b6f8908fddabb51a5b04034513fab9591659c51dab564b3a3500ed2",
"md5": "748dce4335efb678cb6293729e89c62d",
"sha256": "15f03900944f1105c3ffb46be8a6bcca38d643794ee7c9675de284d0c3a23d52"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "748dce4335efb678cb6293729e89c62d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 72652837,
"upload_time": "2023-11-17T09:42:42",
"upload_time_iso_8601": "2023-11-17T09:42:42.825975Z",
"url": "https://files.pythonhosted.org/packages/84/c8/55963b6f8908fddabb51a5b04034513fab9591659c51dab564b3a3500ed2/pymantra-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "969ae1501800c036527bdcef1b4f5b54b68edaed53da3ba62294c816200d62f8",
"md5": "f1f2250a3365f4793dedacb6b680918d",
"sha256": "92e18b8b37bfc3fe3f144cc44b909ce849ddbdd85bffe94f18d2cbcac71c2ccc"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "f1f2250a3365f4793dedacb6b680918d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 69974241,
"upload_time": "2023-11-17T09:42:49",
"upload_time_iso_8601": "2023-11-17T09:42:49.366415Z",
"url": "https://files.pythonhosted.org/packages/96/9a/e1501800c036527bdcef1b4f5b54b68edaed53da3ba62294c816200d62f8/pymantra-1.0.2-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8e4fdccbde49d5d4f50e17d924595362397a98ddb789057ef44955899de5208a",
"md5": "dedc432e25204d485f455d8b5c68dc3a",
"sha256": "12f5f0528a079dcf1ca3eee5b29ac279fd3ecdf6f49df38e9c835c7ab76ae405"
},
"downloads": -1,
"filename": "pymantra-1.0.2-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "dedc432e25204d485f455d8b5c68dc3a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 69998749,
"upload_time": "2023-11-17T09:42:55",
"upload_time_iso_8601": "2023-11-17T09:42:55.742719Z",
"url": "https://files.pythonhosted.org/packages/8e/4f/dccbde49d5d4f50e17d924595362397a98ddb789057ef44955899de5208a/pymantra-1.0.2-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "500d5095f8139d24ee9d5c44ddd023a696c27f0d32a1d4d5c1c89d62fc9bb488",
"md5": "6ab07252ebc157a365644c92e1ca50f4",
"sha256": "f855346849b733f5c537812f090832f47521541bd3ae013718b4c64d17632d48"
},
"downloads": -1,
"filename": "pymantra-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "6ab07252ebc157a365644c92e1ca50f4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 68779170,
"upload_time": "2023-11-17T09:43:01",
"upload_time_iso_8601": "2023-11-17T09:43:01.381830Z",
"url": "https://files.pythonhosted.org/packages/50/0d/5095f8139d24ee9d5c44ddd023a696c27f0d32a1d4d5c1c89d62fc9bb488/pymantra-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-11-17 09:43:01",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lipitum",
"github_project": "pymantra",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pymantra"
}