From 0cd95dad4a837948f6fadd1daff39b37d1e2443e Mon Sep 17 00:00:00 2001 From: Lucas Camillo Date: Thu, 28 Dec 2023 17:42:10 -0300 Subject: [PATCH] bump up to 0.0.10 --- clocks/notebooks/hrsinchphenoage.ipynb | 174 ++++++ clocks/notebooks/join_metadata.ipynb | 2 +- clocks/notebooks/knight.ipynb | 174 ++++++ .../{leecpc.ipynb => leecontrol.ipynb} | 4 +- ...efinedrpc.ipynb => leerefinedrobust.ipynb} | 4 +- .../{leerpc.ipynb => leerobust.ipynb} | 4 +- .../notebooks/{linblood.ipynb => lin.ipynb} | 4 +- clocks/notebooks/stubbsmultitissue.ipynb | 4 +- clocks/notebooks/zhangen.ipynb | 16 +- docs/_static/clock_table.txt | 12 +- poetry.lock | 507 ++++++++++++++---- pyaging/data/_data.py | 9 +- pyaging/predict/_pred_utils.py | 12 +- pyaging/preprocess/_preprocess.py | 3 +- pyaging/preprocess/_preprocess_utils.py | 6 +- pyproject.toml | 2 +- tutorials/tutorial_atacseq.ipynb | 123 ++--- tutorials/tutorial_bloodchemistry.ipynb | 76 +-- tutorials/tutorial_dnam.ipynb | 289 +++++----- tutorials/tutorial_histonemarkchipseq.ipynb | 135 ++--- tutorials/tutorial_rnaseq.ipynb | 78 +-- tutorials/tutorial_utils.ipynb | 43 +- 22 files changed, 1178 insertions(+), 503 deletions(-) create mode 100644 clocks/notebooks/hrsinchphenoage.ipynb create mode 100644 clocks/notebooks/knight.ipynb rename clocks/notebooks/{leecpc.ipynb => leecontrol.ipynb} (97%) rename clocks/notebooks/{leerefinedrpc.ipynb => leerefinedrobust.ipynb} (96%) rename clocks/notebooks/{leerpc.ipynb => leerobust.ipynb} (97%) rename clocks/notebooks/{linblood.ipynb => lin.ipynb} (98%) diff --git a/clocks/notebooks/hrsinchphenoage.ipynb b/clocks/notebooks/hrsinchphenoage.ipynb new file mode 100644 index 0000000..05d294f --- /dev/null +++ b/clocks/notebooks/hrsinchphenoage.ipynb @@ -0,0 +1,174 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ae756043-21a3-46e9-9fd8-1e5449eba9cb", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "46c6fc26-9a6b-4027-bd01-601b70eb401a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"git clone https://github.com/MorganLevineLab/methylCIPHER.git\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ef41c1be-5a8b-463f-914c-3f74fcc04465", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('methylCIPHER/data-raw/HRSInChPhenoAge_CpG.csv')\n", + "\n", + "df['feature'] = df['CpG']\n", + "df['coefficient'] = df['Weight']" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "aeadf8d3-e31b-4e44-9928-39cb3986deb0", + "metadata": {}, + "outputs": [], + "source": [ + "features = df['feature'].tolist()\n", + "\n", + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([52.8334080])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "1b43e476-72ef-43fd-9871-f41d95c8b269", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearModel(\n", + " (linear): Linear(in_features=959, out_features=1, bias=True)\n", + ")" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = pya.models.LinearModel(len(features))\n", + "\n", + "model.linear.weight.data = weights\n", + "model.linear.bias.data = intercept\n", + "\n", + "model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4f437c4e-313a-401a-8e30-6e68ad397fc4", + "metadata": {}, + "outputs": [], + "source": [ + "weights_dict = {\n", + " 'preprocessing': None, \n", + " 'preprocessing_helper': None,\n", + " 'postprocessing': None,\n", + " 'postprocessing_helper': None,\n", + " 'features': features,\n", + " 'weight_dict': model.state_dict(),\n", + "}\n", + "\n", + "metadata_dict = {\n", + " 'species': 'Homo sapiens',\n", + " 'data_type': 'methylation',\n", + " 'year': 2022,\n", + " 'implementation_approved_by_author(s)': '⌛',\n", + " 'preprocessing': weights_dict['preprocessing'], \n", + " 'postprocessing': weights_dict['postprocessing'], \n", + " 'citation': \"Higgins-Chen, Albert T., et al. \\\"A computational solution for bolstering reliability of epigenetic clocks: Implications for clinical trials and longitudinal tracking.\\\" Nature aging 2.7 (2022): 644-661.\",\n", + " 'doi': \"https://doi.org/10.1038/s43587-022-00248-2\",\n", + " \"notes\": None,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "34136f3c-92b8-4641-a103-381d3a7dd857", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(weights_dict, '../weights/hrsinchphenoage.pt')\n", + "torch.save(metadata_dict, '../metadata/hrsinchphenoage.pt')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d7a8c672-d9f7-487e-af1d-addc55155534", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"rm -r methylCIPHER\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.17" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/clocks/notebooks/join_metadata.ipynb b/clocks/notebooks/join_metadata.ipynb index d2b7585..84f98cf 100644 --- a/clocks/notebooks/join_metadata.ipynb +++ b/clocks/notebooks/join_metadata.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, "id": "59eb29df-0597-4d45-b2e6-8825670effe2", "metadata": {}, "outputs": [], diff --git a/clocks/notebooks/knight.ipynb b/clocks/notebooks/knight.ipynb new file mode 100644 index 0000000..c7b351e --- /dev/null +++ b/clocks/notebooks/knight.ipynb @@ -0,0 +1,174 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "fb157849-5454-4a60-8548-fff633fff764", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "46c6fc26-9a6b-4027-bd01-601b70eb401a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"curl -o coefficients.csv https://static-content.springer.com/esm/art%3A10.1186%2Fs13059-016-1068-z/MediaObjects/13059_2016_1068_MOESM3_ESM.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b9f484b1-f501-41b7-9565-82e03bfe97dc", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('coefficients.csv')\n", + "\n", + "df['feature'] = df['CpGmarker']\n", + "df['coefficient'] = df['CoefficientTraining']" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a284fe99-dc47-4f0c-b2ff-274e136e7020", + "metadata": {}, + "outputs": [], + "source": [ + "features = df['feature'][1:].tolist()\n", + "\n", + "weights = torch.tensor(df['coefficient'][1:].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['coefficient'][0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7b4c3f6b-72af-4e99-84c4-65b8ef58c91d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearModel(\n", + " (linear): Linear(in_features=148, out_features=1, bias=True)\n", + ")" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = pya.models.LinearModel(len(features))\n", + "\n", + "model.linear.weight.data = weights\n", + "model.linear.bias.data = intercept\n", + "\n", + "model" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e32706f0-ce07-455e-bb17-1993c1c0e152", + "metadata": {}, + "outputs": [], + "source": [ + "weights_dict = {\n", + " 'preprocessing': None, \n", + " 'preprocessing_helper': None,\n", + " 'postprocessing': None,\n", + " 'postprocessing_helper': None,\n", + " 'features': features,\n", + " 'weight_dict': model.state_dict(),\n", + "}\n", + "\n", + "metadata_dict = {\n", + " 'species': 'Homo sapiens',\n", + " 'data_type': 'methylation',\n", + " 'year': 2016,\n", + " 'implementation_approved_by_author(s)': '⌛',\n", + " 'preprocessing': weights_dict['preprocessing'], \n", + " 'postprocessing': weights_dict['postprocessing'], \n", + " 'citation': \"Knight, Anna K., et al. \\\"An epigenetic clock for gestational age at birth based on blood methylation data.\\\" Genome biology 17.1 (2016): 1-11.\",\n", + " 'doi': \"https://doi.org/10.1186/s13059-016-1068-z\",\n", + " \"notes\": None,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "34136f3c-92b8-4641-a103-381d3a7dd857", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(weights_dict, '../weights/knight.pt')\n", + "torch.save(metadata_dict, '../metadata/knight.pt')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "303e9b76-993f-4691-af9d-1151b3c7638f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"rm coefficients.csv\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.17" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/clocks/notebooks/leecpc.ipynb b/clocks/notebooks/leecontrol.ipynb similarity index 97% rename from clocks/notebooks/leecpc.ipynb rename to clocks/notebooks/leecontrol.ipynb index d30d12e..940863a 100644 --- a/clocks/notebooks/leecpc.ipynb +++ b/clocks/notebooks/leecontrol.ipynb @@ -126,8 +126,8 @@ "metadata": {}, "outputs": [], "source": [ - "torch.save(weights_dict, '../weights/leecpc.pt')\n", - "torch.save(metadata_dict, '../metadata/leecpc.pt')" + "torch.save(weights_dict, '../weights/leecontrol.pt')\n", + "torch.save(metadata_dict, '../metadata/leecontrol.pt')" ] }, { diff --git a/clocks/notebooks/leerefinedrpc.ipynb b/clocks/notebooks/leerefinedrobust.ipynb similarity index 96% rename from clocks/notebooks/leerefinedrpc.ipynb rename to clocks/notebooks/leerefinedrobust.ipynb index 2734356..04d93db 100644 --- a/clocks/notebooks/leerefinedrpc.ipynb +++ b/clocks/notebooks/leerefinedrobust.ipynb @@ -126,8 +126,8 @@ "metadata": {}, "outputs": [], "source": [ - "torch.save(weights_dict, '../weights/leerefinedrpc.pt')\n", - "torch.save(metadata_dict, '../metadata/leerefinedrpc.pt')" + "torch.save(weights_dict, '../weights/leerefinedrobust.pt')\n", + "torch.save(metadata_dict, '../metadata/leerefinedrobust.pt')" ] }, { diff --git a/clocks/notebooks/leerpc.ipynb b/clocks/notebooks/leerobust.ipynb similarity index 97% rename from clocks/notebooks/leerpc.ipynb rename to clocks/notebooks/leerobust.ipynb index d6b8070..6c86371 100644 --- a/clocks/notebooks/leerpc.ipynb +++ b/clocks/notebooks/leerobust.ipynb @@ -126,8 +126,8 @@ "metadata": {}, "outputs": [], "source": [ - "torch.save(weights_dict, '../weights/leerpc.pt')\n", - "torch.save(metadata_dict, '../metadata/leerpc.pt')" + "torch.save(weights_dict, '../weights/leerobust.pt')\n", + "torch.save(metadata_dict, '../metadata/leerobust.pt')" ] }, { diff --git a/clocks/notebooks/linblood.ipynb b/clocks/notebooks/lin.ipynb similarity index 98% rename from clocks/notebooks/linblood.ipynb rename to clocks/notebooks/lin.ipynb index 3e487da..9a005e3 100644 --- a/clocks/notebooks/linblood.ipynb +++ b/clocks/notebooks/lin.ipynb @@ -152,8 +152,8 @@ "metadata": {}, "outputs": [], "source": [ - "torch.save(weights_dict, '../weights/linblood.pt')\n", - "torch.save(metadata_dict, '../metadata/linblood.pt')" + "torch.save(weights_dict, '../weights/lin.pt')\n", + "torch.save(metadata_dict, '../metadata/lin.pt')" ] } ], diff --git a/clocks/notebooks/stubbsmultitissue.ipynb b/clocks/notebooks/stubbsmultitissue.ipynb index 0f082a2..f3e2b34 100644 --- a/clocks/notebooks/stubbsmultitissue.ipynb +++ b/clocks/notebooks/stubbsmultitissue.ipynb @@ -125,7 +125,9 @@ "id": "b72a5318-072e-42a4-9b34-ecb9241d0b7d", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "os.system(\"rm coefficients.xlsx\")" + ] } ], "metadata": { diff --git a/clocks/notebooks/zhangen.ipynb b/clocks/notebooks/zhangen.ipynb index b618e38..8a16bde 100644 --- a/clocks/notebooks/zhangen.ipynb +++ b/clocks/notebooks/zhangen.ipynb @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "id": "b9f484b1-f501-41b7-9565-82e03bfe97dc", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 6, "id": "a284fe99-dc47-4f0c-b2ff-274e136e7020", "metadata": {}, "outputs": [], @@ -130,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "id": "01b905f5-298f-4edd-b69b-fcedeea9d0d4", "metadata": {}, "outputs": [ @@ -140,7 +140,7 @@ "0" ] }, - "execution_count": 14, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -148,6 +148,14 @@ "source": [ "os.system(\"rm -r DNAm-based-age-predictor\")" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34a90554-4e17-42de-9671-f52d656caf0a", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/_static/clock_table.txt b/docs/_static/clock_table.txt index 0a827c2..bb00ac0 100644 --- a/docs/_static/clock_table.txt +++ b/docs/_static/clock_table.txt @@ -29,13 +29,17 @@ +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | horvath2013 | methylation | Homo sapiens | 2013 | None | anti_log_linear | https://doi.org/10.1186/gb-2013-14-10-r115 | None | +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| leecpc | methylation | Homo sapiens | 2019 | None | None | https://doi.org/10.18632/aging.102049 | None | +| hrsinchphenoage | methylation | Homo sapiens | 2022 | None | None | https://doi.org/10.1038/s43587-022-00248-2 | None | +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| leerefinedrpc | methylation | Homo sapiens | 2019 | None | None | https://doi.org/10.18632/aging.102049 | None | +| knight | methylation | Homo sapiens | 2016 | None | None | https://doi.org/10.1186/s13059-016-1068-z | None | +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| leerpc | methylation | Homo sapiens | 2019 | None | None | https://doi.org/10.18632/aging.102049 | None | +| leecontrol | methylation | Homo sapiens | 2019 | None | None | https://doi.org/10.18632/aging.102049 | None | +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| linblood | methylation | Homo sapiens | 2016 | None | None | https://doi.org/10.18632/aging.100908 | None | +| leerefinedrobust | methylation | Homo sapiens | 2019 | None | None | https://doi.org/10.18632/aging.102049 | None | ++---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| leerobust | methylation | Homo sapiens | 2019 | None | None | https://doi.org/10.18632/aging.102049 | None | ++---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| lin | methylation | Homo sapiens | 2016 | None | None | https://doi.org/10.18632/aging.100908 | None | +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | mammalian1 | methylation | multi | 2023 | None | anti_logp2 | https://doi.org/10.1038/s43587-023-00462-6 | This is the DNAm age predictor from the paper in which there is no adjustment for species | +---------------------+-----------------+--------------+------+-------------------------------------------+-----------------------+----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/poetry.lock b/poetry.lock index 5f23a46..d594628 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,19 @@ # This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +[[package]] +name = "accessible-pygments" +version = "0.0.4" +description = "A collection of accessible pygments styles" +optional = false +python-versions = "*" +files = [ + {file = "accessible-pygments-0.0.4.tar.gz", hash = "sha256:e7b57a9b15958e9601c7e9eb07a440c813283545a20973f2574a5f453d0e953e"}, + {file = "accessible_pygments-0.0.4-py2.py3-none-any.whl", hash = "sha256:416c6d8c1ea1c5ad8701903a20fcedf953c6e720d64f33dc47bfb2d3f2fa4e8d"}, +] + +[package.dependencies] +pygments = ">=1.5" + [[package]] name = "alabaster" version = "0.7.13" @@ -398,13 +412,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.19.0" +version = "2.19.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.19.0-py3-none-any.whl", hash = "sha256:b9fd1a2dd6971dbc7fee280a95bd199ae0dd9ce22beb91cc75e9c1c528a5170e"}, - {file = "fastjsonschema-2.19.0.tar.gz", hash = "sha256:e25df6647e1bc4a26070b700897b07b542ec898dd4f1f6ea013e7f6a88417225"}, + {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, + {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, ] [package.extras] @@ -461,6 +475,17 @@ smb = ["smbprotocol"] ssh = ["paramiko"] tqdm = ["tqdm"] +[[package]] +name = "get-annotations" +version = "0.1.2" +description = "A backport of Python 3.10's inspect.get_annotation() function" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "get-annotations-0.1.2.tar.gz", hash = "sha256:da7b69b8043237cc7f7ce5919e9cc59bd18fc4e2704b43eb34e3ba4fa9374bab"}, + {file = "get_annotations-0.1.2-py3-none-any.whl", hash = "sha256:788ba8aa2434ee34ffb985c4aea2f9e575204c884c0e0dd0f969be846470e527"}, +] + [[package]] name = "h5py" version = "3.10.0" @@ -690,13 +715,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.11.2" +version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, - {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] @@ -756,6 +781,30 @@ files = [ {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, ] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.3" @@ -839,6 +888,36 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mistune" version = "3.0.2" @@ -867,6 +946,32 @@ docs = ["sphinx"] gmpy = ["gmpy2 (>=2.1.0a4)"] tests = ["pytest (>=4.6)"] +[[package]] +name = "myst-parser" +version = "2.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.8" +files = [ + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, +] + +[package.dependencies] +docutils = ">=0.16,<0.21" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + [[package]] name = "natsort" version = "8.4.0" @@ -1427,6 +1532,33 @@ files = [ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] +[[package]] +name = "pydata-sphinx-theme" +version = "0.14.4" +description = "Bootstrap-based Sphinx theme from the PyData community" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydata_sphinx_theme-0.14.4-py3-none-any.whl", hash = "sha256:ac15201f4c2e2e7042b0cad8b30251433c1f92be762ddcefdb4ae68811d918d9"}, + {file = "pydata_sphinx_theme-0.14.4.tar.gz", hash = "sha256:f5d7a2cb7a98e35b9b49d3b02cec373ad28958c2ed5c9b1ffe6aff6c56e9de5b"}, +] + +[package.dependencies] +accessible-pygments = "*" +Babel = "*" +beautifulsoup4 = "*" +docutils = "!=0.17.0" +packaging = "*" +pygments = ">=2.7" +sphinx = ">=5.0" +typing-extensions = "*" + +[package.extras] +a11y = ["pytest-playwright"] +dev = ["nox", "pre-commit", "pydata-sphinx-theme[doc,test]", "pyyaml"] +doc = ["ablog (>=0.11.0rc2)", "colorama", "ipykernel", "ipyleaflet", "jupyter_sphinx", "jupyterlite-sphinx", "linkify-it-py", "matplotlib", "myst-parser", "nbsphinx", "numpy", "numpydoc", "pandas", "plotly", "rich", "sphinx-autoapi (>=3.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-favicon (>=1.0.1)", "sphinx-sitemap", "sphinx-togglebutton", "sphinxcontrib-youtube (<1.4)", "sphinxext-rediraffe", "xarray"] +test = ["pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "pygments" version = "2.17.2" @@ -1512,6 +1644,65 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + [[package]] name = "pyzmq" version = "25.1.2" @@ -1655,112 +1846,134 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rpds-py" -version = "0.15.2" +version = "0.16.2" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:337a8653fb11d2fbe7157c961cc78cb3c161d98cf44410ace9a3dc2db4fad882"}, - {file = "rpds_py-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:813a65f95bfcb7c8f2a70dd6add9b51e9accc3bdb3e03d0ff7a9e6a2d3e174bf"}, - {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:082e0e55d73690ffb4da4352d1b5bbe1b5c6034eb9dc8c91aa2a3ee15f70d3e2"}, - {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5595c80dd03d7e6c6afb73f3594bf3379a7d79fa57164b591d012d4b71d6ac4c"}, - {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb10bb720348fe1647a94eb605accb9ef6a9b1875d8845f9e763d9d71a706387"}, - {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53304cc14b1d94487d70086e1cb0cb4c29ec6da994d58ae84a4d7e78c6a6d04d"}, - {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d64a657de7aae8db2da60dc0c9e4638a0c3893b4d60101fd564a3362b2bfeb34"}, - {file = "rpds_py-0.15.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee40206d1d6e95eaa2b7b919195e3689a5cf6ded730632de7f187f35a1b6052c"}, - {file = "rpds_py-0.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1607cda6129f815493a3c184492acb5ae4aa6ed61d3a1b3663aa9824ed26f7ac"}, - {file = "rpds_py-0.15.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3e6e2e502c4043c52a99316d89dc49f416acda5b0c6886e0dd8ea7bb35859e8"}, - {file = "rpds_py-0.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:044f6f46d62444800402851afa3c3ae50141f12013060c1a3a0677e013310d6d"}, - {file = "rpds_py-0.15.2-cp310-none-win32.whl", hash = "sha256:c827a931c6b57f50f1bb5de400dcfb00bad8117e3753e80b96adb72d9d811514"}, - {file = "rpds_py-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3bbc89ce2a219662ea142f0abcf8d43f04a41d5b1880be17a794c39f0d609cb0"}, - {file = "rpds_py-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:1fd0f0b1ccd7d537b858a56355a250108df692102e08aa2036e1a094fd78b2dc"}, - {file = "rpds_py-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b414ef79f1f06fb90b5165db8aef77512c1a5e3ed1b4807da8476b7e2c853283"}, - {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c31272c674f725dfe0f343d73b0abe8c878c646967ec1c6106122faae1efc15b"}, - {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6945c2d61c42bb7e818677f43638675b8c1c43e858b67a96df3eb2426a86c9d"}, - {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02744236ac1895d7be837878e707a5c35fb8edc5137602f253b63623d7ad5c8c"}, - {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2181e86d4e1cdf49a7320cb72a36c45efcb7670d0a88f09fd2d3a7967c0540fd"}, - {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a8ff8e809da81363bffca2b965cb6e4bf6056b495fc3f078467d1f8266fe27f"}, - {file = "rpds_py-0.15.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97532802f14d383f37d603a56e226909f825a83ff298dc1b6697de00d2243999"}, - {file = "rpds_py-0.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:13716e53627ad97babf72ac9e01cf9a7d4af2f75dd5ed7b323a7a9520e948282"}, - {file = "rpds_py-0.15.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2f1f295a5c28cfa74a7d48c95acc1c8a7acd49d7d9072040d4b694fe11cd7166"}, - {file = "rpds_py-0.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8ec464f20fe803ae00419bd1610934e3bda963aeba1e6181dfc9033dc7e8940c"}, - {file = "rpds_py-0.15.2-cp311-none-win32.whl", hash = "sha256:b61d5096e75fd71018b25da50b82dd70ec39b5e15bb2134daf7eb7bbbc103644"}, - {file = "rpds_py-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:9d41ebb471a6f064c0d1c873c4f7dded733d16ca5db7d551fb04ff3805d87802"}, - {file = "rpds_py-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:13ff62d3561a23c17341b4afc78e8fcfd799ab67c0b1ca32091d71383a98ba4b"}, - {file = "rpds_py-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b70b45a40ad0798b69748b34d508259ef2bdc84fb2aad4048bc7c9cafb68ddb3"}, - {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ecbba7efd82bd2a4bb88aab7f984eb5470991c1347bdd1f35fb34ea28dba6e"}, - {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9d38494a8d21c246c535b41ecdb2d562c4b933cf3d68de03e8bc43a0d41be652"}, - {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13152dfe7d7c27c40df8b99ac6aab12b978b546716e99f67e8a67a1d441acbc3"}, - {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:164fcee32f15d04d61568c9cb0d919e37ff3195919cd604039ff3053ada0461b"}, - {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a5122b17a4faf5d7a6d91fa67b479736c0cacc7afe791ddebb7163a8550b799"}, - {file = "rpds_py-0.15.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:46b4f3d47d1033db569173be62365fbf7808c2bd3fb742314d251f130d90d44c"}, - {file = "rpds_py-0.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c61e42b4ceb9759727045765e87d51c1bb9f89987aca1fcc8a040232138cad1c"}, - {file = "rpds_py-0.15.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d2aa3ca9552f83b0b4fa6ca8c6ce08da6580f37e3e0ab7afac73a1cfdc230c0e"}, - {file = "rpds_py-0.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec19e823b4ccd87bd69e990879acbce9e961fc7aebe150156b8f4418d4b27b7f"}, - {file = "rpds_py-0.15.2-cp312-none-win32.whl", hash = "sha256:afeabb382c1256a7477b739820bce7fe782bb807d82927102cee73e79b41b38b"}, - {file = "rpds_py-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:422b0901878a31ef167435c5ad46560362891816a76cc0d150683f3868a6f0d1"}, - {file = "rpds_py-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:baf744e5f9d5ee6531deea443be78b36ed1cd36c65a0b95ea4e8d69fa0102268"}, - {file = "rpds_py-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e072f5da38d6428ba1fc1115d3cc0dae895df671cb04c70c019985e8c7606be"}, - {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f138f550b83554f5b344d6be35d3ed59348510edc3cb96f75309db6e9bfe8210"}, - {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2a4cd924d0e2f4b1a68034abe4cadc73d69ad5f4cf02db6481c0d4d749f548f"}, - {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5eb05b654a41e0f81ab27a7c3e88b6590425eb3e934e1d533ecec5dc88a6ffff"}, - {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ee066a64f0d2ba45391cac15b3a70dcb549e968a117bd0500634754cfe0e5fc"}, - {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c51a899792ee2c696072791e56b2020caff58b275abecbc9ae0cb71af0645c95"}, - {file = "rpds_py-0.15.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac2ac84a4950d627d84b61f082eba61314373cfab4b3c264b62efab02ababe83"}, - {file = "rpds_py-0.15.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:62b292fff4739c6be89e6a0240c02bda5a9066a339d90ab191cf66e9fdbdc193"}, - {file = "rpds_py-0.15.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:98ee201a52a7f65608e5494518932e1473fd43535f12cade0a1b4ab32737fe28"}, - {file = "rpds_py-0.15.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3d40fb3ca22e3d40f494d577441b263026a3bd8c97ae6ce89b2d3c4b39ac9581"}, - {file = "rpds_py-0.15.2-cp38-none-win32.whl", hash = "sha256:30479a9f1fce47df56b07460b520f49fa2115ec2926d3b1303c85c81f8401ed1"}, - {file = "rpds_py-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:2df3d07a16a3bef0917b28cd564778fbb31f3ffa5b5e33584470e2d1b0f248f0"}, - {file = "rpds_py-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:56b51ba29a18e5f5810224bcf00747ad931c0716e3c09a76b4a1edd3d4aba71f"}, - {file = "rpds_py-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c11bc5814554b018f6c5d6ae0969e43766f81e995000b53a5d8c8057055e886"}, - {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2faa97212b0dc465afeedf49045cdd077f97be1188285e646a9f689cb5dfff9e"}, - {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:86c01299942b0f4b5b5f28c8701689181ad2eab852e65417172dbdd6c5b3ccc8"}, - {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd7d3608589072f63078b4063a6c536af832e76b0b3885f1bfe9e892abe6c207"}, - {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:938518a11780b39998179d07f31a4a468888123f9b00463842cd40f98191f4d3"}, - {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dccc623725d0b298f557d869a68496a2fd2a9e9c41107f234fa5f7a37d278ac"}, - {file = "rpds_py-0.15.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d46ee458452727a147d7897bb33886981ae1235775e05decae5d5d07f537695a"}, - {file = "rpds_py-0.15.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9d7ebcd11ea76ba0feaae98485cd8e31467c3d7985210fab46983278214736b"}, - {file = "rpds_py-0.15.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8a5f574b92b3ee7d254e56d56e37ec0e1416acb1ae357c4956d76a1788dc58fb"}, - {file = "rpds_py-0.15.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3db0c998c92b909d7c90b66c965590d4f3cd86157176a6cf14aa1f867b77b889"}, - {file = "rpds_py-0.15.2-cp39-none-win32.whl", hash = "sha256:bbc7421cbd28b4316d1d017db338039a7943f945c6f2bb15e1439b14b5682d28"}, - {file = "rpds_py-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:1c24e30d720c0009b6fb2e1905b025da56103c70a8b31b99138e4ed1c2a6c5b0"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e6fcd0a0f62f2997107f758bb372397b8d5fd5f39cc6dcb86f7cb98a2172d6c"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d800a8e2ac62db1b9ea5d6d1724f1a93c53907ca061de4d05ed94e8dfa79050c"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e09d017e3f4d9bd7d17a30d3f59e4d6d9ba2d2ced280eec2425e84112cf623f"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b88c3ab98556bc351b36d6208a6089de8c8db14a7f6e1f57f82a334bd2c18f0b"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f333bfe782a2d05a67cfaa0cc9cd68b36b39ee6acfe099f980541ed973a7093"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b629db53fe17e6ce478a969d30bd1d0e8b53238c46e3a9c9db39e8b65a9ef973"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485fbdd23becb822804ed05622907ee5c8e8a5f43f6f43894a45f463b2217045"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:893e38d0f4319dfa70c0f36381a37cc418985c87b11d9784365b1fff4fa6973b"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8ffdeb7dbd0160d4e391e1f857477e4762d00aa2199c294eb95dfb9451aa1d9f"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fc33267d58dfbb2361baed52668c5d8c15d24bc0372cecbb79fed77339b55e0d"}, - {file = "rpds_py-0.15.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2e7e5633577b3bd56bf3af2ef6ae3778bbafb83743989d57f0e7edbf6c0980e4"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8b9650f92251fdef843e74fc252cdfd6e3c700157ad686eeb0c6d7fdb2d11652"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:07a2e1d78d382f7181789713cdf0c16edbad4fe14fe1d115526cb6f0eef0daa3"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03f9c5875515820633bd7709a25c3e60c1ea9ad1c5d4030ce8a8c203309c36fd"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:580182fa5b269c2981e9ce9764367cb4edc81982ce289208d4607c203f44ffde"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa1e626c524d2c7972c0f3a8a575d654a3a9c008370dc2a97e46abd0eaa749b9"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae9d83a81b09ce3a817e2cbb23aabc07f86a3abc664c613cd283ce7a03541e95"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9235be95662559141934fced8197de6fee8c58870f36756b0584424b6d708393"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a72e00826a2b032dda3eb25aa3e3579c6d6773d22d8446089a57a123481cc46c"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ab095edf1d840a6a6a4307e1a5b907a299a94e7b90e75436ee770b8c35d22a25"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b79c63d29101cbaa53a517683557bb550462394fb91044cc5998dd2acff7340"}, - {file = "rpds_py-0.15.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:911e600e798374c0d86235e7ef19109cf865d1336942d398ff313375a25a93ba"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3cd61e759c4075510052d1eca5cddbd297fe1164efec14ef1fce3f09b974dfe4"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d2ae79f31da5143e020a8d4fc74e1f0cbcb8011bdf97453c140aa616db51406"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e99d6510c8557510c220b865d966b105464740dcbebf9b79ecd4fbab30a13d9"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c43e1b89099279cc03eb1c725c5de12af6edcd2f78e2f8a022569efa639ada3"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7187bee72384b9cfedf09a29a3b2b6e8815cc64c095cdc8b5e6aec81e9fd5f"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3423007fc0661827e06f8a185a3792c73dda41f30f3421562f210cf0c9e49569"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2974e6dff38afafd5ccf8f41cb8fc94600b3f4fd9b0a98f6ece6e2219e3158d5"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:93c18a1696a8e0388ed84b024fe1a188a26ba999b61d1d9a371318cb89885a8c"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7cd0841a586b7105513a7c8c3d5c276f3adc762a072d81ef7fae80632afad1e"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:709dc11af2f74ba89c68b1592368c6edcbccdb0a06ba77eb28c8fe08bb6997da"}, - {file = "rpds_py-0.15.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:fc066395e6332da1e7525d605b4c96055669f8336600bef8ac569d5226a7c76f"}, - {file = "rpds_py-0.15.2.tar.gz", hash = "sha256:373b76eeb79e8c14f6d82cb1d4d5293f9e4059baec6c1b16dca7ad13b6131b39"}, + {file = "rpds_py-0.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f"}, + {file = "rpds_py-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9"}, + {file = "rpds_py-0.16.2-cp310-none-win32.whl", hash = "sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82"}, + {file = "rpds_py-0.16.2-cp310-none-win_amd64.whl", hash = "sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e"}, + {file = "rpds_py-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb"}, + {file = "rpds_py-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8"}, + {file = "rpds_py-0.16.2-cp311-none-win32.whl", hash = "sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3"}, + {file = "rpds_py-0.16.2-cp311-none-win_amd64.whl", hash = "sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d"}, + {file = "rpds_py-0.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d"}, + {file = "rpds_py-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58"}, + {file = "rpds_py-0.16.2-cp312-none-win32.whl", hash = "sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3"}, + {file = "rpds_py-0.16.2-cp312-none-win_amd64.whl", hash = "sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5"}, + {file = "rpds_py-0.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60"}, + {file = "rpds_py-0.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365"}, + {file = "rpds_py-0.16.2-cp38-none-win32.whl", hash = "sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff"}, + {file = "rpds_py-0.16.2-cp38-none-win_amd64.whl", hash = "sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851"}, + {file = "rpds_py-0.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e"}, + {file = "rpds_py-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45"}, + {file = "rpds_py-0.16.2-cp39-none-win32.whl", hash = "sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d"}, + {file = "rpds_py-0.16.2-cp39-none-win_amd64.whl", hash = "sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac"}, + {file = "rpds_py-0.16.2.tar.gz", hash = "sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44"}, +] + +[[package]] +name = "scanpydoc" +version = "0.10.0" +description = "A series of Sphinx extensions to get maintainable numpydoc style documentation." +optional = false +python-versions = ">=3.9" +files = [ + {file = "scanpydoc-0.10.0-py3-none-any.whl", hash = "sha256:33d9afd868cfae59dd03c8c614c1e2f685ed22183ce8aecf4386b6e6a382865b"}, + {file = "scanpydoc-0.10.0.tar.gz", hash = "sha256:75580d5c9e291fa0d32393c64346f6a4832216dae58132fb52dc06a1b6f3ad87"}, ] +[package.dependencies] +get-annotations = {version = "*", markers = "python_version < \"3.10\""} +sphinx = ">=7.0" + +[package.extras] +dev = ["pre-commit"] +doc = ["scanpydoc[theme,typehints]", "sphinx"] +test = ["coverage", "coverage-rich", "pytest", "toml"] +theme = ["sphinx-book-theme (>=1.1.0rc1)"] +typehints = ["sphinx-autodoc-typehints (>=1.15.2)"] + [[package]] name = "scikit-learn" version = "1.3.2" @@ -1937,6 +2150,86 @@ docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)"] numpy = ["nptyping (>=2.5)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.7.1)"] +[[package]] +name = "sphinx-book-theme" +version = "1.1.0" +description = "A clean book theme for scientific explanations and documentation with Sphinx" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinx_book_theme-1.1.0-py3-none-any.whl", hash = "sha256:088bc69d65fab8446adb8691ed61687f71bf7504c9740af68bc78cf936a26112"}, + {file = "sphinx_book_theme-1.1.0.tar.gz", hash = "sha256:ad4f92998e53e24751ecd0978d3eb79fdaa59692f005b1b286ecdd6146ebc9c1"}, +] + +[package.dependencies] +pydata-sphinx-theme = ">=0.14" +sphinx = ">=5" + +[package.extras] +code-style = ["pre-commit"] +doc = ["ablog", "folium", "ipywidgets", "matplotlib", "myst-nb", "nbclient", "numpy", "numpydoc", "pandas", "plotly", "sphinx-copybutton", "sphinx-design", "sphinx-examples", "sphinx-tabs", "sphinx-thebe", "sphinx-togglebutton", "sphinxcontrib-bibtex", "sphinxcontrib-youtube", "sphinxext-opengraph"] +test = ["beautifulsoup4", "coverage", "myst-nb", "pytest", "pytest-cov", "pytest-regressions", "sphinx_thebe"] + +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, + {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, +] + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] + +[[package]] +name = "sphinx-design" +version = "0.5.0" +description = "A sphinx extension for designing beautiful, view size responsive web components." +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinx_design-0.5.0-py3-none-any.whl", hash = "sha256:1af1267b4cea2eedd6724614f19dcc88fe2e15aff65d06b2f6252cee9c4f4c1e"}, + {file = "sphinx_design-0.5.0.tar.gz", hash = "sha256:e8e513acea6f92d15c6de3b34e954458f245b8e761b45b63950f65373352ab00"}, +] + +[package.dependencies] +sphinx = ">=5,<8" + +[package.extras] +code-style = ["pre-commit (>=3,<4)"] +rtd = ["myst-parser (>=1,<3)"] +testing = ["myst-parser (>=1,<3)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2023.7.0,<2023.8.0)"] +theme-pydata = ["pydata-sphinx-theme (>=0.13.0,<0.14.0)"] +theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] +theme-sbt = ["sphinx-book-theme (>=1.0,<2.0)"] + +[[package]] +name = "sphinx-issues" +version = "3.0.1" +description = "A Sphinx extension for linking to your project's issue tracker" +optional = false +python-versions = ">=3.6" +files = [ + {file = "sphinx-issues-3.0.1.tar.gz", hash = "sha256:b7c1dc1f4808563c454d11c1112796f8c176cdecfee95f0fd2302ef98e21e3d6"}, + {file = "sphinx_issues-3.0.1-py3-none-any.whl", hash = "sha256:8b25dc0301159375468f563b3699af7a63720fd84caf81c1442036fcd418b20c"}, +] + +[package.dependencies] +sphinx = "*" + +[package.extras] +dev = ["flake8 (==3.9.2)", "flake8-bugbear (==20.11.1)", "pre-commit (>=2.7,<3.0)", "pytest (>=6.2.0)", "tox"] +lint = ["flake8 (==3.9.2)", "flake8-bugbear (==20.11.1)", "pre-commit (>=2.7,<3.0)"] +tests = ["pytest (>=6.2.0)"] + [[package]] name = "sphinx-rtd-theme" version = "1.3.0" @@ -2341,4 +2634,4 @@ docs = [] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "e7dda8d336a69f8e7a7f4d4601098cb93d096b4ae23e24119995f2ad52e547e2" +content-hash = "a647a80db1bc54b63fc1d34acfd67832eb3080bbd3e83471649410bcf6471f39" diff --git a/pyaging/data/_data.py b/pyaging/data/_data.py index dedf2d8..01bd1c4 100644 --- a/pyaging/data/_data.py +++ b/pyaging/data/_data.py @@ -23,13 +23,13 @@ def download_example_data( ---------- data_type : str The type of data to download. Valid options are 'GSE139307' (human methylation), 'GSE130735' (mouse - methylation), 'GSE223748' (mammalian methylation), 'ENCFF386QWG' (histone mark), - 'GSE65765' (C. elegans RNA-seq), 'GSE193140' (ATAC-Seq), 'blood_chemistry_example' (blood chemistry). - + methylation), 'GSE223748' (mammalian methylation), 'ENCFF386QWG' (histone mark), 'GSE65765' (C. elegans + RNA-seq), 'GSE193140' (ATAC-Seq), 'blood_chemistry_example' (blood chemistry). + dir : str The directory to deposit the downloaded file. Defaults to "pyaging_data". - verbose: bool + verbose : bool Whether to log the output to console with the logger. Defaults to True. Raises @@ -51,7 +51,6 @@ def download_example_data( -------- >>> download_example_data("methylation") # This will download the example methylation dataset to the local system. - """ logger = LoggerManager.gen_logger("download_example_data") if not verbose: diff --git a/pyaging/predict/_pred_utils.py b/pyaging/predict/_pred_utils.py index 922d2f0..dd88773 100644 --- a/pyaging/predict/_pred_utils.py +++ b/pyaging/predict/_pred_utils.py @@ -344,14 +344,16 @@ def initialize_model( "zhangmortality", "zhangen", "zhangblup", - "leecpc", - "leerpc", - "leerefinedrpc", + "leecontrol", + "leerobust", + "leerefinedrobust", "meermultitissue", "thompsonmultitissue", "petkovichblood", "stubbsmultitissue", - "linblood", + "lin", + "knight", + "hrsinchphenoage", ]: model = LinearModel(len(features)) elif clock_name in [ @@ -389,7 +391,7 @@ def initialize_model( model.load_state_dict(weight_dict) model.to(torch.float64) - model = model.to(device) + model.to(device) model.eval() return model diff --git a/pyaging/preprocess/_preprocess.py b/pyaging/preprocess/_preprocess.py index 0aef775..e676c98 100644 --- a/pyaging/preprocess/_preprocess.py +++ b/pyaging/preprocess/_preprocess.py @@ -190,7 +190,8 @@ def df_to_adata( adata = impute_missing_values(adata, imputer_strategy, logger) # Add unstructured data - add_unstructured_data(adata, imputer_strategy, logger) + if "X_imputed" in adata.layers: + add_unstructured_data(adata, imputer_strategy, logger) logger.done() diff --git a/pyaging/preprocess/_preprocess_utils.py b/pyaging/preprocess/_preprocess_utils.py index c286645..c6b6868 100644 --- a/pyaging/preprocess/_preprocess_utils.py +++ b/pyaging/preprocess/_preprocess_utils.py @@ -278,7 +278,7 @@ def add_metadata_to_anndata( return adata -@progress("Add unstructured data to anndata") +@progress("Add imputer strategy to adata.uns") def add_unstructured_data( adata: anndata.AnnData, imputer_strategy: str, logger, indent_level: int = 1 ) -> None: @@ -309,8 +309,8 @@ def add_unstructured_data( Notes ----- This function updates the 'uns' attribute of the AnnData object with the 'imputer_strategy' - key. - + key. + Example ------- >>> from anndata import AnnData diff --git a/pyproject.toml b/pyproject.toml index 18e341e..48b8d00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pyaging" -version = "0.0.9" +version = "0.0.10" description = "A Python-based compendium of GPU-optimized aging clocks." authors = ["Lucas Paulo de Lima Camillo "] license = "BSD" diff --git a/tutorials/tutorial_atacseq.ipynb b/tutorials/tutorial_atacseq.ipynb index b31db79..1944bfa 100644 --- a/tutorials/tutorial_atacseq.ipynb +++ b/tutorials/tutorial_atacseq.ipynb @@ -78,8 +78,9 @@ "output_type": "stream", "text": [ "|-----> 🏗️ Starting download_example_data function\n", - "|-----------> Data found in pyaging_data/GSE193140.pkl\n", - "|-----> 🎉 Done! [0.0007s]\n" + "|-----------> Downloading data to pyaging_data/GSE193140.pkl\n", + "|-----------> in progress: 100.0000%\n", + "|-----> 🎉 Done! [19.7454s]\n" ] } ], @@ -370,22 +371,22 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.0230s]\n", + "|-----> ✅ Create anndata object finished [0.0221s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------? No metadata provided. Leaving adata.obs empty\n", - "|-----> ⚠️ Add metadata to anndata finished [0.0005s]\n", + "|-----> ⚠️ Add metadata to anndata finished [0.0004s]\n", "|-----> ⚙️ Log data statistics started\n", "|-----------> There are 157 observations\n", "|-----------> There are 80400 features\n", "|-----------> Total missing values: 0\n", "|-----------> Percentage of missing values: 0.00%\n", - "|-----> ✅ Log data statistics finished [0.0064s]\n", + "|-----> ✅ Log data statistics finished [0.0053s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> No missing values found. No imputation necessary\n", - "|-----> ✅ Impute missing values finished [0.0064s]\n", + "|-----> ✅ Impute missing values finished [0.0052s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", - "|-----> ✅ Add unstructured data to anndata finished [0.0003s]\n", - "|-----> 🎉 Done! [0.0391s]\n" + "|-----> ✅ Add unstructured data to anndata finished [0.0004s]\n", + "|-----> 🎉 Done! [0.0361s]\n" ] } ], @@ -454,64 +455,66 @@ "|-----> 🏗️ Starting predict_age function\n", "|-----> ⚙️ Set PyTorch device started\n", "|-----------> Using device: cpu\n", - "|-----> ✅ Set PyTorch device finished [0.0006s]\n", + "|-----> ✅ Set PyTorch device finished [0.0008s]\n", "|-----> 🕒 Processing clock: ocampoatac1\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/ocampoatac1.pt\n", - "|-----------> ✅ Load clock finished [0.0085s]\n", + "|-----------------> Downloading data to pyaging_data/ocampoatac1.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [1.1699s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0008s]\n", + "|-----------> ✅ Check features in adata finished [0.0007s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> Preprocessing data with function tpm_norm_log1p\n", - "|-----------> ✅ Preprocess data finished [0.2140s]\n", + "|-----------> ✅ Preprocess data finished [0.1744s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0080s]\n", + "|-----------> ✅ Initialize model finished [0.0027s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0131s]\n", + "|-----------> ✅ Predict ages with model finished [0.0058s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0006s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0005s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", - "|-----------> ✅ Postprocess data finished [0.0004s]\n", + "|-----------> ✅ Postprocess data finished [0.0006s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0011s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0013s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0017s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0015s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0040s]\n", + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0051s]\n", "|-----> 🕒 Processing clock: ocampoatac2\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/ocampoatac2.pt\n", - "|-----------> ✅ Load clock finished [0.0079s]\n", + "|-----------------> Downloading data to pyaging_data/ocampoatac2.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [1.1904s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", "|-----------> ✅ Check features in adata finished [0.0020s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> Preprocessing data with function tpm_norm_log1p\n", - "|-----------> ✅ Preprocess data finished [0.1729s]\n", + "|-----------> ✅ Preprocess data finished [0.1523s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0005s]\n", + "|-----------> ✅ Initialize model finished [0.0006s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0072s]\n", + "|-----------> ✅ Predict ages with model finished [0.0042s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", "|-----------> ✅ Postprocess data finished [0.0005s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0006s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0007s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0015s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0012s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0034s]\n", - "|-----> 🎉 Done! [0.6032s]\n" + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0036s]\n", + "|-----> 🎉 Done! [2.8607s]\n" ] } ], @@ -554,27 +557,27 @@ " \n", " CR_124\n", " 29.527124\n", - " 28.114204\n", + " 28.114206\n", " \n", " \n", " CR_122\n", - " 39.003098\n", - " 40.061161\n", + " 39.003097\n", + " 40.061162\n", " \n", " \n", " CR_121\n", - " 40.716007\n", - " 43.095200\n", + " 40.716008\n", + " 43.095199\n", " \n", " \n", " CR_120\n", - " 32.380371\n", - " 33.033455\n", + " 32.380372\n", + " 33.033456\n", " \n", " \n", " CR_119\n", - " 36.440712\n", - " 38.301517\n", + " 36.440711\n", + " 38.301516\n", " \n", " \n", "\n", @@ -582,11 +585,11 @@ ], "text/plain": [ " ocampoatac1 ocampoatac2\n", - "CR_124 29.527124 28.114204\n", - "CR_122 39.003098 40.061161\n", - "CR_121 40.716007 43.095200\n", - "CR_120 32.380371 33.033455\n", - "CR_119 36.440712 38.301517" + "CR_124 29.527124 28.114206\n", + "CR_122 39.003097 40.061162\n", + "CR_121 40.716008 43.095199\n", + "CR_120 32.380372 33.033456\n", + "CR_119 36.440711 38.301516" ] }, "execution_count": 8, @@ -654,27 +657,27 @@ " \n", " CR_124\n", " 29.527124\n", - " 28.114204\n", + " 28.114206\n", " \n", " \n", " CR_122\n", - " 39.003098\n", - " 40.061161\n", + " 39.003097\n", + " 40.061162\n", " \n", " \n", " CR_121\n", - " 40.716007\n", - " 43.095200\n", + " 40.716008\n", + " 43.095199\n", " \n", " \n", " CR_120\n", - " 32.380371\n", - " 33.033455\n", + " 32.380372\n", + " 33.033456\n", " \n", " \n", " CR_119\n", - " 36.440712\n", - " 38.301517\n", + " 36.440711\n", + " 38.301516\n", " \n", " \n", "\n", @@ -682,11 +685,11 @@ ], "text/plain": [ " ocampoatac1 ocampoatac2\n", - "CR_124 29.527124 28.114204\n", - "CR_122 39.003098 40.061161\n", - "CR_121 40.716007 43.095200\n", - "CR_120 32.380371 33.033455\n", - "CR_119 36.440712 38.301517" + "CR_124 29.527124 28.114206\n", + "CR_122 39.003097 40.061162\n", + "CR_121 40.716008 43.095199\n", + "CR_120 32.380372 33.033456\n", + "CR_119 36.440711 38.301516" ] }, "execution_count": 10, diff --git a/tutorials/tutorial_bloodchemistry.ipynb b/tutorials/tutorial_bloodchemistry.ipynb index d5eff9b..148bc9b 100644 --- a/tutorials/tutorial_bloodchemistry.ipynb +++ b/tutorials/tutorial_bloodchemistry.ipynb @@ -70,8 +70,9 @@ "output_type": "stream", "text": [ "|-----> 🏗️ Starting download_example_data function\n", - "|-----------> Data found in pyaging_data/blood_chemistry_example.pkl\n", - "|-----> 🎉 Done! [0.0009s]\n" + "|-----------> Downloading data to pyaging_data/blood_chemistry_example.pkl\n", + "|-----------> in progress: 100.0000%\n", + "|-----> 🎉 Done! [0.6535s]\n" ] } ], @@ -258,22 +259,22 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.0018s]\n", + "|-----> ✅ Create anndata object finished [0.0025s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------? No metadata provided. Leaving adata.obs empty\n", - "|-----> ⚠️ Add metadata to anndata finished [0.0005s]\n", + "|-----> ⚠️ Add metadata to anndata finished [0.0017s]\n", "|-----> ⚙️ Log data statistics started\n", "|-----------> There are 30 observations\n", "|-----------> There are 10 features\n", "|-----------> Total missing values: 0\n", "|-----------> Percentage of missing values: 0.00%\n", - "|-----> ✅ Log data statistics finished [0.0015s]\n", + "|-----> ✅ Log data statistics finished [0.0027s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> No missing values found. No imputation necessary\n", - "|-----> ✅ Impute missing values finished [0.0016s]\n", + "|-----> ✅ Impute missing values finished [0.0018s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", - "|-----> ✅ Add unstructured data to anndata finished [0.0003s]\n", - "|-----> 🎉 Done! [0.0089s]\n" + "|-----> ✅ Add unstructured data to anndata finished [0.0012s]\n", + "|-----> 🎉 Done! [0.0290s]\n" ] } ], @@ -342,36 +343,37 @@ "|-----> 🏗️ Starting predict_age function\n", "|-----> ⚙️ Set PyTorch device started\n", "|-----------> Using device: cpu\n", - "|-----> ✅ Set PyTorch device finished [0.0009s]\n", + "|-----> ✅ Set PyTorch device finished [0.0037s]\n", "|-----> 🕒 Processing clock: phenoage\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/phenoage.pt\n", - "|-----------> ✅ Load clock finished [0.0023s]\n", + "|-----------------> Downloading data to pyaging_data/phenoage.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [0.6872s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0011s]\n", + "|-----------> ✅ Check features in adata finished [0.0020s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0023s]\n", + "|-----------> ✅ Preprocess data finished [0.0022s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0012s]\n", + "|-----------> ✅ Initialize model finished [0.0036s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0018s]\n", + "|-----------> ✅ Predict ages with model finished [0.0026s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0005s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0011s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function mortality_to_phenoage\n", "|-----------> ✅ Postprocess data finished [0.0006s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0012s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0012s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0021s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0008s]\n", - "|-----> 🎉 Done! [0.0789s]\n" + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0031s]\n", + "|-----> 🎉 Done! [0.8214s]\n" ] } ], @@ -412,7 +414,7 @@ " \n", " \n", " patient1\n", - " 70.643124\n", + " 70.643137\n", " \n", " \n", " patient2\n", @@ -420,15 +422,15 @@ " \n", " \n", " patient3\n", - " 70.258555\n", + " 70.258559\n", " \n", " \n", " patient4\n", - " 42.979377\n", + " 42.979385\n", " \n", " \n", " patient5\n", - " 41.677751\n", + " 41.677749\n", " \n", " \n", "\n", @@ -436,11 +438,11 @@ ], "text/plain": [ " phenoage\n", - "patient1 70.643124\n", + "patient1 70.643137\n", "patient2 64.834061\n", - "patient3 70.258555\n", - "patient4 42.979377\n", - "patient5 41.677751" + "patient3 70.258559\n", + "patient4 42.979385\n", + "patient5 41.677749" ] }, "execution_count": 8, @@ -506,7 +508,7 @@ " \n", " \n", " patient1\n", - " 70.643124\n", + " 70.643137\n", " \n", " \n", " patient2\n", @@ -514,15 +516,15 @@ " \n", " \n", " patient3\n", - " 70.258555\n", + " 70.258559\n", " \n", " \n", " patient4\n", - " 42.979377\n", + " 42.979385\n", " \n", " \n", " patient5\n", - " 41.677751\n", + " 41.677749\n", " \n", " \n", "\n", @@ -530,11 +532,11 @@ ], "text/plain": [ " phenoage\n", - "patient1 70.643124\n", + "patient1 70.643137\n", "patient2 64.834061\n", - "patient3 70.258555\n", - "patient4 42.979377\n", - "patient5 41.677751" + "patient3 70.258559\n", + "patient4 42.979385\n", + "patient5 41.677749" ] }, "execution_count": 10, diff --git a/tutorials/tutorial_dnam.ipynb b/tutorials/tutorial_dnam.ipynb index 465b69d..6104b2e 100644 --- a/tutorials/tutorial_dnam.ipynb +++ b/tutorials/tutorial_dnam.ipynb @@ -85,7 +85,7 @@ "text": [ "|-----> 🏗️ Starting download_example_data function\n", "|-----------> Data found in pyaging_data/GSE139307.pkl\n", - "|-----> 🎉 Done! [0.0007s]\n" + "|-----> 🎉 Done! [0.0006s]\n" ] } ], @@ -374,22 +374,22 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.1474s]\n", + "|-----> ✅ Create anndata object finished [0.1570s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------> Adding provided metadata to adata.obs\n", - "|-----> ✅ Add metadata to anndata finished [0.0008s]\n", + "|-----> ✅ Add metadata to anndata finished [0.0007s]\n", "|-----> ⚙️ Log data statistics started\n", "|-----------> There are 37 observations\n", "|-----------> There are 485514 features\n", "|-----------> Total missing values: 526\n", "|-----------> Percentage of missing values: 0.00%\n", - "|-----> ✅ Log data statistics finished [0.0267s]\n", + "|-----> ✅ Log data statistics finished [0.0200s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> Imputing missing values using mean strategy\n", - "|-----> ✅ Impute missing values finished [0.2207s]\n", + "|-----> ✅ Impute missing values finished [0.2247s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", - "|-----> ✅ Add unstructured data to anndata finished [0.0005s]\n", - "|-----> 🎉 Done! [0.4891s]\n" + "|-----> ✅ Add unstructured data to anndata finished [0.0003s]\n", + "|-----> 🎉 Done! [0.5212s]\n" ] } ], @@ -459,80 +459,81 @@ "|-----> 🏗️ Starting predict_age function\n", "|-----> ⚙️ Set PyTorch device started\n", "|-----------> Using device: cpu\n", - "|-----> ✅ Set PyTorch device finished [0.0012s]\n", + "|-----> ✅ Set PyTorch device finished [0.0008s]\n", "|-----> 🕒 Processing clock: horvath2013\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/horvath2013.pt\n", - "|-----------> ✅ Load clock finished [0.0031s]\n", + "|-----------> ✅ Load clock finished [0.0081s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0014s]\n", + "|-----------> ✅ Check features in adata finished [0.0011s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0006s]\n", + "|-----------> ✅ Preprocess data finished [0.1133s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0016s]\n", + "|-----------> ✅ Initialize model finished [0.0068s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0375s]\n", + "|-----------> ✅ Predict ages with model finished [0.0438s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0006s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function anti_log_linear\n", - "|-----------> ✅ Postprocess data finished [0.0006s]\n", + "|-----------> ✅ Postprocess data finished [0.0005s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", - "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0018s]\n", + "|-----------------> Downloading data to pyaging_data/all_clock_metadata.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.7582s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> Removing 1 added features\n", - "|-----------> ✅ Return adata to original size finished [0.2977s]\n", + "|-----------> ✅ Return adata to original size finished [0.5342s]\n", "|-----> 🕒 Processing clock: altumage\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/altumage.pt\n", - "|-----------> ✅ Load clock finished [0.0082s]\n", + "|-----------> ✅ Load clock finished [0.0126s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0135s]\n", + "|-----------> ✅ Check features in adata finished [0.0194s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> Preprocessing data with function scale\n", - "|-----------> ✅ Preprocess data finished [0.1465s]\n", + "|-----------> ✅ Preprocess data finished [0.2685s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0052s]\n", + "|-----------> ✅ Initialize model finished [0.0077s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0432s]\n", + "|-----------> ✅ Predict ages with model finished [0.0650s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", - "|-----------> ✅ Postprocess data finished [0.0005s]\n", + "|-----------> ✅ Postprocess data finished [0.0006s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0023s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0015s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0031s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> No missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0152s]\n", + "|-----------> ✅ Return adata to original size finished [0.0170s]\n", "|-----> 🕒 Processing clock: pcgrimage\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/pcgrimage.pt\n", - "|-----------> ✅ Load clock finished [0.4957s]\n", + "|-----------> ✅ Load clock finished [0.4531s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0492s]\n", + "|-----------> ✅ Check features in adata finished [0.0581s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.1510s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.6977s]\n", + "|-----------> ✅ Initialize model finished [0.6905s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.3960s]\n", + "|-----------> ✅ Predict ages with model finished [0.4770s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0006s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", "|-----------> ✅ Postprocess data finished [0.0004s]\n", @@ -540,11 +541,11 @@ "|-----------> ✅ Add predicted ages to adata finished [0.0006s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0020s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0014s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> No missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0156s]\n", - "|-----> 🎉 Done! [2.6357s]\n" + "|-----------> ✅ Return adata to original size finished [0.0161s]\n", + "|-----> 🎉 Done! [4.0675s]\n" ] } ], @@ -595,7 +596,7 @@ " GSE139307\n", " 33.624776\n", " 37.007213\n", - " 78.843542\n", + " 68.520635\n", " \n", " \n", " GSM4137710\n", @@ -604,7 +605,7 @@ " GSE139307\n", " 28.829344\n", " 29.426899\n", - " 73.004664\n", + " 58.770800\n", " \n", " \n", " GSM4137711\n", @@ -613,7 +614,7 @@ " GSE139307\n", " 28.316545\n", " 22.805551\n", - " 69.911041\n", + " 57.613313\n", " \n", " \n", " GSM4137712\n", @@ -622,7 +623,7 @@ " GSE139307\n", " 24.850630\n", " 18.060107\n", - " 70.567793\n", + " 59.368435\n", " \n", " \n", " GSM4137713\n", @@ -631,7 +632,7 @@ " GSE139307\n", " 25.942111\n", " 20.071985\n", - " 73.495097\n", + " 59.199044\n", " \n", " \n", "\n", @@ -639,11 +640,11 @@ ], "text/plain": [ " gender tissue_type dataset horvath2013 altumage pcgrimage\n", - "GSM4137709 M sperm GSE139307 33.624776 37.007213 78.843542\n", - "GSM4137710 M sperm GSE139307 28.829344 29.426899 73.004664\n", - "GSM4137711 M sperm GSE139307 28.316545 22.805551 69.911041\n", - "GSM4137712 M sperm GSE139307 24.850630 18.060107 70.567793\n", - "GSM4137713 M sperm GSE139307 25.942111 20.071985 73.495097" + "GSM4137709 M sperm GSE139307 33.624776 37.007213 68.520635\n", + "GSM4137710 M sperm GSE139307 28.829344 29.426899 58.770800\n", + "GSM4137711 M sperm GSE139307 28.316545 22.805551 57.613313\n", + "GSM4137712 M sperm GSE139307 24.850630 18.060107 59.368435\n", + "GSM4137713 M sperm GSE139307 25.942111 20.071985 59.199044" ] }, "execution_count": 9, @@ -720,7 +721,7 @@ " GSE139307\n", " 33.624776\n", " 37.007213\n", - " 78.843542\n", + " 68.520635\n", " \n", " \n", " GSM4137710\n", @@ -729,7 +730,7 @@ " GSE139307\n", " 28.829344\n", " 29.426899\n", - " 73.004664\n", + " 58.770800\n", " \n", " \n", " GSM4137711\n", @@ -738,7 +739,7 @@ " GSE139307\n", " 28.316545\n", " 22.805551\n", - " 69.911041\n", + " 57.613313\n", " \n", " \n", " GSM4137712\n", @@ -747,7 +748,7 @@ " GSE139307\n", " 24.850630\n", " 18.060107\n", - " 70.567793\n", + " 59.368435\n", " \n", " \n", " GSM4137713\n", @@ -756,7 +757,7 @@ " GSE139307\n", " 25.942111\n", " 20.071985\n", - " 73.495097\n", + " 59.199044\n", " \n", " \n", "\n", @@ -764,11 +765,11 @@ ], "text/plain": [ " gender tissue_type dataset horvath2013 altumage pcgrimage\n", - "GSM4137709 M sperm GSE139307 33.624776 37.007213 78.843542\n", - "GSM4137710 M sperm GSE139307 28.829344 29.426899 73.004664\n", - "GSM4137711 M sperm GSE139307 28.316545 22.805551 69.911041\n", - "GSM4137712 M sperm GSE139307 24.850630 18.060107 70.567793\n", - "GSM4137713 M sperm GSE139307 25.942111 20.071985 73.495097" + "GSM4137709 M sperm GSE139307 33.624776 37.007213 68.520635\n", + "GSM4137710 M sperm GSE139307 28.829344 29.426899 58.770800\n", + "GSM4137711 M sperm GSE139307 28.316545 22.805551 57.613313\n", + "GSM4137712 M sperm GSE139307 24.850630 18.060107 59.368435\n", + "GSM4137713 M sperm GSE139307 25.942111 20.071985 59.199044" ] }, "execution_count": 11, @@ -952,7 +953,7 @@ "text": [ "|-----> 🏗️ Starting download_example_data function\n", "|-----------> Data found in pyaging_data/GSE130735_subset.pkl\n", - "|-----> 🎉 Done! [0.0016s]\n" + "|-----> 🎉 Done! [0.0021s]\n" ] } ], @@ -1222,22 +1223,22 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.6014s]\n", + "|-----> ✅ Create anndata object finished [0.6678s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------? No metadata provided. Leaving adata.obs empty\n", - "|-----> ⚠️ Add metadata to anndata finished [0.0005s]\n", + "|-----> ⚠️ Add metadata to anndata finished [0.0004s]\n", "|-----> ⚙️ Log data statistics started\n", "|-----------> There are 14 observations\n", "|-----------> There are 1778324 features\n", "|-----------> Total missing values: 6322346\n", "|-----------> Percentage of missing values: 25.39%\n", - "|-----> ✅ Log data statistics finished [0.0157s]\n", + "|-----> ✅ Log data statistics finished [0.0145s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> Imputing missing values using mean strategy\n", - "|-----> ✅ Impute missing values finished [0.3364s]\n", + "|-----> ✅ Impute missing values finished [0.3550s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", "|-----> ✅ Add unstructured data to anndata finished [0.0003s]\n", - "|-----> 🎉 Done! [0.9570s]\n" + "|-----> 🎉 Done! [1.0416s]\n" ] } ], @@ -1286,52 +1287,52 @@ "|-----> 🕒 Processing clock: thompsonmultitissue\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/thompsonmultitissue.pt\n", - "|-----------> ✅ Load clock finished [0.0019s]\n", + "|-----------> ✅ Load clock finished [0.0014s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------? 1 out of 582 features (0.17%) are missing: ['chr4:91376687'], etc.\n", "|-----------------> Filling missing features entirely with 0\n", "|-----------------> Expanded adata with 1 missing features\n", - "|-----------> ⚠️ Check features in adata finished [0.3695s]\n", + "|-----------> ⚠️ Check features in adata finished [0.7080s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.1527s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0009s]\n", + "|-----------> ✅ Initialize model finished [0.0040s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.2939s]\n", + "|-----------> ✅ Predict ages with model finished [0.4362s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0005s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", "|-----------> ✅ Postprocess data finished [0.0005s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0004s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0009s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0009s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0013s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> Removing 1 added features\n", - "|-----------> ✅ Return adata to original size finished [0.7223s]\n", + "|-----------> ✅ Return adata to original size finished [1.4389s]\n", "|-----> 🕒 Processing clock: meermultitissue\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/meermultitissue.pt\n", - "|-----------> ✅ Load clock finished [0.0014s]\n", + "|-----------> ✅ Load clock finished [0.0019s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------? 225 out of 435 features (51.72%) are missing: ['chr10:111559529', 'chr10:115250413', 'chr10:127620127'], etc.\n", "|-----------------> Filling missing features entirely with 0\n", "|-----------------> Expanded adata with 225 missing features\n", - "|-----------> ⚠️ Check features in adata finished [0.5039s]\n", + "|-----------> ⚠️ Check features in adata finished [0.6005s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.0493s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0008s]\n", + "|-----------> ✅ Initialize model finished [0.0010s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.3048s]\n", + "|-----------> ✅ Predict ages with model finished [0.3007s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", "|-----------> ✅ Postprocess data finished [0.0004s]\n", @@ -1339,71 +1340,71 @@ "|-----------> ✅ Add predicted ages to adata finished [0.0004s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0009s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0011s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> Removing 225 added features\n", - "|-----------> ✅ Return adata to original size finished [1.0369s]\n", + "|-----------> ✅ Return adata to original size finished [0.8934s]\n", "|-----> 🕒 Processing clock: petkovichblood\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/petkovichblood.pt\n", - "|-----------> ✅ Load clock finished [0.0022s]\n", + "|-----------> ✅ Load clock finished [0.0016s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------? 40 out of 90 features (44.44%) are missing: ['chr18:58836612', 'chr16:10502211', 'chr16:44812942'], etc.\n", "|-----------------> Filling missing features entirely with 0\n", "|-----------------> Expanded adata with 40 missing features\n", - "|-----------> ⚠️ Check features in adata finished [0.7342s]\n", + "|-----------> ⚠️ Check features in adata finished [0.7038s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0007s]\n", + "|-----------> ✅ Preprocess data finished [0.0357s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0025s]\n", + "|-----------> ✅ Initialize model finished [0.0070s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.4239s]\n", + "|-----------> ✅ Predict ages with model finished [0.6587s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0014s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function petkovichblood\n", - "|-----------> ✅ Postprocess data finished [0.0005s]\n", + "|-----------> ✅ Postprocess data finished [0.0018s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0006s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0021s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0010s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0037s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> Removing 40 added features\n", - "|-----------> ✅ Return adata to original size finished [1.1047s]\n", + "|-----------> ✅ Return adata to original size finished [1.0951s]\n", "|-----> 🕒 Processing clock: stubbsmultitissue\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/stubbsmultitissue.pt\n", - "|-----------> ✅ Load clock finished [0.0020s]\n", + "|-----------> ✅ Load clock finished [0.0022s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------? 153 out of 329 features (46.50%) are missing: ['chr1:153890242', 'chr2:25579878', 'chr2:131180254'], etc.\n", "|-----------------> Filling missing features entirely with 0\n", "|-----------------> Expanded adata with 153 missing features\n", - "|-----------> ⚠️ Check features in adata finished [0.5342s]\n", + "|-----------> ⚠️ Check features in adata finished [0.6441s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.0689s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0006s]\n", + "|-----------> ✅ Initialize model finished [0.0038s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.2982s]\n", + "|-----------> ✅ Predict ages with model finished [0.5221s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0016s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function stubbsmultitissue\n", - "|-----------> ✅ Postprocess data finished [0.0005s]\n", + "|-----------> ✅ Postprocess data finished [0.0024s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0026s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0010s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0048s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> Removing 153 added features\n", - "|-----------> ✅ Return adata to original size finished [0.6130s]\n", - "|-----> 🎉 Done! [7.5002s]\n" + "|-----------> ✅ Return adata to original size finished [1.3288s]\n", + "|-----> 🎉 Done! [10.4568s]\n" ] } ], @@ -2128,7 +2129,7 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.0066s]\n", + "|-----> ✅ Create anndata object finished [0.0073s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------? No metadata provided. Leaving adata.obs empty\n", "|-----> ⚠️ Add metadata to anndata finished [0.0004s]\n", @@ -2137,13 +2138,13 @@ "|-----------> There are 37554 features\n", "|-----------> Total missing values: 0\n", "|-----------> Percentage of missing values: 0.00%\n", - "|-----> ✅ Log data statistics finished [0.0030s]\n", + "|-----> ✅ Log data statistics finished [0.0033s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> No missing values found. No imputation necessary\n", - "|-----> ✅ Impute missing values finished [0.0048s]\n", + "|-----> ✅ Impute missing values finished [0.0057s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", "|-----> ✅ Add unstructured data to anndata finished [0.0002s]\n", - "|-----> 🎉 Done! [0.0170s]\n" + "|-----> 🎉 Done! [0.0193s]\n" ] } ], @@ -2212,120 +2213,120 @@ "|-----> 🏗️ Starting predict_age function\n", "|-----> ⚙️ Set PyTorch device started\n", "|-----------> Using device: cpu\n", - "|-----> ✅ Set PyTorch device finished [0.0005s]\n", + "|-----> ✅ Set PyTorch device finished [0.0008s]\n", "|-----> 🕒 Processing clock: mammalian1\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/mammalian1.pt\n", - "|-----------> ✅ Load clock finished [0.0015s]\n", + "|-----------> ✅ Load clock finished [0.0019s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0006s]\n", + "|-----------> ✅ Check features in adata finished [0.0009s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.0036s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0007s]\n", + "|-----------> ✅ Initialize model finished [0.0010s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0028s]\n", + "|-----------> ✅ Predict ages with model finished [0.0030s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function anti_logp2\n", - "|-----------> ✅ Postprocess data finished [0.0004s]\n", + "|-----------> ✅ Postprocess data finished [0.0006s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0003s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0006s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0011s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0013s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> No missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0016s]\n", + "|-----------> ✅ Return adata to original size finished [0.0019s]\n", "|-----> 🕒 Processing clock: mammalian2\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/mammalian2.pt\n", - "|-----------> ✅ Load clock finished [0.0015s]\n", + "|-----------> ✅ Load clock finished [0.0018s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0009s]\n", + "|-----------> ✅ Check features in adata finished [0.0012s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.0039s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0009s]\n", + "|-----------> ✅ Initialize model finished [0.0008s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0032s]\n", + "|-----------> ✅ Predict ages with model finished [0.0049s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function anti_log_log\n", - "|-----------> ✅ Postprocess data finished [0.0004s]\n", + "|-----------> ✅ Postprocess data finished [0.0011s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0004s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0009s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0008s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0014s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> No missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0016s]\n", + "|-----------> ✅ Return adata to original size finished [0.0020s]\n", "|-----> 🕒 Processing clock: mammalian3\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/mammalian3.pt\n", - "|-----------> ✅ Load clock finished [0.0014s]\n", + "|-----------> ✅ Load clock finished [0.0021s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0008s]\n", + "|-----------> ✅ Check features in adata finished [0.0015s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0003s]\n", + "|-----------> ✅ Preprocess data finished [0.0052s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0008s]\n", + "|-----------> ✅ Initialize model finished [0.0013s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0028s]\n", + "|-----------> ✅ Predict ages with model finished [0.0038s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", - "|-----------> ✅ Postprocess data finished [0.0004s]\n", + "|-----------> ✅ Postprocess data finished [0.0008s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0004s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0006s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0010s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0017s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> No missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0015s]\n", + "|-----------> ✅ Return adata to original size finished [0.0023s]\n", "|-----> 🕒 Processing clock: mammalianlifespan\n", "|-----------> ⚙️ Load clock started\n", "|-----------------> Data found in pyaging_data/mammalianlifespan.pt\n", - "|-----------> ✅ Load clock finished [0.0013s]\n", + "|-----------> ✅ Load clock finished [0.0018s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0006s]\n", + "|-----------> ✅ Check features in adata finished [0.0010s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0004s]\n", + "|-----------> ✅ Preprocess data finished [0.0039s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0007s]\n", + "|-----------> ✅ Initialize model finished [0.0005s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0020s]\n", + "|-----------> ✅ Predict ages with model finished [0.0026s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> Postprocessing data with function anti_log\n", - "|-----------> ✅ Postprocess data finished [0.0004s]\n", + "|-----------> ✅ Postprocess data finished [0.0007s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0004s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0007s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0009s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0011s]\n", "|-----------> ⚙️ Return adata to original size started\n", "|-----------------> No missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0015s]\n", - "|-----> 🎉 Done! [0.2549s]\n" + "|-----------> ✅ Return adata to original size finished [0.0018s]\n", + "|-----> 🎉 Done! [0.3123s]\n" ] } ], diff --git a/tutorials/tutorial_histonemarkchipseq.ipynb b/tutorials/tutorial_histonemarkchipseq.ipynb index 04ff1fc..6ba2b6f 100644 --- a/tutorials/tutorial_histonemarkchipseq.ipynb +++ b/tutorials/tutorial_histonemarkchipseq.ipynb @@ -70,8 +70,9 @@ "output_type": "stream", "text": [ "|-----> 🏗️ Starting download_example_data function\n", - "|-----------> Data found in pyaging_data/ENCFF386QWG.bigWig\n", - "|-----> 🎉 Done! [0.0019s]\n" + "|-----------> Downloading data to pyaging_data/ENCFF386QWG.bigWig\n", + "|-----------> in progress: 100.0000%\n", + "|-----> 🎉 Done! [185.3169s]\n" ] } ], @@ -99,15 +100,16 @@ "text": [ "|-----> 🏗️ Starting bigwig_to_df function\n", "|-----> ⚙️ Load Ensembl genome metadata started\n", - "|-----------> Data found in pyaging_data/Ensembl-105-EnsDb-for-Homo-sapiens-genes.csv\n", - "|-----> ✅ Load Ensembl genome metadata finished [0.2299s]\n", + "|-----------> Downloading data to pyaging_data/Ensembl-105-EnsDb-for-Homo-sapiens-genes.csv\n", + "|-----------> in progress: 100.0000%\n", + "|-----> ✅ Load Ensembl genome metadata finished [4.1207s]\n", "|-----> ⚙️ Processing bigWig files started\n", "|-----------> Processing file: pyaging_data/ENCFF386QWG.bigWig\n", "|-----------> in progress: 100.0000%\n", "|-----------> Processing file: pyaging_data/ENCFF386QWG.bigWig\n", "|-----------> in progress: 100.0000%\n", - "|-----> ✅ Processing bigWig files finished [11.6821s]\n", - "|-----> 🎉 Done! [27.3293s]\n" + "|-----> ✅ Processing bigWig files finished [13.3378s]\n", + "|-----> 🎉 Done! [30.8450s]\n" ] } ], @@ -294,22 +296,22 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.0262s]\n", + "|-----> ✅ Create anndata object finished [0.0430s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------? No metadata provided. Leaving adata.obs empty\n", - "|-----> ⚠️ Add metadata to anndata finished [0.0005s]\n", + "|-----> ⚠️ Add metadata to anndata finished [0.0006s]\n", "|-----> ⚙️ Log data statistics started\n", "|-----------> There are 2 observations\n", "|-----------> There are 62241 features\n", "|-----------> Total missing values: 0\n", "|-----------> Percentage of missing values: 0.00%\n", - "|-----> ✅ Log data statistics finished [0.0014s]\n", + "|-----> ✅ Log data statistics finished [0.0037s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> No missing values found. No imputation necessary\n", - "|-----> ✅ Impute missing values finished [0.0020s]\n", + "|-----> ✅ Impute missing values finished [0.0039s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", - "|-----> ✅ Add unstructured data to anndata finished [0.0003s]\n", - "|-----> 🎉 Done! [0.0334s]\n" + "|-----> ✅ Add unstructured data to anndata finished [0.0017s]\n", + "|-----> 🎉 Done! [0.0596s]\n" ] } ], @@ -378,92 +380,95 @@ "|-----> 🏗️ Starting predict_age function\n", "|-----> ⚙️ Set PyTorch device started\n", "|-----------> Using device: cpu\n", - "|-----> ✅ Set PyTorch device finished [0.0007s]\n", + "|-----> ✅ Set PyTorch device finished [0.0178s]\n", "|-----> 🕒 Processing clock: h3k4me3\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/h3k4me3.pt\n", - "|-----------> ✅ Load clock finished [0.0071s]\n", + "|-----------------> Downloading data to pyaging_data/h3k4me3.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [1.8365s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0013s]\n", + "|-----------> ✅ Check features in adata finished [0.0038s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0005s]\n", + "|-----------> ✅ Preprocess data finished [0.0047s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0020s]\n", + "|-----------> ✅ Initialize model finished [0.0142s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0083s]\n", + "|-----------> ✅ Predict ages with model finished [0.0222s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0008s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", - "|-----------> ✅ Postprocess data finished [0.0006s]\n", + "|-----------> ✅ Postprocess data finished [0.0007s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0006s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0012s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0022s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0028s]\n", + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0032s]\n", "|-----> 🕒 Processing clock: h3k9me3\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/h3k9me3.pt\n", - "|-----------> ✅ Load clock finished [0.0022s]\n", + "|-----------------> Downloading data to pyaging_data/h3k9me3.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [1.1951s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0011s]\n", + "|-----------> ✅ Check features in adata finished [0.0010s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0006s]\n", + "|-----------> ✅ Preprocess data finished [0.0008s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0008s]\n", + "|-----------> ✅ Initialize model finished [0.0014s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0030s]\n", + "|-----------> ✅ Predict ages with model finished [0.0062s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0003s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", - "|-----------> ✅ Postprocess data finished [0.0004s]\n", + "|-----------> ✅ Postprocess data finished [0.0009s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0012s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0014s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0028s]\n", + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0025s]\n", "|-----> 🕒 Processing clock: panhistone\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/panhistone.pt\n", - "|-----------> ✅ Load clock finished [0.0106s]\n", + "|-----------------> Downloading data to pyaging_data/panhistone.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [5.1366s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0028s]\n", + "|-----------> ✅ Check features in adata finished [0.0103s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> There is no preprocessing to be done\n", - "|-----------> ✅ Preprocess data finished [0.0006s]\n", + "|-----------> ✅ Preprocess data finished [0.0027s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0113s]\n", + "|-----------> ✅ Initialize model finished [0.0266s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0059s]\n", + "|-----------> ✅ Predict ages with model finished [0.0166s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0004s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0006s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", "|-----------> ✅ Postprocess data finished [0.0005s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0005s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0014s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", "|-----------> ✅ Add clock metadata to adata.uns finished [0.0012s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0027s]\n", - "|-----> 🎉 Done! [0.2569s]\n" + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0028s]\n", + "|-----> 🎉 Done! [8.8184s]\n" ] } ], @@ -506,24 +511,24 @@ " \n", " \n", " sample1\n", - " 53.998566\n", - " 44.322887\n", - " 54.021847\n", + " 53.998544\n", + " 44.3229\n", + " 54.021884\n", " \n", " \n", " sample2\n", - " 53.998566\n", - " 44.322887\n", - " 54.021847\n", + " 53.998544\n", + " 44.3229\n", + " 54.021884\n", " \n", " \n", "\n", "" ], "text/plain": [ - " h3k4me3 h3k9me3 panhistone\n", - "sample1 53.998566 44.322887 54.021847\n", - "sample2 53.998566 44.322887 54.021847" + " h3k4me3 h3k9me3 panhistone\n", + "sample1 53.998544 44.3229 54.021884\n", + "sample2 53.998544 44.3229 54.021884" ] }, "execution_count": 9, @@ -592,24 +597,24 @@ " \n", " \n", " sample1\n", - " 53.998566\n", - " 44.322887\n", - " 54.021847\n", + " 53.998544\n", + " 44.3229\n", + " 54.021884\n", " \n", " \n", " sample2\n", - " 53.998566\n", - " 44.322887\n", - " 54.021847\n", + " 53.998544\n", + " 44.3229\n", + " 54.021884\n", " \n", " \n", "\n", "" ], "text/plain": [ - " h3k4me3 h3k9me3 panhistone\n", - "sample1 53.998566 44.322887 54.021847\n", - "sample2 53.998566 44.322887 54.021847" + " h3k4me3 h3k9me3 panhistone\n", + "sample1 53.998544 44.3229 54.021884\n", + "sample2 53.998544 44.3229 54.021884" ] }, "execution_count": 11, diff --git a/tutorials/tutorial_rnaseq.ipynb b/tutorials/tutorial_rnaseq.ipynb index b6607e8..82e57d0 100644 --- a/tutorials/tutorial_rnaseq.ipynb +++ b/tutorials/tutorial_rnaseq.ipynb @@ -70,8 +70,9 @@ "output_type": "stream", "text": [ "|-----> 🏗️ Starting download_example_data function\n", - "|-----------> Data found in pyaging_data/GSE65765_CPM.pkl\n", - "|-----> 🎉 Done! [0.0025s]\n" + "|-----------> Downloading data to pyaging_data/GSE65765_CPM.pkl\n", + "|-----------> in progress: 100.0000%\n", + "|-----> 🎉 Done! [1.8189s]\n" ] } ], @@ -318,22 +319,22 @@ "text": [ "|-----> 🏗️ Starting df_to_adata function\n", "|-----> ⚙️ Create anndata object started\n", - "|-----> ✅ Create anndata object finished [0.0223s]\n", + "|-----> ✅ Create anndata object finished [0.0254s]\n", "|-----> ⚙️ Add metadata to anndata started\n", "|-----------? No metadata provided. Leaving adata.obs empty\n", - "|-----> ⚠️ Add metadata to anndata finished [0.0008s]\n", + "|-----> ⚠️ Add metadata to anndata finished [0.0005s]\n", "|-----> ⚙️ Log data statistics started\n", "|-----------> There are 4 observations\n", "|-----------> There are 46755 features\n", "|-----------> Total missing values: 0\n", "|-----------> Percentage of missing values: 0.00%\n", - "|-----> ✅ Log data statistics finished [0.0051s]\n", + "|-----> ✅ Log data statistics finished [0.0036s]\n", "|-----> ⚙️ Impute missing values started\n", "|-----------> No missing values found. No imputation necessary\n", - "|-----> ✅ Impute missing values finished [0.0029s]\n", + "|-----> ✅ Impute missing values finished [0.0034s]\n", "|-----> ⚙️ Add unstructured data to anndata started\n", - "|-----> ✅ Add unstructured data to anndata finished [0.0003s]\n", - "|-----> 🎉 Done! [0.0374s]\n" + "|-----> ✅ Add unstructured data to anndata finished [0.0004s]\n", + "|-----> 🎉 Done! [0.0388s]\n" ] } ], @@ -402,36 +403,37 @@ "|-----> 🏗️ Starting predict_age function\n", "|-----> ⚙️ Set PyTorch device started\n", "|-----------> Using device: cpu\n", - "|-----> ✅ Set PyTorch device finished [0.0016s]\n", + "|-----> ✅ Set PyTorch device finished [0.0011s]\n", "|-----> 🕒 Processing clock: bitage\n", "|-----------> ⚙️ Load clock started\n", - "|-----------------> Data found in pyaging_data/bitage.pt\n", - "|-----------> ✅ Load clock finished [0.0040s]\n", + "|-----------------> Downloading data to pyaging_data/bitage.pt\n", + "|-----------------> in progress: 100.0000%\n", + "|-----------> ✅ Load clock finished [0.7941s]\n", "|-----------> ⚙️ Check features in adata started\n", "|-----------------> All features are present in adata.var_names.\n", - "|-----------> ✅ Check features in adata finished [0.0028s]\n", + "|-----------> ✅ Check features in adata finished [0.0036s]\n", "|-----------> ⚙️ Preprocess data started\n", "|-----------------> Preprocessing data with function binarize\n", - "|-----------> ✅ Preprocess data finished [0.0064s]\n", + "|-----------> ✅ Preprocess data finished [0.0090s]\n", "|-----------> ⚙️ Initialize model started\n", - "|-----------> ✅ Initialize model finished [0.0024s]\n", + "|-----------> ✅ Initialize model finished [0.0034s]\n", "|-----------> ⚙️ Predict ages with model started\n", "|-----------------> in progress: 100.0000%\n", - "|-----------> ✅ Predict ages with model finished [0.0054s]\n", + "|-----------> ✅ Predict ages with model finished [0.0134s]\n", "|-----------> ⚙️ Convert tensor to numpy array started\n", - "|-----------> ✅ Convert tensor to numpy array finished [0.0013s]\n", + "|-----------> ✅ Convert tensor to numpy array finished [0.0010s]\n", "|-----------> ⚙️ Postprocess data started\n", "|-----------------> There is no postprocessing to be done\n", - "|-----------> ✅ Postprocess data finished [0.0018s]\n", + "|-----------> ✅ Postprocess data finished [0.0028s]\n", "|-----------> ⚙️ Add predicted ages to adata started\n", - "|-----------> ✅ Add predicted ages to adata finished [0.0012s]\n", + "|-----------> ✅ Add predicted ages to adata finished [0.0016s]\n", "|-----------> ⚙️ Add clock metadata to adata.uns started\n", "|-----------------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----------> ✅ Add clock metadata to adata.uns finished [0.0027s]\n", + "|-----------> ✅ Add clock metadata to adata.uns finished [0.0048s]\n", "|-----------> ⚙️ Return adata to original size started\n", - "|-----------------> There were no missing features, so adata size did not change\n", - "|-----------> ✅ Return adata to original size finished [0.0034s]\n", - "|-----> 🎉 Done! [0.1209s]\n" + "|-----------------> No missing features, so adata size did not change\n", + "|-----------> ✅ Return adata to original size finished [0.0042s]\n", + "|-----> 🎉 Done! [0.9661s]\n" ] } ], @@ -472,19 +474,19 @@ " \n", " \n", " SRR1793993\n", - " 182.353668\n", + " 182.353658\n", " \n", " \n", " SRR1793991\n", - " 14.950279\n", + " 14.950265\n", " \n", " \n", " SRR1793994\n", - " 251.269928\n", + " 251.269911\n", " \n", " \n", " SRR1793992\n", - " 32.134544\n", + " 32.134522\n", " \n", " \n", "\n", @@ -492,10 +494,10 @@ ], "text/plain": [ " bitage\n", - "SRR1793993 182.353668\n", - "SRR1793991 14.950279\n", - "SRR1793994 251.269928\n", - "SRR1793992 32.134544" + "SRR1793993 182.353658\n", + "SRR1793991 14.950265\n", + "SRR1793994 251.269911\n", + "SRR1793992 32.134522" ] }, "execution_count": 8, @@ -561,19 +563,19 @@ " \n", " \n", " SRR1793993\n", - " 182.353668\n", + " 182.353658\n", " \n", " \n", " SRR1793991\n", - " 14.950279\n", + " 14.950265\n", " \n", " \n", " SRR1793994\n", - " 251.269928\n", + " 251.269911\n", " \n", " \n", " SRR1793992\n", - " 32.134544\n", + " 32.134522\n", " \n", " \n", "\n", @@ -581,10 +583,10 @@ ], "text/plain": [ " bitage\n", - "SRR1793993 182.353668\n", - "SRR1793991 14.950279\n", - "SRR1793994 251.269928\n", - "SRR1793992 32.134544" + "SRR1793993 182.353658\n", + "SRR1793991 14.950265\n", + "SRR1793994 251.269911\n", + "SRR1793992 32.134522" ] }, "execution_count": 10, diff --git a/tutorials/tutorial_utils.ipynb b/tutorials/tutorial_utils.ipynb index c14c5e8..47eb152 100644 --- a/tutorials/tutorial_utils.ipynb +++ b/tutorials/tutorial_utils.ipynb @@ -63,12 +63,12 @@ "|-----> 🏗️ Starting find_clock_by_doi function\n", "|-----> ⚙️ Load all clock metadata started\n", "|-----------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----> ✅ Load all clock metadata finished [0.0017s]\n", + "|-----> ✅ Load all clock metadata finished [0.0013s]\n", "|-----> ⚙️ Searching for clock based on DOI started\n", "|-----------> in progress: 100.0000%\n", - "|-----------> Clocks with DOI https://doi.org/10.1038/s43587-022-00248-2: pchorvath2013, pcphenoage, pcgrimage, pchannum, pcdnamtl, pcskinandblood\n", - "|-----> ✅ Searching for clock based on DOI finished [0.0211s]\n", - "|-----> 🎉 Done! [0.0245s]\n" + "|-----------> Clocks with DOI https://doi.org/10.1038/s43587-022-00248-2: pchorvath2013, pcphenoage, pcgrimage, pchannum, pcdnamtl, hrsinchphenoage, pcskinandblood\n", + "|-----> ✅ Searching for clock based on DOI finished [0.0229s]\n", + "|-----> 🎉 Done! [0.0258s]\n" ] } ], @@ -97,32 +97,35 @@ "|-----> 🏗️ Starting show_all_clocks function\n", "|-----> ⚙️ Load all clock metadata started\n", "|-----------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----> ✅ Load all clock metadata finished [0.0021s]\n", + "|-----> ✅ Load all clock metadata finished [0.0024s]\n", "|-----> ⚙️ Showing all available clock names started\n", - "|-----------> leerpc\n", "|-----------> zhangmortality\n", "|-----------> petkovichblood\n", "|-----------> horvath2013\n", "|-----------> h3k36me3\n", "|-----------> panhistone\n", + "|-----------> knight\n", "|-----------> ocampoatac2\n", + "|-----------> lin\n", + "|-----------> leerobust\n", "|-----------> h3k4me1\n", "|-----------> h3k27ac\n", "|-----------> stubbsmultitissue\n", "|-----------> mammalian1\n", "|-----------> pchorvath2013\n", "|-----------> replitali\n", - "|-----------> leerefinedrpc\n", "|-----------> h3k9me3\n", "|-----------> pcphenoage\n", "|-----------> skinandblood\n", "|-----------> meermultitissue\n", + "|-----------> zhangblup\n", "|-----------> pcgrimage\n", - "|-----------> leecpc\n", "|-----------> dnamphenoage\n", "|-----------> pchannum\n", "|-----------> mammalianlifespan\n", + "|-----------> leecontrol\n", "|-----------> pcdnamtl\n", + "|-----------> leerefinedrobust\n", "|-----------> pedbe\n", "|-----------> thompsonmultitissue\n", "|-----------> dunedinpace\n", @@ -134,13 +137,14 @@ "|-----------> mammalian2\n", "|-----------> altumage\n", "|-----------> h3k4me3\n", + "|-----------> hrsinchphenoage\n", "|-----------> phenoage\n", "|-----------> pcskinandblood\n", "|-----------> zhangen\n", "|-----------> mammalian3\n", "|-----------> hannum\n", - "|-----> ✅ Showing all available clock names finished [0.0158s]\n", - "|-----> 🎉 Done! [0.0218s]\n" + "|-----> ✅ Showing all available clock names finished [0.0218s]\n", + "|-----> 🎉 Done! [0.0286s]\n" ] } ], @@ -177,14 +181,14 @@ "|-----> 🏗️ Starting cite_clock function\n", "|-----> ⚙️ Load all clock metadata started\n", "|-----------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----> ✅ Load all clock metadata finished [0.0023s]\n", + "|-----> ✅ Load all clock metadata finished [0.0015s]\n", "|-----> ⚙️ Searching for citation of clock pchorvath2013 started\n", "|-----------> Citation for pchorvath2013:\n", "|-----------> Higgins-Chen, Albert T., et al. \"A computational solution for bolstering reliability of epigenetic clocks: Implications for clinical trials and longitudinal tracking.\" Nature aging 2.7 (2022): 644-661.\n", "|-----------> Please also consider citing pyaging :)\n", "|-----------> de Lima Camillo, Lucas Paulo. \"pyaging: a Python-based compendium of GPU-optimized aging clocks.\" bioRxiv (2023): 2023-11.\n", - "|-----> ✅ Searching for citation of clock pchorvath2013 finished [0.0032s]\n", - "|-----> 🎉 Done! [0.0104s]\n" + "|-----> ✅ Searching for citation of clock pchorvath2013 finished [0.0012s]\n", + "|-----> 🎉 Done! [0.0046s]\n" ] } ], @@ -221,7 +225,7 @@ "|-----> 🏗️ Starting get_clock_metadata function\n", "|-----> ⚙️ Load all clock metadata started\n", "|-----------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----> ✅ Load all clock metadata finished [0.0032s]\n", + "|-----> ✅ Load all clock metadata finished [0.0015s]\n", "|-----> ⚙️ Showing pchorvath2013 metadata started\n", "|-----------> species: Homo sapiens\n", "|-----------> data_type: methylation\n", @@ -232,8 +236,8 @@ "|-----------> doi: https://doi.org/10.1038/s43587-022-00248-2\n", "|-----------> notes: None\n", "|-----------> implementation_approved_by_author(s): ⌛\n", - "|-----> ✅ Showing pchorvath2013 metadata finished [0.0047s]\n", - "|-----> 🎉 Done! [0.0113s]\n" + "|-----> ✅ Showing pchorvath2013 metadata finished [0.0036s]\n", + "|-----> 🎉 Done! [0.0090s]\n" ] } ], @@ -270,9 +274,10 @@ "|-----> 🏗️ Starting get_clock_weights function\n", "|-----> ⚙️ Load all clock metadata started\n", "|-----------> Data found in pyaging_data/all_clock_metadata.pt\n", - "|-----> ✅ Load all clock metadata finished [0.0023s]\n", - "|-----------> Data found in pyaging_data/pchorvath2013.pt\n", - "|-----> 🎉 Done! [0.0544s]\n" + "|-----> ✅ Load all clock metadata finished [0.0036s]\n", + "|-----------> Downloading data to pyaging_data/pchorvath2013.pt\n", + "|-----------> in progress: 100.0000%\n", + "|-----> 🎉 Done! [12.4210s]\n" ] } ],