diff --git a/clocks/notebooks/stoch.ipynb b/clocks/notebooks/stoch.ipynb new file mode 100644 index 0000000..477ac91 --- /dev/null +++ b/clocks/notebooks/stoch.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2f04eee0-5928-4e74-a754-6dc2e528810c", + "metadata": {}, + "source": [ + "# StocH" + ] + }, + { + "cell_type": "markdown", + "id": "a3f514a3-772c-4a14-afdf-5a8376851ff4", + "metadata": {}, + "source": [ + "## Index\n", + "1. [Instantiate model class](#Instantiate-model-class)\n", + "2. [Define clock metadata](#Define-clock-metadata)\n", + "3. [Download clock dependencies](#Download-clock-dependencies)\n", + "5. [Load features](#Load-features)\n", + "6. [Load weights into base model](#Load-weights-into-base-model)\n", + "7. [Load reference values](#Load-reference-values)\n", + "8. [Load preprocess and postprocess objects](#Load-preprocess-and-postprocess-objects)\n", + "10. [Check all clock parameters](#Check-all-clock-parameters)\n", + "10. [Basic test](#Basic-test)\n", + "11. [Save torch model](#Save-torch-model)\n", + "12. [Clear directory](#Clear-directory)" + ] + }, + { + "cell_type": "markdown", + "id": "d95fafdc-643a-40ea-a689-200bd132e90c", + "metadata": {}, + "source": [ + "Let's first import some packages:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4adfb4de-cd79-4913-a1af-9e23e9e236c9", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import inspect\n", + "import shutil\n", + "import json\n", + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya" + ] + }, + { + "cell_type": "markdown", + "id": "145082e5-ced4-47ae-88c0-cb69773e3c5a", + "metadata": {}, + "source": [ + "## Instantiate model class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8aa77372-7ed3-4da7-abc9-d30372106139", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class StocH(pyagingModel):\n", + " def __init__(self):\n", + " super().__init__()\n", + "\n", + " def preprocess(self, x):\n", + " return x\n", + "\n", + " def postprocess(self, x):\n", + " return x\n", + "\n" + ] + } + ], + "source": [ + "def print_entire_class(cls):\n", + " source = inspect.getsource(cls)\n", + " print(source)\n", + "\n", + "print_entire_class(pya.models.StocH)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "78536494-f1d9-44de-8583-c89a310d2307", + "metadata": {}, + "outputs": [], + "source": [ + "model = pya.models.StocH()" + ] + }, + { + "cell_type": "markdown", + "id": "51f8615e-01fa-4aa5-b196-3ee2b35d261c", + "metadata": {}, + "source": [ + "## Define clock metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6601da9e-8adc-44ee-9308-75e3cd31b816", + "metadata": {}, + "outputs": [], + "source": [ + "model.metadata[\"clock_name\"] = 'stoch'\n", + "model.metadata[\"data_type\"] = 'methylation'\n", + "model.metadata[\"species\"] = 'Homo sapiens'\n", + "model.metadata[\"year\"] = 2024\n", + "model.metadata[\"approved_by_author\"] = '⌛'\n", + "model.metadata[\"citation\"] = \"Tong, Huige, et al. \\\"Quantifying the stochastic component of epigenetic aging.\\\" Nature Aging (2024): 1-16.\"\n", + "model.metadata[\"doi\"] = \"https://doi.org/10.1038/s43587-024-00600-8\"\n", + "model.metadata[\"research_only\"] = None\n", + "model.metadata[\"notes\"] = None" + ] + }, + { + "cell_type": "markdown", + "id": "74492239-5aae-4026-9d90-6bc9c574c110", + "metadata": {}, + "source": [ + "## Download clock dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "192924bd-8553-4840-85e9-3ea02b024b79", + "metadata": {}, + "source": [ + "#### Download directly with curl" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "6675770e-a5d1-40ab-93e1-775f288fed1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "supplementary_url = \"https://figshare.com/ndownloader/files/42406308\"\n", + "supplementary_file_name = \"glmStocAll.Rd\"\n", + "os.system(f\"curl -L -o {supplementary_file_name} {supplementary_url}\")" + ] + }, + { + "cell_type": "markdown", + "id": "aeee6c5a-4e0a-4f2a-acef-d657596f453a", + "metadata": {}, + "source": [ + "#### Download from R package" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "d81f2c9d-362f-43cb-ad52-012e28217164", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting download.r\n" + ] + } + ], + "source": [ + "%%writefile download.r\n", + "\n", + "options(repos = c(CRAN = \"https://cloud.r-project.org/\"))\n", + "\n", + "# Function to extract and save coefficients and intercepts\n", + "ExtractCoefficients <- function(){\n", + " load(\"glmStocALL.Rd\") # Load in stochastic clock information\n", + "\n", + " # Check the loaded object structure\n", + " if (!exists(\"glmStocALL.lo\")) {\n", + " stop(\"The object glmStocALL.lo was not found in the loaded .Rd file.\")\n", + " }\n", + "\n", + " # List to store coefficients and intercepts for each clock\n", + " coefficients_list <- list()\n", + "\n", + " for (c in 1:length(glmStocALL.lo)) {\n", + " glm.o <- glmStocALL.lo[[c]]\n", + "\n", + " # Ensure glm.o is a glmnet object\n", + " if (!inherits(glm.o, \"glmnet\")) {\n", + " warning(paste(\"Object at index\", c, \"is not a glmnet object. Skipping.\"))\n", + " next\n", + " }\n", + "\n", + " # Extract the coefficients and intercept from the final iteration\n", + " intercept <- glm.o$a0[length(glm.o$a0)]\n", + " coefficients <- as.matrix(glm.o$beta)[, length(glm.o$lambda)]\n", + "\n", + " print(length(coefficients))\n", + " print(length(rownames(coefficients)))\n", + "\n", + " # Create a data frame with feature names and coefficients\n", + " coef_df <- data.frame(\n", + " Feature = rownames(as.matrix(glm.o$beta)),\n", + " Coefficient = as.numeric(coefficients),\n", + " Intercept = rep(intercept, length(coefficients))\n", + " )\n", + " \n", + " # Save each clock's coefficients to a CSV file\n", + " write.csv(coef_df, file = paste0(\"Coefficients_Clock_\", c, \".csv\"), row.names = FALSE)\n", + " \n", + " # Append to the list\n", + " coefficients_list[[c]] <- coef_df\n", + " }\n", + "\n", + " return(coefficients_list) # Return the list for further inspection if needed\n", + "}\n", + "\n", + "# Run the function\n", + "coefficients_list <- ExtractCoefficients()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "1ce2bac8-dd33-46cb-a7b6-14a1d0976f05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"Rscript download.r\")" + ] + }, + { + "cell_type": "markdown", + "id": "84930b94-fff8-4e1f-85ef-2194e8a8ee4f", + "metadata": {}, + "source": [ + "## Load features" + ] + }, + { + "cell_type": "markdown", + "id": "dbb77f97-01d4-4c63-aa40-ee24de8bc0e9", + "metadata": {}, + "source": [ + "#### From CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "110a5ded-d25f-4cef-8e84-4f51210dfc26", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('Coefficients_Clock_1.csv')\n", + "df['feature'] = df['Feature']\n", + "df['coefficient'] = df['Coefficient']\n", + "model.features = df['feature'].tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "f81dd175-8773-47da-864a-643f45195bf2", + "metadata": {}, + "source": [ + "## Load weights into base model" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "e09b3463-4fd4-41b1-ac21-e63ddd223fe0", + "metadata": {}, + "outputs": [], + "source": [ + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['Intercept'][0]])" + ] + }, + { + "cell_type": "markdown", + "id": "3bbfeba6-07a3-49c6-b56a-0b9c1c882167", + "metadata": {}, + "source": [ + "#### Linear model" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "d7f43b99-26f2-4622-9a76-316712058877", + "metadata": {}, + "outputs": [], + "source": [ + "base_model = pya.models.LinearModel(input_dim=len(model.features))\n", + "\n", + "base_model.linear.weight.data = weights.float()\n", + "base_model.linear.bias.data = intercept.float()\n", + "\n", + "model.base_model = base_model" + ] + }, + { + "cell_type": "markdown", + "id": "b43d29e6-ec61-450c-be21-989ad9eaebb4", + "metadata": {}, + "source": [ + "## Load reference values" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "ade0f4c9-2298-4fc3-bb72-d200907dd731", + "metadata": {}, + "outputs": [], + "source": [ + "model.reference_values = None" + ] + }, + { + "cell_type": "markdown", + "id": "b42caeae-f255-45aa-9f00-3bed6ef7d26f", + "metadata": {}, + "source": [ + "## Load preprocess and postprocess objects" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "7a22fb20-c605-424d-8efb-7620c2c0755c", + "metadata": {}, + "outputs": [], + "source": [ + "model.preprocess_name = None\n", + "model.preprocess_dependencies = None" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "ff4a21cb-cf41-44dc-9ed1-95cf8aa15772", + "metadata": {}, + "outputs": [], + "source": [ + "model.postprocess_name = None\n", + "model.postprocess_dependencies = None" + ] + }, + { + "cell_type": "markdown", + "id": "2466d7e7-5f1e-4d4a-81f4-721e56958378", + "metadata": {}, + "source": [ + "## Check all clock parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "2168355c-47d9-475d-b816-49f65e74887c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "%==================================== Model Details ====================================%\n", + "Model Attributes:\n", + "\n", + "training: True\n", + "metadata: {'approved_by_author': '⌛',\n", + " 'citation': 'Tong, Huige, et al. \"Quantifying the stochastic component of '\n", + " 'epigenetic aging.\" Nature Aging (2024): 1-16.',\n", + " 'clock_name': 'stoch',\n", + " 'data_type': 'methylation',\n", + " 'doi': 'https://doi.org/10.1038/s43587-024-00600-8',\n", + " 'notes': None,\n", + " 'research_only': None,\n", + " 'species': 'Homo sapiens',\n", + " 'version': None,\n", + " 'year': 2024}\n", + "reference_values: None\n", + "preprocess_name: None\n", + "preprocess_dependencies: None\n", + "postprocess_name: None\n", + "postprocess_dependencies: None\n", + "features: ['cg00075967', 'cg00374717', 'cg00864867', 'cg00945507', 'cg01027739', 'cg01353448', 'cg01584473', 'cg01644850', 'cg01656216', 'cg01873645', 'cg01968178', 'cg02085507', 'cg02154074', 'cg02217159', 'cg02331561', 'cg02332492', 'cg02364642', 'cg02388150', 'cg02479575', 'cg02489552', 'cg02580606', 'cg02654291', 'cg02827112', 'cg02972551', 'cg03103192', 'cg03167275', 'cg03270204', 'cg03565323', 'cg03588357', 'cg03760483']... [Total elements: 353]\n", + "base_model_features: None\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Structure:\n", + "\n", + "base_model: LinearModel(\n", + " (linear): Linear(in_features=353, out_features=1, bias=True)\n", + ")\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Parameters and Weights:\n", + "\n", + "base_model.linear.weight: [3.585235357284546, 0.29056739807128906, 0.008150330744683743, 7.167356014251709, 0.07318803668022156, 0.14952702820301056, -0.12038026005029678, -0.6500811576843262, -0.24336983263492584, 0.24592465162277222, -8.944670844357461e-05, -0.2048512101173401, 0.3703913986682892, -1.0299664735794067, 1.7403517961502075, -0.7057934403419495, 0.5467443466186523, 5.111024856567383, 7.80165433883667, 4.5496368408203125, 0.3366563022136688, 1.6183545589447021, 0.034926775842905045, -5.03125524520874, 6.2505011558532715, -2.024871349334717, 0.145379438996315, 0.5371573567390442, -0.9422363042831421, 0.05253010243177414]... [Tensor of shape torch.Size([1, 353])]\n", + "base_model.linear.bias: tensor([59.8016])\n", + "\n", + "%==================================== Model Details ====================================%\n", + "\n" + ] + } + ], + "source": [ + "pya.utils.print_model_details(model)" + ] + }, + { + "cell_type": "markdown", + "id": "78e2387c-6de1-4073-b4a5-b8b8e430abdb", + "metadata": {}, + "source": [ + "## Basic test" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "936b9877-d076-4ced-99aa-e8d4c58c5caf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 18.5127],\n", + " [146.4057],\n", + " [166.5776],\n", + " [ 85.6306],\n", + " [379.5047],\n", + " [-99.5351],\n", + " [ 42.5195],\n", + " [234.2738],\n", + " [213.7955],\n", + " [ 62.3945]], dtype=torch.float64, grad_fn=)" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.manual_seed(42)\n", + "input = torch.randn(10, len(model.features), dtype=float)\n", + "model.eval()\n", + "model.to(float)\n", + "pred = model(input)\n", + "pred" + ] + }, + { + "cell_type": "markdown", + "id": "75642087-b880-429b-b19b-c1eaea33614f", + "metadata": {}, + "source": [ + "## Save torch model" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "5ef2fa8d-c80b-4fdd-8555-79c0d541788e", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model, f\"../weights/{model.metadata['clock_name']}.pt\")" + ] + }, + { + "cell_type": "markdown", + "id": "f65d9bb5-5baa-486b-bf25-f68f542bd5b7", + "metadata": {}, + "source": [ + "## Clear directory\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "11aeaa70-44c0-42f9-86d7-740e3849a7a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleted file: glmStocAll.Rd\n", + "Deleted file: download.r\n", + "Deleted folder: .ipynb_checkpoints\n", + "Deleted file: Coefficients_Clock_3.csv\n", + "Deleted file: Coefficients_Clock_2.csv\n", + "Deleted file: Coefficients_Clock_1.csv\n" + ] + } + ], + "source": [ + "# Function to remove a folder and all its contents\n", + "def remove_folder(path):\n", + " try:\n", + " shutil.rmtree(path)\n", + " print(f\"Deleted folder: {path}\")\n", + " except Exception as e:\n", + " print(f\"Error deleting folder {path}: {e}\")\n", + "\n", + "# Get a list of all files and folders in the current directory\n", + "all_items = os.listdir('.')\n", + "\n", + "# Loop through the items\n", + "for item in all_items:\n", + " # Check if it's a file and does not end with .ipynb\n", + " if os.path.isfile(item) and not item.endswith('.ipynb'):\n", + " os.remove(item)\n", + " print(f\"Deleted file: {item}\")\n", + " # Check if it's a folder\n", + " elif os.path.isdir(item):\n", + " remove_folder(item)" + ] + } + ], + "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/stocp.ipynb b/clocks/notebooks/stocp.ipynb new file mode 100644 index 0000000..a9f3fcd --- /dev/null +++ b/clocks/notebooks/stocp.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2f04eee0-5928-4e74-a754-6dc2e528810c", + "metadata": {}, + "source": [ + "# StocP" + ] + }, + { + "cell_type": "markdown", + "id": "a3f514a3-772c-4a14-afdf-5a8376851ff4", + "metadata": {}, + "source": [ + "## Index\n", + "1. [Instantiate model class](#Instantiate-model-class)\n", + "2. [Define clock metadata](#Define-clock-metadata)\n", + "3. [Download clock dependencies](#Download-clock-dependencies)\n", + "5. [Load features](#Load-features)\n", + "6. [Load weights into base model](#Load-weights-into-base-model)\n", + "7. [Load reference values](#Load-reference-values)\n", + "8. [Load preprocess and postprocess objects](#Load-preprocess-and-postprocess-objects)\n", + "10. [Check all clock parameters](#Check-all-clock-parameters)\n", + "10. [Basic test](#Basic-test)\n", + "11. [Save torch model](#Save-torch-model)\n", + "12. [Clear directory](#Clear-directory)" + ] + }, + { + "cell_type": "markdown", + "id": "d95fafdc-643a-40ea-a689-200bd132e90c", + "metadata": {}, + "source": [ + "Let's first import some packages:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4adfb4de-cd79-4913-a1af-9e23e9e236c9", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import inspect\n", + "import shutil\n", + "import json\n", + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya" + ] + }, + { + "cell_type": "markdown", + "id": "145082e5-ced4-47ae-88c0-cb69773e3c5a", + "metadata": {}, + "source": [ + "## Instantiate model class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8aa77372-7ed3-4da7-abc9-d30372106139", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class StocP(pyagingModel):\n", + " def __init__(self):\n", + " super().__init__()\n", + "\n", + " def preprocess(self, x):\n", + " return x\n", + "\n", + " def postprocess(self, x):\n", + " return x\n", + "\n" + ] + } + ], + "source": [ + "def print_entire_class(cls):\n", + " source = inspect.getsource(cls)\n", + " print(source)\n", + "\n", + "print_entire_class(pya.models.StocP)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "78536494-f1d9-44de-8583-c89a310d2307", + "metadata": {}, + "outputs": [], + "source": [ + "model = pya.models.StocP()" + ] + }, + { + "cell_type": "markdown", + "id": "51f8615e-01fa-4aa5-b196-3ee2b35d261c", + "metadata": {}, + "source": [ + "## Define clock metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6601da9e-8adc-44ee-9308-75e3cd31b816", + "metadata": {}, + "outputs": [], + "source": [ + "model.metadata[\"clock_name\"] = 'stocp'\n", + "model.metadata[\"data_type\"] = 'methylation'\n", + "model.metadata[\"species\"] = 'Homo sapiens'\n", + "model.metadata[\"year\"] = 2024\n", + "model.metadata[\"approved_by_author\"] = '⌛'\n", + "model.metadata[\"citation\"] = \"Tong, Huige, et al. \\\"Quantifying the stochastic component of epigenetic aging.\\\" Nature Aging (2024): 1-16.\"\n", + "model.metadata[\"doi\"] = \"https://doi.org/10.1038/s43587-024-00600-8\"\n", + "model.metadata[\"research_only\"] = None\n", + "model.metadata[\"notes\"] = None" + ] + }, + { + "cell_type": "markdown", + "id": "74492239-5aae-4026-9d90-6bc9c574c110", + "metadata": {}, + "source": [ + "## Download clock dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "192924bd-8553-4840-85e9-3ea02b024b79", + "metadata": {}, + "source": [ + "#### Download directly with curl" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6675770e-a5d1-40ab-93e1-775f288fed1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "supplementary_url = \"https://figshare.com/ndownloader/files/42406308\"\n", + "supplementary_file_name = \"glmStocAll.Rd\"\n", + "os.system(f\"curl -L -o {supplementary_file_name} {supplementary_url}\")" + ] + }, + { + "cell_type": "markdown", + "id": "aeee6c5a-4e0a-4f2a-acef-d657596f453a", + "metadata": {}, + "source": [ + "#### Download from R package" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d81f2c9d-362f-43cb-ad52-012e28217164", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing download.r\n" + ] + } + ], + "source": [ + "%%writefile download.r\n", + "\n", + "options(repos = c(CRAN = \"https://cloud.r-project.org/\"))\n", + "\n", + "# Function to extract and save coefficients and intercepts\n", + "ExtractCoefficients <- function(){\n", + " load(\"glmStocALL.Rd\") # Load in stochastic clock information\n", + "\n", + " # Check the loaded object structure\n", + " if (!exists(\"glmStocALL.lo\")) {\n", + " stop(\"The object glmStocALL.lo was not found in the loaded .Rd file.\")\n", + " }\n", + "\n", + " # List to store coefficients and intercepts for each clock\n", + " coefficients_list <- list()\n", + "\n", + " for (c in 1:length(glmStocALL.lo)) {\n", + " glm.o <- glmStocALL.lo[[c]]\n", + "\n", + " # Ensure glm.o is a glmnet object\n", + " if (!inherits(glm.o, \"glmnet\")) {\n", + " warning(paste(\"Object at index\", c, \"is not a glmnet object. Skipping.\"))\n", + " next\n", + " }\n", + "\n", + " # Extract the coefficients and intercept from the final iteration\n", + " intercept <- glm.o$a0[length(glm.o$a0)]\n", + " coefficients <- as.matrix(glm.o$beta)[, length(glm.o$lambda)]\n", + "\n", + " print(length(coefficients))\n", + " print(length(rownames(coefficients)))\n", + "\n", + " # Create a data frame with feature names and coefficients\n", + " coef_df <- data.frame(\n", + " Feature = rownames(as.matrix(glm.o$beta)),\n", + " Coefficient = as.numeric(coefficients),\n", + " Intercept = rep(intercept, length(coefficients))\n", + " )\n", + " \n", + " # Save each clock's coefficients to a CSV file\n", + " write.csv(coef_df, file = paste0(\"Coefficients_Clock_\", c, \".csv\"), row.names = FALSE)\n", + " \n", + " # Append to the list\n", + " coefficients_list[[c]] <- coef_df\n", + " }\n", + "\n", + " return(coefficients_list) # Return the list for further inspection if needed\n", + "}\n", + "\n", + "# Run the function\n", + "coefficients_list <- ExtractCoefficients()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1ce2bac8-dd33-46cb-a7b6-14a1d0976f05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"Rscript download.r\")" + ] + }, + { + "cell_type": "markdown", + "id": "84930b94-fff8-4e1f-85ef-2194e8a8ee4f", + "metadata": {}, + "source": [ + "## Load features" + ] + }, + { + "cell_type": "markdown", + "id": "dbb77f97-01d4-4c63-aa40-ee24de8bc0e9", + "metadata": {}, + "source": [ + "#### From CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "110a5ded-d25f-4cef-8e84-4f51210dfc26", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('Coefficients_Clock_3.csv')\n", + "df['feature'] = df['Feature']\n", + "df['coefficient'] = df['Coefficient']\n", + "model.features = df['feature'].tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "f81dd175-8773-47da-864a-643f45195bf2", + "metadata": {}, + "source": [ + "## Load weights into base model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e09b3463-4fd4-41b1-ac21-e63ddd223fe0", + "metadata": {}, + "outputs": [], + "source": [ + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['Intercept'][0]])" + ] + }, + { + "cell_type": "markdown", + "id": "3bbfeba6-07a3-49c6-b56a-0b9c1c882167", + "metadata": {}, + "source": [ + "#### Linear model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d7f43b99-26f2-4622-9a76-316712058877", + "metadata": {}, + "outputs": [], + "source": [ + "base_model = pya.models.LinearModel(input_dim=len(model.features))\n", + "\n", + "base_model.linear.weight.data = weights.float()\n", + "base_model.linear.bias.data = intercept.float()\n", + "\n", + "model.base_model = base_model" + ] + }, + { + "cell_type": "markdown", + "id": "b43d29e6-ec61-450c-be21-989ad9eaebb4", + "metadata": {}, + "source": [ + "## Load reference values" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ade0f4c9-2298-4fc3-bb72-d200907dd731", + "metadata": {}, + "outputs": [], + "source": [ + "model.reference_values = None" + ] + }, + { + "cell_type": "markdown", + "id": "b42caeae-f255-45aa-9f00-3bed6ef7d26f", + "metadata": {}, + "source": [ + "## Load preprocess and postprocess objects" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7a22fb20-c605-424d-8efb-7620c2c0755c", + "metadata": {}, + "outputs": [], + "source": [ + "model.preprocess_name = None\n", + "model.preprocess_dependencies = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ff4a21cb-cf41-44dc-9ed1-95cf8aa15772", + "metadata": {}, + "outputs": [], + "source": [ + "model.postprocess_name = None\n", + "model.postprocess_dependencies = None" + ] + }, + { + "cell_type": "markdown", + "id": "2466d7e7-5f1e-4d4a-81f4-721e56958378", + "metadata": {}, + "source": [ + "## Check all clock parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2168355c-47d9-475d-b816-49f65e74887c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "%==================================== Model Details ====================================%\n", + "Model Attributes:\n", + "\n", + "training: True\n", + "metadata: {'approved_by_author': '⌛',\n", + " 'citation': 'Tong, Huige, et al. \"Quantifying the stochastic component of '\n", + " 'epigenetic aging.\" Nature Aging (2024): 1-16.',\n", + " 'clock_name': 'stocp',\n", + " 'data_type': 'methylation',\n", + " 'doi': 'https://doi.org/10.1038/s43587-024-00600-8',\n", + " 'notes': None,\n", + " 'research_only': None,\n", + " 'species': 'Homo sapiens',\n", + " 'version': None,\n", + " 'year': 2024}\n", + "reference_values: None\n", + "preprocess_name: None\n", + "preprocess_dependencies: None\n", + "postprocess_name: None\n", + "postprocess_dependencies: None\n", + "features: ['cg15611364', 'cg17605084', 'cg26382071', 'cg12743894', 'cg19287114', 'cg12985418', 'cg19398783', 'cg15963417', 'cg27187881', 'cg09892203', 'cg00943950', 'cg18996776', 'cg16340918', 'cg23832061', 'cg22736354', 'cg04084157', 'cg07265300', 'cg02503970', 'cg11426590', 'cg23710218', 'cg02802055', 'cg13631913', 'cg06493994', 'cg24304712', 'cg01131735', 'cg24208206', 'cg01930621', 'cg19104072', 'cg07850604', 'cg27493997']... [Total elements: 513]\n", + "base_model_features: None\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Structure:\n", + "\n", + "base_model: LinearModel(\n", + " (linear): Linear(in_features=513, out_features=1, bias=True)\n", + ")\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Parameters and Weights:\n", + "\n", + "base_model.linear.weight: [-0.26072555780410767, -0.4015197157859802, 0.04175494238734245, 0.08702494204044342, -0.13476140797138214, 0.016701284795999527, 0.07106481492519379, 0.23266158998012543, -0.01433953084051609, -0.9317121505737305, -0.005014453548938036, 0.4903888404369354, -1.6926921606063843, -0.523848831653595, 4.922214031219482, 1.7051185369491577, -0.011739220470190048, -0.7235432863235474, -0.06498837471008301, -0.6380035281181335, 0.22486011683940887, 0.013822232373058796, 10.945517539978027, 0.04070192202925682, -0.028888650238513947, 0.16922490298748016, 0.6264103651046753, -0.018560025840997696, -1.6304043531417847, 0.083981454372406]... [Tensor of shape torch.Size([1, 513])]\n", + "base_model.linear.bias: tensor([92.8311])\n", + "\n", + "%==================================== Model Details ====================================%\n", + "\n" + ] + } + ], + "source": [ + "pya.utils.print_model_details(model)" + ] + }, + { + "cell_type": "markdown", + "id": "78e2387c-6de1-4073-b4a5-b8b8e430abdb", + "metadata": {}, + "source": [ + "## Basic test" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "936b9877-d076-4ced-99aa-e8d4c58c5caf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 272.9167],\n", + " [ -8.4764],\n", + " [-152.8284],\n", + " [ 167.9197],\n", + " [ -3.3252],\n", + " [ 154.7005],\n", + " [ 2.9908],\n", + " [ 57.1228],\n", + " [ 123.9416],\n", + " [ 83.7115]], dtype=torch.float64, grad_fn=)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.manual_seed(42)\n", + "input = torch.randn(10, len(model.features), dtype=float)\n", + "model.eval()\n", + "model.to(float)\n", + "pred = model(input)\n", + "pred" + ] + }, + { + "cell_type": "markdown", + "id": "75642087-b880-429b-b19b-c1eaea33614f", + "metadata": {}, + "source": [ + "## Save torch model" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5ef2fa8d-c80b-4fdd-8555-79c0d541788e", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model, f\"../weights/{model.metadata['clock_name']}.pt\")" + ] + }, + { + "cell_type": "markdown", + "id": "f65d9bb5-5baa-486b-bf25-f68f542bd5b7", + "metadata": {}, + "source": [ + "## Clear directory\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "11aeaa70-44c0-42f9-86d7-740e3849a7a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleted file: glmStocAll.Rd\n", + "Deleted file: download.r\n", + "Deleted folder: .ipynb_checkpoints\n", + "Deleted file: Coefficients_Clock_3.csv\n", + "Deleted file: Coefficients_Clock_2.csv\n", + "Deleted file: Coefficients_Clock_1.csv\n" + ] + } + ], + "source": [ + "# Function to remove a folder and all its contents\n", + "def remove_folder(path):\n", + " try:\n", + " shutil.rmtree(path)\n", + " print(f\"Deleted folder: {path}\")\n", + " except Exception as e:\n", + " print(f\"Error deleting folder {path}: {e}\")\n", + "\n", + "# Get a list of all files and folders in the current directory\n", + "all_items = os.listdir('.')\n", + "\n", + "# Loop through the items\n", + "for item in all_items:\n", + " # Check if it's a file and does not end with .ipynb\n", + " if os.path.isfile(item) and not item.endswith('.ipynb'):\n", + " os.remove(item)\n", + " print(f\"Deleted file: {item}\")\n", + " # Check if it's a folder\n", + " elif os.path.isdir(item):\n", + " remove_folder(item)" + ] + } + ], + "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/stocz.ipynb b/clocks/notebooks/stocz.ipynb new file mode 100644 index 0000000..a2b108e --- /dev/null +++ b/clocks/notebooks/stocz.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2f04eee0-5928-4e74-a754-6dc2e528810c", + "metadata": {}, + "source": [ + "# StocZ" + ] + }, + { + "cell_type": "markdown", + "id": "a3f514a3-772c-4a14-afdf-5a8376851ff4", + "metadata": {}, + "source": [ + "## Index\n", + "1. [Instantiate model class](#Instantiate-model-class)\n", + "2. [Define clock metadata](#Define-clock-metadata)\n", + "3. [Download clock dependencies](#Download-clock-dependencies)\n", + "5. [Load features](#Load-features)\n", + "6. [Load weights into base model](#Load-weights-into-base-model)\n", + "7. [Load reference values](#Load-reference-values)\n", + "8. [Load preprocess and postprocess objects](#Load-preprocess-and-postprocess-objects)\n", + "10. [Check all clock parameters](#Check-all-clock-parameters)\n", + "10. [Basic test](#Basic-test)\n", + "11. [Save torch model](#Save-torch-model)\n", + "12. [Clear directory](#Clear-directory)" + ] + }, + { + "cell_type": "markdown", + "id": "d95fafdc-643a-40ea-a689-200bd132e90c", + "metadata": {}, + "source": [ + "Let's first import some packages:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4adfb4de-cd79-4913-a1af-9e23e9e236c9", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import inspect\n", + "import shutil\n", + "import json\n", + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya" + ] + }, + { + "cell_type": "markdown", + "id": "145082e5-ced4-47ae-88c0-cb69773e3c5a", + "metadata": {}, + "source": [ + "## Instantiate model class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8aa77372-7ed3-4da7-abc9-d30372106139", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class StocZ(pyagingModel):\n", + " def __init__(self):\n", + " super().__init__()\n", + "\n", + " def preprocess(self, x):\n", + " return x\n", + "\n", + " def postprocess(self, x):\n", + " return x\n", + "\n" + ] + } + ], + "source": [ + "def print_entire_class(cls):\n", + " source = inspect.getsource(cls)\n", + " print(source)\n", + "\n", + "print_entire_class(pya.models.StocZ)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "78536494-f1d9-44de-8583-c89a310d2307", + "metadata": {}, + "outputs": [], + "source": [ + "model = pya.models.StocZ()" + ] + }, + { + "cell_type": "markdown", + "id": "51f8615e-01fa-4aa5-b196-3ee2b35d261c", + "metadata": {}, + "source": [ + "## Define clock metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6601da9e-8adc-44ee-9308-75e3cd31b816", + "metadata": {}, + "outputs": [], + "source": [ + "model.metadata[\"clock_name\"] = 'stocz'\n", + "model.metadata[\"data_type\"] = 'methylation'\n", + "model.metadata[\"species\"] = 'Homo sapiens'\n", + "model.metadata[\"year\"] = 2024\n", + "model.metadata[\"approved_by_author\"] = '⌛'\n", + "model.metadata[\"citation\"] = \"Tong, Huige, et al. \\\"Quantifying the stochastic component of epigenetic aging.\\\" Nature Aging (2024): 1-16.\"\n", + "model.metadata[\"doi\"] = \"https://doi.org/10.1038/s43587-024-00600-8\"\n", + "model.metadata[\"research_only\"] = None\n", + "model.metadata[\"notes\"] = None" + ] + }, + { + "cell_type": "markdown", + "id": "74492239-5aae-4026-9d90-6bc9c574c110", + "metadata": {}, + "source": [ + "## Download clock dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "192924bd-8553-4840-85e9-3ea02b024b79", + "metadata": {}, + "source": [ + "#### Download directly with curl" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6675770e-a5d1-40ab-93e1-775f288fed1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "supplementary_url = \"https://figshare.com/ndownloader/files/42406308\"\n", + "supplementary_file_name = \"glmStocAll.Rd\"\n", + "os.system(f\"curl -L -o {supplementary_file_name} {supplementary_url}\")" + ] + }, + { + "cell_type": "markdown", + "id": "aeee6c5a-4e0a-4f2a-acef-d657596f453a", + "metadata": {}, + "source": [ + "#### Download from R package" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d81f2c9d-362f-43cb-ad52-012e28217164", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing download.r\n" + ] + } + ], + "source": [ + "%%writefile download.r\n", + "\n", + "options(repos = c(CRAN = \"https://cloud.r-project.org/\"))\n", + "\n", + "# Function to extract and save coefficients and intercepts\n", + "ExtractCoefficients <- function(){\n", + " load(\"glmStocALL.Rd\") # Load in stochastic clock information\n", + "\n", + " # Check the loaded object structure\n", + " if (!exists(\"glmStocALL.lo\")) {\n", + " stop(\"The object glmStocALL.lo was not found in the loaded .Rd file.\")\n", + " }\n", + "\n", + " # List to store coefficients and intercepts for each clock\n", + " coefficients_list <- list()\n", + "\n", + " for (c in 1:length(glmStocALL.lo)) {\n", + " glm.o <- glmStocALL.lo[[c]]\n", + "\n", + " # Ensure glm.o is a glmnet object\n", + " if (!inherits(glm.o, \"glmnet\")) {\n", + " warning(paste(\"Object at index\", c, \"is not a glmnet object. Skipping.\"))\n", + " next\n", + " }\n", + "\n", + " # Extract the coefficients and intercept from the final iteration\n", + " intercept <- glm.o$a0[length(glm.o$a0)]\n", + " coefficients <- as.matrix(glm.o$beta)[, length(glm.o$lambda)]\n", + "\n", + " print(length(coefficients))\n", + " print(length(rownames(coefficients)))\n", + "\n", + " # Create a data frame with feature names and coefficients\n", + " coef_df <- data.frame(\n", + " Feature = rownames(as.matrix(glm.o$beta)),\n", + " Coefficient = as.numeric(coefficients),\n", + " Intercept = rep(intercept, length(coefficients))\n", + " )\n", + " \n", + " # Save each clock's coefficients to a CSV file\n", + " write.csv(coef_df, file = paste0(\"Coefficients_Clock_\", c, \".csv\"), row.names = FALSE)\n", + " \n", + " # Append to the list\n", + " coefficients_list[[c]] <- coef_df\n", + " }\n", + "\n", + " return(coefficients_list) # Return the list for further inspection if needed\n", + "}\n", + "\n", + "# Run the function\n", + "coefficients_list <- ExtractCoefficients()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1ce2bac8-dd33-46cb-a7b6-14a1d0976f05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"Rscript download.r\")" + ] + }, + { + "cell_type": "markdown", + "id": "84930b94-fff8-4e1f-85ef-2194e8a8ee4f", + "metadata": {}, + "source": [ + "## Load features" + ] + }, + { + "cell_type": "markdown", + "id": "dbb77f97-01d4-4c63-aa40-ee24de8bc0e9", + "metadata": {}, + "source": [ + "#### From CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "110a5ded-d25f-4cef-8e84-4f51210dfc26", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('Coefficients_Clock_2.csv')\n", + "df['feature'] = df['Feature']\n", + "df['coefficient'] = df['Coefficient']\n", + "model.features = df['feature'].tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "f81dd175-8773-47da-864a-643f45195bf2", + "metadata": {}, + "source": [ + "## Load weights into base model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e09b3463-4fd4-41b1-ac21-e63ddd223fe0", + "metadata": {}, + "outputs": [], + "source": [ + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['Intercept'][0]])" + ] + }, + { + "cell_type": "markdown", + "id": "3bbfeba6-07a3-49c6-b56a-0b9c1c882167", + "metadata": {}, + "source": [ + "#### Linear model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d7f43b99-26f2-4622-9a76-316712058877", + "metadata": {}, + "outputs": [], + "source": [ + "base_model = pya.models.LinearModel(input_dim=len(model.features))\n", + "\n", + "base_model.linear.weight.data = weights.float()\n", + "base_model.linear.bias.data = intercept.float()\n", + "\n", + "model.base_model = base_model" + ] + }, + { + "cell_type": "markdown", + "id": "b43d29e6-ec61-450c-be21-989ad9eaebb4", + "metadata": {}, + "source": [ + "## Load reference values" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ade0f4c9-2298-4fc3-bb72-d200907dd731", + "metadata": {}, + "outputs": [], + "source": [ + "model.reference_values = None" + ] + }, + { + "cell_type": "markdown", + "id": "b42caeae-f255-45aa-9f00-3bed6ef7d26f", + "metadata": {}, + "source": [ + "## Load preprocess and postprocess objects" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7a22fb20-c605-424d-8efb-7620c2c0755c", + "metadata": {}, + "outputs": [], + "source": [ + "model.preprocess_name = None\n", + "model.preprocess_dependencies = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ff4a21cb-cf41-44dc-9ed1-95cf8aa15772", + "metadata": {}, + "outputs": [], + "source": [ + "model.postprocess_name = None\n", + "model.postprocess_dependencies = None" + ] + }, + { + "cell_type": "markdown", + "id": "2466d7e7-5f1e-4d4a-81f4-721e56958378", + "metadata": {}, + "source": [ + "## Check all clock parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2168355c-47d9-475d-b816-49f65e74887c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "%==================================== Model Details ====================================%\n", + "Model Attributes:\n", + "\n", + "training: True\n", + "metadata: {'approved_by_author': '⌛',\n", + " 'citation': 'Tong, Huige, et al. \"Quantifying the stochastic component of '\n", + " 'epigenetic aging.\" Nature Aging (2024): 1-16.',\n", + " 'clock_name': 'stocz',\n", + " 'data_type': 'methylation',\n", + " 'doi': 'https://doi.org/10.1038/s43587-024-00600-8',\n", + " 'notes': None,\n", + " 'research_only': None,\n", + " 'species': 'Homo sapiens',\n", + " 'version': None,\n", + " 'year': 2024}\n", + "reference_values: None\n", + "preprocess_name: None\n", + "preprocess_dependencies: None\n", + "postprocess_name: None\n", + "postprocess_dependencies: None\n", + "features: ['cg24611351', 'cg24173182', 'cg09604333', 'cg13617776', 'cg09432590', 'cg05516505', 'cg12757684', 'cg23606718', 'cg20050761', 'cg22452230', 'cg05898618', 'cg01620164', 'cg06758350', 'cg23615741', 'cg09692396', 'cg02046143', 'cg08540945', 'cg11714320', 'cg22708738', 'cg21567504', 'cg08313880', 'cg03527802', 'cg23995914', 'cg04027548', 'cg07077459', 'cg03025830', 'cg07978099', 'cg24349631', 'cg04218760', 'cg24788483']... [Total elements: 514]\n", + "base_model_features: None\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Structure:\n", + "\n", + "base_model: LinearModel(\n", + " (linear): Linear(in_features=514, out_features=1, bias=True)\n", + ")\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Parameters and Weights:\n", + "\n", + "base_model.linear.weight: [-3.350179433822632, -0.036642078310251236, -0.05118434131145477, 0.13607171177864075, -0.6929044127464294, -8.596583366394043, -0.023057660087943077, 22.69631576538086, 0.00651215435937047, -1.4592914581298828, -0.09501103311777115, -0.12129057198762894, -0.08514729142189026, -0.0008293375140056014, 0.4517977833747864, -0.3498646914958954, 15.742756843566895, -0.005218011327087879, -0.37894847989082336, -0.02003936469554901, 0.29712849855422974, -0.18342454731464386, -0.31919535994529724, -2.756777286529541, -2.310011625289917, 0.009594087488949299, 0.0197058767080307, 0.18678680062294006, 0.004259498789906502, -3.520700216293335]... [Tensor of shape torch.Size([1, 514])]\n", + "base_model.linear.bias: tensor([64.8077])\n", + "\n", + "%==================================== Model Details ====================================%\n", + "\n" + ] + } + ], + "source": [ + "pya.utils.print_model_details(model)" + ] + }, + { + "cell_type": "markdown", + "id": "78e2387c-6de1-4073-b4a5-b8b8e430abdb", + "metadata": {}, + "source": [ + "## Basic test" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "936b9877-d076-4ced-99aa-e8d4c58c5caf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ -65.2707],\n", + " [-228.6931],\n", + " [ 81.9692],\n", + " [ 186.4775],\n", + " [ -30.6134],\n", + " [ 20.5118],\n", + " [ 50.0692],\n", + " [ 127.1051],\n", + " [ 150.1440],\n", + " [ -14.1187]], dtype=torch.float64, grad_fn=)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.manual_seed(42)\n", + "input = torch.randn(10, len(model.features), dtype=float)\n", + "model.eval()\n", + "model.to(float)\n", + "pred = model(input)\n", + "pred" + ] + }, + { + "cell_type": "markdown", + "id": "75642087-b880-429b-b19b-c1eaea33614f", + "metadata": {}, + "source": [ + "## Save torch model" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5ef2fa8d-c80b-4fdd-8555-79c0d541788e", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model, f\"../weights/{model.metadata['clock_name']}.pt\")" + ] + }, + { + "cell_type": "markdown", + "id": "f65d9bb5-5baa-486b-bf25-f68f542bd5b7", + "metadata": {}, + "source": [ + "## Clear directory\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "11aeaa70-44c0-42f9-86d7-740e3849a7a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleted file: glmStocAll.Rd\n", + "Deleted file: download.r\n", + "Deleted folder: .ipynb_checkpoints\n", + "Deleted file: Coefficients_Clock_3.csv\n", + "Deleted file: Coefficients_Clock_2.csv\n", + "Deleted file: Coefficients_Clock_1.csv\n" + ] + } + ], + "source": [ + "# Function to remove a folder and all its contents\n", + "def remove_folder(path):\n", + " try:\n", + " shutil.rmtree(path)\n", + " print(f\"Deleted folder: {path}\")\n", + " except Exception as e:\n", + " print(f\"Error deleting folder {path}: {e}\")\n", + "\n", + "# Get a list of all files and folders in the current directory\n", + "all_items = os.listdir('.')\n", + "\n", + "# Loop through the items\n", + "for item in all_items:\n", + " # Check if it's a file and does not end with .ipynb\n", + " if os.path.isfile(item) and not item.endswith('.ipynb'):\n", + " os.remove(item)\n", + " print(f\"Deleted file: {item}\")\n", + " # Check if it's a folder\n", + " elif os.path.isdir(item):\n", + " remove_folder(item)" + ] + } + ], + "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/docs/_static/clock_glossary.csv b/docs/_static/clock_glossary.csv index a31d81b..6938038 100644 --- a/docs/_static/clock_glossary.csv +++ b/docs/_static/clock_glossary.csv @@ -50,6 +50,9 @@ petkovich,methylation,Mus musculus,2017,⌛,https://doi.org/10.1016/j.cmet.2017. phenoage,blood chemistry,Homo sapiens,2018,⌛,https://doi.org/10.18632%2Faging.101414,,,mortality_to_phenoage, replitali,methylation,Homo sapiens,2022,⌛,https://doi.org/10.1038/s41467-022-34268-8,,,, skinandblood,methylation,Homo sapiens,2018,⌛,https://doi.org/10.18632/aging.101508,,,anti_log_linear, +stoch,methylation,Homo sapiens,2024,⌛,https://doi.org/10.1038/s43587-024-00600-8,,,, +stocp,methylation,Homo sapiens,2024,⌛,https://doi.org/10.1038/s43587-024-00600-8,,,, +stocz,methylation,Homo sapiens,2024,⌛,https://doi.org/10.1038/s43587-024-00600-8,,,, stubbs,methylation,Mus musculus,2017,⌛,https://doi.org/10.1186/s13059-017-1203-5,,quantile_normalization_and_scale_with_gold_standard,stubbs,True yingadaptage,methylation,Homo sapiens,2024,⌛,https://doi.org/10.1038/s43587-023-00557-0,,,, yingcausage,methylation,Homo sapiens,2024,⌛,https://doi.org/10.1038/s43587-023-00557-0,,,, diff --git a/docs/source/clock_implementation.rst b/docs/source/clock_implementation.rst index 664bd2c..fc38ff2 100644 --- a/docs/source/clock_implementation.rst +++ b/docs/source/clock_implementation.rst @@ -56,6 +56,9 @@ The following collection of Jupyter Notebooks provides a comprehensive guide to clock_notebooks/phenoage clock_notebooks/replitali clock_notebooks/skinandblood + clock_notebooks/stoch + clock_notebooks/stocp + clock_notebooks/stocz clock_notebooks/stubbs clock_notebooks/thompson clock_notebooks/yingadaptage diff --git a/docs/source/clock_notebooks/stoch.ipynb b/docs/source/clock_notebooks/stoch.ipynb new file mode 100644 index 0000000..477ac91 --- /dev/null +++ b/docs/source/clock_notebooks/stoch.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2f04eee0-5928-4e74-a754-6dc2e528810c", + "metadata": {}, + "source": [ + "# StocH" + ] + }, + { + "cell_type": "markdown", + "id": "a3f514a3-772c-4a14-afdf-5a8376851ff4", + "metadata": {}, + "source": [ + "## Index\n", + "1. [Instantiate model class](#Instantiate-model-class)\n", + "2. [Define clock metadata](#Define-clock-metadata)\n", + "3. [Download clock dependencies](#Download-clock-dependencies)\n", + "5. [Load features](#Load-features)\n", + "6. [Load weights into base model](#Load-weights-into-base-model)\n", + "7. [Load reference values](#Load-reference-values)\n", + "8. [Load preprocess and postprocess objects](#Load-preprocess-and-postprocess-objects)\n", + "10. [Check all clock parameters](#Check-all-clock-parameters)\n", + "10. [Basic test](#Basic-test)\n", + "11. [Save torch model](#Save-torch-model)\n", + "12. [Clear directory](#Clear-directory)" + ] + }, + { + "cell_type": "markdown", + "id": "d95fafdc-643a-40ea-a689-200bd132e90c", + "metadata": {}, + "source": [ + "Let's first import some packages:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4adfb4de-cd79-4913-a1af-9e23e9e236c9", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import inspect\n", + "import shutil\n", + "import json\n", + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya" + ] + }, + { + "cell_type": "markdown", + "id": "145082e5-ced4-47ae-88c0-cb69773e3c5a", + "metadata": {}, + "source": [ + "## Instantiate model class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8aa77372-7ed3-4da7-abc9-d30372106139", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class StocH(pyagingModel):\n", + " def __init__(self):\n", + " super().__init__()\n", + "\n", + " def preprocess(self, x):\n", + " return x\n", + "\n", + " def postprocess(self, x):\n", + " return x\n", + "\n" + ] + } + ], + "source": [ + "def print_entire_class(cls):\n", + " source = inspect.getsource(cls)\n", + " print(source)\n", + "\n", + "print_entire_class(pya.models.StocH)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "78536494-f1d9-44de-8583-c89a310d2307", + "metadata": {}, + "outputs": [], + "source": [ + "model = pya.models.StocH()" + ] + }, + { + "cell_type": "markdown", + "id": "51f8615e-01fa-4aa5-b196-3ee2b35d261c", + "metadata": {}, + "source": [ + "## Define clock metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6601da9e-8adc-44ee-9308-75e3cd31b816", + "metadata": {}, + "outputs": [], + "source": [ + "model.metadata[\"clock_name\"] = 'stoch'\n", + "model.metadata[\"data_type\"] = 'methylation'\n", + "model.metadata[\"species\"] = 'Homo sapiens'\n", + "model.metadata[\"year\"] = 2024\n", + "model.metadata[\"approved_by_author\"] = '⌛'\n", + "model.metadata[\"citation\"] = \"Tong, Huige, et al. \\\"Quantifying the stochastic component of epigenetic aging.\\\" Nature Aging (2024): 1-16.\"\n", + "model.metadata[\"doi\"] = \"https://doi.org/10.1038/s43587-024-00600-8\"\n", + "model.metadata[\"research_only\"] = None\n", + "model.metadata[\"notes\"] = None" + ] + }, + { + "cell_type": "markdown", + "id": "74492239-5aae-4026-9d90-6bc9c574c110", + "metadata": {}, + "source": [ + "## Download clock dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "192924bd-8553-4840-85e9-3ea02b024b79", + "metadata": {}, + "source": [ + "#### Download directly with curl" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "6675770e-a5d1-40ab-93e1-775f288fed1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "supplementary_url = \"https://figshare.com/ndownloader/files/42406308\"\n", + "supplementary_file_name = \"glmStocAll.Rd\"\n", + "os.system(f\"curl -L -o {supplementary_file_name} {supplementary_url}\")" + ] + }, + { + "cell_type": "markdown", + "id": "aeee6c5a-4e0a-4f2a-acef-d657596f453a", + "metadata": {}, + "source": [ + "#### Download from R package" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "d81f2c9d-362f-43cb-ad52-012e28217164", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting download.r\n" + ] + } + ], + "source": [ + "%%writefile download.r\n", + "\n", + "options(repos = c(CRAN = \"https://cloud.r-project.org/\"))\n", + "\n", + "# Function to extract and save coefficients and intercepts\n", + "ExtractCoefficients <- function(){\n", + " load(\"glmStocALL.Rd\") # Load in stochastic clock information\n", + "\n", + " # Check the loaded object structure\n", + " if (!exists(\"glmStocALL.lo\")) {\n", + " stop(\"The object glmStocALL.lo was not found in the loaded .Rd file.\")\n", + " }\n", + "\n", + " # List to store coefficients and intercepts for each clock\n", + " coefficients_list <- list()\n", + "\n", + " for (c in 1:length(glmStocALL.lo)) {\n", + " glm.o <- glmStocALL.lo[[c]]\n", + "\n", + " # Ensure glm.o is a glmnet object\n", + " if (!inherits(glm.o, \"glmnet\")) {\n", + " warning(paste(\"Object at index\", c, \"is not a glmnet object. Skipping.\"))\n", + " next\n", + " }\n", + "\n", + " # Extract the coefficients and intercept from the final iteration\n", + " intercept <- glm.o$a0[length(glm.o$a0)]\n", + " coefficients <- as.matrix(glm.o$beta)[, length(glm.o$lambda)]\n", + "\n", + " print(length(coefficients))\n", + " print(length(rownames(coefficients)))\n", + "\n", + " # Create a data frame with feature names and coefficients\n", + " coef_df <- data.frame(\n", + " Feature = rownames(as.matrix(glm.o$beta)),\n", + " Coefficient = as.numeric(coefficients),\n", + " Intercept = rep(intercept, length(coefficients))\n", + " )\n", + " \n", + " # Save each clock's coefficients to a CSV file\n", + " write.csv(coef_df, file = paste0(\"Coefficients_Clock_\", c, \".csv\"), row.names = FALSE)\n", + " \n", + " # Append to the list\n", + " coefficients_list[[c]] <- coef_df\n", + " }\n", + "\n", + " return(coefficients_list) # Return the list for further inspection if needed\n", + "}\n", + "\n", + "# Run the function\n", + "coefficients_list <- ExtractCoefficients()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "1ce2bac8-dd33-46cb-a7b6-14a1d0976f05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"Rscript download.r\")" + ] + }, + { + "cell_type": "markdown", + "id": "84930b94-fff8-4e1f-85ef-2194e8a8ee4f", + "metadata": {}, + "source": [ + "## Load features" + ] + }, + { + "cell_type": "markdown", + "id": "dbb77f97-01d4-4c63-aa40-ee24de8bc0e9", + "metadata": {}, + "source": [ + "#### From CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "110a5ded-d25f-4cef-8e84-4f51210dfc26", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('Coefficients_Clock_1.csv')\n", + "df['feature'] = df['Feature']\n", + "df['coefficient'] = df['Coefficient']\n", + "model.features = df['feature'].tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "f81dd175-8773-47da-864a-643f45195bf2", + "metadata": {}, + "source": [ + "## Load weights into base model" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "e09b3463-4fd4-41b1-ac21-e63ddd223fe0", + "metadata": {}, + "outputs": [], + "source": [ + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['Intercept'][0]])" + ] + }, + { + "cell_type": "markdown", + "id": "3bbfeba6-07a3-49c6-b56a-0b9c1c882167", + "metadata": {}, + "source": [ + "#### Linear model" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "d7f43b99-26f2-4622-9a76-316712058877", + "metadata": {}, + "outputs": [], + "source": [ + "base_model = pya.models.LinearModel(input_dim=len(model.features))\n", + "\n", + "base_model.linear.weight.data = weights.float()\n", + "base_model.linear.bias.data = intercept.float()\n", + "\n", + "model.base_model = base_model" + ] + }, + { + "cell_type": "markdown", + "id": "b43d29e6-ec61-450c-be21-989ad9eaebb4", + "metadata": {}, + "source": [ + "## Load reference values" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "ade0f4c9-2298-4fc3-bb72-d200907dd731", + "metadata": {}, + "outputs": [], + "source": [ + "model.reference_values = None" + ] + }, + { + "cell_type": "markdown", + "id": "b42caeae-f255-45aa-9f00-3bed6ef7d26f", + "metadata": {}, + "source": [ + "## Load preprocess and postprocess objects" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "7a22fb20-c605-424d-8efb-7620c2c0755c", + "metadata": {}, + "outputs": [], + "source": [ + "model.preprocess_name = None\n", + "model.preprocess_dependencies = None" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "ff4a21cb-cf41-44dc-9ed1-95cf8aa15772", + "metadata": {}, + "outputs": [], + "source": [ + "model.postprocess_name = None\n", + "model.postprocess_dependencies = None" + ] + }, + { + "cell_type": "markdown", + "id": "2466d7e7-5f1e-4d4a-81f4-721e56958378", + "metadata": {}, + "source": [ + "## Check all clock parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "2168355c-47d9-475d-b816-49f65e74887c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "%==================================== Model Details ====================================%\n", + "Model Attributes:\n", + "\n", + "training: True\n", + "metadata: {'approved_by_author': '⌛',\n", + " 'citation': 'Tong, Huige, et al. \"Quantifying the stochastic component of '\n", + " 'epigenetic aging.\" Nature Aging (2024): 1-16.',\n", + " 'clock_name': 'stoch',\n", + " 'data_type': 'methylation',\n", + " 'doi': 'https://doi.org/10.1038/s43587-024-00600-8',\n", + " 'notes': None,\n", + " 'research_only': None,\n", + " 'species': 'Homo sapiens',\n", + " 'version': None,\n", + " 'year': 2024}\n", + "reference_values: None\n", + "preprocess_name: None\n", + "preprocess_dependencies: None\n", + "postprocess_name: None\n", + "postprocess_dependencies: None\n", + "features: ['cg00075967', 'cg00374717', 'cg00864867', 'cg00945507', 'cg01027739', 'cg01353448', 'cg01584473', 'cg01644850', 'cg01656216', 'cg01873645', 'cg01968178', 'cg02085507', 'cg02154074', 'cg02217159', 'cg02331561', 'cg02332492', 'cg02364642', 'cg02388150', 'cg02479575', 'cg02489552', 'cg02580606', 'cg02654291', 'cg02827112', 'cg02972551', 'cg03103192', 'cg03167275', 'cg03270204', 'cg03565323', 'cg03588357', 'cg03760483']... [Total elements: 353]\n", + "base_model_features: None\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Structure:\n", + "\n", + "base_model: LinearModel(\n", + " (linear): Linear(in_features=353, out_features=1, bias=True)\n", + ")\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Parameters and Weights:\n", + "\n", + "base_model.linear.weight: [3.585235357284546, 0.29056739807128906, 0.008150330744683743, 7.167356014251709, 0.07318803668022156, 0.14952702820301056, -0.12038026005029678, -0.6500811576843262, -0.24336983263492584, 0.24592465162277222, -8.944670844357461e-05, -0.2048512101173401, 0.3703913986682892, -1.0299664735794067, 1.7403517961502075, -0.7057934403419495, 0.5467443466186523, 5.111024856567383, 7.80165433883667, 4.5496368408203125, 0.3366563022136688, 1.6183545589447021, 0.034926775842905045, -5.03125524520874, 6.2505011558532715, -2.024871349334717, 0.145379438996315, 0.5371573567390442, -0.9422363042831421, 0.05253010243177414]... [Tensor of shape torch.Size([1, 353])]\n", + "base_model.linear.bias: tensor([59.8016])\n", + "\n", + "%==================================== Model Details ====================================%\n", + "\n" + ] + } + ], + "source": [ + "pya.utils.print_model_details(model)" + ] + }, + { + "cell_type": "markdown", + "id": "78e2387c-6de1-4073-b4a5-b8b8e430abdb", + "metadata": {}, + "source": [ + "## Basic test" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "936b9877-d076-4ced-99aa-e8d4c58c5caf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 18.5127],\n", + " [146.4057],\n", + " [166.5776],\n", + " [ 85.6306],\n", + " [379.5047],\n", + " [-99.5351],\n", + " [ 42.5195],\n", + " [234.2738],\n", + " [213.7955],\n", + " [ 62.3945]], dtype=torch.float64, grad_fn=)" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.manual_seed(42)\n", + "input = torch.randn(10, len(model.features), dtype=float)\n", + "model.eval()\n", + "model.to(float)\n", + "pred = model(input)\n", + "pred" + ] + }, + { + "cell_type": "markdown", + "id": "75642087-b880-429b-b19b-c1eaea33614f", + "metadata": {}, + "source": [ + "## Save torch model" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "5ef2fa8d-c80b-4fdd-8555-79c0d541788e", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model, f\"../weights/{model.metadata['clock_name']}.pt\")" + ] + }, + { + "cell_type": "markdown", + "id": "f65d9bb5-5baa-486b-bf25-f68f542bd5b7", + "metadata": {}, + "source": [ + "## Clear directory\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "11aeaa70-44c0-42f9-86d7-740e3849a7a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleted file: glmStocAll.Rd\n", + "Deleted file: download.r\n", + "Deleted folder: .ipynb_checkpoints\n", + "Deleted file: Coefficients_Clock_3.csv\n", + "Deleted file: Coefficients_Clock_2.csv\n", + "Deleted file: Coefficients_Clock_1.csv\n" + ] + } + ], + "source": [ + "# Function to remove a folder and all its contents\n", + "def remove_folder(path):\n", + " try:\n", + " shutil.rmtree(path)\n", + " print(f\"Deleted folder: {path}\")\n", + " except Exception as e:\n", + " print(f\"Error deleting folder {path}: {e}\")\n", + "\n", + "# Get a list of all files and folders in the current directory\n", + "all_items = os.listdir('.')\n", + "\n", + "# Loop through the items\n", + "for item in all_items:\n", + " # Check if it's a file and does not end with .ipynb\n", + " if os.path.isfile(item) and not item.endswith('.ipynb'):\n", + " os.remove(item)\n", + " print(f\"Deleted file: {item}\")\n", + " # Check if it's a folder\n", + " elif os.path.isdir(item):\n", + " remove_folder(item)" + ] + } + ], + "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/docs/source/clock_notebooks/stocp.ipynb b/docs/source/clock_notebooks/stocp.ipynb new file mode 100644 index 0000000..a9f3fcd --- /dev/null +++ b/docs/source/clock_notebooks/stocp.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2f04eee0-5928-4e74-a754-6dc2e528810c", + "metadata": {}, + "source": [ + "# StocP" + ] + }, + { + "cell_type": "markdown", + "id": "a3f514a3-772c-4a14-afdf-5a8376851ff4", + "metadata": {}, + "source": [ + "## Index\n", + "1. [Instantiate model class](#Instantiate-model-class)\n", + "2. [Define clock metadata](#Define-clock-metadata)\n", + "3. [Download clock dependencies](#Download-clock-dependencies)\n", + "5. [Load features](#Load-features)\n", + "6. [Load weights into base model](#Load-weights-into-base-model)\n", + "7. [Load reference values](#Load-reference-values)\n", + "8. [Load preprocess and postprocess objects](#Load-preprocess-and-postprocess-objects)\n", + "10. [Check all clock parameters](#Check-all-clock-parameters)\n", + "10. [Basic test](#Basic-test)\n", + "11. [Save torch model](#Save-torch-model)\n", + "12. [Clear directory](#Clear-directory)" + ] + }, + { + "cell_type": "markdown", + "id": "d95fafdc-643a-40ea-a689-200bd132e90c", + "metadata": {}, + "source": [ + "Let's first import some packages:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4adfb4de-cd79-4913-a1af-9e23e9e236c9", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import inspect\n", + "import shutil\n", + "import json\n", + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya" + ] + }, + { + "cell_type": "markdown", + "id": "145082e5-ced4-47ae-88c0-cb69773e3c5a", + "metadata": {}, + "source": [ + "## Instantiate model class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8aa77372-7ed3-4da7-abc9-d30372106139", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class StocP(pyagingModel):\n", + " def __init__(self):\n", + " super().__init__()\n", + "\n", + " def preprocess(self, x):\n", + " return x\n", + "\n", + " def postprocess(self, x):\n", + " return x\n", + "\n" + ] + } + ], + "source": [ + "def print_entire_class(cls):\n", + " source = inspect.getsource(cls)\n", + " print(source)\n", + "\n", + "print_entire_class(pya.models.StocP)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "78536494-f1d9-44de-8583-c89a310d2307", + "metadata": {}, + "outputs": [], + "source": [ + "model = pya.models.StocP()" + ] + }, + { + "cell_type": "markdown", + "id": "51f8615e-01fa-4aa5-b196-3ee2b35d261c", + "metadata": {}, + "source": [ + "## Define clock metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6601da9e-8adc-44ee-9308-75e3cd31b816", + "metadata": {}, + "outputs": [], + "source": [ + "model.metadata[\"clock_name\"] = 'stocp'\n", + "model.metadata[\"data_type\"] = 'methylation'\n", + "model.metadata[\"species\"] = 'Homo sapiens'\n", + "model.metadata[\"year\"] = 2024\n", + "model.metadata[\"approved_by_author\"] = '⌛'\n", + "model.metadata[\"citation\"] = \"Tong, Huige, et al. \\\"Quantifying the stochastic component of epigenetic aging.\\\" Nature Aging (2024): 1-16.\"\n", + "model.metadata[\"doi\"] = \"https://doi.org/10.1038/s43587-024-00600-8\"\n", + "model.metadata[\"research_only\"] = None\n", + "model.metadata[\"notes\"] = None" + ] + }, + { + "cell_type": "markdown", + "id": "74492239-5aae-4026-9d90-6bc9c574c110", + "metadata": {}, + "source": [ + "## Download clock dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "192924bd-8553-4840-85e9-3ea02b024b79", + "metadata": {}, + "source": [ + "#### Download directly with curl" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6675770e-a5d1-40ab-93e1-775f288fed1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "supplementary_url = \"https://figshare.com/ndownloader/files/42406308\"\n", + "supplementary_file_name = \"glmStocAll.Rd\"\n", + "os.system(f\"curl -L -o {supplementary_file_name} {supplementary_url}\")" + ] + }, + { + "cell_type": "markdown", + "id": "aeee6c5a-4e0a-4f2a-acef-d657596f453a", + "metadata": {}, + "source": [ + "#### Download from R package" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d81f2c9d-362f-43cb-ad52-012e28217164", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing download.r\n" + ] + } + ], + "source": [ + "%%writefile download.r\n", + "\n", + "options(repos = c(CRAN = \"https://cloud.r-project.org/\"))\n", + "\n", + "# Function to extract and save coefficients and intercepts\n", + "ExtractCoefficients <- function(){\n", + " load(\"glmStocALL.Rd\") # Load in stochastic clock information\n", + "\n", + " # Check the loaded object structure\n", + " if (!exists(\"glmStocALL.lo\")) {\n", + " stop(\"The object glmStocALL.lo was not found in the loaded .Rd file.\")\n", + " }\n", + "\n", + " # List to store coefficients and intercepts for each clock\n", + " coefficients_list <- list()\n", + "\n", + " for (c in 1:length(glmStocALL.lo)) {\n", + " glm.o <- glmStocALL.lo[[c]]\n", + "\n", + " # Ensure glm.o is a glmnet object\n", + " if (!inherits(glm.o, \"glmnet\")) {\n", + " warning(paste(\"Object at index\", c, \"is not a glmnet object. Skipping.\"))\n", + " next\n", + " }\n", + "\n", + " # Extract the coefficients and intercept from the final iteration\n", + " intercept <- glm.o$a0[length(glm.o$a0)]\n", + " coefficients <- as.matrix(glm.o$beta)[, length(glm.o$lambda)]\n", + "\n", + " print(length(coefficients))\n", + " print(length(rownames(coefficients)))\n", + "\n", + " # Create a data frame with feature names and coefficients\n", + " coef_df <- data.frame(\n", + " Feature = rownames(as.matrix(glm.o$beta)),\n", + " Coefficient = as.numeric(coefficients),\n", + " Intercept = rep(intercept, length(coefficients))\n", + " )\n", + " \n", + " # Save each clock's coefficients to a CSV file\n", + " write.csv(coef_df, file = paste0(\"Coefficients_Clock_\", c, \".csv\"), row.names = FALSE)\n", + " \n", + " # Append to the list\n", + " coefficients_list[[c]] <- coef_df\n", + " }\n", + "\n", + " return(coefficients_list) # Return the list for further inspection if needed\n", + "}\n", + "\n", + "# Run the function\n", + "coefficients_list <- ExtractCoefficients()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1ce2bac8-dd33-46cb-a7b6-14a1d0976f05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"Rscript download.r\")" + ] + }, + { + "cell_type": "markdown", + "id": "84930b94-fff8-4e1f-85ef-2194e8a8ee4f", + "metadata": {}, + "source": [ + "## Load features" + ] + }, + { + "cell_type": "markdown", + "id": "dbb77f97-01d4-4c63-aa40-ee24de8bc0e9", + "metadata": {}, + "source": [ + "#### From CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "110a5ded-d25f-4cef-8e84-4f51210dfc26", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('Coefficients_Clock_3.csv')\n", + "df['feature'] = df['Feature']\n", + "df['coefficient'] = df['Coefficient']\n", + "model.features = df['feature'].tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "f81dd175-8773-47da-864a-643f45195bf2", + "metadata": {}, + "source": [ + "## Load weights into base model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e09b3463-4fd4-41b1-ac21-e63ddd223fe0", + "metadata": {}, + "outputs": [], + "source": [ + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['Intercept'][0]])" + ] + }, + { + "cell_type": "markdown", + "id": "3bbfeba6-07a3-49c6-b56a-0b9c1c882167", + "metadata": {}, + "source": [ + "#### Linear model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d7f43b99-26f2-4622-9a76-316712058877", + "metadata": {}, + "outputs": [], + "source": [ + "base_model = pya.models.LinearModel(input_dim=len(model.features))\n", + "\n", + "base_model.linear.weight.data = weights.float()\n", + "base_model.linear.bias.data = intercept.float()\n", + "\n", + "model.base_model = base_model" + ] + }, + { + "cell_type": "markdown", + "id": "b43d29e6-ec61-450c-be21-989ad9eaebb4", + "metadata": {}, + "source": [ + "## Load reference values" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ade0f4c9-2298-4fc3-bb72-d200907dd731", + "metadata": {}, + "outputs": [], + "source": [ + "model.reference_values = None" + ] + }, + { + "cell_type": "markdown", + "id": "b42caeae-f255-45aa-9f00-3bed6ef7d26f", + "metadata": {}, + "source": [ + "## Load preprocess and postprocess objects" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7a22fb20-c605-424d-8efb-7620c2c0755c", + "metadata": {}, + "outputs": [], + "source": [ + "model.preprocess_name = None\n", + "model.preprocess_dependencies = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ff4a21cb-cf41-44dc-9ed1-95cf8aa15772", + "metadata": {}, + "outputs": [], + "source": [ + "model.postprocess_name = None\n", + "model.postprocess_dependencies = None" + ] + }, + { + "cell_type": "markdown", + "id": "2466d7e7-5f1e-4d4a-81f4-721e56958378", + "metadata": {}, + "source": [ + "## Check all clock parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2168355c-47d9-475d-b816-49f65e74887c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "%==================================== Model Details ====================================%\n", + "Model Attributes:\n", + "\n", + "training: True\n", + "metadata: {'approved_by_author': '⌛',\n", + " 'citation': 'Tong, Huige, et al. \"Quantifying the stochastic component of '\n", + " 'epigenetic aging.\" Nature Aging (2024): 1-16.',\n", + " 'clock_name': 'stocp',\n", + " 'data_type': 'methylation',\n", + " 'doi': 'https://doi.org/10.1038/s43587-024-00600-8',\n", + " 'notes': None,\n", + " 'research_only': None,\n", + " 'species': 'Homo sapiens',\n", + " 'version': None,\n", + " 'year': 2024}\n", + "reference_values: None\n", + "preprocess_name: None\n", + "preprocess_dependencies: None\n", + "postprocess_name: None\n", + "postprocess_dependencies: None\n", + "features: ['cg15611364', 'cg17605084', 'cg26382071', 'cg12743894', 'cg19287114', 'cg12985418', 'cg19398783', 'cg15963417', 'cg27187881', 'cg09892203', 'cg00943950', 'cg18996776', 'cg16340918', 'cg23832061', 'cg22736354', 'cg04084157', 'cg07265300', 'cg02503970', 'cg11426590', 'cg23710218', 'cg02802055', 'cg13631913', 'cg06493994', 'cg24304712', 'cg01131735', 'cg24208206', 'cg01930621', 'cg19104072', 'cg07850604', 'cg27493997']... [Total elements: 513]\n", + "base_model_features: None\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Structure:\n", + "\n", + "base_model: LinearModel(\n", + " (linear): Linear(in_features=513, out_features=1, bias=True)\n", + ")\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Parameters and Weights:\n", + "\n", + "base_model.linear.weight: [-0.26072555780410767, -0.4015197157859802, 0.04175494238734245, 0.08702494204044342, -0.13476140797138214, 0.016701284795999527, 0.07106481492519379, 0.23266158998012543, -0.01433953084051609, -0.9317121505737305, -0.005014453548938036, 0.4903888404369354, -1.6926921606063843, -0.523848831653595, 4.922214031219482, 1.7051185369491577, -0.011739220470190048, -0.7235432863235474, -0.06498837471008301, -0.6380035281181335, 0.22486011683940887, 0.013822232373058796, 10.945517539978027, 0.04070192202925682, -0.028888650238513947, 0.16922490298748016, 0.6264103651046753, -0.018560025840997696, -1.6304043531417847, 0.083981454372406]... [Tensor of shape torch.Size([1, 513])]\n", + "base_model.linear.bias: tensor([92.8311])\n", + "\n", + "%==================================== Model Details ====================================%\n", + "\n" + ] + } + ], + "source": [ + "pya.utils.print_model_details(model)" + ] + }, + { + "cell_type": "markdown", + "id": "78e2387c-6de1-4073-b4a5-b8b8e430abdb", + "metadata": {}, + "source": [ + "## Basic test" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "936b9877-d076-4ced-99aa-e8d4c58c5caf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 272.9167],\n", + " [ -8.4764],\n", + " [-152.8284],\n", + " [ 167.9197],\n", + " [ -3.3252],\n", + " [ 154.7005],\n", + " [ 2.9908],\n", + " [ 57.1228],\n", + " [ 123.9416],\n", + " [ 83.7115]], dtype=torch.float64, grad_fn=)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.manual_seed(42)\n", + "input = torch.randn(10, len(model.features), dtype=float)\n", + "model.eval()\n", + "model.to(float)\n", + "pred = model(input)\n", + "pred" + ] + }, + { + "cell_type": "markdown", + "id": "75642087-b880-429b-b19b-c1eaea33614f", + "metadata": {}, + "source": [ + "## Save torch model" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5ef2fa8d-c80b-4fdd-8555-79c0d541788e", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model, f\"../weights/{model.metadata['clock_name']}.pt\")" + ] + }, + { + "cell_type": "markdown", + "id": "f65d9bb5-5baa-486b-bf25-f68f542bd5b7", + "metadata": {}, + "source": [ + "## Clear directory\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "11aeaa70-44c0-42f9-86d7-740e3849a7a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleted file: glmStocAll.Rd\n", + "Deleted file: download.r\n", + "Deleted folder: .ipynb_checkpoints\n", + "Deleted file: Coefficients_Clock_3.csv\n", + "Deleted file: Coefficients_Clock_2.csv\n", + "Deleted file: Coefficients_Clock_1.csv\n" + ] + } + ], + "source": [ + "# Function to remove a folder and all its contents\n", + "def remove_folder(path):\n", + " try:\n", + " shutil.rmtree(path)\n", + " print(f\"Deleted folder: {path}\")\n", + " except Exception as e:\n", + " print(f\"Error deleting folder {path}: {e}\")\n", + "\n", + "# Get a list of all files and folders in the current directory\n", + "all_items = os.listdir('.')\n", + "\n", + "# Loop through the items\n", + "for item in all_items:\n", + " # Check if it's a file and does not end with .ipynb\n", + " if os.path.isfile(item) and not item.endswith('.ipynb'):\n", + " os.remove(item)\n", + " print(f\"Deleted file: {item}\")\n", + " # Check if it's a folder\n", + " elif os.path.isdir(item):\n", + " remove_folder(item)" + ] + } + ], + "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/docs/source/clock_notebooks/stocz.ipynb b/docs/source/clock_notebooks/stocz.ipynb new file mode 100644 index 0000000..a2b108e --- /dev/null +++ b/docs/source/clock_notebooks/stocz.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2f04eee0-5928-4e74-a754-6dc2e528810c", + "metadata": {}, + "source": [ + "# StocZ" + ] + }, + { + "cell_type": "markdown", + "id": "a3f514a3-772c-4a14-afdf-5a8376851ff4", + "metadata": {}, + "source": [ + "## Index\n", + "1. [Instantiate model class](#Instantiate-model-class)\n", + "2. [Define clock metadata](#Define-clock-metadata)\n", + "3. [Download clock dependencies](#Download-clock-dependencies)\n", + "5. [Load features](#Load-features)\n", + "6. [Load weights into base model](#Load-weights-into-base-model)\n", + "7. [Load reference values](#Load-reference-values)\n", + "8. [Load preprocess and postprocess objects](#Load-preprocess-and-postprocess-objects)\n", + "10. [Check all clock parameters](#Check-all-clock-parameters)\n", + "10. [Basic test](#Basic-test)\n", + "11. [Save torch model](#Save-torch-model)\n", + "12. [Clear directory](#Clear-directory)" + ] + }, + { + "cell_type": "markdown", + "id": "d95fafdc-643a-40ea-a689-200bd132e90c", + "metadata": {}, + "source": [ + "Let's first import some packages:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4adfb4de-cd79-4913-a1af-9e23e9e236c9", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import inspect\n", + "import shutil\n", + "import json\n", + "import torch\n", + "import pandas as pd\n", + "import pyaging as pya" + ] + }, + { + "cell_type": "markdown", + "id": "145082e5-ced4-47ae-88c0-cb69773e3c5a", + "metadata": {}, + "source": [ + "## Instantiate model class" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8aa77372-7ed3-4da7-abc9-d30372106139", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "class StocZ(pyagingModel):\n", + " def __init__(self):\n", + " super().__init__()\n", + "\n", + " def preprocess(self, x):\n", + " return x\n", + "\n", + " def postprocess(self, x):\n", + " return x\n", + "\n" + ] + } + ], + "source": [ + "def print_entire_class(cls):\n", + " source = inspect.getsource(cls)\n", + " print(source)\n", + "\n", + "print_entire_class(pya.models.StocZ)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "78536494-f1d9-44de-8583-c89a310d2307", + "metadata": {}, + "outputs": [], + "source": [ + "model = pya.models.StocZ()" + ] + }, + { + "cell_type": "markdown", + "id": "51f8615e-01fa-4aa5-b196-3ee2b35d261c", + "metadata": {}, + "source": [ + "## Define clock metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6601da9e-8adc-44ee-9308-75e3cd31b816", + "metadata": {}, + "outputs": [], + "source": [ + "model.metadata[\"clock_name\"] = 'stocz'\n", + "model.metadata[\"data_type\"] = 'methylation'\n", + "model.metadata[\"species\"] = 'Homo sapiens'\n", + "model.metadata[\"year\"] = 2024\n", + "model.metadata[\"approved_by_author\"] = '⌛'\n", + "model.metadata[\"citation\"] = \"Tong, Huige, et al. \\\"Quantifying the stochastic component of epigenetic aging.\\\" Nature Aging (2024): 1-16.\"\n", + "model.metadata[\"doi\"] = \"https://doi.org/10.1038/s43587-024-00600-8\"\n", + "model.metadata[\"research_only\"] = None\n", + "model.metadata[\"notes\"] = None" + ] + }, + { + "cell_type": "markdown", + "id": "74492239-5aae-4026-9d90-6bc9c574c110", + "metadata": {}, + "source": [ + "## Download clock dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "192924bd-8553-4840-85e9-3ea02b024b79", + "metadata": {}, + "source": [ + "#### Download directly with curl" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6675770e-a5d1-40ab-93e1-775f288fed1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "supplementary_url = \"https://figshare.com/ndownloader/files/42406308\"\n", + "supplementary_file_name = \"glmStocAll.Rd\"\n", + "os.system(f\"curl -L -o {supplementary_file_name} {supplementary_url}\")" + ] + }, + { + "cell_type": "markdown", + "id": "aeee6c5a-4e0a-4f2a-acef-d657596f453a", + "metadata": {}, + "source": [ + "#### Download from R package" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d81f2c9d-362f-43cb-ad52-012e28217164", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing download.r\n" + ] + } + ], + "source": [ + "%%writefile download.r\n", + "\n", + "options(repos = c(CRAN = \"https://cloud.r-project.org/\"))\n", + "\n", + "# Function to extract and save coefficients and intercepts\n", + "ExtractCoefficients <- function(){\n", + " load(\"glmStocALL.Rd\") # Load in stochastic clock information\n", + "\n", + " # Check the loaded object structure\n", + " if (!exists(\"glmStocALL.lo\")) {\n", + " stop(\"The object glmStocALL.lo was not found in the loaded .Rd file.\")\n", + " }\n", + "\n", + " # List to store coefficients and intercepts for each clock\n", + " coefficients_list <- list()\n", + "\n", + " for (c in 1:length(glmStocALL.lo)) {\n", + " glm.o <- glmStocALL.lo[[c]]\n", + "\n", + " # Ensure glm.o is a glmnet object\n", + " if (!inherits(glm.o, \"glmnet\")) {\n", + " warning(paste(\"Object at index\", c, \"is not a glmnet object. Skipping.\"))\n", + " next\n", + " }\n", + "\n", + " # Extract the coefficients and intercept from the final iteration\n", + " intercept <- glm.o$a0[length(glm.o$a0)]\n", + " coefficients <- as.matrix(glm.o$beta)[, length(glm.o$lambda)]\n", + "\n", + " print(length(coefficients))\n", + " print(length(rownames(coefficients)))\n", + "\n", + " # Create a data frame with feature names and coefficients\n", + " coef_df <- data.frame(\n", + " Feature = rownames(as.matrix(glm.o$beta)),\n", + " Coefficient = as.numeric(coefficients),\n", + " Intercept = rep(intercept, length(coefficients))\n", + " )\n", + " \n", + " # Save each clock's coefficients to a CSV file\n", + " write.csv(coef_df, file = paste0(\"Coefficients_Clock_\", c, \".csv\"), row.names = FALSE)\n", + " \n", + " # Append to the list\n", + " coefficients_list[[c]] <- coef_df\n", + " }\n", + "\n", + " return(coefficients_list) # Return the list for further inspection if needed\n", + "}\n", + "\n", + "# Run the function\n", + "coefficients_list <- ExtractCoefficients()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1ce2bac8-dd33-46cb-a7b6-14a1d0976f05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.system(\"Rscript download.r\")" + ] + }, + { + "cell_type": "markdown", + "id": "84930b94-fff8-4e1f-85ef-2194e8a8ee4f", + "metadata": {}, + "source": [ + "## Load features" + ] + }, + { + "cell_type": "markdown", + "id": "dbb77f97-01d4-4c63-aa40-ee24de8bc0e9", + "metadata": {}, + "source": [ + "#### From CSV file" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "110a5ded-d25f-4cef-8e84-4f51210dfc26", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('Coefficients_Clock_2.csv')\n", + "df['feature'] = df['Feature']\n", + "df['coefficient'] = df['Coefficient']\n", + "model.features = df['feature'].tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "f81dd175-8773-47da-864a-643f45195bf2", + "metadata": {}, + "source": [ + "## Load weights into base model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e09b3463-4fd4-41b1-ac21-e63ddd223fe0", + "metadata": {}, + "outputs": [], + "source": [ + "weights = torch.tensor(df['coefficient'].tolist()).unsqueeze(0)\n", + "intercept = torch.tensor([df['Intercept'][0]])" + ] + }, + { + "cell_type": "markdown", + "id": "3bbfeba6-07a3-49c6-b56a-0b9c1c882167", + "metadata": {}, + "source": [ + "#### Linear model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d7f43b99-26f2-4622-9a76-316712058877", + "metadata": {}, + "outputs": [], + "source": [ + "base_model = pya.models.LinearModel(input_dim=len(model.features))\n", + "\n", + "base_model.linear.weight.data = weights.float()\n", + "base_model.linear.bias.data = intercept.float()\n", + "\n", + "model.base_model = base_model" + ] + }, + { + "cell_type": "markdown", + "id": "b43d29e6-ec61-450c-be21-989ad9eaebb4", + "metadata": {}, + "source": [ + "## Load reference values" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ade0f4c9-2298-4fc3-bb72-d200907dd731", + "metadata": {}, + "outputs": [], + "source": [ + "model.reference_values = None" + ] + }, + { + "cell_type": "markdown", + "id": "b42caeae-f255-45aa-9f00-3bed6ef7d26f", + "metadata": {}, + "source": [ + "## Load preprocess and postprocess objects" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7a22fb20-c605-424d-8efb-7620c2c0755c", + "metadata": {}, + "outputs": [], + "source": [ + "model.preprocess_name = None\n", + "model.preprocess_dependencies = None" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ff4a21cb-cf41-44dc-9ed1-95cf8aa15772", + "metadata": {}, + "outputs": [], + "source": [ + "model.postprocess_name = None\n", + "model.postprocess_dependencies = None" + ] + }, + { + "cell_type": "markdown", + "id": "2466d7e7-5f1e-4d4a-81f4-721e56958378", + "metadata": {}, + "source": [ + "## Check all clock parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2168355c-47d9-475d-b816-49f65e74887c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "%==================================== Model Details ====================================%\n", + "Model Attributes:\n", + "\n", + "training: True\n", + "metadata: {'approved_by_author': '⌛',\n", + " 'citation': 'Tong, Huige, et al. \"Quantifying the stochastic component of '\n", + " 'epigenetic aging.\" Nature Aging (2024): 1-16.',\n", + " 'clock_name': 'stocz',\n", + " 'data_type': 'methylation',\n", + " 'doi': 'https://doi.org/10.1038/s43587-024-00600-8',\n", + " 'notes': None,\n", + " 'research_only': None,\n", + " 'species': 'Homo sapiens',\n", + " 'version': None,\n", + " 'year': 2024}\n", + "reference_values: None\n", + "preprocess_name: None\n", + "preprocess_dependencies: None\n", + "postprocess_name: None\n", + "postprocess_dependencies: None\n", + "features: ['cg24611351', 'cg24173182', 'cg09604333', 'cg13617776', 'cg09432590', 'cg05516505', 'cg12757684', 'cg23606718', 'cg20050761', 'cg22452230', 'cg05898618', 'cg01620164', 'cg06758350', 'cg23615741', 'cg09692396', 'cg02046143', 'cg08540945', 'cg11714320', 'cg22708738', 'cg21567504', 'cg08313880', 'cg03527802', 'cg23995914', 'cg04027548', 'cg07077459', 'cg03025830', 'cg07978099', 'cg24349631', 'cg04218760', 'cg24788483']... [Total elements: 514]\n", + "base_model_features: None\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Structure:\n", + "\n", + "base_model: LinearModel(\n", + " (linear): Linear(in_features=514, out_features=1, bias=True)\n", + ")\n", + "\n", + "%==================================== Model Details ====================================%\n", + "Model Parameters and Weights:\n", + "\n", + "base_model.linear.weight: [-3.350179433822632, -0.036642078310251236, -0.05118434131145477, 0.13607171177864075, -0.6929044127464294, -8.596583366394043, -0.023057660087943077, 22.69631576538086, 0.00651215435937047, -1.4592914581298828, -0.09501103311777115, -0.12129057198762894, -0.08514729142189026, -0.0008293375140056014, 0.4517977833747864, -0.3498646914958954, 15.742756843566895, -0.005218011327087879, -0.37894847989082336, -0.02003936469554901, 0.29712849855422974, -0.18342454731464386, -0.31919535994529724, -2.756777286529541, -2.310011625289917, 0.009594087488949299, 0.0197058767080307, 0.18678680062294006, 0.004259498789906502, -3.520700216293335]... [Tensor of shape torch.Size([1, 514])]\n", + "base_model.linear.bias: tensor([64.8077])\n", + "\n", + "%==================================== Model Details ====================================%\n", + "\n" + ] + } + ], + "source": [ + "pya.utils.print_model_details(model)" + ] + }, + { + "cell_type": "markdown", + "id": "78e2387c-6de1-4073-b4a5-b8b8e430abdb", + "metadata": {}, + "source": [ + "## Basic test" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "936b9877-d076-4ced-99aa-e8d4c58c5caf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ -65.2707],\n", + " [-228.6931],\n", + " [ 81.9692],\n", + " [ 186.4775],\n", + " [ -30.6134],\n", + " [ 20.5118],\n", + " [ 50.0692],\n", + " [ 127.1051],\n", + " [ 150.1440],\n", + " [ -14.1187]], dtype=torch.float64, grad_fn=)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.manual_seed(42)\n", + "input = torch.randn(10, len(model.features), dtype=float)\n", + "model.eval()\n", + "model.to(float)\n", + "pred = model(input)\n", + "pred" + ] + }, + { + "cell_type": "markdown", + "id": "75642087-b880-429b-b19b-c1eaea33614f", + "metadata": {}, + "source": [ + "## Save torch model" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5ef2fa8d-c80b-4fdd-8555-79c0d541788e", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(model, f\"../weights/{model.metadata['clock_name']}.pt\")" + ] + }, + { + "cell_type": "markdown", + "id": "f65d9bb5-5baa-486b-bf25-f68f542bd5b7", + "metadata": {}, + "source": [ + "## Clear directory\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "11aeaa70-44c0-42f9-86d7-740e3849a7a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleted file: glmStocAll.Rd\n", + "Deleted file: download.r\n", + "Deleted folder: .ipynb_checkpoints\n", + "Deleted file: Coefficients_Clock_3.csv\n", + "Deleted file: Coefficients_Clock_2.csv\n", + "Deleted file: Coefficients_Clock_1.csv\n" + ] + } + ], + "source": [ + "# Function to remove a folder and all its contents\n", + "def remove_folder(path):\n", + " try:\n", + " shutil.rmtree(path)\n", + " print(f\"Deleted folder: {path}\")\n", + " except Exception as e:\n", + " print(f\"Error deleting folder {path}: {e}\")\n", + "\n", + "# Get a list of all files and folders in the current directory\n", + "all_items = os.listdir('.')\n", + "\n", + "# Loop through the items\n", + "for item in all_items:\n", + " # Check if it's a file and does not end with .ipynb\n", + " if os.path.isfile(item) and not item.endswith('.ipynb'):\n", + " os.remove(item)\n", + " print(f\"Deleted file: {item}\")\n", + " # Check if it's a folder\n", + " elif os.path.isdir(item):\n", + " remove_folder(item)" + ] + } + ], + "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/docs/source/index.rst b/docs/source/index.rst index 8845b7a..5d1dd21 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -18,9 +18,9 @@ :target: https://github.com/rsinghlab/pyaging/blob/main/LICENSE :alt: License -.. image:: https://img.shields.io/badge/bioRxiv-DOI-purple.svg - :target: https://doi.org/10.1101/2023.11.28.569069 - :alt: bioRxiv +.. image:: https://img.shields.io/badge/DOI-10.1093%2Fbioinformatics%2Fbtae200-blue.svg + :target: https://doi.org/10.1093/bioinformatics/btae200 + :alt: DOI .. raw:: html diff --git a/docs/source/installation.rst b/docs/source/installation.rst index f0b6013..78a8353 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -28,4 +28,8 @@ Lastly, it can be installed from source: .. code-block:: bash - pip install git+https://github.com/rsinghlab/pyaging \ No newline at end of file + pip install git+https://github.com/rsinghlab/pyaging + +.. note:: + + The histone mark clocks can only be used when the optional dependency pyBigWig is also installed. Currently, pyBigWig is not supported on Windows. \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 3c1d129..29a2bc9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,18 +2,22 @@ [[package]] name = "accessible-pygments" -version = "0.0.4" +version = "0.0.5" description = "A collection of accessible pygments styles" optional = false -python-versions = "*" +python-versions = ">=3.9" 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"}, + {file = "accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7"}, + {file = "accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872"}, ] [package.dependencies] pygments = ">=1.5" +[package.extras] +dev = ["pillow", "pkginfo (>=1.10)", "playwright", "pre-commit", "setuptools", "twine (>=5.0)"] +tests = ["hypothesis", "pytest"] + [[package]] name = "alabaster" version = "0.7.16" @@ -27,30 +31,30 @@ files = [ [[package]] name = "anndata" -version = "0.10.5.post1" +version = "0.10.8" description = "Annotated data." optional = false python-versions = ">=3.9" files = [ - {file = "anndata-0.10.5.post1-py3-none-any.whl", hash = "sha256:3be9d5863d60d7a72d57a6e0392a3e7f3bb2bbfc79a038ddc53192a41517f5fc"}, - {file = "anndata-0.10.5.post1.tar.gz", hash = "sha256:9a17c6eda9fc40759b3f5f81742f5d18c1a0a1acdf02f13e1646700ec082c155"}, + {file = "anndata-0.10.8-py3-none-any.whl", hash = "sha256:1b24934dc2674eaf3072cb7010e187aa2b2f4f0e4cf0a32ffeab5ffebe3b1415"}, + {file = "anndata-0.10.8.tar.gz", hash = "sha256:b728a33225eeaaefddf6bed546d935c0f06881c9166621b24de3b492b2f406bb"}, ] [package.dependencies] -array-api-compat = "*" +array-api-compat = ">1.4,<1.5 || >1.5" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -h5py = ">=3" +h5py = ">=3.1" natsort = "*" -numpy = ">=1.16.5" -packaging = ">=20" -pandas = ">=1.1.1,<2.1.0rc0 || >2.1.0rc0,<2.1.2 || >2.1.2" -scipy = ">1.4" +numpy = ">=1.23" +packaging = ">=20.0" +pandas = ">=1.4,<2.1.0rc0 || >2.1.0rc0,<2.1.2 || >2.1.2" +scipy = ">1.8" [package.extras] dev = ["pytest-xdist", "setuptools-scm"] doc = ["awkward (>=2.0.7)", "ipython", "myst-parser", "nbsphinx", "readthedocs-sphinx-search", "scanpydoc[theme,typehints] (>=0.13.4)", "sphinx (>=4.4)", "sphinx-autodoc-typehints (>=1.11.0)", "sphinx-book-theme (>=1.1.0)", "sphinx-copybutton", "sphinx-design (>=0.5.0)", "sphinx-issues", "sphinxext-opengraph", "zarr"] gpu = ["cupy"] -test = ["awkward (>=2.3)", "boltons", "dask[array,distributed]", "httpx", "joblib", "loompy (>=3.0.5)", "matplotlib", "openpyxl", "pyarrow", "pytest (>=6.0)", "pytest-cov (>=2.10)", "pytest-memray", "scanpy", "scikit-learn", "zarr"] +test = ["awkward (>=2.3)", "boltons", "dask[array,distributed] (>=2022.09.2)", "httpx", "joblib", "loompy (>=3.0.5)", "matplotlib", "openpyxl", "pyarrow", "pytest (>=8.2)", "pytest-cov (>=2.10)", "pytest-memray", "pytest-mock", "scanpy", "scikit-learn", "zarr (<3.0.0a0)"] [[package]] name = "appnope" @@ -65,18 +69,22 @@ files = [ [[package]] name = "array-api-compat" -version = "1.5" +version = "1.7.1" description = "A wrapper around NumPy and other array libraries to make them compatible with the Array API standard" optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "array_api_compat-1.5-py3-none-any.whl", hash = "sha256:0c241453f8728d78cf948f81d644a1b5f8c96ecf1b1b621211041ef858b62374"}, - {file = "array_api_compat-1.5.tar.gz", hash = "sha256:c3ee5c9980f5288a19dafce950e5301bd7b0752e96e25989ff78471a968348a5"}, + {file = "array_api_compat-1.7.1-py3-none-any.whl", hash = "sha256:6974f51775972f39edbca39e08f1c2e43c51401c093a0fea5ac7159875095d8a"}, + {file = "array_api_compat-1.7.1.tar.gz", hash = "sha256:b6b37294cd1da2f9d9040c543d2d4c3d7a81615953d59811431ee4bf15647c3b"}, ] [package.extras] cupy = ["cupy"] +dask = ["dask"] +jax = ["jax"] numpy = ["numpy"] +pytorch = ["pytorch"] +sparse = ["sparse (>=0.15.1)"] [[package]] name = "asttokens" @@ -117,13 +125,13 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] @@ -170,13 +178,13 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, ] [[package]] @@ -353,25 +361,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "cupy" -version = "13.0.0" -description = "CuPy: NumPy & SciPy for GPU" -optional = true -python-versions = ">=3.9" -files = [ - {file = "cupy-13.0.0.tar.gz", hash = "sha256:2f04e7857f692a713360dc9c3b06709806ab8404fca39b5af9721c04a2979aae"}, -] - -[package.dependencies] -fastrlock = ">=0.5" -numpy = ">=1.22,<1.29" - -[package.extras] -all = ["Cython (>=0.29.22,<3)", "optuna (>=2.0)", "scipy (>=1.7,<1.14)"] -stylecheck = ["autopep8 (==1.5.5)", "flake8 (==3.8.4)", "mypy (==1.4.1)", "pbr (==5.5.1)", "pycodestyle (==2.6.0)", "types-setuptools (==57.4.14)"] -test = ["hypothesis (>=6.37.2,<6.55.0)", "pytest (>=7.2)"] - [[package]] name = "decorator" version = "5.1.1" @@ -407,13 +396,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -435,127 +424,43 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.19.1" +version = "2.20.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, - {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, ] [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] -[[package]] -name = "fastrlock" -version = "0.8.2" -description = "Fast, re-entrant optimistic lock implemented in Cython" -optional = true -python-versions = "*" -files = [ - {file = "fastrlock-0.8.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:94e348c72a1fd1f8191f25ea056448e4f5a87b8fbf005b39d290dcb0581a48cd"}, - {file = "fastrlock-0.8.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5595903444c854b99c42122b87edfe8a37cd698a4eae32f4fd1d2a7b6c115d"}, - {file = "fastrlock-0.8.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e4bbde174a0aff5f6eeba75cf8c4c5d2a316316bc21f03a0bddca0fc3659a6f3"}, - {file = "fastrlock-0.8.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a2ccaf88ac0db153e84305d1ef0aa138cea82c6a88309066f6eaa3bc98636cd"}, - {file = "fastrlock-0.8.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:31a27a2edf482df72b91fe6c6438314d2c65290aa7becc55589d156c9b91f0da"}, - {file = "fastrlock-0.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:e9904b5b37c3e5bb4a245c56bc4b7e497da57ffb8528f4fc39af9dcb168ee2e1"}, - {file = "fastrlock-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:43a241655e83e4603a152192cf022d5ca348c2f4e56dfb02e5c9c4c1a32f9cdb"}, - {file = "fastrlock-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9121a894d74e65557e47e777060a495ab85f4b903e80dd73a3c940ba042920d7"}, - {file = "fastrlock-0.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:11bbbbc526363955aeddb9eec4cee2a0012322b7b2f15b54f44454fcf4fd398a"}, - {file = "fastrlock-0.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:27786c62a400e282756ae1b090bcd7cfa35f28270cff65a9e7b27a5327a32561"}, - {file = "fastrlock-0.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:08315bde19d0c2e6b06593d5a418be3dc8f9b1ee721afa96867b9853fceb45cf"}, - {file = "fastrlock-0.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e8b49b5743ede51e0bcf6805741f39f5e0e0fd6a172ba460cb39e3097ba803bb"}, - {file = "fastrlock-0.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b443e73a4dfc7b6e0800ea4c13567b9694358e86f53bb2612a51c9e727cac67b"}, - {file = "fastrlock-0.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:b3853ed4ce522598dc886160a7bab432a093051af85891fa2f5577c1dcac8ed6"}, - {file = "fastrlock-0.8.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:790fc19bccbd39426060047e53629f171a44745613bf360a045e9f9c8c4a2cea"}, - {file = "fastrlock-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:dbdce852e6bb66e1b8c36679d482971d69d93acf1785657522e51b7de30c3356"}, - {file = "fastrlock-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d47713ffe6d4a627fbf078be9836a95ac106b4a0543e3841572c91e292a5d885"}, - {file = "fastrlock-0.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:ea96503b918fceaf40443182742b8964d47b65c5ebdea532893cb9479620000c"}, - {file = "fastrlock-0.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c6bffa978793bea5e1b00e677062e53a62255439339591b70e209fa1552d5ee0"}, - {file = "fastrlock-0.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75c07726c8b1a52147fd7987d6baaa318c5dced1416c3f25593e40f56e10755b"}, - {file = "fastrlock-0.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88f079335e9da631efa64486c8207564a7bcd0c00526bb9e842e9d5b7e50a6cc"}, - {file = "fastrlock-0.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4fb2e77ff04bc4beb71d63c8e064f052ce5a6ea1e001d528d4d7f4b37d736f2e"}, - {file = "fastrlock-0.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:b4c9083ea89ab236b06e9ef2263971db3b4b507195fc7d5eecab95828dcae325"}, - {file = "fastrlock-0.8.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:98195866d3a9949915935d40a88e4f1c166e82e378f622c88025f2938624a90a"}, - {file = "fastrlock-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b22ea9bf5f9fad2b0077e944a7813f91593a4f61adf8faf734a70aed3f2b3a40"}, - {file = "fastrlock-0.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc1bf0ac8a194313cf6e645e300a8a379674ceed8e0b1e910a2de3e3c28989e"}, - {file = "fastrlock-0.8.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a3dcc876050b8f5cbc0ee84ef1e7f0c1dfe7c148f10098828bc4403683c33f10"}, - {file = "fastrlock-0.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:685e656048b59d8dfde8c601f188ad53a4d719eb97080cafc8696cda6d75865e"}, - {file = "fastrlock-0.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:fb5363cf0fddd9b50525ddbf64a1e1b28ec4c6dfb28670a940cb1cf988a6786b"}, - {file = "fastrlock-0.8.2-cp35-cp35m-macosx_10_15_x86_64.whl", hash = "sha256:a74f5a92fa6e51c4f3c69b29c4662088b97be12f40652a21109605a175c81824"}, - {file = "fastrlock-0.8.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ccf39ad5702e33e4d335b48ef9d56e21619b529b7f7471b5211419f380329b62"}, - {file = "fastrlock-0.8.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:66f2662c640bb71a1016a031eea6eef9d25c2bcdf7ffd1d1ddc5a58f9a1ced04"}, - {file = "fastrlock-0.8.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:17734e2e5af4c07ddb0fb10bd484e062c22de3be6b67940b9cc6ec2f18fa61ba"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:ab91b0c36e95d42e1041a4907e3eefd06c482d53af3c7a77be7e214cc7cd4a63"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b32fdf874868326351a75b1e4c02f97e802147119ae44c52d3d9da193ec34f5b"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:2074548a335fcf7d19ebb18d9208da9e33b06f745754466a7e001d2b1c58dd19"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fb04442b6d1e2b36c774919c6bcbe3339c61b337261d4bd57e27932589095af"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1fed2f4797ad68e9982038423018cf08bec5f4ce9fed63a94a790773ed6a795c"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e380ec4e6d8b26e389713995a43cb7fe56baea2d25fe073d4998c4821a026211"}, - {file = "fastrlock-0.8.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:25945f962c7bd808415cfde3da624d4399d4ea71ed8918538375f16bceb79e1c"}, - {file = "fastrlock-0.8.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c1719ddc8218b01e82fb2e82e8451bd65076cb96d7bef4477194bbb4305a968"}, - {file = "fastrlock-0.8.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5460c5ee6ced6d61ec8cd2324ebbe793a4960c4ffa2131ffff480e3b61c99ec5"}, - {file = "fastrlock-0.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:33145acbad8317584cd64588131c7e1e286beef6280c0009b4544c91fce171d2"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:59344c1d46b7dec97d3f22f1cc930fafe8980b3c5bc9c9765c56738a5f1559e4"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2a1c354f13f22b737621d914f3b4a8434ae69d3027a775e94b3e671756112f9"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:cf81e0278b645004388873e0a1f9e3bc4c9ab8c18e377b14ed1a544be4b18c9a"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b15430b93d7eb3d56f6ff690d2ebecb79ed0e58248427717eba150a508d1cd7"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:067edb0a0805bf61e17a251d5046af59f6e9d2b8ad01222e0ef7a0b7937d5548"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb31fe390f03f7ae886dcc374f1099ec88526631a4cb891d399b68181f154ff0"}, - {file = "fastrlock-0.8.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:643e1e65b4f5b284427e61a894d876d10459820e93aa1e724dfb415117be24e0"}, - {file = "fastrlock-0.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5dfb78dd600a12f23fc0c3ec58f81336229fdc74501ecf378d1ce5b3f2f313ea"}, - {file = "fastrlock-0.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8ca0fe21458457077e4cb2d81e1ebdb146a00b3e9e2db6180a773f7ea905032"}, - {file = "fastrlock-0.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d918dfe473291e8bfd8e13223ea5cb9b317bd9f50c280923776c377f7c64b428"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c393af77c659a38bffbca215c0bcc8629ba4299568308dd7e4ff65d62cabed39"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73426f5eb2ecc10626c67cf86bd0af9e00d53e80e5c67d5ce8e18376d6abfa09"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:320fd55bafee3eb069cfb5d6491f811a912758387ef2193840e2663e80e16f48"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c1c91a68926421f5ccbc82c85f83bd3ba593b121a46a1b9a554b3f0dd67a4bf"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ad1bc61c7f6b0e58106aaab034916b6cb041757f708b07fbcdd9d6e1ac629225"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:87f4e01b042c84e6090dbc4fbe3415ddd69f6bc0130382323f9d3f1b8dd71b46"}, - {file = "fastrlock-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d34546ad2e4a480b94b6797bcc5a322b3c705c4c74c3e4e545c4a3841c1b2d59"}, - {file = "fastrlock-0.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ebb32d776b61acd49f859a1d16b9e3d84e7b46d0d92aebd58acd54dc38e96664"}, - {file = "fastrlock-0.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30bdbe4662992348132d03996700e1cf910d141d629179b967b146a22942264e"}, - {file = "fastrlock-0.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:07ed3c7b3867c05a3d6be4ced200c7767000f3431b9be6da66972822dd86e8be"}, - {file = "fastrlock-0.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:ddf5d247f686aec853ddcc9a1234bfcc6f57b0a0670d2ad82fc25d8ae7e6a15f"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7269bb3fc15587b0c191eecd95831d771a7d80f0c48929e560806b038ff3066c"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adcb9e77aa132cc6c9de2ffe7cf880a20aa8cdba21d367d1da1a412f57bddd5d"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:a3b8b5d2935403f1b4b25ae324560e94b59593a38c0d2e7b6c9872126a9622ed"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2587cedbb36c7988e707d83f0f1175c1f882f362b5ebbee25d70218ea33d220d"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9af691a9861027181d4de07ed74f0aee12a9650ac60d0a07f4320bff84b5d95f"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99dd6652bd6f730beadf74ef769d38c6bbd8ee6d1c15c8d138ea680b0594387f"}, - {file = "fastrlock-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d63b6596368dab9e0cc66bf047e7182a56f33b34db141816a4f21f5bf958228"}, - {file = "fastrlock-0.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ff75c90663d6e8996610d435e71487daa853871ad1770dd83dc0f2fc4997241e"}, - {file = "fastrlock-0.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e27c3cd27fbd25e5223c5c992b300cd4ee8f0a75c6f222ce65838138d853712c"}, - {file = "fastrlock-0.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:dd961a32a7182c3891cdebca417fda67496d5d5de6ae636962254d22723bdf52"}, - {file = "fastrlock-0.8.2.tar.gz", hash = "sha256:644ec9215cf9c4df8028d8511379a15d9c1af3e16d80e47f1b6fdc6ba118356a"}, -] - [[package]] name = "filelock" -version = "3.13.1" +version = "3.15.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, + {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "fsspec" -version = "2024.2.0" +version = "2024.6.1" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2024.2.0-py3-none-any.whl", hash = "sha256:817f969556fa5916bc682e02ca2045f96ff7f586d45110fcb76022063ad2c7d8"}, - {file = "fsspec-2024.2.0.tar.gz", hash = "sha256:b6ad1a679f760dda52b1168c859d01b7b80648ea6f7f7c7f5a8a91dc3f3ecb84"}, + {file = "fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e"}, + {file = "fsspec-2024.6.1.tar.gz", hash = "sha256:fad7d7e209dd4c1208e3bbfda706620e0da5142bebbd9c384afb95b07e798e49"}, ] [package.extras] @@ -563,7 +468,8 @@ abfs = ["adlfs"] adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] fuse = ["fusepy"] @@ -580,6 +486,9 @@ s3 = ["s3fs"] sftp = ["paramiko"] smb = ["smbprotocol"] ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] [[package]] @@ -595,36 +504,32 @@ files = [ [[package]] name = "h5py" -version = "3.10.0" +version = "3.11.0" description = "Read and write HDF5 files from Python" optional = false python-versions = ">=3.8" files = [ - {file = "h5py-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b963fb772964fc1d1563c57e4e2e874022ce11f75ddc6df1a626f42bd49ab99f"}, - {file = "h5py-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:012ab448590e3c4f5a8dd0f3533255bc57f80629bf7c5054cf4c87b30085063c"}, - {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:781a24263c1270a62cd67be59f293e62b76acfcc207afa6384961762bb88ea03"}, - {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42e6c30698b520f0295d70157c4e202a9e402406f50dc08f5a7bc416b24e52d"}, - {file = "h5py-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:93dd840bd675787fc0b016f7a05fc6efe37312a08849d9dd4053fd0377b1357f"}, - {file = "h5py-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2381e98af081b6df7f6db300cd88f88e740649d77736e4b53db522d8874bf2dc"}, - {file = "h5py-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:667fe23ab33d5a8a6b77970b229e14ae3bb84e4ea3382cc08567a02e1499eedd"}, - {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90286b79abd085e4e65e07c1bd7ee65a0f15818ea107f44b175d2dfe1a4674b7"}, - {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c013d2e79c00f28ffd0cc24e68665ea03ae9069e167087b2adb5727d2736a52"}, - {file = "h5py-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:92273ce69ae4983dadb898fd4d3bea5eb90820df953b401282ee69ad648df684"}, - {file = "h5py-3.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c97d03f87f215e7759a354460fb4b0d0f27001450b18b23e556e7856a0b21c3"}, - {file = "h5py-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86df4c2de68257b8539a18646ceccdcf2c1ce6b1768ada16c8dcfb489eafae20"}, - {file = "h5py-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9ab36be991119a3ff32d0c7cbe5faf9b8d2375b5278b2aea64effbeba66039"}, - {file = "h5py-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c8e4fda19eb769e9a678592e67eaec3a2f069f7570c82d2da909c077aa94339"}, - {file = "h5py-3.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:492305a074327e8d2513011fa9fffeb54ecb28a04ca4c4227d7e1e9616d35641"}, - {file = "h5py-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9450464b458cca2c86252b624279115dcaa7260a40d3cb1594bf2b410a2bd1a3"}, - {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6f6d1384a9f491732cee233b99cd4bfd6e838a8815cc86722f9d2ee64032af"}, - {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3074ec45d3dc6e178c6f96834cf8108bf4a60ccb5ab044e16909580352010a97"}, - {file = "h5py-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:212bb997a91e6a895ce5e2f365ba764debeaef5d2dca5c6fb7098d66607adf99"}, - {file = "h5py-3.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5dfc65ac21fa2f630323c92453cadbe8d4f504726ec42f6a56cf80c2f90d6c52"}, - {file = "h5py-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d4682b94fd36ab217352be438abd44c8f357c5449b8995e63886b431d260f3d3"}, - {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aece0e2e1ed2aab076c41802e50a0c3e5ef8816d60ece39107d68717d4559824"}, - {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43a61b2c2ad65b1fabc28802d133eed34debcc2c8b420cb213d3d4ef4d3e2229"}, - {file = "h5py-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae2f0201c950059676455daf92700eeb57dcf5caaf71b9e1328e6e6593601770"}, - {file = "h5py-3.10.0.tar.gz", hash = "sha256:d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049"}, + {file = "h5py-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1625fd24ad6cfc9c1ccd44a66dac2396e7ee74940776792772819fc69f3a3731"}, + {file = "h5py-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c072655ad1d5fe9ef462445d3e77a8166cbfa5e599045f8aa3c19b75315f10e5"}, + {file = "h5py-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77b19a40788e3e362b54af4dcf9e6fde59ca016db2c61360aa30b47c7b7cef00"}, + {file = "h5py-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef4e2f338fc763f50a8113890f455e1a70acd42a4d083370ceb80c463d803972"}, + {file = "h5py-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbd732a08187a9e2a6ecf9e8af713f1d68256ee0f7c8b652a32795670fb481ba"}, + {file = "h5py-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75bd7b3d93fbeee40860fd70cdc88df4464e06b70a5ad9ce1446f5f32eb84007"}, + {file = "h5py-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c416f8eb0daae39dabe71415cb531f95dce2d81e1f61a74537a50c63b28ab3"}, + {file = "h5py-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:083e0329ae534a264940d6513f47f5ada617da536d8dccbafc3026aefc33c90e"}, + {file = "h5py-3.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a76cae64080210389a571c7d13c94a1a6cf8cb75153044fd1f822a962c97aeab"}, + {file = "h5py-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3736fe21da2b7d8a13fe8fe415f1272d2a1ccdeff4849c1421d2fb30fd533bc"}, + {file = "h5py-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6ae84a14103e8dc19266ef4c3e5d7c00b68f21d07f2966f0ca7bdb6c2761fb"}, + {file = "h5py-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:21dbdc5343f53b2e25404673c4f00a3335aef25521bd5fa8c707ec3833934892"}, + {file = "h5py-3.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:754c0c2e373d13d6309f408325343b642eb0f40f1a6ad21779cfa9502209e150"}, + {file = "h5py-3.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:731839240c59ba219d4cb3bc5880d438248533366f102402cfa0621b71796b62"}, + {file = "h5py-3.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ec9df3dd2018904c4cc06331951e274f3f3fd091e6d6cc350aaa90fa9b42a76"}, + {file = "h5py-3.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:55106b04e2c83dfb73dc8732e9abad69d83a436b5b82b773481d95d17b9685e1"}, + {file = "h5py-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f4e025e852754ca833401777c25888acb96889ee2c27e7e629a19aee288833f0"}, + {file = "h5py-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c4b760082626120031d7902cd983d8c1f424cdba2809f1067511ef283629d4b"}, + {file = "h5py-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67462d0669f8f5459529de179f7771bd697389fcb3faab54d63bf788599a48ea"}, + {file = "h5py-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:d9c944d364688f827dc889cf83f1fca311caf4fa50b19f009d1f2b525edd33a3"}, + {file = "h5py-3.11.0.tar.gz", hash = "sha256:7b7e8f78072a2edec87c9836f25f34203fd492a4475709a18b417a33cfb21fa9"}, ] [package.dependencies] @@ -632,13 +537,13 @@ numpy = ">=1.17.3" [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -654,22 +559,22 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.2" +version = "8.0.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.2-py3-none-any.whl", hash = "sha256:f4bc4c0c070c490abf4ce96d715f68e95923320370efb66143df00199bb6c100"}, - {file = "importlib_metadata-7.0.2.tar.gz", hash = "sha256:198f568f3230878cb1b44fbd7975f87906c22336dba2e4a7f05278c281fbd792"}, + {file = "importlib_metadata-8.0.0-py3-none-any.whl", hash = "sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f"}, + {file = "importlib_metadata-8.0.0.tar.gz", hash = "sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" @@ -682,6 +587,20 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "intel-openmp" +version = "2021.4.0" +description = "Intel OpenMP* Runtime Library" +optional = false +python-versions = "*" +files = [ + {file = "intel_openmp-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:41c01e266a7fdb631a7609191709322da2bbf24b252ba763f125dd651bcc7675"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:3b921236a38384e2016f0f3d65af6732cf2c12918087128a9163225451e776f2"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:e2240ab8d01472fed04f3544a878cda5da16c26232b7ea1b59132dbfb48b186e"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:6e863d8fd3d7e8ef389d52cf97a50fe2afe1a19247e8c0d168ce021546f96fc9"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:eef4c8bcc8acefd7f5cd3b9384dbf73d59e2c99fc56545712ded913f43c4a94f"}, +] + [[package]] name = "ipykernel" version = "5.5.6" @@ -773,13 +692,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -790,24 +709,24 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.3.2" +version = "1.4.2" description = "Lightweight pipelining with Python functions" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, ] [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.22.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, ] [package.dependencies] @@ -836,13 +755,13 @@ referencing = ">=0.31.0" [[package]] name = "jupyter-client" -version = "8.6.0" +version = "8.6.2" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, - {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, + {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, + {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, ] [package.dependencies] @@ -855,17 +774,17 @@ traitlets = ">=5.3" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "5.7.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -875,7 +794,7 @@ traitlets = ">=5.3" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyterlab-pygments" @@ -983,13 +902,13 @@ files = [ [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] [package.dependencies] @@ -997,13 +916,13 @@ traitlets = "*" [[package]] name = "mdit-py-plugins" -version = "0.4.0" +version = "0.4.1" 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"}, + {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, + {file = "mdit_py_plugins-0.4.1.tar.gz", hash = "sha256:834b8ac23d1cd60cec703646ffd22ae97b7955a6d596eb1d304be1e251ae499c"}, ] [package.dependencies] @@ -1036,6 +955,24 @@ files = [ {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] +[[package]] +name = "mkl" +version = "2021.4.0" +description = "Intel® oneAPI Math Kernel Library" +optional = false +python-versions = "*" +files = [ + {file = "mkl-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:67460f5cd7e30e405b54d70d1ed3ca78118370b65f7327d495e9c8847705e2fb"}, + {file = "mkl-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:636d07d90e68ccc9630c654d47ce9fdeb036bb46e2b193b3a9ac8cfea683cce5"}, + {file = "mkl-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:398dbf2b0d12acaf54117a5210e8f191827f373d362d796091d161f610c1ebfb"}, + {file = "mkl-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:439c640b269a5668134e3dcbcea4350459c4a8bc46469669b2d67e07e3d330e8"}, + {file = "mkl-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:ceef3cafce4c009dd25f65d7ad0d833a0fbadc3d8903991ec92351fe5de1e718"}, +] + +[package.dependencies] +intel-openmp = "==2021.*" +tbb = "==2021.*" + [[package]] name = "mpmath" version = "1.3.0" @@ -1117,13 +1054,13 @@ test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets [[package]] name = "nbconvert" -version = "7.16.2" +version = "7.16.4" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.2-py3-none-any.whl", hash = "sha256:0c01c23981a8de0220255706822c40b751438e32467d6a686e26be08ba784382"}, - {file = "nbconvert-7.16.2.tar.gz", hash = "sha256:8310edd41e1c43947e4ecf16614c61469ebc024898eb808cce0999860fc9fb16"}, + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, ] [package.dependencies] @@ -1145,29 +1082,29 @@ tinycss2 = "*" traitlets = ">=5.1" [package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] +qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.2" +version = "5.10.4" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, ] [package.dependencies] -fastjsonschema = "*" +fastjsonschema = ">=2.15" jsonschema = ">=2.6" -jupyter-core = "*" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" traitlets = ">=5.1" [package.extras] @@ -1176,13 +1113,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nbmake" -version = "1.5.3" +version = "1.5.4" description = "Pytest plugin for testing notebooks" optional = false -python-versions = ">=3.8.0,<4.0.0" +python-versions = "<4.0.0,>=3.8.0" files = [ - {file = "nbmake-1.5.3-py3-none-any.whl", hash = "sha256:6cfa2b926d335e9c6dce7e8543d01b2398b0a56c03131c5c0bce2b1722116212"}, - {file = "nbmake-1.5.3.tar.gz", hash = "sha256:0b76b829e8b128eb1895539bacf515a1ee85e5b7b492cdfe76e3a12f804e069e"}, + {file = "nbmake-1.5.4-py3-none-any.whl", hash = "sha256:8e440a61a7d4ab303064aa86b8d2c088177c89960e2b4a0f91a768dc9f68382b"}, + {file = "nbmake-1.5.4.tar.gz", hash = "sha256:56417fe80d50069671122955532df6e26369a23f68b9c6e2191ae9cfef19abb2"}, ] [package.dependencies] @@ -1396,23 +1333,25 @@ nvidia-nvjitlink-cu12 = "*" [[package]] name = "nvidia-nccl-cu12" -version = "2.19.3" +version = "2.20.5" description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl", hash = "sha256:a9734707a2c96443331c1e48c717024aa6678a0e2a4cb66b2c364d18cee6b48d"}, + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, ] [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.4.99" +version = "12.5.40" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c6428836d20fe7e327191c175791d38570e10762edc588fb46749217cd444c74"}, - {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-win_amd64.whl", hash = "sha256:991905ffa2144cb603d8ca7962d75c35334ae82bf92820b6ba78157277da1ad2"}, + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_aarch64.whl", hash = "sha256:004186d5ea6a57758fd6d57052a123c73a4815adf365eb8dd6a85c9eaa7535ff"}, + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d9714f27c1d0f0895cd8915c07a87a1d0029a0aa36acaf9156952ec2a8a12189"}, + {file = "nvidia_nvjitlink_cu12-12.5.40-py3-none-win_amd64.whl", hash = "sha256:c3401dc8543b52d3a8158007a0c1ab4e9c768fcbd24153a48c86972102197ddd"}, ] [[package]] @@ -1428,57 +1367,57 @@ files = [ [[package]] name = "packaging" -version = "23.2" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] name = "pandas" -version = "2.2.1" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8df8612be9cd1c7797c93e1c5df861b2ddda0b48b08f2c3eaa0702cf88fb5f88"}, - {file = "pandas-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0f573ab277252ed9aaf38240f3b54cfc90fff8e5cab70411ee1d03f5d51f3944"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f02a3a6c83df4026e55b63c1f06476c9aa3ed6af3d89b4f04ea656ccdaaaa359"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c38ce92cb22a4bea4e3929429aa1067a454dcc9c335799af93ba9be21b6beb51"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c2ce852e1cf2509a69e98358e8458775f89599566ac3775e70419b98615f4b06"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53680dc9b2519cbf609c62db3ed7c0b499077c7fefda564e330286e619ff0dd9"}, - {file = "pandas-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:94e714a1cca63e4f5939cdce5f29ba8d415d85166be3441165edd427dc9f6bc0"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f821213d48f4ab353d20ebc24e4faf94ba40d76680642fb7ce2ea31a3ad94f9b"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70e00c2d894cb230e5c15e4b1e1e6b2b478e09cf27cc593a11ef955b9ecc81a"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97fbb5387c69209f134893abc788a6486dbf2f9e511070ca05eed4b930b1b02"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101d0eb9c5361aa0146f500773395a03839a5e6ecde4d4b6ced88b7e5a1a6403"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7d2ed41c319c9fb4fd454fe25372028dfa417aacb9790f68171b2e3f06eae8cd"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5d3c00557d657c8773ef9ee702c61dd13b9d7426794c9dfeb1dc4a0bf0ebc7"}, - {file = "pandas-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:06cf591dbaefb6da9de8472535b185cba556d0ce2e6ed28e21d919704fef1a9e"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:88ecb5c01bb9ca927ebc4098136038519aa5d66b44671861ffab754cae75102c"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f6ec3baec203c13e3f8b139fb0f9f86cd8c0b94603ae3ae8ce9a422e9f5bee"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a935a90a76c44fe170d01e90a3594beef9e9a6220021acfb26053d01426f7dc2"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c391f594aae2fd9f679d419e9a4d5ba4bce5bb13f6a989195656e7dc4b95c8f0"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9d1265545f579edf3f8f0cb6f89f234f5e44ba725a34d86535b1a1d38decbccc"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11940e9e3056576ac3244baef2fedade891977bcc1cb7e5cc8f8cc7d603edc89"}, - {file = "pandas-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4acf681325ee1c7f950d058b05a820441075b0dd9a2adf5c4835b9bc056bf4fb"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9bd8a40f47080825af4317d0340c656744f2bfdb6819f818e6ba3cd24c0e1397"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df0c37ebd19e11d089ceba66eba59a168242fc6b7155cba4ffffa6eccdfb8f16"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:739cc70eaf17d57608639e74d63387b0d8594ce02f69e7a0b046f117974b3019"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d3558d263073ed95e46f4650becff0c5e1ffe0fc3a015de3c79283dfbdb3df"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4aa1d8707812a658debf03824016bf5ea0d516afdea29b7dc14cf687bc4d4ec6"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:76f27a809cda87e07f192f001d11adc2b930e93a2b0c4a236fde5429527423be"}, - {file = "pandas-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:1ba21b1d5c0e43416218db63037dbe1a01fc101dc6e6024bcad08123e48004ab"}, - {file = "pandas-2.2.1.tar.gz", hash = "sha256:0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, ] [package.dependencies] numpy = [ - {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1522,18 +1461,18 @@ files = [ [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pexpect" @@ -1550,28 +1489,29 @@ ptyprocess = ">=0.5" [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1580,13 +1520,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prompt-toolkit" -version = "3.0.43" +version = "3.0.47" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, - {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, ] [package.dependencies] @@ -1619,39 +1559,38 @@ tests = ["pytest"] [[package]] name = "pybigwig" -version = "0.3.22" +version = "0.3.23" description = "A package for accessing bigWig files using libBigWig" -optional = false -python-versions = ">=3.7" +optional = true +python-versions = ">=3.9" files = [ - {file = "pyBigWig-0.3.22-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55031f67de6b117d49ba191738ea9707239bdacbd623a046e03917913257ac29"}, - {file = "pyBigWig-0.3.22-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc8eb9f312b7ba99f90b490bcc0341f317549c2ef0bb65cd94c20241cbe67981"}, - {file = "pyBigWig-0.3.22-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647ae8b613d6dfc691cadd61703f81fdf3c685177c7e2e3e730c4f9c0d6f93c6"}, - {file = "pyBigWig-0.3.22-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b653a085d829d02154a68c438df2b5f2b0e560f06dab55cd191e7b3ca7982f2"}, - {file = "pyBigWig-0.3.22-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85d740f7e9148d21c1150c0c822600751573a62ccc7ea037495e915434ebefa7"}, - {file = "pyBigWig-0.3.22.tar.gz", hash = "sha256:5d4426f754bd7b7f6dc21d6c3f93b58a96a65b6eb2e578ae03b31a71272d2243"}, + {file = "pyBigWig-0.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0d90c3c2d6735a4cf85592e8f07f57b976f457b09fcc6cf7e8fe123187c819"}, + {file = "pyBigWig-0.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:570a1672a82456c05e495ea2d11cf5d410b73aca3d1f3524acf9a9688f5e0154"}, + {file = "pyBigWig-0.3.23-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa0d9016181640ab0bf9b9e5cff530b4c5be437d20898732cc963e9b116981f0"}, + {file = "pyBigWig-0.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0f598f063e40a93cc553342b07ae7037a47a1be92746b4651456e9e3c9a019d"}, + {file = "pybigwig-0.3.23.tar.gz", hash = "sha256:b780c2b77f024c7967d7bd2eca0fa39a4d939c86b807135960e26faafafbec84"}, ] [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydata-sphinx-theme" -version = "0.15.2" +version = "0.15.4" description = "Bootstrap-based Sphinx theme from the PyData community" optional = false python-versions = ">=3.9" files = [ - {file = "pydata_sphinx_theme-0.15.2-py3-none-any.whl", hash = "sha256:0c5fa1fa98a9b26dae590666ff576f27e26c7ba708fee754ecb9e07359ed4588"}, - {file = "pydata_sphinx_theme-0.15.2.tar.gz", hash = "sha256:4243fee85b3afcfae9df64f83210a04e7182e53bc3db8841ffff6d21d95ae320"}, + {file = "pydata_sphinx_theme-0.15.4-py3-none-any.whl", hash = "sha256:2136ad0e9500d0949f96167e63f3e298620040aea8f9c74621959eda5d4cf8e6"}, + {file = "pydata_sphinx_theme-0.15.4.tar.gz", hash = "sha256:7762ec0ac59df3acecf49fd2f889e1b4565dbce8b88b2e29ee06fdd90645a06d"}, ] [package.dependencies] @@ -1661,28 +1600,28 @@ beautifulsoup4 = "*" docutils = "!=0.17.0" packaging = "*" pygments = ">=2.7" -sphinx = ">=5.0" +sphinx = ">=5" 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"] +dev = ["pandoc", "pre-commit", "pydata-sphinx-theme[doc,test]", "pyyaml", "sphinx-theme-builder[cli]", "tox"] +doc = ["ablog (>=0.11.8)", "colorama", "graphviz", "ipykernel", "ipyleaflet", "ipywidgets", "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.1)", "sphinxext-rediraffe", "xarray"] +i18n = ["Babel", "jinja2"] +test = ["pytest", "pytest-cov", "pytest-regressions", "sphinx[test]"] [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -1816,104 +1755,99 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.2" +version = "26.0.3" description = "Python bindings for 0MQ" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, - {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, - {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, - {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, - {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, - {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, - {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, - {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, - {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, - {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, - {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, - {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, - {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:44dd6fc3034f1eaa72ece33588867df9e006a7303725a12d64c3dff92330f625"}, + {file = "pyzmq-26.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:acb704195a71ac5ea5ecf2811c9ee19ecdc62b91878528302dd0be1b9451cc90"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbb9c997932473a27afa93954bb77a9f9b786b4ccf718d903f35da3232317de"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bcb34f869d431799c3ee7d516554797f7760cb2198ecaa89c3f176f72d062be"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ece17ec5f20d7d9b442e5174ae9f020365d01ba7c112205a4d59cf19dc38ee"}, + {file = "pyzmq-26.0.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ba6e5e6588e49139a0979d03a7deb9c734bde647b9a8808f26acf9c547cab1bf"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3bf8b000a4e2967e6dfdd8656cd0757d18c7e5ce3d16339e550bd462f4857e59"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2136f64fbb86451dbbf70223635a468272dd20075f988a102bf8a3f194a411dc"}, + {file = "pyzmq-26.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e8918973fbd34e7814f59143c5f600ecd38b8038161239fd1a3d33d5817a38b8"}, + {file = "pyzmq-26.0.3-cp310-cp310-win32.whl", hash = "sha256:0aaf982e68a7ac284377d051c742610220fd06d330dcd4c4dbb4cdd77c22a537"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:f1a9b7d00fdf60b4039f4455afd031fe85ee8305b019334b72dcf73c567edc47"}, + {file = "pyzmq-26.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:80b12f25d805a919d53efc0a5ad7c0c0326f13b4eae981a5d7b7cc343318ebb7"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:a72a84570f84c374b4c287183debc776dc319d3e8ce6b6a0041ce2e400de3f32"}, + {file = "pyzmq-26.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ca684ee649b55fd8f378127ac8462fb6c85f251c2fb027eb3c887e8ee347bcd"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e222562dc0f38571c8b1ffdae9d7adb866363134299264a1958d077800b193b7"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17cde1db0754c35a91ac00b22b25c11da6eec5746431d6e5092f0cd31a3fea9"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7c0c0b3244bb2275abe255d4a30c050d541c6cb18b870975553f1fb6f37527"}, + {file = "pyzmq-26.0.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:ac97a21de3712afe6a6c071abfad40a6224fd14fa6ff0ff8d0c6e6cd4e2f807a"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:88b88282e55fa39dd556d7fc04160bcf39dea015f78e0cecec8ff4f06c1fc2b5"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:72b67f966b57dbd18dcc7efbc1c7fc9f5f983e572db1877081f075004614fcdd"}, + {file = "pyzmq-26.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4b6cecbbf3b7380f3b61de3a7b93cb721125dc125c854c14ddc91225ba52f83"}, + {file = "pyzmq-26.0.3-cp311-cp311-win32.whl", hash = "sha256:eed56b6a39216d31ff8cd2f1d048b5bf1700e4b32a01b14379c3b6dde9ce3aa3"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:3191d312c73e3cfd0f0afdf51df8405aafeb0bad71e7ed8f68b24b63c4f36500"}, + {file = "pyzmq-26.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:b6907da3017ef55139cf0e417c5123a84c7332520e73a6902ff1f79046cd3b94"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:068ca17214038ae986d68f4a7021f97e187ed278ab6dccb79f837d765a54d753"}, + {file = "pyzmq-26.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7821d44fe07335bea256b9f1f41474a642ca55fa671dfd9f00af8d68a920c2d4"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eeb438a26d87c123bb318e5f2b3d86a36060b01f22fbdffd8cf247d52f7c9a2b"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69ea9d6d9baa25a4dc9cef5e2b77b8537827b122214f210dd925132e34ae9b12"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7daa3e1369355766dea11f1d8ef829905c3b9da886ea3152788dc25ee6079e02"}, + {file = "pyzmq-26.0.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6ca7a9a06b52d0e38ccf6bca1aeff7be178917893f3883f37b75589d42c4ac20"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1b7d0e124948daa4d9686d421ef5087c0516bc6179fdcf8828b8444f8e461a77"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e746524418b70f38550f2190eeee834db8850088c834d4c8406fbb9bc1ae10b2"}, + {file = "pyzmq-26.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6b3146f9ae6af82c47a5282ac8803523d381b3b21caeae0327ed2f7ecb718798"}, + {file = "pyzmq-26.0.3-cp312-cp312-win32.whl", hash = "sha256:2b291d1230845871c00c8462c50565a9cd6026fe1228e77ca934470bb7d70ea0"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:926838a535c2c1ea21c903f909a9a54e675c2126728c21381a94ddf37c3cbddf"}, + {file = "pyzmq-26.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:5bf6c237f8c681dfb91b17f8435b2735951f0d1fad10cc5dfd96db110243370b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c0991f5a96a8e620f7691e61178cd8f457b49e17b7d9cfa2067e2a0a89fc1d5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dbf012d8fcb9f2cf0643b65df3b355fdd74fc0035d70bb5c845e9e30a3a4654b"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:01fbfbeb8249a68d257f601deb50c70c929dc2dfe683b754659569e502fbd3aa"}, + {file = "pyzmq-26.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c8eb19abe87029c18f226d42b8a2c9efdd139d08f8bf6e085dd9075446db450"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5344b896e79800af86ad643408ca9aa303a017f6ebff8cee5a3163c1e9aec987"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:204e0f176fd1d067671157d049466869b3ae1fc51e354708b0dc41cf94e23a3a"}, + {file = "pyzmq-26.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a42db008d58530efa3b881eeee4991146de0b790e095f7ae43ba5cc612decbc5"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win32.whl", hash = "sha256:8d7a498671ca87e32b54cb47c82a92b40130a26c5197d392720a1bce1b3c77cf"}, + {file = "pyzmq-26.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3b4032a96410bdc760061b14ed6a33613ffb7f702181ba999df5d16fb96ba16a"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2cc4e280098c1b192c42a849de8de2c8e0f3a84086a76ec5b07bfee29bda7d18"}, + {file = "pyzmq-26.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bde86a2ed3ce587fa2b207424ce15b9a83a9fa14422dcc1c5356a13aed3df9d"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34106f68e20e6ff253c9f596ea50397dbd8699828d55e8fa18bd4323d8d966e6"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ebbbd0e728af5db9b04e56389e2299a57ea8b9dd15c9759153ee2455b32be6ad"}, + {file = "pyzmq-26.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b1d1c631e5940cac5a0b22c5379c86e8df6a4ec277c7a856b714021ab6cfad"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e891ce81edd463b3b4c3b885c5603c00141151dd9c6936d98a680c8c72fe5c67"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9b273ecfbc590a1b98f014ae41e5cf723932f3b53ba9367cfb676f838038b32c"}, + {file = "pyzmq-26.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b32bff85fb02a75ea0b68f21e2412255b5731f3f389ed9aecc13a6752f58ac97"}, + {file = "pyzmq-26.0.3-cp38-cp38-win32.whl", hash = "sha256:f6c21c00478a7bea93caaaef9e7629145d4153b15a8653e8bb4609d4bc70dbfc"}, + {file = "pyzmq-26.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:3401613148d93ef0fd9aabdbddb212de3db7a4475367f49f590c837355343972"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2ed8357f4c6e0daa4f3baf31832df8a33334e0fe5b020a61bc8b345a3db7a606"}, + {file = "pyzmq-26.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1c8f2a2ca45292084c75bb6d3a25545cff0ed931ed228d3a1810ae3758f975f"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b63731993cdddcc8e087c64e9cf003f909262b359110070183d7f3025d1c56b5"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3cd31f859b662ac5d7f4226ec7d8bd60384fa037fc02aee6ff0b53ba29a3ba8"}, + {file = "pyzmq-26.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115f8359402fa527cf47708d6f8a0f8234f0e9ca0cab7c18c9c189c194dbf620"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:715bdf952b9533ba13dfcf1f431a8f49e63cecc31d91d007bc1deb914f47d0e4"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e1258c639e00bf5e8a522fec6c3eaa3e30cf1c23a2f21a586be7e04d50c9acab"}, + {file = "pyzmq-26.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15c59e780be8f30a60816a9adab900c12a58d79c1ac742b4a8df044ab2a6d920"}, + {file = "pyzmq-26.0.3-cp39-cp39-win32.whl", hash = "sha256:d0cdde3c78d8ab5b46595054e5def32a755fc028685add5ddc7403e9f6de9879"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:ce828058d482ef860746bf532822842e0ff484e27f540ef5c813d516dd8896d2"}, + {file = "pyzmq-26.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:788f15721c64109cf720791714dc14afd0f449d63f3a5487724f024345067381"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c18645ef6294d99b256806e34653e86236eb266278c8ec8112622b61db255de"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e6bc96ebe49604df3ec2c6389cc3876cabe475e6bfc84ced1bf4e630662cb35"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:971e8990c5cc4ddcff26e149398fc7b0f6a042306e82500f5e8db3b10ce69f84"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8416c23161abd94cc7da80c734ad7c9f5dbebdadfdaa77dad78244457448223"}, + {file = "pyzmq-26.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:082a2988364b60bb5de809373098361cf1dbb239623e39e46cb18bc035ed9c0c"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d57dfbf9737763b3a60d26e6800e02e04284926329aee8fb01049635e957fe81"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:77a85dca4c2430ac04dc2a2185c2deb3858a34fe7f403d0a946fa56970cf60a1"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c82a6d952a1d555bf4be42b6532927d2a5686dd3c3e280e5f63225ab47ac1f5"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4496b1282c70c442809fc1b151977c3d967bfb33e4e17cedbf226d97de18f709"}, + {file = "pyzmq-26.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e4946d6bdb7ba972dfda282f9127e5756d4f299028b1566d1245fa0d438847e6"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03c0ae165e700364b266876d712acb1ac02693acd920afa67da2ebb91a0b3c09"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3e3070e680f79887d60feeda051a58d0ac36622e1759f305a41059eff62c6da7"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6ca08b840fe95d1c2bd9ab92dac5685f949fc6f9ae820ec16193e5ddf603c3b2"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e76654e9dbfb835b3518f9938e565c7806976c07b37c33526b574cc1a1050480"}, + {file = "pyzmq-26.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:871587bdadd1075b112e697173e946a07d722459d20716ceb3d1bd6c64bd08ce"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d0a2d1bd63a4ad79483049b26514e70fa618ce6115220da9efdff63688808b17"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0270b49b6847f0d106d64b5086e9ad5dc8a902413b5dbbb15d12b60f9c1747a4"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703c60b9910488d3d0954ca585c34f541e506a091a41930e663a098d3b794c67"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74423631b6be371edfbf7eabb02ab995c2563fee60a80a30829176842e71722a"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4adfbb5451196842a88fda3612e2c0414134874bffb1c2ce83ab4242ec9e027d"}, + {file = "pyzmq-26.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3516119f4f9b8671083a70b6afaa0a070f5683e431ab3dc26e9215620d7ca1ad"}, + {file = "pyzmq-26.0.3.tar.gz", hash = "sha256:dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a"}, ] [package.dependencies] @@ -1921,13 +1855,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "referencing" -version = "0.33.0" +version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, - {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] @@ -1936,13 +1870,13 @@ rpds-py = ">=0.7.0" [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -1957,110 +1891,110 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rpds-py" -version = "0.18.0" +version = "0.18.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, ] [[package]] @@ -2087,87 +2021,90 @@ typehints = ["sphinx-autodoc-typehints (>=1.15.2)"] [[package]] name = "scikit-learn" -version = "1.4.1.post1" +version = "1.5.0" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" files = [ - {file = "scikit-learn-1.4.1.post1.tar.gz", hash = "sha256:93d3d496ff1965470f9977d05e5ec3376fb1e63b10e4fda5e39d23c2d8969a30"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c540aaf44729ab5cd4bd5e394f2b375e65ceaea9cdd8c195788e70433d91bbc5"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4310bff71aa98b45b46cd26fa641309deb73a5d1c0461d181587ad4f30ea3c36"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f43dd527dabff5521af2786a2f8de5ba381e182ec7292663508901cf6ceaf6e"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02e27d65b0c7dc32f2c5eb601aaf5530b7a02bfbe92438188624524878336f2"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-win_amd64.whl", hash = "sha256:629e09f772ad42f657ca60a1a52342eef786218dd20cf1369a3b8d085e55ef8f"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6145dfd9605b0b50ae72cdf72b61a2acd87501369a763b0d73d004710ebb76b5"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1afed6951bc9d2053c6ee9a518a466cbc9b07c6a3f9d43bfe734192b6125d508"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce03506ccf5f96b7e9030fea7eb148999b254c44c10182ac55857bc9b5d4815f"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ba516fcdc73d60e7f48cbb0bccb9acbdb21807de3651531208aac73c758e3ab"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-win_amd64.whl", hash = "sha256:78cd27b4669513b50db4f683ef41ea35b5dddc797bd2bbd990d49897fd1c8a46"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a1e289f33f613cefe6707dead50db31930530dc386b6ccff176c786335a7b01c"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0df87de9ce1c0140f2818beef310fb2e2afdc1e66fc9ad587965577f17733649"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712c1c69c45b58ef21635360b3d0a680ff7d83ac95b6f9b82cf9294070cda710"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1754b0c2409d6ed5a3380512d0adcf182a01363c669033a2b55cca429ed86a81"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-win_amd64.whl", hash = "sha256:1d491ef66e37f4e812db7e6c8286520c2c3fc61b34bf5e59b67b4ce528de93af"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aa0029b78ef59af22cfbd833e8ace8526e4df90212db7ceccbea582ebb5d6794"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:14e4c88436ac96bf69eb6d746ac76a574c314a23c6961b7d344b38877f20fee1"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cd3a77c32879311f2aa93466d3c288c955ef71d191503cf0677c3340ae8ae0"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a3ee19211ded1a52ee37b0a7b373a8bfc66f95353af058a210b692bd4cda0dd"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-win_amd64.whl", hash = "sha256:234b6bda70fdcae9e4abbbe028582ce99c280458665a155eed0b820599377d25"}, + {file = "scikit_learn-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12e40ac48555e6b551f0a0a5743cc94cc5a765c9513fe708e01f0aa001da2801"}, + {file = "scikit_learn-1.5.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f405c4dae288f5f6553b10c4ac9ea7754d5180ec11e296464adb5d6ac68b6ef5"}, + {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df8ccabbf583315f13160a4bb06037bde99ea7d8211a69787a6b7c5d4ebb6fc3"}, + {file = "scikit_learn-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c75ea812cd83b1385bbfa94ae971f0d80adb338a9523f6bbcb5e0b0381151d4"}, + {file = "scikit_learn-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:a90c5da84829a0b9b4bf00daf62754b2be741e66b5946911f5bdfaa869fcedd6"}, + {file = "scikit_learn-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a65af2d8a6cce4e163a7951a4cfbfa7fceb2d5c013a4b593686c7f16445cf9d"}, + {file = "scikit_learn-1.5.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:4c0c56c3005f2ec1db3787aeaabefa96256580678cec783986836fc64f8ff622"}, + {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f77547165c00625551e5c250cefa3f03f2fc92c5e18668abd90bfc4be2e0bff"}, + {file = "scikit_learn-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:118a8d229a41158c9f90093e46b3737120a165181a1b58c03461447aa4657415"}, + {file = "scikit_learn-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:a03b09f9f7f09ffe8c5efffe2e9de1196c696d811be6798ad5eddf323c6f4d40"}, + {file = "scikit_learn-1.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:460806030c666addee1f074788b3978329a5bfdc9b7d63e7aad3f6d45c67a210"}, + {file = "scikit_learn-1.5.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:1b94d6440603752b27842eda97f6395f570941857456c606eb1d638efdb38184"}, + {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d82c2e573f0f2f2f0be897e7a31fcf4e73869247738ab8c3ce7245549af58ab8"}, + {file = "scikit_learn-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3a10e1d9e834e84d05e468ec501a356226338778769317ee0b84043c0d8fb06"}, + {file = "scikit_learn-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:855fc5fa8ed9e4f08291203af3d3e5fbdc4737bd617a371559aaa2088166046e"}, + {file = "scikit_learn-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:40fb7d4a9a2db07e6e0cae4dc7bdbb8fada17043bac24104d8165e10e4cff1a2"}, + {file = "scikit_learn-1.5.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:47132440050b1c5beb95f8ba0b2402bbd9057ce96ec0ba86f2f445dd4f34df67"}, + {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174beb56e3e881c90424e21f576fa69c4ffcf5174632a79ab4461c4c960315ac"}, + {file = "scikit_learn-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261fe334ca48f09ed64b8fae13f9b46cc43ac5f580c4a605cbb0a517456c8f71"}, + {file = "scikit_learn-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:057b991ac64b3e75c9c04b5f9395eaf19a6179244c089afdebaad98264bff37c"}, + {file = "scikit_learn-1.5.0.tar.gz", hash = "sha256:789e3db01c750ed6d496fa2db7d50637857b451e57bcae863bff707c1247bef7"}, ] [package.dependencies] joblib = ">=1.2.0" -numpy = ">=1.19.5,<2.0" +numpy = ">=1.19.5" scipy = ">=1.6.0" -threadpoolctl = ">=2.0.0" +threadpoolctl = ">=3.1.0" [package.extras] -benchmark = ["matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "pandas (>=1.1.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] +build = ["cython (>=3.0.10)", "meson-python (>=0.15.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=23.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.19.12)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.17.2)"] +install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] +maintenance = ["conda-lock (==2.5.6)"] +tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.23)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "scikit-image (>=0.17.2)"] [[package]] name = "scipy" -version = "1.12.0" +version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, ] [package.dependencies] -numpy = ">=1.22.4,<1.29.0" +numpy = ">=1.22.4,<2.3" [package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "six" @@ -2204,20 +2141,20 @@ files = [ [[package]] name = "sphinx" -version = "7.2.6" +version = "7.3.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" files = [ - {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, - {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, + {file = "sphinx-7.3.7-py3-none-any.whl", hash = "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3"}, + {file = "sphinx-7.3.7.tar.gz", hash = "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"}, ] [package.dependencies] -alabaster = ">=0.7,<0.8" +alabaster = ">=0.7.14,<0.8.0" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" +docutils = ">=0.18.1,<0.22" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -2231,11 +2168,12 @@ sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] +lint = ["flake8 (>=3.5.0)", "importlib_metadata", "mypy (==1.9.0)", "pytest (>=6.0)", "ruff (==0.3.7)", "sphinx-lint", "tomli", "types-docutils", "types-requests"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools (>=67.0)"] [[package]] name = "sphinx-autodoc-typehints" @@ -2258,23 +2196,23 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", [[package]] name = "sphinx-book-theme" -version = "1.1.2" +version = "1.1.3" 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.2-py3-none-any.whl", hash = "sha256:cee744466fde48f50302b851291b208aa67e726ca31b7a3bfb9b6e6a145663e0"}, - {file = "sphinx_book_theme-1.1.2.tar.gz", hash = "sha256:7f3abcd146ca82e6f39d6db53711102b1c1d328d12f65e3e47ad9bf842614a49"}, + {file = "sphinx_book_theme-1.1.3-py3-none-any.whl", hash = "sha256:a554a9a7ac3881979a87a2b10f633aa2a5706e72218a10f71be38b3c9e831ae9"}, + {file = "sphinx_book_theme-1.1.3.tar.gz", hash = "sha256:1f25483b1846cb3d353a6bc61b3b45b031f4acf845665d7da90e01ae0aef5b4d"}, ] [package.dependencies] -pydata-sphinx-theme = ">=0.14" +pydata-sphinx-theme = ">=0.15.2" 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"] +test = ["beautifulsoup4", "coverage", "defusedxml", "myst-nb", "pytest", "pytest-cov", "pytest-regressions", "sphinx_thebe"] [[package]] name = "sphinx-copybutton" @@ -2484,38 +2422,51 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "sympy" -version = "1.12" +version = "1.12.1" description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, + {file = "sympy-1.12.1-py3-none-any.whl", hash = "sha256:9b2cbc7f1a640289430e13d2a56f02f867a1da0190f2f99d8968c2f74da0e515"}, + {file = "sympy-1.12.1.tar.gz", hash = "sha256:2877b03f998cd8c08f07cd0de5b767119cd3ef40d09f41c30d722f6686b0fb88"}, ] [package.dependencies] -mpmath = ">=0.19" +mpmath = ">=1.1.0,<1.4.0" + +[[package]] +name = "tbb" +version = "2021.13.0" +description = "Intel® oneAPI Threading Building Blocks (oneTBB)" +optional = false +python-versions = "*" +files = [ + {file = "tbb-2021.13.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:a2567725329639519d46d92a2634cf61e76601dac2f777a05686fea546c4fe4f"}, + {file = "tbb-2021.13.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:aaf667e92849adb012b8874d6393282afc318aca4407fc62f912ee30a22da46a"}, + {file = "tbb-2021.13.0-py3-none-win32.whl", hash = "sha256:6669d26703e9943f6164c6407bd4a237a45007e79b8d3832fe6999576eaaa9ef"}, + {file = "tbb-2021.13.0-py3-none-win_amd64.whl", hash = "sha256:3528a53e4bbe64b07a6112b4c5a00ff3c61924ee46c9c68e004a1ac7ad1f09c3"}, +] [[package]] name = "threadpoolctl" -version = "3.3.0" +version = "3.5.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.3.0-py3-none-any.whl", hash = "sha256:6155be1f4a39f31a18ea70f94a77e0ccd57dced08122ea61109e7da89883781e"}, - {file = "threadpoolctl-3.3.0.tar.gz", hash = "sha256:5dac632b4fa2d43f42130267929af3ba01399ef4bd1882918e92dbc30365d30c"}, + {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, + {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, ] [[package]] name = "tinycss2" -version = "1.2.1" +version = "1.3.0" description = "A tiny CSS parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, ] [package.dependencies] @@ -2523,7 +2474,7 @@ webencodings = ">=0.4" [package.extras] doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] +test = ["pytest", "ruff"] [[package]] name = "tomli" @@ -2538,42 +2489,38 @@ files = [ [[package]] name = "torch" -version = "2.2.1" +version = "2.3.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.2.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8d3bad336dd2c93c6bcb3268e8e9876185bda50ebde325ef211fb565c7d15273"}, - {file = "torch-2.2.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5297f13370fdaca05959134b26a06a7f232ae254bf2e11a50eddec62525c9006"}, - {file = "torch-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:5f5dee8433798888ca1415055f5e3faf28a3bad660e4c29e1014acd3275ab11a"}, - {file = "torch-2.2.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b6d78338acabf1fb2e88bf4559d837d30230cf9c3e4337261f4d83200df1fcbe"}, - {file = "torch-2.2.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:6ab3ea2e29d1aac962e905142bbe50943758f55292f1b4fdfb6f4792aae3323e"}, - {file = "torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157"}, - {file = "torch-2.2.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d6227060f268894f92c61af0a44c0d8212e19cb98d05c20141c73312d923bc0a"}, - {file = "torch-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:77e990af75fb1675490deb374d36e726f84732cd5677d16f19124934b2409ce9"}, - {file = "torch-2.2.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:46085e328d9b738c261f470231e987930f4cc9472d9ffb7087c7a1343826ac51"}, - {file = "torch-2.2.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:2d9e7e5ecbb002257cf98fae13003abbd620196c35f85c9e34c2adfb961321ec"}, - {file = "torch-2.2.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ada53aebede1c89570e56861b08d12ba4518a1f8b82d467c32665ec4d1f4b3c8"}, - {file = "torch-2.2.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:be21d4c41ecebed9e99430dac87de1439a8c7882faf23bba7fea3fea7b906ac1"}, - {file = "torch-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:79848f46196750367dcdf1d2132b722180b9d889571e14d579ae82d2f50596c5"}, - {file = "torch-2.2.1-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:7ee804847be6be0032fbd2d1e6742fea2814c92bebccb177f0d3b8e92b2d2b18"}, - {file = "torch-2.2.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:84b2fb322ab091039fdfe74e17442ff046b258eb5e513a28093152c5b07325a7"}, - {file = "torch-2.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5c0c83aa7d94569997f1f474595e808072d80b04d34912ce6f1a0e1c24b0c12a"}, - {file = "torch-2.2.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:91a1b598055ba06b2c386415d2e7f6ac818545e94c5def597a74754940188513"}, - {file = "torch-2.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f93ddf3001ecec16568390b507652644a3a103baa72de3ad3b9c530e3277098"}, - {file = "torch-2.2.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0e8bdd4c77ac2584f33ee14c6cd3b12767b4da508ec4eed109520be7212d1069"}, - {file = "torch-2.2.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6a21bcd7076677c97ca7db7506d683e4e9db137e8420eb4a68fb67c3668232a7"}, - {file = "torch-2.2.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f1b90ac61f862634039265cd0f746cc9879feee03ff962c803486301b778714b"}, - {file = "torch-2.2.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ed9e29eb94cd493b36bca9cb0b1fd7f06a0688215ad1e4b3ab4931726e0ec092"}, - {file = "torch-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:c47bc25744c743f3835831a20efdcfd60aeb7c3f9804a213f61e45803d16c2a5"}, - {file = "torch-2.2.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:0952549bcb43448c8d860d5e3e947dd18cbab491b14638e21750cb3090d5ad3e"}, - {file = "torch-2.2.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:26bd2272ec46fc62dcf7d24b2fb284d44fcb7be9d529ebf336b9860350d674ed"}, + {file = "torch-2.3.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:605a25b23944be5ab7c3467e843580e1d888b8066e5aaf17ff7bf9cc30001cc3"}, + {file = "torch-2.3.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f2357eb0965583a0954d6f9ad005bba0091f956aef879822274b1bcdb11bd308"}, + {file = "torch-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:32b05fe0d1ada7f69c9f86c14ff69b0ef1957a5a54199bacba63d22d8fab720b"}, + {file = "torch-2.3.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:7c09a94362778428484bcf995f6004b04952106aee0ef45ff0b4bab484f5498d"}, + {file = "torch-2.3.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:b2ec81b61bb094ea4a9dee1cd3f7b76a44555375719ad29f05c0ca8ef596ad39"}, + {file = "torch-2.3.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:490cc3d917d1fe0bd027057dfe9941dc1d6d8e3cae76140f5dd9a7e5bc7130ab"}, + {file = "torch-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5802530783bd465fe66c2df99123c9a54be06da118fbd785a25ab0a88123758a"}, + {file = "torch-2.3.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:a7dd4ed388ad1f3d502bf09453d5fe596c7b121de7e0cfaca1e2017782e9bbac"}, + {file = "torch-2.3.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:a486c0b1976a118805fc7c9641d02df7afbb0c21e6b555d3bb985c9f9601b61a"}, + {file = "torch-2.3.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:224259821fe3e4c6f7edf1528e4fe4ac779c77addaa74215eb0b63a5c474d66c"}, + {file = "torch-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5fdccbf6f1334b2203a61a0e03821d5845f1421defe311dabeae2fc8fbeac2d"}, + {file = "torch-2.3.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:3c333dc2ebc189561514eda06e81df22bf8fb64e2384746b2cb9f04f96d1d4c8"}, + {file = "torch-2.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:07e9ba746832b8d069cacb45f312cadd8ad02b81ea527ec9766c0e7404bb3feb"}, + {file = "torch-2.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:462d1c07dbf6bb5d9d2f3316fee73a24f3d12cd8dacf681ad46ef6418f7f6626"}, + {file = "torch-2.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff60bf7ce3de1d43ad3f6969983f321a31f0a45df3690921720bcad6a8596cc4"}, + {file = "torch-2.3.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:bee0bd33dc58aa8fc8a7527876e9b9a0e812ad08122054a5bff2ce5abf005b10"}, + {file = "torch-2.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:aaa872abde9a3d4f91580f6396d54888620f4a0b92e3976a6034759df4b961ad"}, + {file = "torch-2.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3d7a7f7ef21a7520510553dc3938b0c57c116a7daee20736a9e25cbc0e832bdc"}, + {file = "torch-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:4777f6cefa0c2b5fa87223c213e7b6f417cf254a45e5829be4ccd1b2a4ee1011"}, + {file = "torch-2.3.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:2bb5af780c55be68fe100feb0528d2edebace1d55cb2e351de735809ba7391eb"}, ] [package.dependencies] filelock = "*" fsspec = "*" jinja2 = "*" +mkl = {version = ">=2021.1.1,<=2021.4.0", markers = "platform_system == \"Windows\""} networkx = "*" nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} @@ -2584,10 +2531,10 @@ nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linu nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nccl-cu12 = {version = "2.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" -triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} +triton = {version = "2.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} typing-extensions = ">=4.8.0" [package.extras] @@ -2596,52 +2543,52 @@ optree = ["optree (>=0.9.1)"] [[package]] name = "tornado" -version = "6.4" +version = "6.4.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, - {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, - {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, - {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, - {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] [[package]] name = "traitlets" -version = "5.14.1" +version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "triton" -version = "2.2.0" +version = "2.3.1" description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" files = [ - {file = "triton-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2294514340cfe4e8f4f9e5c66c702744c4a117d25e618bd08469d0bfed1e2e5"}, - {file = "triton-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da58a152bddb62cafa9a857dd2bc1f886dbf9f9c90a2b5da82157cd2b34392b0"}, - {file = "triton-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af58716e721460a61886668b205963dc4d1e4ac20508cc3f623aef0d70283d5"}, - {file = "triton-2.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8fe46d3ab94a8103e291bd44c741cc294b91d1d81c1a2888254cbf7ff846dab"}, - {file = "triton-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ce26093e539d727e7cf6f6f0d932b1ab0574dc02567e684377630d86723ace"}, - {file = "triton-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:227cc6f357c5efcb357f3867ac2a8e7ecea2298cd4606a8ba1e931d1d5a947df"}, + {file = "triton-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c84595cbe5e546b1b290d2a58b1494df5a2ef066dd890655e5b8a8a92205c33"}, + {file = "triton-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9d64ae33bcb3a7a18081e3a746e8cf87ca8623ca13d2c362413ce7a486f893e"}, + {file = "triton-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf80e8761a9e3498aa92e7bf83a085b31959c61f5e8ac14eedd018df6fccd10"}, + {file = "triton-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b13bf35a2b659af7159bf78e92798dc62d877aa991de723937329e2d382f1991"}, + {file = "triton-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63381e35ded3304704ea867ffde3b7cfc42c16a55b3062d41e017ef510433d66"}, + {file = "triton-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d968264523c7a07911c8fb51b4e0d1b920204dae71491b1fe7b01b62a31e124"}, ] [package.dependencies] @@ -2654,13 +2601,13 @@ tutorials = ["matplotlib", "pandas", "tabulate", "torch"] [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -2676,13 +2623,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] @@ -2715,18 +2662,18 @@ files = [ [[package]] name = "zipp" -version = "3.17.0" +version = "3.19.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.19.2-py3-none-any.whl", hash = "sha256:f091755f667055f2d02b32c53771a7a6c8b47e1fdbc4b72a8b9072b3eef8015c"}, + {file = "zipp-3.19.2.tar.gz", hash = "sha256:bf1dcf6450f873a13e952a29504887c89e6de7506209e5b1bcc3460135d4de19"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] docs = [] @@ -2734,4 +2681,4 @@ docs = [] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "8255f11e8ff2613493802e7e1e58e336628acfa657a664879eb970756f3f5033" +content-hash = "0055bc97fd74d23c1f9027d72e2afeaec5e1d47403c9a36466607ce9e48f00e1" diff --git a/pyaging/__init__.py b/pyaging/__init__.py index 91b0a2a..bfb1f56 100644 --- a/pyaging/__init__.py +++ b/pyaging/__init__.py @@ -4,4 +4,4 @@ from . import predict as pred from . import preprocess as pp -__version__ = "0.1.6" +__version__ = "0.1.7" diff --git a/pyaging/models/_models.py b/pyaging/models/_models.py index ada7bd9..a38bc0a 100644 --- a/pyaging/models/_models.py +++ b/pyaging/models/_models.py @@ -1347,3 +1347,35 @@ def preprocess(self, x): def postprocess(self, x): return x + +class StocH(pyagingModel): + def __init__(self): + super().__init__() + + def preprocess(self, x): + return x + + def postprocess(self, x): + return x + +class StocZ(pyagingModel): + def __init__(self): + super().__init__() + + def preprocess(self, x): + return x + + def postprocess(self, x): + return x + +class StocP(pyagingModel): + def __init__(self): + super().__init__() + + def preprocess(self, x): + return x + + def postprocess(self, x): + return x + + diff --git a/pyaging/preprocess/_preprocess.py b/pyaging/preprocess/_preprocess.py index 022e297..6d6fe8a 100644 --- a/pyaging/preprocess/_preprocess.py +++ b/pyaging/preprocess/_preprocess.py @@ -3,8 +3,13 @@ import anndata import numpy as np import pandas as pd -from pyBigWig import open as open_bw +try: + from pyBigWig import open as open_bw + PYBIGWIG_AVAILABLE = True +except ImportError: + PYBIGWIG_AVAILABLE = False + from ..logger import LoggerManager, main_tqdm, silence_logger from ._preprocess_utils import * @@ -35,11 +40,18 @@ def bigwig_to_df(bw_files: Union[str, List[str]], dir: str = "pyaging_data", ver A DataFrame where each row represents a bigWig file and each column corresponds to a gene. The values in the DataFrame are the transformed signal data for each gene in each bigWig file. + Raises + ------ + ImportError + If pyBigWig is not installed and the function is called. + Notes ----- The function utilizes Ensembl gene annotations and assumes the presence of genes on standard chromosomes (1-22, X). Non-standard chromosomes or regions outside annotated genes are not processed. The signal - transformation uses the arcsinh function for normalization. + transformation uses the arcsinh function for normalization. This function requires pyBigWig to be installed. + If pyBigWig is not available, an ImportError will be raised. To use this function, ensure you have installed + pyaging with the 'bigwig' extra: pip install pyaging[bigwig] Examples -------- @@ -48,6 +60,9 @@ def bigwig_to_df(bw_files: Union[str, List[str]], dir: str = "pyaging_data", ver # This returns a DataFrame where rows are bigWig files and columns are genes, with signal values. """ + if not PYBIGWIG_AVAILABLE: + raise ImportError("pyBigWig is not installed. To use this function, install please install it.") + logger = LoggerManager.gen_logger("bigwig_to_df") if not verbose: silence_logger("bigwig_to_df") diff --git a/pyproject.toml b/pyproject.toml index ae3f636..0929dfb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pyaging" -version = "v0.1.6" +version = "v0.1.7" description = "A Python-based compendium of GPU-optimized aging clocks." authors = ["Lucas Paulo de Lima Camillo "] license = "BSD" @@ -16,7 +16,6 @@ scikit-learn = "^1.3.2" pandas = "^2.1.3" torch = "^2.1.1" numpy = "^1.26.2" -pyBigWig = "^0.3.22" anndata = "^0.10.3" [tool.poetry.dev-dependencies] @@ -34,6 +33,7 @@ nbsphinx = "^0.8.11" pygments = "^2.6.1" pytest = "^7.2.0" nbmake = "^1.4.6" +pyBigWig = {version = "^0.3.22", optional = true} [tool.poetry.scripts] pyaging = "pyaging:main" diff --git a/tests/predict/test_gold_standard.py b/tests/predict/test_gold_standard.py index 9897672..434d3fa 100644 --- a/tests/predict/test_gold_standard.py +++ b/tests/predict/test_gold_standard.py @@ -62,6 +62,9 @@ "yingcausage": 195.3013578758023, "yingadaptage": 173.48314231920278, "yingdamage": -53.509282005508, + "stoch": 136.48186449945413, + "stocz": -21.238430415750855, + "stocp": -48.95705647484499, }