From 26e624ca288ac59aa22348ea8298041dcd2fab38 Mon Sep 17 00:00:00 2001 From: Alvaro Luna Date: Mon, 13 Jul 2026 14:16:18 -0400 Subject: [PATCH 01/30] Insert ephys & imaging params notebooks --- .../session_error_log_analysis.ipynb | 1184 +++++++++++++++++ .../ephys_element/insert_ephys_paramset.ipynb | 287 ++++ .../insert_ephys_preprocessing_params.ipynb | 287 ++++ .../ephys_element/read_ephys_parameters.ipynb | 9 +- .../insert_new_imaging_params.ipynb | 495 +++++++ .../read_imaging_parameters.ipynb | 192 ++- notebooks/imaging_element/read_params.py | 67 +- .../read_params_notebook.ipynb | 959 +++++++++++++ .../test_Matlab_Python_conv.ipynb | 34 +- 9 files changed, 3403 insertions(+), 111 deletions(-) create mode 100644 notebooks/developer_notebooks/session_error_log_analysis.ipynb create mode 100644 notebooks/ephys_element/insert_ephys_paramset.ipynb create mode 100644 notebooks/ephys_element/insert_ephys_preprocessing_params.ipynb create mode 100644 notebooks/imaging_element/insert_new_imaging_params.ipynb create mode 100644 notebooks/imaging_element/read_params_notebook.ipynb diff --git a/notebooks/developer_notebooks/session_error_log_analysis.ipynb b/notebooks/developer_notebooks/session_error_log_analysis.ipynb new file mode 100644 index 00000000..34fc256c --- /dev/null +++ b/notebooks/developer_notebooks/session_error_log_analysis.ipynb @@ -0,0 +1,1184 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "acd8685e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/ct5868/code/U19-pipeline-python.worktrees/main/.venv/lib/python3.13/site-packages/datajoint/plugin.py:4: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources # requires setuptools<82\n" + ] + } + ], + "source": [ + "import datajoint as dj" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0cf1d1b2", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2026-06-10 15:26:14,811][INFO]: DataJoint 0.14.9 connected to u19tech@datajoint00.pni.princeton.edu:3306\n" + ] + } + ], + "source": [ + "action = dj.create_virtual_module('action', 'u19_action')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c88e8f65", + "metadata": {}, + "outputs": [], + "source": [ + "startup_times = action.RigStartupTime().fetch(format='frame')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1211ca59", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Raw rows: 4020, after dedup: 3554, after removing >5000s: 3553 (1 dropped)\n" + ] + }, + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "index", + "rawType": "int64", + "type": "integer" + }, + { + "name": "location", + "rawType": "str", + "type": "string" + }, + { + "name": "level_1", + "rawType": "int64", + "type": "integer" + }, + { + "name": "startup_datetime", + "rawType": "datetime64[us]", + "type": "datetime" + }, + { + "name": "startup_type", + "rawType": "str", + "type": "string" + }, + { + "name": "num_subj_scheduled", + "rawType": "int64", + "type": "integer" + }, + { + "name": "startup_time", + "rawType": "float64", + "type": "float" + } + ], + "ref": "e2008552-0c94-4c49-b998-d6c40ee79ab4", + "rows": [ + [ + "0", + "165A-WeightGUI", + "0", + "2026-04-26 20:38:05", + "Not using New Training GUI", + "0", + "0.757197" + ], + [ + "1", + "165A-WeightGUI", + "1", + "2026-04-27 08:38:16", + "Not using New Training GUI", + "0", + "11.2393" + ], + [ + "2", + "165A-WeightGUI", + "2", + "2026-04-28 08:37:08", + "Not using New Training GUI", + "0", + "17.0462" + ], + [ + "3", + "165A-WeightGUI", + "3", + "2026-04-29 09:21:40", + "Not using New Training GUI", + "0", + "17.4443" + ], + [ + "4", + "165A-WeightGUI", + "4", + "2026-04-29 21:00:39", + "Not using New Training GUI", + "0", + "6.14237" + ] + ], + "shape": { + "columns": 6, + "rows": 5 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
locationlevel_1startup_datetimestartup_typenum_subj_scheduledstartup_time
0165A-WeightGUI02026-04-26 20:38:05Not using New Training GUI00.757197
1165A-WeightGUI12026-04-27 08:38:16Not using New Training GUI011.239300
2165A-WeightGUI22026-04-28 08:37:08Not using New Training GUI017.046200
3165A-WeightGUI32026-04-29 09:21:40Not using New Training GUI017.444300
4165A-WeightGUI42026-04-29 21:00:39Not using New Training GUI06.142370
\n", + "
" + ], + "text/plain": [ + " location level_1 startup_datetime startup_type \\\n", + "0 165A-WeightGUI 0 2026-04-26 20:38:05 Not using New Training GUI \n", + "1 165A-WeightGUI 1 2026-04-27 08:38:16 Not using New Training GUI \n", + "2 165A-WeightGUI 2 2026-04-28 08:37:08 Not using New Training GUI \n", + "3 165A-WeightGUI 3 2026-04-29 09:21:40 Not using New Training GUI \n", + "4 165A-WeightGUI 4 2026-04-29 21:00:39 Not using New Training GUI \n", + "\n", + " num_subj_scheduled startup_time \n", + "0 0 0.757197 \n", + "1 0 11.239300 \n", + "2 0 17.046200 \n", + "3 0 17.444300 \n", + "4 0 6.142370 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.ticker as ticker\n", + "import numpy as np\n", + "\n", + "# --- Deduplicate: within each location, if two startups are within 45s, keep the older one ---\n", + "df = startup_times.reset_index().copy()\n", + "df['startup_datetime'] = pd.to_datetime(df['startup_datetime'])\n", + "df = df.sort_values(['location', 'startup_datetime'])\n", + "\n", + "def drop_close_duplicates(group, threshold_sec=45):\n", + " group = group.sort_values('startup_datetime').reset_index(drop=True)\n", + " keep = [True]\n", + " for i in range(1, len(group)):\n", + " delta = (group.loc[i, 'startup_datetime'] - group.loc[i-1, 'startup_datetime']).total_seconds()\n", + " keep.append(delta > threshold_sec)\n", + " return group[keep]\n", + "\n", + "df_clean = (\n", + " df.groupby('location', group_keys=True)\n", + " .apply(drop_close_duplicates)\n", + " .reset_index(drop=False)\n", + ")\n", + "df_clean['startup_time'] = pd.to_numeric(df_clean['startup_time'], errors='coerce')\n", + "df_clean['num_subj_scheduled'] = pd.to_numeric(df_clean['num_subj_scheduled'], errors='coerce')\n", + "\n", + "# Remove rows with startup_time > 5000s\n", + "n_before = len(df_clean)\n", + "df_clean = df_clean[df_clean['startup_time'] <= 5000].copy()\n", + "print(f\"Raw rows: {len(df)}, after dedup: {n_before}, after removing >5000s: {len(df_clean)} ({n_before - len(df_clean)} dropped)\")\n", + "df_clean.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a0a0efe5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " median mean std count p90\n", + "location \n", + "165I-Rig1-T 32.098200 32.465262 4.057086 379 36.486360\n", + "165I-Rig3-T 28.126900 27.285213 5.383005 243 33.770480\n", + "165I-Rig4-T 25.861500 28.251202 4.741532 287 35.431620\n", + "165I-Rig2-T 20.470900 22.090210 5.255666 242 29.857100\n", + "165A-miniVR-T-3 19.374400 27.616695 13.690645 153 48.535580\n", + "165A-miniVR-T-1 17.574400 25.381369 15.197380 164 51.337100\n", + "165A-WeightGUI 16.471300 16.278955 5.735580 55 21.830620\n", + "165A-miniVR-T-2 15.542400 22.344808 13.073294 191 43.950700\n", + "165A-miniVR-T-6 15.032800 19.596601 7.452804 345 28.108140\n", + "165A-miniVR-T-4 14.302200 18.403323 6.478309 275 27.618300\n", + "165A-miniVR-T-5 13.158500 17.795140 6.804580 347 29.239740\n", + "185F-Rig1 11.246600 10.144367 4.131079 10 14.077210\n", + "165A-miniVR-T-9 10.213250 12.185063 4.635146 96 19.206650\n", + "165A-miniVR-T-8 10.121900 12.838183 8.577698 112 18.306700\n", + "165A-miniVR-T-7 7.251090 8.264397 3.539463 107 11.758560\n", + "170b-Rig1-I 7.228170 10.259917 7.837312 107 22.198100\n", + "188-Rig2 6.989030 6.329960 2.744136 67 9.622484\n", + "185A-Rig1 6.427405 9.188294 5.510773 40 18.918010\n", + "182-Imaging-Rig1 4.337315 8.375207 6.357280 204 17.872200\n", + "170b-Imaging0642 4.255865 4.325847 0.601411 56 5.049725\n", + "VRTrain5 1.948790 2.472507 1.079780 8 3.688021\n", + "188-Rig1 1.452890 2.259678 1.972204 65 3.288982\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABR4AAAHqCAYAAABiE1JbAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAwI5JREFUeJzs3QeYFMX29/EigyRFlKCoiCAoKIoBQRTMAQUBE+LFhFzMCqgYUAxgAr0mRK8ZxYCIXswgShATeBVEggqIkkzkpNDv86v31vx7h9lld9nd6a7+fp5n2Z2w7JzpmZ7uU6dOlQqCIDAAAAAAAAAAUIRKF+V/BgAAAAAAAAAkHgEAAAAAAAAUCyoeAQAAAAAAABQ5Eo8AAAAAAAAAihyJRwAAAAAAAABFjsQjAAAAAAAAgCJH4hEAAAAAAABAkSPxCAAAAAAAAKDIkXgEAAAAAAAAUORIPAIAAMTM/PnzTalSpcwzzzxjom6PPfYw5513XuryRx99ZB+7vhe3W2+91f6tMF2+7LLLTEnQ9tHf0/YqaSUZZ9RiBwAA0UHiEQAARM706dNNly5dzO67724qVqxodtllF3Pssceahx56KMf9Bg4caEaPHl0sj+GTTz6xiavly5ebbHnxxRfNAw88kLW/HyXFua19fmwAAADZVCoIgiCrjwAAACAt4deuXTuz2267me7du5vatWubhQsXmk8//dT88MMP5vvvv0/dt0qVKjZBWRyVf/fdd5/p27evmTdvnq3ay4b27dubGTNmbFE1psO3DRs2mHLlypkyZcqYKNNz17Zt29Q22rx5s9m4caMpX768KV06/2PghdnWf//9t/1S8tpRFd6ll15qHn744QJGUvDHtmnTJvPXX3+ZChUqbFF5WdyKI86CyGbsAAAgOspm+wEAAACE3XnnnaZ69ermiy++MNtvv32O25YtW1bsT9aaNWtM5cqVI71RlMgJJ9PiRMnG4n7sbhuWLVvWfmWLksJRTwwX13OfxNgBAMCWmGoNAAAiRVWN++677xZJR9l5551zJN+U5Hj22Wftz/pyvQQXLFhgLrnkErP33nubSpUqmR133NGcfvrpW1QOuj50H3/8sb2//v9dd93VTrFWtaPUr18/9f/r9/Pqr6jr9bvpPQZnzZplzjjjDFOtWjX7WK688kqzfv36PJ8HVQm+9dZbNhb3913lZabHoNhVeffTTz/ZSkn9rCnqjzzySGr6+lFHHWWTQprCrmnc6TSt/KqrrjL16tWzlWp77bWXufvuu22V4taoCvOOO+6wz992221nq1a//fbbLe6Xqcfj3LlzTefOnW11q5KS+j/OOusss2LFiq1ua/ccz5w503Tt2tXssMMO5vDDD89xWyYvvPCCfX3o77Vo0cJMmDAhx+36/zNVuqb/n3k9ttz6HD766KP2Na7nuG7durYyMX1Kv7Z/06ZNbVx6LvWcanvec889W90W+Y1z/Pjx9vG9/vrrW/yeXh+6bcqUKbn+37m9f3KLXa8jPX+K2b1GFF96H1AAAOAPKh4BAECkKCmmZIemGCvxkpvnn3/eXHTRReaQQw4xF198sb2uQYMG9ruqJTVlW8krJUKU/Bg6dKhN5ijRoaRHmJImO+20k+nfv79NIp144olmzpw5ZsSIEeb+++83NWvWtPfTfX799dcCx6Sko5IrgwYNslPGH3zwQfPnn3+a5557LtffufHGG23i7eeff7aPQZRM3Nr0Vj32I444wiaolHTSAiNKNur/O+ecc0ynTp3MY489Zv7xj3+Yww47zCZWZe3atebII480v/zyi+nZs6ed6q7nsF+/fmbx4sVb7TWp506Jx5NOOsl+TZs2zRx33HF2WnVedPvxxx9vp45ffvnlNvmoxzBmzBibjFP1a17b2lFiuWHDhrbf4tY6CSlR9vLLL5srrrjCJv+UCDzhhBPM559/nudrLpP8PLYwJd4GDBhgjjnmGNOrVy8ze/Zs+9rUa3by5Ml2+ryj14gel7aZXkMjR4401113nWnWrJndzluztTj1flCSWa+T0047Lcfv6jrFodfI1qS/f3Kj15Jel6eccord5l9//bX9vrUkPAAAiDH1eAQAAIiK999/PyhTpoz9Ouyww4Jrr702eO+994KNGzducd/KlSsH3bt33+L6tWvXbnHdlClTlI0KnnvuudR1Tz/9tL3u8MMPD/7+++8c97/33nvtbfPmzctxvS7rev1uOl1/yy23pC7rZ1136qmn5rjfJZdcYq//+uuv83wuTj755GD33Xff4vpMj0HPg64bOHBg6ro///wzqFSpUlCqVKngpZdeSl0/a9asLR7r7bffbp/POXPm5Phb119/vd0WP/30U66Pc9myZUH58uXt4928eXPq+htuuMH+nfA2Gj9+vL1O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GjTI1K9f394PALaVFqtSX9l27dqZrl272u+6zCJWAABEC4lHAACwzcqUKWMGDx5sxowZYxeSCa9qrcu6/r777mNhGQDbTMnFLl262MWswvsaXdb1JB8BAIgOVrUGAABFRif8vXv3tgvNOKp0VNKxU6dOPNMAtommU6uyUUnG0aNH51jMStXVGuhQa4e5c+cy0AEAQNJXtdaBw80332xPSCpVqmQaNGhgbr/9dhMEQeo++rl///62J5Tuc8wxx9gDCQAAED1KLn7//fdm/Pjx5sUXX7Tf9blN0hFAUZg4caId2LjhhhtyJB1Fl/v162fmzZtn7wcAALKvbDb/+N13322GDh1qnn32WbPvvvuaL7/80px//vk2a3rFFVfY+9xzzz3mwQcftPdRglKJyuOPP97MnDnTVKxYMZsPHwAA5DLtum3btjw3AIrc4sWL7femTZtmvN1d7+4HAACyK6sVj5988onp0KGDOfnkk21DevVkOe6448znn3+eqnZ84IEHzE033WTvt99++5nnnnvOLFq0yE6tAAAAAJAcmgUlmk6dibve3Q8AACQ48diqVSszbtw4M2fOHHv566+/NpMmTTInnniivaxpEkuWLLHTqx1VQx566KG2gXQmGzZssHPNw18AAAAA4q9Nmza2YGHgwIG2p2OYLg8aNMjOktL9AABAwhOP119/vTnrrLNM48aNTbly5cwBBxxgrrrqKnPOOefY25V0lFq1auX4PV12t6XTwYaSk+6rXr16JRAJAAAAgJJo5TB48GAzZswYu5BMeFVrXdb1WsxK9wMAAAlPPL7yyivmhRdesM3np02bZvs46kBB3wtLDaW1qo77WrhwYZE+ZgAAAADZo8WqRo4caaZPn25nUGk1TX3XNGtdz2JWAABER1YXl+nbt2+q6lGaNWtmFixYYKsWu3fvbmrXrm2vX7p0aY4+LbrcvHnzjP9nhQoV7BcAAAAAPym5qB7wWr1aC8noXEHTq6l0BAAgWrKaeFy7dq0pXTpn0aUOFly/FvVnUfJRfSBdolE9Gz/77DPTq1evrDxmAAAAANmn84a2bdtm+2EAAICoJh5POeUUc+edd5rddtvN7Lvvvuarr74yQ4YMMRdccIG9vVSpUrbn4x133GEaNmxoE5E333yzqVu3ru3hAgAAAAAAACCaspp4fOihh2wi8ZJLLjHLli2zCcWe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xz///DPH5b/++suWHC9fvtwcddRRJokVHgcffLD54osvbJLRJRqVfAzffsQRR5g4oYoFAAAAQHFgGiuiTAvJSPpiuI673t0PQBEnHl9//fUtrtu8ebPp1auXadCggUmizz//3BxyyCE2+ZhOSUfdDgAAAKDoME03npjGiqjT6tWiAitNr06n68P3A5C3nHXDhaRy42uuucauQp1USi6uWrUqNe1a33WZpCMAAABQ9BVze+21l2nXrp3p2rWr/a7Luh7xmMZ6ww035DqNVQua6n5ANrRp08auXq2FZFRkFabLgwYNMvXr17f3A1BCiUf54YcfzN9//22STD0chwwZYn/Wd9fTEQAAAEDRTtNt1qyZbXOkwX5912VdT/Ix2pjGiqgrU6aMGTx4sBkzZoxdSCa8n9FlXX/fffexsAxQXFOtVdkYFgSB/fB466237IIqAAAAAFAcmKYbf0xjRRx06tTJjBw50q5urYVkHFU66nrdDqCYEo9fffXVFuXwO+20kx0R2NqK1wAAAABQWKw269c01tGjR+eYbs00VkSJkosdOnSw+x0VWylprtevKiIBFGPicfz48QX9FQAAAADYZkzT9Wcaq6bFa9qqejpqlWAt2KHeeZrGqooykjuIAr0O27Ztm+2HASSrx+NRRx1lli9fvsX1K1eutLcBAAAAQHFP082E1WbjNY11+vTpdhprtWrV7HdtP6axAkDCKx4/+ugjs3Hjxi2uX79+PSuPARGydu1aM2vWrIy3rVu3zq4mqGkulSpVynifxo0bm+22266YHyUAAED+MU3XH0xjBYBkyHfi8Ztvvkn9PHPmTLNkyZIcTZ7fffdds8suuxT9IwRQKEo6tmjRotDP3tSpU82BBx7Is48Sp88UeukAADJhmq5fmMYKAP7Ld+KxefPmplSpUvYr05RqVU099NBDRf34ABSSKhaVPMzku+++M926dTPDhw83TZo0yfX3gZI2atQou3qgKnIdVeaqFxSrBwIAhNVmAQDwMPE4b948EwSB2XPPPc3nn39uV7J2ypcvb3beeWcaAAMRomnSW6tYVNKRqkZEKemoRvPt27c3I0aMSDWa16qXup6eT0DRoy0H4oppugAAeJZ43H333c1ff/1lunfvbnbccUd72Xdz5841q1atKtDvqJIs/L0gqlataho2bFjg3wMAH6ZXq9JRScfRo0eb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pTYxybYEAMQFicdtVKNGjdTPWs349ttvN/369bMHB+HVjcP3AwD8/4pFJQ8Lu7q8fh8AsKVrr73WrnysCjlHySoltO655x6esohz20jbUAvJOKp01HZkGwIA4oTE4zYqU6ZM6udly5blODjI7X5RmuYo06ZNK9DvbcvUKwBwNE16a9VXrC4PAAVPOqparnTp0jmu37x5s71e4pa4SmJrDm0jrWxN1SoAIO5IPG6jcFVjulKlSpkgCLZ6v2xxB3A9evQo0b9btWpVE+UDWJcgzStRGscDWAAA4P/06sGDB9ufTzzxRNsnsGnTprYtkJJYb731lr1dP8dpqm5SW3NoG1111VXZfhgAAGwTEo9F1AC6cuXKNqH2888/p25TX5aVK1eaNWvWRLIBdMeOHQuVRMvPFMjc6DmKQhI2PwewitG3A1gAAOCvhx56yFY27rfffubNN99MVT22bNnSXm7evLmZPn26vV/v3r1NXNCaAwCA+CLxWIQNoCtWrGiuueYas+eee5off/zRvPDCC3bBmag2gK5Zs6a56KKLCv37cZ4CmdcBbH6n7AAAAETJpEmT7PeBAwduMdVal1Xp2KFDB3u/OCUeac0BRNemTZvMxIkTzeLFi02dOnVMmzZtItlmDED2kHgs4gbQQ4YM+b8nlwbQsT2AZRVPAAAQN1WqVLHf582bl/F2DayG7wcA22LUqFF2EMPtW0TFG2rp0KlTJ55cAFbOodASNmjQIHPwwQfb6bc777yznfo7e/bsHPdZv369ufTSS82OO+5oD5I6d+5sli5daqKYfNSUaiUfL7vsMvtdl+PWvBsAAADxdO6559rvt9xyS44VrUWXBwwYkON+ALAtSccuXbpscW6uy7petwNA1iseP/74Y5tUVPJRB0M33HCDOe6448zMmTNtz0TRNGY1wn711VdN9erVbVJPoyeTJ0+O3BakATSyoXaVUqbS8jnGLCr+cQT9Hf09AAAQPUcffbSpVq2a+eOPP2yv8dtuu820b9/ejBkzxvTv399er9t1PwDYlunVvXr1sgupan9y4403phayuvPOO+0+R7ertQPTrgFkNfH47rvv5rj8zDPP2MpH9d474ogjbH/EJ5980rz44ovmqKOOsvd5+umnbW/BTz/91DbKBpKuZ4vypsmEnsZMKP6/1eR/fw8AAETD2rVr7aJ5zs0332z7i6vq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/vjj7WejXsdxjS38Pvzvf/9r34c33XRTcPHFFwcHH3xwsHz58sBXS5YsCW655ZagatWqwcMPP5y6Ps7bUp588slg1113DQ4//PBgr732CqpXrx7MmTPHi9heffVVux/VNnvttdeCDRs2BL556aWXbIzt2rULxo8fn7o+7tvO0XbT+ZK+//rrr8Fvv/0W1K5dO7juuusCH+i8Sa/PPn362Mt///13MG7cOBvv22+/Hfji2WefDUqXLp06n4g7Eo+5GDp0aFC2bFm7wY888shg7733DmbNmhX4ZNiwYfbk+N577w2aNWsWHHroocG6detif5KVlPiSEOMPP/xgkzk6iXTxXHLJJcGll14a/PXXX4EPFi1aZLdbq1atgooVKwY9e/b0Kvn4+uuv2wO78P5TySufko9Kyu25557B9ddfH6xfv95ed9ddd9mEuQ74fPDKK68Exx13nP1548aNwW233RacfvrpweWXX24P4H05aJ88ebJ9vV555ZVB8+bNg/79+wdr164N4m727Nn2mOb222+3l7X//OCDD4Knnnoq+OSTT2L/Op03b17QoUOHoHfv3vZzUfsXvR99eV3KypUr7XtQgzeOtt32228fVKlSxYsBudWrVwennHJKcM011+QoAtC+Rsm5P//8M9bbVMn/7bbbLrjhhhvs5eeff94mrz799FNvjtsy0TGNT8nHN9980w4WK0G3Zs0auz89+eSTg5NOOskmQOIal8ydOzdo06aNPYbp1q2b3bcoTp+Sj0r+6/Ndxy8HHHBAcOyxxwYffvhh6vY4bz93XtG+fXt7bijufEmfHdq/xj1G7SdPO+00O4AzdepUe0x64oknBi1atAhq1qxp97EamHPHbnHdr3700UfBHnvskTo/1MB43JF4zGDkyJH2oFVZc9EoQcuWLb1KPj7zzDN2pOeNN96wl/XGbdSokY3TnTjH9Y2ahPiSEKM+KO+77z6bZAxXA6jyQSdfStZppGvMmDFBXOmD/91337WVnD/++GPw3nvv2USyT8lHHcRWqFDBHgS5agCfko86ybjzzjvtNnQnxdquqtqpX7++TYj4QCfKqgIUDcYdffTRwXnnnWcPYnfZZZfgnnvuCeJO+0vtRxWfDmT1GlU1mQ7edUL54IMPBnGkWJSQ0/tw7Nix9jodpO+zzz5BrVq17AHt+eefH3z++edBXGl/OWDA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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# --- Startup time by rig (location) ---\n", + "rig_stats = (\n", + " df_clean.groupby('location')['startup_time']\n", + " .agg(median='median', mean='mean', std='std', count='count', p90=lambda x: x.quantile(0.9))\n", + " .sort_values('median', ascending=False)\n", + ")\n", + "print(rig_stats.to_string())\n", + "\n", + "fig, ax = plt.subplots(figsize=(max(8, len(rig_stats) * 0.6), 5))\n", + "order = rig_stats.index.tolist()\n", + "data_by_rig = [df_clean[df_clean['location'] == loc]['startup_time'].dropna() for loc in order]\n", + "ax.boxplot(data_by_rig, tick_labels=order, vert=True)\n", + "ax.set_xlabel('Rig (location)')\n", + "ax.set_ylabel('Startup time (s)')\n", + "ax.set_title('Startup time distribution by rig')\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "50a499c6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " median mean std count p90\n", + "startup_type \n", + "Rig Tester 31.238500 31.837000 9.715271 561 46.66740\n", + "Training Flow GUI 20.050300 21.549384 8.359536 2193 32.82720\n", + "No Schedule 9.039780 9.020534 3.262082 231 12.29340\n", + "Not using New Training GUI 4.701765 7.631156 6.474423 568 18.23323\n" + ] + }, + { + "data": { + "image/png": "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R44c0RndMCvctWvX5M8//5QSJUpI//79dfjb7t27+b4QERGR12FFExEREZELxI4dW86cOSOJEiUKdl/SpEmlTJkyehkwYICsXr1aLl68KO+//z7fGyIiIvIqTDQRERERucDw4cPDvG7FihWdui1EREREzsKhc0REREQu9vTpU20CbkJT8PHjx+tscURERETejIkmIiIiIherUaOG/PLLL/rzvXv3pHDhwjJmzBipWbOmNgsnIiIi8lZMNBERERG52L59+3SGOVi0aJEkS5ZMq5qQfPr+++/5fhAREZHXYqKJiIiIyMUwbC5OnDj6819//SW1atWSyJEjS5EiRTThREREROStmGgiIiIicrFMmTLJsmXLdGY59GX6+OOPdfmNGzckbty4fD+IiIjIazHRRERERORi/fv3l27dukm6dOm0P1PRokUt1U358+fn+0FEREReK4q7N4CIiIjI39SpU0dKlCghV69elbx581qWly1bVj755BO3bhsRERHRu2CiichHvH79WrZs2aJfWlKkSKFNZgMCAty9WUREFILkyZPrxdoHH3zA14uIiIi8GofOEfmAJUuWaL+P0qVLS8OGDfUat7GciIg8Q+vWreXSpUthWnfBggUyZ84cp28TERERkaMx0UTk5ZBMwhCM3Llzy/bt2+Xhw4d6jdtYzmQTEZFnSJIkieTMmVMqV64skydPlt27d8vly5fl9u3bcurUKVmxYoX06NFD0qRJI+PGjdPPcSIiIiJvE8kwDEN82IMHDyRevHhy//59zuJCPjlcDpVL+DKC2YswNbbpzZs3UrNmTTl8+LCcPHmSw+iIyOv5wjH9+vXr8vPPP8v8+fPlyJEjNvfFiRNHypUrJ82bN5eKFSuKP7326Xr+4fDHpLA7N6IKXy4iIj/xwAXxFHs0EXkx9GQ6d+6czJs3zybJBLjdq1cvKVasmK5XqlQpt20nERH9T7JkyaRPnz56uXv3rly4cEGePn0qiRMnlowZM0qkSJH4UhEREZFXY6KJyIuh8TfkypXL7v3mcnM9IiLyHAkSJNALERERkS9hjyYiL4bZ5QDD4+wxl5vrERERERERETkTE01EXqxkyZKSLl06GTZsmPZksobbw4cPl/Tp0+t6RERERERERM7GRBORFwsICJAxY8bIypUrtfG39axzuI3lo0ePZiNwIiIiIiIi8rxEEyok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EfkLxkvk7Th0joiIXGru3LkyceJEqVmzpvTo0YOvPhERERHjJfIhrGgiIiKXql27tuTJk0d+/fVXOXDggN3pfYmIiIj8GeMl8mZR3L0BRETkX6JHj67BU/LkySV9+vTB7o8ShYcmIiIi8m+Ml8ibcegcERERERERERE5BIfOERGR27x584avPhERERHjJfIhrGgiIiIiIiIiIiKHYEUTERERERERERE5BBNNRERERERERETkEEw0ERERERERERGRQzDRREREREREREREDsFEExEREREREREROQQTTURERERERERE5BBMNBERERERERERkUMw0UREEdKkSROpWbOmw169UqVKSadOnbz+eRARERG5Kw5hPEVEnoCJJiJyqxcvXvAdICIiImI8RUQ+gokmIgrVokWLJHfu3BIzZkxJlCiRlCtXTrp37y6zZs2S5cuXS6RIkfSyceNGXf/rr7+WLFmySKxYsSRDhgzSr18/efnypeXxBg4cKPny5ZOff/5Z0qdPLzFixNCzeZs2bZLvvvvO8njnzp2TmTNnSvz48W22Z9myZXp/0MebOnWqpE6dWv9uvXr15P79+299Z/G79p5HmTJlpF27djbr3rx5U6JFiybr1q3T2+nSpZNvvvlGGjRoILFjx5ZUqVLJpEmTbH7n3r170rx5c0mSJInEjRtXH/fgwYPc44iIiPwM46n/YTxF5B+iuHsDiMhzXb16VRMp3377rXzyySfy8OFD2bJli3zxxRdy4cIFefDggcyYMUPXTZgwoV7HiRNHE0QpU6aUf//9V1q0aKHLevToYXncU6dOyeLFi2XJkiUSEBAgadOmlRMnTkiuXLlk8ODBug6SM2GFx1u4cKH8/vvvuk3NmjWTr776SubMmRPq73Xr1k2OHj0a7HkgOYRE05gxYyR69Oi6fPbs2ZpMQrLINGrUKOndu7cMGjRI1qxZIx07dtQkW/ny5fX+unXraoJu1apVEi9ePE2GlS1bVp+r+XoRERGRb2M8xXiKyO8YREQh2Lt3r4GPiXPnzgW7r3HjxkaNGjXe+tqNGjXKKFiwoOX2gAEDjKhRoxo3btywWe+jjz4yOnbsaLNsxowZRrx48WyWLV26VLfJ+vECAgKMS5cuWZatWrXKiBw5snH16tW3bp+95/H06VMjQYIExoIFCyzL8uTJYwwcONByO23atEbFihVtfu/TTz81KlWqpD9v2bLFiBs3rvHs2TObdTJmzGhMnTr1rdtFREREvoHxFOMpIn/DoXNEFKK8efNqBQ6GzqE656effpK7d++G+ootWLBAihcvLsmTJ5fAwEDp27evVj9ZQwVTeCqW3iZNmjRabWQqWrSovHnzRo4fPx6hx8Nwvs8//1ymT5+ut/ft2yeHDx/WIX7W8HeC3kaFFGCI3KNHj3S4IV4H83L27Fk5ffp0hLaLiIiIvA/jKcZTRP6GQ+eIKEQY1rZ27VrZtm2b/PXXXzJhwgTp06eP7Ny50+7627dvl0aNGulQsgoVKuhwsfnz5+sQNGvoaRQWkSNHRumSzTLrfk/OhOFz6P106dIlHVaHIXNIkIUVkkwpUqSw9K6yFrTvFBEREfkuxlOMp4j8DRNNRBQqNMhGhRIu/fv312TL0qVLtTH269evbdZFQgr3IxllOn/+fJheYXuPh6on9IV6/PixJTl14MCBYL+LiqkrV65oXyjYsWOHJqmyZs0aob8LqOIqVKiQVnHNnTtXJk6cGGwd/J2gt7Nnz64/FyhQQK5duyZRokTRxuFERETkvxhPMZ4i8iccOkdEIULl0rBhw2TPnj2azEHzbswWgmQKkieHDh3S4Wm3bt3SSqPMmTPreqhiwvCw77//XpNSYYHHw9/DbHN4PAx9K1y4sM4ih4bbeDwkfNBo3N5Qt8aNG+twNTQr79Chg848h+F7Yfm7QZ+HdVXTiBEjtKoKzdCD2rp1qzZKR3NvzDj322+/aUNwwOx8GEpXs2ZNrQbD80IiDkk4vJ5ERETkHxhPMZ4i8jvubhJFRJ7ryJEjRoUKFYwkSZIY0aNHN7JkyWJMmDBB70Mz7/LlyxuBgYHanHvDhg26vHv37kaiRIl0OZpjjxs3zqahN5p3582bN9jfOn78uFGkSBEjZsyY+nhnz561NP/OlCmTLq9atarx448/BmsGjsf74YcfjJQpUxoxYsQw6tSpY9y5cydMzzGk5wEPHz40YsWKZXz11VfBfg/NwAcNGmTUrVtX10mePLnx3Xff2azz4MEDo3379rpdaICeOnVqo1GjRsaFCxfCtG1ERETk/RhPMZ4i8jeR8I+7k11ERBE1cOBAWbZsmd0hde8KVUgZM2aU3bt361C4oJVQnTp10gsRERGRN2M8RUSOxB5NRERBYPjc7du3dca8IkWKBEsyEREREVHoGE8R+S/2aCIinxYYGBjiBf2c7EHvJcwYh0qmKVOmuHybiYiIiDwJ4ykiCg8OnSMin3bq1KkQ70uVKpXEjBnTpdtDRERE5G0YTxFReDDRREREREREREREDsGhc0RERERERERE5BBMNBERERERERERkUMw0URERERERERERA7BRBMRERERERERETkEE01EREREREREROQQTDQREREREREREZFDMNFEREREREREREQOwUQTERERERERERGJI/w/E96uGrSOr4IAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# --- Startup time by startup_type ---\n", + "type_stats = (\n", + " df_clean.groupby('startup_type')['startup_time']\n", + " .agg(median='median', mean='mean', std='std', count='count', p90=lambda x: x.quantile(0.9))\n", + " .sort_values('median', ascending=False)\n", + ")\n", + "print(type_stats.to_string())\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n", + "\n", + "# Boxplot by startup_type\n", + "order_t = type_stats.index.tolist()\n", + "axes[0].boxplot(\n", + " [df_clean[df_clean['startup_type'] == t]['startup_time'].dropna() for t in order_t],\n", + " tick_labels=order_t,\n", + ")\n", + "axes[0].set_xlabel('startup_type')\n", + "axes[0].set_ylabel('Startup time (s)')\n", + "axes[0].set_title('Startup time by startup_type')\n", + "axes[0].tick_params(axis='x', rotation=30)\n", + "\n", + "# Mean + 95% CI bar chart\n", + "means = type_stats['mean']\n", + "sems = df_clean.groupby('startup_type')['startup_time'].sem()\n", + "axes[1].bar(order_t, means[order_t], yerr=1.96 * sems[order_t], capsize=5)\n", + "axes[1].set_xlabel('startup_type')\n", + "axes[1].set_ylabel('Mean startup time (s)')\n", + "axes[1].set_title('Mean ± 95% CI by startup_type')\n", + "axes[1].tick_params(axis='x', rotation=30)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "72513a0d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pearson r(num_subj_scheduled, startup_time) = 0.412\n", + " num_subj_scheduled median mean count\n", + " 0 6.61610 8.032841 799\n", + " 1 25.50250 26.170074 97\n", + " 2 16.98010 22.656188 537\n", + " 3 23.23835 25.348301 488\n", + " 4 24.97985 24.995664 536\n", + " 5 26.14480 25.305689 391\n", + " 6 21.98200 20.923852 705\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAGGCAYAAACqvTJ0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAA2WFJREFUeJzs3Qd8W+X1N/CjZVve28509l6MJEACYQcII4xSKJRRyip7r7I3lJayx8ss8GevQklYIQRI2JCELLK3471ka7+f33HkyLYsWbZsydbv2wrlPpKlq6sr6bnnnuc8Bq/X6xUiIiIiIiIiIqJuZOzOJyMiIiIiIiIiIgIGpYiIiIiIiIiIqNsxKEVERERERERERN2OQSkiIiIiIiIiIup2DEoREREREREREVG3Y1CKiIiIiIiIiIi6HYNSRERERERERETU7RiUIiIiIiIiIiKibsegFBERERERERERdTsGpYiIiIiIiLrA888/LwaDQdavX8/tS632ix9++CHkVtl///31Eg1YxwsvvLDLn+eLL77Q58J1uPDZwt9im0YKP7fdi0EpIiIiIqJu5jvoweWrr75qdbvX65UBAwbo7UceeWSPfn+2bt0qt9xyi/zyyy9d8vivvPKKPPjggxJNd911l7z77rtRXQciop6IQSkiIiIioihJSkrSoEpL8+fPl82bN0tiYqL0dAhK3XrrrXEZlPrzn/8s9fX1UlRUFJX1op7v448/1gtRb8WgFBERERFRlBxxxBHyxhtviMvlahVo2WOPPaSwsJDvTRvq6upiftuYTCYNPCLjLZ70hPemp0hISNALUW/FoBQRERERUZScfPLJUlZWJp988klTm8PhkDfffFP+9Kc/Bfwbj8ejmUFjx47VgEdBQYGce+65UlFR0ex+7733nsyaNUv69u2rGVdDhw6V22+/Xdxud7P7oV7NuHHjZNmyZXLAAQdIcnKy9OvXT+677752vQas+/Tp0yUzM1NSU1Nl5MiRcv311+ttqBEzefJk/feZZ57ZNGTRV/9lwYIF8oc//EEGDhyo64ghi5dddplmF/k744wz9LHXrFmjgby0tDQ55ZRTdN0//PBD2bBhQ9NjDxo0KGhdmED1a3zb4Mcff5R99tlHrFarDB48WJ544omQrx+PhSDMCy+80LQOWN+21gHrhyGZeP4999xTn2v8+PFN6/P222/rMt5bBCZ//vnnVs+5YsUKOeGEEyQ7O1vvh8d5//33211/5x//+If861//0gwuPP+MGTNk6dKlHXoe32tEdt/f/vY3yc/Pl/79+7e5Dr7t//rrr8udd96p98VjH3TQQbJ69epm98W28m3LYHWW/B8TWXnYf7GPYN2rqqrEbrfLpZdequuG/Qj7ItrCsX37dv07rC/21T59+sgxxxzT7L3FOmCoakttvQ6bzaaf3ZycHElPT5fTTjut1ee4IzWlUKtq5syZkpub27Qv/+Uvf2n1PfLvf/+7aV/Ly8uTww47LGCdK2QB4vOB143vnTlz5rS6z5YtW/Q58H3ku9+zzz7b6n7IAJ09e7akpKTo+4HPe6D3or3vfVva+xn57bff5MADD9TthPf2jjvu0G1D3cfcjc9FREREREQtDrz23ntv+b//+z85/PDDte2jjz7SA+mTTjpJHnrooVbbCwexCATgAPniiy+WdevWySOPPKLBi6+//losFoveD/fBAfjll1+u159//rncdNNNUl1dLffff3+zx8SBMA5IjzvuODnxxBM1KHbNNdfoAatvvQLBAR0CLBMmTJDbbrtND0YRWMB6wOjRo7Udz3vOOefIvvvuq+0I/ACyxHBgfv755+uB+XfffScPP/ywHrjiNn/IJsOBNgJgCKogeIZMMmwr3B9BFsBr7QhsAwS88PoRLESAA+uFLJWWB/T+/vOf/8hf//pXmTJlir5GQAAwGGwjBB3xXp566qn6eo466igNgiGgh+AO3H333bo+K1euFKPR2LTNp02bpoGXa6+9Vg/usa440H/rrbfk2GOPDflaX3zxRampqZELLrhAGhoaNDiBA/MlS5ZoUKEjz4N1RmAD73V7MqXuuecefU1XXnmlvocIgiLQ+O2330pHYXshuID1xTbGvoTPA54H7y8CRosWLdLPBgI1WNf2Ov7443WbXHTRRfq53bFjhwZkN27c2BQIDReKiCOYi/XCe/z4449rgNUXZOsIrNehhx6q7wW2Ax4fgTMEO/2dddZZuh3w+cb+i88XgsTYPgjg+KDmHf4W7y8CffhOwrbA68ZnFoqLi2WvvfZqKoyO58b3GJ4D3zcICAKCzQg+4m/x3YWAOT4/+G6KpPbuuwg0IhCP1+6731NPPaX7EHUjLxERERERdavnnnvOi674999/733kkUe8aWlpXpvNprf9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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# --- Effect of num_subj_scheduled on startup_time ---\n", + "corr = df_clean[['num_subj_scheduled', 'startup_time']].corr().iloc[0, 1]\n", + "print(f\"Pearson r(num_subj_scheduled, startup_time) = {corr:.3f}\")\n", + "\n", + "subj_stats = (\n", + " df_clean.groupby('num_subj_scheduled')['startup_time']\n", + " .agg(median='median', mean='mean', count='count')\n", + " .reset_index()\n", + " .sort_values('num_subj_scheduled')\n", + ")\n", + "print(subj_stats.to_string(index=False))\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n", + "\n", + "# Scatter with regression line\n", + "x = df_clean['num_subj_scheduled'].dropna()\n", + "y = df_clean.loc[x.index, 'startup_time']\n", + "m, b = np.polyfit(x, y, 1)\n", + "axes[0].scatter(x, y, alpha=0.3, s=15)\n", + "xs = np.linspace(x.min(), x.max(), 100)\n", + "axes[0].plot(xs, m * xs + b, 'r-', label=f'slope={m:.1f}s/subj, r={corr:.2f}')\n", + "axes[0].set_xlabel('num_subj_scheduled')\n", + "axes[0].set_ylabel('Startup time (s)')\n", + "axes[0].set_title('Startup time vs. num_subj_scheduled')\n", + "axes[0].legend()\n", + "\n", + "# Mean startup time per num_subj_scheduled (size ∝ count)\n", + "sc = axes[1].scatter(\n", + " subj_stats['num_subj_scheduled'], subj_stats['mean'],\n", + " s=subj_stats['count'] * 5, alpha=0.7,\n", + ")\n", + "axes[1].set_xlabel('num_subj_scheduled')\n", + "axes[1].set_ylabel('Mean startup time (s)')\n", + "axes[1].set_title('Mean startup time per num_subj_scheduled\\n(bubble size ∝ sample count)')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "316e40f2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filtered to 2026-05-15 onwards: 1290 rows (from 3553)\n", + "\n", + "All unique locations in good data:\n", + "location\n", + "165I-Rig4-T 124\n", + "165A-miniVR-T-5 122\n", + "165A-miniVR-T-6 122\n", + "165I-Rig1-T 116\n", + "182-Imaging-Rig1 105\n", + "165I-Rig3-T 84\n", + "165I-Rig2-T 83\n", + "165A-miniVR-T-2 77\n", + "165A-miniVR-T-4 65\n", + "165A-miniVR-T-3 62\n", + "165A-miniVR-T-1 58\n", + "165A-miniVR-T-8 45\n", + "165A-miniVR-T-7 43\n", + "165A-miniVR-T-9 36\n", + "165A-WeightGUI 33\n", + "170b-Rig1-I 28\n", + "185A-Rig1 25\n", + "170b-Imaging0642 21\n", + "188-Rig2 21\n", + "188-Rig1 19\n", + "VRTrain5 1\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "# --- Filter to \"good data\" (after May 15th) ---\n", + "cutoff_date = pd.to_datetime('2026-05-15')\n", + "df_good = df_clean[df_clean['startup_datetime'] >= cutoff_date].copy()\n", + "print(f\"Filtered to {cutoff_date.date()} onwards: {len(df_good)} rows (from {len(df_clean)})\")\n", + "\n", + "print(\"\\nAll unique locations in good data:\")\n", + "print(df_good['location'].value_counts())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c08414a8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "======================================================================\n", + "STARTUP TIME BY RIG (after 2026-05-15)\n", + "======================================================================\n", + " median mean std count p95\n", + "location \n", + "165I-Rig1-T 31.786550 32.530482 2.496276 116 37.360700\n", + "165I-Rig3-T 30.951850 28.733489 5.060845 84 35.367785\n", + "165I-Rig2-T 25.749600 24.645419 5.832189 83 33.243310\n", + "165I-Rig4-T 25.541700 28.291836 5.084780 124 37.019270\n", + "165A-miniVR-T-4 24.737800 22.089552 6.507628 65 29.422700\n", + "165A-miniVR-T-3 20.206400 29.416894 13.230883 62 48.708840\n", + "165A-miniVR-T-1 18.710600 26.939457 13.600982 58 50.652045\n", + "165A-miniVR-T-2 16.916800 23.285035 12.175221 77 47.126400\n", + "165A-WeightGUI 16.497900 17.074047 5.656837 33 25.879700\n", + "165A-miniVR-T-6 15.485150 21.118471 8.513780 122 29.610005\n", + "165A-miniVR-T-8 15.458000 16.066057 6.800064 45 25.554700\n", + "165A-miniVR-T-9 15.423000 16.032265 5.009202 36 23.150400\n", + "165A-miniVR-T-5 13.176400 18.666606 7.179452 122 30.756675\n", + "170b-Rig1-I 9.506015 10.440145 5.213283 28 20.501895\n", + "188-Rig2 9.238130 9.066140 1.300900 21 10.660200\n", + "165A-miniVR-T-7 8.681750 9.968596 3.215785 43 14.208740\n", + "185A-Rig1 6.281420 6.553398 1.030754 25 7.545722\n", + "170b-Imaging0642 4.519730 4.613551 0.476388 21 5.303710\n", + "182-Imaging-Rig1 4.055220 7.394515 6.528640 105 21.260020\n", + "VRTrain5 3.415870 3.415870 NaN 1 3.415870\n", + "188-Rig1 1.379020 1.904913 2.265451 19 2.581210\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABOIAAAHqCAYAAACp7eGMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAu+hJREFUeJzs3QeYFMX29/Eig0QRJCgoIggoJgwEUVSUIAoCRlQQVK5ZAQNmJKmI8SqiFyNXVBBQMYsJEROYEAkqSQlGQDJCv8+v7r/m7R1ml91ld7ar5/t5nmXZCTtdWz093adOnSoWBEFgAAAAAAAAABSq4oX76wEAAAAAAAAIgTgAAAAAAAAgDQjEAQAAAAAAAGlAIA4AAAAAAABIAwJxAAAAAAAAQBoQiAMAAAAAAADSgEAcAAAAAAAAkAYE4gAAAAAAAIA0IBAHAAAAAAAApAGBOAAA4L1FixaZYsWKmSeffNJExd577206depUZK///vvv27+JvhektWvXmt13393897//zdfzP//8c9OyZUtTvnx5u31fffVVgW4f/NC8eXNz7bXXFvVmAACQdgTiAADwwLfffmu6d+9u9tprL1O2bFmzxx57mBNOOME8+OCDWR43bNgwM3ny5ELZho8//tjcdtttZtWqVaaoPPvss+a+++4rsteHMffff7+pWLGiOfPMM/P859iyZYs57bTTzJ9//mnuvfde88wzz9h9+uGHH05rEHX9+vXmoYceMieeeKKpVauWbc8hhxxiRo0aZbZu3brd47dt22buuusuU69ePfv+O/DAA824ceO2e4zacMopp5g6derYQOMBBxxghgwZYjZu3JhyO1auXGn69u1r38/6vQre9unTJ9ft+P7770379u1NhQoVTNWqVc25555rfvvtt5RB6lRfzz33XK5e56233rLbpfaUKFHCbmcqeXmt6667zvbBihUrct1eAADioFgQBEFRbwQAAMg5AHbssceaunXrmp49e5qaNWuapUuXmk8++cT8+OOP5ocffkg8VhfkCtgVRlDj7rvvNtdcc41ZuHBhthfihU0ZZrNnz7YX/GE6ndm0aZMpVaqUDRREgf5GClxMmTKlSF5fgaHNmzeb0qVLm+LFC2bsVYE0BY2uvvpqM3DgwDw/f+7cuaZx48bmscceMxdccEHidv2dqlWrVuDZe9nRPqRg2vHHH2+DcZUqVTJvvvmmmTRpkjnvvPPMU089leXxausdd9xhLrzwQnP44Yebl156ybz66qs2GOcCksoUVEBPmV7aT5U1OGPGDPu7jj76aPPuu+/agJSj93CrVq3s//V79XddtmyZ+eyzz8zLL7+8wzb8/PPPNnhYuXJlc8UVV9jX13tUxwn9DvW76L2iAOJZZ51lOnbsmOV3tG7d2gZCd6RXr17m+eefN4ceeqhZsmSJfY8lvwfz+lraP9Vmtf3222/f4TYAABAXJYt6AwAAQM6GDh1qL7Y1pa9KlSpZ7vv1118L/c+3bt06m90TZQpwKKMIxmZfueBbQf9NFFRUxtXpp5+er+e7/TV5Py4M//zzjw32uIBUmILZyjLdf//9E7cpM613797miSeeMDfffLPZd9997e2//PKLGTlypLn00kvNv//9b3ubgojHHHOMDUwrw0+BKb3O9OnT7bRbR0EmBWRvvfVWM3XqVNO2bdssr1eyZEn7vt5tt93y3D5lv+q9OXPmTBt8kyOOOMJmyioQf9FFF2V5vIJo55xzTp5fx72WgqcKdLtgeE5y81raPzVo8PTTT5tBgwZlCVICABBnTE0FACDilPWmgEGq4IWybhxdyOrCXBk4bjqYMllk8eLF5pJLLjH77befKVeunL3wVwAhOatFF/B63gcffGAfr9+/55572impCjqIMl7c79fzc6rPptv1XEf/123KjFIwR5lI2pYrr7wy2+l7Tps2bWwWktriXt9l5qXaBrVdGYLK4FHwQP9XBo6mw4kCMccdd5wNMipTR9Nek2ka7lVXXWWnGpYpU8YGZ+68804b4MktTes7+OCDbVCsSZMmZuLEiYn7fvrpJ7vdmqaZKhNS9yVPgUxVB07T/m666Sbbvl122cWsWbMm2xpxav8+++xj9wMFbqZNm2b/tvraEU171t+8fv36WW7/5ptv7N9bv1ftVKBLQa0//vgj8Rjdr+CVaN/Ttuk19fu+++47u8+5fg1vS276wPW/MsI0dVnbp8fOmTMnZTuUfRcOwjmnnnpqYsqno+w3ZQLq/eDotS6++GKblaasN1EgLhyEy+l3av9//fXX7XtK+7/2fb1GXrz44ot2v3ZBOFGgr2HDhuaFF15I+RwdH5QlmVe1a9e2Qbi8yM1rKWio9zN1AgEAmYSMOAAAIk5BIl3sKwtFU/iyo3pbytRRcMVlw7iAibJuFNjRNDoF1hS4UD0sBTwUrFDwJkxBh+rVq5tbbrnFXlB36NDBzJ8/3waFFDRSIEP0mOSaVLmhIJwCMMOHD7dTbB944AHz119/2eyY7Nx4441m9erVNvjhAlcKruVE9b607ZoaqBpfWmDgsssus8E3/b4ePXqYrl27mkceecROSWzRooUNNLo6YgocKSNK2UsKeOhvqGmKy5cvz1WtugULFpgzzjjD/Otf/7LTipVtpSDUG2+8YYMQClxpeqK2S9M9w3Sbpjp27tx5h68zePBgGwgaMGCAnaKbKgtM1Odqv6YJ6vW0H3Tp0sXsuuuudr/YEbVf2U7J3n77bRtUPP/8820QToG1Rx991H5X/ypw5WqhKbtKUyk1xbNGjRp2/7r88sttX6pPRLfnpw/091VQS/u/AnGqm5YXrl6Z27/lyy+/tPuLptSG6X3m7j/qqKPy9DvfeeedRDs1PVbTVpVVp31CfbSjqd/6eyi78LDDDtvuPm3Xa6+9tt3tyjpT4E990axZM5tpq2m5hSG3r6X7RJmEmmYLAEBGUI04AAAQXW+99VZQokQJ+9WiRYvg2muvDd58881g8+bN2z22fPnyQc+ePbe7ff369dvdNmPGDNWJDZ5++unEbU888YS97aijjgr++eefLI8fMWKEvW/hwoVZbtfPul3PTabbb7311sTP+r9uO+WUU7I87pJLLrG3f/311zn+LU466aRgr7322u72VNugv4NuGzZsWOK2v/76KyhXrlxQrFix4LnnnkvcPnfu3O22dfDgwfbvOX/+/Cyvdf3119u+WLJkSY7bqu3U73zxxRcTt61evTqoVatWcMghhyRuGz16tH3c999/n7hNfVutWrWUfRn23nvv2efus88+2/Wxu0/fZdOmTcFuu+0WHH744cGWLVsSj3vyySft44455pgcX0vP0d+tf//+udq/xo0bZ3/vhx9+uN02jR8/Pstj999//5Svn9s+cP1fqVKl4Ndffw3yQ3+fJk2aBPXq1cvy99E+p79vsnXr1tnX1LbkpG3btna7tO85V1xxhX2u+qN9+/bB888/b99fFSpUCOrXr29/d04+//zz7d67zjXXXGPv27hxo/158eLFwYknnhiMGjUqePnll4P77rsvqFu3blC8ePFgypQpQV5l9x7M72uVLl06uPjii/O8HQAA+IqpqQAARJyy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swG3qVOnJu7XVFOtntqiRYuUv7NMmTK2MF74CwAAAAAAAMjoqalXX321admypZ2aevrpp5vPPvvMPProo/ZLihUrZq666iozZMgQW0dOgbmbb77ZrqTapUuXotx0AAAAAAAAIE+KNBB3+OGHm0mTJtnppLfffrsNtN13332mR48eicdce+21Zt26deaiiy4yq1atMkcddZR54403TNmyZYty0wEAAAAAAIA8KRYEQWBiTFNZK1eubOvFMU0VAAAAAAAARRV7KtIacQAAAAAAAECmIBAHAAAAAAAApAGBOAAAAAAAACANCMQBAAAAAAAAUVs1ddu2beaDDz4w06ZNM4sXLzbr16831atXN4cccohp27atqVOnTuFtKQAAAAAAABD3jLgNGzaYIUOG2EBbx44dzeuvv25WrVplSpQoYX744Qdz6623mnr16tn7Pvnkk8LfagAAAAAAACCOGXENGzY0LVq0MI899pg54YQTTKlSpbZ7jDLknn32WXPmmWeaG2+80Vx44YWFsb0AAAAAAACAl4oFQRDs6EHff/+9ady4ca5+4ZYtW8ySJUtM/fr1TRSsWbPGVK5c2axevdpUqlSpqDcHAAAAAAAAMZKX2FOupqbmNggnypaLShAOAAAAAAAA8HKxBnnjjTdMhQoVzFFHHWV/fuihh+yU1SZNmtj/77rrroWxnQCAGNFiP3Pnzs22LumiRYvM3nvvbcqVK5fyMY0aNTK77LJLIW8lAAAAABTB1NSwpk2bmjvvvNMuzPDtt9+aww8/3PTr18+899579sLoiSeeMFHC1FQAiJ5Zs2aZZs2a5fv5M2fONIceemiBbhMAAAAAFHbsKc8ZcQsXLrTZb/Liiy+aTp06mWHDhtmLKgXnAADYEQ3cKJiWXV3Sc845x4wdOzbb0gh6PgAAAAD4Js+BuNKlS9spRfLOO++Y8847z/6/atWqNgIIAMCOaFrpjjLaFIQj6w0AAABARgfiVBtOU1FbtWplPvvsM/P888/b2+fPn2/23HPPwthGAAAAAAAAwHu5WjU17N///rcpWbKkmTBhghk1apTZY4897O2vv/66ad++fWFsIwAAAAAAAJB5GXF169Y1U6ZM2e72e++9t6C2CQAAAAAAAMjMjLh169bl6Zfm9fEAAAAAAABA3OUqELfvvvuaO+64wyxfvjzbxwRBYN5++23ToUMH88ADDxTkNgIAAAAAAACZMTX1/fffNzfccIO57bbbzEEHHWQOO+wwU7t2bVO2bFnz119/mTlz5pgZM2bY2nEDBw40ffv2LfwtBwAAAAAAAOIWiNtvv/3Miy++aJYsWWLGjx9vpk2bZj7++GOzYcMGU61aNXPIIYeYxx57zGbDlShRovC3GgAAAAAAAIjzYg1aqKF///72CwAAAAAAAEAB14gDAAAAAAAAsHMIxAEAAAAAAABpQCAOAAAAAAAAiHsgTquwFitWLMtXo0aNEvdv3LjRXHrppWa33XYzFSpUMN26dTMrV64syk0GAAAAAAAACn+xhsKw//77m3feeSfxc8mS/3+Trr76avPqq6/alVorV65sLrvsMtO1a1czffr0ItpaAEiP9evXm7lz56a8TytWL1q0yOy9996mXLlyKR+jQY1ddtmlkLcSAAAAAFDogbhp06aZ0aNHmx9//NFMmDDB7LHHHuaZZ54x9erVM0cddVTeNqBkSVOzZs3tbl+9erUZM2aMefbZZ81xxx1nb3viiSdM48aNzSeffGKaN2+en00HAC8oCNesWbN8P3/mzJnm0EMPLdBtAgAAAACkORD34osvmnPPPdf06NHDfPnll2bTpk2JwNmwYcPMa6+9lqfft2DBAlO7dm1TtmxZ06JFCzN8+HBTt25dexG5ZcsW07Zt2ywZHrpvxowZBOIAxJqOdzoOpvL999+bc845x4wdO9YOTmT3fAAAAACA54G4IUOGmEceecScd9555rnnnkvc3qpVK3tfXhx55JHmySefNPvtt59Zvny5GTRokGndurWZPXu2WbFihSldurSpUqVKlufUqFHD3pcdBQZdcFDWrFmTp20CgCjQtNIdZbQpCEfWGwAAAADEOBA3b948c/TRR293u2q4rVq1Kk+/q0OHDon/H3jggTYwt9dee5kXXngh27pHO6KMOgX0AAAoKtT4AwAAAFAggTjVc/vhhx9skfCwjz76yOyzzz5mZyj7rWHDhvb3n3DCCWbz5s02uBfOitOqqalqyjkDBw40/fr1y5IRV6dOnZ3aLgAA8oIafwAAAAAKJBB34YUXmiuvvNI8/vjjplixYmbZsmW2ZtuAAQPMzTffbHbG2rVr7QIQqkGnIuWlSpUyU6dONd26dUtk4y1ZssTWkstOmTJl7BcAAEWFGn8AAAAACiQQd/3115tt27aZ448/3k690TRVBb4UiLv88svz9Lv0nJNPPtlOR1VA79ZbbzUlSpQwZ511lp3q2qdPH5vdVrVqVVOpUiX7+xWEY8VUAECUUeMPAAAAQIEE4pQFd+ONN5prrrnGTiFVFluTJk1MhQoV8vqrzM8//2yDbn/88YepXr26Oeqoo8wnn3xi/y/33nuvKV68uM2I0wIM7dq1Mw8//HCeXwcAAAAAAADwLhDnaEVTBeB2RnjV1VTKli1rHnroIfsFAAAAAAAAZFQgbuPGjebBBx807733nvn111/tNNWwWbNmFeT2AQAAAAAAAJkZiFPdtrfeest0797dHHHEEXaqKgAAAAAAAIACDsRNmTLFvPbaa6ZVq1Z5fSoAAAAAAACQsYrn9Ql77LGHqVixYuFsDQAAAAAAABBTeQ7EjRw50lx33XVm8eLFhbNFAAAAAAAAQAzleWrqYYcdZhds2Geffcwuu+xiSpUqleX+P//8syC3DwAAAAAAAMjMQNxZZ51lfvnlFzNs2DBTo0YNFmsAAACIia1bt5pp06aZ5cuXm1q1apnWrVubEiVKFPVmAQAAZG4g7uOPPzYzZswwBx10UOFsEQAAANJu4sSJpn///mbRokWJ2/bee29blqRr1670CAAAQFHUiGvUqJHZsGFDQbw2AAAAIhKE6969u2natKkdcP3777/td/2s23U/AAAAiiAQd8cdd9jR0vfff9/88ccfZs2aNVm+AAAA4Nd0VJ3bderUyUyePNk0b97cVKhQwX7Xz7p9wIAB9nEAAABI89TU9u3b2+/HH398ltuDILD14jhJAwAA8Idqwmk66rhx40zx4lnHaPXzwIEDTcuWLe3j2rRpU2TbCQAAkJGBuPfee69wtgQAAABpp4UZ5IADDkh5v7vdPQ4AAABpDMQdc8wxO/FyAAAAiBKtjiqzZ8+201GT6fbw4wAAAFDIgbhvvvnGjoZqeoL+n5MDDzxwJzYHAAAA6dS6dWu7OuqwYcNsTbjw9NRt27aZ4cOHm3r16tnHAQAAIA2BuIMPPtisWLHC7L777vb/qgWnmnDJqBEHAADglxIlSpiRI0fa1VG7dOlia8JpAFaZcArCTZkyxUyYMME+DgAAAGkIxC1cuNBUr1498X8AAADER9euXW2wTaunamEGR5lwul33AwAAIE2BuL322ivx/8WLF9sTtJIlsz71n3/+MR9//HGWxwIAAMAPCrZ17tzZro6qhRlUE07TUcmEAwAAKMLFGo499lh7cqZpqmGrV6+2923durUANw8AAADpoqBbmzZt+IMDAAAUkv9fjTeXVBtOteCS/fHHH6Z8+fIFtV0AAAAAAABAZmbEudogCsL16tXLlClTJnGfsuC0mmq4pggAAAAAAACAfATiKleunMiIq1ixoilXrlzivtKlS5vmzZubCy+8MLe/DgAAAAAAAMgouQ7EPfHEE/b73nvvbQYMGMA0VAAoAAsWLDB///13np7z/fffZ/meFxpIadCgQZ6fBwAAAAAogsUabr31Vv7uAFBAQbiGDRvm+/nnnHNOvp43f/58gnEAAAAA4EMgDgBQMFwm3NixY03jxo1z/bwNGzaYRYsW2QzlcJmAHVEGnYJ3ec3AAwAAAADELBB3xx13mIEDB5orr7zS3Hffffa2jRs3mv79+5vnnnvObNq0ybRr1848/PDDpkaNGkW9uQBQYBSEO/TQQ/P0nFatWtEDAAAAAOCZ4iYCPv/8czN69Ghz4IEHZrn96quvNq+88ooZP368+eCDD8yyZcsSq7cCAAAAAAAAPinyQNzatWtNjx49zGOPPWZ23XXXxO2rV682Y8aMMffcc4857rjjTLNmzeyCER9//LH55JNPTBRt3brVvP/++2bcuHH2u34GAAAAAAAA8h2Imzp1qunUqZOpX7++/dL/33nnnXz9RS+99FJz0kknmbZt22a5febMmWbLli1Zbm/UqJGpW7eumTFjRuR6b+LEiWbfffc1xx57rDn77LPtd/2s2wEAAAAAAIA8B+JUo619+/amYsWKtp6bvipVqmQ6duxoHnrooTz9LtV+mzVrlhk+fPh2961YscKULl3aVKlSJcvtqg+n+7KjWnJr1qzJ8lXYFGzr3r27adq0qQ0SqhC6vutn3U4wDgAAAAAAAHlerGHYsGHm3nvvNZdddlnitiuuuMIWDtd9ynDLjaVLl9og3ttvv23Kli1bYD2hoN6gQYNMumj6qRaUUFbg5MmTTfHi/4ttNm/e3P7cpUsXM2DAANO5c2dTokSJtG0XAAAAAAAAPM+IW7Vqlc2IS3biiSfaum65pamnv/76q10psGTJkvZLCzI88MAD9v/KfNu8ebN9vbCVK1eamjVrZvt7tfKqtsN9KeBXmKZNm2YWLVpkbrjhhkQQztHP2p6FCxfaxwEAAAAAACBz5Tkj7pRTTjGTJk0y11xzTZbbX3rpJZsVllvHH3+8+fbbb7Pcdv7559s6cNddd52pU6eOKVWqlK1H161bN3v/vHnzzJIlS0yLFi2y/b1lypSxX+myfPly+/2AAw5Ieb+73T0OSIf169ebuXPnprxvw4YNNni89957m3LlyqV8jN6Hu+yySyFvJQAAAAAAmSXPgbgmTZqYoUOH2lVBXUBMq5hOnz7dTtFURlt4ymp2VGMuOXhVvnx5s9tuuyVu79Onj+nXr5+pWrWqrUN3+eWX29fUtM+oqFWrlv0+e/bslNul28OPA9JBQTitNJxfylhVtiqwsxYsWGDrZubF999/n+V7XuizpUGDBnl+HgAAAABEMhA3ZswYs+uuu5o5c+bYL0eLKug+p1ixYjkG4nJDteg0vVMZcVqEoV27dnaxiChlGyl4WLt2bZvFN3LkSLudLttImXnXX3+92WOPPezjtDCFkG2EwqZ9TMG0VBTcOOecc8zYsWNN48aNs30+UBBBuIYNG+b7+dpP82P+/PkE4wAAAJDvOvAqLaVZbUqoad26NfXeUbSBONU7KyzKsgvTIg5aiTWvq7EWRbbRsmXLzOGHH57tc4444ojE/8k2QmHTtNIdZbQpCEfWGwqTy4TLKeib3+nTOQWZ85qBBwAAAMjEiRPtTD+dizo6J1XSTdeuXfkjoWgCcUidbfTuu+/aDD4F5Bxlwl111VXmuOOOy/JYso0AZJL8BH21EjcAAACQziBc9+7dbe37cePG2ZJZKjU1bNgwe/uECRMIxqFoAnG9e/fO8f7HH3/cZGK2kX6++uqr7fTcvn37mtGjR9sadyVKlDC+odA/AAAAACCTpqMqE05BuMmTJ9sSWaI68Pq5S5cuZsCAAaZz585eXuPD80DcX3/9leXnLVu22CjxqlWrtsv8yjR6Qx522GH2//ru6xuUQv8AAAAAgEyhmnCajqpMOBeEc/TzwIEDTcuWLe3j2rRpU2TbiQwNxE2aNGm727Zt22YuvvhiU79+/YLaLhQhCv0DAAAAADKFFmYQTUdNxd3uHgcUeY04RYj79etnI8PXXnttQfxKFCEK/QMAkJlYKQ4AkIm0Oqpotp+moybT7eHHATsja87lTvjxxx/NP//8U1C/DgAAAGkuUr3vvvuaY4891px99tn2u37W7QAAxFnr1q3t6qhamEEz/sL08/Dhw029evXs44C0Z8Qp8y0sCAKbnvnqq6+anj177vQGAQAAIL1YKQ4AkMlU333kyJF2dVQtzKCacG7VVAXhpkyZYldN9bUOPDwPxH355ZfbTUutXr263Wl3tKIqAABxsmDBAvP333/n6Tnff/99lu95VbFiRdOgQYN8PRdIhZXiAAAwpmvXrjbYptVTtTCDo0w43a77gSIJxL333nsF8sIAAPgehGvYsGG+n3/OOefk+7nz588nGIcCw0pxAAD8j4JtnTt3tp+NmvmnmnCajkomHIo0EHfcccfZ6QtVqlTJcvuaNWtsCue7775bkNsHAEAkuUy4sWPHmsaNG+f6eRs2bDCLFi2ydUjKlSuXp9dUFp0CeHnNwgNywkpxAAD8fwq6aSFKIDKBuPfff99s3rx5u9s3btxoo8YAAGQSBeEOPfTQPD2nVatWhbY9QF6xUhwAAEAEA3HffPNN4v9z5swxK1asyFJb5I033jB77LFHwW8hUAjWr19v5s6dm+9slUaNGplddtmFvgEAxGqluMmTJ9v6vw4rxQEAABRRIO7ggw82xYoVs1+anppMAYsHH3ywgDcPKBwKwjVr1izfz585c2aeM2AAIBNocI66Kn5hpTgAAIAIBuIWLlxogiAw++yzj/nss8/sSqlO6dKlze67704BQ3hDGW0KpuVUgymnuk96PgAgK9WQ1Upjyip2lGmlldVZaSzaWCkOAAAgYoG4vfbay2zZssX07NnT7LbbbvbnTFgRL68FsRXECX/Pi4oVK7IKXppoWumOMtryU/cp3dhHAUQpCNe9e3fTqVMnM27cOHPAAQeY2bNn2+mOun3ChAkE4yKOleL8QpkNAAAyYLGGUqVKmUmTJplbbrnFxJ0CHA0bNsz385VRlR/z588nGIdcYR8FEKXpqMqEUxAuXGOsefPm9metqj5gwADTuXNnsucjjpXi/EGZDQAAMmTVVJ1E66T66quvNnHmMuFymp6Y30L/OU2HzGsGHjIX+yiAqFBNOH32KRMuXOhf9PPAgQNNy5Yt7ePatGlTZNsJxAllNgAAyJBAXIMGDcztt99upk+fbovdly9fPsv9V1xxhYmT/ExPbNWqVaFtD5CMfRRAUVu+fLn9rumoqbjb3eMA7Ly4lNkAACDT5DkQN2bMGFOlShVb6D652L1WVI1bIA4AAOSsVq1a9rtqwmk6ajLdHn4cAAAAkKnyHIjT6qmIBwr9AwAKQuvWrW1JBi3MEK4RJ9u2bTPDhw839erVs48DAAAAMlmeA3GIBwr9AwAKssD/yJEj7eqoWphBNeHcqqkKwk2ZMsWumqrHAQAAAJksX4G4n3/+2bz88stmyZIlZvPmzVnuu+eeewpq21CIKPQPAChIXbt2tcE2rZ6qhRkcZcLpdt3vk/Xr19tVKfO7MJMK6auGFwAAALBTgbipU6eaU045xeyzzz72BFUj3joZDYIgdsVga1YoZsqtmm/MsqwrwBUGvY5eL90o9A8fcYEMRJOCbVpdXaujamEG1YTTdFQfM+F0jqNFqfJLdXTjdl4EAACAIgjEabrJgAEDzKBBg0zFihXNiy++aHbffXfTo0cP0759exMnfZuVNo0/7GvMh4X/Wo3/7/UA7BgXyEB0KejWpk0b4ztltCUvSuV8//335pxzzjFjx461A1rZPR8AAADY6UCcTj7HjRv3vyeXLGmnZ1SoUMHcfvvtdhT84osvNnHJuBk9c7M56PTr83QyvWnTJrNs2TJTu3ZtU6ZMmTwtgjF65o3mlHxuL5BJuEAGUNg0rXRHGW35ySoHAABAZstzIK58+fKJunCacvLjjz+a/fff3/78+++/5+l3jRo1yn5paqvo99xyyy2mQ4cO9ueNGzfaWjPPPfecDXC1a9fOPPzww6ZGjRomHRk3K9YGpuulg0w6KcswXTJh6i3iiQtkILq2bt0ai6mpAAAAQCQCcc2bNzcfffSRHQXu2LGjDZR9++23ZuLEifa+vNhzzz3NHXfcYRo0aGBrzD311FM2q+7LL7+0Qbmrr77avPrqq2b8+PGmcuXK5rLLLrP1Z6ZPn24Km1Z9y0+x5dxMV8kpCKe/Rbow9RYAUJB0LqDzAjfAJlrQQCuq+rZYAwAAABCJQJxWRV27dq39v+rE6f/PP/+8DSDldcXUk08+OcvPQ4cOtRlyn3zyiQ3SjRkzxjz77LPmuOOOs/c/8cQTNril+/Ma9MuratWqmQsuuCDfz/dhuoqm3p5xy5OmcRrq2Hw/d64ZPfJspt4CQIyDcN27dzedOnWyJSy0mNPs2bPNsGHD7O0+rpwKAAAAFHkgTqulhqepPvLIIwU2lUWZb+vWrTMtWrSwBZK3bNli2rZtm3iMstPq1q1rZsyYkW0gTlNY9eWsWbOmQLYvjjT1dkOVhsbUPrjQX2vDim329QAA8aPPcGXCKQg3efJkU7z4/0oe6LNaPyvLXAs9KeudaaoAAADIZPkKxH3++edmt912y3L7qlWrbAbYTz/9lKffp2mtCrypHpwWfZg0aZJp0qSJ+eqrr0zp0qVNlSpVsjxe9eFWrFiR7e8bPny4zdQDZMGCBebvv//O0x9D04vD36M8vRgAokA14TQdVZlwLgjn6GetuN6yZUv7uDisqAoAAACkLRCnE22NfCdTFtovv/yS5w3Yb7/9bNBt9erVdtpKz549zQcffGDySyf7/fr1y5IRV6dOnXz/PvgdhGvYsGG+n69af/kxf/58gnEAMooWZhBNR03F3e4eBwAAAGSqXAfiXn755cT/33zzTbt4gqPA3NSpU21B5rxS1tu+++5r/9+sWTObbXf//febM844w67Oqky7cFbcypUrTc2aNbP9fWXKlLFfgMuEy+vCGRs2bLABZ+3P5cqVy/NCHXnNwAMA32l1VFFNuFSlI3R7+HEAAABApiqZ11VEixUrZrPWwkqVKpVYFW1nbdu2zWbXKSin36sAX7du3ex98+bNM0uWLLFTWYHCXDijVatW/IEBIJdat25tzwO0MEO4Rpz7XFfZiHr16tnHAQAAAJks14E4nUiLTqSVtaZVRXeWppF26NDBLsCgLCKtkPr+++8nMu769Oljp5lWrVrVVKpUyVx++eU2CFfYK6YCAIDc0wIMGozT6qgauNPnu1s1VUG4KVOm2PITLNSAdFq/fr2ZO3duvrPftUjYLrvsUshbCQAAMk2ea8QtXLiwwF78119/Needd56tGaPA24EHHmiDcCeccIK9/95777Wj6sqIU5Zcu3btzMMPP2yifGKXm0L/nNgBAOKma9euNtim1VO1MIOjATzdrvuBdNK5mmZY5NfMmTPznFEPAABQYIG4GTNmmD/++MN06tQpcdvTTz9tbr31VrNu3To7Av7ggw/mqT7bmDFjcry/bNmy5qGHHrJfvp3Y5VTonxM7AEAcKdjWuXNnuzqqBtlUE07TUcmEQ1HQwKfOuXKq65pTHVk9HwAAoMgCcbfffrtp06ZNIhD37bff2qmjvXr1sicwI0aMMLVr1za33XabyeQTu9xOdQAAII4UdNP5AlDUNK10Rxlt+akjCwAAkJZA3FdffWUGDx6c+Pm5554zRx55pHnsscfsz3Xq1LHZcZkQiNvRiR2F/gEAAAAAAJDvQNxff/1latSokfj5gw8+sAstOIcffrhZunRpbn8dAOzQggUL7EIueZGbOo05qVixomnQoAG9A2SIdB9nOMYAAABktlwH4hSE00INynzbvHmzmTVrlhk0aFDifp3ElipVqrC2E0AGXhw3bNgw38/PqU7jjsyfP59gHJABiuo4wzEGAIDo2rp1K/VuEY1AXMeOHc31119v7rzzTjN58mQ7PVMFmJ1vvvnG1K9fv7C2E0CGcRkqORXSzm+dxuy44t15zY4B4Kd0H2c4xgA7jwtkAIVp4sSJdgV4fc47+rwfOXIkK8Aj/YE41YfTamjHHHOMqVChgnnqqadM6dKlE/c//vjj5sQTTyy4LQOAfBbSpk4jgLzIxOPM+vXr7SrwO7PwlAZlgXTiAhlAYR9junfvbheoHDdunDnggAPM7NmzzbBhw+ztEyZMIBiH9AbiqlWrZj788EOzevVqG4jTqmhh48ePt7cDAAAg2hSEa9asWb6fr9XjWW0U6cQFMoDCzrZVJpyCcJoBWLx4cXt78+bN7c9dunQxAwYMMJ07d94uFgIUWiDOqVy5csrbq1atmucXBwpbzQrFTLlV841Z9r8DaWHS6+j1AACIOmW0KZiW0xTanKbs6vlAunCBDKCwTZs2zWaDKxPOBeEc/Txw4EDTsmVL+7g2bdrQIUhvIA7wSd9mpU3jD/sa82Hhv1bj/3u9dCLQCADID00r3VFGW36m7AKFgQtkAIVt+fLl9rumo6bibnePA3YGgTjE2uiZm80ZtzxpGqdh5P77uXPN6JFnm1NM+sQ90AgAAMAFcryw4AaiqFatWva7asJpOmoy3R5+HLAzCMQh1lasDcyGKg2NqX1wob/WhhXb7OulU9wDjQAAZLoFCxbkeTVvTS8Of8+LihUrmgYNGpgo4QI5PlhwA1HVunVru0iRFmYI14iTbdu2meHDh5t69erZxwE7i0Ac4LG4BxrTOfVWqPMHAIhaEK5hw4b5fr5q/eXH/PnzIxWM4wI5HlhwA1GmBRhGjhxpV0fVggzt27e3K4drJfE33njDvPrqq3bVVBZqQEEgEAd4av369fb7rFmz8vQ8fZioEKlGfPThklv5GVX3aeqtMP0WABAlLhMup4UzCvqzXsG7vGbgpfMCWSsXqmi66jVpqpiyVKZMmcIFcsSx4AZ80LVrV7sy6j333GOPK+FjkG7X/UBBIBAHeGru3Ln2+4UXXpjW19WUlThOvRWm3wIAoig/C2e0atXKxIkugJWN0r9/f7tyoaOpYrqdC+RoY8EN+JK1OWLEiEQmnFO6dGl7u2rHcaxBQSAQB3hKI8LSqFEju/pdXke78zq6XhR1Y9I59baopt8CAIDc0QWwpowpqKMFHFQ7TtNWmSoWfSy4AR+yNv/1r3/Z/x9//PHmxhtvTGTeDh061GbIXXzxxfYYxDEHO4tAHOCpatWqmQsuuCCto+sAAABFSRfAbdq0oRM8w4IbiLr333/f/Pbbb+aoo44yL730UmKxBmXB6edjjjnGfPTRR/ZxCtQBO4NAHAAAyFedSjdFPj/1qfKazQsA8BcLbiDqFGCTQYMGmSAI7M/hzNtbb73VnHDCCQTiUCAIxGWoTCj0DwAoPArCNWvWLN/PnzlzJlm5AJAhWHADvtDU9z59+thrXkfXvj179izS7UK8EIjLUJlQ6D+T5ZSp4oKiOQVHyVQBsCM6TiiYlt9alHo+ACBzsOAGokxT3ocMGWJuu+0206lTJzNu3LgsNeKUKeceB+wsAnEZKhMK/Wey3GSqqB+zQ6YKgB3RZ8eO6kxSixIAEMaCG4gqTT9VXbht27bZL10PzZkzx84I08+i+/U4YGcRiMtQFPrP3EyV3NZuAgAAAAoaC24gij7++ONEwO311183r732WuK+YsWK2e+6X48jKw47i0AckIGZKq1atUrr9gAAABSErVu32hpO4SLqCuwAwM7QMaUgHwfkhEAcAAAAgMibOHGi6d+//3ZF1EeOHGmnPAJAfu2+++6J/3fs2NF+afaQZhMpO+7VV1/d7nFAfhXP9zMBAAAAIE1BuO7du9vi6Q899JB5/PHH7Xf9rNt1PwDkl5uWuuuuu5oXXnjBbN682cyaNct+18+6Pfw4wNuMuOHDh9sPTRWWV7S5ZcuW5s477zT77bdf4jEbN260I1/PPfec2bRpk2nXrp15+OGHTY0aNYpy02ONFTcBAAAQpemouh7QQlTffvutmTJlSuK+vfbay94+YMAA07lzZ6apAsiXDz/80H7/66+/TIUKFUwQBIn7+vXrl/hZjzvhhBP4K8PfQNwHH3xgLr30UnP44Yebf/75x9xwww3mxBNPtKuTlC9f3j7m6quvtmmg48ePN5UrVzaXXXaZTT2fPn16UW56rLHiJgAAAKJCNeE0HVVfJ598sh2gVybc7NmzzbBhw8wrr7ySeBxF1AHsLC3OEA7EabVUDQgAsQjEvfHGG1l+fvLJJ+2ca632ePTRR5vVq1ebMWPGmGeffdYcd9xx9jFPPPGEady4sfnkk09M8+bNi2jL440VNwEAABAVv/zyi/3eoUMHM3nyZHtRLLoW0M+dOnWyqxy6xwFAXml2npQqVcrGIT799NPEojBHHnmkTQrasmVL4nFAbBZr0A4vVatWtd8VkNPO3rZt2yxBorp165oZM2akDMRp+qq+nDVr1qRl2+OEFTeB9KlZoZgpt2q+McsKv2SnXkevBwCAT3777Tf7XbNiXBDO0c9dunSxgTj3OADIK83KE8UfTjvtNBv4V/ms7777ztx99932dvc43QfEIhCnoodXXXWVadWqlU01lxUrVpjSpUubKlWqZHms6sPpvuzqzg0aNCgt2wwAO6tvs9Km8Yd9jflfWYpC1fj/Xg8AAJ9Ur17dfldt6d69e2cJxukaQllx4ccBQF6FV2NWaSy3SmpOjwO8D8SpVpzqPHz00Uc79XsGDhxoiymGM+Lq1KlTAFsIAAVv9MzN5oxbnjSNGzUq9D/v93PnmtEjzzanFPorIU4WLFhg/v777zw95/vvv8/yPS8qVqxoGjRokOfnAYivPfbYI1HWRtlvOt93NeI0CO/K3bjHAUBe1a9fP9saceGfw48DvA7EaQEGrX6kFUj23HPPxO01a9a0ywWvWrUqS1bcypUr7X2plClTxn4BgA9WrA3MhioNjal9cKG/1oYV2+zrAXkJwjVs2DDff7BzzjknX8+bP38+wTjkGsHi+GvdurXZe++9TbVq1eyqqeEaTfXq1bOrpv7xxx/2cQCQH3379rULRUr79u1t7UlNTd2wYYONVWj6u3sc4HUgTlHlyy+/3EyaNMm8//779oM0TB+qKpY4depU061bN3vbvHnzzJIlS0yLFi2KaKsBAMgMLhNu7NixdqGk3NJJq6Zu6MJZJ7G5pQw6Be/ymoGHzEWwODOUKFHCjBw50nTv3t2cdNJJZsCAAYkLZGXDaQrZhAkT7OMAID8+/vjjxP9nzZpls2/btWtng3D6Ofy4448/nj8y/A3EaTqqVkR96aWX7FQUV/dNK5Low1Xf+/TpY6eaagGHSpUq2cCdgnCsmAoA0cdiFPGgINyhhx6ap+eo5itQ2AgWZw4t1KBgW//+/e2FsaOBfN2u+wEgv5QYJKeffrqtRxnOfCtZsqRdwGH8+PH2cQTi4HUgbtSoUfZ7mzZtstz+xBNPmF69etn/33vvvbYgqzLitBqqotIPP/xwkWwv/LJ+/Xr7PTyCUdiZHACyYjEKAOlAsDgzKNjWuXNnM23aNLN8+XJTq1YtOx2VTDgABaVJkybmk08+sbPwnNq1a9vbgdhMTd2RsmXLmoceesh+AXkxd+5c+/3CCy9M6x9O2Z0A/ofFKIDMqp8mLLiBwqSgW/IgPgDsLB1XhgwZYm677TZbH+75559PLAozdOhQM2jQoMTjgFgs1gAUBs3rl0aNGplddtklzzWK8loTSbj4ALJiMQog8+qnCQtuAAB8ouxazcTbtm2bTRhK/hLdz6IwKAgE4hBbWlnrggsuSOs0FwAAMrV+mrDgBgqyxIib3ZDffTSvg7EAMpcWYVAQrlixYubdd9+1i8A4Oo7odt2vx5EVh51FIA4ZKaeTu9xMyeHEDgDgC+qnwUc6T2vWrNlO/Y6ZM2cyqAogV1R3Up555hlz00032WC/U6NGDTN48GCbKe4eB+wMAnHISLk5uctpSg4ndgDSvSqs6LX0mgAQdxr01PnWzpQR0e8AgNzQ4i9Sv35988MPP2y3KMxnn32W5XHAziAQh4yU08ldbqY7cGIHIN2rwkrj/3tNAIg7TQXbUYkQyogAKCgKtun6b9iwYWby5MlZpp9qSurw4cNNvXr1qBGHAkEgDhlpRyd3rVq1Suv2IHOnSMusWbPy9Lz81m/K7wqIiMaqsPL93Llm9MizzSkxzfoj4w8AABRVuaJLL73UXHvttebYY481Z599tl2leevWrebZZ5+1GXJ33XWX+frrrxOPp1wR8otAHAAUEffBf+GFF6b1dbW6L/xbFVY2rNhmXzOuWX9k/AEAgKIuV/Thhx/ar2TXXHNNlp8pV4T8IhAHAEWkS5cu+RpNy21tnOyCcA0aNDDpQMZfPKQz668oMv4AAEBmyq5ckbLgND1V01RvuOEGe86u7LhUzwfyg0AcABSRatWqmQsuuCDfz496bRwy/uIhnVl/RZHxF/ept5mwoEjc+xAAkP5yRQq8KRDXrVu3SJ9vw08E4gAAhSLuGX+Ih7hPvc2EBUXi3ocAACBeCMQBAApF3DP+MkEmTC+O+9TbTFhQJO59CAAA4oVAHIBISncAIGqriiav4pRqO3PaXlZxKnyZsI/GfXqx+lBTYaf/tNZsqLKt8AONy7emfeptJiwoEvfp0wAAIF4IxAGIpKIKAERlVdHsVnEK0/TN7LCKU+HLhH007tOL4x5oBICoDirmZkCDQUUAcUUgDkAkFUUAIEo1xrJbxSkvJ68oXJmwj8Z9enHcA40AEPVBxZwwqAggrgjEAYikuAcAdmYVJ2nVqlVatwfby/R9NO59mFMmR26QyQEg0+U0qJibAQ0GFQHEFYE4AEDaxb0GXtzblwmYHg4AhTuoKAxKAchEBOIAAGkX9yBH3NuXCZgejqioWaGYKbdqvjHLihf6a+l19HoAAKDwEIgDAKRd3IMccW9fJmB6OKKib7PSpvGHfY35sPBfq/H/vR4AACg8BOIAAGkX9yBH3NsHIH3T3EfP3GwOOv36PAXoN23aZJYtW2Zq165typQpk+vnLVy40IyeeaM5JZ/bCwAAdoxAHAAAABDRae4r1gam66WD0vq6Wt0XAABfbd261UybNs0sX77c1KpVy7Ru3dqUKFHCRAWBOAAAACCCunTpku0CLm6ae3aZbTfffLMZPHiwqVevXsrHZDc9XkG4Bg0amHRZsGCB+fvvv/P0nNwsepOTdLcRAJA+EydONP3798/yGanPvJEjR5quXbtGoisIxAEAAAARVK1aNXPBBRekvG/WrFk5LvoiCsZFeVEYBeEaNmyY7+fvqP05mT9/PsE4AIhhEK579+6mU6dOZty4ceaAAw4ws2fPNsOGDbO3T5gwIRLBOAJxALysmaPpOvkdJU+VWQAAgE/isCiMy4QbO3asadxYS0XkTm7alx2dHyiAl9csPEQnqzHqGY1RnxIHxNXWrVttJpyCcJMnTzbFi/9vtfHmzZvbn5VlPmDAANO5c+cif08SiAPgHQXhmjVrlu9R8ihkAQBAOgYtXOZUXuxskAPpEadFYRSEy+vnsk/ti7OiymqMakajD1PigLiaNm2afe8pE84F4Rz9PHDgQNOyZUv7uDZt2piMDcR9+OGHZsSIEfaiWCMGkyZNStTCkCAIzK233moee+wxs2rVKvuBO2rUqEgedAGkTxyyAACgsLnM4QsvvDDtf+x0FftPd7CRQCPSleGf2/OZos7wT3dWY5QzGn2ZEgfE1fLly+13vfdScbe7x2VsIG7dunXmoIMOMr179055ULrrrrvMAw88YJ566ilbaFZ1Ltq1a2fmzJljypYtWyTbDKDoxSkLAACKotB/bi5083phXRTTxooq2MiqokhXhn9OopThn+lZjT5NiQPiqlatWva7AuB67yXT7eHHZWwgrkOHDvYrFWXD3Xfffeamm26yByx5+umnTY0aNezB7Mwzz0zz1gIAAMSj0H9hXVhnQrAx6vWpEI8M/9zso2T4R4dPU+KAuGrdurXNslUWajggLtu2bTPDhw+3CV56XFGLbI04Lbu+YsUK07Zt28RtlStXNkceeaSZMWNGtoG4TZs22S9nzZo1adleAAAApFcmBBuRuRn+wj7qB5+mxAFxVaJECVuPUVPBNVCnALibIq4g3JQpU+wU8ShkpWYN10eIgnCiDLgw/ezuS0V/YAXs3FedOnUKfVsBAAAAAJkpPCUulShNiQPirGvXrjbY9u2339os1EqVKtnveg9GqU5jZDPi8ktRz379+mXJiCMYBwAAkFlyKoTvFl3IafGFKBTCzwQ1KxQz5VbNN2ZZevID9Fp6zXSvLJrXxQVys49mh+nT6efTlDgg7rp27WrLm2kquLJQFQDXey8KmXCRD8TVrFnTfl+5cmWWkQP9fPDBB2f7vDJlytgvAABQNAWrv/jiC/t/fdeiTFE68UHmyE0hfNXg8qEQfpz1bVbaNP6wrzEfpuf1Gv/fa6YzCHf0ofuZWvkI/h1Ss7gZOeC8PD9v+drAfDhrHrUM08inKXFAJihRokSk6zFGNhCnEQMF46ZOnZoIvCm77dNPPzUXX3xxUW8eAABIMnHiRJuVvnjxYvtz3759bXbAPffcE5mpAMgcORXC37Bhgy2srgyWcuXKZft8FL7RMzebM2550jRO09/7+7lzzeiRZ5tT0vJqxmbCKfB3W5v0JQrc9v6mPGfgoeCmxGn1VE2FC1/XRmlKXCYiKxVRU6SBuLVr15offvghywINX331lalataqpW7euueqqq8yQIUPsaI4OYDfffLOpXbt2YoUsAAAQnSBct27dTLFiWbM+lixZYm9/8cUXuQhBpArht2rVKq3bg9RWrA3MhioNjamd/YyXgrRhxTb7mumcIq1g40GnX5+n4K4Wn1u2bJm99snLbB9dT42eeWPaAo3pnl5cFFOL4zYlLhODcA0bNsz383PKnM7J/PnzyUpFNANxmrJy7LHHJn52td169uxpnnzySXPttdeadevWmYsuusisWrXKHHXUUeaNN94wZcuWLcKtBgAA4fpbmo6qz26pUqWKvRAZM2aM6dOnjw3Q/fXXX/Z+1Wx1FyPU3ypa1E8D0kPHSQX+ul46KK1/ctWJi+P04nRPLY7jlLhM47JDx44da1chzq3cZE6norqOCt6RlYrIBuJ0gAqC7EekNKp+++232y8AABD9+lsKuikIJ+67y4I/4ogjEj9Tf6toUT8NSA83kyevgw/uYj6vwYOiWKwhndOL0z21GPGh91Fe636SOY2MqxEHAAD8qL+l0hGvvfaazWQ/44wzthtFHjdunLn77rtNx44dzeDBgxPPRzT6Lxn104CCU61aNXPBBRekNXiQ7uxaZfxN/2mt2VBlW+FnGy3fmtapxQBQGAjEAQCAnaq/Vbr0/6YJHX300YnbwqPIP//8sw3E6XFRvqDMJNRPA1AQXImCCy+8MLZTb/MzxT+3gUbKNACZiUAcAADYKSpEPXnyZHPjjTeaDh06mOLF/3/B7m3bttmMOfc4AAgHMmTWrFl5+qPkN5vKTfmMijjUasyEqbc7M8V/RyjTAGQmAnEAAGCnXHbZZeaaa64xX3/9tV0t7oYbbjAHHHCAmT17thk2bJj55ptvbHBOjwOAos6mikpGVRxqNcZ96q1bdTNV4X0FhBVIzG71Wg1CqRxDvXr1sv3d+h2pAtFRCTYCKBwE4gAAwE7RlNP+/fubESNG2FpxU6ZMSdznVknV/W4KKwAUVTZVlIIc1GqMPgXhGjZsmO/nu4zw/Jg/f34k9lMABY9AHAAA2Gl33XWX/X7PPfdsd5+y5dz9AJBJ2VQ5oVZj9LlMuLwGfXd2+rQCzamy8ADEA4E4AABQIBRsGzJkiHn44YfNjz/+aOrXr28uueQSMuEAIA+2bt1qpk2bZpYvX25q1apl62u67GKkX80KxcyhtUqYxjX/f/3THStvWtXbP1+vV25VCfuaAOKLQBwAACgwmn561VVX8RcFgHyYOHGincqvbCpHWVUjR440Xbt25W9aBAtq9G1W2jT+sK8xH6bnNZV3p9cEEF8E4gAAAAAgAkG47t27m06dOplx48ZlWfRGt0+YMIFgXBEsqDF65mbz8rwtaX3d5WsD0yMCC4oAKBwE4gAAAACgiKejKhNOQbjJkyfblaalefPm9mctbDFgwAC7MrUv01SVTeZWxk1VBy38PZW8LuJRGDJ9QZGc+jA3dfCi0IdAFBGIAwAAAIAipJpwCmooE84F4Rz9PHDgQNOyZUv7uDZt2hgfKIDTrFmzHB+jYFV2Zs6cWeSLceS0oEhOQarcikqgSqvDplocwgUU8yu7QGRUAo1AUSEQBwAAAABFSAsziKajpuJud4/zgYJMCqbtTDZVnAONUQk2KgjXsGHDQvndObV//vz5BOOQsQjEAQAAAEAR0uqooppwmo6aTLeHH+cDZXrlFGRq1aqV8dnOBhrd7yhqK1eutKu0XvOvc029evVy/bz169eZH3/8ydSvv4/ZZZfyuX6egsmD73ssZQYekCkIxAEAAABAEWrdurUN2mhhhnCNONm2bZsZPny4DZLocYiGuAQaldmnVVr7lZ9szK95fHINY8za//vKrRLG/NqstJ2emi4KNJZbNd+YZVmnfRcGvY5eD8gJgTgAAAAAKEJagGHkyJF2dVQtEKCacG7VVAXhpkyZYldN9WWhBvhD+9ubW9eYL+tUNWXLls318xYuXGhuuukmM2TIkDxl0sl5Xfcy+6SpRpxq+SnQ2PjDvsZ8WPivp4p4ej0gJwTiAAAAAMRqxc0oFcLPra5du9pgm1ZP1cIMjoIcul33A4WxIEWPvv3y/D78q+xW8+WKbeavsnVNzSoNI/se1PaPnrnZvDxvS9pec/nawPRIY8Yf/FMsCILAxNiaNWtM5cqVzerVq02lSpWKenMAAAAA7MCsWbN2WAh/R6JQCD8/tm7daldHVS0t1YTTdFQy4eDj+zAK78Hff//dTvfOa1DQrRib3cqvOUnnqrBq35svPm122bom2zp+OyO7GoDV6u1vWnc4bad+dybHnsiIAwAAABApcSmEnx8KurVp06aoNwOIxcq3yvi74IIL8pzxlxtRyPhTkPHncTeY29qUyb6O387IpgbgbS9sMtXrNY1EH/uIjDgAAAAAAJBR4pLxR0acfxlxBOIAAAAAAEBGySkjLrcZf0WdEYfoIBCXzz8GAAAAAAAAUFixp+J5+s0AAAAAAAAA8oXFGgAAAAAAAOCV9Z5OLyYQBwAAAAAAgMj5PYcFKZYuXWqefPLJfP/uXr16mTp16mx3e7V6+5vWHU4zGR2Ie+ihh8yIESPMihUrzEEHHWQefPBBc8QRRxT1ZgEAAAAAAKCQTJ482fw87gZzW5sy299Zxpgr+lbYid8+wZhft7/1thc2mer1mtqMuYwMxD3//POmX79+5pFHHjFHHnmkue+++0y7du3MvHnzzO67717UmwcAAAAAAIBC0KVLF/Pm1jVmUoqMuM2bN5s//vgj5fP++ecfs2rVKlOlShVTsmTq0Nduu+1mSpcuvd3tx1+3f6EF4aRYEASBiTAF3w4//HDz73//2/68bds2mzp4+eWXm+uvv36Hz2fVVAAAAAAAABSW2KyaqujmzJkzTdu2bRO3FS9e3P48Y8aMIt02AAAAAAAAIDZTU1WUb+vWraZGjRpZbtfP2a2MsWnTJvsVjkoCAAAAAAAARS3SGXH5MXz4cJsO6L5SrYABAAAAAAAApFukA3HVqlUzJUqUMCtXrsxyu36uWbNmyucMHDjQzsl1X1rOFgAAAAAAAChqkQ7EafWKZs2amalTpyZu02IN+rlFixYpn1OmTBlbGC/8BQAAAAAAABS1SNeIk379+pmePXuaww47zBxxxBHmvvvuM+vWrTPnn39+UW8aAAAAAAAAEJ9A3BlnnGF+++03c8stt5gVK1aYgw8+2LzxxhvbLeAAAAAAAAAARFmxIAgCE2NaNVWLNqheHNNUAQAAAAAAUFSxp0jXiAMAAAAAAADigkAcAAAAAAAAkAYE4gAAAAAAAIA0iPxiDTvLlcDTfF0AAAAAAACgILmYU26WYYh9IO7vv/+23+vUqVPUmwIAAAAAAIAYx6C0aENGr5q6bds2s2zZMlOxYkVTrFixtERBFfRbunRpLFdpjXv7MqGNtM9/9KHf4t5/mdBG2uc/+tBvce+/TGgj7fMffei3uPdfUbRRoTUF4WrXrm2KFy+e2Rlx+gPsueeeaX9ddXRcd+hMaF8mtJH2+Y8+9Fvc+y8T2kj7/Ecf+i3u/ZcJbaR9/qMP/Rb3/kt3G3eUCeewWAMAAAAAAACQBgTiAAAAAAAAgDQgEFfAypQpY2699Vb7PY7i3r5MaCPt8x996Le4918mtJH2+Y8+9Fvc+y8T2kj7/Ecf+i3u/Rf1NsZ+sQYAAAAAAAAgCsiIAwAAAAAAANKAQBwAAAAAAACQBgTiAAAAAAAAgDQgEJcHlNMDAAAAAABAfhGIy4NffvnFxNmvv/5q4i7ubYx7+wAAQPwHvRn8BoD8HT/hBwJxufToo4+aTp06xTbQ8Z///MdceOGF5q+//jJxFfc2xrV94Q8VPmAAFIZt27ZlzB+W46j/+2ic99cff/zRfi9WrBj7qmfcfrl+/fqi3hQgI99/Om7+/PPP5ttvvy3qzUEuEIjLZRDuX//6l7ntttvM7rvvbuJm9OjR5qKLLjJ9+vQxu+66q4mjuLcxru1zHyp//vmnWbNmTSxPzN2Jq9oVt7ZJHNsUFucL4mQTJkwwTz/9tIljHxYvXtz89NNP5vXXXzdr1641cb043rRpk1m3bp2Jm7i/D90++sMPP5ilS5fa/8fRd999Zxo3bmzuu+8++3McP/PD4tQ2t48uWLDAXHDBBYmAatzE/Vgzc+ZM8+qrr5qnnnrKbNiwwcRZHN9/X375pdl///3tZwWiL56f5AXoueees0G4l156yXTp0iVWb1oZN26cufTSS+3FxymnnBK79mVCG+PcPn2o6GTuiCOOMEOHDrUBuTidmLsPzvnz55uBAweaU0891Tz88MN2NCtOgdTff/89llP7Xf8tWrTIPPLII+baa6817777rtmyZYuJo48//tj06tXLHnPi1offfPONOfLII83bb79tg/4Sh+OMa9+cOXPM2WefbdvYu3dv88Ybb5i4cG2cN2+eGTx4sDn33HPtReQXX3yReIzPfena9/XXX9sLrNdee83EVdWqVc2AAQNsPz700EP2tjh95n/00Ud2cP+mm24yCxcujE3bwvvoQQcdZK+d5s6dm7gvLnTc1IBUXANUTzzxhOnWrZu58cYb7Qyb9u3b2/PuONF78J133rH/j+P77+ijj7af8bqeSPW4OFi6dGls2qIdENl49NFHg2LFigW77rprsHz58tj9nf7zn//Y9tWpUydx29atW4M4iXsb494+eeyxx2wb27dvH9x2223Bn3/+GYt2uu3/5ptvgt133z3o3r27/apUqVLw0EMPBb7btm2b/f7dd98Fu+22W3DhhRfG6jga7r+6desGRx99dHDQQQcFJUqUsO/L8GN89/fffyf+P3DgwKBUqVLBf//73yAuFi1aZI+h11577Q73Z5+4bZ49e7Y9j7niiiuCYcOGBe3atbPvR+2fPrYrpzaeccYZwemnnx4ccMABwWGHHRaMHTt2u8f6xB1Dvvzyy6BcuXLBNddcE8TdihUrgltvvTWoWLFi8O9//9vr/gsbM2ZMsOeeewZHHXVUsO+++waVK1cO5s+f733b3D761Vdf2X30pptuCi666KLg8MMPD1atWhXExfjx4+25qPbLF198Mdi0aVMQJ2qTzj/1/bfffgt+//33oGbNmsF1110XxMVzzz1n+/DYY48N3nvvvcTtPr//HJ1ra98cMGCA/fmff/4Jpk6davvztddeC+LiqaeeCooXL544z/YdgbhsjBo1KihZsqTt8GOOOSbYb7/9grlz5wZxMXr0aHvBOGLEiKBp06bBkUceGWzYsCFWF49xb2Pc2+dMnz7dfmheeeWVwcEHHxzccsstwfr164M4+PHHH20Q58Ybb0z02SWXXBJceumlwZYtWwLfLVu2zO6XLVu2DMqWLRv07ds3VsE4BXD22Wef4Prrrw82btxob7vjjjtsYFUnsnEwadIk+/4Lf/4pYBWnYNwLL7wQnHjiifb/mzdvDm6//fbgtNNOCy6//HJ74u7zyfratWuDk08+OejXr1+WQUa1TxfJf/31l9ftkzVr1tj+U5DY+fjjj4MqVaoEFSpU8H5gY968efZ8dPDgwfZnfTa8/fbbweOPP27bGZdjTZg+J+IUjHv55ZftgJSCOevWrbN9eNJJJwUdO3a0F8y+tstRoHiXXXYJbrjhBvvzM888Y4OOn3zySSzOSRcsWBC0bt3afr6fc8459riivoxLME7nap06dbLXE+LOP3VM1eeH+L6PKlCsawh9rh9yyCHBCSecELz77ruJ+31un95fp556qg2Ez5w5057HdOjQIWjWrFlQrVo1+97UAJW7dvL1/fj+++8He++9d+KaQokaviMQl8KECRPsRYaiyKJRgebNm8cmGPfkk0/aEYGXXnrJ/qw3bcOGDW0b3cWkr2/STGlj3NvnqA1qm4Lh+mBRAEBZDjpZ0AnsAw88EPhKJzp33323DbqFR42VqaKLSgWwNLI1ZcqUwEc6qXnjjTdslt9PP/0UvPnmmzZwHJdgnC6ehg4datvnghlqszJz6tWrFyxcuDCIA12AlClTxp6ku+yNuAXjdPGojFvRseb4448PevXqZS9A9thjj+Cuu+4KfKXPA110uAss13eNGjUK6tevbzM577zzzsBnev/pAuv555/PchHZrVs3ezGi7Dgdi3ykz73+/fvb9+A777xjb1ObmjRpEtSoUcNejJx//vnBZ599FsRB+LxF597KrvI9GKcsfn1OqC1h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hEojra5wqrJtNEp39913m8WLF5unn37aZutErRh8preR9vndf26FNNGot7bdZTpoH9U+27NnT3PFFVeYBg0amFGjRiWep/t8wD7q/z5KH/rfh/Bb3N+DcfPCCy+YsWPH2gUalPl+8cUXm7feest069bNTJ482WYqajV0ff6rL7Uwk/quZs2aicwxHz7ntQ9qhVet5v7qq6/a7Dit6L5kyRLbfmW5vfPOO3ZBqnfffdccd9xxZtCgQTZbU20jEw6IgKKOBAKZToVi3cibRlpLlSpli8SWLFnS1qmIg7i3kfYFserD559/3u6blStXtiPLcShmzD7qP/oQ4D2I7D366KOJBZj0Oe6Omy+99JLNDlO22B9//JF4/A8//BDsu+++waeffuptJv8nn3xia77169fP1n2bNm1a4j4tHKJsQC3mEOZDth+QCYrpn6IOBgKZzr0NNYqqWiNaSv399983TZs2NXER9zbSvnj0octkqF+/vqldu7Z577337MhyHEaP2Uf9Rx8CvAexvdGjR5tLL73UZsJNmzbNLF261Ga7qb6fst4nTZpk7rnnHpv9NmzYMFsfTY/9448/zIwZMyKfASfKbvv666/NZZddZmrUqJG4XdmaGzZsMC1btrR/hxYtWtjblSV3yimnmBtuuMF07ty5CLccQCp+X1UAMaGLf32QXnPNNfbCX0GquASoMqWNtC8efahizTph1dSVOAXhhH3Uf/QhwHsQWT344IN28YwXX3zRfn5rgQYF2ZYvX24DcQqyde3a1Z5zjhw50tx22212SqcWMvjoo4/s/To/LVGiRGT/tJpWe/rpp9v/65ykf//+iQVBtP0KxGmhkLffftsG6RRo1MIM+szo1KlTEW89gFTIiAMiQicBGr3TCl1afSuO4t5G2uc/1VzRyPmpp54ayxXF2Ef9Rx8CvAfxv/quv/76q6lbt67573//a0477bTEn0XZYQpIjR8/frvP8BUrVtgVRVX/z4dV0JctW2aDaocddpjZY489TJ8+fcyAAQOyrNwr48aNsyvA6raqVauaKlWq2PpwOpeJeqARyEQE4oCITo2Lq7i3kfbFR9RPzvOLfdR/9CHAexD/o+mlynxzx0a566677OIZL7/8si014RZl0pf+76aihv8fVcp00wIMjRs3NkcffbR5/vnnzVlnnZUyGDdr1iwzd+5cU7FiRdOx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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# === ALL RIGS ANALYSIS (after May 15th) ===\n", + "print(\"\\n\" + \"=\"*70)\n", + "print(\"STARTUP TIME BY RIG (after 2026-05-15)\")\n", + "print(\"=\"*70)\n", + "\n", + "rig_stats_good = (\n", + " df_good.groupby('location')['startup_time']\n", + " .agg(median='median', mean='mean', std='std', count='count', p95=lambda x: x.quantile(0.95))\n", + " .sort_values('median', ascending=False)\n", + ")\n", + "print(rig_stats_good.to_string())\n", + "\n", + "fig, ax = plt.subplots(figsize=(max(10, len(rig_stats_good) * 0.6), 5))\n", + "order = rig_stats_good.index.tolist()\n", + "data_by_rig = [df_good[df_good['location'] == loc]['startup_time'].dropna() for loc in order]\n", + "ax.boxplot(data_by_rig, tick_labels=order, vert=True)\n", + "ax.set_xlabel('Rig (location)')\n", + "ax.set_ylabel('Startup time (s)')\n", + "ax.set_title('Startup time by rig (after 2026-05-15)')\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f00dce1d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "======================================================================\n", + "STARTUP TYPE ANALYSIS (after 2026-05-15, all rigs)\n", + "======================================================================\n", + " median mean std count p95\n", + "startup_type \n", + "Rig Tester 31.88365 32.800629 7.827085 252 48.530825\n", + "Training Flow GUI 21.68780 21.994108 8.048829 733 35.075900\n", + "No Schedule 9.46736 10.598741 4.574051 52 15.342970\n", + "Not using New Training GUI 5.94023 8.390946 6.385273 253 21.374220\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABV4AAAHqCAYAAAD8qVX7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAvs5JREFUeJzs3Qm8jPX7//HLvi/ZKVtFdqKyl0ohRKhUSpE2aUGLsqSUNqWFUlnaUIRK0UKJokIqWZOtbEX2Ne7/4/35/u/5zTlnDuccc84s5/V8PMYx99wzc88999z3577u63N9snie5xkAAAAAAAAAIGyyhu+lAAAAAAAAAAAEXgEAAAAAAAAgHZDxCgAAAAAAAABhRuAVAAAAAAAAAMKMwCsAAAAAAAAAhBmBVwAAAAAAAAAIMwKvAAAAAAAAABBmBF4BAAAAAAAAIMwIvAIAAAAAAABAmBF4BWLMunXrLEuWLDZu3DiLFhUqVLA2bdpEejEQ5S677DLr0aNHmp67detW69SpkxUtWtRt/8OHDw/78iH6Pfjgg1a/fv1ILwYAAAmoXa72ycKFC1kzSNYPP/xgOXPmtPXr16dpLb399ttWpUoVy5EjhxUuXJg1nQlt377d8uXLZ59++mmkFwWpQOAVUefXX391AZby5ctb7ty57dRTT7VLLrnEXnrppQTzPfHEEzZt2rR0WYbvvvvOHnnkEdu5c6dFyvjx4wkuRdn3lp7bXGrt37/ffdavv/7aYsG3335rn3/+uT3wwANpev69995rn332mfXr1881Olu2bOkaHFoHGWnKlCl29dVX2+mnn2558+a1s846y/r06ZPsNvfRRx9Z3bp13b6sXLlyNmjQIPvvv/8SzDNr1izr1q2bVa5c2b2mXvvmm2+2zZs3h3zNw4cPu21RDW+9bsmSJa1169b2559/pugzaFlvueUWK168uGu4XXjhhbZ48eKQF1R0Epn4dtttt6XofVauXOm+t0aNGrnl1HN14SiUlL7XPffcYz///LNbrwAQ6SCbbvPmzUvyuOd5VrZsWfd4Zrsw/fLLL1vVqlUtV65crg3fu3dv27dvX8gkglC3iRMnJphX7S4d7woVKmRt27a1TZs2JXnPyy+/3B3XUuPo0aM2duxYa9asmRUpUsQtr45FN910U4LgaSwGVOP9HClYJNqCJ+Phhx+2a665xp3nptaKFSvsxhtvtDPOOMNef/11e+211yJyPrBx40YbPHiwnXfeeXbKKadYsWLF3O/oyy+/THO7U8HEZ555xs4//3w3n4LKDRo0sPfeey/Z5dBr6Lev36/azzVq1LAXX3wxxZ8jJW304H194tuWLVtS9D6vvPKKXXnlle499Dx9h6Gk9L2UhKLzhAEDBqT4syLyskd6AYDEB3PtjLVjUmZcqVKl3M59wYIF9sILL1ivXr0SNCoUoG3fvn26LIcOKNoxRupqogKvS5cudYGGYDpQHzhwwF3pRMZ+b+m5zaWWGlr6rKLGTrRTY+riiy+2M888M03Pnz17trVr18769u2b4ORuxIgRGdrgVsOxTJky1qVLF7ef0oUiLYca/moA5smTJzDvjBkz3Lai70cXjjTvkCFDbNu2ba4R5lMweseOHa5RVqlSJfvjjz/ca06fPt2WLFni9oO+I0eOuCCrtnXtI2vVqmX//vuvff/997Zr1y477bTTjrv8x44dc89X8PK+++5zjeWRI0e6ZVy0aJF7/2B16tRxgeVgChCnxPz5810DuFq1au4kXJ/leFLyXloX2g6effZZ19gGgEjSCbvaa02aNEkwfc6cOe5imIJ5mYmOZ08//bRrK9199922bNkyd/z77bff3MXTxBSAUm+YYA0bNgz8X8dDXezUTdPV20WB0eDX0v+/+eYbW716dYqXU+3oDh062MyZM12g56GHHnLBGwWE33//fXvzzTdtw4YNJzymRqt4P0cKpvZXRrcF00rtIAUntQ7TQsFVteN0Tuy3p//5558MPx/48MMP7amnnnLbV9euXV2w8q233nKJUmPGjHG/0dS2O9VmVFBa+4P+/ftb9uzZ7YMPPrDOnTu7/Yj/GX1K5tCFmLPPPtsFIPPnz29r1qxJcRJCStvovkcffdQqVqyYYFpKt3+tqz179rhAdXJJFal9LyUmqI2t86OLLrooRcuBCPOAKHLZZZd5xYsX9/79998kj23dujXB/Xz58nldu3YN6/vv3bvX/X3mmWc8/TzWrl3rRUrr1q298uXLe7FAy6nljbT0+N6OHTvm7d+/P922ubT6+++/3WcdNGiQF+30282ePbv3xhtvpPk1smTJ4vXs2TPBNN0P92Es+PsO5auvvkoy7c0333TL8frrryeYXq1aNa927drekSNHAtMefvhh91mWL18emDZnzhzv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qlSpMH0CAAAARKOIZrw+9dRTVrZsWRs7dqydd955LrCqjIAzzjgjkO2q+lr9+/d3XcBq1arlMg82bdpk06ZNi+SiAwAAIE6ceeaZrm25ceNGV9dV7VHZtm2bFSxY8KRee9euXe5vkSJFEkx/9913rVixYlajRg3r169fghqziR06dMh2796d4AYAAIDoF9HA60cffWTnnHOOXXnllS4T4Oyzz7bXX3898PjatWtty5YtrryAr1ChQq7u1vz580O+Jg1TAAAApIbKWvXt29cqVKjg2pkNGzYMZL+qfZpWx44ds3vuucf18FKA1XfttdfaO++8Y1999ZULur799tuu9Nbx6saqDezflLgAAACA6BfRUgN//PGHG7Cgd+/e9tBDD9mPP/5od911l+XMmdO6du3qgq6iOlvBdN9/LFTDdPDgwRmy/AAAAIh9nTp1siZNmrhaq7Vr1w5Mv/jii+2KK65I8+uq1uvSpUtt3rx5Cabfcsstgf9rfAONZaD3WrNmTaDnVzAFZ9Ve9injleArAABA9Ito4FVZAMp4feKJJ9x9ZRSocfrqq6+6wGta0DAFAABAaqneauKaqyqFlVZ33nmnTZ8+3b755hs77bTTjjuvsmzl999/Dxl4zZUrl7sBAAAgtkS01ICu7lerVi3BtKpVq9qGDRvc//3G79atWxPMo/vJDUagRqlqcQXfAAAAgGC33Xab/fnnnylaKe+9956ryZoSGqNAQdepU6fa7Nmz3RgGJ7JkyZJA2xgAAADxI6IZr6p3tXLlygTTVq1aZeXLl3f/V0NVAdZZs2ZZnTp1Al2rvv/+e7v99tsjsswAAACIfcWLF7fq1au79mjbtm1dL6wyZcpY7ty57d9//7Vly5a5EgETJ05001977bUUlxcYP368ffjhh1agQIFAeSzVZs2TJ48rJ6DHL7vsMitatKj98ssvdu+999r555/vBpIFAABA/Iho4FWNzEaNGrlSA1dddZX98MMPrlHrN2yzZMniBiQYMmSIVapUyQViBwwY4Bq/7du3j+SiAwAAIIY99thjLjP1jTfesJEjR7pAazAFTTXAq9qlLVu2TPHravwCadasWYLpY8eOtRtvvNGNZfDll1/a8OHDbd++fa5Wa8eOHa1///5h+mQAAACIFlk89YeKINW+Ul3W1atXu8CqBg7o0aNH4HEt3qBBg1yjd+fOnW7gAzWOK1eunKLXV4asMgx27dpF2QEAAIAMFittMWW5qtzVgQMHrFixYq7WqpIAolEk1mmFBz/JkPdBxln3ZGtWNwAA6dwWi3jgNb3FSmMfAAAgHtEWi491SuA1/hB4BQAg/dtiER1cCwAAAAAAAADiEYFXAAAAAAAAAAgzAq8AAAAAAAAAEGbZUzPzsWPHbM6cOTZ37lxbv3697d+/34oXL25nn322G/VVo7ICAAAAAAAAQGaXooxXje46ZMgQF1i97LLLbMaMGbZz507Lli2b/f777zZo0CCrWLGie2zBggXpv9QAAABAGP3333/25Zdf2qhRo2zPnj1u2qZNm2zv3r2sZwAAAKRfxmvlypWtYcOG9vrrr9sll1xiOXLkSDKPMmDHjx9vnTt3tocffth69OiRtiVCxBw9etRlM2/evNlKly5tTZs2dcF1AACAeKZ2bMuWLW3Dhg126NAh194tUKCAPfXUU+7+q6++GulFBAAAQLwGXj///HOrWrXqcecpX7689evXz/r27esarYgtU6ZMsT59+ti6desC0ypUqGDDhg2zDh06RHTZAAAA0tPdd99t55xzjv38889WtGjRwPQrrriCZAIAAACkb6mBEwVdgykb9owzzkj7EiEiQddOnTpZzZo1bf78+a57nf7qvqbrcQAAgHilHj/9+/e3nDlzJpiui9B//fVXxJYLAAAAmSDwGmzmzJk2b968wP0RI0ZYnTp17Nprr7V///033MuHDCgvoEzXNm3a2LRp06xBgwaWP39+91f3NV1ZzJoPAAAgHmkA2VBtnT///NOVHAAAAAAyJPB633332e7du93/f/31Vxe006Baa9eutd69e6dpIRDZDA+VF3jooYcsa9aEm4Puq3yEvlvNBwAAEI8uvfRSGz58eOB+lixZ3KBaGkBW7VwAAAAg3Wq8BlMQrlq1au7/H3zwgcuIfOKJJ2zx4sU0TGOQBtKSGjVqhHzcn+7PBwAAEG9U075FixaujXvw4EHXk2v16tVWrFgxmzBhQqQXDwAAAJkl8KraV/v373f///LLL+2GG25w/y9SpEggExaxo3Tp0u7v0qVLXXmBxDQ9eD4AAIB4c9ppp7mBtSZOnGi//PKLy3bt3r27XXfddZYnT55ILx4AAAAyS+C1SZMmrqRA48aN7YcffrD33nvPTV+1apVrtCK2NG3a1A0c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AAAAyAyB11DUQO3du7c1a9bM7r///nC8ZKa0evVqVzcukpYvX57gb6QVKFDAZZsAQEow6jzCrXTp0u7v0qVLXXmBxDQ9eD7Epn379lmJEiXc/0855RRXeqBy5cquju/ixYsjvXgAAADIzIFXWbNmjf3333/herlMGXRVAz9adOnSxaLFqlWrCL4COCFGnUd6aNq0qVWoUMGeeOKJBDVe/R4/yoasWLGimw+x66yzzrKVK1e677p27do2atQo9/9XX32VoDoAAAAyLvCqzNZgnue57nWffPKJde3aNe1Lksn5ma7vvPOOVa1aNWLLceDAAVfLTicbqnEWScq6VQA40lnAAGJn1HkNgDRhwgTX/VuZiAqWafrkyZOtQ4cOkV5MxKBs2bLZsGHD3HakgbRU09XfvhR0nT59utu+NB9i19133x0oFzFo0CBr2bKlvfvuu5YzZ04bN25cpBcPAAAAmSXw+tNPPyW4r8yP4sWLu5OSbt26hXPZMiUFXevWrRvRZWjcuHFE3x8AUoNR55HeFLRXcLVPnz7WqFGjwHRluhLUjw/BPX3q1atn69evtxUrVli5cuWsWLFiqX69b775xp555hlbtGiRC+hqjAQF7n033nijG7wrWIsWLdygXgAAAMjEgdevvvoqfZYEAICTGHVema7JjTqvYJnmUy1yIK3B13bt2rntSIE01XRVeQEyXePDo48+an379rW8efO6+/qrC+HqCaTHBg4cmOqasSpZoKSE5LLtlVU7duzYwP1cuXKd5KcAAABAtEl4hpoCF110ke3cuTPJ9N27d7vHAADISIw6j4yiIKuC99dcc437S9A1fgwePNj27t2bZPr+/fvdY6nVqlUrGzJkiF1xxRXJzqNAa6lSpQI3DeoFAACATB54/frrr+3w4cNJph88eNBlgQAAEKlR50Nh1HkAJ6IxC7JkyZJk+s8//2xFihRJlxWoNnWJEiXcwF633367bd++Pdl5Dx065JIcgm8AAACIo1IDv/zyS+D/y5Ytsy1btiSor6eaVKeeemr4lxAAgONg1HlkFLV3KDUQX5RlqoCrbpUrV04QfNX3rSzY2267LezvqzIDKkGgOsFr1qyxhx56yGXJzp8/P2QmtQZyS0vmLQAAAGIk8FqnTp1AwzRUSYE8efLYSy+9FO7lAwDguBh1HhlhypQpbnAt1RP2VahQwQ0umlwNT0S/4cOHu2xX1WJVYLNQoUKBx3LmzOm+44YNG4b9fTt37hz4f82aNa1WrVp2xhlnuCzYiy++OMn8qlXdu3fvwH1lvJYtWzbsywUAAIAIBV7Xrl3rGqann366/fDDD1a8ePEEDVN1laLWGQAgEhh1HukddO3UqZO1adPGDeJWo0YNV8LiiSeecNMnT55M8DVGde3a1f1V5mnjxo0te/ZUjzsbFmpfFytWzH7//feQgVfVg2XwLQAAgNiT4tZl+fLl7ciRI66BWrRoUXcfAIBowajzSA/qbq5MVwVdp02bZlmz/q88foMGDdz99u3bW9++fa1du3ZcgI5hBQoUsOXLl7vsU/nwww9t7NixVq1aNXvkkUdckkF6+vPPP12NV79mNQAAADLh4Fo5cuSwqVOnpt/SAABwEhh1HuGmmq4qL6AanH7Q1af76gKuXkEMMBrbbr31Vlu1apX7/x9//GFXX3215c2b1yZNmmT3339/ql9PtWGXLFnibqJtRP/fsGGDe+y+++6zBQsWuG1r1qxZLnB/5plnWosWLcL+2QAAABAjgVdRw1AZHgAAAPFu8+bN7q/KC4TiT/fnQ2xS0FXjGYiCrRdccIGNHz/exo0bZx988EGqX2/hwoV29tlnu5uoPqv+P3DgQHeBSIPWXn755W5Ar+7du1u9evVc8J5yAgAAAPEl1YWsKlWqZI8++qh9++23rpGYL1++BI/fdddd4Vw+AACAiPG7fqumq8oLJKbpwfMhNmkcg2PHjrn/f/nll660hGgAq3/++SfVr9esWTP3msn57LPPTmJpAQAAELeB19GjR1vhwoVt0aJF7hYsS5YsBF4BAEDcaNq0qRvZXgNpBdd4FQXqhg4d6gZm0nyIXeecc44NGTLEmjdvbnPmzLFXXnklUCKgZMmSkV48AAAAZJbAqxqgAAAAmYG6hQ8bNsw6derkBtJSTVeVF1Cmq4Ku06dPt8mTJzOwVowbPny4XXfddS64/vDDD7t6q6LvtlGjRpFePAAAAGSWwCsAAEBm0qFDBxeA69OnT4IgnDJdNV2PI7bVqlXLfv311yTTn3nmGYLqAAAAyNjA659//mkfffSRG5n18OHDCR577rnn0r40mVyp/Fksz85VZptSPeZZXNK60DoBACDSFFzVAKMaAEkDaammq8oLKCMW8St37tyRXgQAAABkpsDrrFmz3Cisp59+uq1YscJ1t1u3bp0bQKBu3brps5SZxK31clrVb241+ybSSxIdqv7/dQIAQDRQkFWDJgEAAABAugReVdusb9++NnjwYCtQoIB98MEHVqJECVcXq2XLlql9OQQZteiwXT1wnFWtUoX1YmbLV6ywUcOutctZGwAAAAAAAIj3wOvy5cttwoQJ/3ty9ux24MABy58/vz366KOuC97tt9+e4tfSiLG6KWNWqlevbgMHDrRWrVq5+wcPHnT11CZOnGiHDh2yFi1a2MiRI+N2dNktez07ULiyWZk6kV6UqHBgyzG3TgAAiAZHjx6l1AAAAACAFEt1MdF8+fIF6rqqvtmaNWsCj/3zzz+peq3TTjvNnnzySVu0aJEtXLjQLrroIhe8/e2339zj9957r3388cc2adIkmzNnjm3atIkBLAAAQIabMmWKG+n+wgsvtGuvvdb91X1NBwAAAICwZLw2aNDA5s2bZ1WrVrXLLrvMZaRqFFideOix1Gjbtm2C+48//rjLgF2wYIELyo4ePdrGjx/vArIyduxY9756PLXvBQAAkBZq43Tq1MnatGnjev2ovv3SpUvtiSeecNMnT57MheE4yGYeN26cG8tg27ZtduzYsQSPz549O2LLBgAAgEwUeH3uueds79697v+q86r/v/fee1apUiX32Mk0eJXZum/fPmvYsKHLgj1y5Ig1b948ME+VKlWsXLlyNn/+fAKvAAAg3al9oovMCrpOmzbNsmb9X2chXQDW/fbt27va9+qxo8G3EJvuvvtuF3ht3bq1C6xnyZIl0osEAACAzBh4Pf300xOUHXj11VdPagGULatAq+q5qlbs1KlTrVq1arZkyRLLmTOnFS5cOMH8qu+6ZcuWZF9PtWB18+3evfuklg8AAGRec+fOdbXolenqB119uq9BRxs1auTma9asWcSWEydH4wm8//77rjcXAAAAELEarwq8bt++Pcn0nTt3JgjKptRZZ53lgqzff/+9G5ira9eutmzZMkuroUOHWqFChQK3smXLpvm1AABA5rZ582b3V1mQofjT/fkQm3SxXzV7AQAAgIgGXpX1oW53iSnL9K+//kpzQ7devXouaFq7dm174YUXrFSpUm4QLwV0g23dutU9lhxlnuzatStw27hxY6qXCQAAwB9IVFTTNRR/uj8fYpPKSaj96XlepBcFAAAAmbHUwEcffRT4/2effeaySX0KxGowggoVKpz0AmkwAwVxFYjNkSOHe92OHTu6x1auXGkbNmxwpQmSkytXLncDAAA4WU2bNnXtGw2kFVzj1W+z6KJxxYoV3XyIXRo49quvvrIZM2ZY9erVXRs08QBrAAAAQLoFXjV4hGiwAZUDCKbGqU5Khg0blqo3V3Zqq1at3IBZe/bssfHjx9vXX38dCOx2797devfubUWKFLGCBQtar169XNBVA1oAAACkNw2YpfZNp06dXFtIbReVF1Cmq4Ku06dPt8mTJzOwVozTmAJXXHFFpBcDAAAAmTXwqqwOUVbHjz/+aMWKFTvpN9+2bZvdcMMNri6aAq21atVyQddLLrnEPf7888+7zBJlvCoLtkWLFjZy5MiTfl8AAICU6tChgwuuqju6BtLyqU2k6XocsW3s2LGRXgQAAABk5sCrb+3atWF789GjRx/38dy5c9uIESPcLd7t37/f/V28eHFEl+PAgQOujq8ymPPkyRPRZVm+fHlE3x8AAJ+Cq+3atbO5c+e6C8aq6aryAsqIBQAAAICTCrzOnz/ftm/fbm3atAlMe+utt2zQoEG2b98+1/3upZdeor5qGq1YscL97dGjR1pfIm4VKFAg0osAAIALsjZr1ow1EaeUvfz++++78QQ0wGuwSF8YBwAAQJwHXh999FF3suEHXn/99VdXg/XGG2+0qlWr2jPPPGNlypSxRx55JD2XN275NXSrVKliefPmjWiWaZcuXeydd95x32s0BF0rVaoU6cWIG6tXr3b1lKMhkzkaMprZvgAA8uKLL9rDDz/s2rUffvih3XTTTbZmzRpXXqtnz56sJAAAAKRv4HXJkiX22GOPBe5PnDjR6tevb6+//rq7X7ZsWZf9SuA1bVQz9+abb7ZooaBr3bp1I70YCHPQtXLlylGzThXgjwarVq0iuA8AmZzGEHjttdfsmmuusXHjxtn9999vp59+ug0cONB27NgR6cUDAABAvAde//33XytZsmTg/pw5c6xVq1aB++eee65t3Lgx/EsIICz8TNdIZzNHSx1hP7s70hnAAGLH0aNHqfEap1RewB84Tccm/9hw/fXXW4MGDezll1+O8BICAOKVasfrllqqN68bgDgJvCroqoG1lNmquleqdTV48ODA42qg5siRI72WE0AcZTM3btw4ou8PAKk1ZcoU69Onj7tw5NMF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qlWruoEEdaAHYpG/f/OP18ruXrlypR04cMBKlixpXbp0cfXa/eyB4ON6mzZtrEWLFoHsgcKFC7t9qdoDH3zwQUQ+DxButIURTWjv4kRo0yKeedHYbvWANJo7d6732WefBe6vX7/e/V23bp1XuXJl75dffnH358+f71WsWNGrXbu2991337lpK1as8EqVKuUNGTLE3T969CjfA9JV8DY2b9487/bbb/ceeugh75VXXnHT9uzZ4z388MNe1apVvaVLl7pp//33X+A533zzjZclSxZv8eLF7v7u3bu9tm3beqVLl+aby0RWrVrl7dy50/1/1qxZXrZs2bwpU6a4+++8845XuHBhr3v37gme8/fff3s33HCDN2nSpIgsMxAu2obr1avntWrVyrvkkku80aNHu+kHDhzwBg8e7J111lnejz/+mGT/OXv2bLf/XL58ubu/b98+r2PHjkl+K0CsoS2MaEN7FylFmxbxblIUtVvJeEWaqJSAul6ry7UyW88//3zr2bOn7d2713W9LVWqlOXJk8dat25tl112md1www02b948a9iwobvCdtZZZ7mSAwMGDLC///6brFekO13J2rJli9smr7jiCnf1SnWGta2K6rgq67VMmTKBq1/qeuBfMVPZDA2YpJIZfpas6r6++OKLfHtxyB8MMJgGy9K+66WXXnL3lfF6/fXXW58+fdz96667zpWg0D5R2a4asGDRokVuP/n777/bmWeeGZHPApwsDRx35ZVXut4sXbt2db8BldpQSSHJnTu327dWrFgx5P5T7QHVzFItbb+Ei0Z2f+ONN/hyELNoCyMa0d5FYrRpkdn8E43t1pMOIyPTXkX97bffvJw5c3q5cuXybrzxRm/z5s1u+j///OPlyJHDy5o1q5v+xx9/BJ6jbMFx48Z5hw8f9rZt2+a99tprEfkcyHxWr17tNW7c2GvdurW3du3akPMcO3bMe/75593Vrw8//NBNO3LkiPu7Zs0ar2zZst7777+focuNjDNt2jSXje9vC8H8+4MGDfLKlCnjsgT8/eApp5wSyN7XVdM77rjDZcI2bNjQPab9oK6sArHqueee8y644AJvwYIFCaZru3755ZcD90eOHOlVqlTJe/PNNxP8bpRhoP3vv//+m+S1gzMMgFhAWxjRjPYuhDYtMrPnorDdSuAVKW5kBjc09X8FTfPnz+/lzp3b279/v5uugKrcfffd3qmnnurSsn0KyN50003eAw884Lp1AxlJ3Qnq1KkTCKz5dCGgePHi3quvvuru6/EuXbq44Kt2ztqm9VdlCC688MJkg7aIbSqNomDp008/7R06dMhN+/77713Q9ODBgwn2faeddpp32223BYLyCrrmzZvX2759e2A+BWS//vprF7AHYtmff/7pLjb06dMnwfRnn33WK1asmOuKpf/Lhg0bvJ49e3qFChXy3njjDW/OnDnefffd5/axauiqQZv4ogYQK2gLIxbQ3gVtWmRmf0Zpu5XAK04oeGNTbUwFpaZOneqCrboKoNqt1113XYJ5leVaokQJr1mzZl7fvn294cOHe+XKlXNXDvz6mUBG0XaqoGuvXr0C01Sns3Pnzm7H2qRJE7e9+lmJCrjVqlXLXTxQPZcaNWp4VapUCdQoRnzxr1wqU7VBgwaB71nbgQ7OEyZMSLB/e++991xWv2r7ibL9a9as6bYnIN4oWyBPnjyBGlii34j2jW+99Zb36KOPegULFgxkBegCxM033+z2uXXr1nXtgB9++CGCnwA4ebSFEQto74I2LTK7BVHabiXwihTRQELXXnut20h79OjhffHFF4GsVRUtVnBCg2iJny22ZMkSr3fv3t5ll13mnX/++QnSuoGMpIsEGsytf//+gawVbb8aHE6Z2LoyVqFCBZep7dNOeOzYsd4jjzzivf3223xhcSq4u8iWLVu8M88802Xla7sQZbZqmn/fP/k+99xz3eBq/kBb6pKig/zWrVsj8jmA9LJs2TJXUii4NJCyvf2M702bNrkLVerREkxtAXV59Wm/S7YrYhltYUQ72ruZG21awIvadiuBVyQRXFLAp27YZ599trdu3bokj+3du9cFV1XPMPjA75cZ0N/gjZZ6bshoO3bscCMZ6kpWqO1b1L1AFxCO1zXc32Ej/qjLyYgRI9x+TNmr06dPd9NVi7pw4cLeY489lmB+Zf4r69WvCaSDtfaFQCxKbr/o92DRhYZGjRoFLrgm3heqZ4tKdej3Eur1OO4j1tAWRiyivQuhTYt4dzQG261ZwzFqGOJjhEP9X9M0Gmaww4cP27fffmuVK1e2cuXK2fLly23u3Lk2fvx4+/HHHy1fvnz26KOP2g8//GB33323DR482GrXrm2ffvppYFS4LFmy2NGjRwMjxgHhlngE+mCnnHKKNWjQwDZv3uxGNJQjR44kmCdnzpxuxPr9+/cneb4/wmH27NnDvtyIHH2vu3btcqNavvjii24/VaFCBVuzZo0buXLjxo1WvHhxGzBggD311FO2ZMkS97wDBw5YgQIFrFatWvbFF1/Yf//957Yf7QuBWOLv24KP+4n3pRrxtVWrVrZ69Wp7/vnnk+wLt23bZn/++ac9/PDD7veS+PWE4z6iFW1hxBrauwiFNi0yAy+W261hD+UiJgRH8VUi4KmnngpM++mnn7y77rrL1WVVjUPRgDOqc6k6raqHefHFF7sssOrVqwdGedcgRRo9TrUxVAMWyGi6wjVjxowkA8GJMlm17ZYsWdJbvHhx4HFt98puPOecc7yHHnqIrNY45m8LwRn46o5Svnx5b9asWYFp48ePd/s3lZrw51UmrMpR3HLLLd55553nSq8EDx4IxBJt18HtgI0bN7rBBYIfD/7NqFuWamOpV8Azzzzj6r2rraBuXPpdNG/enIHkEHNoCyNW0d4FbVpkJsfioN1K4DWTCQ5IqVZVp06d3Aap0ds0crfSrvPly+ddffXVrrCwutz6tVkV0NKGq9Hefv31VzcKXNOmTb177rkn8Jp+uraPem7IiG3Zpx3sRRddlORxfzucOXOm63pwyimneBdeeKGrQaztXLU5hw4dypcVp47XXURF1jXypV+r1aftQ8FWjQwr2t8NGTLEa9GihdevX790X2YgI6gm8SuvvOJGflU9LL90Rqj95/r1610d7NKlS7t2gi5W6WLsiy++yJeFmEJbGLGE9i6C0aZFZrY1htutBF4zicQB0Oeee87LmzevCy5oYCFZuHChV7t2bTcSnE/Zq5UqVfJ+++23JK+pgWi0AX/00UdJHqOeGzLK119/HRj4SFmL2rGqxlXwdh+8/Wvexx9/3AVpu3bt6i42BAfdjlczBrFNdXw7dOjgLhYp4Cq///67u/ik7civTy2ffPKJlzNnTpftr4tUvsOHD0do6YHw0oBwWbNm9a655hpXs1j7TtVy//vvv4+7L1y5cqUbKXb27NkJ5uG4j2hHWxixjPYugtGmRWYzOsbbrQReM5lJkya50d0LFCjg0qxHjRrlpmsjVLmBG2+80d1X+YCqVat6VapUCQwyIxpcS6+hzNfixYt77du3D2zsQEZ2q1GRbAVQFTR7+OGH3XaogKu6gb/00kspOulSlrdPr0eGdnzavn27d+mll3qnnnqqy1q9+eab3X5Q24kGxVIwVheZgmk+ZUJXrlzZW7RoUcSWHThZofZru3bt8ho0aOD2ocEncSofpCyCUM9Lbv9IwBWxhrYwoh3tXSSHNi3i3bE4bbcyuFYmoYGt7r//frvqqqts4MCBrqDwpZdeau+//74bLEsFhbdv327ff/+9tWvXzm6//Xbr2rWrLV682A08s3v3bve4gvWvv/66ffDBB/bSSy/Z1KlTrVixYpH+eMgktJ3++++/gSLZRYsWtbJly9qyZcvsvvvuc4NoqaC2BkU6ePBgkudr8KRguXLlChTl1uslfhyxW3Q92Pz5891f7c9USH3o0KGWI0cOGzVqlO3Zs8dtO3/88Yd1797dZs6caQsXLnTzagDBZ555xurWrRuBTwKE59gfar+2Y8cO1w4oX758YJraB5dffrl99NFH9vPPPycYFFOS2z8ycBZiBW1hxArauxDatMhsjsZxu5XAayY6gN94440uaKWgasGCBa1t27Z26NAhGzNmjJvnmmuusb///tv27t1rf/31lz3wwAOWJ08eF3R94YUX7Ouvv3Yjfo8YMcIFMq6++mr3vOANHAinxKMUfvfdd9amTRt77LHH3P2LL77YBc769Onjts+xY8dayZIl3fapwFqoBksoiUcyROyYN29egm0l1EH2q6++cqNWlihRwgVezzjjDDvvvPNcYFXB+wYNGtiECRPs119/tdtuu82aNWvmLijpIpQO6ECs8Y/LalzqGD548GC3vf/2229u+v79+y1fvnyuDeD/dgoUKOD2qWoHDB8+PPB8IF7QFka0or0LoU2LzOpoJmi3Em3IJBSMqFatmhUqVCiwYSuAVb9+ffv222/djr5GjRouC3bFihW2efNm++eff1ygVkGuiRMnuiCsnHnmmUl+IEA4aYeqoKkfEPUDqNr2dHXr8ccfd1nXun/++efbokWLbPLkye6mHbK2Z23H2u4TN2YRP9566y33/Svj2d9WlIWvi0PBjVdlNutikrKjZ8yY4YKs2lZq1qxpv/zyiwvet2zZ0mbNmuWev3LlSpcNSwY0YoV6ohw4cCBw3z8u//DDDy47YNq0afbII4+47Vy9V9QeqFSpkmvUrl27NvA8XXDInTu3u1jx4YcfumnsQxEvaAsj2tDehY82LTKT1zNjuzUiBQ6QrlJSp9KvHaQBtS655BJX21XP08BDGslbo3w3atTIjfxWq1YtNx8QiYEEbrjhBu+BBx7w5syZE6jJ2rt3b1fT5bXXXvPGjBnj9ejRw9VrmTp1qqvX6dd9RXzTd67arCqyrto/7dq184oWLeqm5ciRwxs7dqyb74MPPvAKFSoUqGHt0/5O0959990IfQLg5GnQANUi3rhxY2Dar7/+6uoaDx8+3A1GIEuWLHEDYrZs2TLwPNVq14ivekwDxw0ePNi75ZZb3KAFfrsAiEW0hRFLaO+CNi0yi5WZtN1K4DXOpGVj06Ba5557rvfOO+8EghFz5851G/1HH32U4LWjeWNG7NEO884773Q7WX+AK3+6Rp7Pmzev161bNzdg1plnnundfvvtgef26tXLu+iii9zOWK+xZcsW12j55Zdf3M78s88+i9jnQvoKLoqu71kjXGqgQG0HCsBqoLVBgwa5YOuyZcvcfLrAdP7553sTJ070/vrrL2/x4sXuAF+/fn0uLCFu+BdVf/75Z69w4cJe/vz5E2zfOrnPli2bu0jlD0ygi6wlSpRwA27qtnbtWnfBS/tWDT4HxBrawog2tHeRHNq0yMyOZqJ2K4HXOJF4dLYXXnjBGzhwYIINOjF/+oYNG7yrrrrKa9u2rbd58+YUvT6QVsHb47///usCq6VLlw5ks/pXvapVqxYInuok6sUXX3Q71zfffNNNW79+vffMM8+47FbdFixYwJcS5xLvh/yD69VXX+22gfvvvz/B41WqVPE6d+4c2KZ69uzpDt7K6j/llFPc1dG9e/dm4CcA0o8uNqg3gH+SrwtaOXPm9NatW5fg4qkap2eddVYgOKULFZMnT/YmTJgQeK327dt7Xbt25etCTKEtjGhCexfHQ5sWmd2gTNZuJfAao5ILhL711lveE0884V188cVe7ty5A4HUE139f/31113X7eAM15Q8D0gpbUvBjVBdzVKGq65wVa1a1bvrrrsCj82YMcMrUqSI9/vvvwembdq0ybv11ltdhmLwdqnnKeg2YsSIBO/HxYL49eGHH7ryAn6W/qpVq9wV0kcffdTd97czbUfaNoKzn3/77TdXtmL16tURWnrg5GjfFurY/Pzzz3vZs2f3li5dGthn6gKWGqziP0fbvi48+L8Xn3q7bN261XXhUrmhL774gq8KUY22MKIR7V2kBm1axDvarf9D4DXG7N+/351IjR8/PsF0da9VerUyB4cOHeqi/up+e/311x83gOpPP3DgQIIgF5BeJ0fff/+9d8YZZ3hNmzZ15QG07SlgULBgQW/58uVuHgXUFIz97rvvEryOuheoLIauhPnbrjJlFbxFfAiVoe9/19u3b3d1XNUVRRn9qt2qfaI8+OCDbv+nYFMwZfKr5qsCSkCsCz6WK4tbNa6Cp6kWlupc+9OUDaCLD363LX+6fi+tWrVKsG9WpsFpp53m1atXjx4EiGq0hRGtaO8iGG1aZHa0W/8PgdcYNG3atCSB1G+++cbVwFRQy2+Ujhw50p1wzZs3L1XZq2S5Ij2orIACAhr06N577w0EzPwMrGbNmnktWrQIbL8Koj300EPezp07A/OpjqcGT9qxY0eSbTVxhgFiS/B3p+4mkyZN8ubPn58kM19lAkJlq2o7UZZenz59EkxXMD9PnjwE5xFzlIGqiw2Jfx/a/+mCQoECBbyyZcu6rlV//vmne2z27NnuuP/JJ5+4+7t373YBVtU3DqbfWGK6EDZr1qx0/lRAeNAWRrSivQvatMiMaLceH4HXKHaiAKi6y/oUpFBwwR+cSHTCpixYZQgCkbRixQpX+qJBgwYh6wirgfLee++5wZCmTJkSyL469dRTvSFDhrhRDzUg0uWXX+7KDYQKGiA+6HtXMOnCCy90Wa0KqGpfqHqu+v47duyYbHbJ2LFjXckBZQEG70ODg/xALNAAl8rUTtzdX/dVTkgjuKpshgaLK1asmNevX7/ABalOnTp5derUCdQv/vbbb10wNrgWli+4zQBEI9rCiCW0dxGMNi0yC9qtJ0bgNQolztxbs2aNt2/fvgSNT5Ua0ImURnD368PUrFkzSY3WV1991c2noJZQ9xKRoGBrkyZNXJZWMAUN/PqbmkeDHanEgG/AgAFuQC2V11BwQaMYauRCxJ9t27a5MgIqQ/Huu++60ie6chpMwaS+ffuG3Jf5+0dtKxdccAHZz4hp2p51Ah9s+vTp7nhevnx578svvwxMV3kh/TY00ID88ccfLhtWAxKKLlroogTlNhBLaAsjFtHehdCmRWZDu/XECLxGmeDg6k8//eS6X9euXdvVbVPmn09Bh/POO89ltvgnWhpQ67bbbvP27NkTmO/JJ590XbvVBTfUewAZRV1YVXdY5TDULVYZjRq5cMyYMYF51E1WWa5PPfVUIGCgeq66oPDVV1+xDccxfcdnn322u9CUHGXAlixZ0nWfDqYM15kzZ7r/qzyBf6EJiHXKalXQ1KeBsjTwoMoL+VTnunHjxu7ClX9hShcoFKRNHGzl+I9YQFsYsYz2LmjTIrOi3Zo8Aq9RSIMNaVAsBUzvuOMO7+uvv/auuOIKV/Py7bffTnBg14mVsmDk5ZdfdoELdUFUsErBCA2ypYGKlCGjmq/CiRcitV3feOONbrtWSQFtp35dQn+bVECtf//+Ceq4JkbWdvxRhv8DDzzgLjQFf++LFi1ytwULFrhtRANnaV927bXXujqvep4CTZ07d3b1gLWNAbEqVI1q1W9VNqtfckADaulCqi7E+qUERBcbatSo4Y0YMcLd12/h/fffz8ClB8KLtjBiFe3dzI02LTIL2q2pQ+A1yqjemoKt2bJlCwRU/ZOtfPnyeXfeeWeCjfzKK690GbF6ng70quGmbJjKlSt72bNnd6+lYIUCsg8//DBBV6SblAT0f/75Z1c6oGfPnsnO8+OPP7qB4t56660wLyGi2bPPPuv2W8pqVfBI5QKUFV2wYEGvcOHCXrdu3QL1KlWOoESJEm7QIHWpbt26tevWBcSi411MWrp0qSuxcvfdd7sBW+Suu+5yx/TgOu+i38sll1zi6mEDsYy2MKIZ7V2cCG1axDParWlD4DUKaTRinUApA8ynTFdltz7++OPuvh98VbdcDar10ksvBeZdv369626r0bxFWYUKVEydOjXDPwsyRwM0uBG6YcOG455MPfbYYy5Y5mc2Jm7Aah5/JG/EP//714Bp9913n7uQdNppp7mu0m+++abbl33wwQcJRmpfuXKlq2ep2pbBXa6BWBO8/1OG6s033+yy/pXR7Q98NXjwYK9+/fqu9rFowLlKlSp599xzj/f3338Hnr9q1So3ECEQD2gLI9rQ3kVKthGhTYt4Rbs17Qi8Rqn777/fO//8811tN2V1aUR4jfStEd0VaNi1a1dgXmWIqeu2ygsE13xTAPbTTz913Q9btmxJFgzS9YqXaguPGzfOO/fccwOjyofqgqALAVWqVPG6d+9+3MyBxA1cxDZ/Wwj1nQZvJ4kH1PK3LWVKa78IxKLg7T7xoEEql3HppZe6LG71BqhevbrLXPUDrfpNXHTRRd51110XqIGsrHCVH/LnCRZqvwvEItrCiBa0dxGMNi3iHe3W8MtqiErXXHON5ciRw7p3727Fixe3tWvX2rx58+zUU0+1vn372hVXXGGbNm1y8z744IN2yimn2O+//x54/p49e+yRRx6x22+/3dq0aWMzZsywMmXKRPATIR5ly5bN/e3Zs6fddNNNNnbsWFu1apVNnDjRTc+aNekuRtvwwIEDbcyYMfbjjz9alixZQr62pif3GGLH0aNHE2wLob7T4O1E+7LEFixYYAUKFLCrrroqXZcVCLdjx44Ftnv/t6D/a5s/cOCAHT582O0vtX2vXr3aXn75Zfv000/dMX/cuHHuuF60aFG7/vrrbfny5e4xueOOO6xatWruscRC7XeBWERbGNGC9i6ENi3iHe3W9JNF0dd0fH2chBdeeMGdeCnQet111wWmb9y40Tp06GDbtm1zwS4FWHXyljNnTve4vlKd2P36669Wrlw5K1SoEN8D0sW+ffvcNrhixQp79tln7Z9//rHhw4e7wL+230svvdTtwBMHAnbu3OkuCLRo0cIGDBjAtxMH/P2O/zexSZMm2axZs6xChQruu69Ro8ZxX2/z5s22f/9+++CDD9w2deWVV9qTTz5pefLkScdPAYRH4t/B448/7oKoo0ePdvvDoUOHut/DiBEj7MiRI+5krnbt2m4/+swzz1iJEiXciX7r1q3dc+Xqq6+2v/76y4YNG2b169cPuW8F4g1tYUQD2ruZC21aZDa0WzNAOmTRIkw0QIYGz9LAMZs3b3bTDh06FOiura6GGojIR/dCpGd3g1CFtLdu3epKYKgGcfAAWhdffLF3zTXXuJIX/vNDdR9H/PG/a397UT3KNm3aeEWLFnWlUlS/tVatWt7o0aMTzBfsnXfe8S677DJXtuKss86iPjViRuIyAtOmTfPKlCnj9pMLFy50ZVi+++47r0mTJq52serA+b+Bfv36ud/GxIkT3f0WLVp4NWvWdAPKyYwZM7zbb789wUByHPcR72gLIyPR3kXi7UFo0yJe0W7NOAReo5zqtzVs2NB76qmnkp2HOphIT8Hbl4KlBw4cCNxXQOD000/3Zs+eneA5Q4YM8cqXLx8IyB5vGyVwED802FWHDh0SfK8fffSRG4HdH+xPg69pEC0NsLZ79+4E8/oUrNW28+GHH2b4ZwDSKng7XrFihbtoqkHhRo4c6abpQpTuq5arfivBz1EwVRcZXn/99cBrdOrUyTvllFO89u3b86UgU6MtjIxAexfBaNMi3tFuzVj0UYtyHTt2tFq1atnbb79tS5YsSfJ4ct16gZOhLqx+FRJ/+3rggQesZs2arr6wurpKo0aNbNeuXTZ37txATRjp3LmzbdmyxW236hqr1wh+PBhdZWNPqAo1+n6LFStmU6dOtcWLFwe+14ULF9ru3butSpUq7n7ZsmXtzjvvdGVQVJ9aEu/DVB6lS5cudvnll2fI5wHCQdv8f//9ZzfffLOrv6quqZqm/abkypXLlc34+++/rXz58oHniGq65s2b1w4ePOju//LLL4E676pzKf4+NLl9KRCvaAsjvdDeBW1aZFa0WzMWgdcopxM1NTh1q1ixYpLHCboiXJYuXeoGYFP9Ve2I/W1LtYK//PJLN7jbE0884QZzUR1CDY4l9913nz333HP2008/BV7r559/dvUKVXv4vffec9MIsMYPf9vYsWNHoMGq77d9+/aufmuPHj0C82bPnt0FW9esWROYpvuqU63awApOsR9DPFCd1gYNGthvv/3mLpR+9dVX7gKCgqe+bt262ZlnnmmfffZZggBqnTp17KyzznJ1jC+66CJXw7Vy5co2ZMiQwKBy/j6UfSkyG9rCCCfauwhGmxaZFe3WDJbBGbYAopTqCI8fPz5Bd6upU6e6rrH169cPlBPYsWOH17t3b9cF1levXj3vnHPO8fr27eu6iJ933nnea6+95rVq1cq75ZZbQtbxROxSKQCVFKhSpYr38ssvB6Zru/nqq6+8nDlzeuPGjQvUuKxatWqCLtRy7bXXepdeemmGLzuQHvx9nEppBP8efvnlF69QoULesGHDAtPfe+89L3v27N6CBQsSdPVat26de6xXr16uDmzw6wAAwoP2LoLRpkVmRLs14xF4jSHUwkRGUB1XBQBk6dKlLsBWsmTJBNvfb7/95gZJUoBA1qxZ4w0cONDV8qxYsaI3aNAgN71jx45uEBnEF20X1atXdwFW3bp06eJ9+eWX7rEjR464AYA0mJavc+fOXqNGjdyAWvv373f1L1W7+umnn47gpwDSj7+/VMN28ODBrqaxTu58F154obvw4A+YmdxrcNwHQv+2gJNFexdCmxag3ZoRCLwCmVjiExiNsK1AqwbM8h+fPHmylyNHDjcCd/B8L730kgu6+UFa0WBJCrzJH3/84dWtW9d74403MuzzIOM8//zzXps2bbwbb7zRu+eee7z8+fN7/fv3d8ElBVY1uJqmi+4rS1rZ0wq45s2b1w0c5A+uBcSa1GShbty40atcubJ38803B6YtWrTIy5YtWyAzPDGCSwAQPrR3cTy0aRHvaLdGXhb9k9HlDQBE1v+/6BKyVuC3335rLVu2tFdeecXVJ9QgWRoEacGCBa4mp2/Tpk3WokULy58/v82fP99N08Awer5qwo4bN87OPvts97dEiRIZ+vmQ/v7880/r27ev7d2718aPH29TpkxxtX+1Pdxyyy2uvm/Pnj3dfKVLl3bP+eGHH9wgQmeccYadc845fE2IedqmzzvvPFev9Xi1V9999127/vrrXf1rf7At7V81IN3zzz9PnWMASAe0d5EStGmRWdBujaBIR34BZOzVruCr/suXL/e6d+/uDRkyxGVgiTJWe/bs6ZUuXTowr+p2li1b1nvyyScDr6ObupdPnz498Hp67vvvv+81bdrU/UV8e/fdd71zzz3Xe+6559z9bdu2ebfddptXokQJr3Xr1oEyBEA88LP5/f3i/PnzXRa3Sq2cKJtAmeAtW7Z0v5fgngMAgPCjvYvUok2LeEO7Nbokn54BIOav8v/333/29NNP2y+//BIYudPPyvr444/t4osvtvXr19sHH3zgRtL+8ccf3Sj09957r8vg6t+/f2DEbY3Mrdf6559/3Ovopue3bt068J56rkar/+abb+zKK6+M0CdHRtF3XbduXfvwww9t0aJFVrx4cRs5cqTLgNX2d+TIEZfpp+xoINZp/7Znzx47dOiQu1+wYEFr3ry5zZo1K8HIyKEUKlTI+vTpY+vWrXM3yZEjR2BUWQBA2tDeRTjQpkW8od0aXQi8AnFKQYBVq1a5rv9+V29RULRp06b2+eefuy6uX3zxhS1evNgqV65sjz76qOtuo67gKi8wbNgwd79w4cIuwKpusR999NFx3zdbtmwZ8OkQDXLnzm1XX321+79KSogfkJ86daq999579scff1iZMmUivKRA6iUOiKp7lvaFKhGgi1qnn3665cqVywVSdf9ELrzwQtu8ebNVqFAhwXT2mQCQdrR3EQ60aRHraLdGN2q8AnGcARCcgbVr1y6XdaU6rMrU0sn+vHnzrF69eu7x77//3i655BJ77rnn7KabbrLdu3e7Gq5Fixa1GTNmuOxFTdN9INjAgQPtq6++svvuu88u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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# === STARTUP TYPE ANALYSIS (after May 15th, all rigs) ===\n", + "print(\"\\n\" + \"=\"*70)\n", + "print(\"STARTUP TYPE ANALYSIS (after 2026-05-15, all rigs)\")\n", + "print(\"=\"*70)\n", + "\n", + "type_stats_good = (\n", + " df_good.groupby('startup_type')['startup_time']\n", + " .agg(median='median', mean='mean', std='std', count='count', p95=lambda x: x.quantile(0.95))\n", + " .sort_values('median', ascending=False)\n", + ")\n", + "print(type_stats_good.to_string())\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(14, 5))\n", + "\n", + "order_t = type_stats_good.index.tolist()\n", + "axes[0].boxplot(\n", + " [df_good[df_good['startup_type'] == t]['startup_time'].dropna() for t in order_t],\n", + " tick_labels=order_t,\n", + ")\n", + "axes[0].set_xlabel('startup_type')\n", + "axes[0].set_ylabel('Startup time (s)')\n", + "axes[0].set_title('Startup time by startup_type (after 2026-05-15)')\n", + "axes[0].tick_params(axis='x', rotation=30)\n", + "\n", + "means_t = type_stats_good['mean']\n", + "sems_t = df_good.groupby('startup_type')['startup_time'].sem()\n", + "axes[1].bar(order_t, means_t[order_t], yerr=1.96 * sems_t[order_t], capsize=5)\n", + "axes[1].set_xlabel('startup_type')\n", + "axes[1].set_ylabel('Mean startup time (s)')\n", + "axes[1].set_title('Mean ± 95% CI by startup_type (after 2026-05-15)')\n", + "axes[1].tick_params(axis='x', rotation=30)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5e0bcf2a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "======================================================================\n", + "NUM_SUBJ_SCHEDULED ANALYSIS (after 2026-05-15, all rigs)\n", + "======================================================================\n", + "Pearson r = 0.446\n", + "\n", + "Startup time by num_subj_scheduled:\n", + " num_subj_scheduled median mean count\n", + " 0 7.25109 8.767357 305\n", + " 1 26.57510 26.253084 87\n", + " 2 18.60670 24.473499 243\n", + " 3 26.83010 25.851437 171\n", + " 4 27.68410 25.598242 291\n", + " 5 23.66360 22.210761 193\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAHpCAYAAAD5+R5uAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Qd8FGX6B/Bna7KbnpBGC72DKKggVVGwg6Ke7cSTs529i2dvWM5y9vL38GxnVywnqKjYACkqgkoTQk0hvW2f/+f36uQ2yybZTdvd5Pe9W5fM7M7MzszOvvPMM89r0DRNEyIiIiIiIiIiIiKKCsZILwARERERERERERER/Q+DtkRERERERERERERRhEFbIiIiIiIiIiIioijCoC0RERERERERERFRFGHQloiIiIiIiIiIiCiKMGhLREREREREREREFEUYtCUiIiIiIiIiIiKKIgzaEhEREREREREREUURBm2JiIiIiIiIiIiIogiDtkREREREREQx4vnnnxeDwSDbtm2L9KJQFO4Xq1atava1U6dOVY9IwDJefPHF7T6fL774Qs0Lz+HCdwvvxTptK/zeUkswaEtERERERNQJ6EEBPL7++ut9xmuaJr169VLjjz32WIllu3fvlltvvVV++OGHdpn+K6+8Ig8//LBE0t133y3vvvtuRJeBiIgih0FbIiIiIiKiTiQ+Pl4FHQMtXbpUdu7cKXFxcRLrELS97bbbumTQ9s9//rPU1dVJXl5eRJaLYt/HH3+sHkQU3Ri0JSIiIiIi6kSOPvpoeeONN8Tj8ewTiBwzZozk5OREbNmiXU1NjUQ7k8mkAvPImO5KYmHbxAqr1aoeRBTdGLQlIiIiIiLqRE477TQpKSmRTz75pH6Yy+WSN998U04//fSg7/H5fCqzdPjw4SogmJ2dLeeff76UlZU1eN3ChQvlmGOOke7du6uM3f79+8sdd9whXq+3wetQL3PEiBHy888/y6GHHip2u1169Ogh9913X0ifAcs+ceJESU1NlcTERBk8eLDccMMNahxqVB544IHq33/5y1/qS0Lo9Se/+uorOfnkk6V3795qGVES4oorrlDZqf7OPvtsNe0tW7aoQHdSUpKcccYZatk//PBDyc/Pr592nz59mqxLGax+pr4OVq9eLYcccojYbDbp27evPPXUU81+fkwLQcp///vf9cuA5W1s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YUWifD6ffP7553L77bfL3Llz5bTTTpNLL71UFixYIDt27Gi/pSTqYCiFkGyzsCQCERERKUuXLlUB2eXLl8snn3wibrdbpk+fLjU1NfVr6IorrpD3339f3njjDfX63bt3y4knntjkGrzvvvvkkUcekaeeekpWrFghCQkJMmPGDBUAJiIiIqKuK6SgLXrbvfPOO6VXr15y9NFHy0cffSTl5eViMplk8+bNcsstt0jfvn3VODRkiYiIiIiigcfjkU8//VSefvppqaqqUsMQTK2urg5rOosWLZKzzz5bhg8fLvvtt588//zzsn37dlm9erUaX1FRIc8995w8+OCDcthhh8mYMWNUYsO3337baPsYWbYPP/yw3HjjjTJz5kwZNWqUvPDCC2r53n333aDvcTqdUllZ2eBBRERERF00aDto0CBZu3atPPvss6phuGzZMnnrrbfkpZdekv/+97+qwbplyxaZNGmSnHrqqep1RLGs1uWRyjq3eiYiIqLYlJ+fLyNHjlQBUWTJFhcXq+H33nuvXH311a2aNoK0kJ6erp4RvEX2Lcob6IYMGSK9e/dWbedgtm7dKgUFBQ3ek5KSIgcffHCj70GZBrxGfyCpgoiIiIi6aND2448/ltdff11l0loslqCvycvLk3nz5qkaXMguIIpFbq9PVueXydtrdsmXm4rVM/7GcCIiIootl112mYwdO1bKyspUvVjdCSecIEuWLGnxdFEy7PLLL5cJEybIiBEj1DAEX61Wq6SmpjZ4bXZ2thoXjD4crwn1PWhvI2CsP1iijIiIiKhzMofyoqFDh4Y8QQR1+/fv35plIoqYNfll8sHa3VLn8ki60SGl5eWyqahaPF6fHNwvg1uGiIgohnz11VeqPAGCqf769Okju3btavF0kbW7bt06+frrr6WjxcXFqQcRERERdW5hdUSm1/Pyb6A+/vjjMnr0aDn99NNVFgNRrEIphC82FklptUuS4iySHG9RzyXVLjWcpRKIiIhiCzJivV7vPsN37twpSUlJLZrmxRdfLB988IHqnLdnz571w3NycsTlcql+H/wVFhaqccHow/GaUN9DRERERF1D2EHba665pr7Dg59++kmuuuoqVTYBNbmuvPLK9lhGog5RUu2UnWV1kp5glYQ4s5iMBvWcbrfKrrI6NZ6IiIhix/Tp01VHXzqDwaA6IEMnumi/hgOd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Lr300kI+DRX5h3T4pypbtmxRCQZZxGrmzJl87V1ymdgDDzyAX/7yl6oPTWtrqxqvqKhAMBgs9eHRfrj22mvVpSryMzcwMKDO55///Gf89re/5evnEvKzt3cf6XA4jJqaGvaXdpHPfvazWLVqlbpMbPfu3bj++utVwv2iiy4q9aFRiXCu636c67of57rux7mu+3GuOzl81gVzXSZtC+jCCy9ER0cHrrvuOpUoWrp0KZ544ol9Ficj51qzZg1OO+20EW9OhCTjpUE1Od/dd9+ttitWrBgxft999+FjH/tYiY6KDoRcVn/xxRerZvCSbJf+QpKwffe7380XkugQ2rlzp5q0dnV1oa6uDieffDKee+45dZ+mJs513Y9zXffjXNf9ONclcoadLpjrarZcX0FEREREREREREREjsCetkREREREREREREQOwqQtERERERERERERkYMwaUtERERERERERETkIEzaEhERERERERERETkIk7ZEREREREREREREDsKkLREREREREREREZGDMGlLRERERERERERE5CBM2hIRERERERERERE5CJO2REQlMHv2bNxxxx15f02+/vznP0PTNPT29hb8seVxf/GLX+z3169evRqVlZWH/HmJiIiIqLA4190X57pEdKA8B/wdRER0SLzwwgsIh8N8tYmIiIho0uFcl4hofEzaEhE5VF1dXakPgYiIiIioKDjXJSIaH9sjEJHjrVixAv/+7/+Oz33uc6iurkZjYyNuuOEGFdu6dau6HP7ll18e+nq51F/G5NL/4S0Afvvb3+Koo45CMBjE6aefjvb2dvzmN7/BwoULUV5ejn/+539GPB7fr2P62c9+hne+853qsWpqanDmmWciFosNHe/VV1894uvPO+88fOxjHxsxNjAwgIsuukhV006bNg133XXXQbVHsG1bvR4zZ86E3+9Hc3Ozer0GpVIpfP7zn8eMGTNU/PDDD8cPf/jDEY+xdu1aHHPMMQiFQjjxxBOxYcOGEfFf/vKXOProoxEIBDB37lzceOONyGazQ/GNGzfilFNOUfEjjzwSv//97ydswyDnTMbkHI4l3+clIiIicjrOdcfHuS7nukRTFStticgV7r//flxzzTV4/vnn8eyzz6oE6EknnYR58+bt92NIYvPOO+9UickPfehD6iZJzAceeADRaBTnn38+vvvd76oE53haWlpUsvUb3/iG+h5Jvv7lL39RE8oDcdttt+GLX/yiSkRKQvmqq67C/Pnz8e53v/uAHufnP/85vvWtb+HBBx/EokWL0Nrain/84x9D8Ysvvli9Zt/5znewZMkSbNmyBZ2dnSMe40tf+hK++c1vqoqHf/3Xf8Vll12Gv/71ryom/zZ5DPn+d73rXdi8eTM+8YlPqNj1118Py7JwwQUXoKGhQZ2fvr6+fZLWB6NUz0tERER0qHGuOzbOdTnXJZqybCIihzv11FPtk08+ecTYsccea3/+85+3t2zZIplS+6WXXhqK9fT0qLE//elPal+2sv+HP/xh6GtuueUWNbZ58+ahsU9+8pP2ypUrJzyetWvXqu/dunXrmMd71VVXjRg799xz7UsuuWRof9asWfZ73vOeEV9z4YUX2mefffaIr/nWt7414fF885vftOfPn2+n0+l9Yhs2bFDH+vvf/37U7x3ttXn88cfVWCKRUPtnnHGG/bWvfW3E9/33f/+33dTUpO7/9re/tT0ej71r166h+G9+8xv1GI888siI55FzM0jOmYzJORT33XefXVFRMRQvxPMSEREROR3nuuPjXJdzXaKpiu0RiMgVFi9ePGK/qalJtTc42MeQ6kypuJVL7oeP7c9jSrXqGWecodojfPCDH8QPfvAD9PT04ECdcMIJ++yvW7fugB9HjiGRSKh/y+WXX45HHnlkqIWAtCAwDAOnnnrqfr828tqKwddCqnZvuukmRCKRoZs8j1QcSzsJOWZpvSBtGcb6tx2MUj0vERER0aHGue7YONflXJdoqmJ7BCJyBa/XO2JfeqHK5fG6nvvsaXhrgkwmM+FjyPeP9ZgTkSSo9E7929/+ht/97neqpYK0F5BL9OfMmaOOae9WCWMdUyFI4lJ60P7hD39Qx/Vv//ZvqvXCU089pXru7o+9Xxsx+FpI6whp4SCtCPYmvWT3x4Gcp0GFeF4iIiIiN+Bcd2yc6xLRVMVKWyKaFKvOSvXloOGLkhWLJDalp64kFV966SX4fD5V4Tp4TMOPxzRNvPbaa/s8xnPPPbfPviyKdjAkObtq1SrV/1UW/ZIetq+++qqqBpbkqyRwD5YsBCZJYVnAbO+bJGPlmHfs2DHi37z3v+1gzlMhnpeIiIjIzTjXzeFcN4dzXaKphZW2RORqMoE7/vjjceutt6oqV7mk/8tf/nJRn1Mqap988kmcddZZqK+vV/sdHR1DCdfTTz9dLZr2+OOP47DDDsPtt9+O3t7efR5HFvqSxczOO+88VSH705/+VH3PgVq9erVKDC9fvly1fPif//kf9brMmjULNTU1uOSSS9TCYoMLkW3btk29TrIQ2/647rrrcM4552DmzJn4p3/6J5UwldYFkoi++eabceaZZ6oF1OR5pMK3v79fVR4PJ4lWqZKQxeC++tWv4s0331QLnxX7eYmIiIjcjHNdznU51yWaulhpS0Sud++996oersuWLcPVV1+tEnrFVF5ejqeffhrvfe97VdJQksSSgDz77LNVXBKkMrm6+OKLVS9Z6TV72mmn7fM4n/nMZ7BmzRocddRR6pglubty5coDPp7KykrVV1cqf6UfmrRJ+NWvfqUStuLuu+9WSU9pm3DEEUeovrCxWGy/H1+O6bHHHlOtII499liVJP/Wt76lksJCkqlSZSx9dY877jj8n//zf1Ridu9L/n784x9j/fr16hi//vWvT3ieCvG8RERERG7HuS7nupzrEk1NmqxGVuqDICKifcmCYP/1X/+lkpFERERERJMJ57pERONjewQiIoeJx+OqdUJbWxsWLVpU6sMhIiIiIioYznWJiPYP2yMQEe1l+/btiEQiY94kXkzf//738eEPf1i1ejjhhBPwv//7v2MeC5O6RERERHQgONclInIHtkcgItqL9MfdunXrmK/L7Nmz4fEcugsVBgYGVNXtaKRX7GCPVyIiIiKiiXCuS0TkDkzaEhERERERERERETkI2yMQEREREREREREROQiTtkREREREREREREQOwqQtERERERERERERkYMwaUtERERERERERETkIEzaEhERERERERERETkIk7ZEREREREREREREDsKkLRERERERERERERGc4/8HH0SKU9EWbNAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# === NUM_SUBJ_SCHEDULED ANALYSIS (after May 15th, all rigs) ===\n", + "print(\"\\n\" + \"=\"*70)\n", + "print(\"NUM_SUBJ_SCHEDULED ANALYSIS (after 2026-05-15, all rigs)\")\n", + "print(\"=\"*70)\n", + "\n", + "corr_good = df_good[['num_subj_scheduled', 'startup_time']].corr().iloc[0, 1]\n", + "print(f\"Pearson r = {corr_good:.3f}\")\n", + "\n", + "subj_stats_good = (\n", + " df_good.groupby('num_subj_scheduled')['startup_time']\n", + " .agg(median='median', mean='mean', count='count')\n", + " .reset_index()\n", + " .sort_values('num_subj_scheduled')\n", + ")\n", + "print(\"\\nStartup time by num_subj_scheduled:\")\n", + "print(subj_stats_good.to_string(index=False))\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(14, 5))\n", + "\n", + "# Scatter with regression\n", + "x_good = df_good['num_subj_scheduled'].dropna()\n", + "y_good = df_good.loc[x_good.index, 'startup_time']\n", + "m_good, b_good = np.polyfit(x_good, y_good, 1)\n", + "\n", + "axes[0].scatter(x_good, y_good, alpha=0.3, s=20)\n", + "xs_good = np.linspace(x_good.min(), x_good.max(), 100)\n", + "axes[0].plot(xs_good, m_good * xs_good + b_good, 'r-', linewidth=2, label=f'slope={m_good:.2f}s/subj, r={corr_good:.2f}')\n", + "axes[0].set_xlabel('num_subj_scheduled')\n", + "axes[0].set_ylabel('Startup time (s)')\n", + "axes[0].set_title('Startup time vs. num_subj_scheduled (after 2026-05-15)')\n", + "axes[0].legend()\n", + "axes[0].grid(True, alpha=0.3)\n", + "\n", + "# Bubble chart\n", + "axes[1].scatter(\n", + " subj_stats_good['num_subj_scheduled'], subj_stats_good['mean'],\n", + " s=subj_stats_good['count'] * 5, alpha=0.7,\n", + ")\n", + "axes[1].set_xlabel('num_subj_scheduled')\n", + "axes[1].set_ylabel('Mean startup time (s)')\n", + "axes[1].set_title('Mean startup time per num_subj_scheduled\\n(bubble size ∝ sample count, after 2026-05-15)')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8909e6fd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Startup types in good data:\n", + "startup_type\n", + "Training Flow GUI 733\n", + "Not using New Training GUI 253\n", + "Rig Tester 252\n", + "No Schedule 52\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "# === Which rigs take longest: filtered by startup_type ===\n", + "# Show all startup_types present in good data so we can confirm the labels\n", + "print(\"Startup types in good data:\")\n", + "print(df_good['startup_type'].value_counts())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "16d78a48", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rig Tester startup_type rows: 252\n", + "Training Flow GUI startup_type rows: 733\n", + "\n", + "============================================================\n", + " Rig Tester: startup time by rig (sorted slowest → fastest)\n", + "============================================================\n", + " median mean std count\n", + "location \n", + "165A-miniVR-T-3 44.76850 44.498565 4.200848 20\n", + "165A-miniVR-T-1 42.89705 42.953106 8.438373 18\n", + "165A-miniVR-T-2 40.88220 40.523205 7.153129 20\n", + "165I-Rig4-T 35.51260 34.192148 3.791273 27\n", + "165I-Rig1-T 33.37020 33.942662 2.363092 26\n", + "165I-Rig3-T 32.27780 32.342574 1.814083 27\n", + "165I-Rig2-T 30.75780 30.806544 2.194979 25\n", + "165A-miniVR-T-5 29.99040 28.656888 4.444015 25\n", + "165A-miniVR-T-6 27.48480 28.004684 1.739614 25\n", + "165A-miniVR-T-4 27.43940 26.699180 4.018570 25\n", + "165A-miniVR-T-9 23.85880 22.877250 6.239566 4\n", + "165A-miniVR-T-8 16.03070 18.194700 4.719025 5\n", + "165A-miniVR-T-7 14.30430 15.311140 5.084180 5\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAHqCAYAAACQmniWAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdShJREFUeJzt3Qm8VVP/x/FfszRq0CDKUIokZWgQSZJKJXNCVE9m0kB4zMqUPDwiUyHJI5mKDKFCpjKlEUWjsVGTuvv/+q6/fZx7u9O53XPu3vt83q/X7Xb22efsvc7ed5/9W+u31irmeZ5nAAAAAJCA4omsDAAAAAAEEgAAAAAKhBYJAAAAAAkjkAAAAACQMAIJAAAAAAkjkAAAAACQMAIJAAAAAAkjkAAAAACQMAIJAAAAAAkjkACQckuXLrVixYrZ2LFjA/Pp16tXz7p06VJk23///ffdZ6LfUaJjrHLpmCN/MjIyrHHjxnbHHXcU6CNbvHixdejQwSpVquQ++5dffpmPPg2dddZZdsYZZxT1biDiCCSAJPjmm2/stNNOs7p169puu+1me+21l51wwgn24IMPZlpv2LBhSfuS/+ijj+zmm2+2tWvXWlEZP3683X///UW2fSSHbk7jfypWrGjHHnusTZkyJakfee/evXfadnY/Wi/M5+9zzz1ny5Yts8suu6xArz///PPdNUiByDPPPGOHH354ysuiYEhBZNeuXW3vvfe2cuXKueDo9ttvty1btmT7mieeeMIaNWrkrpn169ff6XopkyZNsjPPPNP2228/23333e3AAw+0gQMH5nid27Bhgw0ZMsT23XdfK1OmjLsW69q8adOmfJVjxYoV7ma8cuXK7jzv1q2b/fDDDzutl9O5eOedd+ZrO59++qldcskl1rx5cytVqpR7bU7yu61rrrnGXnzxRfvqq6/ytQ9AQRTzPM8r0CsB5HgDf9xxx9k+++zjvtBr1qzpbgo+/vhj+/777+27776LrVu+fHn3pZaMmvl7773XBg8ebEuWLHG17UVBNfxz587dqTZal52tW7e6L8wSJUpYEOgz0o3O5MmTi2T7uvHatm2blS5d2ooXD3Ydj25aFBifd9557lj++OOP9vDDD9uqVavsjTfesBNPPDG27o4dO+yvv/5yN3G53Rzlx6xZs9zfkE/n9o033mj/+te/rE2bNrHl+++/v7Vs2dKSdf4mW9OmTe2oo46y0aNHJ/zazZs3uxvs66+/3t20F1VZNm7caBUqVLAWLVq4be+5557u+D311FN2zDHH2LvvvpvpfFBZL7roIjv11FPd+TNz5kwXBOnmWDfEvmrVqlnt2rWte/fu7hqrgOmRRx5xgcWcOXOsbNmysXXXrVvnAtzly5e7c+SAAw6wX3/9Nfbee+yxR55laNasmXsfBSu6Xo0cOdKd819++aVVrVo127+JeIcddpgdfPDBeX5eqvRRxVKTJk1c8LNo0SK3newksi2dRwq2nn766Tz3ASgQBRIACk+nTp286tWre2vWrNnpuZ9//jnT43Llynnnn39+oX78GzdudL/vuecefQt5S5Ys8YpK586dvbp163phoP3U/qba5s2bvR07dnhhovPq0ksvzbRs3rx5bvlJJ52Usv347LPP3DbHjBkTmvNXx1rHPCdz5sxxZXrnnXcK9P4//vije73+/ouyLFu3bvU+/PDDnZbfcsstbv/efvvt2LJNmzZ5VatW3env75xzznHXyD/++CO27L333tvpPZ966in3no899lim5RdffLFXuXJl74cffihQ+e666y73vp9++mls2fz5870SJUp4Q4cOzfNvIhGrV692n4PofXK7PUtkW/fee6/7DDds2FDgfQNyE+xqLyCEVGOqWiE1hWelWrn4WqU///zT1dBlTclQDa+auVWTpBo21XydfvrpO9Um+vnn06dPd+vr/evUqeNqt9QaIWrS999fr8+tf4KW67U+/V/LFixY4Jr31bSvfbnyyitzTE/wtW3b1qW6qCz+9v2Wkez2QWVXC81PP/3kajD1f6UhPPTQQ+551Ty2a9fOpUgoZUypGlkpveGqq65yqRSqAVcN5F133eVq+/PrrbfecjXCSq846KCDXCqFTykN2m/VSmbXEqXnlJaSVz+ICRMm2A033ODKp9rj9evX59hHQuVXbavOgyOPPNLVpuqz1U+QKCVFtcXxLQY59ZHQ8dC5pZpllV8tePPmzXPnR2GkJX3yySfWsWNH10dA769a6Q8//DDTOqr11bmibepc0d+OanlVq53X+StqUbvpppvcOabX65xTCo2Wx9PrlKL07LPPuuuC1p06dWqO+65UR7VKqdY+Xn6uCfpM9bch+vv397koyqIytGrVaqflp5xyivs9f/782LL33nvPfv/9d1e+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X321tW3b1oYMGZLv15188smZHmtYWbVQaDhZBRkaBWr8+PGxlo4xY8a4C72eb9GiRaGXAwCQM82kvblyA7PaTZP6MW1enZHyWbsTHdEnDKloAJCX5CaqJuD777+37du3F/j1O3bscClMf/75p5ufQp0SlTbVvn37TJ0N99lnH5s1a1Yh7TUAAACQnlLeIqGWh3hKSVq1apVLQTr//PMTfr9vvvnGBQ7qD1G+fHmXOqVJ77788ksrXbq0m58invpHrF69Osf3U18K/fjWr1+f8D4BANJHVDuRA0DgAgn1X8ia1lS9enUbMWJEniM6ZefAAw90QcO6dets4sSJLhiZPn16gfdv+PDhdssttxT49QCA9BLFTuQAEMhA4r333ivU91OrwwEHHOD+r8maPvvsM/vPf/5jZ555pm3bts2NBhXfKvHzzz9bzZo1c3y/oUOHZmo1UYvE3nvvXaj7DACIjih2IgeAQAYS6vg8adKknVKOdMPevXt3e/fdd3fp/TUClFKTFFSUKlXKpk2bZqeeeqp7buHChfbTTz+5VKiclClTxv0AAJDOnciZHwNA4AKJ999/37UUZKU+DjNnzkzovdR6oDkj1IFaw+FphCa9/5tvvumGe+3Tp49rXahSpYpVrFjRLr/8chdEMGITgKjQUKKDBw92N30aCvuee+5JaEhRIDvMjwEgUIHE119/Hfv/vHnzMnV41ohLU6dOtb322iuh9/zll1/svPPOc521FTg0adLEBREnnHCCe37kyJGuD4ZaJOInpAOAKFAr7iuvvBJ7/NZbb9lDDz3k5tN5+eWXi3TfEG7MjwEgUIFE06ZNrVixYu4nuxmsVYP24IMPJvSemiciN7vttpv7UtUPAEQxiFA/MbW89u3b1x5//HG777773HI9TzCBXcX8GAACEUgsWbLEDfW633772aeffupGavLpi3DPPfe0EiVKpGp3ACDU6Ux+EKGaY/2OH3WuQoUK7nmtF5Q0p02bNrnfc+bMyfdrdmUGaABAhAKJunXrugniNDxr1apV3WMAQOLUJ0LUEuEHET49vuqqq+zuu+926/33v/8NxEe8YMEC97tfv34p26YCKgBARDpbaxQlTRh34403pnKzABC5jrCidKbsaKAJBRL+ekGgVCtp2LCh7b777vluWejVq5eNGzfOpdgkGkSo8zkAIEKjNvmdAAcMGJDq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559/HlsnrOXzyzZv3jzr2bOnOx8vvPBCmzp1qkXl2nHooYfahAkTbMGCBbHnQsVDodqxY4f7/fXXX3t77rmnd9ppp7mfihUreg899FBoP+2MjAz3+9tvv/WqVq3q9evXz1u1apUXtWO2zz77eMccc4x36KGHeiVKlPAef/zxTOuE1fjx4115pk6dmul4ht1zzz3nFStWzHv11VcjVa6oHq8olcu/JnzxxRde2bJlvcGDB3tRsnTpUm/vvff2hgwZkuM6YT1+jz32mLtudOzY0bv55pu9P/74I7TXef8YzJ0719tjjz28M8880zvjjDO8xo0be4cffrg3bty4ndYNa9muuOIKb9iwYd6JJ57o7kF0vMJWpvjz7Msvv3TXjhtuuMH717/+5R1xxBHe2rVrvbAhkEiC77//3t2QXn/99bET5pJLLvEuvfRS76+//vLCauXKld5RRx3ltWrVytttt928/v37RyaY0Jfmfvvt51177bXeli1b3LI777zTBYO//vqrF2YKhvSlqZsCXxi/MLN69NFHXbn0BROV8zDKxyuK5Vq4cKFXsmRJ77bbbnOPdX1/++23vSeffNL76KOPQn3t+N///ud16NDB/X/btm3erbfe6p1++une5Zdf7k2YMCG2Xhhv5D788EPvuOOO86688kqvadOm3o033uht2rTJC6v169e7YzV06NDYMp1/lStX9sqXLx/qSsyNGzd6J598snf11VdnuvbrXNRN95o1a0J5Ln7xxRfe7rvv7l133XXu8TPPPOPVqVPH+/jjj0N3bSS1qZBt377dXnrpJTv55JNt8ODBsXxZpcgoD+7oo492y6dMmWJhoqBTzdx77723jRs3zl555RWX56x0ktWrV1uY7dixw5599llr1qyZXXPNNVamTBlXXuXclytXLtS5wUr76d+/v919991WuXJla9GihW3ZssWdl6FrPo2j9LNLLrnExo4da02aNLG2bdu6Zv2wi+rximK5dE1XuUqUKGEtW7Z0y7p27WpXXnmlS2lt166dS5H87LPPLIy+/PLL2PfXCSecYNOnT3fXQ6V/Dhw40O655x73nNKCwkTn22677eZ+qwwdOnRwKWkPPfSQde7c2R588EEL43eY+oc1bdo0dh+ic/L444+3Nm3a2MMPP2xvvvmmhVHJkiVdWnitWrViy9Qf6ZtvvrHmzZtbt27d3HUlLOei53mub1j79u3tiiuucOl10qtXL3dt9MsSqr5WRR3JRNH8+fO9zz//PPb4pptucjX4//73v13NR/v27V3twU8//eSFrUVixowZscdKT1Caglom9JwvTJG074UXXvCuueaaTMs2bNjg1axZ09VehbFMY8eOdTXAr7zyins8e/Zsr0GDBl6LFi1irS5hLNfEiRO9UqVKeS+++KJ7/Ntvv7kyHXjggd6CBQu8sIrq8YpqufzUBLU069yrV6+e161bN7ds+/bt3ksvveQdfPDB7vmw1ZaK0gWVanH//fe776zly5e75T///LN3++23u9QZlTWsjj/+eO/HH390/1dqSfXq1d33tFqUwnS8tJ9Llizx9t13X2/06NGZMiP0d/bII4+4TAK/Rj8s5fL3Va0O+rvq0aOHu5aoBl81+WPGjHEtY3fccYfLAJkyZYoXJnPmzIn9389UUZl0zHTPESYEEoUouy/DdevWeb179/YmT54cW/bOO++4G6H4m/Igy+7Co6ZuefPNN2PBhNJL9AX63//+13vvvfe8MMjtBkaBhC5QflOjqFzLli3zwkA3blkvrrp4hf0mTsfAP7/8c/P3338PfTAR1eMVxXLF7+s333zj9enTx+XbqxIpnm7idHMaX9ESFqoMa9asmde6dWt3IxdPfeV04/3aa695YaNrhm7c1H9AwZ6cd955LgXooIMOcjn4up6E7btZwZDS7NSPQIFeuXLlvIsvvtg9p+9kpe4qfStMgUR8UNu9e3fvlFNO8erXr+8CCp+CQS37z3/+44XB9u3bc3xu8eLF3l577eX67UhYjhWBRCF8mSiHL7cvwa1bt+7Uqfewww5zHYjCXC7/ufhgolevXl6FChXcH0QYy+b/4eqPXTUhutnxj5NaLKpUqRK6m4Ks5Qz7TZzP32f/whyFYCIdjlcYy5XXdWPevHnetGnTYhUs/jrPP/+8a5VQhVIYy6XcerUmKWhQS5JPx0sBxhtvvOGFrVz+Y2UIqIJP31u1a9d2OevqY6Ab7rvuuiuQ52J25Yq/2VQQpD6Mxx57rOvj51OrklolgiyvsqkfiH709+S3RvvnYps2bTK1xoTxfirj77Lec889rm9m1kqJICOQKCD/hNDFVR2Bfvjhh52e80+MrCePOvTqy1MpGWEsl0/l85epxlFfOOrcFf+FE9ayiS5aapHQF4xS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61xMJ5bsk/6rr77yypUr52YDjpf14KtZ6vTTT/eCLqrlinrZACRHVK8blOv/cbyKHudiuM7FdJPUFgnNNrjHHnt4PXv2jP0xqKaqT58+7mSYPn16bJKiJ5980mvVqtVOMwQHUVTLFfWyAUiOqF43KBfHKyg4F8N1LqaTpA7/+u2331q5cuWsevXqNnv2bGvfvr3La1u9erVt2LDB2rZta48//rhb97jjjrPPPvvMXn31VQu6qJYr6mUDkBxRvW5QLo5XUHAuhutcTCuFGZVkN1LH+PHjvebNm3u1atXyOnfu7K1evTo2++ptt93mct7mzp3rHj/88MOx/wdJVMsV9bIBSI6oXjcoF8crKDgXw3UupjMr7JN+8eLF3qRJk7xNmzbFntMshF27dvVmzZqV6TVr1651MxWOHj06sJ1molquqJcNQHJE9bpBuf7B8SpanIvhOhfTnRV2RyAd8H79+nkrVqzIdMC//fZbb/Pmze7//vLvvvvOa9KkiffOO+94QRTVckW9bACSI6rXDcrF8QoKzsVwnYsoxBaJH3/80dtnn312GrEjN9dff707QVauXBnYYxHVckW9bACSI6rXDcr1D45X0eJcDNe5mO5KFlZfC00I0rhxY7v77rvtr7/+sltuucV1DqpWrZq1adPGzjvvvNi66oT32muv2fjx4+3dd9+1WrVqWVBFtVxRLxuA5IjqdYNycbyCgnMxXOdiuiu0QGLOnDn2xx9/uP936tTJtm/f7mYd1Cynn3/+uS1YsMCGDRtmmzdvtoULF7qRPaZPn26HHHKIBVlUyxX1sgFIjqheNygXxysoOBfDdS6mvcJq2nj77be9du3aeY8//rh3wgkneMuXL491lLnlllu8Fi1aePPmzXPLNJ74mjVrvDCIarmiXjYAyRHV6wbl4ngFBediuM7FdGcF7Qi0ffv2TMs1ZXnt2rW9gw46yGvfvn2m53766Sdv991395599lkvqKJarqiXDUByRPW6Qbn+wfEqWpyL4ToXUQgT0mVkZFjx4sVt0aJFdv/999uqVatizzVs2NAeffRR95zy+2bNmhV7rkaNGtaiRQurWrVqIFuAolquqJcNQHJE9bpBuTheQcG5GK5zEblINMLS2OFVqlTxihUr5g0dOtT79ddfMz2vccSLFy/unXjiie7/Wv/aa691NViKOIMqquWKetkAJEdU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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "============================================================\n", + " Training Flow GUI: startup time by rig (sorted slowest → fastest)\n", + "============================================================\n", + " median mean std count\n", + "location \n", + "165I-Rig1-T 31.57620 32.122519 2.394225 90\n", + "165I-Rig4-T 24.73840 26.649481 4.088648 97\n", + "165I-Rig3-T 23.37240 27.023923 5.213252 57\n", + "165A-miniVR-T-4 22.13885 19.208535 6.117544 40\n", + "165A-miniVR-T-9 18.89815 18.043569 3.212724 16\n", + "165I-Rig2-T 18.63550 21.989762 4.804092 58\n", + "165A-miniVR-T-3 18.61690 22.235145 9.406466 42\n", + "165A-miniVR-T-8 17.94240 18.790036 6.255641 22\n", + "165A-miniVR-T-1 17.79400 19.733315 8.228678 40\n", + "165A-miniVR-T-6 15.05070 19.343674 8.664433 97\n", + "165A-miniVR-T-2 14.94650 17.236554 6.360275 57\n", + "165A-miniVR-T-5 12.87550 16.091791 5.228811 97\n", + "165A-miniVR-T-7 11.48375 10.826655 1.665716 20\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAHqCAYAAACZcdjsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfktJREFUeJzt3QeUFMXaxvFaMhJEJCdFDERBMRBEUUGMqCAGDCCICSNJUK+KCXMWxAQmREkqKCiigiIqAgYkquRoAMlI6O88db+eOzvMhtnZ0F3z/52zLNPTu9M11dvTb9VbVWme53kGAAAAAJJQKJkfBgAAAAACCwAAAAC5gh4LAAAAAEkjsAAAAACQNAILAAAAAEkjsAAAAACQNAILAAAAAEkjsAAAAACQNAILAAAAAEkjsAAct3TpUpOWlmaGDx9uguLggw82Z599doG9/hdffGHfE31Pdcm8F0E8t2K1bt3afiG9LVu2mEqVKpm33norR2/NzJkzTYsWLUypUqXsOfDDDz/wFqegZs2amX79+hX0YSBACCwQej///LO54IILzEEHHWRKlChhqlevbtq2bWueffbZdPs9+OCD5r333suTY/j666/NPffcYzZu3GgKyogRI8xTTz1VYK+P3NW1a1d7w5bVl/ZL5YAo3tfFF19sgmjTpk3mgQceMMccc4zZf//9TfHixe1166KLLjIffvhhun0VrKks33//fdzfpcBcAXo07X/DDTdk61iefvppU6ZMmRy9V7t27TKdOnUyf//9t3nyySfNG2+8YcsxePDgfA0yt23bZp5//nlz2mmnmapVq9ryHHXUUWbIkCFmz549++y/d+9e88gjj5jatWvbz4ojjzzSvP322/vsozK0b9/e1KxZ0wZODRs2NPfff7/ZsWNH3ONYt26dueaaa+xnj36v6qV79+7ZLsf8+fPN6aefbkqXLm3Kly9vLr/8cvPHH3/EDeLjfY0cOTJbr/PJJ5/Y41J5ChcuvM/5k5PXuu2222wdrF27NtvlhduKFPQBAMne0J988smmVq1apkePHqZKlSpmxYoV5ptvvrEfnDfeeGO6wEIByHnnnZcnxzFw4EB7k1euXDlTUIHF3LlzzS233JJuuz7wt2/fbooWLVogxxVEJ554on1PihUrZoJKNypt2rSJPF6yZIm56667zNVXX21atWoV2V6nTp0Cey+CcG7ddNNN5thjj023LaMbpoL066+/mnbt2plly5aZ888/31xxxRX2RlLXq48++sgGCq+//rq9qcxrCgx0fbz11lvtDWaifvvtN1uOl156yVx11VWR7QosKlSokG/B7u+//26v8aeeeqrp1auXKVu2rPn444/N9ddfbz8DXnvttXT733HHHeahhx6ynxU6Z95//33TuXPndMGogpUrr7zStsRfe+21tldnxowZ5u677zZTpkwxn332md3fp/pr2bKl/b/2V3CxevVq891332WrDCtXrrR/gwo09RmlnqTHHnvMNpjpd8T+XV5yySXmzDPPTLetefPm2f6MeOedd8zRRx9tqlWrluX+2Xmtc889177vqvt77703W8cBx3lAiJ155plexYoVvQ0bNuzz3Lp169I9LlWqlNelS5dcff0tW7bY748++qinP6clS5Z4BeWss87yDjroIC8MdJw63vy2fft2b8+ePV4YzZw5055jw4YNy9Y56brPP//cvh+jRo3KdL+TTjrJfhWkXbt2eQ0bNrTXoK+++iruPh9//LH30UcfRR6rnlU+1Xt2/961f8+ePbM8nrFjx9p9f/31Vy8npk6dGve9b9CgQa6/13rvdu7cGfe5P/74w5s7d+4+26+88kp7fIsXL45sW7lypVe0aNF078/evXu9Vq1aeTVq1PB2795tt+m1pk+fvs/vHDhwoP2dkydPTrf9jDPO8GrXru39+eefOSrfdddd55UsWdJbtmxZZJteQ681dOjQyDZ9tmibPmtyatWqVd6///6b5edFoq91ww032N+l9xMgFQqhppazBg0axO0lUEuTTy1MW7dutS1YsSkkanlTC9cRRxxhSpYsaQ488EDbza/u4HipCVOnTrX76/fXqFHDpkD17dvX7qMudv/36+czy0HXdv2sT//XtgULFpgLL7zQtgLpWG6++eYMu+B9yiFXKoXK4r++32ob7xhUdrWWLl++3LaU6v9qaVOXtqi17JRTTrFpAGqVVktXLKV9qXdE6QJK6Tj00EPNww8/bFMJsktd802aNLHpA/Xr1zdjx45N1xqp41aqRbweIj0Xm8YQL1VGXfd33nmnLd9+++1n01EyGleg8h9yyCH2PDjuuOPMl19+Gegc/YzOyUTO63jvhcqrdIl58+bZHkG9b3r/lEYSLbNza9WqVbZ3UP+vWLGi6dOnzz7p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+kNQStTevXvt/zUNrYILjcPwKXVKs0M1b948348XAAAAQAB7LM455xw7pqJWrVqmQYMGZs6cOeaJJ54w3bp1s8+npaWZW265xdx///3msMMOs4GG1r3QTFHnnXdeQR46AAAAgKAEFlqvQoHC9ddfb9avX28DhmuuucYuiOfr16+f2bp1q7n66qvNxo0bzQknnGAmTZpkSpQoUZCHDgAAACAo61jkB9axAAAAABxfxwIAAACAGwgsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABAuAOLgw8+2KSlpe3z1bNnT/v8jh077P8PPPBAU7p0adOxY0ezbt26gjxkAAAAAEELLGbOnGnWrFkT+Zo8ebLd3qlTJ/v91ltvNePHjzejRo0yU6dONatXrzYdOnQoyEMGAAAAEEea53meCYhbbrnFTJgwwSxevNhs2rTJVKxY0YwYMcJccMEF9vkFCxaYevXqmRkzZphmzZpl63fq9+y///7mn3/+MWXLls3jEgAAAADuSOReOjBjLP7991/z5ptvmm7dutl0qFmzZpldu3aZNm3aRPapW7euqVWrlg0sMrJz5077BkR/AQAAAMhbgQks3nvvPbNx40bTtWtX+3jt2rWmWLFiply5cun2q1y5sn0uI4MGDbJRlf9Vs2bNPD92AAAAINUFJrB45ZVXzBlnnGGqVauW1O8ZMGCA7arxv1asWJFrxwgAAAAgviImAJYtW2Y+/fRTM3bs2Mi2KlWq2PQo9WJE91poVig9l5HixYvbLwAAAAAp1mMxbNgwU6lSJXPWWWdFtjVt2tQULVrUTJkyJbJt4cKFZvny5aZ58+YFdKQAAAAAAtljsXfvXhtYdOnSxRQp8r/D0fiI7t27m169epny5cvbUeg33nijDSqyOyMUAAAAgBQJLJQCpV4IzQYV68knnzSFChWyC+Nptqd27dqZwYMHF8hxAgAAAAjJOhZ5gXUsAAAAgBRaxwIAAABAeBFYAAAAAEgagQUAAACApBFYAAAAAEgagQUAAACApBFYAAAAAEgagQUAAACApBFYAAAAAEgagQUAAAAAAgsAAAAABY8eCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAABJI7AAAAAAkDQCCwAAAADhDyxWrVplLrvsMnPggQeakiVLmkaNGpnvv/8+8rzneeauu+4yVatWtc+3adPGLF68uECPGQAAAECAAosNGzaYli1bmqJFi5qJEyeaefPmmccff9wccMABkX0eeeQR88wzz5gXXnjBfPvtt6ZUqVKmXbt2ZseOHQV56AAAAACipHnqEigg/fv3N9OnTzdffvll3Od1aNWqVTO9e/c2ffr0sdv++ecfU7lyZTN8+HBz8cUXZ/kamzZtMvvvv7/9ubJly+Z6GQAAAABXJXIvXaA9Fh988IE55phjTKdOnUylSpXMUUcdZV566aXI80uWLDFr16616U8+Fez44483M2bMiPs7d+7cad+A6C8AAAAAeatAA4vff//dDBkyxBx22GHm448/Ntddd5256aabzGuvvWafV1Ah6qGIpsf+c7EGDRpkgw//q2bNmvlQEgAAACC1FWhgsXfvXnP00UebBx980PZWXH311aZHjx52PEVODRgwwHbV+F8rVqzI1WMGAAAAELDAQjM91a9fP922evXqmeXLl9v/V6lSxX5ft25dun302H8uVvHixW3+V/QXAAAAAIcDC80ItXDhwnTbFi1aZA466CD7/9q1a9sAYsqUKZHnNWZCs0M1b948348XAAAAQHxFTAG69dZbTYsWLWwq1IUXXmi+++478+KLL9ovSUtLM7fccou5//777TgMBRr/+c9/7ExR5513XkEeOgAAAICcBhYaEzF16lQ7PeyyZcvMtm3bTMWKFe34CM3clOhA6WOPPdaMGzfOjou49957beDw1FNPmUsvvTSyT79+/czWrVvt+IuNGzeaE044wUyaNMmUKFEiodcCAAAAUMDrWGzfvt0uXKcZnP7++2/TpEkT22uglbD1eO7cuWb1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d43LZRPKF17UXXhRd+Hmcv25XDahfOFVPMDnpvODtwEAAADkPXosAAAAACSNwAIAAABA0ggsAAAAACSNwAIAAABA0ggsEsA4dwAAACA+AosErFq1yrhq/fr1xmUuli860CXoDS8Xz81Uwd9duOzdu7egDwG5VH+u1eXe/y/Ptm3bTNgRWGTTiy++aM4++2wnbwJefvll06NHD7NhwwbjIhfLp4tQWlqa+fvvv82mTZvs/125yXHtAyOVzk2/7nQuunI+ZvThv3PnTrN161bjEhfrLLruChUqZH7//XczceJEs2XLFuMS16+bfv39+uuvZsWKFfb/rpVt8eLF5qqrrjK//fabCTN3aiaPg4prr73W3HPPPaZSpUrGJUOHDjVXX3216d69uznggAOMa1wtny5Cuvgcd9xx5oEHHrABhgvBhX+BXbhwobnvvvvM5Zdfbl577TXz/fffR/YJexldPTf9ulu0aJEZMGCAOf/8883gwYPNypUrjQv88s2bN8907tzZHH/88aZbt25m0qRJxqXGij///NO53nm/7n766Sdbb5MnT7YNMq5cT/zyLV261LzwwgumX79+5rPPPjO7du0yLvDL9+OPP5oGDRqYjz76yLhib1TZGjdubEaOHGkWLFgQeS6UtEAeMvb22297aWlp3gcffGAf792715m3a8SIEV7hwoW9SZMmOVe2VCjfSy+9ZM/N008/3bvnnnu8v//+227fs2ePF0Z+/cydO9c74IADvIsuusi78MILvYYNG3rHHHOM9+abb+6zb1i5dm7659xPP/3kVapUybvgggvsV9myZb3nn3/eC7vYc/Omm27yHnzwQa9du3Zejx49bPnDXIf+sf/yyy/egQceaMu0Zs0azyVLly71atas6fXr1y/DfcJYh9F/e7Vq1fJOPPFEr3Hjxvb68vLLL6fbJ4z8Y58zZ45XsmRJr2/fvp4r9vx/2X744QdbtjvvvNO7+uqrvWOPPdbbuHGjF1YEFpl48cUX7Y2bPkhcu8jqgqOy6ULrC/PFJ9XKJ9OnT/dOPvlk7+abb/aaNGni3XXXXd62bdu8MNu0aZN32mmneQMGDIhs+/rrr71y5cp5pUuXduIm1dVz87fffrM3NnfccUekPNdff73Xs2dPb9euXV7YbdmyxTvnnHO8Xr16pfuM6NSpk70J2LBhQ6hvUFevXu0df/zx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q7whQ4bYVmyl05xxxhl2ITX/RrNVq1a2NSPI5UmVsrl+brped5QvvPVH3YW37lyvP5fLll9CGViIoslXX33VK1KkiFezZk2vadOm3u+//x55fv369d59993nNW/e3N4IRHdhBZ3LZXOxfJ9//nncXHrNZ921a1evcOHCdraIJ554wuZkHnLIIfZnwsDlsrl+brped5QvvPVH3YW37lyvP5fLll9CG1j4NwGKHg844ACbjuDbuXNnuv38KDLINwGpVDaXyhfdQjFx4kR74YkdtKX8e7V26wJUtGhRO9+15sIOaplSoWyun5uu1x3lC2/9UXfhrTvX68/lsuWnUAYW0RWoE0HpC2phvP3229Ntj90vDFwum+vlU66lLjLXXHONt3Llyn3WRFB+pqYg1YBfrX0QJi6XzfVz0/W6o3zhrT/qLrx153r9uVw2L9UDi9gR9/pQ9z/YNZBSy6uL0heKFStm5xcOC5fLlgrli0fT0Kmr9KqrrvJWr14d9wY09n0JC5fKlmrnpkt1Fw/lC2/9UXfhrTvX68/lsqVsYKH54evWrRv5kI+uUC2jrlSFDz/8MDIif9iwYTbCHDp0qBd0LpctFcrn34RqSlHlV6pFQ60YftnjXYyCMlNQKpfN9XPT9bqjfOGtP+ouvHXnev25XLaCEOjAQpV42GGHecccc0y6AZSaY17TQmohq2i6CZgwYUJkzuEgc7lsqVA+GTVqlFe1alWvQoUKXv369W2epb9Cs38xiteNGgYul831c9PluhPKF976o+7CW3eu15/LZctvgQwsoucDXrt2rV3FsEmTJpGbAC1ipfznzAT1JsDlsrlaPr81IzpdRq3dzZo1szehWjhN09Mdf/zxXt++fSMXIz9H86abbgps64bLZXP93HS97ihfeOuPugtv3blefy6XLSgCF1i8+eabdg756A/wNWvW2JuAsC+T7nLZXC5f7HHPnj3b69+/v9etW7dId6koD/+4445LdzH67LPPvHnz5nlB5XLZXD83Xa87yhfe+qPuwlt3rtefy2ULikAFFooWFRFqmq/Y3GfdBGj5dN0ERKcvhIXLZXO5fIMHD7aLpGnxNLVSqEyXX365V6ZMGVum6JYLtX7oYtSyZUvvuuuu8/766y8vyFwum+vnput1R/nCW3/UXXjrzvX6c7lsQRKYwEJpCJoTWHlu0WkLsekLqvyj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dBeWX375xdu+fbv9v7/9119/9Y488kjv008/9YLK5bK5zvW6o3zhrT/qLrx153r9uVw2/Bc9FgiFZcuWebVq1dpntojM3HHHHfZCtHr1ai/IXC6b61yvO8oX3vqj7sJbd67Xn8tlg+cVKegxHkB2aOGbhg0bmkceecTs2rXLDBw40A72qlChgmnVqpW54oorIvtqwNf48ePNiBEjzGeffWaqVq0a6DfZ5bK5zvW6o3zhrT/qLrx153r9uVw2GENggVCYPXu2+fvvv+3/zzzzTLN792672qZW6Pz+++/NggULzIMPPmi2b99uFi5caGeVmDp1qmnUqJEJOpfL5jrX647yhbf+qLvw1p3r9edy2cCsUAiJyZMne6eccor38ssve23btvVWrlwZGdA1cOBAr1mzZt68efPsNs11vWHDBi8sXC6b61yvO8oX3vqj7sJbd67Xn8tlA2MsENCBXbt37063ff78+V61atW8+vXre23atEn33PLly7399tvPe+utt7wgc7lsrnO97ihfeOuPugtv3blefy6XDRljgTwExt69e02hQoXMokWLzFNPPWXWrFkTea5u3brmxRdftM8pP3PGjBmR5ypXrmyaNWtmDjzwQBNULpfNda7XHeULb/1Rd+GtO9frz+WyIQuZBB1AvtO81uXLl/fS0tK8AQMGeH/88Ue65zXHdaFChbx27drZ/2v//v3729YPtXQEmctlc53rdUf5wlt/1F146871+nO5bMgYgQUCY8uWLV63bt28rl27es8//7y9GGk6utiLkeaxbt68uVe5cmWvbt263uGHH+7Nnj3bCzKXy+Y61+uO8oW3/qi78Nad6/XnctmQOWaFQmCo27Rp06a2C/Siiy6yU89dfPHF9rl+/frZx3LqqaeaJk2a2Fkltm7damrUqBF5LqhcLpvrXK87yhfe+qPuwlt3rtefy2VDFrIIPIB8b+WINnLkSNvS0adPH+/PP/+023bt2uUtWbIkdDXjctlc53rdUb7w1h91F966c73+XC4bMkZggUDSLBJ79+61/1fupd+NumrVKu/WW2/1OnToYC9a/j5h4nLZXOd63VG+8NYfdRfeunO9/lwuG/ZFYIHA0kXGn65OLR1Fixb1jjjiCK9IkSLenDlzvDBzuWyuc73uKF94UXfh5nL9uVw2pJemf7JKlwIKin96pqWl2VzMH374wXzxxRdOrMDpctlc53rdUb7wou7CzeX6c7lsiBITaACB7EZVd6m6T3/88UfPJS6XzXWu1x3lCy/qLtxcrj+Xy4b/YoE8hEKDBg3M7NmzzZFHHmlc43LZXOd63VG+8KLuws3l+nO5bDCGVCiEpgtV3acucrlsrnO97ihfeFF34eZy/blcNhBYAAAAAMgFpEIBAAAASBqBBQAAAICkEVgAAAAASBqBBQAAAICkEVgAAAAASBqBBQAAAICkEVgAQIpZunSpnUf+hx9+SPp3TZkyxdSrV8/s2bPHPr7nnntMkyZNTEEbPny4KVeuXK7+znnz5pkaNWqYrVu35urvBQBXEFgAgEO6du1qgwZ9FS1a1NSuXdv069fP7NixI7JPzZo1zZo1a0zDhg2Tfj397jvvvNMULlzYFJSDDz7YPPXUU+m2XXTRRWbRokW5+jr169c3zZo1M0888USu/l4AcAWBBQA45vTTT7eBw++//26efPJJM3ToUHP33XdHnlcQUKVKFVOkSJGkXuerr74yv/32m+nYsaMJmpIlS5pKlSrl+u+98sorzZAhQ8zu3btz/XcDQNgRWACAY4oXL24DB/VMnHfeeaZNmzZm8uTJmaZCffDBB+awww4zJUqUMCeffLJ57bXX7D4bN27M8HVGjhxp2rZta38mI3v37jX33nuvTSHScSlNatKkSen2WblypbnkkktM+fLlTalSpcwxxxxjvv32W/ucApdzzz3XVK5c2ZQuXdoce+yx5tNPP438bOvWrc2yZcvMrbfeGumpySgVSgFBnTp1TLFixcwRRxxh3njjjXTP62dffvllc/7555v99tvPvh96X6KpvH///beZOnVqhmUGgFRFYAEADps7d675+uuv7c10RpYsWWIuuOACG4T8+OOP5pprrjF33HFHlr/7yy+/tEFAZp5++mnz+OOPm8cee8z89NNPpl27dqZ9+/Zm8eLF9vktW7aYk046yaxatcrexOv1lV6lgMR//swzz7RjOebMmWN7Y8455xyzfPly+/zYsWNt0KLgRb00+opn3Lhx5uabbza9e/e274nKqN6Hzz//PN1+AwcONBdeeKE9Vr3upZdeagMJn95HBUcqOwAghgcAcEaXLl28woULe6VKlfKKFy/u6TJfqFAhb/To0ZF9lixZYrfPmTPHPr7tttu8hg0bpvs9d9xxh91nw4YNGb7W/vvv773++uvptt19991e48aNI4+rVavmPfDAA+n2OfbYY73rr7/e/n/o0KFemTJlvL/++ivbZWzQoIH37LPPRh4fdNBB3pNPPplun2HDhtnj87Vo0cLr0aNHun06derknXnmmZHHKu+dd94Zebxlyxa7beLEiel+7vzzz/e6du2a7eMFgFRBjwUAOEapTEpzUjpRly5dbMt8ZuMgFi5caFOMoh133HFZvs727dszTYPatGmTWb16tWnZsmW67Xo8f/58+38d51FHHWXToOJRj0WfPn3szFNKbVI6lH7W77HILv1MZsfhO/LIIyP/V1pW2bJlzfr16/cZv7Ft27aEXh8AUgGBBQA4RjfEhx56qGncuLF59dVXbYDxyiuv5PrrVKhQwWzYsCGp36Gb9MwoqFAa04MPPmjTjxSINGrUyPz7778mL2gmrdhxF35alk+pURUrVsyT1weAMCOwAACHFSpUyNx+++12Slj1MMSjgczff/99um0zZ87M8nerp0FrO2RErf3VqlUz06dPT7ddjzV1q99DoGAhehxD7L6aQlcDqhVQaFC6Bp9H07gHfx2NjKjHI7PjSITGaKjsAID0CCwAwHGdOnWyU8w+//zzcZ/XQOYFCxaY2267za798O6779pZlcSfZSkeDcTWlLOZ6du3r3n44YfNO++8Y1Ou+vfvbwMJDaQWzQalYEEDx3Wjrylyx4wZY2bMmGGf18xMGqCtn9HA7s6dO+/Tg6B1LKZNm2YHgP/5558ZHofKpJmhNHBca1Ho96pHJBEKavQ6mmkLAJAegQUAOE7rVdxwww3mkUceibtqtBbRGz16tL3RVg+Cbr79WaE0RWxGNGPSL7/8YgOGjNx0002mV69edjYm9Thoqll/alu/t+GTTz6xa05oFibt89BDD0UW3FMAcMABB5gWLVrY2aAUzBx99NHpXkMzQumGX1PJZpSipMBFM1RpdqoGDRrYtT2GDRtmp6tNxNtvv21OO+00c9BBByX0cwCQCtI0grugDwIAECwPPPCAeeGFF8yKFSsy3U89ARqkrRt112lchwKiESNG7DMQHABAjwUAwBgzePBgO65CqUhaOO7RRx+1M0plRT0bar2PTU9ykWai0ngVggoAiI8eCwCAXbla4yA0iLpWrVrm8ssvNwMGDLBpVAAAZAeBBQAAAICkMXgbAAAAQNIILAAAAAAkjcACAAAAQNIILAAAAAAkjcACAAAAQNIILAAAAAAkjcACAAAAQNIILAAAAAAkjcACAAAAgEnW/wFT7drU+z7e5AAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# === Rig Tester vs Training Flow GUI: which rigs take the longest? ===\n", + "# Adjust these strings to match the exact startup_type values printed above\n", + "df_rig_tester = df_good[df_good['startup_type'].str.contains('Rig Tester', case=False, na=False)]\n", + "df_training_gui = df_good[df_good['startup_type'].str.contains('Training Flow GUI', case=False, na=False)]\n", + "\n", + "print(f\"Rig Tester startup_type rows: {len(df_rig_tester)}\")\n", + "print(f\"Training Flow GUI startup_type rows: {len(df_training_gui)}\")\n", + "\n", + "# --- Which rigs take longest under each startup_type ---\n", + "for label, subset in [('Rig Tester', df_rig_tester), ('Training Flow GUI', df_training_gui)]:\n", + " if len(subset) == 0:\n", + " print(f\"\\n[{label}] No rows found — check startup_type label above\")\n", + " continue\n", + "\n", + " stats = (\n", + " subset.groupby('location')['startup_time']\n", + " .agg(median='median', mean='mean', std='std', count='count')\n", + " .sort_values('median', ascending=False)\n", + " )\n", + " print(f\"\\n{'='*60}\")\n", + " print(f\" {label}: startup time by rig (sorted slowest → fastest)\")\n", + " print(f\"{'='*60}\")\n", + " print(stats.to_string())\n", + "\n", + " fig, ax = plt.subplots(figsize=(max(8, len(stats) * 0.6), 5))\n", + " locs = stats.index.tolist()\n", + " ax.boxplot(\n", + " [subset[subset['location'] == loc]['startup_time'].dropna() for loc in locs],\n", + " tick_labels=locs,\n", + " )\n", + " ax.set_xlabel('Rig (location)')\n", + " ax.set_ylabel('Startup time (s)')\n", + " ax.set_title(f'Startup time by rig — {label} (after 2026-05-15)')\n", + " plt.xticks(rotation=45, ha='right')\n", + " plt.tight_layout()\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "c7576b3b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "============================================================\n", + " Rig Tester: effect of num_subj_scheduled (r=-0.27, slope=-1.67s/subj)\n", + "============================================================\n", + " num_subj_scheduled median mean count\n", + " 1 31.59455 32.530182 34\n", + " 2 38.35495 37.292775 72\n", + " 3 31.19780 30.849330 47\n", + " 4 31.90880 31.895062 63\n", + " 5 27.85075 28.204033 36\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAGGCAYAAAAAW6PhAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAA2lBJREFUeJzs3Qd4W+X5NvBbW957ZG9ICAmEBAohJJSw9+qgg1mglFUKtKW07NVSoHSwWkb7b/lo2Z3MsmfYYSRAyE4cO95L+3zX/TpyZUeyLVu2ZPv+XZei6D3y0dHR0dF7nvOc57VZlmVBRERERERERERERDKCPd0LICIiIiIiIiIiIiL/o6CtiIiIiIiIiIiISAZR0FZEREREREREREQkgyhoKyIiIiIiIiIiIpJBFLQVERERERERERERySAK2oqIiIiIiIiIiIhkEAVtRURERERERERERDKIgrYiIiIiIiIiIiIiGURBWxEREREREREREZEMoqCtiIiIiIhIH+27777mJiL6zkj/cT+688479/q8NWvWwGaz4b777hvy1c3X5Gu/9dZbg/5aJ598MiZPntyvv73iiivMcqaSfusyg4K2IiIiIiIyakUPyqM3p9OJcePGmQPojRs3Duprx75uT7fnn39+wK/V1tZmDuxTMS9J3r///W+z/gdDJny2H3/8sVkGBthERCQ1nCmaj4iIiIiIyLB11VVXYcqUKfD5fHj99ddNMPfll1/Ghx9+CK/X2/m8p556KmWv+X//939dHv/pT3/C008/vV37rFmzUhLYu/LKK83/lSmcnqDt7373u0EJ3GbCZ8ugLZeBr989WzCV3xkZfSZNmoT29na4XK50L4rIkFPQVkRERERERr1DDjkECxYsMOvhO9/5DkpLS/Hzn/8cf//73/HVr361c/243e6UratvfetbXR4zWMygbff2TNba2oqcnJx0L8aoFIlEEAgEkOlS+Z0ZThhMz87OTvdiDHu82iD2xJnIaKLyCCIiIiIiIt3ss88+5n7VqlW91vlbu3YtjjzySBO8LC8vxwUXXIAnn3wyJaUNGJj71a9+hdmzZ5vARUVFBc4880zU19d3eR5rLh500EEm2JyVlWWyhk899VQzjZesl5WVmf8zGzJadiE263PFihU4/vjjUVxcbF6HAWwGrOOVknjhhRfwve99z7zX8ePHdwaoOI+t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Hvry2f75z3+2pk6daqbtuuuu1pNPPtnjOrjpppvMeuXy7LPPPtb7779v9cXvf/978zoOh8PMi9tEvO9MdFt58MEHu/x9ou0rui5qamq6tPM7tmjRIisnJ8fcuO64flauXNnjckbn9/HHH1vHH3+8+U4VFRVZ55xzjtXe3r7d8/vyOom26US4/jmvRMsWi+/7uOOOs7Kzs81ynnnmmdaHH35onsd11ts8k/2+JfLss89aRx11lDV27FizLfGe+51PP/20y/O4L9l///3N9lNRUWH95Cc/sZ5++uku20TscnE/tddee1ler9cs029/+9su84tum7HvtTd33nmntXjxYqukpMQsB/fhF198sdXY2NjleWvXrjX7PX4v+Txuv/xs/X5/j9tkdBuOfT/R9oMOOsgqKCgw74eve/LJJ2+3L+Y2NWvWLPOaO+20k/XII49s951M5rOPt90k8x257bbbrClTppjlWbBggfXiiy/G/a2ToWfjP+kOHIuIiIiIiIwkzFC84IILTKYqR5UXyWTMxmP9yxtvvHHQs0fTjZngvGycl6yXlpame3GkFxzkjxngHOSLAxCKjCaqaSsiIiIiIjIA7e3tXR6zpi3rMs6YMUMBWxGRAYjW2laAXUYj1bQVEREREREZAA76MnHiRFPXk/U8WRuTgz+xtq2ISKarqqrqtW4ya6wOtXvuucfcONgea+VysKx4A6LF4nJyeUVGAgVtRUREREREBoCDPP3hD38wQVqOlM5BoTj4Dgd1ERHJdBxAsScnnXSSGZBxqHHALA5QxsHBODDY888/bwY87AkH0Tr55JOHbBlFBpNq2oqIiIiIiIiIjFLPPPNMj9PHjh1rTkalW319Pd5+++0enzN79uxeg9Aiw4WCtiIiIiIiIiIiIiIZRAORiYiIiIiIiIiIiGQQBW1lRNt3333NTWQwrFmzBjabLS31nSSzTJ48GYcffnivz2MdLm4zvB9qV1xxhXntrVu3ZvS+lzXIuD5TifNTbTMREUm1X/ziF5g5cyYikUiXvuEvf/nLlL1GMvPkb11ubm6f5st5sm8wVNRvHnp33HGHGSDR7/en4dVFJBUUtJVhhcExdjCiN6fTiXHjxpkOysaNGwf1tWNft6dbKoIxbW1tphOVjsBOf1x33XV47LHHBmXer776qlkXDQ0NSJf7778fv/rVr9L2+iIiIiKS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r8w+IQPE7Af0dfBSvgeepI8VLVnlcDgS/h3XJ9/bs88+a/qh7Cfyc2BfkkFzHvcwMMv+D48pub54Ap9JQUw+YZ8+egzRH73123o6FovidjqQfr6IpJElMozce++9PFVpPfPMM1ZNTY21fv1666GHHrLKysosj8djHsdasmSJuUXddNNN5u8fe+yxzrb29nZr5syZpv25557r87KcffbZ5m+iXnrpJfP4L3/5S5fnPfHEE13aH330UfN42bJlCefN98bnXH755dtNW7p0qTVnzhzL5/N1tkUiEWvhwoXWjBkztltXixYtskKhUJd58H0mmn+sd9991zzvwQcf7PF5OTk51kknnbRde1tb23Ztr732mpnnn/70pz4t64033mimrV69uks7H7Odf9td9/fG/7PtyCOP7PK8733ve6b9/fff7/H9HXbYYdakSZO2a4+3DFwPbLvuuus62+rr662srCzLZrNZDzzwQGf7ihUrtlvWq6++2qzPTz/9tMtr/fjHP7YcDoe1bt26hMvZ2NhovgcXXnhhl/Zf/OIX5rXXrl1rHt9yyy3mdbmdpQK/Y90/U7/fb1VWVlrHHXfcdp9z988yuj3Gfv+i87z//vu3W192u916/fXXO9uffPLJhNtCIueff76Vn5+/3fYWK7rddBfvfXD7YNvDDz/c5fMYM2aMNW/evB7fa2922WUXsw32ZPHixVZeXl7nZxy7b+j+fk499dQuzznmmGOskpKSzsdr1qwx29q1117b5XnLly+3nE5nZ3sgELDKy8utXXfd1XzeUXfddZd5ndh9bzKfPb9Dsd+3vu5bq6urLbfbbdZV7Pv+yU9+Yp4Xbx8lIiLSHz/96U/Nb0tzc3PcviH7fRs2bOhsf+ONN0z7BRdckPA4JdHvYDLzjPZDzz333M42/ibyt5G/kbF9v+590NNOO830W7Zu3dpleb7+9a9bBQUFcfv1UX3pW/bUd48u5+GHH27l5uZaH330kWnj+i0sLLROP/30Ls+tqqoyy9S9PR72qXfeeWfz2uyzsJ+zZcsWc+zENvYzenLPPfeY5918881xl5l4bMnnXHPNNV2mH3/88aYP/vnnn/f7+KW3fltPx2JRZ5xxhtl+RGT4UXkEGZZ4KRLP/jKTixl2zGBkeYDo5f+J8EwzM1R5JjSKl7icfvrpA16mBx980GSeMvONZQeiN16SwszMaDZvNEON2aq87DkZdXV1+O9//2vOuPIMb/Q1amtrzdlnZvrxbG4svrfuZ4+Z6cq+QU9ZtsT3QzxTHO/y6d7w0q0ovlcuJy9x5zrgmeLu4i1rKjEzIRazh+nf//53yl+LZ7yj+H55iRS309iay2zjNGYnxm5HzJhk1njsdsRtnmf6X3zxxYSvyewBZrUy8zr2Uqy//vWvJnOCWbvR5SFeJtVbyYW+4jYeW9+ZWQs84x/73vozT2Y0dF9fzMxgaYSo6P+TeS3Oh9nc3UsMDAQvP4zNdOfnwcxnZoFUVVX1e75cVmaw8PsdD7NguV3wcsboZxwVr7wDM4FjcXvjd5MZKMSsf24X3FZjt0Fm2rNEQ3RfxmxfXjnA+cXWD+cledF9Ryr0dd/KEhnMqO0+0EZPmUEiIiL9wd9Np9OZ8OorXgHHY44o9onYXxlInzOZeTJTNiqaOcvfyETlpNhv5BV7RxxxhPl/7O8tjzF41Vm8vntUKvqWV199tTk+4pU1LDFF7Kcx+5ZXR8UuE48X+N77crUkr+T74Q9/aObDK4Z4VRgzd2fOnGn6MbyCsSdcL7zaL3rcECva3+BnwGXi1UCxWC6B65MZy/3VW7+tL3hcwazi/hzPiUh6KWgrwxLrg/JHnJdg8xJY/njzMpze8DJxXi7SPZDBQOJAMaDCDg0vV2FAOfbW0tJiOgXES99ZI5Y1KtkBOOqoo8xl1CxB0BteZsQffl623P01eNkTRV8nKnrZfX/wb3mJEi/D4bKy08Z1H61n2xt2Dni5crS2E+fBZWWnKd48BrKsfcGAUyxuCxwYKl5t0oHgiYBoXeIoBp14UqH7tsf22Lqc3I54cqH75xutmdb98+2Ol+ezTMBrr71mHvMS+bffftu0xz6HHVQGlnk5HQOjDPQOJIAb772xg9i95uhA58n11f2y+2iAMJnXYgeedckY5ObrMODJ9T4Q3I90X16+Bg1kG+NlhvzOcF4sN8FL7VgOISoarGYN4L7oHtiNlpWJrj9ug9zP8PvSfTtkCYnoNsj9abzvFUsVJKqtPJj71kTLw+f1VjpHREQklbr/FhF/xwfSH+jrPNm37f473Ft/hCeA2ddgnfruv7UsTdRbH3SgfUv2wXhsxHJgPE6Kip6wZhmI7svFcQR66xczaYTv7dvf/rbpL7LMGJNKWAri97//vZlPvBPcsdiXZuIAg/SJsA/Ck/fdy3Qx0SA6vb9667f1RTSZo7f3KiKZRzVtZVjimeXooEo868yaRqxtuXLlyl7rjQ4WdkoYVGC9zXiiQTz+WDLYzBqjrDfJLFYGjG666SbT1tPyRzs+F110kQmgxtM9AB2b7dofXC5mzvHMOTtHPIMcrQnbW2Yzz0gzIM1MN9ZtZWeJ758duXiduGSWNVGng9moA53HQCXKFk7UHpsVy/XCjEJmBMQT7XQnwgwJ1gpmR5l1RnnPzjtrq8auZ2ZmMjuBg6yxo8xsXHaI+Rn3J9u5L+8t2c9sIOuxN/yuvvfee+b7x+wH3ritMjOWAzn0Z3kHC7NCeMAQ/Q7yJApro7EmcmxGd1/1tv64DfK9c53Ee25/9rEDWZd93beKiIgMFQ4KyhqxvPKtr/X04/02xuu7DHU/g6L9cl41xSzUeKLja8QzkL4l69RzvAf2f1mXPt5ysW4rr/jprqdAarw+CP/P4CoTGhjQ7UvSTyr1pz+Uin4vA7w8PhjocaGIDD0FbWXY4w8Zg4gcWIsD03BwrkQ42ioHwOKPXOyPJjNYB4pZm7zkiGeZ+/KDyMvVeeOAPxwMjZ0VjmbPIEyiH/ToWXNmsvU0Wm2qMbuPt5/+9Kdm4AW+RwaMoh2rRMvL4DQ7fgz8RnHgBJ7J76tE846eZe4+r57OZPNsfWw2Lz93dgZ7G8BgKM9Kczti9mB/P1+WYOBgCbyk/OabbzYdZl5GxQ5qLAZyOQgXb3zeddddZwZJY2d7sLat/nxmg4mX9DPIzRu3A2bf3nnnnSaTnSc/Ypc3etlfT8sbzYSP3V44kB71dZCMRDiwFzNdeOP2wUAuy5twfxHdLyQaQTpZ0QE1+F3p6SQB96fR7xUPyqJ4EMQDsF122SUln31f962xyxObYcQMm4FkfIuIiHTHS+uJv3fxgpnxShqxTxDbH+BvY7zSTol+G/syT2KfhvON/Q3vrT/CE6AMPjN42N9+YH/6lrwqj+UK2M/iwMOcR6zogFo8eduf5eIxE/tQDPqyv8cT30zy4bph9i0zi2P7ePFwGd544w3Tv4kOfBqvD8K+Svcg/ooVKzqnD2ZfuLdjFW6n0axfERleVB5BRgTWaGX2LS95YVAwEWansuYr699G8fm8PGagWP+RHR3WY+qOZ+KjP84MHnQ/M8oRRilaIoFnQuP9oLPDwvfKwNLmzZu3ex0GJ/qC9YzYiWBZiZ6wVhKXPRaDt+xQxZZzYKAwXiCWAfXu75Uj0CeTQcB5U/f5s14oyy10r/F62223JZwXSzt0XxbiJfK9LUNfS0KkYjtiaQNmgHbHddD980h0idqmTZtMx/T999/vUhohWhu5u+7bIHEbWbduHVIl2vGO/cy4LbDDPNRYCywWt+noQVd0HcRbXtbBjWbidsd1/uijj3b5/nCkZ67beNkh/V1WZroyqBxdTh5oMYh7zz33bPd5JZOFEcWDJ353eZli97/n4+jy8GoHvjZP4LBOXhRr0XX/vg7ks+/rvpUHczyY4vc6drn5uyAiIpJKvIIsWt89nscee6zLOBNvvvmmCfzF9jn528i+Vmz/nf22V155pd/zjGIiSxR/E/mYv5EMqMbD332WJWD91ngngXs7xuhr3zJevVYGlNl/ilfKiMdu7PMzABxvLJC+HPuwr8ErlDh/9o2ZJMMgLo+l2Pbyyy/3+PdcLzxmil2nUdH+Bsv1sa/S/Tl8XQZUo59Rf45f+iLRsVgU6xHzCjwRGX6UaSsjBus88hJwBgy6F2yPOvPMM82PKYvZn3/++RgzZoy55JY1SAeaUclatZw/s3552fWBBx5oOkc8K86sx1tvvdUMmsaAD3+YOWARO2s8I8ugMX/E+YNPzCZjAX5mSfJMMM8Qs14lbww8shwEg6ccuIsZZazLxEDfhg0bTGevN+zkMTOZdXB7GoyMg55x4AKuVy4HAyTs5EQ7dlEcEIhnl3lWnRmdzNDj4ADM+OTzWRaB74fLyOfxkrK+4ryJZ+pZVoHrlGfK2TlhluENN9xg7hlAYgcomkmQ6CwzB6E7+OCDzbL8+c9/NmU1YjMCEy0DPwvW9919991N0IzLMFjbMU8qcN2xLAVfm4HC5cuXm8xl1iJjZ68n3I54lp9lNLp/VtEaqVxXhx12mDnzz3pg3CZZ7oLbVhTPyHO7fv7551Py3mbPnm2yy1mvjJ17btfsOPclEJ1q3Ga4DMwQ5ftmhgODfTzAiGYi8DvMOmKnnXaa+Vy4LhkYZaAyXjCb3xE+d9myZaaeG5/L7ybLLgwEvzs8WcNtgeuMB4jcFmIHGfn1r39tPrvddtsNZ5xxhvkOclvhJYrcHyWD+yVm0fNz4jxYgobbE78/PKji/Llt8bvI53G/x/XIkwN8Dt9v91p6A/ns+7pv5efC5eLz+P3h94CDwLHMQ2/fGRERkWTwd479cvZrWeasO55c5e/yWWedZYKWPIHI/m9s+Sv+HfvODEyy/8D+GE+E8jcz3iBTfZkn8biG5Ql4tRv74/wdZH/gJz/5SY8lhdinZlYs/4bHGOx/8DebAT++z3iB2WT7lrG4TDy5zX4qa/XH1utnX5v9Dx4f3X777SYrln0cHgtE+2H8e16FEy+Y2r1fw/fArN7YK3Zeeukl8556K2/B0llcTh4H8BiKV7Cxb851wqu0OD4Jjwt4bMXjFfadeGzBshAsbcUycdGT15Ts8UtfJDoWI5aC4PvkcorIMGSJDCP33nsvT2day5Yt225aOBy2pk2bZm6hUMi0LVmyxNxiffHFF9Zhhx1mZWVlWWVlZdaFF15oPfzww2a+r7/+ep+X5eyzzzZ/091dd91lzZ8/38w/Ly/PmjNnjvXDH/7Q2rRpk5n+zjvvWCeccII1ceJEy+PxWOXl5dbhhx9uvfXWW13m8+qrr5r5uN1u8zqXX35557RVq1ZZJ554olVZWWm5XC5r3LhxZh4PPfRQn9bVc889t9084+G6OvXUU8069Xq9VnFxsfXlL3/ZeuaZZ7o8b8WKFdbixYvNe+Z8TzrpJNNeX19vnXLKKVZpaamVm5trHXTQQea5kyZN6nxOb8tKV199tXmPdrvdPG/16tWmva2tzTrttNOsgoICs66/+tWvWtXV1du9N/6fbR9//LF1/PHHm+cWFRVZ55xzjtXe3m71pqWlxfrGN75hFRYWmvlw+YnLwcdc/ii+r5ycnO3mwe1w9uzZ27VzXtweYzU3N1uXXHKJNX36dPP5c/0tXLjQ+uUvf2kFAgGrL775zW+aZdt///23m/bss89aRx11lDV27Fgzf95zm/z000+7PI9/3/37E0+i98Z1EV1Xsdsul4nbfkVFhfWTn/zEevrpp81rcbvsz/qKLiu/k33F78qBBx5ovn9cB/w+nnnmmdbmzZu7PO/tt9+2vvSlL3U+5+abb+7cXqPbYexyPfnkk9bcuXPN+5s5c6b14IMPxv3uxb7X3lxzzTXWHnvsYbY/fsc432uvvXa7beHDDz+0jjnmGPM8fl933HFH62c/+9l234Oampoufxfv/RD3i4sWLTLbM298Xa7jlStXdnnebbfdZk2ZMsW85wULFlgvvvhi3H1vXz/7eNtNX/at0d+BK6+80hozZox53r777mvWS/d9joiIyECxT8D+LfujUdG+4Y033mjddNNN1oQJE8zv3j777GO9//77283jz3/+szV16lTTz9h1111NP6L772Ay84z2Q/mby35Odna2+c1lH4C/kbHiHQts2bLF/NbzNXiMwWONpUuXmt/gnvSlb9m93xztf8S7de8HsJ/A4wj2+dnH4bHJySefvN3x02DhZ3zppZea/k50vfCYgus5tv9+wQUXmPfO58yYMcN8ZpFIZLt5JXP80pd+W6JjMfrRj35k+rDdl0NEhgcb/0l34Fgk3Xim+oILLjCZquPGjUv34kiKMZuYl3rzEipl3Ek6Pfvss+YyfmZ3JMo8ERERkczH0lnMuP3FL35hMmVFMg0zslnHmGO+8CpTERl+VNNWRh1eGhOLNW1ZI3bGjBkK2IrIoIrWotbJAxERkeGN5b9YmuDGG280g3+JZBqWrGJJqUSlA0Uk8ynTVkYdFoJnnUrWruQZctY1/eijj0xtW9Y3lZFHmbajBweB6G1QCtZJ420osfYZ9zGsv8o6dayhy+yH3ga4Y+1Xt9s9ZMspIiIiIiIimUEDkcmow2L/HDmUARQGeFhknwPicBAdERne1q9fbwZf6ElvA/ANBgaSzz33XDOAILMe7Ha7GdzulFNO6fHvOCAIByETERERERGR0UWZtiIiMmKw3MnLL7/c43NYf463TCiVwCz/3kYDLioqGrJlEhERERERkcygoK2IiIiIiIiIiIhIBtFAZCIiIiIiIiIiIiIZZMTXtOVInps2bUJeXh5sNlu6F0dEREREBsCyLDQ3N2Ps2LGmPvRooP6siIiIyOjrz474oC0DthMmTEj3YoiIiIhIigceHD9+/KhYp+rPioiIiIy+/uyID9oywza6IvLz84csG4IjhZeVlY2aDJC+0rrR+tH2o++W9j2ZR/tmrZvhtO00NTWZE/LRPt5ooP5s5hnp+832QBiXPbYcn1Q1Y3xRFhz2vl+xaIOFMmcANSE3LPT97/zBCDY3+XDozmPwvS9PG7FXSY70bWegtH60brTt6Ls1GvY7TX3sz474oG30x54B26EM2nIEc76efoi1brTt6Lul/U76ab+s9aNtZ+R9t0ZqQCce9Wczz0j/XXn01dX4rDGCSZWlcDuTe38M2npcfriDnqSCtu4sIOLKwktrW7FkaxALp5ViJBrp285Aaf1o3Wjb0XdrNO13bL30Z/UrISIiIiIiIsZHmxrx8DsbkedxJh2wHaiCLBeC4Qj+8NJqNLQF9ImIiMiopqCtiIiIiIiImIFR7nt1DVr9IZTkuNOyRsYWeLFmaysefXejPhERERnVFLQVERERERERrKhqxsebmlCa40lbCRKnw45stwNPf7wFbYGQPhURERm1RnxNWxERkVjhcBjBYFArpVsdJ64T1nJSfb2utG6Gfv24XC44HA59R0XS4L8rqtEWCKMiz5PW9V+c48amhna88nktDtipIq3LIiIiki4K2oqIyKi55LOqqgqNjY3pXpSMXDcMvjU3N4+qwZ36QusmPeunsLAQlZWV2h5FhlBjexDPraxGvteZ9u+ey2Hn6Cx46qMqBW1FRGTUUtBWRERGhZaWFoRCIZSXlyM7OzvtB6SZFnjjunE603+gnmm0boZ2/XB+bW1tqK6uNo/HjBkz4HmKSN98Xt2CpvYgKvO9GbHKGDw2y+QLIt/rSvfiiIiIDDkFbQcBOxZ1LX5484MozE7vpUUiItJREoGXbzMAVFJSolXSjQKTiWndDP36ycrKMvcM3PIki0oliAyNtbWtCEUsOO2ZcfKOdW23tgSwdmsb5owvSPfiiIiIDDkFbVPIHwrj5c+2YvmGBtj9TYis9mHO+EIsmlEKj1O12URE0oU1NxlQYoatiGS+6HeV310FbUWGxuqtrWC4NlOuuHA77AiGI1hb16qgrYiIjEqpGTFCDAZsX/y0Bg6bDcXZbnPPx2wXEZH0y5QDURHpmb6rIkNvVU0LPE57xu0HOCCZiIjIaJQ5v8ojoCTC8o2NKM31oCTXY4rn8543tnO6iIiIiIhIJmoPRGDPsJOblgUEQpF0L4aIiEhaKGibIi2+ENoCYeR6u1acyPM6TTuni4iIpNLJJ5+Mo48+Wis1g02ePBm/+tWvBvwcEZHBFrEsZFjM1ghHrHQvgoiISFooaJsiDNayWH734GyzL2TauwdzRURERisOCseA85w5c8wAVskEnv/1r3/hS1/6khmsqqioqMvf3nfffeZy2ng3DmrVVy+88AImTJiAobJs2TKcccYZyJTP5uyzzzYD9uXm5uK4447Dli1bEj6fNWcvueQSzJ07Fzk5ORg7dixOPPFEbNq0qfM5zz//fMLPhe9dRDKDy2Ezma2ZxunQIauIiIxO+gVMkXyvC3PGFWBri9/cWDSf97UtftPO6SIiIgKEw2ETdD3vvPOw//7793mVPPzww/j2t7+NU045Be+//z5eeeUVfOMb3+ic/rWvfQ2bN2/ucjvooIOwZMkSlJeX9/l1Hn/8cRxxxBFD9lGVlZUNaJA8y7IQCqXmip4LLrgA//jHP/Dggw+a4DWDr8cee2zC57e1teG9997DT3/6U7zzzjt45JFHsHLlShx55JGdz1m4cOF2n8t3vvMdTJkyBQsWLEjJcovIwLGsWyCcWaUImPmbn6XjKBERGZ0UtE2hRTNKsXiHMnNpUV1bwNzzMdtFRET646GHHjIZqQxyMvuRQc7W1ta4z/X7/SYQygCl1+vFokWLumQyRjMema3KzEg+Z88998SHH37YZT4vv/wy9tlnH/OazDjlPBO9Zn8wI/P222/H6aefjsrKyj79DYOS559/Pm688UZ897vfxQ477ICddtoJX/3qVzufw+Xl/KI3h8OB//73vzjttNM6n8Ng75e//GXk5eUhPz8f8+fPx1tvvdXltf7+9793Bh25/ufNm2eCqt3X/7777ovvf//7Xf6Wmb/MIo7V3NyME044wbzvcePG4Xe/+92AyiNEP8f//Oc/Zvk9Ho/5zAaqsbERd999N26++Wbst99+Zt733nsvXn31Vbz++utx/6agoMAsBz+HHXfc0WxPv/3tb/H2229j3bp15jlut7vL58L1yMA4g+8acEwkc+xQkZdRpQiiyzK5pP8ntURERIYzBW1TyON0YOmsCpy892TsP7Pc3PMx20VERJLFjEQG+0499VR88sknJljHrEdmVsbzwx/+0GSj/vGPfzRZj9OnTzeZpnV1dV2ed/HFF+Omm24yAV1meTJAycvcadWqVTj44IPNZfEffPAB/vrXv5qA4DnnnNP59wya8tL5nm6pxvezceNG2O12E0QdM2YMDjnkkO0CzrH+9Kc/mWDr8ccf39n2zW9+E+PHjzfvnYHFH//4x3C5/pfF9dFHH5lSCgxacv0zk5dB2I8//rjX9Z8IA8277LIL3n33XfN6DD4//fTTGCjO64YbbjDbBoPwL730Uq+fy1/+8peE8+P64HYQm/08c+ZMTJw4Ea+99lpSwV8GYwsLC+NOZ1C8trbWBG1FJHNEg6NMPMkEvmAYWS4HJhXnpHtRRERE0kKFVgcBSyH4cj0qiSAikul4aXZV1dC/LrNLu2V3xsOgITNMGSicNGmSaWPWbTzM/mT2Kuu6MphJv//9701wkNmTDNRGXX755TjggAPM/xngZRDzscceMwHi66+/3gQ2oxmkM2bMwK9//WtTYoDzZ3buVVddhYsuughD6YsvvjD3V1xxhckEZXYqA8/Mdv30009RXFy83d/wfTPoygzcKGZ/cl0wGBl9f7GYAcpAN7NDo+uf2bN8PQYiE63/nuy9994mwErMEGZZh1tuuaXzM+gvfg6x82CpAZYq6ElFRUXCaVVVVeZ9dw+28m84ra81cX/0ox+ZbYmZzPHwc+E65nYnIpljcmkOvC4H2gNh5HjSf5jYGgghL8uFsYXedC+KiIhIWqT/11hERCRdGIjauDFj1z+zM5cuXWoChQxyHXjggSZrlANwdccMWWZJMkAYxQzSPfbYw2Rixtprr706/89gJy9rX7FiRWf5AGbYxmZkMrM0Eolg9erVmDVrlim/0NcasbNnz8batWvN/1lygZfS9wdfny699FKTBUy8dJ+BP9ZfPfPMM7s8n5mhfN//93//16X9Bz/4gamnynZmlH7lK1/BtGnTugRto1nF0fW/22679br+exK7vqOPkymHkEj3erAMTjO7ui+uu+46c4tiJvFAcftjmQRuLwzwx7NhwwY8+eST+Nvf/jbg1xOR1JpckmNun1U3pz1oy/1Iiz+MQ3Yeo4HIRERk1FLQVkRERq8+1lNN1+uyJiszZVlT9KmnnsJvfvMbE7R84403zCBOg6GlpcUEQFnHtjteJh8tj/DnP/+51/nQv//9787SC7EZr8liOQRiHdso1nKdOnVqZ+3UWH/4wx+w6667mrqssZipy+xb1vVlAJlZxw888ACOOeYYk1nLEgaHHXZY5/rnemfZgWeffXa79c9SDd1LJUTf61BgjdxYXM5olnUid955p8mk5mcYWw947Nixpt5sIBBAQ0NDl2zbLVu29Fp7mO+bA8ExQM86womybBloZ03b2IHKRCQzOOw2HDKnEiuebkIoEoHTnr5KegzYZrs7Ss+JiIiMVgraiojI6NWHEgXpxkvymT3L22WXXWbKJDz66KMmYzQWs0V5aTsvvY+WUmAgjbVbuw+WxUGlogHY+vp6U14gWi6AWaXMuuwpYzOZ8gjRZRmo6IBbK1euNAOsRd/fmjVrtnsNBoyZyclSD/GwRAFvF1xwgbmMn4FEBm3/8Y9/YOHChV1KLXD9s23x4sUmwBu7/lkPmIHeqHA4bGrscqCzWN0H8eJjZiynWjLlEfgeu5eU4DpmdjYD1NFsZq5vBsW7ZwvH4ufAQPBnn32G5557zgRl42GAm+v6xBNP7FJHWEQyxz7Ty/Cn19airjWI8jxP2pajrtWPeZOKsENF6muki4iIDBcK2oqIiGQoZnQygMbL8lmOgI9ramriBvyYdXnWWWeZeq0MxjEo+4tf/AJtbW047bTTtgu6MrDGAB4zR0tLS3HUUUeZaaxHuueee5oSASwjwPkyiMuM39/+9rfmOcmUR0iE82RWJwdJa25u7gw2MjuW3nzzTRPc4/sfN26cydxkdigDpxMmTDDBUw7wRSxxEIuDp7EW7be+9a0u7e3t7Wb9sMQBM2V5qT6D2tEAJQfIis0A5fp+5plnTIkEZvpymWLXPwcrY/CWWbsMmrPWLrNUu2MgnZ8Fa+NyPbKcA/8m1ZIpjxBPQUGB2Vb4nrgNcZ2fe+65JmDLbSKKAX4GxBnojmbY8vP75z//aQLX0fq3nAdPJEQxA5clNrhdiUhmKsh24ZCdK/F/r69FIOSC2zn02bZNviBcDjuO3nWcOXEmIiIyWiloKyIikqEYNHvxxRdN/dOmpiYTqOTgW4kugb/hhhtM7ddvf/vbJhDKzEvWD+1eg5XPO//8801mJIOkDFZGg2tz587FCy+8YIK5rEHL7EgGJBmYS6VDDz20s9YtzZs3z9xHyw0w2Mwsz9hyAwzSOp1O8/4YgP3Sl75kAoHd3x8HuuLgbd0H1GK5g9raWhMM5iX/DFbzeVdeeaUZyI0B4thas1z/LDlw6623xl3/p556qqkBzPlxuZi52z3Lli688EK89dZb5nU4TwZ3WSM3kZNPPtlkED///PMYahwgjWUfGMj2+/1mOW+77bYuz+Hn0tjYaP6/ceNGE6yNDbhHMeuWA8XFfi7MWo5mdYtIZvrqgglYtroOK7c0Y1Jx9pAGTsMRC1tbAjh0zhgsnBY/a19ERGS0sFndi7GNMDzIYuYIDy4S1VdLNR4wV1dXmywkHviI1o22HX23tN9JLwYAv/jiCxN8HEhd1eGOQUAGFVkSITagya4AM1MZeBytWU2PPPIIfvrTn243INdQrBtm8V599dWdGahLliwxnxPr72a6wVo/Pp/PZOUyI9rr9aa9b5du6s9mnpHe339/fQN++tiHcNiAktzkyiTYYKHc5Ud10AMLtqT2J+vr2zG2MAu3fG1XFOf8L1N/JBnp285Aaf1o3Wjb0XdrNOx3mvrYn9WvxGCsfF8QdS1+cy8iIiKZLzc3Fz//+c+H/GQCyyUw63f27NmmjR23VatW9blmsIjIYNhlQiGOnz8OrYEwmtqH5phmS5MfWS4HzlwydcQGbEVERJKh8ggp5A+F8fJnW7F8QwPs/iZEVvswZ3whFs0ohcfpSOVLiYiISAqxbvBQu+uuu0yGLQeKiw70xTPurLUrIpJu39pzMhrbQ3j8vY3gpZkFWYMzgCAzbKuafLDbbDhr32lYOK10UF5HRERkuFHQNoUYsH3x0xqU5rhRlO1GfcRmHtPSWR2jNYuIiKQL64uO8KpIwwqDtbyJiGQih92G7+07DU67DY+9txHtwTDK8zwmuJoqoXAEGxt9yHY78L19p+PgnStTNm8REZHhTuURUoSlEJZvbERprsfUfeKIp7znje0qlSAiIiIiIsOJ02HHd5dMMwHVLLcDa2rb0B4Ip2TeDW1BU8OWg5399LCdFLAVERHpRpm2KdLiC6EtEMaYgq6DZeR5ndjc6DPT872Dc0mRiIiIiIjIYLDbbTh63jjMm1iIO15YhbfX1sNqAUpy3CZDNplBCCOWhab2EBraA/C6HDhq17E4eeEUFGTrOElERKQ7BW1TJNfrNJ0WBmc9MYXzm30h087pIiKS/pFBRSTz6bsqknkmleTg6qN2xn9XVOM/H1ZhZVUzqpv95liHNw4ixszcWCzJEwxbJrmlLRCCPxQxx0VLdijHYXMrsdvEoqSCviIiIqOJIokpwizaOeMKTA1bdk6K7RHUtfhR2xrA4h3KlGUrIpJGbnfHybTNmzejrKzMPNZB4v/wdysUCsHpdGq9dKN1M7Trh/MLBAKoqamB3W7v/O6KSGZgUPbA2ZU4YKcKfLSpCf/9ZAveXteA+rYA6tuCJpPWbrOArBDWtocRsQCn3W5KKzDou3B6Cb68YzkmFGen+62IiIhkPAVtU2jRjI6RTpdvaEBdWwARj9cEbKPtIiKSHgz+FBUVIRgMYtOmTfoY4gTKmNnI9aRgttZNJmw72dnZmDhxopmviGQeft93HldgbtwPMON2zdZWbGxoh481b30NsGUVIsfrMjVrJ5VkozBbJ2FERESSoaBtCnmcDiydVYH5kwqxaVMVxo6tRGG2J5UvISIi/eRwOFBZWWkCTOFwagZRGSm4Tmpra1FSUqIgmdZN2rcdfleV9S0yvAK4Fflec4vuF6qrPSgvL9dvioiIyAAoaDtIpRJ8uR6VRBARycADS5fLZW7yPzzA5jrxer06wO5G66ZnWj8iIiIiIoND15yJZJAmX9DUQua9iIiIiIiIiIiMTsq0FckA/lAYL3+21dRDtvubEFntw5zxhaYeMstuiIiIiIiIiIjI6KFMW5EMwIDti5/WwGGzoTjbbe75mO0iIiIiIiIiIjK6KGgrkmYshbB8YyNKcz1wOGxobA+Y+5Jcj2lXqQQRERERERERkdFF5RFE0qzFF0JDWwBf1LRiXW0LxnuD2OBrwsSSXEwtyzHTObidiIiIiIiIiIiMDmnNtL3iiivMSN6xt5kzZ3ZO9/l8OPvss1FSUoLc3Fwcd9xx2LJlCzKdBpOSZOR6nfhwYxPeXVePZl8Q4Yhl7vmY7ZwuIiIiIiIiIiKjR9qjQbNnz8YzzzzT+djp/N8iXXDBBfjXv/6FBx98EAUFBTjnnHNw7LHH4pVXXkEm0mBS0h8M0G5uaDPBWrvTDqfDBrsNCEUipp3TlWkrIiIiIiIiIjJ6pD1oyyBtZWXldu2NjY24++67cf/992O//fYzbffeey9mzZqF119/HXvuuScydTCp0hw3irLdqI90DCZFS2dVpHvxJEOtrmlFMGyhIMuFiGUhFA7BbneiMMth2jl9XGF2uhdTRERERERERERGS9D2s88+w9ixY+H1erHXXnvh+uuvx8SJE/H2228jGAxi//3373wuSydw2muvvZYwaOv3+80tqqmpydxHIhFzG9TBpDY0mIBtSY4bDr8PJVluWIBpnz+pUNmS2z4Hy7IG9bMYbrLdDjgcgBWOwALXjQXL4nqymQHJOF3rq4O2n8S0bnqm9aP101/adjJv/eg3UURERERGg7QGbb/0pS/hvvvuw4477ojNmzfjyiuvxD777IMPP/wQVVVVcLvdKCws7PI3FRUVZloiDPpyPt3V1NSYGrmDpa7FD7u/yWTYhtvaEA60AuEIiu021LUFsGlTFXy5Hox2PNBiFjUP8Oz2tJZUzhiFthBmFwI1zQE47EBFloVgJMLNB2V5HhTa2lBdHUj3YmYEbT9aN9p29N3SfiezpGO/3NzcPCSvIyIiIiIyaoO2hxxySOf/586da4K4kyZNwt/+9jdkZWX1a56XXHIJfvCDH3TJtJ0wYQLKysqQn5+PweLNDyK4qh1vV7ehxRdEkSOI+rAfuV4XxhflYezYSmXabju444Bz/DwUtN22jfqCaLDW4LPmAOxMzbYsfNpoQ8QGuHKzUFxapm1nG20/iWnd9EzrR+unv7TtZN764dVZmeT22283tzVr1nSO13DZZZd16efyKrFLL70Ub7zxBhwOB3bddVc8+eST/e7vioiIiMjIl/byCLGYVbvDDjvg888/xwEHHIBAIICGhoYu2bZbtmyJWwM3yuPxmFt3PJAYzIOJwmyPOWj5ZHMLSnKdGONxoM0Xxvp6PyYU55jp0oHrabA/j+GkuimAMIBp5fkm4J/tCaCswI0cr8u0c7q2n//R9pOY1k3PtH60fvpL205mrZ9M6z+MHz8eN9xwA2bMmGEyjv/4xz/iqKOOwrvvvmsCuAzYHnzwwSax4De/+Y0Zz+H999/PuPchIiIiIpklo3qLLS0tWLVqFcaMGYP58+fD5XLh2Wef7Zy+cuVKrFu3ztS+zcRsSVYknTUmD1kuJ3zBiLmfOSbPtHO6SFy2bf9YgMthh8tpN/c2a1u7mS4iIiKZ6IgjjsChhx5qgrZMPrj22muRm5trBs6lCy64AOeddx5+/OMfmyAuy4J99atfjZtkICIiIiKSEUHbiy66CC+88IK5nOzVV1/FMcccYy4ZO+GEE1BQUIDTTjvNlDp47rnnzMBkp5xyignYJhqELJ1afCEEQhbmTijEwmmlmFmZb+53mVBo2jldJJ7KAi/cDjs2N/rgD4ZMjJb3mxvbTTuni4iISOYLh8N44IEH0Nraavqs1dXVpiRCeXk5Fi5caMZmWLJkCV5++eV0L6qIiIiIZLi0lkfYsGGDCdDW1taaWmiLFi0yWQn8P91yyy3m0rHjjjsOfr8fBx10EG677TZkolyvE9luhwnO5rgdndmRzb6Qaed0kUQKvE4Ew2FUN0dQaI+gutkOt9Nu2kVERCSzLV++3ARpOegts2wfffRR7LTTTp3ZtldccQV++ctfmlq2f/rTn7B06VIz8C6zc+Nhv5e32DEaojWEeRsKfB2Wexiq1xtutH60brTt6Lul/U5m0X5Z62c4bTt9fa20RoSYidDbQBO/+93vzC3T5XtdmFmZh7+9tR6+QAhjPUFs8rfD63biqwsmaCApSYiB/uoWHpjZ4HU6wDgt7/kVZjunc/sSERGRzMSSB++99x4aGxvx0EMP4aSTTjJXk0U75Geeeaa5YozmzZtnyn/dc889uP766+POj+1XXnnldu01NTUmMDwUuOx8PzyIUf1drR9tO/puDRXte7RutO3ouzUa9jvNzc19ep7S+AaLqUcq0rtmXxBbmwMoyHaiMMuNYo8fE5we1LcFTDunAxpdWkREJFO53W5Mnz7d/J/jMixbtgy33nqrqWNLzLqNNWvWLDNOQyIctIwlwmIzbSdMmGCuRsvPz8dQHcBwkDm+poK2Wj/advTdGira92jdaNvRd2s07He83r6VwVTQNkU40NiKqmbMm1DUUR6hvRE7ZRWgJRA27QunlypbUuJqC4ThctgQtoBgOGJ2ErznTsNpt5npIiIiMrw6/yxvMHnyZIwdO9YMphvr008/xSGHHJLw7zlIWbyBythHGMoAKvsiQ/2aw4nWj9aNth19t7TfySzaL2v9DJdtp6+vo6BtivASdgbXxhR44XHY4Yg4EXY5YLPbzABTusRdEinP96As34vm9oB57A/xUkoHclwO5GW7zXQRERHJTMyKZQB24sSJ5lK3+++/H88//zyefPJJcwBw8cUX4/LLL8cuu+xiatr+8Y9/xIoVK0wZBRERERGRRBS0HYSByDw57s52DUQmvRlXmI09pxTjqY+2oCDLgZIcoBlONLaHTTuni4iISGaqrq7GiSeeiM2bN6OgoABz5841AdsDDjjATP/+979v6tBecMEFqKurM8Hbp59+GtOmTUv3oouIiIhIBlPQNkU4UNSccQV48dMaMxBZvi2AprY2Ux5h8Q5lKo0gPTp98VRzv2xNLVr8YdjtLhw4u6KzXURERDLT3Xff3etzWNs2Wt9WRERERKQvFLRNoT2mFOP99Q0m8FZs96Eu4sfuk0tMu0hP8rwu/ODAHbGhvgVrN1Rh0vhKjC/K1UoTERERERERERmFFLRNoTdX16GxPYj5E4uRh1Y0I8c8ZvvSWRWpfCkZoXI9LhRlucy9iIiIiIiIiIiMTgrapkiTL4jlGxtRmutBSY4bDn8QeZ4sbG0NmPbdpxSrRIIk5A+F8fJnW/HK5zVAeyPwSTP2nl6GRTNK4XE6tOZEREREREREREYRBW1ThAOQtQXCGFPg7dKe53Vic6PPTGfdW5F4nvqoCne99AXqmv2YnBPCmtZ2LFtbj7ZACEfsMk4rTURERERERERkFLGnewFGilyvE9luhwnOxmr2hUw7p4skytL+42trsKam1QRpQ2HL3PMx2zldRERERERERERGDwVtU4RZtHPGFWBri9/cguGIua9t8Zt2ZdlKIqu2tODz6haEIhbCYQuhSMTcByOWaed0EREREREREREZPZT+mUKsP0rLNzSgri2AiMeLxTt01CUVSaSm1Yf2QBiwLNhdDjjsdtjtNljBMNoDlpkuIiIiIiIiIiKjh4K2KcQBo5bOqsD8SYXYtKkKY8dWojDbk8qXkBEoy+WEDTZELItxW1jmno8Bh81mpouIiIiIiIiIyOih8giDgKUQinM9KokgfVKR50V+lhMWgPZgGP5Q2NybbSnLaaaLiIiIiIiIiMjooaCtSJpVFnoxvigLDocdDjtgs9nMPR+zndNFRERERERERGT00HXXIhlgTEEW6luDiEQiyPcGUR5xwW63m3YRERERERERERldFLQVSbMWXwiVBVmmnMbmhjYU2drhyM7CmMJsZHucZjqniYiIiIiIiIjI6KCgrUia5XqdyPM6UZjlwozyXKC9EcgqQEsgbAYn43QRERFJvXXr1mHt2rVoa2tDWVkZZs+eDY9Hg8iKiIiISPopGiSSZsyinTOuAC9+WgOf24F8WwRNLX4TtF28Q5mybEVERFJozZo1uP322/HAAw9gw4YNsCwOBdrB7XZjn332wRlnnIHjjjvOlCoSEREREUkH9URFMsAeU4pRkOXCO+vr8cGGRnPPx2wXERGR1DjvvPOwyy67YPXq1bjmmmvw8ccfo7GxEYFAAFVVVfj3v/+NRYsW4bLLLsPcuXOxbNkyrXoRERERSQtl2opkgDdX16GxPYidxxYg13KixZZjHrN96ayKdC+eiIjIiJCTk4MvvvgCJSUl200rLy/HfvvtZ26XX345nnjiCaxfvx677757WpZVREREREY3BW1F0qzJF8R76xtMkLah1Y8iezvqIxEU5nhM++5TilUiQUREJAWuv/76Pj/34IMP1joXERERkbRR0FYkzVp8Iazc3IQ1ta0IRyJw5ISxvrUNmxp9aPOHzHTWvRUREZHUaW9vN/Vss7OzzWMOSPboo49i1qxZOOigg7SqRURERCStVNNWJM0s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+lXnY5vNZgYg4wC77NuKiIiIiGR8eYRYDM7utNNO5v8PP/wwDj/8cFx33XV45513RnUHN9frRE2zD+tq21CW50G224l6vw2fbG7CxJJsM10k0bbz8eZGfFHdisIsJ3LcDth9Nny8sQm+YFjbjoiIyCC46aabcNBBB5l+rc/nM1eNffbZZygtLcX/+3//T+tcRERERIZXpi3rfrW1tZn/P/PMMyZLgYqLizszcPvjhhtuMBkO3//+9zvb2IE+++yzzeAQubm5OO6447BlyxZkNBv/sbrdiyTW7AuisS0Ip90Gl9MO+7Z7h91m2jldREREUmv8+PFmELKf/OQnuOCCCzBv3jzTH3333XdRXl6u1S0iIiIiaZV0+ueiRYtMGYS9994bb775Jv7617+a9k8//dR0fvtj2bJluPPOOzF37twu7exA/+tf/8KDDz6IgoICnHPOOTj22GPxyiuvINPwEvayPK+pY1vT5ENbIATLcmHWmHyTdcvp+V5XuhdTMlB1kx9upwNjC51o8QfR7g8hHLFjXGEWghHLTB9XmJ3uxRQRERlxnE4nvvWtb6V7MUREREREBh60/e1vf4vvfe97eOihh3D77bdj3Lhxpv0///kPDj744GRnZ2qHffOb38Tvf/97XHPNNZ3tjY2NuPvuu3H//fdjv/32M2333nsvZs2ahddffx177rknMu0S9zyvE4VZLswoywV8jYC3AC2BMCKWpUvcJaHyfA+y3HY0t2/LqN2Wnd0eCCEv22Wmi4iISOpt2rTJDLBbXV1tBiaLdd5552mVi4iIiMjwCdpOnDgR//znP7drv+WWW/q1ACx/cNhhh2H//ffvErR9++23EQwGTXvUzJkzzeu/9tprGRe0ZRbtnHEFePHTGlg5bhQ77Kjzh1DbGsDiHcqUZSsJMYu2IteLT6takOuxw55lM5naLf4IppfnKctWRERkENx3330488wzTekvluJima4o/l9BWxERERHJ+KBta2srcnJy+jzTvj7/gQceMAOYsTxCd1VVVaYTXVhY2KW9oqLCTEvE7/ebW1S0zi6zJ7pnUKTawmnFsCwLH25oQF27HxGPB/vMKDXtg/3awwXXA9eR1sf/NPmCGFvoQWWeGzXN7ahvC6Pd70Blnte0N7T5FfTX9qPvlvY92jeniX63Mm/9pOq1fvazn+Gyyy7DJZdcArs96WEeRERERETSH7SdPn06zj//fJx00kkYM2ZM3Oeww86ByW6++WYsXrzYdIB7sn79ejPPp59+Gl6vF6ly/fXX48orr9yuvaamxgxsNth2LgYm5+Sgri6A4uIc5HqAxrraQX/d4YIHWix9we1FB0gd6lr8aGmsw4TsIMZ47CjzWMj32uF0hEz7pk1V8HFDEm0/+m5p36N9s363MgxrsdfV1aM1EEKuZ2hq9zc3N6dkPhxY9+tf//qA+yMsF8bbmjVrzOPZs2ebYPAhhxzS5Xns+xx66KF44okn8Oijj+Loo48e0OuKiIiIyMjWp6Dt888/b0bWveKKK7DLLrtgwYIFGDt2rAm21tfX4+OPPzYlCziYA4O1vNSsNyx/wPphu+22W2dbOBzGiy++aOrmPvnkkwgEAmhoaOiSbbtlyxZUVlYmnC9fnwOlxWbaTpgwAWVlZcjPz8dQKI1EkON2mtdUYHL7oC0vOdS6+Z+Qpw1vb1mNxnagwOuGxxnCZr8TDb4QCtvDOKukBOUFGohM20/P9N3S+hkIbT9aN8nyh8J45fNafLihFXa/D5GaVuw8vhB7Ty+Bx+nAYErVyf7TTjvNDHb74x//eEDz4UC8N9xwA2bMmGECs3/84x9x1FFH4d133zUB3Khf/epXXUowiIiIiIgMOGi744474uGHH8a6detM5/all17Cq6++ivb2dpSWlmLevHlmIDFmFDgcfeuoL126FMuXL+/Sdsopp5i6tT/60Y9MoNXlcuHZZ5/FcccdZ6avXLnSLMNee+2VcL4ej8fcumPwdCgDqOyUD/VrDhdaN121BSwEwhb8IcvUQC6yR1DbGkHYspl2Ttd2pO1H3y3te7RvTh/9bm3v1VU1eOmzrSjNcaMox4P6iN085rpaOqtiUD+PVP0m8uqsww8/3GS+zpkzx/Q7Y/Hqsb444ogjujy+9tprTeYtB86NBm3fe+893HTTTXjrrbcSXrUmIiIiItLvgcg4CNiFF15obgOVl5eHnXfeuUsb6+ByIIhoOzMgmDVbXFxssmTPPfdcE7DNtEHIRAbE+t9/I5bNPOR9vOkiIiKZUIt9+cZGlOZ6UJLjhsPvR0m2B5bNZtp3n1I8LGqxM2jLK7uYnEDdByLrD141xgQHju8QTTJgGYZvfOMb+N3vftfj1WIiIiIiIv0O2g61W265xWRTMNOWg4sddNBBuO2229K9WCIpleN1wGm3gcOqOMABXdgaQQR2087pIiKDaVNjG9bWtCDkycX4olytbOlRiy+EtkAYYwq6linI8zqxudFnpg+HoC0zX++55x6cfPLJA54Xrx5jkJbjJ+Tm5pqatTvttJOZdsEFF2DhwoWmZEJfpXNg3SgNwqf1o21H36100L5H60bbjr5bo2G/E+nja2VU0Ja1c7vXLGNWAm8iI5UNNmR7HLCaWBLBQsSyEA4Dli1i2jldRGQwNPuC+P2LX2DZmloU232oe60au08uwemLpyJvGATdJD1yvU5kux0mOOvJcXe2N/tCpp3ThwOW09p7771TMi9m67IEAgdbfeihh8zgvS+88AI+//xz/Pe//zX1bYfTwLqkwWO1frTt6LuVDtr3aN1o29F3azTsd5r7OLDu8OhVi4xgFjp2DMyqbQtEEAhH4A/bke3uqInM6SIig4EB26c+2oLSXCdKclxobIF5TD84sOOScZHumEU7Z1wBXvy0xnRui+0R1LX4TV32xTuUDYssWzr//PPxm9/8Br/+9a8HPC+3243p06eb/8+fPx/Lli3DrbfeiqysLKxatarLoLrEq8j22Wef7RIWMmlgXQ1QqPWjbUffrXTQvkfrRtuOvlujYb/j7ePAugraiqQZM2nrWwNo9ofBEC2r2vIgmI/ZrkxbERkMGxva8OaaOpTkulCW54XL3o6yvCxE4DPtnD6uMFsrX+JaNKPU3L+1phab2tthZblMwDbaPhy8+eabJgv2n//8pxkwrPtAZI888siAOv8sb8Bs2e985ztdpnHQM5YA6z6AWSwNrDs8aJBCrRttO/puab+TWbRf1voZLttOX19HQVuRDLg8ubEtZAK1HH+sI2wL85jtnA5kpXsxRWSEqW7ym7qkY7vVJWWW5KZGn5muoK2MZMx+PfbYYwc8H2bFHnLIIWbAXl7qdv/995sMWg5yxoHH4g0+xudOmTJlwK8tIiIiIiNXv4K2L730Eu68805zuRfrdo0bNw7/93//ZzqfixYtSv1SioxgNS1++EJh83+3ww6Xw4LbYYMvFDHtnK6LlEUk1crzPab+KE8MsTyLPxJG0IqgyRc07ZwuksjLn2015RFKc9wo8mShPuI0j2nprIphseLuvffelMynuroaJ554IjZv3oyCggLMnTvXBGwPOOCAlMxfREREREanpIO2Dz/8ML79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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "============================================================\n", + " Training Flow GUI: effect of num_subj_scheduled (r=0.07, slope=0.47s/subj)\n", + "============================================================\n", + " num_subj_scheduled median mean count\n", + " 1 21.11200 22.226266 53\n", + " 2 16.61140 19.075909 171\n", + " 3 23.16735 23.957074 124\n", + " 4 24.23300 23.858331 228\n", + " 5 18.98010 20.836508 157\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAGGCAYAAAAAW6PhAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAA3H1JREFUeJzs3QecE2X6B/AnZZPtvdF7RxARRUBQQVDBXk5Pz8ZfvDvsHT3FXs9yeirqKZ53Z1esJ9gooqAoFpDey7KwvafP//N7cfay2WQ3u5vdJJvf9y6GzGQzkzfvTGaePPO8Bk3TNCEiIiIiIiIiIiKiiGAM9woQERERERERERER0f8waEtEREREREREREQUQRi0JSIiIiIiIiIiIoogDNoSERERERERERERRRAGbYmIiIiIiIiIiIgiCIO2RERERERERERERBGEQVsiIiIiIiIiIiKiCMKgLREREREREREREVEEYdCWiIiIiIiIiIiIKIIwaEtERERERJ3exRdfLL17927V3955551iMBgkUu3YsUOt38svvxzuVSHqNNs9de5+kZycHNRzsW/Fd0BHW7JkiVr222+/3e7Last3HL538Lf4HgoVbrf/w6AtERERERGFDU72grnhBDYW4eQ1UJssXLhQItEvv/wil1xyifTp00fi4+NVcOTQQw+Vm266SbZt29bgucccc4wMHz7c7+sUFxc3CpjoAYLvv/++3d9HZ/HNN9+oNiwvL2+X17///vvlvffek3ApKChQ7++nn34K2zoQEbUHc7u8KhERERERURD+9a9/NXj8yiuvyGeffdZo+pAhQ9rUni+88IJ4PJ5W/e1f/vIXueWWWyRcrFar/OMf/2g0feTIkRJp0M5/+tOfJDs7W84//3wZPHiwuFwuWbt2rfpsn3jiCamrqxOTyRTuVY2poO1dd92lfgBIT09vl6DtWWedJaeddpqEK2iL94eMWvw4EKrtngiwvzKbGTqj8GDPIyIiIiKisLngggsaPF65cqUK2vpO91VbWyuJiYlBLycuLq7V64gT9nCetGPZzbVHpAQHEbAdP368fPTRR5KSktJg/qOPPir33Xdf2NaPQkfTNLHZbJKQkBDRzdqW7T6a1dTUSFJSUrhXo1PA1QJE4cLyCEREREREFNH0S+h/+OEHmThxogrW3nrrrWre+++/L9OnT5euXbuqjNR+/frJPffcI263u8kaeXod2L/+9a/y/PPPq7/D348ZM0ZWrVrVbL0/PL7iiivUZeFYN/ztsGHD/JYsQGmHww8/XJ38YznPPfdch9TJ/fLLL+Xoo49WwRtkWJ566qmyfv36BmUMsA4ffPBB/TS0MaYddthhDV7rxBNPlCOPPLLJ5SHbEX/7n//8p1HAFvD+8dmEOsvW6XTKhg0bZN++fUHXsty1a5fMmDFD/btbt27y9NNPq/lr1qyR4447TrVZr1695NVXX230GigzcM0110iPHj3U596/f3956KGHGmV0om+NGzdOsrKyVHBz9OjRfutTtqQv+fPUU0+p52O7yMjIUH1NX2/0sxtvvFH9G+Uq9NIaev3J+fPnq/ebm5urljt06FB59tlnGy0D2w7aa9GiRer18X7Qj/FaCBD+85//rH9ttHFT9WSb2p7QdwYNGqT6Ctpr2bJlTb53bFvYZgElOfR10Os7N7Xd4zPv27evarepU6fK7t27VTAafbR79+7qPWKbKS0tbbTcTz75pH7bQl/HPujXX39t9rPSy3vgfV1++eWqb6SmpsqFF14oZWVlrVqO3qe3bt0qJ510knoestwD0dt/y5Yt9dnXaWlpqv3wY1gwtbJ9y5bor7lp0yb1AxNeLycnR26//XbVpmhbtCXea35+vvoBp6VQEmXatGkqix+fDfrzpZde2qgGrG8pnabeB8q14DXRvvgOufvuu9X6NvVeg/H666+r/ovPAu/5kEMOkb/97W+N9iPXXnut6p/Y9tDn0A9QFsYb9iv4sQvzsV1MnjxZfXa+vv32WznhhBNU26NPT5o0Sb7++utGz1u+fLnaZry/j3y15LMPJNhtRN/vYX1wv2DBgmZfO5Yw05aIiIiIiCJeSUmJChyee+65KiiQl5enpuOkEgGL6667Tt0jUHnHHXdIZWWlPPLII82+LoJbVVVVKoCCk9GHH35YzjjjDHUy31yWHk5+3333Xfnzn/+sTkqffPJJOfPMM1VAEMEY+PHHH9WJdJcuXVRQE8FkBAYQ0GgJ3xN5rBtOzgP5/PPPVXshKIUTbFzii+AesmBXr16tAgU4QUbABgGkU045Rf3dV199JUajUX7++WfVhgg4IGiALNpZs2YFXB6CPWh7BNgRXOhIe/fuVeUzLrrooqAGY8NngLbBDwD4vBEoRMAQwYXbbrtNBbzQB+bNm6eCKEcddZQKEOnvE8EQLBN9pmfPnqpt5syZo4LGKP+gQ5AG7YrXczgcKpBz9tlnqyxkBDBa2pf8weX/V111lSpPcPXVV6vsVwTjEcD5/e9/r94HAmmvvfaaPP744yrgBXr/Q4AWAV+sJzK6P/zwQ7UO+Mxnz57dYFkbN26U8847T73vyy67TAVXUcbk//7v/+SII46o7x8IBLXG0qVL5Y033lDvB0GsZ555Rm073333XcC6x/jcsT1hm8fyESQCBMubgs8cn8mVV16pgrLoB+ecc44KYCPod/PNN6vAGLaZG264QV566aX6v8V7Rl9DsA/BevQJtOOECRPU9h7MwGfob9j2sG2iXfH3O3furA88tnQ5KEGC52EeAtLBXIWA94t+/cADD6h9AkqwIHiPZbXW7373O/WZPPjgg/Lxxx/LvffeK5mZmSowiLbFa6Pt0aYIHGIbDMaBAwdUYB39FqVq0HYILGKbaS3sB9C/xo4dqz5//Egyd+5c1ZboU62FK0WwnSC4qrclfixDABXbKFRXV6u+iukIPONHMuzj8QPanj176rdTQFtin4w2q6ioUOuKfQq2cR32vdinIVCM94Dn6z/IYJ+O7VP/UUpvR/Q9vFc8X/8+DZVg++6nn36q9nP4sQj9EN/z+PGgo79DIppGREREREQUIWbPno00pwbTJk2apKbNmzev0fNra2sbTbv88su1xMREzWaz1U+76KKLtF69etU/3r59u3rNrKwsrbS0tH76+++/r6Z/+OGH9dPmzp3baJ3w2GKxaFu2bKmf9vPPP6vpTz31VP20k08+Wa3L3r1766dt3rxZM5vNjV7TH6w3nud7Q5v4vpf58+fXTzv00EO13NxcraSkpMH6GY1G7cILL6yfNn36dO2II46of3zGGWeom8lk0j755BM1bfXq1er10TaB6O/9mmuuaTQP61BUVFR/s9vt9fPwPoYNG+b3NfFcvCbaX4f3iGmrVq1q9P7RVsG25/33318/raysTEtISNAMBoP2+uuv10/fsGFDo+Xfc889WlJSkrZp06YGr3vLLbeoNtu1a1fAvulwOLThw4drxx13XKv6kj+nnnpqwPbTPfLII+q10E7BbD/Tpk3T+vbt22Aath28xsKFCxs9H+3hr+19t7nmtifcvv/++/ppO3fu1OLj47XTTz+9yfeHvuDb/wOtg95XcnJy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mT17thoo97PPPlNjMkydOlVqamoaHNfieHf9+vWyaNEiVU4Cz3G73WxKIiIiIorMTFtcVoeD2IsuukjM5v+tTlpamsycOVOVOsjMzFSlDa688koVsA00CBkRERERUUdauHBhg8cvv/yySkbAoLoTJ05U02bNmlU/v3fv3nLvvffKyJEjZceOHdKvXz9+YEREREQUeUFbXCqG7NlLL7200bzHH39cXQZ35plnit1ul2nTpskzzzwTlvUkIiIiImoOBmYDJB34gwxcJCz06dNHjbtARERERBSRQVtcGoZLxAINNvH000+rGxERERFRJMMVZNdcc42MHz9ehg8f3mAeEg9uuukmFbRFvVuUUrBYLH5fB8kKuHkPrKu/Pm4dAcvBMXpHLS/asH3YNuw73La434ks3C+zfaKp7wS7rLAHbYmIiIiIOgPUtl27dq0sX7680bzzzz9fjj/+eNm3b5/89a9/lXPOOUe+/vprlaTgb3Czu+66q9H0oqIisdls0lEnE8gaxklMJA4AF25sH7YN+w63Le53Igv3y2yfaOo7VVVVQT2PQVsiIiIioja64oor5KOPPpJly5ZJ9+7dG83HeA24DRgwQI3PkJGRIQsWLJDzzjuv0XPnzJmjxnXwzrRFKYWcnBw1zkNHncAYDAa1TAZt2T7sO9y2Ogr3PWwb9h1uW7Gw34n386O9PwzaEhERERG1ErIyMFguArBLlixRtWqD+RvcvEsgeLNarermCycSHRlAxQlMRy8zmrB92DbsO9y2uN+JLNwvs32ipe8EuxwGbYmIiIiI2lAS4dVXX5X3339fUlJSpLCwUE1HVm1CQoJs27ZN3njjDTWOAzI49uzZIw8++KCad9JJJ7HdiYiIiMgvBm2JiIiIKObs2rVLdu7cKbW1tSqYOmzYML/Zrc159tln1f0xxxzTYPr8+fPl4osvVpe/ffXVV/LEE09IWVmZ5OXlycSJE+Wbb76R3NzckL0fIiIiIupcGLQlIiIiopiwY8cOFWR9/fXXVcYrShToLBaLHH300TJr1iw588wzg75szfs1/Onatav897//bfO6ExEREVFsYYEqIiIiIur0rrrqKhk5cqRs375d7r33Xlm3bp0aKdjhcKiSBgisTpgwQe644w4ZMWKErFq1KtyrTEREREQxjJm2RERERNTpJSUlqfqyWVlZjeahTMFxxx2nbnPnzpWFCxfK7t27ZcyYMWFZVyIiIiIiBm2JiIiIqNN74IEHgn7uCSec0K7rQkRERETUHJZHICIiIqKYUldXpwYg02FAMgwUtmjRorCuFxERERGRjkFbIiIiIoopp556qrzyyivq3+Xl5XLkkUfKo48+KqeddpoaqIyIiIiIKNwYtCUiIiKimLJ69Wo5+uij1b/ffvttycvLU9m2COQ++eST4V49IiIiIiIGbYmIiIgotqA0QkpKivr3p59+KmeccYYYjUYZO3asCt4SEREREYUbM22JiIiIKKb0799f3nvvPdm9e7eqYzt16lQ1/cCBA5Kamhru1SMiIiIiYtCWiIiIiGLLHXfcITfccIP07t1b1bM96qij6rNuR40aFe7VIyIiIiISM9uAiIiIiGLJWWedJRMmTJB9+/bJyJEj66dPnjxZTj/99LCuGxERERERMGhLRERERDEnPz9f3bwdccQRYVsfIiIiIiJvrGlLRERERJ3eH//4R9mzZ09Qz33jjTfkP//5T7uvExERERFRIMy0JSIiIqJOLycnR4YNGybjx4+Xk08+WQ4//HDp2rWrxMfHS1lZmaxbt06WL18ur7/+upr+/PPPh3uViYiIiCiGMWhLRERERJ3ePffcI1dccYX84x//kGeeeUYFab2lpKTIlClTVLD2hBNOCNt6EhEREREBg7ZEREREFBPy8vLktttuUzdk1+7atUvq6uokOztb+vXrJwaDIdyrSERERESkMGhLRERERDEnIyND3YiIiIiIIhEHIiMiIiIiIiIiIiKKIGEP2u7du1cuuOACycrKkoSEBDnkkEPk+++/r5+vaZrccccd0qVLFzUftcY2b94c1nUmIiIiIuqsah0uKa9xSJXNqW44HiciIiKiGCqPgFpiGMH32GOPlU8++USN6ouArPelag8//LA8+eST8s9//lP69Okjt99+u0ybNk0NHoHRfomIiIiIqPWKquzy3fZS2VZULev3VUphpU08Ho90j3dKgX2npCVaZEiXVOmbkyyH9kiXfjlJrP9LREREFElBWxy8LV26VL766ivZuXOn1NbWqkDrqFGjVAZsjx49WrTwhx56SP3N/Pnz66chMKvDr/pPPPGE/OUvf5FTTz1VTXvllVfUIBLvvfeenHvuuS1aHhERERERHTzOXru3Uj5bXyjLNxdLRZ1TNYvFZJQEi0ks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FStWqAEdkLGAy82IiIiIiCLRzJkz5a233pJbbrlFOqvyWqcgdGr0Kv3QkbDcoip7WJZNREREFDNB20GDBsk777wju3btUge4X331lXzzzTdSV1cn2dnZMmrUKHnhhRdUlq3J1HEDHRARERERtdQDDzwgM2bMkIULF8ohhxwicXENSwg89thjUd+oLgyuZtDCtnzEih3u8C2fiIiIKNqZWzoI2fXXX69uRERERETRGrRdtGiRSkwA34HIOgNTmEs/aJqI2dg52pKIiIgoHDp+OFkiIiIiojB69NFH5aWXXpKLL764034OKfFm8WgHx50IRyDa49EkM8nS4cslIiIi6iw67+gLRERERER+WK1WGT9+fKdum95ZSWI1G8Xm8nT4shEoxkhkfbKTOnzZRERERJ0Fg7ZEREREFFOuvvpqeeqpp6Qz65mZKAlxZqlzuDt82U63JmajUQWOiYiIiKh1WB6BiIiIiGLKd999J19++aV89NFHMmzYsEYDkb377rsS7RIsJhmcnyLf7Sjt8DIFFXVOSU0wS58cBm2JiIiIWotBWyIiIiKKKenp6XLGGWdIZ3f80DwVtHW6PRJnMnZYaYQqu0tOGN5dUuMbBsOJiIiIqJ2Dtl999ZU899xzsnXrVnn77belW7du8q9//Uv69OkjEyZMaM1LEhERERF1iPnz58dES4/tmyVd0uKluNqh7jtCtd0liRaTHDckt0OWR0RERNRZtfgn93feeUemTZsmCQkJ8uOPP4rdblfTKyoq5P7772+PdSQiIiIiikgPPPCAjBkzRlJSUiQ3N1dOO+002bhxY/380tJSufLKK2XQoEHq+Llnz55y1VVXqWPnjiiRcPKIrmJ3ucXubP/ath5Nk6Jqh4zulSGD8lLafXlEREREnVmLg7b33nuvzJs3T1544YUG9b8wAu/q1atDvX5RqdLmlNJqu7onIiIiovA77LDDpKysTP171KhR6nGgW0ssXbpUZs+eLStXrpTPPvtMnE6nTJ06VWpqatT8goICdfvrX/8qa9eulZdfflkWLlwoM2fOlI5wyqFdZUT3dCmotKnSBe1pf6VNclKsctnRfcVgMLTrsoiIiIg6uxaXR0DmwMSJExtNT0tLk/LycollyGJYvrlY1uwpF6O9UjzbbXJI93SZMCBbrGZTuFePiIiIKGadeuqpYrVa6/8dqqAiArDe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4r+29DTDtg3Hs/GL7ytsG/YdvrZ43okvPC+zfRKl7/RmTKufKQpERERERERERERECYBBWyIiIiIiIiIiIqI4wqBtFNhsNjz00ENqS2wb9h2+tgYCzztsH/YdvrZigeee5MW/LduHfYevLZ574gvPy2wf9h/9vbaSfiEyIiIiIiIiIiIiokTCmbZEREREREREREREcYRBWyIiIiIiIiIiIqI4wqAtERERERERERERURxh0LaPtmzZghtvvBFFRUUwGAxYu3Ztjz+zadMmXHHFFSqp8ciRI7F69Wokq762j7SN3K/zrbKyEslm+fLlmDp1KtLT05GXl4dFixbhwIEDPf7cyy+/jLFjx8Jut2PixIn4y1/+gmTUn/aR11LnviPtlGxWrVqFSy+9FBkZGeo2ffp0vP76693+jF76TX/aRy/9Jpgf/OAH6vddunRpt/fTU//pa/voqf88/PDDXX5X6Rfd0WvfSUQc00aubTie5Xi2Dcez3eOYNrLto6cxSWcc04bXNnrqOw8n+HiWQds+ampqwqRJk7By5cpe3f/o0aO44YYbMHv2bOzevVu9cO6++2688cYbSEZ9bZ82EpyrqKhov0nQLtls3rwZ//Ef/4H3338fGzZsgNfrxfz581WbhfLuu+/itttuw1133YVdu3apQKbc9u7di2TTn/YRMqC5uO8cP34cyaa4uFi9+e7cuRM7duzAnDlzcNNNN+Gjjz6C3vtNf9pHL/2msw8++ABPP/20+jDQHb31n762j976z/jx4zv8rlu3bg15X732nUTFMW3k2qYNx7PB6encwPFs9zimjWz76G1M0oZj2vDbRm99Z3wij2c16jdpvjVr1nR7n/vvv18bP358h7JbbrlFW7BgQdK3fG/a55133lH3q62t1fSmurpa/e6bN28OeZ/Pf/7z2g033NChbNq0ado999yjJbvetM+zzz6rZWZmanqUnZ2t/epXvwpap+d+05v20WO/cTqd2qhRo7QNGzZo1113nbZkyZKQ99Vj/+lL++ip/zz00EPapEmTen1/PfadZMExbXhtw/Esx7OhcDzbM45p+98+ehqTtOGYNjJto6e+81CCj2c50zbK3nvvPcybN69D2YIFC1Q5/dNll12GwsJCfOITn8C2bdt00TT19fVqm5OTE/I+eu4/vWkf0djYiNLSUgwdOrTHb6KTgd/vx4sv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# === Does num_subj_scheduled matter within each startup_type? ===\n", + "for label, subset in [('Rig Tester', df_rig_tester), ('Training Flow GUI', df_training_gui)]:\n", + " if len(subset) == 0:\n", + " continue\n", + "\n", + " x = subset['num_subj_scheduled'].dropna()\n", + " y = subset.loc[x.index, 'startup_time']\n", + "\n", + " if x.nunique() < 2:\n", + " print(f\"\\n[{label}] Not enough variation in num_subj_scheduled to fit regression\")\n", + " continue\n", + "\n", + " corr = subset[['num_subj_scheduled', 'startup_time']].corr().iloc[0, 1]\n", + " m, b = np.polyfit(x, y, 1)\n", + "\n", + " subj_stats = (\n", + " subset.groupby('num_subj_scheduled')['startup_time']\n", + " .agg(median='median', mean='mean', count='count')\n", + " .reset_index()\n", + " .sort_values('num_subj_scheduled')\n", + " )\n", + "\n", + " print(f\"\\n{'='*60}\")\n", + " print(f\" {label}: effect of num_subj_scheduled (r={corr:.2f}, slope={m:.2f}s/subj)\")\n", + " print(f\"{'='*60}\")\n", + " print(subj_stats.to_string(index=False))\n", + "\n", + " fig, axes = plt.subplots(1, 2, figsize=(14, 4))\n", + "\n", + " axes[0].scatter(x, y, alpha=0.4, s=20)\n", + " xs = np.linspace(x.min(), x.max(), 100)\n", + " axes[0].plot(xs, m * xs + b, 'r-', linewidth=2, label=f'slope={m:.2f}s/subj, r={corr:.2f}')\n", + " axes[0].set_xlabel('num_subj_scheduled')\n", + " axes[0].set_ylabel('Startup time (s)')\n", + " axes[0].set_title(f'{label}: startup time vs. num_subj_scheduled')\n", + " axes[0].legend()\n", + " axes[0].grid(True, alpha=0.3)\n", + "\n", + " axes[1].scatter(\n", + " subj_stats['num_subj_scheduled'], subj_stats['mean'],\n", + " s=subj_stats['count'] * 10, alpha=0.7,\n", + " )\n", + " axes[1].set_xlabel('num_subj_scheduled')\n", + " axes[1].set_ylabel('Mean startup time (s)')\n", + " axes[1].set_title(f'{label}: mean startup time per num_subj_scheduled\\n(bubble size ∝ count)')\n", + " axes[1].grid(True, alpha=0.3)\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "638db0f8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AaWc6AAAIJimTp0aqVKlirrARdq3bx+54oorIo888khk7ty5MR+vxw0ZMiTmfVu2bCm1Tq9TtWrVyC9/+cti69u0aeNea/z48aWe8+STT7r7Jk+eXOq+O++80923ePHiUvfpNfv06VOqvFr++9//Flt/ww03uPXPP/98ZF/0mnrtWLQtSn4d8tb96le/Krb+17/+tVvfqlWrSE5OTtH6GTNmuPW33npr0brp06e7dSNHjiz1P88555xIVlZWZPPmzXst9+OPP+5e47e//W2x9a+//rpbf/nllxetGzdunFv3xhtvFHvs3//+d7f+P//5T9G6s88+O9K4cePIsmXLij32iy++iFSqVMnto5L7S9tw165dkbLQftdzdByUpP2u+6L/h7euZs2akR9++KFo/dq1ayPVqlWLZGRkRB544IFir3Peeee54z43N/eA6pUqOg4PO+ywSHZ2tltU92effTZSv379SOXKld2xtK/3ko4HrfvnP/9Z7LHe+pLvobLur+jtsz/Hr/e+WLNmzV7/T6z3WkUdk++//757zkMPPVTqvoKCgkheXl6p9d5754UXXtjn59TejvmXXnrJ3fe3v/2t2HqV/Zhjjom0bdvWlSH6vaBjId5neFnps0CvNWjQoGLru3TpEmnSpEnM51x44YXuOTt27Njra3vH2hNPPFFsfb169dz7WIv294svvhi5//77i9bPnj17n+X+8ssv3WvffPPNpe7bunWru+/SSy8tWrdkyZLIySefHHn44Ycjr7zyittvp512mntcv379Ivn5+ZEDUatWrb2+l4YOHRq57bbbIhMmTIhMnDgxMmLEiEj16tUjderUicycOTPmc6666ipXrnXr1h1QmQAAQGqRzgUAgABT7031lNRkoeodqPQX6smryd7Uc/L7778v82upB6Yodq0ezOq9rd7LHTt2tM8++6zU49VrNnqCt/Ki/18yj/Ott97qbtUztryUTHfg9TBVb/jonqHqiaq/o1NxqJepN4mrtmP0ol6n6sWpifb2RnVTL0717i2Zj1i9PNXDXL17o1O2aBLBaPpb+8mbXE/HiHp8qwzqeRpdLqVuUAoV9XKPtS3KezI87eM2bdoU/e0de9oGJXvta1+op76XFuhA65UK8+bNc3XTopEL6qWsESDanzqW9uW1115zva5L5vZWruhk2Z/j1+shrvza+fn5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QBwE0QEAAAAAAAAAiIMgOgAAAAAAAAAAcRBEBwAAAAAAAAAgDoLoAAAAAAAAAADEQRAdAAAAAAAAAIA4CKIDAAAAAAAAABAHQXTAZ2644QZr27atZWRk2DfffFO0fseOHXbddddZ+/bt7YgjjrDLL7+86D49vmPHjnbkkUe65YUXXij2mrm5uVa7dm276qqrklbOn//85zZ58uR9Pu6xxx6zsWPH2sqVK61WrVq2fv36Yvd//fXX1qhRI9u5c6cNHTrUWrZs6epw2GGH2aBBgywvL6/U63n1bNCgQdHjtZQszz/+8Q+3rSpXrmwPPvhgkmoOAEBxtN3Ja7tvu+029zrdunWz7t272zvvvMPhBgBIOtru5LXdt99+uzvv9u6fMGECRyzSUwSAr3z44YeRZcuWRdq0aRP5+uuvi9bfdNNNkeuuuy5SUFDg/l61alXRfSUfW9L48eMjJ554YqRevXqR3NzcSKqcddZZkYcffrjYumuvvdbVTYYMGRL5y1/+4n7fvn17pFevXpF777037utFPz6Wb775JjJ37tzIoEGD9vo4AAASQdudvLb7zTffjOTl5RW143Xq1Ils2bKFAxQAkFS03clruzdu3Fj0+/LlyyNZWVmR7OxsjlikHXqiAz5z4okn2kEHHVRs3datW+2JJ56w0aNHux7q0qxZszK/pp57yy23uNcu2Us9mnqCX3311davXz87+OCD7corr7TPP//c+vbta+3atbPhw4cXPVbrXn755aLn/eIXv7BTTjnFOnToYOeff77rWS533XWX3XTTTe539YRX7/Do3vX/+te/YvaQr1atmvXu3duWLFliB0q92Dp16mSZmXzUAQDKD2138truM844w2rUqOF+V6+2SCRi2dnZSdpTAAAUou1OXttdr169ot+3bNni2u6CggIONaQdIktAACxatMgNobrnnnvc0OYTTjjBJk2aVOwxgwcPdiebCkhHn2zOnTvXli1bZv3793f3KaC+N7NmzbLXX3/d5s+fb1OmTLExY8bYu+++69Y/99xzNmfOnJjPU+qZ1157zb799ltbs2aN/ec//yn1mLPOOstWrVpVlKbmv//9r0tP06VLl1KPzcnJsQ8++MB++tOflnk7AQDgF7TdiXvyySfdRfw2bdok4dUAANg72u4D9/DDD7sUs0cffbQ9/vjj1qRJEw43pB2C6EAA5OfnuyvDnTt3ti+//NI1UBdffLELVouC3TNnzrSvvvrK5RcfMmRI0XMVNFeAvVKlSjZgwABbvHixC3THc84551j16tWtatWqLiiv4HuVKlVcPnP9/wULFsR83nnnnWc1a9Z0/6dHjx7uC0hJyk2usni90XVbshe68qd37drVmjZt6nrkn3TSSQe83QAASBXa7sSos8CoUaPcCDpvFB4AAOWJtjuxHPPqiDd16lTX+a/kXGhAOiCIDgRA69atXUqSn/3sZ+7vo446yqVbUe9w735RsFupUz766CP3965du+zZZ5+1p59+2k0+euihh7oJQxRY37RpU9HEHwqAexRA9yggXvJvfbGIpayPU4oYpXBZuHChffrpp3bJJZcUu/+3v/2tuyDw3XffuQsGmtBEevXq5cr6k5/8JObrqse9V59rr712n9sUAIDyRNt94G33hx9+aFdccYUb4aZebQAAVATa7sTPu5VSVZOQalQ5kG4qp7oAAPZNvcuVb/ydd94p6k2uRfm+lS9dwXIvD9nzzz/vguzy6quvumHQ06ZNK3ot9UJXPnOlafHSqlQkzf6t5dJLL3WpWurUqRP3C8xf//pXl2tdOdd1RXtv1Es+FfUBACAW2u4Da7s1um7QoEH2yiuvuBNxAAAqCm33gbXdCqxrvWhE+tdff130N5BO6IkO+IyCxkpjsnz5cpdKRb3HRT2ylepEKVbOPfdc+9vf/uau8Cqli1KeKAWK7lPvrWeeecY9Rz3Ovd7rHgXe9Tz17koVpXBRL/NYE4pGO/vss13A/ZFHHjmg//PUU0+5bTlx4kQ3wal+V4MOAEAy0XYnr+3WdwNNPK6e6F5PN2/kHQAAyULbnby2++abb7bDDz/ctdlKOztu3DgXdwDSTUZE0+YCAAAAAAAAAIBS6IkOAAAAAAAAAEAcBNEBAAAAAAAAAIiDIDqQBJp5Wvm/Uu2zzz5zk3B16NDBTj75ZFuxYsVeH79t2zY34Ud02d9//33r0aOHW6+8ZspvVlBQUKb/r7zsq1atKrX+ggsucPnJ/aas2+u///2vq5u2k7bL7bffbl4mLE3sqrytykevPHK33npr0X0AAP8KWtv9xRdfWK9evaxmzZpubpRoamPr1q1blENcc6WUxdq1a11bH29ytR9++MH8RvO9tG/f3g455BAbNmyYm1w9ln/84x+uba5cubI9+OCDpe5X3lfla9VjtP23b99eAaUHAISp7Z4wYYIrb5cuXdzywAMPFN336aefFrXbaouVo11zguyL2r22bdvazp07S93XvXt3t4385vXXX3fnymq/zz//fNu8efM+v580bdq02PedvZ2TAxWFIDqQJhTo1iSiOlH87rvvbMCAAXbTTTft9Tm33HKLHX/88cXW1a9f3zX2mmF7+vTpbnZub6LSvVm4cKHVrl3bmjdvbqmUn5+f9O3Vr18/NwO5t7z77rv28ssvu/vuuece2717t82cOdNNfDZjxgx78cUXk1onAEB62p+2SO2rHveXv/wl5v0KnHvt1OTJk8v0/1955RU3mViqqR0ti8WLF9vvf/97++ijj9z3Dk2u/vjjj8d87DHHHGP//ve/7bLLLotZ7+eee86mTZvm2u733nvPqlSpknA9AADpb3/a7latWtnbb79ts2fPtk8++cQeffTRoiC3gvC6QK52W22RAsdlmdhTzz/uuOOsatWqFoTz7i1btrhJw3X+vGDBAmvRooX98Y9/3OtzdEHhrLPOKvM5OVBRCKID+0E9tzXbtK58qtE77bTTYj7u2WefdVdJtZx55plFV6bVU0xXqnXCqtc48cQTi/Xyuv/++10v8KOPPtpOP/10W7JkSZnLpoC3elt5vc/U8Lz22mtxe1bphFHl0heAaEcddZS1a9fO/V69enV3pdcroxo9Bd1Vd/Xc+t3vflfsyrB3pXjevHmut5yuqGtd9JXmf/3rX/aTn/zE/R+9jsooX375pbs6HX01Wa/x1ltv7bXeKlu9evXcBQFtN80EnuztlZWVZZmZhR+Xul89BDIyMtzfCpprX+lvnYCfeuqpbv8DAPwhXdrugw46yP2fatWq7Vf99Xpezy31glMA2aOTz/POO8/9/uqrr7qe2XqsRqFFGzFihB177LHuNVT/+fPnF9X96quvLnrcpk2bXA/2DRs27LVM2qaq809/+lP3feLzzz8vU110kVr7oVmzZq7dveaaa+z555+P+Vjta9XHa7+jjR071u68807Xe18aN25slSpVKlMZAADlL13abp07q80StTk63/XKoZFl3gVc9SpXnb1zTF3k1cVgr+1W8D1W260Ob95jNDo6OrD95z//uajt1q16vnttafT21IXsNm3auE50+wre6/xeAXG9ps7/y0Ln8zr3V93lV7/6Vdy22xtxdvDBB9sJJ5xQ5nNyoMJEAJTZSy+9FDnttNOK/l6/fr27nTx5cqRbt27u91mzZkWaNm0aWb58ufv77rvvjpx++unu9yeffDJStWrVyNy5c93f9957b+TUU091vz/33HORn//855H8/Hz39zPPPBMZMGCA+/399993rx9rue2229xjXnzxxWJlk8aNG0cWLVpUqh4bN26MHHXUUZE1a9YUK3tJq1atcnX54osv3N833HBD5J577ilVf+nVq1dk/vz57vfu3btH/v73v7vfZ86c6eqsusu6desiBQUF7vfFixe719++fXvRa7zzzjvu96+++ipy6KGHFj02Hr2GPsqefvrponXJ3l7yySefRLp06RKpVq1a5Kabbioq1x133BE599xzXR1yc3MjJ5xwQuSII47Ya5kBABUnXdpuj8pzzjnnlFrXsGFD99rHHXdc5N///nfRfV27do1MnTrV/b579273HUA2b94cadeunWvP9H2gQYMGkTlz5rj7/va3v7m2VW2srF27tuj1nn/++Uj//v3d73otldd7zT//+c+RK6+8cp/7ROWtUaNGZN68eUXr7rvvvrjbS/tQrrvuumLfQ1TeVq1a7fV/DRkyJPKXv/yl2Lr69etHRo8e7b53HHPMMZGHHnpon2UGAFScdGu7vTZLbe2yZcuK1qmdVTtdq1atyEUXXRTZsWOHW3/22WdH/vWvfxU9bsOGDe5WbbbabrXheuxBBx0Ueffdd919Oo9W261tVLLt/vTTTyMdO3Z0v6vebdq0KWqDta1PPvnkfe4TvW5GRkbkgw8+KFr3z3/+M+72GjdunHvM/fffH7n66quLnrN169ZIZmZmZNeuXaX+x/fff+9iCXl5eTG/78Q7JwcqSuWKC9cDwaer4N9++627etqnTx83dKskDaHW1eyWLVu6v/XYP/zhD0VDldW7Wj2jRL231Jtb9+mKsoZz6YpzyaHN3hDtZLnuuuvstttusyZNmsS94qze4wMHDnS90ZRbTXQF/7e//a0bkqX6a0iVrF692j1eOeF0q7IOHTrU3aceZr179y42FFu935cvX+6u4Ku3mtbpyvSNN97oepLryvj//d//uW1XlqvLuoJ/+eWXl9v28vabhtllZ2e7nnMaSq7toRzoWtS7Xr0L1KNBeeUBAP6QLm333mjI80UXXeR6tamuakc1hLxnz552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vffee7Z+/XpLR5s3b3a3ek/279/ffv/739vAgQNtypQp9uGHHxbdB+wLbTdtd7qh7Q4G2m7abhw42m7a7nRD2x0MtN39fXHeTRA9wN544w379a9/7X5v1qyZO5gqV67sglinnnqqS/eRbt555x275JJL7O6777ZNmzZZjx497Mgjj7STTz7Z7r//fkvX+v7xj390H5pK1aOg7GOPPWa1atWyv/71r/bSSy+lVcDOq7OC5qrztm3b3LGsOvbs2dOlzdCHpp+oPBdeeKHddttttnjxYmvXrp0dddRRLuj/6quv2tq1ay3deHUeOXKkq/P555/vLvY8/PDD7j355ptvuhQ86XSRx6vz7bffXpS+JSsry/1++OGHu2P09ddfd3VO1wuYSBxtN203bbc/0HbTdtN2o6xou2m7abv9gbabtvvwFJ93E0QPqKlTp7qUEbp96KGH3DovB3r16tXthx9+sJycnGLrg+5f//qXa7x+9atfueCVeid7dDFBdf7kk0/cm8jLTZwu9dXV4ZtuuslatmzpeqC/9tprLo2EAnrKh6VAczqIrrPXo/mCCy5wowwUuLzjjjusYcOGvjumn3vuOZdm5yc/+YmNHz/ePvroI7f+8ssvt61bt9pnn31WbARFOvDqrAtZqvMXX3xhjz76aNFFEOXt12fQsmXLLN3qrIsjzz77rOuRXqVKFZdOatiwYdagQQO3hCWFD/YfbTdtN223f9B203bTdqMsaLtpu2m7/YO2m7Z7WIrPuytX+H9EUnTo0MH19NRBo17YgwYNcgfRrl27XFDntNNOs6eeesrOPPNMlxs9yHSVSYFxBetOOukka968uftdAUoNp2vcuLF7nIZ2KC/8tGnTrGPHjjZgwIBATrwZr74/+9nP3MSa7du3L3qsfp84caJL8xJkseqsQKXqrNEVv/vd79wX2Hr16rlRF2o8/VJuBVJVXgXQVbYJEybY119/bW3btnU90q+//nr785//bB9//LF73ypnuOoUVPHqrCB6q1at3D4S9dBWD/UWLVpY0MWq8/PPP28bNmywM844w6Wx0WN0kUsXFOrUqZPqIsOnaLtpu4W2O7Vou2m7abuxP2i7abuFtju1aLtpu8/wyXl38CKMIVUyNUujRo3c0IXatWvb6aef7nroihec04f8wQcf7ILM6VJnTVaoIJYo53vTpk1dAN1LF5GXl+fyMCtwp0Bs0ALo+6qvAnfa7/rQUE979YS98soriz5IgpjSZW91XrBggauzjnFNoqoLQupxrx7OqZy4Ur3iowP/devWdbm/P/30U3fMde/e3fU49/Jmr1692o0cUNk1IWwQA+j7qrOOQV3AU89zjZrQsakLIJpcNajzFJRlP+sipkZM6IKP6q4663NJn0lBrDOSj7abtpu2m7Y7VWi7abtxYGi7abtpu2m7U4W2O8P3593BijKGkNKTKDXCBx98UBQo9VJZeEFi5WHWRItLly4tmhRCKS+U4sTrpR3kOkvJ9B36W28uL0gp6nGvNBrjxo1z+cLTtb66MKJFeZiV0kdpXnQsBCkHc1nr7PVq9vax6q10NkqpUdHU01qpZZ5++umisnppgzQq4p///KfL06/eKsqBrosAoqujSnGiXOHqnR0kZa2zRn6ozt9//71ryNSwqb4aQaCLBkE6NvenzhoZMm/ePHefLpw88MAD9stf/jJw70ckH203bbfQdtN2pwJtN203DgxtN2230HbTdqcCbffuwJx3B69LZAh4PR+V61ypOhQU1kR9HgWLFVRUrmGtVw708847zyXY160mnVRahXSssy4UKOWHLhroDeVN5PjMM8+43ufpXl9N4qj9/uSTT7oAZVj2sfLdK6h56aWXpqz8miBUqVn69OnjPrhVl6pVq9qqVavch7dGfzzyyCN2/PHHW25ubtHFAV05Dar9rbO+dCq10HXXXWdBdaD7WcPLEG603bTdtN203X5A203bjbKj7abtpu2m7fYD2u78wJx30xPdh1asWOFuDznkENeTfM6cOTZw4EC799577csvv3RXYI477jhbuHChy3+uVB8ffvihm4RRweSaNWtaOtdZpk+f7noxe7mJtR3CUF+lOtEVuaDVN9F9rAlHU1HnlStXulsNJ9IEoaqDLtYor/lbb73l6nDOOee4IL9y8p944on2j3/8w6VSUuqWIEqkzurBHbY6a3JfQGi7abtpu2m7g9iO0XYjzGi7abtpu2m7U4W2e2swz7sj8I3PPvss0rNnz8jgwYMjjz76aKSgoCBy0003Ra6++urIvHnzIk888URk4MCB7rHr168vet7GjRsjmzdvjoSpzm+++WZk9erVkaAJW32DWmevzEOGDIk88sgjkfz8/MjNN98cOe200yK5ubmRSZMmRa666qrIypUr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S7nrrrv8bjtnzhyzn3S/fvnllzJjxgz5/vvvK8zufs4554QkBgCAHULVd6empprnePjhh6v0/7/11lty7rnnSqQVFxcH9bhffvlFbr31VlmyZIls2LBBdu7cKU8//bTfbR944AGJj4832+m++8tf/iK7d+829/Xu3Vtee+01ueSSS6oVBwAg+oWq7x4wYICsWrXKt3z00Ufmt+mh2NR3H6x/Pvnkk+Wbb76R1atXm6T8hRdeKHl5eUG1CagskuhAFezdu1dGjBhhjhTrEc8zzjjD73azZ882R5V1GTRokO/I9PPPP2+OVGunp89xyimnlDlSrD/wjjvuODn66KPlrLPOkk2bNlW6bStXrjRHaE877TRfUvftt9+WgoKCCtvOnTtXRo4cKQ0aNDA/KC+//HLTuauTTjpJWrRoYa43atTIHN31tvF///uf6ci8I9U1we6lHf75559vri9btsy3zdixY8skth966CE59thjzf16+cUXX5j1OiKs9P7UTrlt27bmy8ahkvd6JF4T4vqcekS/Mt577z056qijTHxKf0x794G//aVHyGvVqiVJSUnmNVB6W+20Dz/8cNORAwAiy8l9dbj67tatW5s26fry9Pm8I920X9Yf3/767gULFkjnzp3NtpMmTSrzHDfeeKOv79b9sW7dOt++uPrqq33bZWVlmVFwmZmZB41b97HGPHToUDPCTA9QB0O/O+jfSb+3xMTEyDXXXHPQvlzvV9pn9+vXz/edQV8nGntsLD+NACASbOy7ExISfP2OPrawsND0ZYq+Ww7ZP5999tlSr149c12/S+go/oyMjKD/rkBl8E0RqAIdoa0/EDWxq0c8tfRJeTqC++9//7tJ0uoRZz29+sorr/Tdr6O777vvPvMcOnLZ++Pz5ZdfNj9KNan89ddfm6PbmthV//3vf80PV3+L95SwzZs3m6Szl3bKiYmJ8ttvv1VoY/lttQyLritP26jt0aPkatq0aeaHtB4p1zgvuugis147LN032pFpORf9AqRfVHQbPXVa95WXfonQ0871OR599FGTZFf6I16P5Ht/mOuPeT3lWr8EHcoPP/wgo0aNMs85fPhweemllwLur3/9618B98H27dv9jmQ/2P7SI+lPPvmk3HPPPYdsJwDA7r66vHD03eXdcsst8tRTT5k+UmM99dRTzfrc3Fz58ccfTXJcTw3X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2a3xurXdwSJe56Hv5ne3U9n2eWFjzG6N163tDpZt8boh5sr23VE/El2Db926tbiRvrCc+OIKF9vitTFmt8br1nYHy7Z4nR6zTSPQvei73cPJ751wsS1mt8br1nYHi3idhb7bXXj/RD/+xu7A3yn6JTr4+1ll+m57hrUBAAAAAAAAAFBFJNEBAAAAAAAAAAiAJLoDxcfHy+23324ubWBbvDbG7NZ43druYNkWr60xIzxsey3ZFq+NMbs1Xre2O1jEC/D+4fOCz0i39wlubXewbIs3mmKO+olFAQAAAAAAAAAIFiPRAQAAAAAAAAAIgCQ6AAAAAAAAAAABkEQHAAAAAAAAACAAkuiAy5WUlIhNmMYBAOB29N0AALgLfTcAkuhRLCMjQ2ywbt06KSwsFJusXbtWxo4dK7///rvExkb/2/inn36SZ599Vnbt2iUxMTGRbg7gFwd4EAr03dGLvhtwFvpthAp9d/Si7wacx+PxROz/jv7sm4V+/PFHGTFihDz22GNSXFws0ezBBx+Uzp07yx133GHFl2GN75577pFLLrlELrzwQmnSpIlEu9dff11Gjx4tGzZskBkzZshHH30kbnovbtq0SWz6kjlq1Cjzt7KFHsS7//77zd953759VnwOITzou6MXfbd7+m7b+m0b+276bYQSfXf0ou92T99tY/9tW9/tpP6bJHoU0YS5vqjGjx9vXkzbt2+XWrVqRWVCp6ioyFyefPLJ8vXXX8t3330nGzduNKOUozFe799XY6tXr56ce+655nSyhx9+WL788suoPLXMe3aBXv71r3+VadOmybHHHivz58+XNWvWiNP961//ki5dusjMmTNlz549Eu2mT58uQ4cONQc82rdvLzZ4//335eqrrzav0RdeeEH+/e9/m/WcLYGqoO+m744mbu67beu3bey76bcRKvTd9N3RxM19t439t219t9P6b5LoUXYamY7K1hfYa6+9ZkpgfP/991GV0Pnggw/koosukrvvvluysrLkuOOOk169ekn//v3lgQcekGjkjfmuu+4ynYKeZaAHDp588klp0KCBPProo/Lmm29GzcEDb7zaeWu8e/fuNWVrNL4TTjjBHHn87LPPxKlyc3PN5YABA2TlypXmAIf+vaKV94tKmzZtpHfv3lJQUCCTJ0+WRYsWye7duyUa5eTkmEt9TZ555ply6623yuDBg83rcvHixb77gMqg76bvjgZu7rtt67dt7LvptxFq9N303dHAzX23jf23bX23U/tvkugut3DhQvnb3/5mrrdo0cK8oOLi4swb6k9/+pP5EIwWL7/8skkY/+UvfzGnb+hRUi/dB7/++qssXbrUHDTwnt4RTTHrUbfrr79eWrVqZUagv/322+Zo3PDhw83pPNrpRVO83k5h2LBh5iyDf/zjH3LbbbdJ06ZNHVmmSD/I9W9x8803yy+//CLt2rWTo446yhzFX7BggaSnp0s08cY7ZcoUE+8FF1xg/i6PPPKIObD17rvvmjr20XSWhDdmfS16TyNLSEgw17t27Wo68HfeecfEHE0HLxF69N0H0HfTd0eSbf22jX03/TZCib77APpu+u5Is63/tq3vdnr/HeNhuJxrLVu2zIzI1qNOWiN7woQJ5s2kJVzUVVddJUOGDJFBgwaVWe82+hLVN4bWe9KR16mpqSbBetlll8kTTzwhKSkpvv2h5Wy0xEvHjh1l4MCBrp10M1DMl156qTz11FOSnJzs2/aHH36Qe++9V1588UXXJu78xasHBTRejWv//v3m79u4cWNzsOill14yCXUn+fOf/yxnnXWW5OXlmYMaekRcz5BQ1157rXk96kEuLUWkB7rczhuvHhHX1+DZZ58t3bt3N38jpaf+vfrqq+ZAT9u2bSUaeGPWUQ+bN282cenfe/ny5aYDb9iwobRu3VrGjRsniYmJkW4uHIq+m75b0XdHnm39to19N/02QoW+m75b0Xc7g239t219t9P7b3dmGGEceeSR5qjTxx9/bJKKmZmZJlGuCUd1xhlnyPPPP2+uuzGBXn4UvdZ70uSq0lI1zZs3Nwl07xG3/Px8cyqLHp077bTTXJlAP1TMmkDWBLomnfVo3OzZs+Xyyy83p/PoOrcdEztYvOvXrzfx6gekTqCqB4M0sT527FhH1f7SfZ6dnW3affzxx5sDWt26dZNvvvlGfv75Z7PNddddJ2+99ZbcdNNNpoaXt6a/G5WPVw90aLwrVqwwJZa89Eixvhdbtmwpblc+Zj2Ad/jhh5t49UubnjmhHbiOhtAzRkig42Dou+m76bsjy7Z+28a+m34boUbfTd9N3x15tvXftvXdbum/3ZdltFj5hKMmU71HYfQojXdkrvdoW4cOHcwLTmu2uYmWZNHaXJ9++qkvKVy+fIfebtSokbm+Y8cO34GCJUuWyGOPPWZGM0dzzPo31UVPZ9GJNLTMix40cMtI9MrG6z266v0ba8xaykY7zEjS8jKlR9Dr30XPCPniiy/M3+GYY44xHba3hpe2X8vv6EGACy+80HVHxA8Vrx7E0YN32uFpZ6ZfMrWT1wle3DrZb2X+xjoaQM8Q0VMHNXaNWQ/u6eeyG2NGeNB3/z/6bvruSLGt37ax76bfRijRd/8/+m767kiyrf+2re92Zf+t5VzgbJ9//rlnxIgRnjfffNNTUlJilqKiojLb7N2713PKKad4Nm3aZK6rzZs3e3777TePG2hMaubMmZ6TTjrJ880331TYZvv27Z7ly5eb6y+88ILn2muv9UyZMsVz0UUXefbt2+dxm2Bjnjx5sufSSy91XczV+RtffPHFjoj3yy+/9AwdOtRz6623mvegxlRYWGju+9///ucZMmSI5/fffze3J06c6HnttdfM9RUrVviN1+mqGq9+RuXn53seffRRz1dffeVxo6rGPG/ePHP93XffdW3MCA/67gPou+m7I8m2ftvGvpt+G6FE330AfTd9d6TZ1n/b1ne7uf9mJLpDeY+m/POf/zSnougEi+eff745MqOLjrrWo2x6Koceiapbt665X4vsay0kLW2SlpbmK43hdNu2bTOXRxxxhCnR8v3335s6Vvfdd5989dVX8uOPP8qJJ55oamYrnX1ZRzFruY9XXnlFateuLW4TbMz6N50zZ47rYq7O31gnHHVCvDpRiZ4iduedd/qOlNapU0e2b99ujpLq2R+PP/64mSla63d538d69FQn/XCbqsarI1Xq1asn48ePN0fJ3SjYv7HWpnNrzAgd+m76bvpuZ/XdtvXbNvbd9NuoLvpu+m76bmf13Tb237b13a7uvyOWvsdBbdmyxVy+/fbb5gjMnDlzPOecc45n+vTp5ujaDz/84DnssMM8L7/8stlu3bp1Zru7777bVXtWRx2fcMIJnlGjRnmeeOIJc/Tp+uuv91x99dWeH3/80fPss896Bg8ebLbdvXu373F69GnHjh0eN7ItZrfHu23bNnO5a9cuz9/+9jfPSy+95OnXr5/nkksuMW387rvvPMcee6w5+p2Tk+NZsmSJifXee+/1uJFt8doaM8KDvtsdn+s29mU2xWvjZ7ptMdsWL8KLvtv5n+s29mU2xmvbZ7tt8UZLzCTRo+SDT09z0BeZ29x+++3mVJSCggJzferUqRW20YMD+oZSTijpUV22xezWeL3vxdGjR3sef/xxc4rRpEmTPGeccYYnNzfX8/HHH3uuuOIKUzLJe5qR1/79+z1uY1u8tsaM8KDvdsfnuo19mU3x2viZblvMtsWL8KLvdv7nuo19mY3x2vbZblu80RYz5Vwc5t1335VJkybJ008/bcq13HXXXWYixaeeeko6duwol19+uSnl8t5770lSUpJvtmGdgFFn5XUL76kYOjnqunXrJD4+Xv7xj3/If//7X1Oixktn4W3atKn07NnT3HbCqUXBsi1mt8frfS/qe2/nzp1y//33yzXXXCOfffaZOb2of//+ZiKLDz74wLz/9L3ojdltE5jYGK+tMSM86Lvd8bluY19mU7w2fqbbFrNt8SK86Lud/7luY19mY7y2fbbbFm+0xUwS3eUffE57QR3M8uXLfXF6Zw72xqF1yPRDXA8SvPHGG2ad1srWeketWrVyTW1322OOhngDvRf1wJXOPTBu3DhzcEtniNbbejDL+17UmN3GtnhtjRnhQd/tjs91G/sym+K18TPdtphtixfhRd/t/M91G/syG+O17bPdtnijNWaS6BEUDR98lbF69Wrp16+f/Oc//zGToCo9sqQxH3nkkdKkSRNZtGiRWd+tWzcTn9JJUnUCzalTpzr2DRSIbTG7Pd7Kvhefe+45ufvuu6V169YyduxYadCggZxzzjniNrbFa2vMCA/6bnd8rtvYl9kUr42f6bbFbFu8CC/6bud/rtvYl9kYr22f7bbFa0PMJNEjwO0ffFW1ZMkSufnmm2X69Ony888/+44srV+/3rxxOnXqJN9//705pUNn5tWZd5W+gY444ghxI9tidmu8VXkv6ge/lkzyHjGdPXu2zJgxw5x+5Ba2xWtrzAgP+m53fK7b2JfZFK+Nn+m2xWxbvAgv+m7nf67b2JfZGK9tn+22xWtTzDFaGD3SjbDNY489Zl5EZ5xxhjkSox90Sj/4Xn/9denTp4+8+uqrcvjhh8sXX3whxx57rPmgdIv8/HwTV9u2bU3pGa17pKdurFq1yoyg13i6dOki77//vjkwcMUVV0h6erq8+eabUq9ePRk9erS4jW0xR0u8VX0vHnfccTJlyhRxK9vitTVmhAd9tzs+123sy2yK18bPdNtiti1ehBd9t/M/123sy2yM17bPdtvitSlmkug1IFo++CpDR8o/9NBDcsIJJ8iGDRvMxADPPvusfPzxx/L3v/9d2rVrJ/PmzZPs7GyZOHGiK440HYptMbs5XpveizbGa2vMCA+bXktu/lwPlm0xuzVem96HtsZsW7wIL5teT279XK8O22J2c7w2vRdtjNfWmJV7ZqWMog++WrVqyfbt2+WBBx7wffB9++235rb3g69Zs2Zmtlo30Q9vfcO88MIL0r17d7nyyivNkabTTz9dPvroI9myZYscffTRpubRvn37TKx6modTZoUOhm0xuzlem96LNsZra8wID5teS27+XA+WbTG7NV6b3oe2xmxbvAgvm15Pbv1crw7bYnZzvDa9F22M19aYvZxzqCoKlf7ge/zxx6VNmza+D76SkhLzwde4cWPzwadHYrwffG6yadMmU8No4cKFsnfvXvMG0TruSo82JSYmmtM1BgwYYPbFK6+8YpZdu3aZbZzwIV9VtsUcDfHa8F60OV5bY0Z42PBaiobP9aqyLWa3x2vD+9D2mG2LF+Flw+vJ7Z/rwbAt5miI14b3os3x2hpzaYxED8MHn07iMHDgQOndu7f54POWnff3waenQLz33nu+SR6c8MFXWfpG0Mkq2rdvLzt37jRHlObPn++b9PSXX37xxTVy5Egz8cXTTz8tJ554olx77bXiRrbF7OZ4bXov2hivrTEjPGx6Lbn5cz1YtsXs1nhteh/aGrNt8SK8bHo9ufVzvTpsi9nN8dr0XrQxXltjDoSR6GH44NMjLt4PPlX6g6+4uNj3wTd8+HBZvny5+eC7/fbbxS20hpF+YOsRJo1JJwO4/PLLTR2kBx980GyTk5Njjjrpm0xP4/jpp59MPSS9P9If8sGwLWa3x2vLe9HWeG2NGeFhy2vJ7Z/rwbAtZjfHa8v70OaYbYsX4WXL68nNn+vBsi1mt8dry3vR1nhtjfmgPKi2N954w/PUU095Nm7c6DnttNN86y+//HLPAw88YK5nZ2d7Jk2a5Nm/f7/ntdde86xevdqsLyoqcs1fID093TNo0CDPiBEjPBMmTDAx6/XnnnvO3L9p0ybP8ccfb7YrKSnxHHfccZ4//elPnsGDB3t++uknjxvZFrPb47XlvWhrvLbGjPCw5bXk9s/1YNgWs5vjteV9aHPMtsWL8LLl9eTmz/Vg2Raz2+O15b1oa7y2xlwZjESvhoyMDDnnnHPktddek7Vr18qiRYtMofx///vf5n496qJHCnW7hIQE+fTTT83Rw9mzZ5sjiUqL77uFHmn685//bOod3XLLLSbmoUOHynfffSfr1683tZDOOOMM+eSTT+TXX3+VrKwsM0v0ggULpEOHDuJGtsXs1nhtey/aFq+tMSM8bHstufVzvTpsi9mN8dr2PrQxZtviRXjZ9npy4+d6ddkWs1vjte29aFu8tsZcFSTRLfzgC5aeUqTxqOTkZNmxY4d502gs3lONNMbOnTubekjr1q2Ts846S9zMtpjdGq9t70Xb4rU1ZoSHba8lt36uV4dtMbsxXtvehzbGbFu8CC/bXk9u/FyvLttidmu8tr0XbYvX1pirgiS6hR981XkzxcfHmwkENC6dlVfj0ZpIum7UqFGSnp4uhx12mG+SAbezLWa3xmvbe9G2eG2NGeFh22vJrZ/r1WFbzG6M17b3oY0x2xYvwsu215MbP9ery7aY3Rqvbe9F2+K1NeaqiKvS1gj4wacfet4PPqVHbvSDb9++fb4PPm/h/WhQVFQkffv2lZUrV8r7779vJr848sgjpUmTJhKtbIvZTfHa9l60LV5bY0Z42PxactPneqjYFrNb4rXxfWhbzLbFi/Cy+fXkls/1ULItZjfFa9t70bZ4bY25KkiiW/jBV136JlmxYoXccccdsmTJErn00kvl+OOPl2hmW8xujtem96KN8doaM8LDpteSmz/Xg2VbzG6N16b3oa0x2xYvwsum15NbP9erw7aY3RyvTe9FG+O1NeZDqtT0ozikd9991xMXF+c588wzPS+++GLU77H//e9/nvvvv99TWFjosYVtMbs1Xtvei7bFa2vMCA/bXktu/VyvDttidmO8tr0PbYzZtngRXra9ntz4uV5dtsXs1nhtey/aFq+tMR9KjP5z6FQ7DmX58uXy2WefyYQJE6ROnTpRv8NsPG3DtpjdGq9t70Xb4rU1ZoSHba8lt36uV4dtMbsxXtvehzbGbFu8CC/bXk9u/FyvLttidmu8tr0XbYvX1pgPhSS65R98QLSx7b1oW7y2xozw4LUERJ6N70PbYrYtXoQXryfAGWx7L9oWr60xHwpJdAAAAAAAAAAAAogNdAcAAAAAAAAAALYjiQ4AAAAAAAAAQAAk0QEAAAAAAAAACIAkOgAAAAAAAAAAAZBEBwAAAAAAAAAgAJLoAAAAAAAAAAAEQBIdAAAAAAAAAIAASKIDAAAAAAAAABAASXQAAAAAAAAAAAIgiQ4AAAAAAAAAQAAk0QEAAAAAAAAACIAkOgAAAAAAAAAAAZBEBwAAAAAAAAAgAJLoAAAAAAAAAAAEQBIdcJi//vWvcthhh0lMTIysWrXKt76wsFDGjx8vHTp0kO7du8tll13mu0+379ixo/Tq1cssc+fOLfOcubm50rBhQ7niiitC1s4rr7xS/vvf/x5yuyeffFJmzJghv/32mzRo0EB2795d5v5vvvlGkpOTZd++fTJmzBhp1aqViaFTp04ycuRIyc/Pr/B83jiTkpJ82+tSvj3nn3++7z5dYmNjZcGCBSHaAwAAHEDfHbq+e/369XLaaaf5nu+GG26QkpISXmoAgJCi7w5t3/2nP/1JevbsKV27dq2QjwCihgeAoyxevNizZcsWT9u2bT3ffPONb/3111/vGT9+vKekpMTc3r59u+++8tuWN2vWLM8pp5ziady4sSc3N9cTKeecc47nkUceKbNu3LhxJjY1evRoz8MPP2yuFxQUePr06eO57777Aj5f6e0PZcWKFZ6mTZt6CgsLqxUDAADl0XeHru8+77zzPP/85z/N9b1793q6devmWbhwIS86AEBI0XeHru/Wx2vOQaWnp3vatGnj2bp1K69YRB1GogMOc8opp0jr1q3LrMvLy5Nnn31W7rnnHjNCXbVo0aLSz6mPvemmm8xzH+yosI4Ev/rqq2XAgAFy+OGHy+WXXy5ffvml9OvXT9q1aycTJ070bavr5s+f73vcn//8Zzn99NPlyCOPlAsuuMCMLFd33HGHXH/99ea6joR/7rnnyoyuf/nll/2OkI+Pj5e+ffvKpk2bKh3nofaBjt6vU6dOSJ4PAAAv+u7Q9d36PSc7O9tc37t3r+zfv19SU1N5sQEAQoq+O3R99+rVq2XgwIHmekpKihmRzmh0RCOS6IALbNy40ZxCde+998oxxxwjJ598snz88cdlthk1apQp86IJ6YyMDN/6tWvXypYtW+TMM88092ky+WDWrFkj77zzjqxbt04+++wzmTZtmnz00Udm/UsvvSTff/+938dp6Zm3335bfvjhB9m5c6e88cYbFbY555xzZPv27b4yNf/5z39MeZpu3bpV2FZ/QH/66acydOhQqS79Ef7KK6+EtJwNAAAHQ98dnJkzZ8q8efOkZcuWZtHvN0cddRQvNgBA2NF3B6d3794yZ84cc/3nn3+WZcuWya+//hrSvw3gBCTRARcoKioyR4a7dOkiX331lTzyyCMyYsQIk6xWmuz+9ttv5euvvzb1xUePHu17rCbN9QdorVq1zNHhX375xSS6AznvvPOkbt26ZsS2JuU1+V67dm1Tz1z/f6135o/WH69fv775f4477jjzBaS8uLg40xbvaHS9LJ/Y1vrpPXr0kObNm5sR+VoXtbpef/11M0Je4wEAoCbQdwfn8ccfl4svvtjMpaLfffQAvh7MBwAg3Oi7g/PCCy/I8uXLTb30v/3tb+YMdf3tD0QbkuiAC7Rp08ZMinnppZea2zoiS8ut6Ohw7/1Kk91aOmXJkiXmtp4CPXv2bNOp6eSj7du3NxOGaGI9KyvLNzGIJsC9NIHupQnx8rf1i4U/ld1OS8RoCZcNGzbIF198IRdddFGZ+//+97+bAwI//fSTOWCgE5qoPn36mLYef/zxfp9XR9x74xk3blyZ+zReRqEDAGoSfXdwffe//vUv32CAZs2amQEAemYaAAD03c783a25Bj0TXc84f+utt8xZ5TrBKBBtODQEuICOLtejuR988IFvNLkunTt3NvXSNVneuHFjs62WLfGe9rxgwQJTy/x///uf77l0FLrWM9cyLd6yKjVJZ//WRUeZaamWxMTEgMmHRx991NRa15rrekrYwegoeX/x6JcG/VKg+wIAgJpC3x1c363fW95//33z41+/4/z3v/+VG264Icx/LQAA6LuD/d2tZ8hrLXQd+Kc5C020X3LJJbykEHUYiQ44jCaNtYzJ1q1bTSkVHT2u9MiwljrRkiRDhgyRp556Slq1amU6LC15oiVQ9L7FixfLiy++6BuB7R297qWJd32c1i+PFB0VrontQ40OP/fcc03CXU/tDpaWjDlYsh4AgOqi7w5d361nz+n3F52UTOeB0UEE5UfPAQBQXfTdoeu7Nbeg5VM7duwo06dPl3fffVfq1avHixRRJ8bj8Xgi3QgAAAAAAAAAAJyIkegAAAAAAAAAAARAEh0AAAAAAAAAgABIogMAAAAAAAAAEABJdCAEPv30U+nVq1fE9+WwYcOkZcuWEhMTI1lZWQG3e/XVV017u3XrZpYHH3zQd9+vv/4q/fr1k0aNGlUppv3798thhx0m+/btq3CfTgym+8hp3nnnHTOBSocOHeSCCy6QnJycgNu+8cYbZuJW7z7T/aQWLlwovXv3lvj4eLn++utrsPUAgGjou5cvX24m0dQJufr37y/btm3zu11eXp6MHTvW9EXad02ePFm8Uxt98cUXJhZdunbtaiZLKywstLrvvuOOOyQlJcW3X0pPtE7fDQDu5Lbf3V579+6VLl26lGm7xqKTb3r7KV10O5v7bsXvbjgZSXQgilxzzTWyatWqQ26XlpYm77//vnz33XeydOlSeeKJJ3ydbWJiotx9993y8ssvV+n/1sefeOKJUqdOHYmkoqKiSm23Z88eueKKK2T+/Pmyfv168yXorrvu8rvtN998I//4xz/kgw8+MPtMkxXNmjUz9+kXgeeee07+/ve/hzQOAED0KykpMcndmTNnyk8//SQDBw4MeED23nvvleLiYvn2229lzZo1snr1ann99dfNfZqEX7FihfkOoPelp6fL448/bnXfrXTf6j7R5aWXXvKtp+8GANTE726vm266SU466aQK6zt27Ojrp3TRpLrNfTe/u+F0JNGBKtAjwyNGjDBHkfUH6xlnnOF3u9mzZ0uPHj3MMmjQIN+osueff96MMjv33HPNc5xyyim+Ec3qgQcekOOOO06OPvpoOeuss2TTpk1V+vsMGDDAl9w9GO3AW7RoYa7riHM9KuxtR1JSkvTt21caNGhQ4XH/+9//zKhr7yh2Tb57aad4/vnnm+vLli3zbaOj5kp3sA899JAce+yx5n691IS00kRA6f2piYK2bdvK2rVrD/klQkfdacesz/mf//ynEntK5L333pOjjjrKxK7+8pe/yCuvvOJ3Wx2pP3HiRNPhq4SEBKlfv765riMH9bUQFxdXqf8XAFCznNx3r1y50vQfp512mrmtI8jffvttKSgoqLCtJs31+XXUW+3ateVPf/qTabPSPknXKR2ZpjHrdjb33QdD3w0Azubkvrsqv7vVokWLTLtKnxF1KLb23fzuhuN5AFTam2++6TnjjDN8t3fv3m0u//vf/3p69uxprq9Zs8bTvHlzz9atW83tu+++23PWWWeZ6//+9789derU8axdu9bcvu+++zx/+tOfzPWXXnrJc+WVV3qKiorM7RdffNEzcOBAc/2TTz4xz+9vufnmmyu0U9/av//+e6Vi+v777z1JSUmeLVu2lFlfOiavc8891/Pyyy/7bmdmZprLkpIST7t27Tw5OTmewsJCT+vWrT0fffSRue+DDz4w7dHnU+np6b7Hf/HFF56OHTua6xp327ZtPT/++KNvX/fv3/+Q7dfnjYmJ8Xz66ae+dXPmzAm4vx577DGzzQMPPOC5+uqrfY/Jy8vzxMbGevbv31/h/zjqqKM8//jHPzynnHKKp1evXp5bbrnF93fyuv322z0TJkw4ZHsBADXLyX3366+/XqZtKiUlxbNx48YKcdx2222eIUOGeAoKCjy5ubmek08+2dO9e3ff/b/88ounR48engYNGnguvPBC0x/b3Hdrv9yyZUuzT0477TTz9/C3DX03ADiPk/vuqvzu1vv0t+TOnTsr/L7W2w0bNjT3H3PMMZ5//etfvvts7bv53Q2nY+gkUAV6FPyHH34wR09PPfVUc9p1ef/973/N0exWrVqZ27rtnXfeaY7wqj59+kjnzp3N9auvvlpuueUWc58eUdZTsfWIs/Jur3SEWlVOF6usrVu3ynnnnSdPPvmktG7d+pDbazv01Cs9DUuP7OuIdaXt1iPLOkJbTzPXUXV6dF7pUe527dqVOUXrnnvukd27d5vt1q1bZ0Ya6Klruq/+9a9/ySOPPGIux48fX6k49Pn17+GlR/mrcqT/UPSIvrZbS+Doqfc6okFHA1S2fQCAyImWvltroOty/PHHm7PIdATdJ5984rtf66PqaHU9bfqyyy6TN998Uy666CJr+2491V5LsekIfS1dp6P2NGYdbQcAcLZo6bu1T7z55pvNqPXyI711FLz+Htc+XS81xuTkZLnwwgut7bv53Q2no5wLUAXaaWjnp521/iDT06Z+//33gz7Gezr1oeiB7ClTpvjqoWlNU128XxBKTzhSetEfiMH47bffTIerXyaGDx9eqcdonVadjCs1NdV8GdDOV+mpXEOGDDnkPtBTzHUiET19TmuLf/bZZ2a9d/Kzq666SubNmydfffWVbNiwwSSrK6Nhw4Zlbmvd00D7S78kqDZt2pQ5bU9P79O4/JVl0W2HDh1qvnBomRuNQU+xAwA4n5P77vJ9UW5urmRnZ/vKh5WmfdA///lP8/8sXrzY/NDW06r99YmaPPfWALe179aydd4SN1rGTk8l1zYCAJzPyX13VXz++edy4403mgPd2jdrTFoH3TsXmSbQlQ5ou/jii2XJkiVW99387objRXooPOAmWvJkz5495rqePpWWluZZvXq139PKtm3bZm5PmzbNc/bZZ/tOK4uPj/f88MMP5vaMGTN8p6npqVB6+pL3VLV9+/Z5vv7666DaeajTyn777TdPp06dPM8991zAbfyVc/Ge8qXee+89017VpUsXc4qad7/oaWXe06b19DLvaWXZ2dme2rVre3bs2OE75a58W//85z+bx997771l/m89/cx7qt6h2lkZegqcnjLv/VuMGzfOc8MNN/jdVk/5GzFihKe4uNicdqan191///1ltuGUcABwJif33dqv6GnZ3j5Tn3vo0KF+t9U+VE+BVj///LOnTZs2nm+++cbcXr9+vfm/vTFqORfvaee29t2ly9T99NNPnmbNmnnWrVtXZhv6bgBwJif33cGWUS3f9+lvcv0e4O3f+vTp43n22Wet7rv53Q2nI4kOVMG7775rOg6tr6kdmPcHavkOReuqaZ1SXbS+mrcT0s5c63JqElYfr/VMtYap1z//+U/z3N7n1/phVaH/V6tWrUwHqXVATz31VN99+oVixYoV5rrWgKtfv36ZmmXehLr+QNfnSE5ONh2vXp88ebK5b/z48aZdWhe8d+/epsPWzvCkk04q046lS5ea5+zWrZtn7Nix5rq3NpvWo9Mf/kcffbRJRJfvzL/66ivzhScjI8O3Tr8oaHvy8/ND1pmrt956y3xJOOKIIzznnXeeJysry3efPqf3C5l+udGOXg88dO3a1XPNNdf4as0uWrTI7KOEhART006v6/MCAJzB6X33smXLzP/ZoUMH029v3rzZb9+tCXPdpnPnzmb7N954w7fdU089Zfonbxuuu+46z969e63uu0eNGmX2ia7Tds+bN8+3HX03ADhbtPzuLq182x999FHzf3vboAd2tea5zX03v7vhdDH6T6RHwwO20FnCtQabLtFi+vTp5lQsPU0tFPSUM61/9+yzz/rW6almWsNNS88AAFCT6LsPjb4bAOAk9N2HRt8NVB0TiwKoFp3kLFS0tqvWcdMJPEurbM12AABwaPTdAAC4C303EHmMRAcAAAAAAAAAIIDYQHcAAAAAAAAAAGA7kugAAAAAAAAAAARAEh0AAAAAAAAAgABIogMAAAAAAAAAEECcRLmSkhL57bffJCEhQWJiYiLdHAAAKs3j8Uhubq60bNlSYmPtOe5N3w0AcCv6bn53AwCis++O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0SLZsWOHxKKioiKz1v+Po0aNkrvvvlvGjh0rS5culSVLllRfB9QH+2723bGEfbcd2Hez70bDsO9m3x1L2HfbgX33KE987yaJbrl//etf8vOf/9z83KFDB/OGSkhIMImsc88917T7iCULFy6Uyy+/XGbOnCkFBQUyePBgGThwoJx99tnywAMPSCwKxHzvvfeaD05t1aNJ2b/85S/SvHlzeeSRR+TVV1+NmaRdIF5Nmmu8u3fvNu9jje/UU081p+/oh6bX6JjGjx8vd955p2zcuFG6desmJ554okn8v/baa5KbmyuxJBDv9OnTTbzjxo0zB3oefvhh83/yzTffNC14YukATyDmX/3qV9WnkaWkpJifTzjhBPMefeONN0zMsXjwEuHDvpt9N/tub2Dfzb6bfTfqi303+2723d7Avpt9tz+K37tJolvsgw8+MC0jdP2nP/3JbAv0QE9KSpJvv/1WCgsLa2232f/+7/+aHdfNN99skldanRygBxI03vfff9/8Jwr0SIqlmPUI8W233SadOnUyFeivv/66aSWhST3t1abJ5liKN1DRfMkll5izDDRx+etf/1ratm3ryffz3/72N9Nm5wc/+IHMmzdPli1bZrb/5Cc/kZKSElm+fHmtsyhsF4hXD2RpvJ988ok89thj1QdBtGe/fv5s3rxZYkUgZj0w8txzz5mK9CZNmph2Utdff72kpqaaxYX2PQgd+2723ey7vYN9N/tu9t2oD/bd7LvZd3sH+2723alR/N6d0OiPiLDp0aOHqfbUN45WYk+YMMG8kfbu3WsSOyNHjpSnn35azj//fNMb3VZ6lEkT45qsO+uss6Rjx47mZ01O6ql07dq1M7fTUzu0J/xHH30kPXv2lDFjxlg76WawmK+88kozuWb37t2rb6s/v/zyy6bNi63qilcTlRqvnllx1113mT9eW7dubc640B2nl8auyVQdsybQdXwvvvii/Pe//5WuXbuaivTJkyfLH//4R/nPf/5j/t9q33CNy0bB4tUkekZGhnmNlFZoa4X6McccI7arK+YXXnhB8vPz5bzzzjNtbPQ2eoBLDyi0bNky2kOGh7HvZt+t2HdHF/tu9t3su3E02Hez71bsu6OLfTf77pM98L3bzgyjow5uzZKWlmZOX2jRooWMHj3aVOmqQHJOP+SPPfZYk2iOhXh1skJNYint956enm4S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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Rig Tester — trend summary (positive slope = getting slower over time):\n", + " location slope_s_per_day r n\n", + "165A-miniVR-T-9 1.447318 0.610040 4\n", + "165A-miniVR-T-7 1.205674 0.613827 5\n", + "165A-miniVR-T-8 0.932728 0.511611 5\n", + "165A-miniVR-T-1 0.419123 0.394785 18\n", + "165A-miniVR-T-3 0.231014 0.428426 20\n", + " 165I-Rig2-T 0.147793 0.541290 25\n", + "165A-miniVR-T-2 0.146914 0.159104 20\n", + " 165I-Rig3-T 0.063506 0.270864 27\n", + "165A-miniVR-T-4 0.022225 0.044461 25\n", + " 165I-Rig4-T 0.019784 0.040376 27\n", + " 165I-Rig1-T -0.002071 -0.007127 26\n", + "165A-miniVR-T-5 -0.005297 -0.009581 25\n", + "165A-miniVR-T-6 -0.026035 -0.120314 25\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAbsCAYAAAD4WdrkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3QecVNX1wPGzjd0Fdpe29AWkozRriL2gqKhRY4+AJZoYC4bY0ERDoiGKJsYYNZLEFqNGY+zlH3vBgqggVUCkwy5lC7tsf//PucsbZ3dntszM7rw77/f1Mw7zpuw9M2/enXfefecmOY7jCAAAAAAAAAAAaCS58SIAAAAAAAAAAEASHQAAAAAAAACAJjASHQAAAAAAAACAMEiiAwAAAAAAAAAQBkl0AAAAAAAAAADCIIkOAAAAAAAAAEAYJNEBAAAAAAAAAAiDJDoAAAAAAAAAAGGQRAcAAAAAAAAAIAyS6AAAoN1dcMEFkpSUxDvfTr799lvzfv/617/mPW9jRx55pAwaNCji57/zzjvms3r44YfFBtpOba+2Gy1z/fXXy1577SWVlZURv2Vvv/22TJgwQbKysqxaXxAfW7ZskY4dO8ojjzzCRwAAQIRIogMAEKFvvvlGLr30Uhk5cqTZOe3atauMGjVKpk2bZhIcwTR5+dxzz7Xpe/3ll1+av6MJUy/QpM7dd98d72b4hn7u+vnreoD6B2tacuEAQ8vfO93m2WDhwoVyySWXyPDhw6VTp06SkZEhAwcOlNNPP10ee+wxqaqqqvd4jU0PgoSj9zU8+Oe+T9u2bWtRm9asWSN/+tOf5Oabb5YOHTpEFNfOnTtNDKWlpXLXXXeZWA4//PC4bnO//vprE5Mm9nNzc01yf/z48XLbbbeZdoayYsUKOfXUU03fqZ/PYYcdJm+99Vajx7377rty+eWXy5gxYyQ7O9u8/iGHHCJPPPGEOI4T8rWrq6vlnnvukf3228+8dk5Ojvn3X//611bF9eijj8q+++4rmZmZ0qtXL/nxj38sBQUFrfq+PPPMMy3+e//73//kpz/9qRx44IFmfW3qAJV7wC3U5aSTTqr32N69e5vXvemmm6SsrKxV7wEAAKiTuucaAAC0wmeffSZHHHGEpKWlydSpU2WfffaR3bt3y8qVK+X//u//TALhqKOOCjx+1qxZJrmuCYO2oslT/TvRjoSNFU3oaGL36quvbnTf3Llz5YEHHohLuxKVvtf6+etnr8mrYJo41PUzNdVfP/1+8pOfyMSJE+stmzJlikkCazIp2NixY2PyN/X7Hy6x1xKaDNXPSrctXnD//fdL586d6y3ThKTX/e53v5Nf/epXJkF79tlny+jRo03SesOGDfLGG2+Y7fYHH3zQ6qRqtH7/+9+bRPD5558f8WvMnz9fCgsL5e9//7tJprsuuuiisNvctvaPf/xD/vKXv8gpp5wiP/rRj8z6qweTf/nLX8q///1v+fjjj00i2rV69Wo5+OCDzTbpuuuuM+uU9guTJk2SV199td73Vkfu6+d22mmnmUS6JuWfeuopOe+880zSXZ8XTEf4azv072tbNHmsSXXtn9euXdvimP74xz/KjBkzTF+vBz60DX/4wx/ko48+kk8//dQk5xvSAxoNHXTQQS3+m48//rj861//MuurHpRvyUFRPZivByCC9e/fv9HjrrrqKnOQ5aGHHjIHJQAAQOv4a08KAIAY0WSljubSHdxx48aFPHW6vZSUlJikvU00weKVJKEtdNRsTU2NGZ3YWjoyMZLn2e773/++uTRMouuI0uaSmJG+35GOLnYlJyd76rM644wzpEePHmITPYCnB0mOOeYY+c9//tMo6X/LLbeYbfeHH37Yru0qLi42SdKLL744qu2f279069ZN2ot7YCfcgThdT2bOnFnvvdbk9bBhw8xodE34X3HFFYH79LF6IGDBggWBg37uAWlN8C5fvjww6v/222+XQw89VFJSUgLPnz59ujlQ/be//c38W5POrt/+9rfmQImO6g4+mN0aemaBHgDQEeFvvvlm4G/rbU3Qa1L9xhtvbPS8aA6OKH2v9MBOenq63HnnnS1Kous2riV/Vw+warJdX58kOgAArUc5FwAAIqAj2rp37x4yge6eOh1ci1ppLdLg061dOqJOd8oHDBhgdpw1YaUj1hctWhRyJ1hHmn/xxRdmxJ4mLHQErZaiuPDCC81jNGng/g09xVzp/Xo7VKkX9zWDuc/VRISenq/lajQmTVbs2rWr2fdHX1NPwddRf8Exu6elh6qJ7i7bvn27+be+D3pwQN8LN2n04IMPmtF5mmTU0cTPP/98yL+v76kmXfT52vbvfe97rTqlXkc6apJnyJAh5jPR2DXBEzyKcdmyZaa9OlIxlHPPPdckVINP/d+8ebNcdtll5rPW+/r27WtGEebn59d7rvt5LVmyxLy+jirUmHU0Z7ikoZss0vXAfb/dzzVUTfTgZTpSVBNZOlJ06NChZqSiWrdunUmOabJO30tN1OhBm4ZaGpdXNfd+t+Y7GupMEHfZpk2bzHqho6N1vdTvsJbBaK4mevAy/Ww00ajt0DMM7rjjjrAjyEeMGGEep4nMe++9t13rl2sSUhN1eXl5Zp3Qa72t32+Xu33QpHYwfV90uY4EDqbfY/3+N0VHIWtyU9dXXa/DjZrX9b29E4mvvPKK2baceOKJje7Tkc263dPSM7puaPu1ZMl///vfeo/T9UjPamq4rW9um+v2W3oQqU+fPuYz0edce+21jcqtuNti3Xbp6HY96KSjrnUkdjgHHHBAyPdazwJQixcvDizTv/fCCy+Y70XwWTN6xoOWS9HvhI62d+lI8OAEunuwSbdNoV5bE9w/+MEPzPujZ4WE2mY1R8uv6YHyK6+8st7fPvnkk2Xw4MHyz3/+M+Tz9O/pwZLa2lqJRL9+/cx3trU07vLy8mYfd8IJJ8hXX31lDlIAAIDWYSQ6AAAR0OSq1nN99tln651O35DWbtXTuzVxoSPANLHYkCa3NCGv92myVk9z12SxJlA+//xzkwALponNo48+Ws4880z54Q9/aJLaeuq7JjL1eZpAchNN2s5I6d/WxLPWFNYEsp4arzVmNWGhI/w0iRGOnjKuSWhNpAUnwppLgKnjjz/eJDF/85vfyKpVq8zf1NP49X3W+HQUpyY4dbkmUTThopP0uXT0oI7m09fREYnaTk1E6ful73VziTMdgaxJPB2lqq//i1/8wiSfNCmppTq0lI+2T2PRUYl66v2cOXPqJVo0iaIJfk1Y6Drgfm46YlCTfBqDfjYan76uvrf6ug2TUFqKQBPb2gZNamnyK1wJEP3ctYRF8Kn9mvxqzksvvWRK6/zsZz8zyXIdMaqJM02y6Wvquqavq0ktLdmg772O/nRFEpdXhXu/W/sdDZfk0s9JD0rp++nWxtZkn36nGiYJQ9HPaevWreZ97tKli0nkaakLXR+1tIVLR+7ecMMNpgb07NmzTTJQ11F3XWyNHTt2NFqmn2dTI6mLiopMqQ5dD3Rd0nbogT9dJ7T8hiaMNUmsBwE0IanL9OwepeuRllnR760u//nPfx74TumoZS3R0xT93uq2ULdZ7TlSuyU0ya10u9GQbqM0sXnWWWeZ90UPNuiBV93u6eh19/PVbauWO2m4rdcEdFPbXH3v9Lus642+h5qs1Zrxuh3V90zb1vAzPfbYY836rmVxdP1tWNanJdzEe/C2SA8+VVRUNDpLROn3Q+n2prkyKKFe+/333zdJ8/33398c9NVtlvaReuBL+zLtV1pS1spN4odro9Zj19cNVepI/75uP/X7fuutt5qDP21J43QPouu2SPs4Ld0SavJuNx49uGLL3AYAAHiGAwAAWm3evHlOWlqaFj52hg0b5lx44YXOfffd5yxdujTk4/Vx06ZNC3nfrl27Gi3T1+nQoYNz2WWX1Vs+cOBA81pz585t9JyHHnrI3Pf22283uu+WW24x961Zs6bRffqaRxxxRKP26uW///1vveVXXXWVWf7EE084zdHX1NcORd+Lhj9D3GU/+9nP6i3/+c9/bpbn5eU5RUVFgeULFy40y2+44YbAsgULFphlM2fObPQ3f/CDHzhZWVlOcXFxk+1+8MEHzWtce+219Za/9NJLZvn5558fWHbvvfeaZS+//HK9x/7tb38zy//zn/8Elp1yyilObm6us379+nqPnT9/vpOSkmI+o4afl76HVVVVTkvo567P0fWgIf3c9b7gv+Eu69ixo/Ptt98Glufn5zvp6elOUlKSc9ddd9V7ndNOO82s9yUlJRHF5QXu+xqsufe7Nd/RUOu9LtPXv/322+stv+OOO8zy1157rcnP0V3Wp08fp7CwMLC8tLTU6dGjhzNhwoTAsu3btzsZGRnOmDFjnN27dweWb9682cnOzg67jWjI/T6Gurz66qtNbnduvPFGs+wvf/lLvdd0vy+//OUvA8t+/OMfm3VKY1Hvvvtu4Hum31f383jhhRfM8meeeabJdt9zzz3mcX/4wx8a3aff/YKCgsBl27Ztza4boT7HUO+Tvl5zDj/8cKdr164h7wu1jul7Mnz4cGfUqFEt2tY3tc0dO3asM2LEiEbbv2effbbR+ubG9KMf/ciJRnV1tfP973/fSU1NdZYvXx5Yrp+hvr72mQ0tWbIk7DY82MaNG50uXbo4gwcPdiorKwPL7777bvN83Sb169fP/I2nnnrKbKd0+dSpU1vU9pNOOsk8vqysrNF92jfofStWrAgsu/76601f9c9//tP0m7/+9a9N+3Td/t///udEYs6cOU1+Xz/4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vFepqaly9913xyhyAADqo++OXd994403mtcZN26cHHDAAfL666+zugEAYo6+O3Z990033WT2u937n3zySdZYJCYHgKe8++67zvr1652BAwc6X3zxRWD51Vdf7VxxxRVObW2tub158+bAfQ0f29DcuXOdww8/3OnSpYtTUlLixMtJJ53k3HPPPfWWXX755SY2NW3aNOePf/yj+Xd5eblz8MEHO7fffnvY1wt+fChffvmls3TpUmfKlClNPg4AgGjQd8eu737llVecsrKyQD+enZ3t7Nq1ixUUABBT9N2x67t37twZ+PeGDRucrKwsp6CggDUWCYeR6IDHHH744dK/f/96y0pLS+Xvf/+73HbbbWaEuurdu3eLX1Ofe/3115vXbjhKPZiOBL/00ktl4sSJstdee8lFF10kn376qRx55JEyePBgmTFjRuCxuuy5554LPO8nP/mJHHPMMTJ8+HA5/fTTzchy9etf/1quvvpq828dCa+jw4NH1//rX/8KOUI+PT1dDj30UFm7dq1ESkexjRo1SpKT2dQBANoOfXfs+u4TTjhBMjMzzb91VJvjOFJQUBCjTwoAgDr03bHru7t06RL4965du0zfXVtby6qGhENmCbDA6tWrzSlUv/vd78ypzYcddpi8+eab9R4zdepUs7OpCengnc2lS5fK+vXrZdKkSeY+Tag35auvvpKXXnpJVqxYIe+9957Mnj1b/ve//5nljz/+uCxZsiTk87T0zIsvvijLli2TrVu3yn/+859GjznppJNk8+bNgTI1//3vf015mtGjRzd6bFFRkbzzzjvywx/+sMXvEwAAXkHfHb2HHnrIHMQfOHBgDF4NAICm0XdH7p577jElZvfbbz958MEHpWfPnqxuSDgk0QELVFdXmyPDe++9t3z22Wemgzr77LNNslppsnvRokXy+eefm/ri06ZNCzxXk+aaYE9JSZETTzxR1qxZYxLd4fzgBz+QjIwM6dChg0nKa/I9LS3N1DPXv79y5cqQzzvttNOkY8eO5u8cdNBB5gdIQ1qbXNvijkbX64aj0LV++tixY6VXr15mRP5RRx0V8fsGAEC80HdHRwcLzJo1y5xB556FBwBAW6Lvjq7GvA7Emzdvnhn813AuNCARkEQHLDBgwABTkuRHP/qRub3vvvuacis6Oty9X2myW0unvP/+++Z2VVWVPPbYY/LII4+YyUeHDh1qJgzRxHphYWFg4g9NgLs0ge7ShHjD2/rDIpSWPk5LxGgJl1WrVslHH30k55xzTr37r732WnNA4OuvvzYHDHRCE3XwwQebtn7ve98L+bo64t6N5/LLL2/2PQUAoC3Rd0fed7/77rty4YUXmjPcdFQbAADtgb47+v1uLamqk5DqWeVAokmNdwMANE9Hl2u98ddffz0wmlwvWu9b66VrstytQ/bEE0+YJLt64YUXzGnQH3/8ceC1dBS61jPXMi1uWZX2pLN/6+Xcc881pVqys7PD/oD585//bGqta811PaLdFB0lH494AAAIhb47sr5bz66bMmWKPP/882ZHHACA9kLfHVnfrYl1Xa70jPQvvvgicBtIJIxEBzxGk8ZaxmTDhg2mlIqOHlc6IltLnWiJlVNPPVX++te/miO8WtJFS55oCRS9T0dvPfroo+Y5OuLcHb3u0sS7Pk9Hd8WLlnDRUeahJhQNdsopp5iE+3333RfR33n44YfNe/n000+bCU7139qhAwAQS/Tdseu79beBTjyuI9HdkW7umXcAAMQKfXfs+u7rrrtO9tlnH9Nna9nZe++91+QdgEST5Oi0uQAAAAAAAAAAoBFGogMAAAAAAAAAEAZJdAAAAAAAAAAAwiCJDkRAZ5rWel9e88knn5hJuIYPHy5HH320bNy4Mexjb731VhkyZIi53HTTTYHlt912W6AGqV504s8ZM2Y0+7d1ctNBgwZJZWVlo/sOOOAAK2bnfumll0wtuGHDhsnpp58uxcXFIR9XW1srV155pXnvtGa91nwL9p///MfUpx89erS5fPvtt+0UAQDAtr68pX33f//7XzP/ibZZJ+vSvju4KmO4fr0p+fn5poZpuMnVvNh/6Xwv2k9rnJdccon5/RGKvgfaF7u/Z5588snAfTphuc4P49537bXXtmMEAIBIJVLf3Vy/7se++8YbbzT74/reag7h9ddfD9x3+eWX18tTZGRkyD333NOOUQAi+iUF0Epvv/22M27cOE+9bzU1Nc6QIUOct956y9yeM2eOc8YZZ4R87Lvvvuvsvffezq5du5zy8nJn//33d1566aVGj9P7unXr5nz22WfN/v3/+7//c84555yQ9+nr63vWHqqqqiJ6XklJidOzZ09n2bJl5vbll1/uXHPNNSEf+8gjjzhHH320U11d7Wzfvt0ZMGCAs3jxYnPf559/7owYMcLZuHGjuV1cXOyUlpZGHA8AIHH78tb03dqf6ONVRUWFc+CBBzrPPvtsq/r1hh588EHnhhtuCHlf9+7dnTVr1jjtQfvTlvjmm2+cPn36OJs3b3Zqa2udk08+2bn33ntDPnbnzp2Bf2/YsMHJyspyCgoKzO1p06Y5f/zjH2PUegBAe0mkvrup+/zad7/yyitOWVmZ+feXX37pZGdnm982DelrZWRkmGugPTESHWjC7t27zezSemRYj4Yed9xxIR/32GOPmaPIepk8eXLgSPTDDz9sjkzrbNf6Gocffni9I8N33nmnHHTQQbLffvvJ8ccfL2vXro3481iwYIGkpqbKUUcdFZht/MUXX5Ty8vJGj33qqadkypQp0qlTJ0lPT5eLLrpInnjiiUaPe+655yQvL0/2339/c/vjjz82/9YjvzrC+v7776/32NNOO838e968eYHHXHjhhVJdXR143B/+8Ac58MADzf16/dFHH5nlzzzzTL33t6amRgYOHChLly5tdjSCHom/+OKLzWvqEf1IvPrqq7LvvvuaI9/qZz/7Wcj3xH3/9Ah6SkqKdOvWzawj7mPvuusuM3K/b9++5nZWVpZ07NgxojYBABK7L29N3639SXJy3U93vb+iokKSkpKa7df19dyRbtovP//88yH77hdeeEFGjRplHnvdddfV+9vXXHNNoO/W+FesWBGI/dJLLw08rrCw0IyC27FjR5Nx63uqMf/whz80o8U//fTTFr1f+ltBP4fevXub2H/605+G7au7dOkS+PeuXbvM6D49kwwA4H1+6Lubus+vffcJJ5wgmZmZ5t/6N7TvLigoaPS4Rx55RCZNmmReE2hX7ZqyByyjR4KPO+64wG0dddzwCPhXX33l9OrVy4xyUrfeeqtz/PHHm38/9NBDTocOHZylS5ea27fffrtz7LHHmn8//vjjzo9//OPAEdxHH33UOfHEE82/9ai2vn6oy4033hiyrc8880y9tqrc3Fxn9erVjR570kknOf/6178Ct19++WXnsMMOa/Q4bes999wTuH3KKafUe96OHTvMtR5RHjx4sDmarkfR+/fv7/zvf/8z973++ut6TlpgJHp+fn7g+R999JEZta30fRg4cKCzfPnywHuvo72bo6+blJTkvPPOO4Fl//znP8O+f+GOet95553OpZdeGrito8eTk5NDjmwfPXq0M2/evMDtv/zlL86UKVPMv/fdd1/npptucg4//HBn/Pjxzi9/+csWH6UHAPirL29N360+/PBD0welp6c7V199tel/m+vXx44dG+izdMSbO0Jb+2ztu/U1tm7das48W7Jkibnvr3/9q+m73dFswX33E0884UyaNMn8W19L2+u+5h/+8AfnoosuavYz0fc0MzMz0OerO+64I+z75Y7Mu+KKK5zf/e53gedoe/Py8sL+nT/96U/O8OHDnY4dO9Z7f3Qk+qBBg5wxY8Y4kydPdr744otm2wwAaD9+6Lubus/Pfbfrb3/7m3md4PfLpX37Cy+80OxrALGW2r4pe8AuetR72bJlZlTyEUccISeeeGKjx7z99tvm6LXW1lT62N/85jdmJLU6+OCDzdFhpUd8f/nLX5r79Ajy/PnzA6O83ccrPcL75ZdfSjzp0fgPPvigXg1Rbddvf/tbWblypTmyf+ihh5rlGoeO4Naj6YsWLTJH5idOnGju01EDgwcPDrzGF198Yequb9++3TxOj4jrSAM94qzv3V/+8hdT20yvr7jiiha1VV9fPx/Xj370I3OJBx11rzG+9tprZsSbHnXXEfstjQUAEFuJ1JdrO7766iszKktHgr3//vtmdFlTjjnmGJk+fbqcccYZpk92a8nqGVgas44K0zPNdBSbjtZTenaXzv3h+t///id//vOfpaSkxPRt7mg1He2tr/uPf/xDfv7zn5v+TkfFtzSWESNGBG5rXfJY1ya/6qqrzGXhwoVy/vnnm/i7d+9ufof06dPHjADUM9h05Jv+tuncuXNM/z4AIDJ+6bvD3efnvlu9+eabMmvWLBODOzrfpe+RxhRqnQDaGuVcgGaSs1pORDuqDz/80JxKtXPnzibfs4Yb+XD01KSZM2eaTlov2nnqxf1BEDxpRvDFnSzs97//fWCZTrgxYMCAeqehacdSVFQUKCsSrOFj9dQ2XRbsoYcekh/84AemXInr6quvlpdfftnseOqkH/pDRekO6Kmnntrse6KTjuqEnXoK2eLFi+W9994zy/XUNaUlUp5++mn57LPPZNWqVSYB3RINd3off/zxsO+fJueV7lS7y/R9D/WeaJya6G/N+6fX+gNIDwroafUar/7AAQDEh5f78tb03cFyc3PNzqP2mc31S1pGTft0LS02bdo0ueOOO5rtu4PjX7du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fE5Dhw4VP3jttdfk0ksvNYnARx55RB566CGz3JaDPPAGP/bdfuq3/dp302/bwW99N/02YoW+m747EdF324G++yFP7HOTRE+Q08h0p1R/IP773/82I4CWLFkS95WrrVRXV5vrww47TD7//HNZvHixrF692sSbiDvk+mNN48rMzJRTTjnFnE72xz/+UT799NOEPbXMHaWo11dddZXMnj1bDjzwQHnuuefkq6++Ei8qKSkx1xMnTpQFCxaYz0bXz0TlHiAYMGCA7L///lJeXi433HCDvPHGG7J9+3ZJRMXFxeZav4+TJk2SX/3qV3LyySfLe++9J++++27gPqAl/NR3+63f9mPfTb9tB7/13fTbiDX6bvruRELfbQf67l95ap+bJLqlXn75Zfn5z39u/t27d2+zUqWmppofw8cee6w5ZTjRvP7663LOOefIrbfeKoWFhXLQQQfJ+PHj5eijj5Y777xTEjXe3/72t2bDqaf7a/LhgQcekE6dOsmf//xnefbZZxMqAeHGrElzjXn37t1mXdYYJ0yYYE7X0o2nl2h7zjzzTLnxxhtlzZo1MnjwYNl3331N0v+FF16Q/Px8SSRuvDNnzjTxnn766SZZdM8995jv4yuvvGLK7yRSksiN+aabbgqUb8nKyjL/3meffcz6+dJLL5mYEzEBitjxW9/tt37bj303/bYd/NZ3028jlui76bvpu+PPb/vcir670pP73CTRLTRv3jxTMkKv//SnP5llbh3VjIwM+fbbb6WoqKjectv961//Mp3Xz372M5PA0tHJLk1IaMwffvih+TK59YkTJV49Qnz11VdLv379zCi2F1980ZSS0E5Ea2JpojkRBMfsjow644wzzGhFTV7efPPN0r17d8+t048//rg5Vf973/uezJ07V95//32z/Pzzz5fS0lL55JNP6o3EtJ0brybDNN758+fL/fffH0ikaN1f3f6sX79eEoUbs/5Ie+yxx8zItrS0NFOS4pJLLpFu3bqZix/K9yByfuu7/dZv+7Hvpt+2h9/6bvptxAp9N303fbc3+G2fW9F3F3tynzs1rn8dERk+fLgZMaIrj47mmjJlilmZqqqqzEp23HHHycMPPyyTJ0829VVtpkebdAdbf/QfddRR0qdPH/Nv3Vjq6XS5ubnmcVpWQWvLfvzxxzJixAg58cQTrZy8K1y8P/rRj8zEmsOG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6DLRLmulxMfHwwjvIZkskPZa5TOD/TUvI+5fI7bZV1brs5H6GxUVBaOQ5LSXX35ZfeedOHEi/vGPf+C7777DTTfdpJLT5Lj9/vvvD3YziYiIrBdEl4FYap4vWrQIY8aMcW0/evQojh07VmObu3bt2rl+v/XWW1Ug3RMeiBuLkb4Q+4PV+mvUPhuxzb5gf/VLbwfichbY0KFDsX///hpZ5fJ7586d64zdMnEuB+byfqrvPhqZJJdLbfL+M8p7UPpopPb6iv01NyPuXyO22VdW67NR+qv39rmf7fXss89iz549CA8PV2VVv/nmG/zud79rdM0TIiIiK2qxILocRN9444244IILMGfOnBq3SVb5rFmzXKd81yYLkUoddfHee++pAd0THogbj1G+EPuL1fpr1D4bsc2+YH/1SQ+vP8k+l5rossConKEhi4zeeeedqlb6rl271Jj85ptv1jnDTF5To0ePdi0mumLFCpXRRkRERPog65toZdMqKipUYkVja55oWEbVWFi+0fyMuI+N2GZfsL/65e1rsMWC6Js3b8Zbb72lBmQJhIvly5erAVlKuTz99NM17v/Pf/5T/bzjjjtU5rkM3nLALllwL7zwQks1m4iIyNKOHDmC2267TX3Blctdd92lxm7JXpNSa3LwLZPj2gH2b37zGzV2S8mXxx57TB2Az58/HxMmTMAll1wS7O4QERERoM64vOeee9CtWzeEhYWpsVsS0hpb80TDMqrGwvKN5mfEfWzENvuC/TV+GdUWC6KPHTvWY2R/69atdbbJIK559NFH1YWIiIha1llnnYUdO3bU2S5Z5nIKeG1SW1XTp08ftZg4ERER6Utubq5KVPv1118RHR2Niy++GJMnT/b68Syjaiws32h+RtzHRmyzL9hf45dRbfGFRYmIyHtHsouwfm8GjuYUo1tCDCb274Du7WL5FBIRERFRs61fvx69e/dGQkKCui5ni33xxReNrnmiYRlV42H5RvMz4j42Ypt9wf7qk7evP2u8SomIDBpAf3ztfqzZlYZDmUXqp1yX7UREREREzZWcnIwtW7aosmxVVVUqgC6Lh2trnsg2WfNk2rRpfJKJiIiYiU5EpF+SgZ6WX4I+HeIQYrPB7nDgQEah2n7L2F7Bbh4RERERGZSUZZsyZQrOOOMMlYEna5dMnz5drUFW35onREREVsdyLkREOiUl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u6hIh0RKEhLS53ves+4mgQQC2WR3dv6/5xl2d3bYnTmZmbPzzjnvEQAAUDCC6AAAAAAAAAAAFIIgOgAAAAAAAAAAhSCIDgAAAAAAAABAIQiiAwAAAAAAAABQCILoAAAAAAAAAAAUgiA6AAAAAAAAAACFIIgOBJg777xT6tevLy6XS1avXu2dn56eLqNHj5ZGjRpJy5Yt5YYbbvC+p8s3adJE2rRpY6YPPvgg32cmJydL+fLlZcSIET5bz5tuukm+++67ky736quvyuTJk2XPnj1Srlw5OXDgQL73V61aJVWqVJGMjAwZNmyY1KpVy2zDWWedJYMHD5bU1NTjPs+znbGxsd7ldTp2ffr37+99T6eQkBCZO3euj0oAAAA36m7f1d1bt26VCy64wPt5d999t+Tk5LCrAQB8irrbt3X3hRdeKK1bt5bmzZsfF48AgoYFIKB8//331s6dO6169epZq1at8s6/6667rNGjR1s5OTnm9d69e73vHbvssaZOnWp17drVqlixopWcnGz5S9++fa0XXngh37xRo0aZbVNDhw61nn32WfM8LS3N6tSpk/XEE08U+nl5lz+ZX375xapcubKVnp5erG0AAOBY1N2+q7v79etnPf/88+b50aNHrRYtWljz5s1jpwMA+BR1t+/qbv3/GnNQ8fHxVt26da1du3axxyLo0BIdCDBdu3aV2rVr55uXkpIib775pjz66KOmhbqqXr16kT9T/+99991nPvtEd4W1JfjIkSOlV69ecsYZZ8jw4cNl+fLl0r17d2nQoIGMHTvWu6zO+/TTT73/75ZbbpGePXtK48aN5corrzQty9V//vMfueuuu8xzbQn/1ltv5Wtd//777xfYQj48PFy6dOki27dvL/J2nqwMtPV+2bJlffJ5AAB4UHf7ru7W3zmJiYnm+dGjRyUzM1Nq1KjBzgYA8Cnqbt/V3WvWrJFLL73UPI+LizMt0mmNjmBEEB2wgT/++MN0oXrsscekffv2cv7558s333yTb5khQ4aYNC8akE5ISPDO37hxo+zcuVMuvvhi854Gk09k3bp18sUXX8iWLVtk8eLFMmnSJPn666/N/BkzZsiGDRsK/H+aeubzzz+XTZs2yf79++Wjjz46bpm+ffvK3r17vWlqPvnkE5OepkWLFsctqxfQixYtkquuukqKSy/CZ86c6dN0NgAAnAh1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1atngtUnC95r7zUNgOtn6s3q0/HVV19J27Ztzfaq22+/vdC6XMtPe52Fhoaam+G6j3iW1ZZxuq/o3wIA4H/BeN2tda7e9NY6Wek1aHp6uvl/lmWZnlS1a9c27+mNYa3bddv1Gvff//6393O0zrziiivM882bN0unTp1Mnarz8vbGev/99+W8884z9aR+jq6j0oZfWm/qd3roZ2ideiJafhoX0CC2llveHl0lUV4FWbhwofkbe25EAKXOAlBkH3/8sXXRRRd5Xx84cMA8fvfdd1br1q3N83Xr1lnVqlWzdu3aZV4/8sgjVu/evc3zadOmWWXLlrU2btxoXj/xxBPWhRdeaJ7PmDHDuummm6ysrCzz+t1337UuvfRS8/zbb781n1/QdP/995tl5syZk2/dVFxcnPXHH38ctx26HpUrVzb/v2PHjtaHH37ofa9///7WXXfdZfXs2dO8P3r0aOvIkSPmvVatWlnLli0zz7Ozs61Dhw6Z50lJSVaDBg2snJwca//+/VZsbKy1YcMG895rr72mtbO1bds28zo+Pt77XTNnzrQuvvhi81w/S9fX85nPPPOMNXz48JP+TXRbIiMjrc2bN3vnPfnkk4WWl/4NlW7XY4895v0/ur516tQ54XelpqZaFSpUsNauXeudN2TIEGvUqFGmPHTbGjdubF122WUnXW8AgPPq6mOdSt3dt29f6/333/e+njdvnnX++ecft5zWZ1oP79y507y+/PLL8/2/gwcPmkets7Xu1jo8PT3dql27tvX111+b9xYsWGDqbi2zY+vuH3/80WrSpIl5ruVQr149bx2sZd+jRw/rZPRzXS6XtWjRIu+89957r9DymzJlSoGf89RTT1kjR470vk5JSbFCQkKszMzM45Zt0aKF9zeMeumll6zBgwfnW+bhhx+2xowZc9L1BwA4ty4/lbo7L/3+F154wftarx+1zomKijLb0a5dOys5Odm8d+edd+a7VvVsv+rUqZO1ZcsW87x9+/bWG2+8YZ7rNapus267+vvvv01dr/RaXL8jLS3N+xla16uVK1daDRs29C5bGP0M/W3wzjvveOeVZpxC4wRt27Y18Ya8+wFQmmhuAZwCvYO7adMm09KpW7du3hbIeWmXI72bXatWLfNal/3vf//rTTOid3k9rby15bXeVdb39M60pgHx3JnOm5bE06XJV/r27SvXXHONREVFme3RO/t6V7xDhw6m5Zl2Gde7vNpNTFujPfzww+ZuvXYxGzNmjMm1pv/Hk4dM71rrNuvddG3xpi0B9I6/0lZmmoPU4+uvv5YXX3xRkpOTTdcuT0tzvautn6vdqf/1r3+ZlnLaaqwotEybNGnifa3dsUuiS7a2uNPWatoawEPzzmrrer3DX7VqVenevbskJCT4/LsBAM6qq0/Hrl27pF+/fvLqq696W7PpemmKE23Vpq3yunTpYubrdmhLtOjoaNONXFuJ9erVy7yndXyDBg28n6up3TSv64EDB8xy2otMWwlGRkaasnvppZfkhRdeMI+jR48u0rrq5+vfx0NbldGyDAAQjHW5tnT/4YcfzBgmHtoiXNOwactqzZU+fvx40zta049py3m9ntW0Zbr9nvp53759prW5XpPqo67rsGHDzHt6jeqp4z3pS7Ve1d8GWnfrdbfO07pfr+m1JbnW91p3a9nptfzJaDoa7ZXtjziF/r7QdDd6zX2yHm9ASSGdC3AK9IJPT9haWWv+Mu3yfOjQoRP+n6JURkq7U02YMMGb/2vdunVm8vxAyDsgSd7JM7BY3bp183VD0yB1YmKiyQ96LE2TohWT0h8W+qNEt8fzOdoVrlKlSqaSHDRokAmMe7pzT5s2zfxfzZv+5JNPHtel7ETbv2PHDlP56Q8D/cGgPyLyduO68847zYW/5nWNi4szgemi0GB/XprntLDy8nQZP7a8tHuazjtZKhe9KXBsWWp3QU3rojcIdHsLG2AVAODsuvrxxx/3ztOc5qdSd5+s3tIxTfQiW4MEV199tXe+5h3V3OmaO1UvPvVC+WR1d94y0UFHdcBOvZmudbfeaFfaBV1pipTZs2ebYIDmaS3q+CjH1t0zZswotPz0At/zO8EzT8u9oDLR7SwoLcvp1PsAAP8I5Lr8VOpuD72G1pvcmk7MQ8cg05vb2pgsJCTEXF97coBrqlLdbm0opsFuDS4XZRyyvGUwcOBAuemmm0zdrdup9a7n2lvrdb2BrjfJNRWrNpwrCo0D6Lp6lGacQm9CaOM1HRBdt033j7wN6YBSUart3gGb067RntQm2vVZ03+sWbOmwG5lu3fvNq8nTZpkXXLJJd7uSeHh4damTZvM68mTJ3u7Nmk3Zu2e5OmqlZGRYbpWFZV2B9Nu2dqlyvPZV111VYHLerq8qX379pnuW9988415vXTpUqtLly7erl6aquT22283zz3rrV555RWT+kXLQbty6/p6unxrN3LPslOnTvWmc9EuZlWrVjXdrbW72M0332zSo+Sl6V20S3nerue6vp6u48fSMu3Xr591qrT7WI0aNay9e/eaddEULC+++GKhy2/dutUqV66clZiYmG++dpPzbLv+vfRvv2fPnlNeHwBA8NfVxam7df2bNWtmtk3r6LPPPtv6/PPPzXta75x11lnWW2+9ddz/y5vu7KuvvjLrr/SztEu0p5y07vWsh6Z18aRz0XqvTJky5veCp7u8vudJv6ZuueUW8//zdj1XWnfn/c2Rd1t80Q1bU9Fol3DP30p/s9x9990FLqt/V001o9339e9Xt27dfOnZFOlcACAwBHJdfip1t2d5rXM8KdM8nn76aZNCVbdPPf744951/O2338z/U7oNlSpVMs81Xc0vv/zi/YxzzjnHW/evX7/ebLMnnYtek//666/m+fTp003dvWrVKu//1fLSujtvWjSldeXPP/983Hbo9fyx1+6lGafIi3Qu8BfSuQCnQO9Q611rvXutaU90gC9NXaIDZHnoXXJtCa13zZV2P5o6dar3fe1WpoNxaGutypUrmzvQSrtaaTdpz4Ab+vk6aFhRW2PrHWFt4a0DdegdZr2zm3eAS72Lq93b2rdvb1p06V1sbWmuKVU0fYreBfesn97d1u/Vwbe0VbW2Dlfagk27cOugmnqHWFOufPvtt6bbmH6W0hbkmpJFByrT5bQcdDs9Xcz0rrF+ps4rqAWctmjT1uqa2sVDu7j5erAvbd0wceJE78jemoZFy87Tmk/LK2/XNN0mbRGgXe3y0oFMtWWcrp92if/www/9PlI6ADhZINfVxam7tZ7SQdY8KcX0uadl2kMPPWR6ez3//PNmUtpVW1uWaQs2rau1TtZ6XdOQ6UBk2uNMu0QrfU9TqGkrde3WroOHald6pfXeI488YgZg0xZiWo8XVHdrryx99IiPjzdllbfVna9pvfvGG2+Y3xP6t9C/6zvvvON9X1vCffnll6ZcdT/Q7vuNGjUyLfXGjh3rLctvvvnGtADUrvG632j6Nh1ovait6gEAzqnLT6XuVpomVf+PpkbNa9SoUSZlida3ei2tA4R7rru1HtLv0PpZr9d1vtZRmprN87lKt0nreq3btX7TNDAe+ntAr6m1pbte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WVniVJs3b5brrrtOHnjgATl8+LA49XgYMWKEfPbZZ96bCcFwIj9VW7ZskSeffFK2b98uGRkZjiyHTZs2yaRJk2Tbtm2OLQMELupuN+pv6u68x4TT62/qbupuBC7qbTfqbertvMeE0+ttRd0tQXfdTRA9iD3++ONy1VVXydChQ6Vhw4biREePHpVXX31VBg8eLNdee62EhYWJ0+gJ6umnn5ZbbrlFKlasKJUqVTKPdj5xnY6FCxfK7bffLm3btjXB42effdbMd7lc4iR6M2nkyJGSnp4u77zzjkybNs1x5fDrr7/KXXfdZcrgzTfflLfeestxZYDARd3t5vT6m7o7F/U3dbei7kagot52o97mmtuDetuN624JyrqbIHoQOnLkiHmsW7eunH322ZKWlibjx483J7MDBw6Ik8rg77//loSEBMnMzJR+/frJyy+/LMuWLTPv5eTkSLBLTU01J6h27dqZv79u/48//mhOZjrfCYH05ORk86jbe+aZZ8ro0aOlW7ductZZZ3mXcUI5JCUlebf14osvlgcffFAuu+wyWbx4sXz//ffe95xAt7N+/fryn//8R4YNGybr16+Xr776yvse4A/U3fnLwcn1N3W3G/U3dXde1N0INNTb+cuBetvZ19yKetuN6+7grrsJogcRDYZdffXVMmHCBNNV4sorr5Ts7Gx54YUXpE2bNvLll1+auz/BfPGZtwz++OMPqV27tjRu3FimTp0qTzzxhFSrVk0eeughc1EeEhIS9OVw3333mX3hggsukDJlypj3Bg0aZLra2f0OYFHL4P7775e//vpLmjdvLrGxsfLvf//b9NDQHzgPP/yw2RecUA6axseTviU6Oto81zLRyuuLL74w54VgLYe5c+ea/d4jKirK3GTUc4T20tGbCXp+DOYyQOCi7j6+HJxaf1N35y8HJ9ff1N3U3Qhc1NvHlwP1tnOvuRX1dv5y4Lp7UFBfdwfnVYhDzZgxw+S8Pvfcc81F5y+//CKvvPKKLFiwQAYOHCg33nijGeQjmAeW9JTBeeedZ9JUzJs3T+rVqyfx8fHmUS++mjVrZuYHs7zloPvCokWLvO9pENXTLV5vsjjleNAfNo888ojZ//VO6Icffij79++Xd999V4KZpxzOOeccmT59urkzrj/utAxuvvlmE5jQydOKJBjz0OnfeN26dfL888+beTExMabi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ddVVx72XkZEh1157rTz77LOybt060/1s7dq1xdomAACCmZ3q7mnTpkmDBg2kXr16p7wOAAAECzvU3S+88IJJKdOuXTt5/fXXpWrVqqexpYCzEUQHglhWVpa5U92sWTP59ddfTcWplev+/fvN+4sXLzaV68qVK01XrqFDhxb5sydPniytWrWSatWqSe3ateWCCy44bpnNmzebfOee9/TxzDPP9OEWAgAQXOxSd2twYOLEiaZ7uqfVHQAATmSHultzueu4JNpiXYP9Bw4cKPZ2A05DEB0IYnXr1jWpUq6//nrzum3btmZwL7077XlflSlTxuRZW7JkyXGfsXHjRu8AJKNGjcqXV01/CGjON/2h8OqrrxZpnYpyoV3YdwIAEOzsUHd///33cuONN8rnn39uWrWpw4cPe7+zf//+xSgBAADsxQ51t4emVNXBSrVVO9fdwKkhJzoQxPQud8+ePWXBggVy6aWXyrZt28ykA4lo3rbMzExvfrSZM2eayv5Yejf9RAOW6A+CF198UW655RYzergONOahF9b6HXqx3a1bN/P4+++/n3S9T/adAAAEq0Cvu7U1nXYT/+yzz7xjmyhdJ+puAIATBXrdrcFy/XxP6plVq1aZ17p+1N1A0dESHQgSWplq9y4dzOTiiy+Whg0bmvl6p1q7gGn+tSuuuEJee+01c+dZu5ZpNy/tGqbvaUX77rvvntZ3X3755XLWWWfJyy+/fNzgJ7NmzTJdx/Q7NHeqVvCeHxBvv/22WefZs2fLf/7zH/NcK3QAAJzAjnW35nJNT083LdE9LeY8Le0AAAh2dqy7x40bJ82bNzd1tqaZmTJligmgAzg1LkuH5QWAEpKcnCzR0dHm+S+//GIqfr37HRUVRZkDABCAqLsBALAX6m6g5JHOBUCJ+uijj8wo4Xq/Tgc7mT59OgF0AAACGHU3AAD2Qt0NlDxaogMAAAAAAAAAUAhyogM+oCNba34xf/v555/NIF+NGzeWHj16yO7duwtd9pFHHpEzzzzTTA888IB3vg58onlONZea5lsbP368aUV+MjqQSf369SUjI+O499q3b2/KKNB88cUXZhsbNWokV155pSQlJRW43AsvvCAtWrQwZaK57N57771ilxcAwL/sVndrSrROnTqZ3lyaazUvzYOq26J1lU5PP/10kb47mOvuefPmydlnn23yxN5111353ktISJDLLrvM1OmaE3bo0KFy9OjRUtoCAMDpCqa6+0TX5CcSHx9v8psXNsDpX3/9JYHmzTffNPW2bufNN99sfn8U5K233jLX1dqD/bnnnsv3ng6mqjnmPeOx3HvvvaW09kAuguhAkMjJyZHrr7/eVDa//fabGRX82ItGj8WLF5tRwdeuXWtG6tZRxPViUz322GOSnZ1t3tOBwtasWSNz5swp0g+ajh07StmyZcWfsrKyirTckSNHzOBon376qWzdulVq1qwp//vf/wpcVn+kLF261JSHlpOWq+Z1L055AQBwKnV3jRo1zHKaIu1YderUkfnz58v69etNffXKK68UKQAezHW3XqzrxXhBF9mPPvqoeV/rbi0zHfRNB2EDAKC06u4TXZOfyGeffWbGGfM3vQYuim3btsmDDz4oS5Yskd9//93Uua+//nqBy+rN7w8//FCuu+66At/XOn316tVm0kFcgdJGEB04BdpKSUezbtasmbnzfNFFFxW4nOb91tZNOvXp08d7Z/rtt982d6q10tPP6Nq1a747xU899ZSce+650q5dO+ndu7ds3769yOu2YsUKc8dWR/72jBr++eefS1pa2nHLfvDBBzJ48GApV66caaE1fPhwU4ErDQLrd7tcLilTpoxceOGFZnvUTz/9ZCo2T2s3vUj30Ava/v37m+fLli3zLqOttPNeHD/zzDNyzjnnmPf18ccffzTzNfCctzy1Uq5Xr575QXGyAIAGufWiWj/zk08+KVJ5ffXVV9K2bVvTmk3dfvvt3jI4Vs+ePaVChQreQEX16tVl586dJy0vAID/BUvdXbt2bfM9Wm8fq3PnzqZuUlpfad3mWUen1t3aOlD/3lq+x9I6Wwdg00CItsJPTU015QsACAxOqLtPdE2un6fb5KmXNXBeUN09d+5c06NKlx03bly+z7/nnnu8dbdu/5YtW7zbPnLkSO9yhw8fNi3YDx48eMLt1jLVbb7qqqtMa/Hly5cXqbz0t4L+HfR3ita/t956a6F1t/6tdXtCQghVIkBZAIrs448/ti666CLv6wMHDpjH7777zmrdurV5vm7dOqtatWrWrl27zOtHHnnE6t27t3k+bdo0q2zZstbGjRvN6yeeeMK68MILzfMZM2ZYN910k5WVlWVev/vuu9all15qnn/77bfm8wua7r//frPMnDlz8q2biouLs/7444/jtqNv377W+++/7309b9486/zzzzfPH3roIeuKK66w0tLSrOTkZDO/ZcuW5r3LL7883/87ePCgeczJybEaNGhgJSUlWenp6Vbt2rWtr7/+2ry3YMECzW1iykjFx8d7//+PP/5oNWnSxDzX7a5Xr561efNmb1n36NHjpH8T/VyXy2UtWrTIO++9994rtLymTJlilnnqqaeskSNHev9PSkqKFRISYmVmZp7w+3S7atasaR05cuSk5QUA8L9gqbs9dH369etX6PsbNmywYmNjrZ07d5rXTq+7H374YWvMmDH55uk+0L17d1PW5cuXz/eZAAD/c0LdfaJr8latWlnLli0zz7Ozs61Dhw6Z51pna92tdfj+/ftNfa/1vnrttddM3b1t27bj6u6ZM2daF198sXmun6Xr6/nMZ555xho+fPhJ/ya6DZGRkd46Xz355JOFlpf+DdXo0aOtxx57zPt/dH3r1Klzwu8aOnSo9eyzzx43r379+uZau0+fPtaqVatOus6Arx3fNANAofTO6KZNm0zLp27dupmuW8f67rvvzN1szdeldNn//ve/3u5OmhNN764qvQP873//27ynd5Q1Z5q2Fju2e5Te8dUuS6VBc3rrdN5555nWbHrn/Ntvv/Wuh3ab1i7Ueme/S5cuZr6ut7YKi46ONt3R9M58r169zHvaaqBBgwbez1+1apXpRn3gwAGznN4R15YGkZGRpqxeeuklk4NcH0ePHl2kddbP17+Hh3av08nXNF2Lts7TVgPaYuBk5QUA8D8n1N0eu3btkn79+smrr77qbVnt9Lq7IJpDXlsmLly40LRC1xZyb7zxhtx0002l8v0AgBNzUt1dWE/oMWPGyIABA0yd7MkDrz2yPL2gtaeZtkDX+kxp76477rjD+xlff/21vPjii96eV56W5hUrVjSfqynP/vWvf5keanp9WxRapk2aNMmXXqW0cpPr7xBNj6Ot1LUH2yWXXGJ+25QvX75Uvh9QBNGBU6AXfNpFWYOkeuGlXaZOVslqBVcUOhjlhAkT8nWtyvsDQSu4gmi3Na1Q6tatm68bmlaWiYmJJl/osY5dVru26TylF8TPP/+8973HH3/cO3CJ5nrTi3Pd9vvvv990LXv55ZdNJVbQQCnHloF2mdZBwHR7tGuZDgamgef09HTzvTrIiP4IGDJkiMmXVtRcb8dWnDNmzCg0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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training Flow GUI — trend summary (positive slope = getting slower over time):\n", + " location slope_s_per_day r n\n", + "165A-miniVR-T-9 0.778136 0.537963 16\n", + "165A-miniVR-T-7 0.562801 0.785912 20\n", + "165A-miniVR-T-3 0.325829 0.271154 42\n", + "165A-miniVR-T-4 0.309322 0.412615 40\n", + "165A-miniVR-T-2 0.304064 0.345220 57\n", + "165A-miniVR-T-6 0.189254 0.160140 97\n", + "165A-miniVR-T-5 0.158072 0.225607 97\n", + " 165I-Rig2-T 0.119057 0.181652 58\n", + " 165I-Rig3-T 0.095035 0.146771 57\n", + " 165I-Rig1-T 0.094000 0.288977 90\n", + " 165I-Rig4-T 0.038733 0.068738 97\n", + "165A-miniVR-T-8 -0.015792 -0.005774 22\n", + "165A-miniVR-T-1 -0.071379 -0.064746 40\n" + ] + } + ], + "source": [ + "# === Startup time as a function of calendar date, per rig, split by startup_type ===\n", + "df_good['date_ordinal'] = df_good['startup_datetime'].map(pd.Timestamp.toordinal)\n", + "\n", + "for label, subset in [('Rig Tester', df_rig_tester), ('Training Flow GUI', df_training_gui)]:\n", + " if len(subset) == 0:\n", + " continue\n", + "\n", + " subset = subset.copy()\n", + " subset['date_ordinal'] = subset['startup_datetime'].map(pd.Timestamp.toordinal)\n", + "\n", + " rigs = subset['location'].unique()\n", + " n_rigs = len(rigs)\n", + " cols = 3\n", + " rows = int(np.ceil(n_rigs / cols))\n", + "\n", + " # --- Per-rig subplots with trend lines ---\n", + " fig, axes = plt.subplots(rows, cols, figsize=(cols * 5, rows * 3.5), squeeze=False)\n", + " fig.suptitle(f'Startup time over time — {label} (after 2026-05-15)', fontsize=13, y=1.01)\n", + "\n", + " trend_rows = []\n", + " for i, rig in enumerate(sorted(rigs)):\n", + " ax = axes[i // cols][i % cols]\n", + " grp = subset[subset['location'] == rig].dropna(subset=['startup_time', 'date_ordinal'])\n", + "\n", + " ax.scatter(grp['startup_datetime'], grp['startup_time'], s=15, alpha=0.6)\n", + "\n", + " if len(grp) >= 2:\n", + " m, b = np.polyfit(grp['date_ordinal'], grp['startup_time'], 1)\n", + " ax.plot(grp['startup_datetime'], m * grp['date_ordinal'] + b, 'r-', linewidth=1.5)\n", + " corr = grp[['date_ordinal', 'startup_time']].corr().iloc[0, 1]\n", + " trend_rows.append({'location': rig, 'slope_s_per_day': m, 'r': corr, 'n': len(grp)})\n", + " ax.set_title(f'{rig}\\nslope={m:.2f}s/day, r={corr:.2f}', fontsize=8)\n", + " else:\n", + " ax.set_title(f'{rig} (n={len(grp)})', fontsize=8)\n", + "\n", + " ax.set_ylabel('Startup time (s)', fontsize=7)\n", + " ax.tick_params(axis='x', labelrotation=30, labelsize=6)\n", + " ax.tick_params(axis='y', labelsize=7)\n", + " ax.grid(True, alpha=0.3)\n", + "\n", + " # Hide unused subplots\n", + " for j in range(i + 1, rows * cols):\n", + " axes[j // cols][j % cols].set_visible(False)\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + " # --- Trend summary table ---\n", + " if trend_rows:\n", + " trend_df = (\n", + " pd.DataFrame(trend_rows)\n", + " .sort_values('slope_s_per_day', ascending=False)\n", + " .reset_index(drop=True)\n", + " )\n", + " print(f\"\\n{label} — trend summary (positive slope = getting slower over time):\")\n", + " print(trend_df.to_string(index=False))\n" + ] + }, + { + "cell_type": "markdown", + "id": "138cfdcd", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "u19-pipeline (3.13.10)", + "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.13.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/ephys_element/insert_ephys_paramset.ipynb b/notebooks/ephys_element/insert_ephys_paramset.ipynb new file mode 100644 index 00000000..05d256de --- /dev/null +++ b/notebooks/ephys_element/insert_ephys_paramset.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Local configuration file found !!, no need to run the configuration (unless configuration has changed)\n" + ] + } + ], + "source": [ + "from scripts.conf_file_finding import try_find_conf_file\n", + "try_find_conf_file()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/.venv/lib/python3.13/site-packages/datajoint/plugin.py:4: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources # requires setuptools<82\n", + "[2026-07-13 13:34:19,925][INFO]: DataJoint 0.14.9 connected to alvaros@datajoint00.pni.princeton.edu:3306\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import u19_pipeline.ephys_pipeline as ep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read all parameters Sets" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
paramset_idxclustering_methodparamset_descparam_set_hashparams
00kilosort2general-user_2022-06-01_Spike sorting using Ki...b9e07e55-95ea-3463-a740-90291de41da6{'fs': 30000, 'fshigh': 150, 'minfr_goodchanne...
11kilosort2alvaros_2022-06-01_Spike sorting using Kilosort2697d24ac-2d46-a6e8-6f6b-2d1afaea000d{'fs': 30000, 'fshigh': 150, 'minfr_goodchanne...
22kilosort3general-user_2022-06-01_Spike sorting using Ki...e6bfd993-55fc-5844-bdfe-30fab9888f28{'fs': 30000, 'fshigh': 300, 'minfr_goodchanne...
33kilosort4general-user_2024-06-02_Spike sorting using ki...e7d0207c-1124-d3e1-012c-8c420741c27d{'n_chan_bin': 385, 'fs': 30000, 'nblocks': 5,...
44kilosort4general-user_2024-06-04_Spike sorting using ki...a76df1df-2e4d-fba3-2f8c-13fc82661464{'n_chan_bin': 385}
\n", + "
" + ], + "text/plain": [ + " paramset_idx clustering_method \\\n", + "0 0 kilosort2 \n", + "1 1 kilosort2 \n", + "2 2 kilosort3 \n", + "3 3 kilosort4 \n", + "4 4 kilosort4 \n", + "\n", + " paramset_desc \\\n", + "0 general-user_2022-06-01_Spike sorting using Ki... \n", + "1 alvaros_2022-06-01_Spike sorting using Kilosort2 \n", + "2 general-user_2022-06-01_Spike sorting using Ki... \n", + "3 general-user_2024-06-02_Spike sorting using ki... \n", + "4 general-user_2024-06-04_Spike sorting using ki... \n", + "\n", + " param_set_hash \\\n", + "0 b9e07e55-95ea-3463-a740-90291de41da6 \n", + "1 697d24ac-2d46-a6e8-6f6b-2d1afaea000d \n", + "2 e6bfd993-55fc-5844-bdfe-30fab9888f28 \n", + "3 e7d0207c-1124-d3e1-012c-8c420741c27d \n", + "4 a76df1df-2e4d-fba3-2f8c-13fc82661464 \n", + "\n", + " params \n", + "0 {'fs': 30000, 'fshigh': 150, 'minfr_goodchanne... \n", + "1 {'fs': 30000, 'fshigh': 150, 'minfr_goodchanne... \n", + "2 {'fs': 30000, 'fshigh': 300, 'minfr_goodchanne... \n", + "3 {'n_chan_bin': 385, 'fs': 30000, 'nblocks': 5,... \n", + "4 {'n_chan_bin': 385} " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_params = pd.DataFrame(ep.ephys_element.ClusteringParamSet.fetch(as_dict=True))\n", + "all_params" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modify some params from an existing paramset (or load a json or .npy if you have one)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'n_chan_bin': 385,\n", + " 'fs': 30000,\n", + " 'nblocks': 5,\n", + " 'Th_universal': 10,\n", + " 'Th_learned': 4,\n", + " 'tmin': 0,\n", + " 'nt': 65600,\n", + " 'nskip': 25,\n", + " 'whitening_range': 32,\n", + " 'sig_interp': 20,\n", + " 'n_pcs': 3,\n", + " 'clustering_method': 'kilosort4'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_param = all_params.loc[3, 'params']\n", + "new_param" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "new_param['fs'] = 5000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set param idx" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "paramset_idx = all_params['paramset_idx'].max() + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define clustering method (default kilosort 4)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "clustering_method = 'kilosort4'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insert new paramset" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "ep.ephys_element.ClusteringParamSet.insert_new_params(clustering_method,paramset_idx,\"paramset decription\",new_param)" + ] + } + ], + "metadata": { + "jupytext": { + "encoding": "# -*- coding: utf-8 -*-" + }, + "kernelspec": { + "display_name": "u19-pipeline (3.13.10)", + "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.13.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/ephys_element/insert_ephys_preprocessing_params.ipynb b/notebooks/ephys_element/insert_ephys_preprocessing_params.ipynb new file mode 100644 index 00000000..68f51613 --- /dev/null +++ b/notebooks/ephys_element/insert_ephys_preprocessing_params.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Local configuration file found !!, no need to run the configuration (unless configuration has changed)\n" + ] + } + ], + "source": [ + "from scripts.conf_file_finding import try_find_conf_file\n", + "try_find_conf_file()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/.venv/lib/python3.13/site-packages/datajoint/plugin.py:4: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources # requires setuptools<82\n", + "[2026-07-13 13:34:19,925][INFO]: DataJoint 0.14.9 connected to alvaros@datajoint00.pni.princeton.edu:3306\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import u19_pipeline.ephys_pipeline as ep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read all parameters for preprocessing" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
paramset_idxclustering_methodparamset_descparam_set_hashparams
00kilosort2general-user_2022-06-01_Spike sorting using Ki...b9e07e55-95ea-3463-a740-90291de41da6{'fs': 30000, 'fshigh': 150, 'minfr_goodchanne...
11kilosort2alvaros_2022-06-01_Spike sorting using Kilosort2697d24ac-2d46-a6e8-6f6b-2d1afaea000d{'fs': 30000, 'fshigh': 150, 'minfr_goodchanne...
22kilosort3general-user_2022-06-01_Spike sorting using Ki...e6bfd993-55fc-5844-bdfe-30fab9888f28{'fs': 30000, 'fshigh': 300, 'minfr_goodchanne...
33kilosort4general-user_2024-06-02_Spike sorting using ki...e7d0207c-1124-d3e1-012c-8c420741c27d{'n_chan_bin': 385, 'fs': 30000, 'nblocks': 5,...
44kilosort4general-user_2024-06-04_Spike sorting using ki...a76df1df-2e4d-fba3-2f8c-13fc82661464{'n_chan_bin': 385}
\n", + "
" + ], + "text/plain": [ + " paramset_idx clustering_method \\\n", + "0 0 kilosort2 \n", + "1 1 kilosort2 \n", + "2 2 kilosort3 \n", + "3 3 kilosort4 \n", + "4 4 kilosort4 \n", + "\n", + " paramset_desc \\\n", + "0 general-user_2022-06-01_Spike sorting using Ki... \n", + "1 alvaros_2022-06-01_Spike sorting using Kilosort2 \n", + "2 general-user_2022-06-01_Spike sorting using Ki... \n", + "3 general-user_2024-06-02_Spike sorting using ki... \n", + "4 general-user_2024-06-04_Spike sorting using ki... \n", + "\n", + " param_set_hash \\\n", + "0 b9e07e55-95ea-3463-a740-90291de41da6 \n", + "1 697d24ac-2d46-a6e8-6f6b-2d1afaea000d \n", + "2 e6bfd993-55fc-5844-bdfe-30fab9888f28 \n", + "3 e7d0207c-1124-d3e1-012c-8c420741c27d \n", + "4 a76df1df-2e4d-fba3-2f8c-13fc82661464 \n", + "\n", + " params \n", + "0 {'fs': 30000, 'fshigh': 150, 'minfr_goodchanne... \n", + "1 {'fs': 30000, 'fshigh': 150, 'minfr_goodchanne... \n", + "2 {'fs': 30000, 'fshigh': 300, 'minfr_goodchanne... \n", + "3 {'n_chan_bin': 385, 'fs': 30000, 'nblocks': 5,... \n", + "4 {'n_chan_bin': 385} " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_preparams = pd.DataFrame(ep.ephys_element.PreClusterParamSet.fetch(as_dict=True))\n", + "all_preparams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modify some params from an existing paramset (or load a json or .npy if you have one)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'n_chan_bin': 385,\n", + " 'fs': 30000,\n", + " 'nblocks': 5,\n", + " 'Th_universal': 10,\n", + " 'Th_learned': 4,\n", + " 'tmin': 0,\n", + " 'nt': 65600,\n", + " 'nskip': 25,\n", + " 'whitening_range': 32,\n", + " 'sig_interp': 20,\n", + " 'n_pcs': 3,\n", + " 'clustering_method': 'kilosort4'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_param = all_params.loc[3, 'params']\n", + "new_param" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "new_param['fs'] = 5000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set param idx" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "paramset_idx = all_params['paramset_idx'].max() + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define clustering method (default kilosort 4)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "clustering_method = 'kilosort4'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insert new paramset" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "ep.ephys_element.ClusteringParamSet.insert_new_params(clustering_method,paramset_idx,\"paramset decription\",new_param)" + ] + } + ], + "metadata": { + "jupytext": { + "encoding": "# -*- coding: utf-8 -*-" + }, + "kernelspec": { + "display_name": "u19-pipeline (3.13.10)", + "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.13.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/ephys_element/read_ephys_parameters.ipynb b/notebooks/ephys_element/read_ephys_parameters.ipynb index 7e9fbd64..37b74f81 100644 --- a/notebooks/ephys_element/read_ephys_parameters.ipynb +++ b/notebooks/ephys_element/read_ephys_parameters.ipynb @@ -189,7 +189,7 @@ "encoding": "# -*- coding: utf-8 -*-" }, "kernelspec": { - "display_name": "Python 3.9.12 64-bit ('u19_datajoint_py39_env')", + "display_name": "u19-pipeline (3.13.10)", "language": "python", "name": "python3" }, @@ -203,12 +203,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.12" - }, - "vscode": { - "interpreter": { - "hash": "419d9cb2b112754b897eb34e1df39f6fed5577ca6010806add89ffbebe061a18" - } + "version": "3.13.10" } }, "nbformat": 4, diff --git a/notebooks/imaging_element/insert_new_imaging_params.ipynb b/notebooks/imaging_element/insert_new_imaging_params.ipynb new file mode 100644 index 00000000..46d1b23d --- /dev/null +++ b/notebooks/imaging_element/insert_new_imaging_params.ipynb @@ -0,0 +1,495 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Local configuration file found !!, no need to run the configuration (unless configuration has changed)\n" + ] + } + ], + "source": [ + "from scripts.conf_file_finding import try_find_conf_file\n", + "try_find_conf_file()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/.venv/lib/python3.13/site-packages/datajoint/plugin.py:4: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources # requires setuptools<82\n", + "[2026-07-13 13:00:41,737][INFO]: DataJoint 0.14.9 connected to alvaros@datajoint00.pni.princeton.edu:3306\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import u19_pipeline.imaging_pipeline as ip\n", + "import pathlib" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read new parameters (in case you have a json or npy)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "param_dir = pathlib.Path(pathlib.Path.cwd(), 'notebooks', 'imaging_element', 'suite2p_volum_params_05162026.npy').as_posix()\n", + "new_param = np.load(param_dir, allow_pickle=True)\n", + "new_param = new_param.item()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read all params sets (in case just modify few params from an existing paramset)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
paramset_idxprocessing_methodparamset_descparam_set_hashparams
00suite2pDefault params Suite2pf9bb64fe-d4e6-db98-3ffd-f0dc325d4df1{'look_one_level_down': 0.0, 'fast_disk': [], ...
11suite2p182-suite2p-paramsf83093d3-8536-1004-3f26-57441460e67e{'suite2p_version': '0.10.1', 'look_one_level_...
22suite2p182-suite2p-params-202655c3c75a-7be2-d69c-63f2-a69edbef7364{'suite2p_version': '0.10.1', 'look_one_level_...
33suite2p182-suite2p-params-2026-2234d8c39-82ff-4af7-0527-f1e4b9b679f6{'suite2p_version': '0.10.1', 'look_one_level_...
44suite2p182-suite2p-params-2026-321c9d725-7bb1-e720-fc0d-7588b4d27133{'suite2p_version': '0.10.1', 'look_one_level_...
55suite2p182-suite2p-params-2026-44b2ba7dd-9dab-fbc0-562f-c7b95b2c4fd1{'suite2p_version': '0.10.1', 'look_one_level_...
66suite2psuite2p_params_v1.043d6c596-05f5-f5bf-5a96-2c05d308aa24{'torch_device': 'cpu', 'tau': 1.5, 'fs': 50, ...
\n", + "
" + ], + "text/plain": [ + " paramset_idx processing_method paramset_desc \\\n", + "0 0 suite2p Default params Suite2p \n", + "1 1 suite2p 182-suite2p-params \n", + "2 2 suite2p 182-suite2p-params-2026 \n", + "3 3 suite2p 182-suite2p-params-2026-2 \n", + "4 4 suite2p 182-suite2p-params-2026-3 \n", + "5 5 suite2p 182-suite2p-params-2026-4 \n", + "6 6 suite2p suite2p_params_v1.0 \n", + "\n", + " param_set_hash \\\n", + "0 f9bb64fe-d4e6-db98-3ffd-f0dc325d4df1 \n", + "1 f83093d3-8536-1004-3f26-57441460e67e \n", + "2 55c3c75a-7be2-d69c-63f2-a69edbef7364 \n", + "3 234d8c39-82ff-4af7-0527-f1e4b9b679f6 \n", + "4 21c9d725-7bb1-e720-fc0d-7588b4d27133 \n", + "5 4b2ba7dd-9dab-fbc0-562f-c7b95b2c4fd1 \n", + "6 43d6c596-05f5-f5bf-5a96-2c05d308aa24 \n", + "\n", + " params \n", + "0 {'look_one_level_down': 0.0, 'fast_disk': [], ... \n", + "1 {'suite2p_version': '0.10.1', 'look_one_level_... \n", + "2 {'suite2p_version': '0.10.1', 'look_one_level_... \n", + "3 {'suite2p_version': '0.10.1', 'look_one_level_... \n", + "4 {'suite2p_version': '0.10.1', 'look_one_level_... \n", + "5 {'suite2p_version': '0.10.1', 'look_one_level_... \n", + "6 {'torch_device': 'cpu', 'tau': 1.5, 'fs': 50, ... " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_params = pd.DataFrame(ip.imaging_element.ProcessingParamSet.fetch(as_dict=True))\n", + "all_params" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read 1 paramset" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'torch_device': 'cpu',\n", + " 'tau': 1.5,\n", + " 'fs': 50,\n", + " 'diameter': [12.0, 12.0],\n", + " 'run': {'do_registration': 1,\n", + " 'do_regmetrics': True,\n", + " 'do_detection': True,\n", + " 'do_deconvolution': True,\n", + " 'multiplane_parallel': False},\n", + " 'io': {'combined': False,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'save_ops_orig': True,\n", + " 'delete_bin': False,\n", + " 'move_bin': False},\n", + " 'registration': {'align_by_chan2': False,\n", + " 'nimg_init': 300,\n", + " 'maxregshift': 0.1,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0.0,\n", + " 'batch_size': 500,\n", + " 'nonrigid': True,\n", + " 'maxregshiftNR': 5,\n", + " 'block_size': [128.0, 128.0],\n", + " 'smooth_sigma_time': 0.0,\n", + " 'smooth_sigma': 1.15,\n", + " 'spatial_taper': 3.45,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'snr_thresh': 1.2,\n", + " 'subpixel': 10,\n", + " 'two_step_registration': False,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False},\n", + " 'detection': {'algorithm': 'sourcery',\n", + " 'denoise': False,\n", + " 'block_size': [64.0, 64.0],\n", + " 'nbins': 2000,\n", + " 'bin_size': None,\n", + " 'highpass_time': 100,\n", + " 'threshold_scaling': 1.1,\n", + " 'npix_norm_min': 0.0,\n", + " 'npix_norm_max': 100.0,\n", + " 'max_overlap': 0.5,\n", + " 'soma_crop': True,\n", + " 'chan2_threshold': None,\n", + " 'cellpose_chan2': False,\n", + " 'sparsery_settings': {'highpass_neuropil': 25,\n", + " 'max_ROIs': 5000,\n", + " 'spatial_scale': 0,\n", + " 'active_percentile': 0.0},\n", + " 'sourcery_settings': {'connected': True,\n", + " 'max_iterations': 20,\n", + " 'smooth_masks': False},\n", + " 'cellpose_settings': {'cellpose_model': 'cpsam',\n", + " 'img': 'max_proj / meanImg',\n", + " 'highpass_spatial': 0,\n", + " 'flow_threshold': 0.4,\n", + " 'cellprob_threshold': 0.0,\n", + " 'params': None,\n", + " 'params_chan2': None}},\n", + " 'classification': {'classifier_path': None,\n", + " 'use_builtin_classifier': True,\n", + " 'preclassify': 0.0},\n", + " 'extraction': {'snr_threshold': 0.0,\n", + " 'batch_size': 500,\n", + " 'neuropil_extract': True,\n", + " 'neuropil_coefficient': 0.7,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'circular_neuropil': False},\n", + " 'dcnv_preprocess': {'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0},\n", + " 'version': '1.0.0.1',\n", + " 'neuropil_extract': False}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "suite2p_params = all_params.loc[6, 'params']\n", + "suite2p_params" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "suite2p_params = {'torch_device': 'cpu',\n", + " 'tau': 1.5,\n", + " 'fs': 10.0,\n", + " 'diameter': [12.0, 12.0],\n", + " 'run': {'do_registration': 1,\n", + " 'do_regmetrics': True,\n", + " 'do_detection': True,\n", + " 'do_deconvolution': True,\n", + " 'multiplane_parallel': False},\n", + " 'io': {'combined': False,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'save_ops_orig': True,\n", + " 'delete_bin': False,\n", + " 'move_bin': False},\n", + " 'registration': {'align_by_chan2': False,\n", + " 'nimg_init': 300,\n", + " 'maxregshift': 0.1,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0.0,\n", + " 'batch_size': 500,\n", + " 'nonrigid': True,\n", + " 'maxregshiftNR': 5,\n", + " 'block_size': [128.0, 128.0],\n", + " 'smooth_sigma_time': 0.0,\n", + " 'smooth_sigma': 1.15,\n", + " 'spatial_taper': 3.45,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'snr_thresh': 1.2,\n", + " 'subpixel': 10,\n", + " 'two_step_registration': False,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False},\n", + " 'detection': {'algorithm': 'sourcery',\n", + " 'denoise': False,\n", + " 'block_size': [64.0, 64.0],\n", + " 'nbins': 2000,\n", + " 'bin_size': None,\n", + " 'highpass_time': 100,\n", + " 'threshold_scaling': 1.1,\n", + " 'npix_norm_min': 0.0,\n", + " 'npix_norm_max': 100.0,\n", + " 'max_overlap': 0.5,\n", + " 'soma_crop': True,\n", + " 'chan2_threshold': None,\n", + " 'cellpose_chan2': False,\n", + " 'sparsery_settings': {'highpass_neuropil': 25,\n", + " 'max_ROIs': 5000,\n", + " 'spatial_scale': 0,\n", + " 'active_percentile': 0.0},\n", + " 'sourcery_settings': {'connected': True,\n", + " 'max_iterations': 20,\n", + " 'smooth_masks': False},\n", + " 'cellpose_settings': {'cellpose_model': 'cpsam',\n", + " 'img': 'max_proj / meanImg',\n", + " 'highpass_spatial': 0,\n", + " 'flow_threshold': 0.4,\n", + " 'cellprob_threshold': 0.0,\n", + " 'params': None,\n", + " 'params_chan2': None}},\n", + " 'classification': {'classifier_path': None,\n", + " 'use_builtin_classifier': True,\n", + " 'preclassify': 0.0},\n", + " 'extraction': {'snr_threshold': 0.0,\n", + " 'batch_size': 500,\n", + " 'neuropil_extract': True,\n", + " 'neuropil_coefficient': 0.7,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'circular_neuropil': False},\n", + " 'dcnv_preprocess': {'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0},\n", + " 'version': '1.0.0.1'}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Modify a couple params of existing paramset" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "suite2p_params['fs'] = 500\n", + "suite2p_params['neuropil_extract'] = False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get paramset_idx idx" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_param_idx = int(all_params['paramset_idx'].max() + 1)\n", + "new_param_idx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set processing_method (for now only suite2p)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "processing_method = 'suite2p'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Insert paramset" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "ip.imaging_element.ProcessingParamSet.insert_new_params(processing_method,new_param_idx,\"paramset decription\",suite2p_params)" + ] + } + ], + "metadata": { + "jupytext": { + "encoding": "# -*- coding: utf-8 -*-" + }, + "kernelspec": { + "display_name": "u19-pipeline (3.13.10)", + "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.13.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/imaging_element/read_imaging_parameters.ipynb b/notebooks/imaging_element/read_imaging_parameters.ipynb index 34ec326b..8fa8a969 100644 --- a/notebooks/imaging_element/read_imaging_parameters.ipynb +++ b/notebooks/imaging_element/read_imaging_parameters.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -28,78 +28,80 @@ "output_type": "stream", "text": [ "/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/.venv/lib/python3.13/site-packages/datajoint/plugin.py:4: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", - " import pkg_resources\n", - "[2026-05-18 12:25:23,530][INFO]: DataJoint 0.14.6 connected to alvaros@datajoint00.pni.princeton.edu:3306\n" + " import pkg_resources # requires setuptools<82\n", + "[2026-07-13 12:55:23,843][INFO]: DataJoint 0.14.9 connected to alvaros@datajoint00.pni.princeton.edu:3306\n" + ] + }, + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'sklearn'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m pandas \u001b[38;5;28;01mas\u001b[39;00m pd\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m numpy \u001b[38;5;28;01mas\u001b[39;00m np\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m u19_pipeline.imaging_pipeline \u001b[38;5;28;01mas\u001b[39;00m ip\n", + "\u001b[36mFile \u001b[39m\u001b[32m/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/u19_pipeline/imaging_pipeline.py:10\u001b[39m\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mu19_pipeline\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mautomatic_job\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mparams_config\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mconfig\u001b[39;00m\n\u001b[32m 9\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mu19_pipeline\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdj_shortcuts\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mdj_short\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m10\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mu19_pipeline\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mtiff_utils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtu\u001b[39;00m\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mdatajoint\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mdj\u001b[39;00m\n\u001b[32m 15\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01melement_calcium_imaging\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m scan \u001b[38;5;28;01mas\u001b[39;00m scan_element\n", + "\u001b[36mFile \u001b[39m\u001b[32m/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/u19_pipeline/utils/tiff_utils.py:13\u001b[39m\n\u001b[32m 9\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mconcurrent\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mfutures\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m ProcessPoolExecutor\n\u001b[32m 10\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mdatetime\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m datetime\n\u001b[32m---> \u001b[39m\u001b[32m13\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mu19_pipeline\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mtiff_matlab_imaging_utils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtmiu\u001b[39;00m\n\u001b[32m 16\u001b[39m tif_number_fmt = \u001b[33mr\u001b[39m\u001b[33m'\u001b[39m\u001b[33m_[0-9]\u001b[39m\u001b[38;5;132;01m{5}\u001b[39;00m\u001b[33m\\\u001b[39m\u001b[33m.tif\u001b[39m\u001b[33m'\u001b[39m\n\u001b[32m 17\u001b[39m tif_gz_number_fmt = \u001b[33mr\u001b[39m\u001b[33m'\u001b[39m\u001b[33m_[0-9]\u001b[39m\u001b[38;5;132;01m{5}\u001b[39;00m\u001b[33m\\\u001b[39m\u001b[33m.tif\u001b[39m\u001b[33m\\\u001b[39m\u001b[33m.gz\u001b[39m\u001b[33m'\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32m/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/u19_pipeline/utils/tiff_matlab_imaging_utils.py:4\u001b[39m\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnp\u001b[39;00m\n\u001b[32m 3\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtifffile\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtiff\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msklearn\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mlinear_model\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m HuberRegressor\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtime\u001b[39;00m\n\u001b[32m 6\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mre\u001b[39;00m\n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'sklearn'" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", - "import u19_pipeline.imaging_pipeline as ip" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array({'torch_device': 'cpu', 'tau': 1.5, 'fs': 10.0, 'diameter': [12.0, 12.0], 'run': {'do_registration': 1, 'do_regmetrics': True, 'do_detection': True, 'do_deconvolution': True, 'multiplane_parallel': False}, 'io': {'combined': False, 'save_mat': True, 'save_NWB': False, 'save_ops_orig': True, 'delete_bin': False, 'move_bin': False}, 'registration': {'align_by_chan2': False, 'nimg_init': 300, 'maxregshift': 0.1, 'do_bidiphase': False, 'bidiphase': 0.0, 'batch_size': 500, 'nonrigid': True, 'maxregshiftNR': 5, 'block_size': [128.0, 128.0], 'smooth_sigma_time': 0.0, 'smooth_sigma': 1.15, 'spatial_taper': 3.45, 'th_badframes': 1.0, 'norm_frames': True, 'snr_thresh': 1.2, 'subpixel': 10, 'two_step_registration': False, 'reg_tif': False, 'reg_tif_chan2': False}, 'detection': {'algorithm': 'sourcery', 'denoise': False, 'block_size': [64.0, 64.0], 'nbins': 2000, 'bin_size': None, 'highpass_time': 100, 'threshold_scaling': 1.1, 'npix_norm_min': 0.0, 'npix_norm_max': 100.0, 'max_overlap': 0.5, 'soma_crop': True, 'chan2_threshold': None, 'cellpose_chan2': False, 'sparsery_settings': {'highpass_neuropil': 25, 'max_ROIs': 5000, 'spatial_scale': 0, 'active_percentile': 0.0}, 'sourcery_settings': {'connected': True, 'max_iterations': 20, 'smooth_masks': False}, 'cellpose_settings': {'cellpose_model': 'cpsam', 'img': 'max_proj / meanImg', 'highpass_spatial': 0, 'flow_threshold': 0.4, 'cellprob_threshold': 0.0, 'params': None, 'params_chan2': None}}, 'classification': {'classifier_path': None, 'use_builtin_classifier': True, 'preclassify': 0.0}, 'extraction': {'snr_threshold': 0.0, 'batch_size': 500, 'neuropil_extract': True, 'neuropil_coefficient': 0.7, 'inner_neuropil_radius': 2, 'min_neuropil_pixels': 350, 'lam_percentile': 50.0, 'allow_overlap': False, 'circular_neuropil': False}, 'dcnv_preprocess': {'baseline': 'maximin', 'win_baseline': 60.0, 'sig_baseline': 10.0, 'prctile_baseline': 8.0}, 'version': '1.0.0.1'},\n", - " dtype=object)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "so = np.load('suite2p_volum_params_05162026.npy', allow_pickle=True)\n", - "so" + "import u19_pipeline.imaging_pipeline as ip\n", + "import pathlib" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "lo = so.item()" - ] + "source": [] }, { - "cell_type": "code", - "execution_count": 3, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "keyo = dict()\n", - "keyo['recording_id'] = 678" + "### Read new parameters (in case you have a json or npy)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/u19_pipeline/automatic_job/ingest_scaninfo_shell.sh', '/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-matlab/scripts', 'recording_id=678']\n" + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m new_params = np.load(\u001b[33m'suite2p_volum_params_05162026.npy'\u001b[39m, allow_pickle=\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[32m 2\u001b[39m new_params\n", + "\u001b[31mNameError\u001b[39m: name 'np' is not defined" ] } ], "source": [ - "ip.AcquiredTiff.populate(keyo)" + "new_params = np.load('suite2p_volum_params_05162026.npy', allow_pickle=True)\n", + "new_params" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "lo = so.item()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -179,14 +181,6 @@ " 4b2ba7dd-9dab-fbc0-562f-c7b95b2c4fd1\n", " {'suite2p_version': '0.10.1', 'look_one_level_...\n", " \n", - " \n", - " 6\n", - " 6\n", - " suite2p\n", - " 182-suite2p-params-2026-5\n", - " 72c8e337-01b2-5b37-9c90-db310c8ed236\n", - " {'torch_device': 'cpu', 'tau': 1.5, 'fs': 10.0...\n", - " \n", " \n", "\n", "" @@ -199,7 +193,6 @@ "3 3 suite2p 182-suite2p-params-2026-2 \n", "4 4 suite2p 182-suite2p-params-2026-3 \n", "5 5 suite2p 182-suite2p-params-2026-4 \n", - "6 6 suite2p 182-suite2p-params-2026-5 \n", "\n", " param_set_hash \\\n", "0 f9bb64fe-d4e6-db98-3ffd-f0dc325d4df1 \n", @@ -208,7 +201,6 @@ "3 234d8c39-82ff-4af7-0527-f1e4b9b679f6 \n", "4 21c9d725-7bb1-e720-fc0d-7588b4d27133 \n", "5 4b2ba7dd-9dab-fbc0-562f-c7b95b2c4fd1 \n", - "6 72c8e337-01b2-5b37-9c90-db310c8ed236 \n", "\n", " params \n", "0 {'look_one_level_down': 0.0, 'fast_disk': [], ... \n", @@ -216,11 +208,10 @@ "2 {'suite2p_version': '0.10.1', 'look_one_level_... \n", "3 {'suite2p_version': '0.10.1', 'look_one_level_... \n", "4 {'suite2p_version': '0.10.1', 'look_one_level_... \n", - "5 {'suite2p_version': '0.10.1', 'look_one_level_... \n", - "6 {'torch_device': 'cpu', 'tau': 1.5, 'fs': 10.0... " + "5 {'suite2p_version': '0.10.1', 'look_one_level_... " ] }, - "execution_count": 15, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -334,25 +325,102 @@ "metadata": {}, "outputs": [], "source": [ - "suite2p_params['fs'] = 50\n" + "suite2p_params = {'torch_device': 'cpu',\n", + " 'tau': 1.5,\n", + " 'fs': 10.0,\n", + " 'diameter': [12.0, 12.0],\n", + " 'run': {'do_registration': 1,\n", + " 'do_regmetrics': True,\n", + " 'do_detection': True,\n", + " 'do_deconvolution': True,\n", + " 'multiplane_parallel': False},\n", + " 'io': {'combined': False,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'save_ops_orig': True,\n", + " 'delete_bin': False,\n", + " 'move_bin': False},\n", + " 'registration': {'align_by_chan2': False,\n", + " 'nimg_init': 300,\n", + " 'maxregshift': 0.1,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0.0,\n", + " 'batch_size': 500,\n", + " 'nonrigid': True,\n", + " 'maxregshiftNR': 5,\n", + " 'block_size': [128.0, 128.0],\n", + " 'smooth_sigma_time': 0.0,\n", + " 'smooth_sigma': 1.15,\n", + " 'spatial_taper': 3.45,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'snr_thresh': 1.2,\n", + " 'subpixel': 10,\n", + " 'two_step_registration': False,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False},\n", + " 'detection': {'algorithm': 'sourcery',\n", + " 'denoise': False,\n", + " 'block_size': [64.0, 64.0],\n", + " 'nbins': 2000,\n", + " 'bin_size': None,\n", + " 'highpass_time': 100,\n", + " 'threshold_scaling': 1.1,\n", + " 'npix_norm_min': 0.0,\n", + " 'npix_norm_max': 100.0,\n", + " 'max_overlap': 0.5,\n", + " 'soma_crop': True,\n", + " 'chan2_threshold': None,\n", + " 'cellpose_chan2': False,\n", + " 'sparsery_settings': {'highpass_neuropil': 25,\n", + " 'max_ROIs': 5000,\n", + " 'spatial_scale': 0,\n", + " 'active_percentile': 0.0},\n", + " 'sourcery_settings': {'connected': True,\n", + " 'max_iterations': 20,\n", + " 'smooth_masks': False},\n", + " 'cellpose_settings': {'cellpose_model': 'cpsam',\n", + " 'img': 'max_proj / meanImg',\n", + " 'highpass_spatial': 0,\n", + " 'flow_threshold': 0.4,\n", + " 'cellprob_threshold': 0.0,\n", + " 'params': None,\n", + " 'params_chan2': None}},\n", + " 'classification': {'classifier_path': None,\n", + " 'use_builtin_classifier': True,\n", + " 'preclassify': 0.0},\n", + " 'extraction': {'snr_threshold': 0.0,\n", + " 'batch_size': 500,\n", + " 'neuropil_extract': True,\n", + " 'neuropil_coefficient': 0.7,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'circular_neuropil': False},\n", + " 'dcnv_preprocess': {'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0},\n", + " 'version': '1.0.0.1'}" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "suite2p_params['neuropil_extract'] = False\n" + "suite2p_params['fs'] = 50\n" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "ip.imaging_element.ProcessingParamSet.insert_new_params(all_params.loc[2, 'processing_method'],6,\"182-suite2p-params-2026-5\",lo)" + "suite2p_params['neuropil_extract'] = False\n" ] }, { @@ -361,7 +429,7 @@ "metadata": {}, "outputs": [], "source": [ - "ip.imaging_element.ProcessingParamSet.insert_new_params(all_params.loc[2, 'processing_method'],4,\"182-suite2p-params-2026-3\",suite2p_params)" + "ip.imaging_element.ProcessingParamSet.insert_new_params(all_params.loc[2, 'processing_method'],6,\"suite2p_params_v1.0\",suite2p_params)" ] }, { diff --git a/notebooks/imaging_element/read_params.py b/notebooks/imaging_element/read_params.py index 595cf0d7..fa5ca6fd 100644 --- a/notebooks/imaging_element/read_params.py +++ b/notebooks/imaging_element/read_params.py @@ -8,6 +8,22 @@ import datajoint as dj dj.conn() +def replace_none_inplace(data, replacement=[]): + """Recursively replaces None values in a dictionary in-place.""" + if isinstance(data, dict): + for key, value in data.items(): + if value is None: + data[key] = replacement + elif isinstance(data, dict): + replace_none_inplace(value, replacement) + elif isinstance(data, list): + for index, item in enumerate(data): + if item is None: + data[index] = replacement + elif isinstance(item, (dict, list)): + replace_none_inplace(item, replacement) + + ephys_element =dj.create_virtual_module('u19_pipeline_ephys_element','u19_pipeline_ephys_element') imaging_element =dj.create_virtual_module('u19_pipeline_imaging_element','u19_pipeline_imaging_element') @@ -30,13 +46,13 @@ params_dict_dict = {} num_params = 0 for idx, param_modality_list in enumerate(params_dict_list): - for dict in param_modality_list: - dict['recording_modality'] = modalities[idx] - dict['param_set_hash'] = str(dict['param_set_hash']) - if 'clustering_method' in dict: - dict['processing_method'] = dict.pop('clustering_method') + for dicto in param_modality_list: + dicto['recording_modality'] = modalities[idx] + dicto['param_set_hash'] = str(dicto['param_set_hash']) + if 'clustering_method' in dicto: + dicto['processing_method'] = dicto.pop('clustering_method') - params_dict_dict['param_'+str(num_params)] = dict + params_dict_dict['param_'+str(num_params)] = dicto num_params +=1 #################################################Fetch all preparamsStepList from all modalities @@ -48,19 +64,19 @@ preparams_steps_dict_dict = {} num_preparams_steps = 0 for idx, preparam_modality_list in enumerate(preparams_steps): - for dict in preparam_modality_list: - dict['param_set_hash'] = str(dict['param_set_hash']) - dict['recording_modality'] = modalities[idx] - if 'precluster_param_steps_id' in dict: - dict['preprocess_param_steps_id'] = dict.pop('precluster_param_steps_id') - if 'precluster_method' in dict: - dict['preprocess_method'] = dict.pop('precluster_method') - if 'precluster_param_steps_name' in dict: - dict['preprocess_param_steps_name'] = dict.pop('precluster_param_steps_name') - if 'precluster_param_steps_desc' in dict: - dict['preprocess_param_steps_desc'] = dict.pop('precluster_param_steps_desc') - - preparams_steps_dict_dict['param_'+str(num_preparams_steps)] = dict + for dicto in preparam_modality_list: + dicto['param_set_hash'] = str(dicto['param_set_hash']) + dicto['recording_modality'] = modalities[idx] + if 'precluster_param_steps_id' in dicto: + dicto['preprocess_param_steps_id'] = dicto.pop('precluster_param_steps_id') + if 'precluster_method' in dicto: + dicto['preprocess_method'] = dicto.pop('precluster_method') + if 'precluster_param_steps_name' in dicto: + dicto['preprocess_param_steps_name'] = dicto.pop('precluster_param_steps_name') + if 'precluster_param_steps_desc' in dicto: + dicto['preprocess_param_steps_desc'] = dicto.pop('precluster_param_steps_desc') + + preparams_steps_dict_dict['param_'+str(num_preparams_steps)] = dicto num_preparams_steps +=1 #################################################Fetch all preparams from all modalities @@ -73,13 +89,13 @@ preparams_dict_dict = {} num_preparams = 0 for idx, preparam_modality_list in enumerate(preparams_dict_list): - for dict in preparam_modality_list: - dict['recording_modality'] = modalities[idx] - dict['param_set_hash'] = str(dict['param_set_hash']) - if 'precluster_method' in dict: - dict['preprocess_method'] = dict.pop('precluster_method') + for dicto in preparam_modality_list: + dicto['recording_modality'] = modalities[idx] + dicto['param_set_hash'] = str(dicto['param_set_hash']) + if 'precluster_method' in dicto: + dicto['preprocess_method'] = dicto.pop('precluster_method') - preparams_dict_dict['param_'+str(num_preparams)] = dict + preparams_dict_dict['param_'+str(num_preparams)] = dicto num_preparams +=1 ''' @@ -118,6 +134,7 @@ dj.conn().close() +replace_none_inplace(params_dict_dict) savemat('params.mat', params_dict_dict) savemat('preparams.mat', preparams_dict_dict) diff --git a/notebooks/imaging_element/read_params_notebook.ipynb b/notebooks/imaging_element/read_params_notebook.ipynb new file mode 100644 index 00000000..60b32cb5 --- /dev/null +++ b/notebooks/imaging_element/read_params_notebook.ipynb @@ -0,0 +1,959 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Local configuration file found !!, no need to run the configuration (unless configuration has changed)\n" + ] + } + ], + "source": [ + "from scripts.conf_file_finding import try_find_conf_file\n", + "try_find_conf_file()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/.venv/lib/python3.13/site-packages/datajoint/plugin.py:4: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.\n", + " import pkg_resources\n", + "[2026-06-05 12:02:49,980][INFO]: DataJoint 0.14.6 connected to alvaros@datajoint00.pni.princeton.edu:3306\n" + ] + }, + { + "data": { + "text/plain": [ + "DataJoint connection (connected) alvaros@datajoint00.pni.princeton.edu:3306" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "from scipy.io import savemat\n", + "\n", + "import datajoint as dj\n", + "dj.conn()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "ephys_element =dj.create_virtual_module('u19_pipeline_ephys_element','u19_pipeline_ephys_element')\n", + "imaging_element =dj.create_virtual_module('u19_pipeline_imaging_element','u19_pipeline_imaging_element')\n", + "\n", + "modalities = ['electrophysiology', 'imaging']\n", + "\n", + "params_tables = [ephys_element.ClusteringParamSet, imaging_element.ProcessingParamSet]\n", + "preparams_steps_tables = [(ephys_element.PreClusterParamSteps * ephys_element.PreClusterParamSteps.Step * ephys_element.PreClusterParamSet)]\n", + "preparams_tables = [ephys_element.PreClusterParamSet]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "params_dict_list = []\n", + "for table in params_tables:\n", + " params_dict_list.append(table.fetch(as_dict=True))\n", + "\n", + "\n", + "#Append all params in the same dictionary\n", + "params_dict_dict = {}\n", + "num_params = 0\n", + "for idx, param_modality_list in enumerate(params_dict_list):\n", + " for dicto in param_modality_list:\n", + " dicto['recording_modality'] = modalities[idx]\n", + " dicto['param_set_hash'] = str(dicto['param_set_hash'])\n", + " if 'clustering_method' in dicto:\n", + " dicto['processing_method'] = dicto.pop('clustering_method')\n", + " \n", + " params_dict_dict['param_'+str(num_params)] = dicto\n", + " num_params +=1\n", + "\n", + "#################################################Fetch all preparamsStepList from all modalities\n", + "preparams_steps = []\n", + "for table in preparams_steps_tables:\n", + " preparams_steps.append(table.fetch(as_dict=True))\n", + "\n", + "#Append all preparams in the same dictionary\n", + "preparams_steps_dict_dict = {}\n", + "num_preparams_steps = 0\n", + "for idx, preparam_modality_list in enumerate(preparams_steps):\n", + " for dicto in preparam_modality_list:\n", + " dicto['param_set_hash'] = str(dicto['param_set_hash'])\n", + " dicto['recording_modality'] = modalities[idx]\n", + " if 'precluster_param_steps_id' in dicto:\n", + " dicto['preprocess_param_steps_id'] = dicto.pop('precluster_param_steps_id')\n", + " if 'precluster_method' in dicto:\n", + " dicto['preprocess_method'] = dicto.pop('precluster_method')\n", + " if 'precluster_param_steps_name' in dicto:\n", + " dicto['preprocess_param_steps_name'] = dicto.pop('precluster_param_steps_name')\n", + " if 'precluster_param_steps_desc' in dicto:\n", + " dicto['preprocess_param_steps_desc'] = dicto.pop('precluster_param_steps_desc')\n", + "\n", + " preparams_steps_dict_dict['param_'+str(num_preparams_steps)] = dicto\n", + " num_preparams_steps +=1\n", + "\n", + "#################################################Fetch all preparams from all modalities\n", + "preparams_dict_list = []\n", + "for table in preparams_tables:\n", + " preparams_dict_list.append(table.fetch(as_dict=True))\n", + "\n", + "\n", + "#Append all preparams in the same dictionary\n", + "preparams_dict_dict = {}\n", + "num_preparams = 0\n", + "for idx, preparam_modality_list in enumerate(preparams_dict_list):\n", + " for dicto in preparam_modality_list:\n", + " dicto['recording_modality'] = modalities[idx]\n", + " dicto['param_set_hash'] = str(dicto['param_set_hash'])\n", + " if 'precluster_method' in dicto:\n", + " dicto['preprocess_method'] = dicto.pop('precluster_method')\n", + " \n", + " preparams_dict_dict['param_'+str(num_preparams)] = dicto\n", + " num_preparams +=1\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def replace_none_inplace(data, replacement=[]):\n", + " \"\"\"Recursively replaces None values in a dictionary in-place.\"\"\"\n", + " if isinstance(data, dict):\n", + " for key, value in data.items():\n", + " if value is None:\n", + " data[key] = replacement\n", + " elif isinstance(data, dict):\n", + " replace_none_inplace(value, replacement)\n", + " elif isinstance(data, list):\n", + " for index, item in enumerate(data):\n", + " if item is None:\n", + " data[index] = replacement\n", + " elif isinstance(item, (dict, list)):\n", + " replace_none_inplace(item, replacement)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "replace_none_inplace(params_dict_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'param_0': {'paramset_idx': 0,\n", + " 'paramset_desc': 'general-user_2022-06-01_Spike sorting using Kilosort2 Old',\n", + " 'param_set_hash': 'b9e07e55-95ea-3463-a740-90291de41da6',\n", + " 'params': {'fs': 30000,\n", + " 'fshigh': 150,\n", + " 'minfr_goodchannels': 0.1,\n", + " 'Th': [10, 4],\n", + " 'lam': 10,\n", + " 'AUCsplit': 0.9,\n", + " 'minFR': 0.02,\n", + " 'momentum': [20, 400],\n", + " 'sigmaMask': 30,\n", + " 'ThPre': 8,\n", + " 'CAR': 1,\n", + " 'spkTh': -6,\n", + " 'reorder': 1,\n", + " 'nskip': 25,\n", + " 'GPU': 1,\n", + " 'Nfilt': 1024,\n", + " 'nfilt_factor': 4,\n", + " 'ntbuff': 64,\n", + " 'NT': 32832,\n", + " 'whiteningRange': 32,\n", + " 'nSkipCov': 25,\n", + " 'scaleproc': 200,\n", + " 'nPCs': 3,\n", + " 'useRAM': 0,\n", + " 'trange': [0, 1000000000],\n", + " 'NchanTOT': 385},\n", + " 'recording_modality': 'electrophysiology',\n", + " 'processing_method': 'kilosort2'},\n", + " 'param_1': {'paramset_idx': 1,\n", + " 'paramset_desc': 'alvaros_2022-06-01_Spike sorting using Kilosort2',\n", + " 'param_set_hash': '697d24ac-2d46-a6e8-6f6b-2d1afaea000d',\n", + " 'params': {'fs': 30000,\n", + " 'fshigh': 150,\n", + " 'minfr_goodchannels': 0.1,\n", + " 'Th': [10, 4],\n", + " 'lam': 10,\n", + " 'AUCsplit': 0.9,\n", + " 'minFR': 0.02,\n", + " 'momentum': [20, 400],\n", + " 'sigmaMask': 30,\n", + " 'ThPre': 8,\n", + " 'CAR': 1,\n", + " 'spkTh': -6,\n", + " 'reorder': 1,\n", + " 'nskip': 25,\n", + " 'GPU': 2,\n", + " 'Nfilt': 1024,\n", + " 'nfilt_factor': 4,\n", + " 'ntbuff': 64,\n", + " 'NT': 32832,\n", + " 'whiteningRange': 32,\n", + " 'nSkipCov': 25,\n", + " 'scaleproc': 200,\n", + " 'nPCs': 3,\n", + " 'useRAM': 0,\n", + " 'trange': [0, 1000000000],\n", + " 'NchanTOT': 385},\n", + " 'recording_modality': 'electrophysiology',\n", + " 'processing_method': 'kilosort2'},\n", + " 'param_2': {'paramset_idx': 2,\n", + " 'paramset_desc': 'general-user_2022-06-01_Spike sorting using Kilosort 3',\n", + " 'param_set_hash': 'e6bfd993-55fc-5844-bdfe-30fab9888f28',\n", + " 'params': {'fs': 30000,\n", + " 'fshigh': 300,\n", + " 'minfr_goodchannels': 0,\n", + " 'Th': [10, 4],\n", + " 'lam': 10,\n", + " 'AUCsplit': 0.9,\n", + " 'minFR': 0.02,\n", + " 'momentum': [20, 400],\n", + " 'sigmaMask': 30,\n", + " 'ThPre': 8,\n", + " 'reorder': 1,\n", + " 'nskip': 25,\n", + " 'spkTh': -6,\n", + " 'GPU': 1,\n", + " 'nfilt_factor': 4,\n", + " 'ntbuff': 64,\n", + " 'NT': 65600,\n", + " 'whiteningRange': 32,\n", + " 'nSkipCov': 25,\n", + " 'scaleproc': 200,\n", + " 'nPCs': 3,\n", + " 'useRAM': 0,\n", + " 'trange': [0, 100000000000000],\n", + " 'NchanTOT': 385,\n", + " 'sig': 20,\n", + " 'nblocks': 5},\n", + " 'recording_modality': 'electrophysiology',\n", + " 'processing_method': 'kilosort3'},\n", + " 'param_3': {'paramset_idx': 3,\n", + " 'paramset_desc': 'general-user_2024-06-02_Spike sorting using kilosort4 (full params, not working)',\n", + " 'param_set_hash': 'e7d0207c-1124-d3e1-012c-8c420741c27d',\n", + " 'params': {'n_chan_bin': 385,\n", + " 'fs': 30000,\n", + " 'nblocks': 5,\n", + " 'Th_universal': 10,\n", + " 'Th_learned': 4,\n", + " 'tmin': 0,\n", + " 'nt': 65600,\n", + " 'nskip': 25,\n", + " 'whitening_range': 32,\n", + " 'sig_interp': 20,\n", + " 'n_pcs': 3,\n", + " 'clustering_method': 'kilosort4'},\n", + " 'recording_modality': 'electrophysiology',\n", + " 'processing_method': 'kilosort4'},\n", + " 'param_4': {'paramset_idx': 4,\n", + " 'paramset_desc': 'general-user_2024-06-04_Spike sorting using kilosort4 (simple params, working)',\n", + " 'param_set_hash': 'a76df1df-2e4d-fba3-2f8c-13fc82661464',\n", + " 'params': {'n_chan_bin': 385},\n", + " 'recording_modality': 'electrophysiology',\n", + " 'processing_method': 'kilosort4'},\n", + " 'param_5': {'paramset_idx': 0,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': 'Default params Suite2p',\n", + " 'param_set_hash': 'f9bb64fe-d4e6-db98-3ffd-f0dc325d4df1',\n", + " 'params': {'look_one_level_down': 0.0,\n", + " 'fast_disk': [],\n", + " 'delete_bin': False,\n", + " 'mesoscan': False,\n", + " 'h5py': [],\n", + " 'h5py_key': 'data',\n", + " 'save_path0': [],\n", + " 'subfolders': [],\n", + " 'nplanes': 1,\n", + " 'nchannels': 1,\n", + " 'functional_chan': 1,\n", + " 'tau': 1.0,\n", + " 'fs': 10.0,\n", + " 'force_sktiff': False,\n", + " 'preclassify': 0.0,\n", + " 'save_mat': False,\n", + " 'combined': True,\n", + " 'aspect': 1.0,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0.0,\n", + " 'do_registration': True,\n", + " 'keep_movie_raw': False,\n", + " 'nimg_init': 300,\n", + " 'batch_size': 500,\n", + " 'maxregshift': 0.1,\n", + " 'align_by_chan': 1,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False,\n", + " 'subpixel': 10,\n", + " 'smooth_sigma': 1.15,\n", + " 'th_badframes': 1.0,\n", + " 'pad_fft': False,\n", + " 'nonrigid': False,\n", + " 'block_size': [128, 128],\n", + " 'snr_thresh': 1.2,\n", + " 'maxregshiftNR': 5.0,\n", + " '1Preg': False,\n", + " 'spatial_hp': 50.0,\n", + " 'pre_smooth': 2.0,\n", + " 'spatial_taper': 50.0,\n", + " 'roidetect': True,\n", + " 'sparse_mode': False,\n", + " 'diameter': 12,\n", + " 'spatial_scale': 0,\n", + " 'connected': True,\n", + " 'nbinned': 5000,\n", + " 'max_iterations': 20,\n", + " 'threshold_scaling': 1.0,\n", + " 'max_overlap': 0.75,\n", + " 'high_pass': 100.0,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'allow_overlap': False,\n", + " 'chan2_thres': 0.65,\n", + " 'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0,\n", + " 'neucoeff': 0.7,\n", + " 'xrange': [0, 0],\n", + " 'yrange': [0, 0]},\n", + " 'recording_modality': 'imaging'},\n", + " 'param_6': {'paramset_idx': 1,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': '182-suite2p-params',\n", + " 'param_set_hash': 'f83093d3-8536-1004-3f26-57441460e67e',\n", + " 'params': {'suite2p_version': '0.10.1',\n", + " 'look_one_level_down': False,\n", + " 'fast_disk': [],\n", + " 'delete_bin': False,\n", + " 'mesoscan': False,\n", + " 'bruker': False,\n", + " 'bruker_bidirectional': False,\n", + " 'h5py': [],\n", + " 'h5py_key': 'data',\n", + " 'save_path0': [],\n", + " 'save_folder': [],\n", + " 'subfolders': [],\n", + " 'move_bin': False,\n", + " 'nplanes': 1,\n", + " 'nchannels': 1,\n", + " 'functional_chan': 1,\n", + " 'tau': 1.0,\n", + " 'fs': 30,\n", + " 'force_sktiff': False,\n", + " 'frames_include': -1,\n", + " 'multiplane_parallel': False,\n", + " 'ignore_flyback': [],\n", + " 'preclassify': 0.0,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'combined': True,\n", + " 'aspect': 1.0,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0,\n", + " 'bidi_corrected': False,\n", + " 'do_registration': 1,\n", + " 'two_step_registration': False,\n", + " 'keep_movie_raw': False,\n", + " 'nimg_init': 300,\n", + " 'batch_size': 500,\n", + " 'maxregshift': 0.1,\n", + " 'align_by_chan': 1,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False,\n", + " 'subpixel': 10,\n", + " 'smooth_sigma_time': 0,\n", + " 'smooth_sigma': 1.15,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'force_refImg': False,\n", + " 'pad_fft': False,\n", + " 'nonrigid': True,\n", + " 'block_size': [128, 128],\n", + " 'snr_thresh': 1.2,\n", + " 'maxregshiftNR': 5,\n", + " '1Preg': False,\n", + " 'spatial_hp': 42,\n", + " 'spatial_hp_reg': 42,\n", + " 'spatial_hp_detect': 25,\n", + " 'pre_smooth': 0,\n", + " 'spatial_taper': 40,\n", + " 'roidetect': True,\n", + " 'spikedetect': True,\n", + " 'anatomical_only': 0,\n", + " 'cellprob_threshold': 0.0,\n", + " 'flow_threshold': 1.5,\n", + " 'sparse_mode': False,\n", + " 'diameter': 0,\n", + " 'spatial_scale': 0,\n", + " 'connected': True,\n", + " 'nbinned': 5000,\n", + " 'max_iterations': 20,\n", + " 'threshold_scaling': 1.0,\n", + " 'max_overlap': 0.5,\n", + " 'high_pass': 100,\n", + " 'denoise': False,\n", + " 'soma_crop': True,\n", + " 'neuropil_extract': True,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'use_builtin_classifier': False,\n", + " 'classifier_path': 0,\n", + " 'chan2_thres': 0.65,\n", + " 'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0,\n", + " 'neucoeff': 0.7},\n", + " 'recording_modality': 'imaging'},\n", + " 'param_7': {'paramset_idx': 2,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': '182-suite2p-params-2026',\n", + " 'param_set_hash': '55c3c75a-7be2-d69c-63f2-a69edbef7364',\n", + " 'params': {'suite2p_version': '0.10.1',\n", + " 'look_one_level_down': False,\n", + " 'fast_disk': [],\n", + " 'delete_bin': False,\n", + " 'mesoscan': False,\n", + " 'bruker': False,\n", + " 'bruker_bidirectional': False,\n", + " 'h5py': [],\n", + " 'h5py_key': 'data',\n", + " 'save_path0': [],\n", + " 'save_folder': [],\n", + " 'subfolders': [],\n", + " 'move_bin': False,\n", + " 'nplanes': 5,\n", + " 'nchannels': 1,\n", + " 'functional_chan': 1,\n", + " 'tau': 1.0,\n", + " 'fs': 30,\n", + " 'force_sktiff': False,\n", + " 'frames_include': -1,\n", + " 'multiplane_parallel': False,\n", + " 'ignore_flyback': [],\n", + " 'preclassify': 0.0,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'combined': True,\n", + " 'aspect': 1.0,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0,\n", + " 'bidi_corrected': False,\n", + " 'do_registration': 1,\n", + " 'two_step_registration': False,\n", + " 'keep_movie_raw': False,\n", + " 'nimg_init': 300,\n", + " 'batch_size': 500,\n", + " 'maxregshift': 0.1,\n", + " 'align_by_chan': 1,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False,\n", + " 'subpixel': 10,\n", + " 'smooth_sigma_time': 0,\n", + " 'smooth_sigma': 1.15,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'force_refImg': False,\n", + " 'pad_fft': False,\n", + " 'nonrigid': True,\n", + " 'block_size': [128, 128],\n", + " 'snr_thresh': 1.2,\n", + " 'maxregshiftNR': 5,\n", + " '1Preg': False,\n", + " 'spatial_hp': 42,\n", + " 'spatial_hp_reg': 42,\n", + " 'spatial_hp_detect': 25,\n", + " 'pre_smooth': 0,\n", + " 'spatial_taper': 40,\n", + " 'roidetect': True,\n", + " 'spikedetect': True,\n", + " 'anatomical_only': 0,\n", + " 'cellprob_threshold': 0.0,\n", + " 'flow_threshold': 1.5,\n", + " 'sparse_mode': False,\n", + " 'diameter': 0,\n", + " 'spatial_scale': 0,\n", + " 'connected': True,\n", + " 'nbinned': 5000,\n", + " 'max_iterations': 20,\n", + " 'threshold_scaling': 1.0,\n", + " 'max_overlap': 0.5,\n", + " 'high_pass': 100,\n", + " 'denoise': False,\n", + " 'soma_crop': True,\n", + " 'neuropil_extract': True,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'use_builtin_classifier': False,\n", + " 'classifier_path': 0,\n", + " 'chan2_thres': 0.65,\n", + " 'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0,\n", + " 'neucoeff': 0.7},\n", + " 'recording_modality': 'imaging'},\n", + " 'param_8': {'paramset_idx': 3,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': '182-suite2p-params-2026-2',\n", + " 'param_set_hash': '234d8c39-82ff-4af7-0527-f1e4b9b679f6',\n", + " 'params': {'suite2p_version': '0.10.1',\n", + " 'look_one_level_down': False,\n", + " 'fast_disk': [],\n", + " 'delete_bin': False,\n", + " 'mesoscan': False,\n", + " 'bruker': False,\n", + " 'bruker_bidirectional': False,\n", + " 'h5py': [],\n", + " 'h5py_key': 'data',\n", + " 'save_path0': [],\n", + " 'save_folder': [],\n", + " 'subfolders': [],\n", + " 'move_bin': False,\n", + " 'nplanes': 5,\n", + " 'nchannels': 1,\n", + " 'functional_chan': 1,\n", + " 'tau': 1.0,\n", + " 'fs': 30,\n", + " 'force_sktiff': False,\n", + " 'frames_include': -1,\n", + " 'multiplane_parallel': False,\n", + " 'ignore_flyback': [],\n", + " 'preclassify': 0.0,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'combined': True,\n", + " 'aspect': 1.0,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0,\n", + " 'bidi_corrected': False,\n", + " 'do_registration': 1,\n", + " 'two_step_registration': False,\n", + " 'keep_movie_raw': False,\n", + " 'nimg_init': 300,\n", + " 'batch_size': 500,\n", + " 'maxregshift': 0.1,\n", + " 'align_by_chan': 1,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False,\n", + " 'subpixel': 10,\n", + " 'smooth_sigma_time': 0,\n", + " 'smooth_sigma': 1.15,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'force_refImg': False,\n", + " 'pad_fft': False,\n", + " 'nonrigid': True,\n", + " 'block_size': [128, 128],\n", + " 'snr_thresh': 1.2,\n", + " 'maxregshiftNR': 5,\n", + " '1Preg': False,\n", + " 'spatial_hp': 42,\n", + " 'spatial_hp_reg': 42,\n", + " 'spatial_hp_detect': 25,\n", + " 'pre_smooth': 0,\n", + " 'spatial_taper': 40,\n", + " 'roidetect': True,\n", + " 'spikedetect': True,\n", + " 'anatomical_only': 0,\n", + " 'cellprob_threshold': 0.0,\n", + " 'flow_threshold': 1.5,\n", + " 'sparse_mode': False,\n", + " 'diameter': 10,\n", + " 'spatial_scale': 0,\n", + " 'connected': True,\n", + " 'nbinned': 5000,\n", + " 'max_iterations': 20,\n", + " 'threshold_scaling': 1.0,\n", + " 'max_overlap': 0.5,\n", + " 'high_pass': 100,\n", + " 'denoise': False,\n", + " 'soma_crop': True,\n", + " 'neuropil_extract': True,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'use_builtin_classifier': False,\n", + " 'classifier_path': 0,\n", + " 'chan2_thres': 0.65,\n", + " 'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0,\n", + " 'neucoeff': 0.7},\n", + " 'recording_modality': 'imaging'},\n", + " 'param_9': {'paramset_idx': 4,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': '182-suite2p-params-2026-3',\n", + " 'param_set_hash': '21c9d725-7bb1-e720-fc0d-7588b4d27133',\n", + " 'params': {'suite2p_version': '0.10.1',\n", + " 'look_one_level_down': False,\n", + " 'fast_disk': [],\n", + " 'delete_bin': False,\n", + " 'mesoscan': False,\n", + " 'bruker': False,\n", + " 'bruker_bidirectional': False,\n", + " 'h5py': [],\n", + " 'h5py_key': 'data',\n", + " 'save_path0': [],\n", + " 'save_folder': [],\n", + " 'subfolders': [],\n", + " 'move_bin': False,\n", + " 'nplanes': 5,\n", + " 'nchannels': 1,\n", + " 'functional_chan': 1,\n", + " 'tau': 1.0,\n", + " 'fs': 30,\n", + " 'force_sktiff': False,\n", + " 'frames_include': -1,\n", + " 'multiplane_parallel': False,\n", + " 'ignore_flyback': [],\n", + " 'preclassify': 0.0,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'combined': True,\n", + " 'aspect': 1.0,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0,\n", + " 'bidi_corrected': False,\n", + " 'do_registration': 1,\n", + " 'two_step_registration': False,\n", + " 'keep_movie_raw': False,\n", + " 'nimg_init': 300,\n", + " 'batch_size': 500,\n", + " 'maxregshift': 0.1,\n", + " 'align_by_chan': 1,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False,\n", + " 'subpixel': 10,\n", + " 'smooth_sigma_time': 0,\n", + " 'smooth_sigma': 1.15,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'force_refImg': False,\n", + " 'pad_fft': False,\n", + " 'nonrigid': True,\n", + " 'block_size': [128, 128],\n", + " 'snr_thresh': 1.2,\n", + " 'maxregshiftNR': 5,\n", + " '1Preg': False,\n", + " 'spatial_hp': 42,\n", + " 'spatial_hp_reg': 42,\n", + " 'spatial_hp_detect': 25,\n", + " 'pre_smooth': 0,\n", + " 'spatial_taper': 40,\n", + " 'roidetect': True,\n", + " 'spikedetect': True,\n", + " 'anatomical_only': 0,\n", + " 'cellprob_threshold': 0.0,\n", + " 'flow_threshold': 1.5,\n", + " 'sparse_mode': False,\n", + " 'diameter': 10,\n", + " 'spatial_scale': 0,\n", + " 'connected': True,\n", + " 'nbinned': 5000,\n", + " 'max_iterations': 20,\n", + " 'threshold_scaling': 1.0,\n", + " 'max_overlap': 0.5,\n", + " 'high_pass': 100,\n", + " 'denoise': False,\n", + " 'soma_crop': True,\n", + " 'neuropil_extract': False,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'use_builtin_classifier': False,\n", + " 'classifier_path': 0,\n", + " 'chan2_thres': 0.65,\n", + " 'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0,\n", + " 'neucoeff': 0.7},\n", + " 'recording_modality': 'imaging'},\n", + " 'param_10': {'paramset_idx': 5,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': '182-suite2p-params-2026-4',\n", + " 'param_set_hash': '4b2ba7dd-9dab-fbc0-562f-c7b95b2c4fd1',\n", + " 'params': {'suite2p_version': '0.10.1',\n", + " 'look_one_level_down': False,\n", + " 'fast_disk': [],\n", + " 'delete_bin': False,\n", + " 'mesoscan': False,\n", + " 'bruker': False,\n", + " 'bruker_bidirectional': False,\n", + " 'h5py': [],\n", + " 'h5py_key': 'data',\n", + " 'save_path0': [],\n", + " 'save_folder': [],\n", + " 'subfolders': [],\n", + " 'move_bin': False,\n", + " 'nplanes': 5,\n", + " 'nchannels': 1,\n", + " 'functional_chan': 1,\n", + " 'tau': 1.0,\n", + " 'fs': 50,\n", + " 'force_sktiff': False,\n", + " 'frames_include': -1,\n", + " 'multiplane_parallel': False,\n", + " 'ignore_flyback': [],\n", + " 'preclassify': 0.0,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'combined': True,\n", + " 'aspect': 1.0,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0,\n", + " 'bidi_corrected': False,\n", + " 'do_registration': 1,\n", + " 'two_step_registration': False,\n", + " 'keep_movie_raw': False,\n", + " 'nimg_init': 300,\n", + " 'batch_size': 500,\n", + " 'maxregshift': 0.1,\n", + " 'align_by_chan': 1,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False,\n", + " 'subpixel': 10,\n", + " 'smooth_sigma_time': 0,\n", + " 'smooth_sigma': 1.15,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'force_refImg': False,\n", + " 'pad_fft': False,\n", + " 'nonrigid': True,\n", + " 'block_size': [128, 128],\n", + " 'snr_thresh': 1.2,\n", + " 'maxregshiftNR': 5,\n", + " '1Preg': False,\n", + " 'spatial_hp': 42,\n", + " 'spatial_hp_reg': 42,\n", + " 'spatial_hp_detect': 25,\n", + " 'pre_smooth': 0,\n", + " 'spatial_taper': 40,\n", + " 'roidetect': True,\n", + " 'spikedetect': True,\n", + " 'anatomical_only': 0,\n", + " 'cellprob_threshold': 0.0,\n", + " 'flow_threshold': 1.5,\n", + " 'sparse_mode': False,\n", + " 'diameter': 10,\n", + " 'spatial_scale': 0,\n", + " 'connected': True,\n", + " 'nbinned': 5000,\n", + " 'max_iterations': 20,\n", + " 'threshold_scaling': 1.0,\n", + " 'max_overlap': 0.5,\n", + " 'high_pass': 100,\n", + " 'denoise': False,\n", + " 'soma_crop': True,\n", + " 'neuropil_extract': True,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'use_builtin_classifier': False,\n", + " 'classifier_path': 0,\n", + " 'chan2_thres': 0.65,\n", + " 'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0,\n", + " 'neucoeff': 0.7},\n", + " 'recording_modality': 'imaging'},\n", + " 'param_11': {'paramset_idx': 6,\n", + " 'processing_method': 'suite2p',\n", + " 'paramset_desc': 'suite2p_params_v1.0',\n", + " 'param_set_hash': '43d6c596-05f5-f5bf-5a96-2c05d308aa24',\n", + " 'params': {'torch_device': 'cpu',\n", + " 'tau': 1.5,\n", + " 'fs': 50,\n", + " 'diameter': [12.0, 12.0],\n", + " 'run': {'do_registration': 1,\n", + " 'do_regmetrics': True,\n", + " 'do_detection': True,\n", + " 'do_deconvolution': True,\n", + " 'multiplane_parallel': False},\n", + " 'io': {'combined': False,\n", + " 'save_mat': True,\n", + " 'save_NWB': False,\n", + " 'save_ops_orig': True,\n", + " 'delete_bin': False,\n", + " 'move_bin': False},\n", + " 'registration': {'align_by_chan2': False,\n", + " 'nimg_init': 300,\n", + " 'maxregshift': 0.1,\n", + " 'do_bidiphase': False,\n", + " 'bidiphase': 0.0,\n", + " 'batch_size': 500,\n", + " 'nonrigid': True,\n", + " 'maxregshiftNR': 5,\n", + " 'block_size': [128.0, 128.0],\n", + " 'smooth_sigma_time': 0.0,\n", + " 'smooth_sigma': 1.15,\n", + " 'spatial_taper': 3.45,\n", + " 'th_badframes': 1.0,\n", + " 'norm_frames': True,\n", + " 'snr_thresh': 1.2,\n", + " 'subpixel': 10,\n", + " 'two_step_registration': False,\n", + " 'reg_tif': False,\n", + " 'reg_tif_chan2': False},\n", + " 'detection': {'algorithm': 'sourcery',\n", + " 'denoise': False,\n", + " 'block_size': [64.0, 64.0],\n", + " 'nbins': 2000,\n", + " 'bin_size': [],\n", + " 'highpass_time': 100,\n", + " 'threshold_scaling': 1.1,\n", + " 'npix_norm_min': 0.0,\n", + " 'npix_norm_max': 100.0,\n", + " 'max_overlap': 0.5,\n", + " 'soma_crop': True,\n", + " 'chan2_threshold': [],\n", + " 'cellpose_chan2': False,\n", + " 'sparsery_settings': {'highpass_neuropil': 25,\n", + " 'max_ROIs': 5000,\n", + " 'spatial_scale': 0,\n", + " 'active_percentile': 0.0},\n", + " 'sourcery_settings': {'connected': True,\n", + " 'max_iterations': 20,\n", + " 'smooth_masks': False},\n", + " 'cellpose_settings': {'cellpose_model': 'cpsam',\n", + " 'img': 'max_proj / meanImg',\n", + " 'highpass_spatial': 0,\n", + " 'flow_threshold': 0.4,\n", + " 'cellprob_threshold': 0.0,\n", + " 'params': [],\n", + " 'params_chan2': []}},\n", + " 'classification': {'classifier_path': [],\n", + " 'use_builtin_classifier': True,\n", + " 'preclassify': 0.0},\n", + " 'extraction': {'snr_threshold': 0.0,\n", + " 'batch_size': 500,\n", + " 'neuropil_extract': True,\n", + " 'neuropil_coefficient': 0.7,\n", + " 'inner_neuropil_radius': 2,\n", + " 'min_neuropil_pixels': 350,\n", + " 'lam_percentile': 50.0,\n", + " 'allow_overlap': False,\n", + " 'circular_neuropil': False},\n", + " 'dcnv_preprocess': {'baseline': 'maximin',\n", + " 'win_baseline': 60.0,\n", + " 'sig_baseline': 10.0,\n", + " 'prctile_baseline': 8.0},\n", + " 'version': '1.0.0.1',\n", + " 'neuropil_extract': False},\n", + " 'recording_modality': 'imaging'}}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params_dict_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/cup/braininit/Shared/repos/TestU19PipelinePython2/U19-pipeline-python/.venv/lib/python3.13/site-packages/scipy/io/matlab/_mio5.py:659: MatWriteWarning: Starting field name with a underscore or a digit (1Preg) is ignored\n", + " narr = to_writeable(arr)\n" + ] + } + ], + "source": [ + "dj.conn().close()\n", + "\n", + "\n", + "savemat('params.mat', params_dict_dict)\n", + "savemat('preparams.mat', preparams_dict_dict)\n", + "savemat('preparams_list.mat', preparams_steps_dict_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "jupytext": { + "encoding": "# -*- coding: utf-8 -*-" + }, + "kernelspec": { + "display_name": "u19-pipeline (3.13.10)", + "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.13.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/imaging_element/test_Matlab_Python_conv.ipynb b/notebooks/imaging_element/test_Matlab_Python_conv.ipynb index c801ccc8..0ef0fc60 100644 --- a/notebooks/imaging_element/test_Matlab_Python_conv.ipynb +++ b/notebooks/imaging_element/test_Matlab_Python_conv.ipynb @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -54,7 +54,7 @@ "" ] }, - "execution_count": 3, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -77,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -109,7 +109,7 @@ " {'recording_id': 688}]" ] }, - "execution_count": 5, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -121,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -130,7 +130,7 @@ "{'recording_id': 684}" ] }, - "execution_count": 6, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -146,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -194,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -763,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -863,7 +863,7 @@ " 99\n", " 684\n", " 1\n", - " 1\n", + " 100\n", " ef512_act132_ppc_05192026_00002_00001.tif\n", " [197018, 199017]\n", " \n", @@ -871,7 +871,7 @@ " 100\n", " 684\n", " 1\n", - " 2\n", + " 101\n", " ef512_act132_ppc_05192026_00002_00002.tif\n", " [199018, 201017]\n", " \n", @@ -879,7 +879,7 @@ " 101\n", " 684\n", " 1\n", - " 3\n", + " 102\n", " ef512_act132_ppc_05192026_00002_00003.tif\n", " [201018, 202700]\n", " \n", @@ -898,9 +898,9 @@ ".. ... ... ... \n", "97 684 1 98 \n", "98 684 1 99 \n", - "99 684 1 1 \n", - "100 684 1 2 \n", - "101 684 1 3 \n", + "99 684 1 100 \n", + "100 684 1 101 \n", + "101 684 1 102 \n", "\n", " tiff_split_filename file_frame_range \n", "0 ef512_act132_ppc_05192026_00001_00001.tif [1, 2000] \n", @@ -918,7 +918,7 @@ "[102 rows x 5 columns]" ] }, - "execution_count": 12, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } From 174d79070e4cae32d4c0a2db0451f6d69af8b969 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Mon, 17 Aug 2026 09:34:00 -0400 Subject: [PATCH 02/30] docs: annotate source of Locked Tables Alert and its lock producers Point out where the "Locked Tables Alert" Slack message originates (main_locked_tables_alert's raw `SHOW OPEN TABLES` query) and which cron-driven processes hold locks on acquisition.SessionVideo and pupillometry.PupillometrySessionModelData: the pupillometry queue/check handlers, which run on their own schedules without a flock guard. Assisted-by: ClaudeCode:claude-sonnet-5 --- .../locked_tables_alert/locked_tables_alert.py | 5 +++++ u19_pipeline/automatic_job/pupillometry_handler.py | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py b/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py index 4f2aa442..da2e8b00 100644 --- a/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py +++ b/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py @@ -15,6 +15,11 @@ def main_locked_tables_alert(): + # Source of the "Locked Tables Alert" Slack message: this raw MySQL + # `SHOW OPEN TABLES` query (not a DataJoint table query) is the only + # place `in_use` is read. A table is reported here whenever any open + # connection is holding a lock on it (e.g. an in-flight transaction + # from a `.populate()`/`.update1()` call), not necessarily a stuck one. locked_tables_query = 'show open tables where in_use > 0' conn = dj.conn() locked_tables_df = pd.DataFrame(conn.query(locked_tables_query, as_dict=True).fetchall()) diff --git a/u19_pipeline/automatic_job/pupillometry_handler.py b/u19_pipeline/automatic_job/pupillometry_handler.py index 07f1bfc2..2f23e248 100644 --- a/u19_pipeline/automatic_job/pupillometry_handler.py +++ b/u19_pipeline/automatic_job/pupillometry_handler.py @@ -252,7 +252,12 @@ def analyze_videos_pupillometry(configPath, videoPath, output_dir): @staticmethod @pupillometry_exception_handler def check_pupillometry_sessions_queue(): - + # Joins/updates acquisition.SessionVideo and + # pupillometry.PupillometrySessionModelData below; run on a cron + # schedule (see call_pupillometry_queue_jobs.sh) with no flock guard, + # so overlapping runs can hold both tables open at once. This is a + # source of the `session_video` / `_pupillometry_session_model_data` + # entries reported by locked_tables_alert.py. status_update = config.status_update_idx['NO_CHANGE'] update_value_dict = copy.deepcopy(config.default_update_value_dict) @@ -334,7 +339,10 @@ def check_pupillometry_sessions_queue(): @staticmethod @pupillometry_exception_handler def check_processed_pupillometry_sessions(): - + # Same SessionVideo/PupillometrySessionModelData join+update pattern + # as check_pupillometry_sessions_queue() above; run on its own cron + # schedule (see call_pupillometry_check_jobs.sh), also without a + # flock guard against overlapping runs. #status_update = config.status_update_idx['NO_CHANGE'] update_value_dict = copy.deepcopy(config.default_update_value_dict) From eb820e6b9d9f0110e394aacc7a0d916b54eb4c0c Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Mon, 17 Aug 2026 10:06:10 -0400 Subject: [PATCH 03/30] feat: report the locking process alongside each locked table `SHOW OPEN TABLES` (used by main_locked_tables_alert) has no connection/process id, so it only ever showed which table was locked, not who was holding it. Cross-reference `SHOW FULL PROCESSLIST` by database name and attach each match's process id, user, host, command, elapsed time, and current query to the Slack alert so on-call can go straight to `KILL ` or the offending cron job instead of guessing. Assisted-by: ClaudeCode:claude-sonnet-5 --- .../locked_tables_alert.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py b/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py index da2e8b00..19627c26 100644 --- a/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py +++ b/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py @@ -29,6 +29,7 @@ def main_locked_tables_alert(): else: locked_tables_df = locked_tables_df.head() locked_tables_df = locked_tables_df.drop('Name_locked',axis=1) + locked_tables_df = add_locking_process_info(locked_tables_df, conn) locked_tables_df = su.format_df_for_slack_message(locked_tables_df) slack_json_message = slack_alert_message_format_locked_tables(locked_tables_df) @@ -39,6 +40,44 @@ def main_locked_tables_alert(): time.sleep(1) +def add_locking_process_info(locked_tables_df, conn): + """Annotate each locked table row with the connection(s) currently using + that table's database, so the alert shows *which process* is holding + the lock and not just which table is locked. + + `SHOW OPEN TABLES` does not expose a connection/process id, so we + cross-reference `SHOW PROCESSLIST` (matched on `Database`) to surface + the process id, user/host, how long it's been running, and the query + text it's currently executing (if any). + """ + + processlist_df = pd.DataFrame(conn.query('show full processlist', as_dict=True).fetchall()) + + def summarize_processes(database_name): + if processlist_df.shape[0] == 0: + return 'unknown' + + matching_processes = processlist_df[processlist_df['db'] == database_name] + if matching_processes.shape[0] == 0: + return 'unknown' + + process_descriptions = [] + for _, this_process in matching_processes.iterrows(): + query_info = (this_process['Info'] or '').strip().replace('\n', ' ') + query_info = (query_info[:60] + '...') if len(query_info) > 60 else query_info + process_descriptions.append( + 'Id={} User={} Host={} Command={} Time={}s Query={}'.format( + this_process['Id'], this_process['User'], this_process['Host'], + this_process['Command'], this_process['Time'], query_info or '' + ) + ) + return ' | '.join(process_descriptions) + + locked_tables_df['Locking_process'] = locked_tables_df['Database'].apply(summarize_processes) + + return locked_tables_df + + def slack_alert_message_format_locked_tables(locked_tables_df): now = datetime.datetime.now() datestr = now.strftime("%d-%b-%Y %H:%M:%S") From 9e256882c58aa11e83f09e3c2d9dd6d63bd2dca4 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:38:13 -0400 Subject: [PATCH 04/30] fix: replace broken db-matched lock attribution with active-connection list `add_locking_process_info()` matched `SHOW OPEN TABLES.Database` against `SHOW PROCESSLIST.db`, but `db` is only a connection's current default database (set by the last `USE`), not the database of a table it has locked. In practice this match almost never succeeds, so the Slack alert was reporting `Locking_process=unknown` for every real lock (reproduced locally against a MariaDB container with a cross-database `LOCK TABLES`). There is no processlist field that reliably maps a locked table back to the connection holding it; that requires `performance_schema.metadata_locks` joined to `processlist`, which needs a server-side config change (performance_schema on, plus the mdl instrument enabled) that's out of scope here. Instead, list all active (non-Sleep) connections alongside the locked tables so on-call can cross-reference them manually. Assisted-by: ClaudeCode:claude-sonnet-5 --- .../locked_tables_alert.py | 92 ++++++++++++------- 1 file changed, 57 insertions(+), 35 deletions(-) diff --git a/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py b/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py index 19627c26..64003823 100644 --- a/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py +++ b/u19_pipeline/alert_system/locked_tables_alert/locked_tables_alert.py @@ -29,9 +29,12 @@ def main_locked_tables_alert(): else: locked_tables_df = locked_tables_df.head() locked_tables_df = locked_tables_df.drop('Name_locked',axis=1) - locked_tables_df = add_locking_process_info(locked_tables_df, conn) locked_tables_df = su.format_df_for_slack_message(locked_tables_df) - slack_json_message = slack_alert_message_format_locked_tables(locked_tables_df) + + active_processes_df = get_active_processes(conn) + active_processes_str = format_active_processes(active_processes_df) + + slack_json_message = slack_alert_message_format_locked_tables(locked_tables_df, active_processes_str) webhooks_list = su.get_webhook_list(slack_configuration_dictionary, lab) # Send alert @@ -40,45 +43,52 @@ def main_locked_tables_alert(): time.sleep(1) -def add_locking_process_info(locked_tables_df, conn): - """Annotate each locked table row with the connection(s) currently using - that table's database, so the alert shows *which process* is holding - the lock and not just which table is locked. - - `SHOW OPEN TABLES` does not expose a connection/process id, so we - cross-reference `SHOW PROCESSLIST` (matched on `Database`) to surface - the process id, user/host, how long it's been running, and the query - text it's currently executing (if any). +def get_active_processes(conn): + """Return all non-idle connections from `SHOW FULL PROCESSLIST`. + + `SHOW OPEN TABLES` reports which table is locked but has no + connection/process id. `SHOW PROCESSLIST` has no field that reliably + maps back to the schema/table a connection has locked either: its `db` + column is only the connection's *current default* database (set by the + last `USE`), which is frequently different from the database of a table + the connection has open-cache-locked (e.g. via an explicit + `LOCK TABLES other_db.table` or a query that just qualifies the table + name). So instead of guessing a match and risking a wrong answer, list + every active connection here so a human can cross-reference it against + the locked tables above. + + Reliably attributing a specific locked table to a specific connection + would require `performance_schema.metadata_locks` (joined to + `processlist` on thread id), which is not enabled by default in + MariaDB/MySQL and requires a server config change - out of scope here. """ processlist_df = pd.DataFrame(conn.query('show full processlist', as_dict=True).fetchall()) + if processlist_df.shape[0] == 0: + return processlist_df - def summarize_processes(database_name): - if processlist_df.shape[0] == 0: - return 'unknown' - - matching_processes = processlist_df[processlist_df['db'] == database_name] - if matching_processes.shape[0] == 0: - return 'unknown' - - process_descriptions = [] - for _, this_process in matching_processes.iterrows(): - query_info = (this_process['Info'] or '').strip().replace('\n', ' ') - query_info = (query_info[:60] + '...') if len(query_info) > 60 else query_info - process_descriptions.append( - 'Id={} User={} Host={} Command={} Time={}s Query={}'.format( - this_process['Id'], this_process['User'], this_process['Host'], - this_process['Command'], this_process['Time'], query_info or '' - ) - ) - return ' | '.join(process_descriptions) + return processlist_df[processlist_df['Command'] != 'Sleep'] - locked_tables_df['Locking_process'] = locked_tables_df['Database'].apply(summarize_processes) - return locked_tables_df +def format_active_processes(active_processes_df): + if active_processes_df.shape[0] == 0: + return 'No active (non-idle) connections found.' + + process_descriptions = [] + for _, this_process in active_processes_df.iterrows(): + query_info = (this_process['Info'] or '').strip().replace('\n', ' ') + query_info = (query_info[:60] + '...') if len(query_info) > 60 else query_info + db_name = this_process['db'] if pd.notna(this_process['db']) else '' + process_descriptions.append( + 'Id={} User={} Host={} DB={} Command={} Time={}s Query={}'.format( + this_process['Id'], this_process['User'], this_process['Host'], + db_name, this_process['Command'], this_process['Time'], query_info or '' + ) + ) + return '\n'.join(process_descriptions) -def slack_alert_message_format_locked_tables(locked_tables_df): +def slack_alert_message_format_locked_tables(locked_tables_df, active_processes_str): now = datetime.datetime.now() datestr = now.strftime("%d-%b-%Y %H:%M:%S") @@ -93,7 +103,7 @@ def slack_alert_message_format_locked_tables(locked_tables_df): m1_1["text"] = ":rotating_light: *Locked Tables Alert *" m1["text"] = m1_1 - # Info for subjects missing water + # Locked tables m2 = dict() m2["type"] = "section" m2_1 = dict() @@ -103,8 +113,20 @@ def slack_alert_message_format_locked_tables(locked_tables_df): m2_1["text"] += locked_tables_df m2["text"] = m2_1 + # Active connections, for cross-referencing against the locked tables above. + # We cannot reliably tell which connection holds which table's lock (see + # get_active_processes docstring), so all active connections are listed. + m3 = dict() + m3["type"] = "section" + m3_1 = dict() + m3_1["type"] = "mrkdwn" + + m3_1["text"] = "*Active connections (cross-reference to find the lock holder):*" + "\n" + m3_1["text"] += "```" + active_processes_str + "```" + m3["text"] = m3_1 + message = dict() - message["blocks"] = [m1, msep, m2, msep] + message["blocks"] = [m1, msep, m2, msep, m3, msep] message["text"] = "Locked Tables Alert" return message From e2f0ffedbadb486692187cdefae9e806c64b7d82 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Mon, 24 Aug 2026 09:33:39 -0400 Subject: [PATCH 05/30] feat: add nightly disk space alert for /, braininit, and u19_dj mounts Checks free space on /, /mnt/cup/braininit, and /mnt/cup/u19_dj and sends a Slack notification to dev_notifications when free space drops below whichever is smaller: 1% of total capacity or 5 TB. Wired into the existing nightly (3am) cron job in cronjob_alert.py. Assisted-by: ClaudeCode:claude-sonnet-5 --- pyproject.toml | 1 + tests/alert_system/test_disk_space_alert.py | 122 ++++++++++++++++++ u19_pipeline/alert_system/cronjob_alert.py | 2 + .../custom_alerts/disk_space_alert.py | 111 ++++++++++++++++ 4 files changed, 236 insertions(+) create mode 100644 tests/alert_system/test_disk_space_alert.py create mode 100644 u19_pipeline/alert_system/custom_alerts/disk_space_alert.py diff --git a/pyproject.toml b/pyproject.toml index 138d6796..5a8af7ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,6 +70,7 @@ line-length = 120 [dependency-groups] dev = [ "ipykernel>=6.29.5", + "pytest>=8.0.0", "ruff>=0.9.10", "setuptools>=75.8.0" ] diff --git a/tests/alert_system/test_disk_space_alert.py b/tests/alert_system/test_disk_space_alert.py new file mode 100644 index 00000000..f5f14d9b --- /dev/null +++ b/tests/alert_system/test_disk_space_alert.py @@ -0,0 +1,122 @@ +from unittest.mock import patch + +import pytest + +from u19_pipeline.alert_system.custom_alerts import disk_space_alert as dsa + +TB = dsa.BYTES_PER_TB + + +class TestGetFreeSpaceThresholdBytes: + + def test_percent_threshold_wins_on_large_filesystem(self): + # 1% of 1000 TB = 10 TB, which is larger than the 5 TB cap, so the + # cap (the smaller of the two) should be returned. + total_bytes = 1000 * TB + assert dsa.get_free_space_threshold_bytes(total_bytes) == 5 * TB + + def test_absolute_cap_wins_on_small_filesystem(self): + # 1% of 100 TB = 1 TB, smaller than the 5 TB cap. + total_bytes = 100 * TB + assert dsa.get_free_space_threshold_bytes(total_bytes) == pytest.approx(1 * TB) + + def test_zero_total_bytes(self): + assert dsa.get_free_space_threshold_bytes(0) == 0 + + +class TestGetLowDiskSpaceAlerts: + + def test_no_alert_when_space_is_plentiful(self): + with patch.object(dsa.shutil, 'disk_usage', return_value=(1000 * TB, 0, 900 * TB)): + alerts = dsa.get_low_disk_space_alerts(['/some/path']) + assert alerts == [] + + def test_alert_when_free_space_below_percent_threshold(self): + # Small filesystem: 1% threshold (smaller than 5TB cap) is 1 TB free required. + total = 100 * TB + free = 0.5 * TB + with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, free)): + alerts = dsa.get_low_disk_space_alerts(['/some/path']) + assert len(alerts) == 1 + assert alerts[0]['path'] == '/some/path' + assert alerts[0]['free_space(tb)'] == pytest.approx(0.5) + + def test_alert_when_free_space_below_absolute_cap(self): + # Huge filesystem: 5TB cap applies (smaller than 1% of total). + total = 10000 * TB + free = 4 * TB + with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, free)): + alerts = dsa.get_low_disk_space_alerts(['/some/path']) + assert len(alerts) == 1 + + def test_no_alert_exactly_at_threshold_boundary(self): + # free_bytes == threshold_bytes should NOT trigger (strict less-than). + total = 100 * TB + threshold = dsa.get_free_space_threshold_bytes(total) + with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, threshold)): + alerts = dsa.get_low_disk_space_alerts(['/some/path']) + assert alerts == [] + + def test_alert_just_below_threshold_boundary(self): + total = 100 * TB + threshold = dsa.get_free_space_threshold_bytes(total) + with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, threshold - 1)): + alerts = dsa.get_low_disk_space_alerts(['/some/path']) + assert len(alerts) == 1 + + def test_zero_free_space(self): + total = 100 * TB + with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, 0)): + alerts = dsa.get_low_disk_space_alerts(['/some/path']) + assert len(alerts) == 1 + assert alerts[0]['free_space(tb)'] == 0 + assert alerts[0]['free_space(%)'] == 0 + + def test_missing_or_unmounted_path_is_flagged(self): + with patch.object(dsa.shutil, 'disk_usage', side_effect=OSError('No such file or directory')): + alerts = dsa.get_low_disk_space_alerts(['/not/mounted']) + assert len(alerts) == 1 + assert alerts[0]['path'] == '/not/mounted' + assert 'not found' in alerts[0]['alert_message'] or 'not mounted' in alerts[0]['alert_message'] + + def test_checks_all_configured_paths_independently(self): + def fake_disk_usage(path): + if path == '/low': + return (100 * TB, 0, 0) + if path == '/missing': + raise OSError('No such path') + return (100 * TB, 0, 99 * TB) + + with patch.object(dsa.shutil, 'disk_usage', side_effect=fake_disk_usage): + alerts = dsa.get_low_disk_space_alerts(['/low', '/missing', '/plenty']) + + flagged_paths = {row['path'] for row in alerts} + assert flagged_paths == {'/low', '/missing'} + + def test_default_monitored_paths_include_required_mounts(self): + assert dsa.MONITORED_PATHS == ['/', '/mnt/cup/braininit', '/mnt/cup/u19_dj'] + + +class TestMainDiskSpaceAlert: + + def test_no_slack_call_when_no_alerts(self): + with patch.object(dsa, 'get_low_disk_space_alerts', return_value=[]), \ + patch.object(dsa.su, 'get_webhook_list') as mock_get_webhooks, \ + patch.object(dsa.su, 'send_slack_notification') as mock_send: + dsa.main_disk_space_alert() + + mock_get_webhooks.assert_not_called() + mock_send.assert_not_called() + + def test_sends_to_each_webhook_when_alerts_present(self): + fake_alerts = [{'alert_message': 'Low disk space', 'path': '/'}] + with patch.object(dsa, 'get_low_disk_space_alerts', return_value=fake_alerts), \ + patch.object(dsa.su, 'get_webhook_list', return_value=['hook1', 'hook2']) as mock_get_webhooks, \ + patch.object(dsa.su, 'send_slack_notification') as mock_send, \ + patch.object(dsa.time, 'sleep'): + dsa.main_disk_space_alert() + + mock_get_webhooks.assert_called_once_with(dsa.slack_configuration_dictionary, dsa.lab) + assert mock_send.call_count == 2 + mock_send.assert_any_call('hook1', mock_send.call_args_list[0][0][1]) + mock_send.assert_any_call('hook2', mock_send.call_args_list[1][0][1]) diff --git a/u19_pipeline/alert_system/cronjob_alert.py b/u19_pipeline/alert_system/cronjob_alert.py index 592bf6d1..98b89a1d 100644 --- a/u19_pipeline/alert_system/cronjob_alert.py +++ b/u19_pipeline/alert_system/cronjob_alert.py @@ -10,9 +10,11 @@ import u19_pipeline.alert_system.log_deletion.old_log_deletion as old import u19_pipeline.alert_system.live_session_stats_deletion.live_session_stats_deletion as lssd import u19_pipeline.alert_system.noDB_backup_creation.noDB_backup_creation_script as noDBbcs +import u19_pipeline.alert_system.custom_alerts.disk_space_alert as dsa #mas.main_alert_system() old.main_old_log_deletion() lssd.main_live_session_stats_deletion() noDBbcs.main_noDB_backup() +dsa.main_disk_space_alert() diff --git a/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py b/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py new file mode 100644 index 00000000..3881356f --- /dev/null +++ b/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py @@ -0,0 +1,111 @@ +import datetime +import shutil +import time + +import u19_pipeline.lab as lab +import u19_pipeline.utils.slack_utils as su + +# Slack Configuration dictionary +slack_configuration_dictionary = { + 'slack_notification_channel': ['dev_notifications'] +} + +# Paths monitored for low disk space +MONITORED_PATHS = [ + '/', + '/mnt/cup/braininit', + '/mnt/cup/u19_dj', +] + +# A path is flagged once free space drops below whichever is smaller: +# 1% of the filesystem's total size, or this many bytes. +MAX_FREE_SPACE_THRESHOLD_TB = 5 +BYTES_PER_TB = 1024 ** 4 +PERCENT_FREE_SPACE_THRESHOLD = 0.01 + + +def get_free_space_threshold_bytes(total_bytes): + """ + Alert threshold for a filesystem of size `total_bytes`: the smaller of + 1% of total capacity or MAX_FREE_SPACE_THRESHOLD_TB. + """ + return min(total_bytes * PERCENT_FREE_SPACE_THRESHOLD, MAX_FREE_SPACE_THRESHOLD_TB * BYTES_PER_TB) + + +def get_low_disk_space_alerts(monitored_paths=MONITORED_PATHS): + """ + Check each path in `monitored_paths` and return a list of alert dicts + for any path that is unreachable or below its free-space threshold. + """ + + alert_rows = [] + for this_path in monitored_paths: + try: + total_bytes, _, free_bytes = shutil.disk_usage(this_path) + except OSError: + alert_rows.append({ + 'alert_message': 'Could not check disk space (path not found or not mounted)', + 'path': this_path, + }) + continue + + threshold_bytes = get_free_space_threshold_bytes(total_bytes) + if free_bytes < threshold_bytes: + alert_rows.append({ + 'alert_message': 'Low disk space', + 'path': this_path, + 'free_space(tb)': round(free_bytes / BYTES_PER_TB, 2), + 'free_space(%)': round(100 * free_bytes / total_bytes, 2), + }) + + return alert_rows + + +def main_disk_space_alert(): + + alert_rows = get_low_disk_space_alerts() + + if not alert_rows: + return + + slack_json_message = slack_alert_message_format_disk_space(alert_rows) + + webhooks_list = su.get_webhook_list(slack_configuration_dictionary, lab) + for this_webhook in webhooks_list: + su.send_slack_notification(this_webhook, slack_json_message) + time.sleep(1) + + +def slack_alert_message_format_disk_space(alert_rows): + now = datetime.datetime.now() + datestr = now.strftime("%d-%b-%Y %H:%M:%S") + + msep = dict() + msep["type"] = "divider" + + # Title # + m1 = dict() + m1["type"] = "section" + m1_1 = dict() + m1_1["type"] = "mrkdwn" + m1_1["text"] = ":rotating_light: *Low Disk Space Alert* on " + datestr + "\n\n" + m1["text"] = m1_1 + + # Info # + m2 = dict() + m2["type"] = "section" + m2_1 = dict() + m2_1["type"] = "mrkdwn" + + m2_1["text"] = "" + for this_row in alert_rows: + for key, value in this_row.items(): + m2_1["text"] += "*" + key + "* : " + str(value) + "\n" + m2_1["text"] += "\n" + m2["text"] = m2_1 + + message = dict() + message["blocks"] = [m1, msep, m2, msep] + message["text"] = "Low Disk Space Alert" + + return message From c8e2112dcd4c2e4c34bb9ee873dfe0ca49e85eb6 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:02:29 -0400 Subject: [PATCH 06/30] fix: isolate nightly cronjob_alert.py jobs so one failure doesn't block the rest Previously old_log_deletion, live_session_stats_deletion, noDB_backup, and the new disk_space_alert ran as unguarded sequential calls: an exception in an earlier job would abort the script and skip every job after it. Adds run_cronjob_alert_job(), which runs each job in its own try/except, reports the failure to the dev_notifications Slack channel, and lets the remaining jobs continue to run. Assisted-by: ClaudeCode:claude-sonnet-5 --- .../alert_system/test_alert_system_utility.py | 65 +++++++++++++ .../alert_system/alert_system_utility.py | 42 ++++++++- u19_pipeline/alert_system/cronjob_alert.py | 16 +++- uv.lock | 93 ++++++++++++------- 4 files changed, 178 insertions(+), 38 deletions(-) create mode 100644 tests/alert_system/test_alert_system_utility.py diff --git a/tests/alert_system/test_alert_system_utility.py b/tests/alert_system/test_alert_system_utility.py new file mode 100644 index 00000000..e9fb7652 --- /dev/null +++ b/tests/alert_system/test_alert_system_utility.py @@ -0,0 +1,65 @@ +from unittest.mock import MagicMock + +from u19_pipeline.alert_system import alert_system_utility as asu + + +class TestRunCronjobAlertJob: + + def test_successful_job_does_not_notify_slack(self): + job_function = MagicMock() + su = MagicMock() + + asu.run_cronjob_alert_job('some_job', job_function, lab=MagicMock(), su=su, slack_configuration_dictionary={}) + + job_function.assert_called_once() + su.get_webhook_list.assert_not_called() + su.send_slack_notification.assert_not_called() + + def test_failing_job_notifies_slack_and_does_not_raise(self): + def job_function(): + raise ValueError('boom') + + su = MagicMock() + su.get_webhook_list.return_value = ['hook1', 'hook2'] + + # Should not raise, even though job_function raises. + asu.run_cronjob_alert_job('some_job', job_function, lab=MagicMock(), su=su, slack_configuration_dictionary={}) + + assert su.send_slack_notification.call_count == 2 + + def test_failing_job_does_not_prevent_next_job_from_running(self): + def failing_job(): + raise RuntimeError('boom') + + next_job = MagicMock() + su = MagicMock() + su.get_webhook_list.return_value = [] + + asu.run_cronjob_alert_job('failing_job', failing_job, lab=MagicMock(), su=su, slack_configuration_dictionary={}) + asu.run_cronjob_alert_job('next_job', next_job, lab=MagicMock(), su=su, slack_configuration_dictionary={}) + + next_job.assert_called_once() + + def test_slack_notification_failure_does_not_raise(self): + def failing_job(): + raise RuntimeError('boom') + + su = MagicMock() + su.get_webhook_list.side_effect = Exception('slack lookup failed') + + # Should not raise even though the Slack notification path itself fails. + asu.run_cronjob_alert_job('failing_job', failing_job, lab=MagicMock(), su=su, slack_configuration_dictionary={}) + + def test_error_message_included_in_slack_payload(self): + def failing_job(): + raise ValueError('specific error text') + + su = MagicMock() + su.get_webhook_list.return_value = ['hook1'] + + asu.run_cronjob_alert_job('some_job', failing_job, lab=MagicMock(), su=su, slack_configuration_dictionary={}) + + sent_message = su.send_slack_notification.call_args[0][1] + block_text = sent_message['blocks'][0]['text']['text'] + assert 'specific error text' in block_text + assert 'some_job' in block_text diff --git a/u19_pipeline/alert_system/alert_system_utility.py b/u19_pipeline/alert_system/alert_system_utility.py index bd65016c..188dcf70 100644 --- a/u19_pipeline/alert_system/alert_system_utility.py +++ b/u19_pipeline/alert_system/alert_system_utility.py @@ -1,11 +1,49 @@ -import pandas as pd -import datajoint as dj import datetime +import traceback + +import datajoint as dj +import pandas as pd import u19_pipeline.utils.dj_shortcuts as djs + +def run_cronjob_alert_job(job_name, job_function, lab, su, slack_configuration_dictionary): + """ + Run a single nightly cronjob_alert.py job in isolation: an exception is + reported to Slack and swallowed so that the remaining nightly jobs still + run instead of aborting the whole script. + """ + + try: + job_function() + except Exception as e: + print('error while executing ' + job_name + ': ' + str(e)) + traceback.print_exc() + + error_message = ''.join(traceback.format_exception(type(e), value=e, tb=e.__traceback__)) + slack_json_message = { + 'blocks': [ + { + 'type': 'section', + 'text': { + 'type': 'mrkdwn', + 'text': ':rotating_light: *cronjob_alert.py: ' + job_name + ' failed*\n\n```' + error_message + '```', + }, + } + ], + 'text': 'cronjob_alert.py: ' + job_name + ' failed', + } + + try: + webhooks_list = su.get_webhook_list(slack_configuration_dictionary, lab) + for this_webhook in webhooks_list: + su.send_slack_notification(this_webhook, slack_json_message) + except Exception: + traceback.print_exc() + + def get_acquisition_data_alert_system(type='subject_fullname', data_days=60, min_sessions=20): ''' Get and filter data for alert system diff --git a/u19_pipeline/alert_system/cronjob_alert.py b/u19_pipeline/alert_system/cronjob_alert.py index 98b89a1d..6cd32711 100644 --- a/u19_pipeline/alert_system/cronjob_alert.py +++ b/u19_pipeline/alert_system/cronjob_alert.py @@ -7,14 +7,22 @@ import datajoint as dj import u19_pipeline.alert_system.main_alert_system as mas +import u19_pipeline.alert_system.alert_system_utility as asu import u19_pipeline.alert_system.log_deletion.old_log_deletion as old import u19_pipeline.alert_system.live_session_stats_deletion.live_session_stats_deletion as lssd import u19_pipeline.alert_system.noDB_backup_creation.noDB_backup_creation_script as noDBbcs import u19_pipeline.alert_system.custom_alerts.disk_space_alert as dsa +import u19_pipeline.lab as lab +import u19_pipeline.utils.slack_utils as su + +# Slack Configuration dictionary +slack_configuration_dictionary = { + 'slack_notification_channel': ['dev_notifications'] +} #mas.main_alert_system() -old.main_old_log_deletion() -lssd.main_live_session_stats_deletion() -noDBbcs.main_noDB_backup() -dsa.main_disk_space_alert() +asu.run_cronjob_alert_job('old_log_deletion', old.main_old_log_deletion, lab, su, slack_configuration_dictionary) +asu.run_cronjob_alert_job('live_session_stats_deletion', lssd.main_live_session_stats_deletion, lab, su, slack_configuration_dictionary) +asu.run_cronjob_alert_job('noDB_backup', noDBbcs.main_noDB_backup, lab, su, slack_configuration_dictionary) +asu.run_cronjob_alert_job('disk_space_alert', dsa.main_disk_space_alert, lab, su, slack_configuration_dictionary) diff --git a/uv.lock b/uv.lock index e684b35f..96d5d9ce 100644 --- a/uv.lock +++ b/uv.lock @@ -6,10 +6,10 @@ resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] @@ -515,8 +515,8 @@ name = "blessed" version = "1.44.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinxed", marker = "sys_platform != 'win32'" }, - { name = "wcwidth", marker = "sys_platform != 'win32'" }, + { name = "jinxed" }, + { name = "wcwidth" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7b/73/445c4ef32565d2f5af49f18c4163a32850c9328774ee0af74ed081d4ba15/blessed-1.44.0.tar.gz", hash = "sha256:d3b5037f0143eb7c80b2000be5bcdf86161af68aed231b91deadbce4e7379785", size = 14031337, upload-time = "2026-05-24T02:06:30.832Z" } wheels = [ @@ -994,7 +994,7 @@ name = "cuda-bindings" version = "13.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cuda-pathfinder" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/e0/4b3fdba08ff177e9451f376a4ba2df18d76f9158e6a16cdc062bd83db9fa/cuda_bindings-13.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f72f67f5790e7fa51e3f893e007e49567573ccdf4ed1ca988fbbbd36cd77847c", size = 6020531, upload-time = "2026-05-27T03:59:07.942Z" }, @@ -1025,34 +1025,34 @@ wheels = [ [package.optional-dependencies] cudart = [ - { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime" }, ] cufft = [ - { name = "nvidia-cufft", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cufft" }, ] cufile = [ - { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cufile" }, ] cupti = [ - { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti" }, ] curand = [ - { name = "nvidia-curand", marker = "sys_platform == 'linux'" }, + { name = "nvidia-curand" }, ] cusolver = [ - { name = "nvidia-cusolver", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusolver" }, ] cusparse = [ - { name = "nvidia-cusparse", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparse" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc" }, ] nvtx = [ - { name = "nvidia-nvtx", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvtx" }, ] [[package]] @@ -1899,13 +1899,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ea/e6/9e3c8d2b76eefb6fa5c2c7a70d590005a6c27d8800f9fcddcff1c1f57574/imagecodecs-2026.5.10-cp312-abi3-win32.whl", hash = "sha256:e518a0569451de0648425e3a058538afee588a532921ab690be78c1ce9c8ebca", size = 16249481, upload-time = "2026-05-10T23:45:12.298Z" }, { url = "https://files.pythonhosted.org/packages/01/bc/6ee42c44e4022dbed5a11ea4f368ad39c3fc17d6113f84432abf7c9cdce4/imagecodecs-2026.5.10-cp312-abi3-win_amd64.whl", hash = "sha256:200f70965c483ecf1755ba840485d42f4c5ab0467b3566685b18574947be8831", size = 19960184, upload-time = "2026-05-10T23:45:16.848Z" }, { url = "https://files.pythonhosted.org/packages/56/e5/3e8ada169498fd55199ad1e9264fbcb4b29315fbf5f64440542ed2a7e9c9/imagecodecs-2026.5.10-cp312-abi3-win_arm64.whl", hash = "sha256:1c0fbc228506a41156fcf2bb7c8a38fed98807c59413aab8a805251e1eec0bf4", size = 15808614, upload-time = "2026-05-10T23:45:20.191Z" }, - { url = "https://files.pythonhosted.org/packages/14/08/9042aca7672c9bb4b4f77eaee02c9d7532f834d562bf83575c65059746a5/imagecodecs-2026.5.10-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:39e8a162d05c8495bb0be72ae84dd297085569594c2c39b303e6812b485b376e", size = 15244398, upload-time = "2026-05-14T00:22:15.38Z" }, - { url = "https://files.pythonhosted.org/packages/5f/66/8bc2afc06f0f26de7a966c6962696575ce7327196d109129023ce7f5facc/imagecodecs-2026.5.10-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:60abd38c03dfdb396d09c4cd5163cb9145a66625434d7c416ac5585e85ce911f", size = 12867530, upload-time = "2026-05-10T23:45:22.969Z" }, - { url = "https://files.pythonhosted.org/packages/89/94/c0236a9b6a4b09486343adb4fb157f424b95c5d341723b61be1ab96e0946/imagecodecs-2026.5.10-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:b5b838ac2bd34aa0eaf2c8187290ad654da9c4311149230fbddf2c81386ff3ff", size = 31832193, upload-time = "2026-05-10T23:45:27.19Z" }, - { url = "https://files.pythonhosted.org/packages/01/50/85dcd719201cc31125e333361515b158833a889e8f7cb85cb12aedea06be/imagecodecs-2026.5.10-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:aff31d63b4c145d555b367cabf9ca6f7641c4215231b4c2b9cec1586ecb2b3ea", size = 32269541, upload-time = "2026-05-10T23:45:31.76Z" }, - { url = "https://files.pythonhosted.org/packages/6f/8a/da01e20f823449c5b29337f5826153de5d88b5eb2637c8c8bbb5154ba681/imagecodecs-2026.5.10-cp314-cp314t-win32.whl", hash = "sha256:7189cb0919d2bd4e93be92c93b418be14997586bef3964a8ed40794a4a5ffff2", size = 16992026, upload-time = "2026-05-10T23:45:35.32Z" }, - { url = "https://files.pythonhosted.org/packages/b5/02/6c890895edb5b9ea47966085d6b67d2b2f28f9e9febe79b9fbdafb683486/imagecodecs-2026.5.10-cp314-cp314t-win_amd64.whl", hash = "sha256:78ce31baa9f5c38d269650bc18a9d904f63b0af07bb64e17e1a68d9fe9d16b39", size = 20991939, upload-time = "2026-05-10T23:45:39.19Z" }, - { url = "https://files.pythonhosted.org/packages/f6/51/307ae581e90e68a51cadfa6a1b2a211ae37ad9b9089ea00ac9fda1921324/imagecodecs-2026.5.10-cp314-cp314t-win_arm64.whl", hash = "sha256:7f429cab8f5cac312b992e3c2e78c17bde86421d81ded487ba1e80a66bbb2393", size = 16517632, upload-time = "2026-05-10T23:45:42.246Z" }, ] [[package]] @@ -1933,6 +1926,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, ] +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + [[package]] name = "interleave" version = "0.3.0" @@ -3236,7 +3238,7 @@ name = "nvidia-cublas" version = "13.1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cuda-nvrtc", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cuda-nvrtc" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, @@ -3275,7 +3277,7 @@ name = "nvidia-cudnn-cu13" version = "9.20.0.48" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cublas" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, @@ -3287,7 +3289,7 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -3317,9 +3319,9 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cublas" }, + { name = "nvidia-cusparse" }, + { name = "nvidia-nvjitlink" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -3331,7 +3333,7 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -3558,7 +3560,7 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "ptyprocess" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ @@ -3656,6 +3658,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl", hash = "sha256:ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0", size = 9898444, upload-time = "2026-04-09T20:36:39.812Z" }, ] +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + [[package]] name = "probeinterface" version = "0.3.2" @@ -4171,6 +4182,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -4757,8 +4784,8 @@ name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "jeepney", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cryptography" }, + { name = "jeepney" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ @@ -5251,6 +5278,7 @@ pipeline = [ [package.dev-dependencies] dev = [ { name = "ipykernel" }, + { name = "pytest" }, { name = "ruff" }, { name = "setuptools" }, ] @@ -5292,6 +5320,7 @@ provides-extras = ["analysis", "pipeline"] [package.metadata.requires-dev] dev = [ { name = "ipykernel", specifier = ">=6.29.5" }, + { name = "pytest", specifier = ">=8.0.0" }, { name = "ruff", specifier = ">=0.9.10" }, { name = "setuptools", specifier = ">=75.8.0" }, ] From 68a6b201354c16db877b3f061ad44f59881826dd Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:59:41 -0400 Subject: [PATCH 07/30] fix: report disk space available to users, not raw free space shutil.disk_usage() (and the raw f_bfree statvfs field) includes blocks reserved for root, so it can overstate what a normal user can actually write. Switch to os.statvfs()'s f_bavail, matching what `df` reports as "Avail" and "Capacity", and compute the percentage against the same denominator df uses (blocks in use + blocks available to users). Assisted-by: ClaudeCode:claude-sonnet-5 --- tests/alert_system/test_disk_space_alert.py | 69 +++++++++++++------ .../custom_alerts/disk_space_alert.py | 30 ++++++-- 2 files changed, 72 insertions(+), 27 deletions(-) diff --git a/tests/alert_system/test_disk_space_alert.py b/tests/alert_system/test_disk_space_alert.py index f5f14d9b..225bde34 100644 --- a/tests/alert_system/test_disk_space_alert.py +++ b/tests/alert_system/test_disk_space_alert.py @@ -1,4 +1,4 @@ -from unittest.mock import patch +from unittest.mock import MagicMock, patch import pytest @@ -7,6 +7,10 @@ TB = dsa.BYTES_PER_TB +def make_statvfs(f_frsize=1, f_blocks=0, f_bfree=0, f_bavail=0): + return MagicMock(f_frsize=f_frsize, f_blocks=f_blocks, f_bfree=f_bfree, f_bavail=f_bavail) + + class TestGetFreeSpaceThresholdBytes: def test_percent_threshold_wins_on_large_filesystem(self): @@ -24,70 +28,91 @@ def test_zero_total_bytes(self): assert dsa.get_free_space_threshold_bytes(0) == 0 +class TestGetDiskUsage: + + def test_uses_bavail_not_bfree(self): + # f_bfree (raw free) includes blocks reserved for root; f_bavail + # (available to unprivileged users) excludes them. get_disk_usage + # must report the user-available figure, i.e. use f_bavail. + statvfs = make_statvfs(f_frsize=1024, f_blocks=1000, f_bfree=100, f_bavail=50) + with patch.object(dsa.os, 'statvfs', return_value=statvfs): + total_bytes, available_bytes = dsa.get_disk_usage('/some/path') + + assert available_bytes == 50 * 1024 + # total = used + available = (blocks - bfree) + bavail, in bytes, + # NOT f_blocks * f_frsize (which would include the root reserve). + assert total_bytes == ((1000 - 100) + 50) * 1024 + + def test_propagates_oserror_for_missing_path(self): + with patch.object(dsa.os, 'statvfs', side_effect=OSError('No such file or directory')), \ + pytest.raises(OSError): + dsa.get_disk_usage('/not/mounted') + + class TestGetLowDiskSpaceAlerts: def test_no_alert_when_space_is_plentiful(self): - with patch.object(dsa.shutil, 'disk_usage', return_value=(1000 * TB, 0, 900 * TB)): + with patch.object(dsa, 'get_disk_usage', return_value=(1000 * TB, 900 * TB)): alerts = dsa.get_low_disk_space_alerts(['/some/path']) assert alerts == [] - def test_alert_when_free_space_below_percent_threshold(self): - # Small filesystem: 1% threshold (smaller than 5TB cap) is 1 TB free required. + def test_alert_when_available_space_below_percent_threshold(self): + # Small filesystem: 1% threshold (smaller than 5TB cap) is 1 TB available required. total = 100 * TB - free = 0.5 * TB - with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, free)): + available = 0.5 * TB + with patch.object(dsa, 'get_disk_usage', return_value=(total, available)): alerts = dsa.get_low_disk_space_alerts(['/some/path']) assert len(alerts) == 1 assert alerts[0]['path'] == '/some/path' - assert alerts[0]['free_space(tb)'] == pytest.approx(0.5) + assert alerts[0]['available_space(tb)'] == pytest.approx(0.5) - def test_alert_when_free_space_below_absolute_cap(self): + def test_alert_when_available_space_below_absolute_cap(self): # Huge filesystem: 5TB cap applies (smaller than 1% of total). total = 10000 * TB - free = 4 * TB - with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, free)): + available = 4 * TB + with patch.object(dsa, 'get_disk_usage', return_value=(total, available)): alerts = dsa.get_low_disk_space_alerts(['/some/path']) assert len(alerts) == 1 def test_no_alert_exactly_at_threshold_boundary(self): - # free_bytes == threshold_bytes should NOT trigger (strict less-than). + # available_bytes == threshold_bytes should NOT trigger (strict less-than). total = 100 * TB threshold = dsa.get_free_space_threshold_bytes(total) - with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, threshold)): + with patch.object(dsa, 'get_disk_usage', return_value=(total, threshold)): alerts = dsa.get_low_disk_space_alerts(['/some/path']) assert alerts == [] def test_alert_just_below_threshold_boundary(self): total = 100 * TB threshold = dsa.get_free_space_threshold_bytes(total) - with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, threshold - 1)): + with patch.object(dsa, 'get_disk_usage', return_value=(total, threshold - 1)): alerts = dsa.get_low_disk_space_alerts(['/some/path']) assert len(alerts) == 1 - def test_zero_free_space(self): + def test_zero_available_space(self): total = 100 * TB - with patch.object(dsa.shutil, 'disk_usage', return_value=(total, 0, 0)): + with patch.object(dsa, 'get_disk_usage', return_value=(total, 0)): alerts = dsa.get_low_disk_space_alerts(['/some/path']) assert len(alerts) == 1 - assert alerts[0]['free_space(tb)'] == 0 - assert alerts[0]['free_space(%)'] == 0 + assert alerts[0]['available_space(tb)'] == 0 + assert alerts[0]['available_space(%)'] == 0 def test_missing_or_unmounted_path_is_flagged(self): - with patch.object(dsa.shutil, 'disk_usage', side_effect=OSError('No such file or directory')): + with patch.object(dsa, 'get_disk_usage', side_effect=OSError('No such file or directory')): alerts = dsa.get_low_disk_space_alerts(['/not/mounted']) assert len(alerts) == 1 assert alerts[0]['path'] == '/not/mounted' assert 'not found' in alerts[0]['alert_message'] or 'not mounted' in alerts[0]['alert_message'] def test_checks_all_configured_paths_independently(self): - def fake_disk_usage(path): + def fake_get_disk_usage(path): if path == '/low': - return (100 * TB, 0, 0) + return (100 * TB, 0) if path == '/missing': raise OSError('No such path') - return (100 * TB, 0, 99 * TB) + return (100 * TB, 99 * TB) - with patch.object(dsa.shutil, 'disk_usage', side_effect=fake_disk_usage): + with patch.object(dsa, 'get_disk_usage', side_effect=fake_get_disk_usage): alerts = dsa.get_low_disk_space_alerts(['/low', '/missing', '/plenty']) flagged_paths = {row['path'] for row in alerts} diff --git a/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py b/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py index 3881356f..feff36cd 100644 --- a/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py +++ b/u19_pipeline/alert_system/custom_alerts/disk_space_alert.py @@ -1,5 +1,5 @@ import datetime -import shutil +import os import time import u19_pipeline.lab as lab @@ -32,6 +32,26 @@ def get_free_space_threshold_bytes(total_bytes): return min(total_bytes * PERCENT_FREE_SPACE_THRESHOLD, MAX_FREE_SPACE_THRESHOLD_TB * BYTES_PER_TB) +def get_disk_usage(path): + """ + Space available to unprivileged users on the filesystem containing + `path`, matching what `df` reports (i.e. `f_bavail`, not the raw + `f_bfree`, which can include blocks reserved for root). + + Returns (total_bytes, available_bytes), where total_bytes is likewise + the denominator `df` uses: blocks in use plus blocks available to + users (excludes blocks reserved for root, which `os.statvfs().f_blocks` + would otherwise include). + """ + + vfs = os.statvfs(path) + available_bytes = vfs.f_bavail * vfs.f_frsize + used_bytes = (vfs.f_blocks - vfs.f_bfree) * vfs.f_frsize + total_bytes = used_bytes + available_bytes + + return total_bytes, available_bytes + + def get_low_disk_space_alerts(monitored_paths=MONITORED_PATHS): """ Check each path in `monitored_paths` and return a list of alert dicts @@ -41,7 +61,7 @@ def get_low_disk_space_alerts(monitored_paths=MONITORED_PATHS): alert_rows = [] for this_path in monitored_paths: try: - total_bytes, _, free_bytes = shutil.disk_usage(this_path) + total_bytes, available_bytes = get_disk_usage(this_path) except OSError: alert_rows.append({ 'alert_message': 'Could not check disk space (path not found or not mounted)', @@ -50,12 +70,12 @@ def get_low_disk_space_alerts(monitored_paths=MONITORED_PATHS): continue threshold_bytes = get_free_space_threshold_bytes(total_bytes) - if free_bytes < threshold_bytes: + if available_bytes < threshold_bytes: alert_rows.append({ 'alert_message': 'Low disk space', 'path': this_path, - 'free_space(tb)': round(free_bytes / BYTES_PER_TB, 2), - 'free_space(%)': round(100 * free_bytes / total_bytes, 2), + 'available_space(tb)': round(available_bytes / BYTES_PER_TB, 2), + 'available_space(%)': round(100 * available_bytes / total_bytes, 2), }) return alert_rows From b7bee3f933d12a847696901b17764420108bf6a4 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 15:03:36 -0400 Subject: [PATCH 08/30] feat: Python port of imaging-behavior sync, NWB export docs, and handoff plan Ports getSyncInfo.cpp + SyncImagingBehavior.m to Python (tifffile-based), verified against a real ScanImage session. Adds the sync mechanism write-up, the NWB imaging-export feasibility plan (issue #111), and the coordinator handoff document. Assisted-by: ClaudeCode:claude-fable-5 --- docs/HANDOFF_nwb_imaging_export.md | 157 + docs/imaging_behavior_sync.md | 324 ++ docs/nwb_imaging_export_plan.md | 42 + u19_pipeline/utils/imaging_behavior_sync.py | 484 +++ uv.lock | 3268 ++++++++++--------- 5 files changed, 2774 insertions(+), 1501 deletions(-) create mode 100644 docs/HANDOFF_nwb_imaging_export.md create mode 100644 docs/imaging_behavior_sync.md create mode 100644 docs/nwb_imaging_export_plan.md create mode 100644 u19_pipeline/utils/imaging_behavior_sync.py diff --git a/docs/HANDOFF_nwb_imaging_export.md b/docs/HANDOFF_nwb_imaging_export.md new file mode 100644 index 00000000..e28e4bc8 --- /dev/null +++ b/docs/HANDOFF_nwb_imaging_export.md @@ -0,0 +1,157 @@ +# Handoff: implement imaging NWB export (issue #111) + +Instructions for a fresh agent session — written to be self-contained. You are +the **coordinator** (Fable): do the cross-repo design work and merges yourself, +and delegate the well-scoped mechanical tasks to Sonnet subagents (Opus for +anything requiring deeper design judgment). Keep the checkbox files and the +GitHub issue updated as you go. + +## Mission + +Implement https://github.com/BrainCOGS/U19-pipeline-python/issues/111 — +wire imaging (with behavior-clock sync) into the NWB export handler, and write +`docs/nwb_export.md` documenting the export process. The feasibility verdict +is **Feasible with caveats, size M**; the analysis is done, don't redo it. + +## Read these first, in this order + +1. `docs/nwb_imaging_export_plan.md` — the checkbox tracker (Phase A done, + you own Phases B and C). **Update it and issue #111's checkboxes as you + complete tasks** (`gh issue edit 111 --body-file ...` or check boxes via + the web body). +2. `docs/imaging_behavior_sync.md` — how the I2C sync works end-to-end, the + verified NWB recipe, and the smoke-test numbers you must reproduce. +3. `~/.claude/plans/feasibility-nwb-imaging-wiring-2026-08-26.md` — every + touchpoint with `file:line`, constraints, and the spike definition. +4. Issue #111 itself (`gh issue view 111`) — the task list of record. + +## Where everything lives + +| What | Where | +|---|---| +| This repo (worktree) | `/home/chris/code/U19-pipeline-python/.claude/worktrees/imaging-behavior-sync-fb610a`, branch **`feat/nwb-imaging-export`** (off master). Do NOT `cd` to the main checkout. | +| Work you inherit (already committed on that branch) | `u19_pipeline/utils/imaging_behavior_sync.py` (the sync port), `docs/` (this handoff, `imaging_behavior_sync.md`, `nwb_imaging_export_plan.md`), `uv.lock`. | +| NWB export backend | branches `origin/feat/nwb-export-handler-completion` (tip, use this), `origin/fix/nwb-export-handler-schema`, `origin/nwb-export-backend`. Only 3 commits ahead of an ancestor 7 behind master — merging with master/our branch is cheap. | +| Converter | `~/code/tank-lab-to-nwb`, branch **`origin/building-nwb-converter`** (the one whose `TowersNWBConverter(source_data, sync_timestamps=)` signature matches the handler; local `main` is stale and broken). Use `git -C ~/code/tank-lab-to-nwb worktree add origin/building-nwb-converter` — don't switch that repo's checked-out branch. | +| NWB extension | `~/code/ndx-tank-metadata` (not on the critical path). | +| Reference-only repos | `~/code/U19-pipeline-matlab` (SyncImagingBehavior.m, getSyncInfo.cpp), `~/code/ViRMEn` (nidaqI2C.cpp, updateDAQSyncSignals.m). | +| Sample data | `~/neuro-data/`: `ef932_act131_08072026_00001_00001.tif` (2000 pages, 5-slice fastZ → 400 volumes, 50.2 Hz) + the `Session_..._ef932_act131_20260807_1.mat` behavior log. | + +## Environment + +```bash +cd /home/chris/code/U19-pipeline-python/.claude/worktrees/imaging-behavior-sync-fb610a +uv sync # venv with datajoint/scipy/tifffile; pyproject "exclude-newer" TOML warnings are benign — ignore +``` + +- NWB stack is NOT in the project deps. For scratch experiments: + `uv run --no-project --with neuroconv --with roiextractors --with tifffile --with scipy python ...` + (verified working: neuroconv 0.10.0, roiextractors 0.9.0, pynwb 4.1.0). +- For the integration itself, install the converter editable into the venv: + `uv pip install -e ` (its deps pull neuroconv). +- `import u19_pipeline` requires datajoint (package `__init__`); to use the + sync module without the venv, load it by path with `importlib` (see the + smoke-test snippet in `docs/imaging_behavior_sync.md`). +- Sanity command that must keep working: + +```bash +uv run python -m u19_pipeline.utils.imaging_behavior_sync ~/neuro-data/ef932_act131_08072026_00001_00001.tif --behavior-mat ~/neuro-data/Session_z_LSTT_Active_TrialStructure_World_Recording_EF_182-Imaging-Rig1_efonseca_ef932_act131_20260807_1.mat +``` + +Expected: trials at frames 644–1176 / 1177–1690 / 1691–2000; fit slope +≈1.000027891, residual ≈10.4 ms. + +## Step 0 — done for you + +The sync port and docs are already committed on `feat/nwb-imaging-export` +(this worktree's checked-out branch). Verify with `git log --oneline -3`. + +## Step 1 — merge in the export backend + +```bash +git merge origin/feat/nwb-export-handler-completion # resolve; divergence is small +``` + +## Step 2 — the spike (do this before any real wiring) + +Goal: prove `TowersNWBConverter` (building-nwb-converter) + our timestamps + +`ScanImageImagingInterface` coexist in one env. Half a day, coordinator does +this personally (it's the decision point). + +1. Worktree + install tank-lab-to-nwb as above. +2. Hack `u19_pipeline/nwb_export/conversion.py:build_source_data` to add a + ScanImage entry for the sample TIFF; compute timestamps with + `sync_imaging_behavior` + `frame_times_on_behavior_clock`; remember the + file is volumetric — the interface exposes 400 volumes, so pass + `timestamps[::5][:400]`. +3. Run the conversion (stub-sized write is fine). + +**Pass:** NWB file has VirmenData behavior + TwoPhotonSeries, trial 1 +(start 1.757 s) has its first imaging frame at ≈1.77 s. +**Fail:** version conflict or the converter can't take per-interface +timestamps → report findings on issue #111 before proceeding; the fix then +happens in tank-lab-to-nwb first. + +## Step 3 — implementation (delegate the parallel pieces) + +Suggested split — spawn Sonnet subagents for A/B/C (each is well-scoped and +independent after the spike); keep D and the merge/decision work yourself: + +- **A (Sonnet):** `u19_pipeline/nwb_production_utils.py` — + rewrite `validate_imaging_data_exists` (`:236-262`; it references + `imaging_element.Scan`/`FieldOfView` which don't exist — `imaging_element` + is `element_calcium_imaging.imaging_preprocess` per + `u19_pipeline/imaging_pipeline.py:15-16`; validate via + `imaging_pipeline.TiffSplit`/`TiffSplit.File` restricted through + `recording_ids_for_session`, `:12-35`), and fix `estimate_imaging_size_gb` + (`:82-98`, 0.05 GB/FOV is >10× off — the sample is 0.62 GB for 2000 frames). +- **B (Sonnet):** tests mirroring the branch's existing handler test suite + for the new imaging paths (validation, path resolution, conversion source + data). +- **C (Sonnet):** draft `docs/nwb_export.md` — pipeline stages, modality + wiring recipe (use `docs/imaging_behavior_sync.md` §5 as the imaging + source of truth), dependency/pinning story for tank-lab-to-nwb. +- **D (coordinator, or Opus):** the cross-repo contract — + 1. tank-lab-to-nwb `towersnwbconverter.py`: add `ScanImageImagingInterface` + (fix the `"TiffImagaging"` typo key) and per-interface aligned + timestamps in `temporally_align_data_interfaces` (currently applies ONE + `sync_timestamps` array to every interface — wrong for imaging, whose + timestamp count differs from behavior's). + 2. `u19_pipeline/nwb_export/conversion.py`: TIFF path resolution + (`TiffSplit.tiff_split_directory` under `dj.config` ImagingRootDataDir) + + imaging in `build_source_data` + imaging timestamps into the + converter call. + 3. `nwb_export_handler.py:247-257`: replace the fail-loud imaging branch. + 4. **Decide and write down the clock convention** (imaging-only sessions → + ViRMEn clock; rule for mixed ephys+imaging) — this hardens at first + DANDI upload, so it goes in `docs/nwb_export.md` and on issue #111 for + sign-off before any production upload. + +## Step 4 — end-to-end + wrap-up + +- Run the handler path (or `scripts/run_nwb_export.py`) against the sample + session; verify the acceptance numbers. +- Tick boxes in `docs/nwb_imaging_export_plan.md` and issue #111. +- PRs: one against `U19-pipeline-python` (targeting the NWB branch line or + master per the user's call — ask), one against `tank-lab-to-nwb` + (`building-nwb-converter`). Confirm with the user before pushing/opening. + +## Gotchas (learned the hard way — don't rediscover) + +- `u19_pipeline/utils/tiff_matlab_imaging_utils.py` has an I2C parse using + `ast.literal_eval` on MATLAB brace syntax — it silently always fails. Don't + reuse it; the working parser is `imaging_behavior_sync.parse_scanimage_sync`. +- The sync port keeps MATLAB quirks on purpose (1-based frame indices, + iteration spans offset by +1, first-I2C-packet-per-frame). They match the + production DataJoint table — do not "fix" them. +- Behavior logs load with `scipy.io.loadmat(..., squeeze_me=True, + struct_as_record=False)`; length-1 struct arrays collapse to scalars + (helper `_as_list` in the sync module handles it). The raw log has no + block-level `trialType` — count trials with `np.size(block.trial)`. +- ScanImage BigTIFF: use `tifffile` page `description` strings; never parse + the file byte-wise. `I2CData` bytes are little-endian uint16 triples + `[block, trial, iteration]`; frames can have 0, 1, or 2 packets. +- Shared git stash across worktrees: never bare `git stash` — use a WIP + commit instead. +- A memory file for future sessions exists at + `~/.claude/projects/-home-chris-code-U19-pipeline-python/memory/imaging-behavior-sync-mechanism.md`. diff --git a/docs/imaging_behavior_sync.md b/docs/imaging_behavior_sync.md new file mode 100644 index 00000000..9b5968cb --- /dev/null +++ b/docs/imaging_behavior_sync.md @@ -0,0 +1,324 @@ +# How two-photon imaging is synchronized with ViRMEn behavior + +*Verified 2026-08-26 against `U19-pipeline-python`, `U19-pipeline-matlab`, and `ViRMEn` +source, and against a real recording (`ef932_act131_08072026_00001_00001.tif` + +its behavior log).* + +## TL;DR + +There is **no shared hardware clock and no TTL-edge alignment** for 2p imaging. +Instead, ViRMEn sends the current `[block, trial, iteration]` numbers to the +ScanImage computer **on every ViRMEn display iteration**, over an I2C-style +serial link bit-banged on two NI-DAQ digital lines. ScanImage stamps each +received packet into the TIFF header of the microscope frame being acquired at +that moment. Synchronization is therefore **content-based**: every imaging +frame carries the behavioral coordinate that was active when it was acquired, +and the offline sync step just decodes those headers, cleans them up, and +stores per-frame vectors in the `u19_imaging_pipeline.SyncImagingBehavior` +DataJoint table. + +``` +ViRMEn PC (behavior rig) ScanImage PC (microscope) +──────────────────────── ───────────────────────── +runtimeCodeFun (every iteration) + logger.logTick() → [block, trial, iter] + updateDAQSyncSignals(data) + └─ nidaqI2C('send', data) ── 2 DO lines ──▶ ScanImage I2C input + (CLK + DTA, I2C protocol, └─ appends packet to the + 6 bytes = 3 × uint16 LE) ImageDescription tag of + the current TIFF frame + "I2CData = {{t,[b0..b5]}}" + + OFFLINE (nightly populate_tables.m, MATLAB) + ──────────────────────────────────────────── + imaging_pipeline.SyncImagingBehavior.makeTuples + ├─ getSyncInfo MEX (C++/libtiff): parse every frame's header + ├─ + behavior .mat log ("log.block") + └─ → per-frame block/trial/iteration vectors + frame-span tables + stored in u19_imaging_pipeline.SyncImagingBehavior +``` + +## 1. The sending side (ViRMEn repo) + +Every ViRMEn experiment's runtime function ends each iteration with +(e.g. `ViRMEn/experiments/LSTT_Stationary_TrialStructure_EF.m:738-743`): + +```matlab +loggingIndices = vr.logger.logTick(vr, vr.sensorData, vr.isLick, true); +if RigParameters.hasDAQ + updateDAQSyncSignals(vr.iterFcn(loggingIndices)); +end +``` + +- `ExperimentLog.logTick()` (`ViRMEn/experiments/classes/ExperimentLog.m:513-581`) + logs position/velocity/etc. for the current iteration and returns exactly + `[numel(obj.block), obj.writeIndex, obj.currentIt]` = **[block #, trial #, + iteration #]**, all 1-based. `[0 0 0]` before the first trial starts. +- `vr.iterFcn` comes from `smallestUIntStorage(maxTrialDuration/minIterationDT)` + — in practice a cast to **uint16** (that is why the reader decodes uint16). +- `updateDAQSyncSignals` (`ViRMEn/experiments/common/updateDAQSyncSignals.m`) + sends only when trial ≠ 0 and iteration ≠ 0. For imaging rigs + (`RigParameters.hasSyncComm == true`) it calls + `nidaqI2C('send', data, true, false)` — the other branches (`nidaqSync`, + `SyncPulses`, …) are the parallel-port / TTL schemes used by ephys and + widefield rigs, not by 2p. +- `nidaqI2C` (`ViRMEn/experiments/daq/nidaqI2C.cpp`, a MEX compiled per rig; + initialized in `initializeDAQ.m` with + `nidaqI2C('init', nidaqDevice, nidaqPort, syncClockChannel, syncDataChannel)`) + bit-bangs a full I2C write transaction — start condition, 7-bit slave + address 0, write bit, ACK slots, then the payload bytes MSB-first — on two + digital output lines clocked at 1 MHz from a hardware counter. The payload + is the 3 uint16 values = **6 bytes, little-endian**. Transmission runs in a + background thread so it never blocks the render loop. + +ScanImage's standard **I2C sync feature** receives this on its dedicated +input and appends each packet, with its own frame-clock timestamp, to the +`ImageDescription` TIFF tag of the frame being scanned when the packet +arrived. + +## 2. What lands in the TIFF header (verified on real data) + +Each TIFF page (= microscope frame) description contains, among others: + +``` +frameNumbers = 1001 +acquisitionNumbers = 1 +frameTimestamps_sec = 19.918480740 ← imaging frame clock (s) +epoch = [2026 8 7 12 3 13.109] ← wall-clock datevec of clock zero +I2CData = {{19.925094135, [1,0,1,0,83,2]} } ← {i2c_timestamp, [6 bytes]} +``` + +`[1,0,1,0,83,2]` decodes (3 × uint16 LE) to **block 1, trial 1, iteration 595**. + +Real-file facts that the sync logic must (and does) handle: + +- Frames acquired before the first trial have `I2CData = {}` (in the sample + file: the first 643 of 2000 frames, ≈12.8 s of pre-behavior imaging). +- ViRMEn iterations (~50–120 Hz) and frames (50.2 Hz here) are + incommensurate: most frames carry one packet, some carry **two**, some + carry **none** even mid-session. +- Iteration is non-decreasing within a trial and resets to 1 at each trial + transition; trial transitions in the header match the behavior log. + +## 3. The reading side (U19-pipeline-matlab repo) + +`imaging_pipeline.SyncImagingBehavior` (a `dj.Computed`, +`schemas/+imaging_pipeline/SyncImagingBehavior.m`; near-identical legacy +variants exist in `+imaging/` and `+meso/`) does, per FOV (`TiffSplit`): + +1. **Load behavior**: the session's `.mat` log (path from + `acquisition.SessionStarted.new_remote_path_behavior_file`), take + `log.block`, run `fixLogs` to backfill missing trialType/choice. +2. **Parse every TIFF** of the FOV in `file_number` order with + `getSyncInfo(file, 'uint16')` — a **compiled C++ MEX** + (`utils/imagingSync/getSyncInfo.cpp`, ~270 lines, libtiff). Its `.m` file + is only a doc stub; the runtime uses `getSyncInfo.mexa64/w64/maci64`. It + returns per file: acquisition number, `epoch`, `frameTimestamps_sec` per + frame, the **first** I2C packet's timestamp per frame (NaN if none), and + the decoded `[block; trial; iteration]` matrix (zeros where no packet). +3. **Stitch files**: express all times relative to the first file's `epoch` + (`etime` offsets); build per-file frame numbers (`sync_im_frame`) and a + global frame counter that resets when the acquisition number increments + (`sync_im_frame_global`). +4. **Forward-fill gaps**: interior runs of frames with no packet inherit the + values of the last frame that had one (leading/trailing runs stay 0 — + they are genuinely outside behavior). Warn if a gap exceeds 2 s + (`cfg.minBehaviorSecs`). +5. **Sanity checks / hacks**: `block==0 ⇔ trial==0`; a trial index equal to + `numTrials+1` for a block is a forcibly-terminated trial absent from the + log → its frames are zeroed; larger overshoots are errors. Behavior block + wall-clock start times (`block.start`) are cross-checked against the + imaging wall clock of each block's first frame (`binarySearch` with + tolerance, plus a relative-positioning step to absorb clock drift between + the two computers — the wall clocks are *only* used for this sanity check, + never for the frame assignment itself). +6. **Spans**: with `SplitVec` (runs of equal values), compute first/last + frame per behavior block, per trial, and per iteration (iterations that + fell between frames inherit the previous iteration's span). +7. **Insert** into `u19_imaging_pipeline.SyncImagingBehavior`: + +| field | content | +|---|---| +| `sync_im_frame` | frame # within its TIFF file (1-based) | +| `sync_im_frame_global` | global frame # in the scan | +| `sync_behav_block_by_im_frame` | behavior block per frame (0 = none) | +| `sync_behav_trial_by_im_frame` | behavior trial per frame | +| `sync_behav_iter_by_im_frame` | behavior iteration per frame | +| `sync_im_frame_span_by_behav_block` | [first, last] frame per block | +| `sync_im_frame_span_by_behav_trial` | [first, last] frame per trial | +| `sync_im_frame_span_by_behav_iter` | per-trial (nIter × 2) frame spans | + +*(Quirk, kept for compatibility: the stored iteration spans are offset by ++1 relative to the trial/block span convention — MATLAB adds `span(1)` +instead of `span(1)-1` when flattening.)* + +### Who runs it + +- The Python automation (`u19_pipeline/automatic_job/recording_handler.py`) + populates `ImagingPipelineSession` / `AcquiredTiff`; the legacy path shells + out to MATLAB via `automatic_job/ingest_scaninfo_shell.sh` → + `scripts/populate_Imaging_AcquiredTiff.m` (TIFF splitting / ScanInfo). +- `SyncImagingBehavior` itself is populated by the **nightly MATLAB cron** + `scripts/populate_tables.m` (same script that populates the pupillometry + and posture sync tables): `populate(imaging_pipeline.SyncImagingBehavior)`. +- The Python repo declares the table (`u19_pipeline/meso.py:85`, + `imaging_pipeline.py`) but its `make` lives only in MATLAB. + +### Readable vs. compiled ("encoded") code — verified inventory + +| piece | runtime form | source available? | +|---|---|---| +| `SyncImagingBehavior.m` (×3 variants) | plain MATLAB | yes — fully readable | +| `getSyncInfo` | compiled MEX (ELF, links libtiff) | yes — `getSyncInfo.cpp`; the `.m` is a doc-only stub | +| `binarySearch` | compiled MEX | yes — `binarySearch.c` (3rd-party, Avi Ziskind); `.m` is a doc stub | +| `SplitVec.m` | plain MATLAB | yes (copies in both repos) | +| `nidaqI2C` | MEX built on the rig (no binary in repo) | yes — `nidaqI2C.cpp` | +| true p-code | only `connect_tech.p`, `cprintf.p` etc. | unrelated to sync | + +So nothing in the sync path is irrecoverably encoded; the "different beast" +parts are ordinary C/C++ MEX files whose sources are checked in. +`~/neuro-data` contains no `.m` files — just the TIFF and the behavior log. + +## 4. Python port (new in this repo) + +[`u19_pipeline/utils/imaging_behavior_sync.py`](../u19_pipeline/utils/imaging_behavior_sync.py) +reimplements the whole offline chain without MATLAB: + +- `parse_scanimage_sync(tif)` — port of `getSyncInfo.cpp` using **tifffile** + (no byte-level TIFF parsing; per-page `description` + regex, first packet + per frame, uint16-LE decode). +- `sync_imaging_behavior(tif_files, log)` — port of + `SyncImagingBehavior.makeTuples` (stitching, forward-fill, aborted-trial + hack, spans). Returns a dict with the exact DataJoint field names and + 1-based conventions. The wall-clock drift-correction step is simplified to + an ordering check (it was only ever a sanity check). +- `frame_times_on_behavior_clock(sync, log)` — **new**: maps every frame's + I2C-tagged iteration to its behavior time (`trial.start + + trial.time[iter-1]`) and fits a linear clock mapping, yielding a timestamp + for *all* frames (including un-synced lead-in) on the ViRMEn clock — this + is the "clock vector" needed for NWB. + +Verified on the sample session (2000 frames, 3 trials imaged): + +``` +$ uv run python -m u19_pipeline.utils.imaging_behavior_sync \ + ~/neuro-data/ef932_act131_08072026_00001_00001.tif \ + --behavior-mat ~/neuro-data/Session_..._ef932_act131_20260807_1.mat +1 file(s), 2000 frames +frames with behavior info: 1357 (67.8%) + block 1: trials 1-3, frames 644-2000 + trial 1 frame span: [644, 1176] + trial 2 frame span: [1177, 1690] + trial 3 frame span: [1691, 2000] +behavior-clock fit: slope=1.000027891, offset=-11.028s, residual std=10.4 ms +``` + +Frame spans match an independent raw-header decode exactly; the fitted slope +(≈28 ppm) is the real clock drift between the two computers, and the 10 ms +residual is the expected sub-frame jitter (iterations arrive faster than +frames and only the first packet per frame is kept). + +## 5. Building an NWB file from this + +**Ecosystem note**: *spikeinterface* is for extracellular ephys and has no +role here. For imaging the relevant NWB stack is **roiextractors** (raw +imaging extractors) + **neuroconv** (interfaces, metadata, temporal +alignment) + **pynwb** (trials, behavior). Checked against neuroconv 0.10.0 / +roiextractors 0.9.0 / pynwb 4.1.0: + +- `neuroconv.datainterfaces.ScanImageImagingInterface` reads modern ScanImage + TIFFs (BigTIFF, multi-file, volumetric — `tif.is_scanimage` is True for our + files) into a `TwoPhotonSeries`. +- Every neuroconv interface inherits the temporal-alignment API: + `get_original_timestamps()`, `set_aligned_timestamps()`, + `set_aligned_starting_time()`, `align_by_interpolation()`. +- `Suite2pSegmentationInterface` covers the processed side (ROIs, dF/F) if + suite2p output is added later. + +### Recipe + +The header gives us everything needed to put imaging and behavior on one +clock — that is exactly what `frame_times_on_behavior_clock` computes: + +```python +from u19_pipeline.utils.imaging_behavior_sync import ( + sync_imaging_behavior, load_behavior_log, frame_times_on_behavior_clock) +from neuroconv.datainterfaces import ScanImageImagingInterface +from pynwb import TimeSeries + +log = load_behavior_log(behavior_mat) +sync = sync_imaging_behavior(tif_files, log) +timestamps, slope, offset, res = frame_times_on_behavior_clock(sync, log) + +interface = ScanImageImagingInterface(file_path=tif_files[0]) +interface.set_aligned_timestamps(timestamps) # imaging now on ViRMEn clock +nwbfile = interface.create_nwbfile(metadata=...) # TwoPhotonSeries w/ timestamps + +# trials table straight from the spans / behavior log +for i, tr in enumerate(log.block.trial): + nwbfile.add_trial(start_time=tr.start, stop_time=tr.start + tr.duration) + # + columns: trialType, choice, cuePos, ... and the imaging frame span + # from sync['sync_im_frame_span_by_behav_trial'][i] + +# per-iteration behavior (position, velocity) as TimeSeries on the same clock +# t = tr.start + tr.time; data = tr.position / tr.velocity + +# per-frame sync vectors as auxiliary TimeSeries so the mapping survives: +# sync['sync_behav_{block,trial,iter}_by_im_frame'] with the frame timestamps +``` + +Choices worth noting: + +- **Clock choice**: use the ViRMEn session clock as the NWB timebase (trials + and behavior arrays are already in it; `session_start_time` = + `log.initialTimestamp`). Imaging gets explicit per-frame `timestamps` + instead of a start+rate pair — this also absorbs the measured 28 ppm drift. +- **Sub-frame accuracy**: the linear fit is good to ~10 ms (≈ half a frame at + 50 Hz). If per-iteration precision is ever needed, the I2C packet + timestamps (`sync_time`) pin individual iterations to the imaging clock at + millisecond level. +- **Multi-file / volumetric sessions**: pass all split TIFFs in order; + `ScanImageImagingInterface` accepts `file_paths=[...]` and `plane_index` + for the 5-slice fastZ stacks, and the sync vectors are per *frame* (page), + so slice handling only affects how timestamps are subset. +- The `u19_pipeline/utils/matlab_utils.py` helpers (by Ben Dichter/Cody + Baker) already convert the loaded `log` structs to dicts, so the behavior + side of a full `NWBConverter` can reuse them. + +### Smoke test (ran on the sample session) + +The recipe above was executed for real against the sample data (neuroconv +0.10.0): `ScanImageImagingInterface` opened the 620 MB BigTIFF and, because +of the 5-slice fastZ stack, exposed it as a **volumetric** series of **400 +volumes** (2000 pages / 5 slices), with `get_original_timestamps()` returning +400 volume timestamps. Aligning with `set_aligned_timestamps(ts[::5][:400])` +(one behavior-clock timestamp per volume, from +`frame_times_on_behavior_clock`) and building the file produced: + +``` +nwbfile: 2026-08-07 12:03:17.783000-04:00 | trials: 179 | acq: ['TwoPhotonSeries'] +TwoPhotonSeries n timestamps: 400 | t[0]=-11.028 t[-1]=28.710 (behavior clock s) +trial 1 row: {'start_time': 1.757, 'stop_time': 12.400, + 'first_im_frame': 644, 'last_im_frame': 1176} +``` + +Cross-check: trial 1 starts at 1.757 s on the behavior clock, and its first +imaging frame (page 644) maps to ≈1.77 s — the two data streams agree to +within the expected sub-frame jitter. Negative timestamps are the ~11 s of +imaging acquired before ViRMEn behavior started (frames with `I2CData = {}`). + +### Relationship to the existing NWB export branches + +This repo already has an NWB export backend on the remote branches +`nwb-export-backend`, `fix/nwb-export-handler-schema` and +`feat/nwb-export-handler-completion` (~8.4k lines: `u19_pipeline/nwb_export/` +state machine, readiness checks, output validation, DANDI upload client, and +the `automatic_job/nwb_export_handler.py` cronjob). Its modality registry +declares `imaging-raw` / `imaging-processed`, **but imaging conversion is not +wired yet** — the handler raises +*"could not resolve imaging Scan … imaging export not yet wired"* (TODO at +`nwb_export_handler.py:247-254` on that branch). The sync module and recipe +in this document are the missing ingredient for that TODO: resolve the scan's +TIFFs, run `sync_imaging_behavior` + `frame_times_on_behavior_clock` (or +fetch the stored vectors from `u19_imaging_pipeline.SyncImagingBehavior`), +and hand the aligned timestamps to `ScanImageImagingInterface`. diff --git a/docs/nwb_imaging_export_plan.md b/docs/nwb_imaging_export_plan.md new file mode 100644 index 00000000..6c1ac92e --- /dev/null +++ b/docs/nwb_imaging_export_plan.md @@ -0,0 +1,42 @@ +# Plan: wire imaging into the NWB export handler + +Goal: an `imaging-raw` NWB export job runs through `nwb_export_handler`'s +validation → conversion flow and produces an NWB file whose `TwoPhotonSeries` +is aligned to the ViRMEn behavior clock via +`u19_pipeline/utils/imaging_behavior_sync.py`, instead of raising +"imaging export not yet wired". Plus forward-looking documentation of the +export process. + +## Phase A — Feasibility survey (read-only, in progress) + +- [x] Understand sync mechanism end-to-end (see `docs/imaging_behavior_sync.md`) +- [x] Python port of MATLAB sync (`u19_pipeline/utils/imaging_behavior_sync.py`), verified on sample data +- [x] Locate NWB branches: `origin/nwb-export-backend`, `origin/fix/nwb-export-handler-schema`, `origin/feat/nwb-export-handler-completion` (3 commits ahead of an ancestor 7 behind master) +- [x] Read export handler stages (`automatic_job/nwb_export_handler.py`): QUEUED→DATA_VALIDATION→PROCESSING→VALIDATION→UPLOAD→COMPLETED; imaging fails loud in `process_data_validation` +- [x] Read shared conversion path (`u19_pipeline/nwb_export/conversion.py`): `build_source_data` (behavior+ephys only) → `TowersNWBConverter` from external `tank_lab_to_nwb` +- [x] Find imaging stubs: `nwb_production_utils.validate_imaging_data_exists` exists but references `imaging_element.Scan` / `FieldOfView` which don't exist under those names (imaging_element = element_calcium_imaging.imaging_preprocess) +- [x] Confirm `recording_ids_for_session` helper exists for session→recording resolution +- [x] Locate local checkouts: `~/code/tank-lab-to-nwb`, `~/code/ndx-tank-metadata` +- [x] Survey `tank-lab-to-nwb`: live work is on `origin/building-nwb-converter` (modern neuroconv, `sync_timestamps` param, KilosortWithProbeInterface, PyNWB 3/HDMF 4); local `main` is stale and its `__init__` is broken (`se` used but not imported). Converter already declares `Suite2pSegmentation` + `TiffImagaging` (sic, generic TiffImagingInterface — wrong one for ScanImage volumetric BigTIFF) and applies ONE sync_timestamps array to all interfaces +- [x] Survey `ndx-tank-metadata`: rig/task metadata extension; `origin/001-nwb-export-handler` branch = spec-kit/test tooling only, no blocker +- [x] Check all local/remote branches of both repos for newer work (`building-nwb-converter` and `001-nwb-export-handler` are the relevant ones) +- [x] Determine tiff path resolution route: session → `recording_ids_for_session` (recording.Recording.BehaviorSession) → `imaging_pipeline.TiffSplit`/`TiffSplitFile` under `ImagingRootDataDir`; existing `validate_imaging_data_exists` stub references nonexistent `imaging_element.Scan`/`FieldOfView` and must be fixed +- [x] Write feasibility report (`~/.claude/plans/feasibility-nwb-imaging-wiring-2026-08-26.md`): **Feasible with caveats, size M** — no hard blockers; caveats are two-repo lockstep (tank-lab-to-nwb is path-installed, unpinned) and the imaging clock convention, which becomes sticky at first DANDI upload + +Tracking issue: https://github.com/BrainCOGS/U19-pipeline-python/issues/111 + +## Phase B — Implementation (after feasibility verdict + user go-ahead) + +- [ ] Rebase/merge strategy: bring `feat/nwb-export-handler-completion` and our sync branch together +- [ ] `validate_imaging_data_exists`: fix table references; resolve session→recording→TiffSplit +- [ ] `resolve_input_paths` / `build_source_data`: add imaging tiff paths + behavior file +- [ ] Converter: add ScanImage imaging interface with behavior-clock timestamps (subclass or extend TowersNWBConverter) +- [ ] Handler `process_data_validation` imaging branch: replace fail-loud TODO +- [ ] Size estimation: `estimate_imaging_size_gb` with real numbers (raw frames ≫ 0.05 GB/FOV) +- [ ] Tests (mirror existing handler tests) +- [ ] End-to-end run on the `~/neuro-data` sample session + +## Phase C — Documentation + +- [ ] `docs/nwb_export.md`: how imaging export works and how to add future modalities +- [ ] Update `docs/imaging_behavior_sync.md` cross-references diff --git a/u19_pipeline/utils/imaging_behavior_sync.py b/u19_pipeline/utils/imaging_behavior_sync.py new file mode 100644 index 00000000..0640fe3e --- /dev/null +++ b/u19_pipeline/utils/imaging_behavior_sync.py @@ -0,0 +1,484 @@ +"""Python port of the MATLAB imaging<->behavior synchronization. + +This reimplements, with tifffile instead of a libtiff MEX, the pipeline that +has been used since ~2018 to attach ViRMEn behavior coordinates to every +two-photon / mesoscope frame: + +* ``getSyncInfo`` (U19-pipeline-matlab/utils/imagingSync/getSyncInfo.cpp): + parses each ScanImage TIFF frame's ImageDescription tag and extracts + ``acquisitionNumbers``, ``epoch``, ``frameTimestamps_sec`` and the first + ``I2CData`` packet -> ported here as :func:`parse_scanimage_sync`. + +* ``imaging_pipeline.SyncImagingBehavior.makeTuples`` + (U19-pipeline-matlab/schemas/+imaging_pipeline/SyncImagingBehavior.m): + stitches the per-file sync streams together, forward-fills frames that + received no I2C packet, sanity-checks against the behavior log and builds + the per-frame block/trial/iteration vectors and the frame-span tables + stored in ``u19_imaging_pipeline.SyncImagingBehavior`` + -> ported here as :func:`sync_imaging_behavior`. + +The I2C payload is produced on the ViRMEn side by +``updateDAQSyncSignals([block, trial, iteration])`` (ViRMEn/experiments/ +common/updateDAQSyncSignals.m), which bit-bangs the three values over two +NI-DAQ digital lines (ViRMEn/experiments/daq/nidaqI2C.cpp). ScanImage +receives them on its I2C input and stamps each packet into the header of the +frame being acquired when it arrived. Each value is a little-endian uint16, +so a packet is 6 bytes: ``[block, trial, iteration]``. + +Output field names and index conventions (1-based frame indices, and the +iteration-span offset quirk) intentionally match the MATLAB code so results +are directly comparable with existing database entries. +""" + +import re +import warnings +from dataclasses import dataclass, field +from datetime import datetime +from pathlib import Path + +import numpy as np + +I2C_DTYPE = np.dtype(' current_acquis: + current_acquis = info.acquisition + total_frames = 0 + elif info.acquisition < current_acquis: + raise ValueError('Encountered decreasing acquisition number while ' + 'processing supposedly sorted files.') + + frames = np.arange(1, info.num_frames + 1) + sync_frame.append(frames) + sync_global.append(total_frames + frames) + total_frames += info.num_frames + + files.append(info) + + sync_frame = np.concatenate(sync_frame) + sync_global = np.concatenate(sync_global) + frame_time = np.concatenate([f.frame_time for f in files]) + sync_time = np.concatenate([f.sync_time for f in files]) + sync_block = np.concatenate([f.block for f in files]) + sync_trial = np.concatenate([f.trial for f in files]) + sync_iter = np.concatenate([f.iteration for f in files]) + + if np.any(np.diff(frame_time) <= 0): + raise ValueError('Frame times are not in strictly ascending order. ' + 'Are the file timestamps correct?') + + # ---- Patch frames with no sync info (forward-fill), omitting the + # ambiguous no-data stretches at the very beginning and end of the session + no_sync_val, brackets = split_vec(np.isnan(sync_time).astype(int)) + interior = ((no_sync_val == 1) + & (brackets[:, 0] > 0) + & (brackets[:, 1] < frame_time.size - 1)) + i1, i2 = brackets[interior, 0], brackets[interior, 1] + + delta_time = frame_time[i2 + 1] - frame_time[i1] + poor = delta_time > min_behavior_secs + if np.any(poor): + warnings.warn('long lags encountered between synching timestamps: ' + f'{delta_time[poor]}') + + for a, b in zip(i1, i2): + sync_block[a:b + 1] = sync_block[a - 1] + sync_trial[a:b + 1] = sync_trial[a - 1] + sync_iter[a:b + 1] = sync_iter[a - 1] + + if np.any((sync_block == 0) != (sync_trial == 0)): + raise ValueError('Incompatible presence of block/trial synchronization info.') + + # ---- HACK (from MATLAB): forcibly terminated trials appear in the sync + # stream but not in the behavior log; erase them + if blocks is not None: + img_block, blk_brackets = split_vec(sync_block) + for j_block, (a, b) in zip(img_block, blk_brackets): + if j_block < 1: + continue + n_trials = np.size(blocks[j_block - 1].trial) + max_trial = sync_trial[a:b + 1].max() + if max_trial == n_trials + 1: + warnings.warn( + f'Nonexistent trial {max_trial} recorded in imaging data for ' + f'behavioral block {j_block} ({n_trials} trials); ' + 'will assume that it was aborted.') + erase = np.flatnonzero(sync_trial[a:b + 1] == max_trial) + a + sync_block[erase] = 0 + sync_trial[erase] = 0 + sync_iter[erase] = 0 + elif max_trial > n_trials: + raise ValueError( + f'Trial {max_trial} recorded in imaging data for behavioral ' + f'block {j_block} which only has {n_trials} trials.') + + # ---- Wall-clock sanity check: behavior block start times should line + # up (in order) with the imaging wall-clock time of each block's first + # frame. (The MATLAB code additionally re-derives block indices with a + # tolerance-based binary search to absorb clock drift between the two + # computers; content-based matching makes that redundant here, so we + # only verify ordering.) + img_block, blk_brackets = split_vec(sync_block) + has_img = img_block > 0 + if np.any(has_img): + img_first_time = frame_time[blk_brackets[has_img, 0]] + if np.any(np.diff(img_first_time) <= 0): + raise ValueError('Expected blocks recorded during imaging ' + 'to be non-decreasing.') + block_starts = [] + for blk in blocks: + y, mo, d, h, mi, s = np.asarray(blk.start, dtype=float) + block_starts.append(datetime(int(y), int(mo), int(d), int(h), + int(mi), int(s), + int(round((s % 1) * 1e6)))) + if sorted(block_starts) != block_starts: + raise ValueError('Behavioral block start times are not sorted.') + + # ---- Spans: first/last frame (1-based, over the concatenated frame axis) + # for each behavior block, trial and iteration + img_block, blk_brackets = split_vec(sync_block) + + n_blocks = len(blocks) if blocks is not None else int(sync_block.max()) + span_by_block = [np.zeros((0, 2), dtype=np.int64)] * n_blocks + span_by_trial = [] + span_by_iter = [] + + for i_block in range(1, n_blocks + 1): + run = np.flatnonzero(img_block == i_block) + if run.size == 0: + continue + a, b = blk_brackets[run[0]] + span_by_block[i_block - 1] = np.array([a + 1, b + 1]) # 1-based + + # trial runs within this block + trial_vals, trial_brackets = split_vec(sync_trial[a:b + 1]) + trial_brackets = trial_brackets + a # absolute 0-based + n_trials = (np.size(blocks[i_block - 1].trial) + if blocks is not None else int(trial_vals.max())) + trial_span = [np.zeros((0, 2), dtype=np.int64)] * n_trials + for t_val, (ta, tb) in zip(trial_vals, trial_brackets): + if t_val > 0: + trial_span[t_val - 1] = np.array([ta + 1, tb + 1]) # 1-based + + for i_trial in range(n_trials): + tspan = trial_span[i_trial] + if tspan.size == 0: + span_by_iter.append(np.zeros((0, 2), dtype=np.int64)) + continue + ta, tb = tspan[0] - 1, tspan[1] - 1 # back to 0-based + iter_vals, iter_brackets = split_vec(sync_iter[ta:tb + 1]) + n_iter = int(iter_vals.max()) + iteration = np.zeros((n_iter, 2), dtype=np.int64) + sel = iter_vals > 0 + iteration[iter_vals[sel] - 1] = iter_brackets[sel] + 1 # 1-based, rel. + + # iterations without info fall in the same frame as the previous one + no_info, nb = split_vec((iteration[:, 0] < 1).astype(int)) + for v, (na, nbend) in zip(no_info, nb): + if v == 1 and na > 0: + iteration[na:nbend + 1] = iteration[na - 1] + + # NOTE: MATLAB stores iteration spans as (run index within the + # trial) + (trial span start), i.e. one greater than the absolute + # 1-based frame index used by the trial/block spans. Kept as-is + # for compatibility with existing database entries. + span_by_iter.append(iteration + tspan[0]) + + span_by_trial.extend(trial_span) + + return { + 'sync_im_frame': sync_frame, + 'sync_im_frame_global': sync_global, + 'sync_behav_block_by_im_frame': sync_block, + 'sync_behav_trial_by_im_frame': sync_trial, + 'sync_behav_iter_by_im_frame': sync_iter, + 'sync_im_frame_span_by_behav_block': span_by_block, + 'sync_im_frame_span_by_behav_trial': span_by_trial, + 'sync_im_frame_span_by_behav_iter': span_by_iter, + 'files': files, + } + + +def frame_times_on_behavior_clock(sync, log): + """Per-frame timestamps on the ViRMEn behavior clock, for NWB alignment. + + For every imaging frame with sync info, the behavior time of its + (block, trial, iteration) is ``trial.start + trial.time[iteration - 1]`` + (seconds since ViRMEn session start). A least-squares linear fit of + behavior time against the imaging frame clock then yields timestamps for + *all* frames — including the leading/trailing stretches without I2C + packets — expressed on the behavior clock. + + Returns (timestamps, slope, offset, residual_std). + """ + blocks = _as_list(log.block) + frame_time = np.concatenate([f.frame_time for f in sync['files']]) + sync_time = np.concatenate([f.sync_time for f in sync['files']]) + + has_sync = ~np.isnan(sync_time) + behav_t = np.full(frame_time.size, np.nan) + for i in np.flatnonzero(has_sync): + blk = sync['sync_behav_block_by_im_frame'][i] + tri = sync['sync_behav_trial_by_im_frame'][i] + itr = sync['sync_behav_iter_by_im_frame'][i] + if blk < 1 or tri < 1 or itr < 1: + continue + trial = _as_list(blocks[blk - 1].trial)[tri - 1] + t = np.atleast_1d(trial.time) + if itr <= t.size: + behav_t[i] = trial.start + t[itr - 1] + + valid = ~np.isnan(behav_t) + if valid.sum() < 2: + raise ValueError('Not enough synchronized frames to fit a clock mapping.') + # the I2C packet timestamp marks when the iteration happened on the + # imaging clock; frames between packets interpolate linearly + slope, offset = np.polyfit(sync_time[valid], behav_t[valid], 1) + residuals = behav_t[valid] - (slope * sync_time[valid] + offset) + return slope * frame_time + offset, slope, offset, float(np.std(residuals)) + + +def _main(argv=None): + import argparse + + parser = argparse.ArgumentParser( + description='Synchronize ScanImage TIFF(s) with a ViRMEn behavior log.') + parser.add_argument('tif_files', nargs='+', help='TIFF files in acquisition order') + parser.add_argument('--behavior-mat', help='ViRMEn behavior .mat file') + args = parser.parse_args(argv) + + log = load_behavior_log(args.behavior_mat) if args.behavior_mat else None + sync = sync_imaging_behavior(args.tif_files, log) + if sync is None: + return + + n = sync['sync_im_frame'].size + blk = sync['sync_behav_block_by_im_frame'] + tri = sync['sync_behav_trial_by_im_frame'] + itr = sync['sync_behav_iter_by_im_frame'] + print(f'{len(sync["files"])} file(s), {n} frames') + print(f'frames with behavior info: {np.count_nonzero(blk > 0)} ' + f'({100 * np.count_nonzero(blk > 0) / n:.1f}%)') + for b in np.unique(blk[blk > 0]): + t_in_b = tri[blk == b] + print(f' block {b}: trials {t_in_b.min()}-{t_in_b.max()}, ' + f'frames {np.flatnonzero(blk == b)[0] + 1}-{np.flatnonzero(blk == b)[-1] + 1}') + for span, label in [(sync['sync_im_frame_span_by_behav_trial'][:5], 'trial')]: + for i, s in enumerate(span): + print(f' {label} {i + 1} frame span: {s.tolist() if s.size else "(not imaged)"}') + if log is not None: + ts, slope, offset, res = frame_times_on_behavior_clock(sync, log) + print(f'behavior-clock fit: slope={slope:.9f}, offset={offset:.3f}s, ' + f'residual std={res * 1000:.1f} ms') + print(f'frame 1 behavior time: {ts[0]:.3f}s, last: {ts[-1]:.3f}s') + print(f'iteration {itr[np.flatnonzero(blk > 0)[0]]} of trial ' + f'{tri[np.flatnonzero(blk > 0)[0]]} is the first synced frame') + + +if __name__ == '__main__': + _main() diff --git a/uv.lock b/uv.lock index 96d5d9ce..0e04a6e7 100644 --- a/uv.lock +++ b/uv.lock @@ -1,22 +1,18 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.12" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] -[options] -exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values. -exclude-newer-span = "P14D" - [[package]] name = "acres" version = "0.5.0" @@ -28,16 +24,16 @@ wheels = [ [[package]] name = "aiohappyeyeballs" -version = "2.6.2" +version = "2.7.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/33/c6/61a2d7b7572279226bb2e7f61d7a19ca7c90da0329c93fa0d560cbf288d8/aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64", size = 22591, upload-time = "2026-05-20T15:12:24.631Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/eec0465c2f67b2664688d0240b3212d5196fd89e741df67ddb81f8d35658/aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d", size = 24757, upload-time = "2026-07-01T17:11:55.501Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4", size = 15062, upload-time = "2026-05-20T15:12:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472", size = 15038, upload-time = "2026-07-01T17:11:54.055Z" }, ] [[package]] name = "aiohttp" -version = "3.13.5" +version = "3.14.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -46,78 +42,93 @@ dependencies = [ { name = "frozenlist" }, { name = "multidict" }, { name = "propcache" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/77/9a/152096d4808df8e4268befa55fba462f440f14beab85e8ad9bf990516918/aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1", size = 7858271, upload-time = "2026-03-31T22:01:03.343Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/6f/353954c29e7dcce7cf00280a02c75f30e133c00793c7a2ed3776d7b2f426/aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9", size = 748876, upload-time = "2026-03-31T21:57:36.319Z" }, - { url = "https://files.pythonhosted.org/packages/f5/1b/428a7c64687b3b2e9cd293186695affc0e1e54a445d0361743b231f11066/aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416", size = 499557, upload-time = "2026-03-31T21:57:38.236Z" }, - { url = "https://files.pythonhosted.org/packages/29/47/7be41556bfbb6917069d6a6634bb7dd5e163ba445b783a90d40f5ac7e3a7/aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2", size = 500258, upload-time = "2026-03-31T21:57:39.923Z" }, - { url = "https://files.pythonhosted.org/packages/67/84/c9ecc5828cb0b3695856c07c0a6817a99d51e2473400f705275a2b3d9239/aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4", size = 1749199, upload-time = "2026-03-31T21:57:41.938Z" }, - { url = "https://files.pythonhosted.org/packages/f0/d3/3c6d610e66b495657622edb6ae7c7fd31b2e9086b4ec50b47897ad6042a9/aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9", size = 1721013, upload-time = "2026-03-31T21:57:43.904Z" }, - { url = "https://files.pythonhosted.org/packages/49/a0/24409c12217456df0bae7babe3b014e460b0b38a8e60753d6cb339f6556d/aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5", size = 1781501, upload-time = "2026-03-31T21:57:46.285Z" }, - { url = "https://files.pythonhosted.org/packages/98/9d/b65ec649adc5bccc008b0957a9a9c691070aeac4e41cea18559fef49958b/aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e", size = 1878981, upload-time = "2026-03-31T21:57:48.734Z" }, - { url = "https://files.pythonhosted.org/packages/57/d8/8d44036d7eb7b6a8ec4c5494ea0c8c8b94fbc0ed3991c1a7adf230df03bf/aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1", size = 1767934, upload-time = "2026-03-31T21:57:51.171Z" }, - { url = "https://files.pythonhosted.org/packages/31/04/d3f8211f273356f158e3464e9e45484d3fb8c4ce5eb2f6fe9405c3273983/aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286", size = 1566671, upload-time = "2026-03-31T21:57:53.326Z" }, - { url = "https://files.pythonhosted.org/packages/41/db/073e4ebe00b78e2dfcacff734291651729a62953b48933d765dc513bf798/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9", size = 1705219, upload-time = "2026-03-31T21:57:55.385Z" }, - { url = "https://files.pythonhosted.org/packages/48/45/7dfba71a2f9fd97b15c95c06819de7eb38113d2cdb6319669195a7d64270/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88", size = 1743049, upload-time = "2026-03-31T21:57:57.341Z" }, - { url = "https://files.pythonhosted.org/packages/18/71/901db0061e0f717d226386a7f471bb59b19566f2cae5f0d93874b017271f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3", size = 1749557, upload-time = "2026-03-31T21:57:59.626Z" }, - { url = "https://files.pythonhosted.org/packages/08/d5/41eebd16066e59cd43728fe74bce953d7402f2b4ddfdfef2c0e9f17ca274/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b", size = 1558931, upload-time = "2026-03-31T21:58:01.972Z" }, - { url = "https://files.pythonhosted.org/packages/30/e6/4a799798bf05740e66c3a1161079bda7a3dd8e22ca392481d7a7f9af82a6/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe", size = 1774125, upload-time = "2026-03-31T21:58:04.007Z" }, - { url = "https://files.pythonhosted.org/packages/84/63/7749337c90f92bc2cb18f9560d67aa6258c7060d1397d21529b8004fcf6f/aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14", size = 1732427, upload-time = "2026-03-31T21:58:06.337Z" }, - { url = "https://files.pythonhosted.org/packages/98/de/cf2f44ff98d307e72fb97d5f5bbae3bfcb442f0ea9790c0bf5c5c2331404/aiohttp-3.13.5-cp312-cp312-win32.whl", hash = "sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3", size = 433534, upload-time = "2026-03-31T21:58:08.712Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ca/eadf6f9c8fa5e31d40993e3db153fb5ed0b11008ad5d9de98a95045bed84/aiohttp-3.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1", size = 460446, upload-time = "2026-03-31T21:58:10.945Z" }, - { url = "https://files.pythonhosted.org/packages/78/e9/d76bf503005709e390122d34e15256b88f7008e246c4bdbe915cd4f1adce/aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61", size = 742930, upload-time = "2026-03-31T21:58:13.155Z" }, - { url = "https://files.pythonhosted.org/packages/57/00/4b7b70223deaebd9bb85984d01a764b0d7bd6526fcdc73cca83bcbe7243e/aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832", size = 496927, upload-time = "2026-03-31T21:58:15.073Z" }, - { url = "https://files.pythonhosted.org/packages/9c/f5/0fb20fb49f8efdcdce6cd8127604ad2c503e754a8f139f5e02b01626523f/aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9", size = 497141, upload-time = "2026-03-31T21:58:17.009Z" }, - { url = "https://files.pythonhosted.org/packages/3b/86/b7c870053e36a94e8951b803cb5b909bfbc9b90ca941527f5fcafbf6b0fa/aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090", size = 1732476, upload-time = "2026-03-31T21:58:18.925Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e5/4e161f84f98d80c03a238671b4136e6530453d65262867d989bbe78244d0/aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b", size = 1706507, upload-time = "2026-03-31T21:58:21.094Z" }, - { url = "https://files.pythonhosted.org/packages/d4/56/ea11a9f01518bd5a2a2fcee869d248c4b8a0cfa0bb13401574fa31adf4d4/aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a", size = 1773465, upload-time = "2026-03-31T21:58:23.159Z" }, - { url = "https://files.pythonhosted.org/packages/eb/40/333ca27fb74b0383f17c90570c748f7582501507307350a79d9f9f3c6eb1/aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8", size = 1873523, upload-time = "2026-03-31T21:58:25.59Z" }, - { url = "https://files.pythonhosted.org/packages/f0/d2/e2f77eef1acb7111405433c707dc735e63f67a56e176e72e9e7a2cd3f493/aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665", size = 1754113, upload-time = "2026-03-31T21:58:27.624Z" }, - { url = "https://files.pythonhosted.org/packages/fb/56/3f653d7f53c89669301ec9e42c95233e2a0c0a6dd051269e6e678db4fdb0/aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540", size = 1562351, upload-time = "2026-03-31T21:58:29.918Z" }, - { url = "https://files.pythonhosted.org/packages/ec/a6/9b3e91eb8ae791cce4ee736da02211c85c6f835f1bdfac0594a8a3b7018c/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb", size = 1693205, upload-time = "2026-03-31T21:58:32.214Z" }, - { url = "https://files.pythonhosted.org/packages/98/fc/bfb437a99a2fcebd6b6eaec609571954de2ed424f01c352f4b5504371dd3/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46", size = 1730618, upload-time = "2026-03-31T21:58:34.728Z" }, - { url = "https://files.pythonhosted.org/packages/e4/b6/c8534862126191a034f68153194c389addc285a0f1347d85096d349bbc15/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8", size = 1745185, upload-time = "2026-03-31T21:58:36.909Z" }, - { url = "https://files.pythonhosted.org/packages/0b/93/4ca8ee2ef5236e2707e0fd5fecb10ce214aee1ff4ab307af9c558bda3b37/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d", size = 1557311, upload-time = "2026-03-31T21:58:39.38Z" }, - { url = "https://files.pythonhosted.org/packages/57/ae/76177b15f18c5f5d094f19901d284025db28eccc5ae374d1d254181d33f4/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6", size = 1773147, upload-time = "2026-03-31T21:58:41.476Z" }, - { url = "https://files.pythonhosted.org/packages/01/a4/62f05a0a98d88af59d93b7fcac564e5f18f513cb7471696ac286db970d6a/aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c", size = 1730356, upload-time = "2026-03-31T21:58:44.049Z" }, - { url = "https://files.pythonhosted.org/packages/e4/85/fc8601f59dfa8c9523808281f2da571f8b4699685f9809a228adcc90838d/aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc", size = 432637, upload-time = "2026-03-31T21:58:46.167Z" }, - { url = "https://files.pythonhosted.org/packages/c0/1b/ac685a8882896acf0f6b31d689e3792199cfe7aba37969fa91da63a7fa27/aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83", size = 458896, upload-time = "2026-03-31T21:58:48.119Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ce/46572759afc859e867a5bc8ec3487315869013f59281ce61764f76d879de/aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c", size = 745721, upload-time = "2026-03-31T21:58:50.229Z" }, - { url = "https://files.pythonhosted.org/packages/13/fe/8a2efd7626dbe6049b2ef8ace18ffda8a4dfcbe1bcff3ac30c0c7575c20b/aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be", size = 497663, upload-time = "2026-03-31T21:58:52.232Z" }, - { url = "https://files.pythonhosted.org/packages/9b/91/cc8cc78a111826c54743d88651e1687008133c37e5ee615fee9b57990fac/aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25", size = 499094, upload-time = "2026-03-31T21:58:54.566Z" }, - { url = "https://files.pythonhosted.org/packages/0a/33/a8362cb15cf16a3af7e86ed11962d5cd7d59b449202dc576cdc731310bde/aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56", size = 1726701, upload-time = "2026-03-31T21:58:56.864Z" }, - { url = "https://files.pythonhosted.org/packages/45/0c/c091ac5c3a17114bd76cbf85d674650969ddf93387876cf67f754204bd77/aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2", size = 1683360, upload-time = "2026-03-31T21:58:59.072Z" }, - { url = "https://files.pythonhosted.org/packages/23/73/bcee1c2b79bc275e964d1446c55c54441a461938e70267c86afaae6fba27/aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a", size = 1773023, upload-time = "2026-03-31T21:59:01.776Z" }, - { url = "https://files.pythonhosted.org/packages/c7/ef/720e639df03004fee2d869f771799d8c23046dec47d5b81e396c7cda583a/aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be", size = 1853795, upload-time = "2026-03-31T21:59:04.568Z" }, - { url = "https://files.pythonhosted.org/packages/bd/c9/989f4034fb46841208de7aeeac2c6d8300745ab4f28c42f629ba77c2d916/aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b", size = 1730405, upload-time = "2026-03-31T21:59:07.221Z" }, - { url = "https://files.pythonhosted.org/packages/ce/75/ee1fd286ca7dc599d824b5651dad7b3be7ff8d9a7e7b3fe9820d9180f7db/aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94", size = 1558082, upload-time = "2026-03-31T21:59:09.484Z" }, - { url = "https://files.pythonhosted.org/packages/c3/20/1e9e6650dfc436340116b7aa89ff8cb2bbdf0abc11dfaceaad8f74273a10/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d", size = 1692346, upload-time = "2026-03-31T21:59:12.068Z" }, - { url = "https://files.pythonhosted.org/packages/d8/40/8ebc6658d48ea630ac7903912fe0dd4e262f0e16825aa4c833c56c9f1f56/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7", size = 1698891, upload-time = "2026-03-31T21:59:14.552Z" }, - { url = "https://files.pythonhosted.org/packages/d8/78/ea0ae5ec8ba7a5c10bdd6e318f1ba5e76fcde17db8275188772afc7917a4/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772", size = 1742113, upload-time = "2026-03-31T21:59:17.068Z" }, - { url = "https://files.pythonhosted.org/packages/8a/66/9d308ed71e3f2491be1acb8769d96c6f0c47d92099f3bc9119cada27b357/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5", size = 1553088, upload-time = "2026-03-31T21:59:19.541Z" }, - { url = "https://files.pythonhosted.org/packages/da/a6/6cc25ed8dfc6e00c90f5c6d126a98e2cf28957ad06fa1036bd34b6f24a2c/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1", size = 1757976, upload-time = "2026-03-31T21:59:22.311Z" }, - { url = "https://files.pythonhosted.org/packages/c1/2b/cce5b0ffe0de99c83e5e36d8f828e4161e415660a9f3e58339d07cce3006/aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b", size = 1712444, upload-time = "2026-03-31T21:59:24.635Z" }, - { url = "https://files.pythonhosted.org/packages/6c/cf/9e1795b4160c58d29421eafd1a69c6ce351e2f7c8d3c6b7e4ca44aea1a5b/aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3", size = 438128, upload-time = "2026-03-31T21:59:27.291Z" }, - { url = "https://files.pythonhosted.org/packages/22/4d/eaedff67fc805aeba4ba746aec891b4b24cebb1a7d078084b6300f79d063/aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162", size = 464029, upload-time = "2026-03-31T21:59:29.429Z" }, - { url = "https://files.pythonhosted.org/packages/79/11/c27d9332ee20d68dd164dc12a6ecdef2e2e35ecc97ed6cf0d2442844624b/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a", size = 778758, upload-time = "2026-03-31T21:59:31.547Z" }, - { url = "https://files.pythonhosted.org/packages/04/fb/377aead2e0a3ba5f09b7624f702a964bdf4f08b5b6728a9799830c80041e/aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254", size = 512883, upload-time = "2026-03-31T21:59:34.098Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a6/aa109a33671f7a5d3bd78b46da9d852797c5e665bfda7d6b373f56bff2ec/aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36", size = 516668, upload-time = "2026-03-31T21:59:36.497Z" }, - { url = "https://files.pythonhosted.org/packages/79/b3/ca078f9f2fa9563c36fb8ef89053ea2bb146d6f792c5104574d49d8acb63/aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f", size = 1883461, upload-time = "2026-03-31T21:59:38.723Z" }, - { url = "https://files.pythonhosted.org/packages/b7/e3/a7ad633ca1ca497b852233a3cce6906a56c3225fb6d9217b5e5e60b7419d/aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800", size = 1747661, upload-time = "2026-03-31T21:59:41.187Z" }, - { url = "https://files.pythonhosted.org/packages/33/b9/cd6fe579bed34a906d3d783fe60f2fa297ef55b27bb4538438ee49d4dc41/aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf", size = 1863800, upload-time = "2026-03-31T21:59:43.84Z" }, - { url = "https://files.pythonhosted.org/packages/c0/3f/2c1e2f5144cefa889c8afd5cf431994c32f3b29da9961698ff4e3811b79a/aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b", size = 1958382, upload-time = "2026-03-31T21:59:46.187Z" }, - { url = "https://files.pythonhosted.org/packages/66/1d/f31ec3f1013723b3babe3609e7f119c2c2fb6ef33da90061a705ef3e1bc8/aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a", size = 1803724, upload-time = "2026-03-31T21:59:48.656Z" }, - { url = "https://files.pythonhosted.org/packages/0e/b4/57712dfc6f1542f067daa81eb61da282fab3e6f1966fca25db06c4fc62d5/aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8", size = 1640027, upload-time = "2026-03-31T21:59:51.284Z" }, - { url = "https://files.pythonhosted.org/packages/25/3c/734c878fb43ec083d8e31bf029daae1beafeae582d1b35da234739e82ee7/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be", size = 1806644, upload-time = "2026-03-31T21:59:53.753Z" }, - { url = "https://files.pythonhosted.org/packages/20/a5/f671e5cbec1c21d044ff3078223f949748f3a7f86b14e34a365d74a5d21f/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b", size = 1791630, upload-time = "2026-03-31T21:59:56.239Z" }, - { url = "https://files.pythonhosted.org/packages/0b/63/fb8d0ad63a0b8a99be97deac8c04dacf0785721c158bdf23d679a87aa99e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6", size = 1809403, upload-time = "2026-03-31T21:59:59.103Z" }, - { url = "https://files.pythonhosted.org/packages/59/0c/bfed7f30662fcf12206481c2aac57dedee43fe1c49275e85b3a1e1742294/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037", size = 1634924, upload-time = "2026-03-31T22:00:02.116Z" }, - { url = "https://files.pythonhosted.org/packages/17/d6/fd518d668a09fd5a3319ae5e984d4d80b9a4b3df4e21c52f02251ef5a32e/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500", size = 1836119, upload-time = "2026-03-31T22:00:04.756Z" }, - { url = "https://files.pythonhosted.org/packages/78/b7/15fb7a9d52e112a25b621c67b69c167805cb1f2ab8f1708a5c490d1b52fe/aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9", size = 1772072, upload-time = "2026-03-31T22:00:07.494Z" }, - { url = "https://files.pythonhosted.org/packages/7e/df/57ba7f0c4a553fc2bd8b6321df236870ec6fd64a2a473a8a13d4f733214e/aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8", size = 471819, upload-time = "2026-03-31T22:00:10.277Z" }, - { url = "https://files.pythonhosted.org/packages/62/29/2f8418269e46454a26171bfdd6a055d74febf32234e474930f2f60a17145/aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9", size = 505441, upload-time = "2026-03-31T22:00:12.791Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/58/d9/22ce5786ac0c1653ae8b6c23bded02c1686d11f0dbb45b31ce128e0df985/aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc", size = 7971213, upload-time = "2026-07-23T01:57:27.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/d4/eb96299230e20acf2efae207cb8d69051f1f68e357e5ea5e479bf6fb097a/aiohttp-3.14.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5", size = 754690, upload-time = "2026-07-23T01:53:47.332Z" }, + { url = "https://files.pythonhosted.org/packages/88/11/e7a70a209eb9a067c0d3212b518a0134e3484f5178c7533878b6b514d469/aiohttp-3.14.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228", size = 509484, upload-time = "2026-07-23T01:53:51.159Z" }, + { url = "https://files.pythonhosted.org/packages/30/07/4bbc222cc8dbe31d4c3e8a5baad2286e4d42026ac0c570027b89afce6344/aiohttp-3.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee", size = 511949, upload-time = "2026-07-23T01:53:55.083Z" }, + { url = "https://files.pythonhosted.org/packages/54/b9/42e74c46b7b7c794b995bbc1f573fb48950c38b19d8600c62a6804ee2d67/aiohttp-3.14.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a", size = 1765282, upload-time = "2026-07-23T01:53:59.662Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ed/62bc4d74363ad346d518e0720363a949f63e2e23439a79eb5813d4d29bb3/aiohttp-3.14.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b", size = 1741511, upload-time = "2026-07-23T01:54:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9f/181e8a8bc79e47d13c7fc4540bd7a3b729d9505609c61f392a8dd2fbfe55/aiohttp-3.14.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529", size = 1810680, upload-time = "2026-07-23T01:54:09.882Z" }, + { url = "https://files.pythonhosted.org/packages/5c/9a/dec94d6ad694552fe3424e3f1928d7a606a5d9d9433a04e7ecdd9d38ae7f/aiohttp-3.14.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787", size = 1905646, upload-time = "2026-07-23T01:54:13.475Z" }, + { url = "https://files.pythonhosted.org/packages/52/b7/7cd31f29d6055bd711ae6e669367fba6f5ae9de463910a793e30556a8db7/aiohttp-3.14.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42", size = 1792122, upload-time = "2026-07-23T01:54:15.752Z" }, + { url = "https://files.pythonhosted.org/packages/66/73/10b1ef93afa61f4963c746257b70ced619cf31a4798671de5fdb2608501d/aiohttp-3.14.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b", size = 1591127, upload-time = "2026-07-23T01:54:19.489Z" }, + { url = "https://files.pythonhosted.org/packages/49/ed/3b203fa6de1b338c14acdc06bf6ca9b043b7944f005966958c2ced932cde/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043", size = 1725210, upload-time = "2026-07-23T01:54:24.129Z" }, + { url = "https://files.pythonhosted.org/packages/28/b7/1c2aab8c706436dcc28598452488ac9cd7c409da815237c28c27d58993e6/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427", size = 1764848, upload-time = "2026-07-23T01:54:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/54/50/94c28f08b131c4bf10984ea2c7a536c9920608bb2d6e7f95642c30cc87b7/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d", size = 1777102, upload-time = "2026-07-23T01:54:31.775Z" }, + { url = "https://files.pythonhosted.org/packages/13/d4/e7d09ba7d345fb2d74440fd2fa033c5e079fac05552927705986f41a364f/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0", size = 1580205, upload-time = "2026-07-23T01:54:34.518Z" }, + { url = "https://files.pythonhosted.org/packages/a3/84/072a91d68e1e1eb587985b54baab94221277f877e8ef274fc213a0ceae28/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d", size = 1797219, upload-time = "2026-07-23T01:54:36.995Z" }, + { url = "https://files.pythonhosted.org/packages/e0/eb/aad34e897e668424d6e995da5dff8a4a09af93363d3392488772957a63aa/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19", size = 1768629, upload-time = "2026-07-23T01:54:40.103Z" }, + { url = "https://files.pythonhosted.org/packages/b6/2b/6bb88ddba0fecd9122aa3ebcad25996cf6c083a4a7040dbb3a4f97972af6/aiohttp-3.14.3-cp312-cp312-win32.whl", hash = "sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559", size = 451481, upload-time = "2026-07-23T01:54:42.547Z" }, + { url = "https://files.pythonhosted.org/packages/76/9b/f2f8f108da17ecef2cc3efc424e8b7ad3782b1a8360f7b8eae8ced84f6ea/aiohttp-3.14.3-cp312-cp312-win_amd64.whl", hash = "sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a", size = 476845, upload-time = "2026-07-23T01:54:44.853Z" }, + { url = "https://files.pythonhosted.org/packages/3e/44/28dac80a8941b604f4da10ce21097614ca1bf905ce93dca28d8d7de9c1e7/aiohttp-3.14.3-cp312-cp312-win_arm64.whl", hash = "sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c", size = 448050, upload-time = "2026-07-23T01:54:47.087Z" }, + { url = "https://files.pythonhosted.org/packages/57/be/5afd201cc0ab139029aadb75392efe85a293403d9dd3a3226161c21ce00c/aiohttp-3.14.3-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86", size = 506269, upload-time = "2026-07-23T01:54:49.075Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/dec8189d62b45ade009f6792a2264b942a90cb88aeaf181239933cd72c3c/aiohttp-3.14.3-cp313-cp313-android_21_x86_64.whl", hash = "sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627", size = 515166, upload-time = "2026-07-23T01:54:51.894Z" }, + { url = "https://files.pythonhosted.org/packages/28/24/2854869d29ed8a8b19d74f9ec6629515f7e04d02dd329d9d179201e58e47/aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82", size = 486263, upload-time = "2026-07-23T01:54:54.223Z" }, + { url = "https://files.pythonhosted.org/packages/d4/dd/57187c8be2a35aea65eaee3bd2c3dcbbcf0204f5106c89637e3610380cd1/aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c", size = 492299, upload-time = "2026-07-23T01:54:56.236Z" }, + { url = "https://files.pythonhosted.org/packages/b9/11/06ae6ed8f0d414edf4068861e233d8fe23ee699bfd4b3ceb8663db948a62/aiohttp-3.14.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f", size = 502235, upload-time = "2026-07-23T01:54:58.377Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a3/559639c34a345d2cf7c52dff6838119f2eaf29eb508227b5b83f573af813/aiohttp-3.14.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80", size = 750883, upload-time = "2026-07-23T01:55:00.65Z" }, + { url = "https://files.pythonhosted.org/packages/91/cd/41e131f13afd1e7b0172a9d9eda085ef90eb8439f41f0d279db81ed3ae60/aiohttp-3.14.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0", size = 508473, upload-time = "2026-07-23T01:55:02.945Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6b/e7f13410d391c6e55b4c007a8de024355389d7d459e3d64c42b2d33617e5/aiohttp-3.14.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf", size = 509190, upload-time = "2026-07-23T01:55:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/97/21/6464573e53d69672cc1eada3e5c5cb2d2efa82701e8305a0f2047a576967/aiohttp-3.14.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd", size = 1761478, upload-time = "2026-07-23T01:55:07.383Z" }, + { url = "https://files.pythonhosted.org/packages/1a/81/d217043a4c17fbce360905e3b2bdd20139ebc9a2de836d035d179c4da006/aiohttp-3.14.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807", size = 1735092, upload-time = "2026-07-23T01:55:09.803Z" }, + { url = "https://files.pythonhosted.org/packages/a1/66/e13a02d0eeb1a9a502402a977abb4e4abff9fe4051c26f80558c57a7c975/aiohttp-3.14.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8", size = 1800546, upload-time = "2026-07-23T01:55:12.012Z" }, + { url = "https://files.pythonhosted.org/packages/26/5e/57d42fca1d18cb5acc1cad945d017fabc5d6ae71d8a08ad66be8dc3ee544/aiohttp-3.14.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24", size = 1895250, upload-time = "2026-07-23T01:55:14.357Z" }, + { url = "https://files.pythonhosted.org/packages/ca/1c/7da8d08e74d56f00070822f9638ff3f1c563f8ad87d1efa996c87bfc8644/aiohttp-3.14.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5", size = 1789289, upload-time = "2026-07-23T01:55:16.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/0f/cf16bcf56896981c1a0319f5d5db9337994b5165730c48a8fa07e9b34be6/aiohttp-3.14.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4", size = 1586706, upload-time = "2026-07-23T01:55:18.913Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6f/76eac12a7f2480e1e304f842efdb07db33256b0d9165b866b6ef0806c202/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9", size = 1724652, upload-time = "2026-07-23T01:55:21.296Z" }, + { url = "https://files.pythonhosted.org/packages/39/b6/19c8c592baeeb94b75f966547d40c02ac7590902306ec5863d5c027cf506/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1", size = 1756239, upload-time = "2026-07-23T01:55:23.705Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c9/4e9383150296f97f873b680c4de8fb2cd88608fb9f48c79edcb111611abc/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371", size = 1769161, upload-time = "2026-07-23T01:55:26.082Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1e/147bdc6cc5de5f3ab011be8bf5d6e786633249f22c20bae06f85e45f5387/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde", size = 1578759, upload-time = "2026-07-23T01:55:28.846Z" }, + { url = "https://files.pythonhosted.org/packages/fd/31/78388a9d6040ece2e11df62ea229a822cf5e52d238374b220ae9975b2623/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e", size = 1792025, upload-time = "2026-07-23T01:55:31.457Z" }, + { url = "https://files.pythonhosted.org/packages/03/51/a3d29fdf2c25d796746af8ad6fe56a45d6256c38b0a8a2ed752e1160b3a2/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71", size = 1768477, upload-time = "2026-07-23T01:55:33.87Z" }, + { url = "https://files.pythonhosted.org/packages/29/a6/442e18b5afeade534d877a2dc3c3e392aff8d49787890b0cf84790410267/aiohttp-3.14.3-cp313-cp313-win32.whl", hash = "sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0", size = 451069, upload-time = "2026-07-23T01:55:36.121Z" }, + { url = "https://files.pythonhosted.org/packages/9d/69/3d876ac02659f271cf7f6769f14a8e3de5b6e888ed8b5a7e998086a4cec8/aiohttp-3.14.3-cp313-cp313-win_amd64.whl", hash = "sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883", size = 476518, upload-time = "2026-07-23T01:55:38.303Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0e/50d6e6471cd31edce8b282bdec59375a3a69124d8a989a0b1313355cae52/aiohttp-3.14.3-cp313-cp313-win_arm64.whl", hash = "sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2", size = 447676, upload-time = "2026-07-23T01:55:40.451Z" }, + { url = "https://files.pythonhosted.org/packages/c8/20/887fdcf832326571b370ffc347b3e70abe101096f3720126aac161b1d872/aiohttp-3.14.3-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062", size = 509067, upload-time = "2026-07-23T01:55:42.618Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a3/92cec936f78cc4bf0fa5554ebe593b73459d94e3c62303e1902a4cccb6f7/aiohttp-3.14.3-cp314-cp314-android_24_x86_64.whl", hash = "sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6", size = 514774, upload-time = "2026-07-23T01:55:44.937Z" }, + { url = "https://files.pythonhosted.org/packages/29/ba/2a0c38df3fc557620b6a5acd98364af050053b6285b4dc7ee74100c63c18/aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919", size = 488134, upload-time = "2026-07-23T01:55:47.135Z" }, + { url = "https://files.pythonhosted.org/packages/48/d6/d51b7d4bf309af3693940d8ffd2b9ed0b682434ef85959b7c9c137f60cf8/aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7", size = 494201, upload-time = "2026-07-23T01:55:49.451Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5a/8f624384e5f1efabb5229b94157eb966b021e97bdb188c62860c2ae243c2/aiohttp-3.14.3-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0", size = 502766, upload-time = "2026-07-23T01:55:51.656Z" }, + { url = "https://files.pythonhosted.org/packages/a6/26/4ff0164370deec18fb19254ee4ab10b7a73304ac0c860b13f5f84663759b/aiohttp-3.14.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924", size = 756557, upload-time = "2026-07-23T01:55:53.964Z" }, + { url = "https://files.pythonhosted.org/packages/97/a3/7056b86dc0d9ec709ea9777eae3b0161428f943372f8b98c01c11593b682/aiohttp-3.14.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646", size = 510168, upload-time = "2026-07-23T01:55:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/0357a015892fd68058bf2d39d3fd1958e459b997a7db30aaa6aaa434ae96/aiohttp-3.14.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b", size = 512957, upload-time = "2026-07-23T01:55:58.437Z" }, + { url = "https://files.pythonhosted.org/packages/47/d1/8aba53f15ccb2238405f5e9d30e2a8ca44f93878c26e7165ade00d374b1c/aiohttp-3.14.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30", size = 1750149, upload-time = "2026-07-23T01:56:00.856Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/40c3fee327529284375c6701cbb0fa4600cc2e8432af1378f897e2ef7d3a/aiohttp-3.14.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9", size = 1707685, upload-time = "2026-07-23T01:56:03.371Z" }, + { url = "https://files.pythonhosted.org/packages/2a/a3/ca0cc6724cca8114b05694abd916060758c79894c3aa5b012cdadc1bc28e/aiohttp-3.14.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f", size = 1803911, upload-time = "2026-07-23T01:56:05.817Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/85b099c299c3ffd38ad9b3e43694c8a346934e4a30c88c4fd5a841234f77/aiohttp-3.14.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d", size = 1876929, upload-time = "2026-07-23T01:56:08.413Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b7/1da684a04175473fa4cddbf9a2f572e79514c3fd27a74597f43057d4f3da/aiohttp-3.14.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147", size = 1761112, upload-time = "2026-07-23T01:56:10.918Z" }, + { url = "https://files.pythonhosted.org/packages/d1/16/bc4b55e3e5cb175fd69c53c90d60d2f47797cb343da5106e23863dc4dba4/aiohttp-3.14.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c", size = 1583500, upload-time = "2026-07-23T01:56:13.613Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e8/13a9d957a1ee40837f46aa30f0f4c657e673ad86a2e6362a9f9be20d26d9/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a", size = 1713940, upload-time = "2026-07-23T01:56:15.969Z" }, + { url = "https://files.pythonhosted.org/packages/38/05/d33c680c1bcf1c7e130f9cbfc1fc02fe8bb0c4af2a94a53dd5fb56131e5c/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0", size = 1724413, upload-time = "2026-07-23T01:56:18.591Z" }, + { url = "https://files.pythonhosted.org/packages/85/1d/af798d306f7a74b6a632dbcabcf62a4c91391b7582d2a8c6d7712e2cc54e/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661", size = 1770748, upload-time = "2026-07-23T01:56:21.074Z" }, + { url = "https://files.pythonhosted.org/packages/a8/92/ad720d472556a995049206867765e9410969684f86ee09423ff9969044c1/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22", size = 1577564, upload-time = "2026-07-23T01:56:23.475Z" }, + { url = "https://files.pythonhosted.org/packages/60/ad/0ed7586cbef7a884e23a752fa2bb987a122e6a5dd50dab109258d0a95193/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41", size = 1782080, upload-time = "2026-07-23T01:56:25.994Z" }, + { url = "https://files.pythonhosted.org/packages/97/ea/dbaed0d73e8a69aad653b045dab451c67c2454bb731a37b45a86593e9422/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf", size = 1745813, upload-time = "2026-07-23T01:56:28.604Z" }, + { url = "https://files.pythonhosted.org/packages/81/1b/6893d4bc57e434fc93a6c9217c637d967a0b651d989f6e3265179375754a/aiohttp-3.14.3-cp314-cp314-win32.whl", hash = "sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da", size = 455872, upload-time = "2026-07-23T01:56:31.031Z" }, + { url = "https://files.pythonhosted.org/packages/f5/8b/c7baa1ba1eda4db6989baefe5de6d99834921b84ebd7918624febcb9f290/aiohttp-3.14.3-cp314-cp314-win_amd64.whl", hash = "sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100", size = 481030, upload-time = "2026-07-23T01:56:33.365Z" }, + { url = "https://files.pythonhosted.org/packages/22/8c/c29d067df825a2df88ca432db848aa2fe8199598359cc06c12b09320cac9/aiohttp-3.14.3-cp314-cp314-win_arm64.whl", hash = "sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc", size = 453669, upload-time = "2026-07-23T01:56:35.731Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a4/9c033beb355d39b6147980597ec9645e4729243f686ee4dc73945de72030/aiohttp-3.14.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b", size = 791403, upload-time = "2026-07-23T01:56:37.972Z" }, + { url = "https://files.pythonhosted.org/packages/80/ca/87c32a0a7704583cfc49660bd817889bae5b830bf53b5dcb4e92145ac2da/aiohttp-3.14.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0", size = 526413, upload-time = "2026-07-23T01:56:40.523Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d8/8ec0e471248c500acdce2be3f46db8fb62b5eb60efef072529cc85ee1d26/aiohttp-3.14.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e", size = 532135, upload-time = "2026-07-23T01:56:42.876Z" }, + { url = "https://files.pythonhosted.org/packages/fe/45/f8919fd936e8b79fcd9bda7b6d8e62613462a713f4f17987fd7c34399142/aiohttp-3.14.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716", size = 1922742, upload-time = "2026-07-23T01:56:45.528Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ec/9ca76b28a27525b0cc53e20842e0228b022f301ce1f436b7d814b4aaf2df/aiohttp-3.14.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f", size = 1787371, upload-time = "2026-07-23T01:56:48.045Z" }, + { url = "https://files.pythonhosted.org/packages/b1/04/6acdbf17315f7b55f1937e3387acb89a3cddeb4995689553d064af8e92ab/aiohttp-3.14.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553", size = 1912623, upload-time = "2026-07-23T01:56:50.605Z" }, + { url = "https://files.pythonhosted.org/packages/86/e6/438b0c79ca6f45eb9fd9817dd4c01a91919a38c0de5ee9e05e2b4dc0ece7/aiohttp-3.14.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100", size = 2005515, upload-time = "2026-07-23T01:56:53.153Z" }, + { url = "https://files.pythonhosted.org/packages/bb/6b/62cbd6577758699525f5c712d1ddef57d9875fbab0ae8d5f5a202fd598f8/aiohttp-3.14.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85", size = 1879906, upload-time = "2026-07-23T01:56:55.818Z" }, + { url = "https://files.pythonhosted.org/packages/00/95/18bcbf830a21dc3aae24d8f6b6feaf3db1d2090242d00a7868db2ffb0b67/aiohttp-3.14.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33", size = 1675849, upload-time = "2026-07-23T01:56:58.861Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/47f4968659c5e23606c3790c80fc624e691c153d036148449ee84d31b287/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f", size = 1843496, upload-time = "2026-07-23T01:57:01.591Z" }, + { url = "https://files.pythonhosted.org/packages/64/af/38c33c4dd82fddcb4e56c4653b6f1072a8edbc6b7fa15809f14932c41e2d/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0", size = 1827746, upload-time = "2026-07-23T01:57:05.131Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9d/0537cda4885ac8f5b7053d164dd06312f4c483a4edcb8ee5b8aaf2a989bf/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098", size = 1853810, upload-time = "2026-07-23T01:57:08.043Z" }, + { url = "https://files.pythonhosted.org/packages/19/fe/26f9c5e6458385aa86497836b0dea6fb2f027827d63f37c7856cce9286ee/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25", size = 1668895, upload-time = "2026-07-23T01:57:10.837Z" }, + { url = "https://files.pythonhosted.org/packages/ec/4c/618b1db9b9ba079b8875d2cdf78e7c4a3bf72903bd5850fee7dd9544600a/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9", size = 1883833, upload-time = "2026-07-23T01:57:13.672Z" }, + { url = "https://files.pythonhosted.org/packages/94/c6/bd959bd1e4771f9fd944e9e436224c48c77b018b73b519b5aad346335bcc/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb", size = 1844251, upload-time = "2026-07-23T01:57:16.593Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/08d41839658bdd44a0ed2480f3891705ecb487ce28c0dde62c9040c997e0/aiohttp-3.14.3-cp314-cp314t-win32.whl", hash = "sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963", size = 474180, upload-time = "2026-07-23T01:57:19.306Z" }, + { url = "https://files.pythonhosted.org/packages/99/5d/3cd6ef0a2b2851f7ab913b5b079334781bd50ff56a323e4454063377a080/aiohttp-3.14.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b", size = 500528, upload-time = "2026-07-23T01:57:21.762Z" }, + { url = "https://files.pythonhosted.org/packages/a4/37/cfd1ed540a4d318da025590d96b728e63713c09e9377950fc655dadeb856/aiohttp-3.14.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7", size = 469280, upload-time = "2026-07-23T01:57:24.241Z" }, ] [[package]] @@ -135,24 +146,24 @@ wheels = [ [[package]] name = "annotated-types" -version = "0.7.0" +version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, ] [[package]] name = "anyio" -version = "4.13.0" +version = "4.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, ] [[package]] @@ -166,11 +177,11 @@ wheels = [ [[package]] name = "appnope" -version = "0.1.4" +version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/f7/a82489c2b6ebe32d3e2831895ae19c77861f0eadf3bb16034484d965dbb2/appnope-1.0.0.tar.gz", hash = "sha256:685db59cb6043c3c2e528adc0b3bce3a5f8d09bcf7492c6ea650d1b7421f3c49", size = 5454, upload-time = "2026-08-20T21:36:13.748Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, + { url = "https://files.pythonhosted.org/packages/46/c7/6b687cb0f83d2a51017d47953f2ee430ffad6fec2a8ebc964e0718a33eb1/appnope-1.0.0-py3-none-any.whl", hash = "sha256:6fe0c04218aab65c54c4ff81638cdbf848d89f5653b74d68638a137f200dd16e", size = 4158, upload-time = "2026-08-20T21:36:12.444Z" }, ] [[package]] @@ -187,33 +198,45 @@ wheels = [ [[package]] name = "argon2-cffi-bindings" -version = "25.1.0" +version = "26.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441, upload-time = "2025-07-30T10:02:05.147Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393, upload-time = "2025-07-30T10:01:40.97Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328, upload-time = "2025-07-30T10:01:41.916Z" }, - { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269, upload-time = "2025-07-30T10:01:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558, upload-time = "2025-07-30T10:01:43.943Z" }, - { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364, upload-time = "2025-07-30T10:01:44.887Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637, upload-time = "2025-07-30T10:01:46.225Z" }, - { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934, upload-time = "2025-07-30T10:01:47.203Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158, upload-time = "2025-07-30T10:01:48.341Z" }, - { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597, upload-time = "2025-07-30T10:01:49.112Z" }, - { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231, upload-time = "2025-07-30T10:01:49.92Z" }, - { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121, upload-time = "2025-07-30T10:01:50.815Z" }, - { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177, upload-time = "2025-07-30T10:01:51.681Z" }, - { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090, upload-time = "2025-07-30T10:01:53.184Z" }, - { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246, upload-time = "2025-07-30T10:01:54.145Z" }, - { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126, upload-time = "2025-07-30T10:01:55.074Z" }, - { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343, upload-time = "2025-07-30T10:01:56.007Z" }, - { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777, upload-time = "2025-07-30T10:01:56.943Z" }, - { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180, upload-time = "2025-07-30T10:01:57.759Z" }, - { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715, upload-time = "2025-07-30T10:01:58.56Z" }, - { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149, upload-time = "2025-07-30T10:01:59.329Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/0b/43/bb8b6e8708d49a5ab36781333af092d9f483b198a2710d01281204640055/argon2_cffi_bindings-26.1.0.tar.gz", hash = "sha256:63505c71542a44b68b1e38060450fb006404170da375feb31af153e7f9c6205d", size = 1790807, upload-time = "2026-08-20T07:44:22.492Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/d2/0ae991f1b2181e5be49007c574710a800ad36c2978683addb3e67c474e55/argon2_cffi_bindings-26.1.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:21ca0396fe5ec995dd54431c32698189666f9224810acfa752e50d2bd94d9df2", size = 25521, upload-time = "2026-08-20T07:32:43.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e4/ad91d8297638aa2258aad4501c306aca99480dfe76ccd638173fa3702db9/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78de2d65e0b9ea7ce9d1b1c3e87297b2d7305a02c266ee2a2d6910daddd7ee69", size = 27177, upload-time = "2026-08-20T07:32:44.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/86/5363df11b86d02cf3662208e7406496327649cc90eb365bf6f4e8a54a41f/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27f1821903e2ceadcb88ec2b45ef190897b7682449c772f4d9b53e42c520cf29", size = 26597, upload-time = "2026-08-20T07:32:45.172Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b5/a14dcc592652347dad23ee93b278a4da5d2a25c9ed3ebd10d68eea823a4f/argon2_cffi_bindings-26.1.0-cp310-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d88e5f7e60f28ae0b0cc6b2f16c43e87cd642a196a86f85e0d8bb6fe016fc16d", size = 27403, upload-time = "2026-08-20T07:32:46.13Z" }, + { url = "https://files.pythonhosted.org/packages/b3/81/b4a20d4902af7f796390bf9245ff83c5217dfa7367efa1d14986956c482b/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:34b7d9c24a4165a2c61cc8ae11d44d48c9ce2830fb536cb7914e11fdd9962728", size = 27132, upload-time = "2026-08-20T07:32:47.13Z" }, + { url = "https://files.pythonhosted.org/packages/7e/1b/c8de358af07b1c490e0fcb863ef98e46ddb486e45567aca5a60bd68d9daa/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:224865cbbcb7a2bd1356741dff12b0134df726b6d44bb7b500df8e303cbd9e81", size = 27588, upload-time = "2026-08-20T07:32:48.087Z" }, + { url = "https://files.pythonhosted.org/packages/48/2f/7ee62a6e79f9309f9d9982d301b22a00010adb580c05c8109b94d7b33de0/argon2_cffi_bindings-26.1.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ffff613aaa9ce6236766e2fc6dc560bb5abde7a2e2416e3db1f9ae395a2b4dd4", size = 26785, upload-time = "2026-08-20T07:32:48.977Z" }, + { url = "https://files.pythonhosted.org/packages/e9/10/960d0ee93d4897741bcaf4799c697dae2d81499f66fd1ed042a7dd54c1f4/argon2_cffi_bindings-26.1.0-cp310-abi3-win32.whl", hash = "sha256:a86c069c91a747a2c4e5c51473590aeb48172fff9b2130d23729a42d98665ecb", size = 23898, upload-time = "2026-08-20T07:32:50.114Z" }, + { url = "https://files.pythonhosted.org/packages/6d/3a/0cc14a05810e6add9bce5e87693334baa2222de5f647fa31781885b6573f/argon2_cffi_bindings-26.1.0-cp310-abi3-win_amd64.whl", hash = "sha256:2c36ff87b5dfaa477d0bd51e9d7f6abdae7c8955d2983c97419085d842154b3e", size = 25730, upload-time = "2026-08-20T07:32:51.091Z" }, + { url = "https://files.pythonhosted.org/packages/4e/db/d83cf2af140547f0b9cdaece05b2dc2dcbf991be4667331d073eff771435/argon2_cffi_bindings-26.1.0-cp310-abi3-win_arm64.whl", hash = "sha256:f9c4420a7a864fe1b86ce35befc95b8e39fb852493b81cf798671ddc265de638", size = 24478, upload-time = "2026-08-20T07:32:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/bb/5f/f652055e18d2627e2eed94c7f31a792127cfe38df786635395d742321674/argon2_cffi_bindings-26.1.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:af11ac37a7c53dc16cb7950a6190851b0870fe218b6c60c0bb7ac355234e3083", size = 15434, upload-time = "2026-08-20T07:32:53.143Z" }, + { url = "https://files.pythonhosted.org/packages/76/38/de696045960f5b846d428c0fb6c130ed3da87aac2af209b05c193815404c/argon2_cffi_bindings-26.1.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:db0fcd827ca61622a01b220aadfbece01939acf53888f2cb98cd93e9b1e2c97e", size = 15449, upload-time = "2026-08-20T07:32:54.075Z" }, + { url = "https://files.pythonhosted.org/packages/91/0a/c25af768f6b75a5a71e31207f87c540656b2808c015260444a22763221ad/argon2_cffi_bindings-26.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:28524438cd3e723f25412f63d4fd516ff5bae9ae5aa56acbe2a1404398a0cf31", size = 25683, upload-time = "2026-08-20T07:32:55.05Z" }, + { url = "https://files.pythonhosted.org/packages/a8/7e/be212c751ab0bcea7f646615f933bf262e8e50b3f7bef32f861d0a2d066b/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac82fc756a446b6ccd7139ce70efa9d8bbe541e7ad579a12dcb52764b7175c5f", size = 27311, upload-time = "2026-08-20T07:32:56.166Z" }, + { url = "https://files.pythonhosted.org/packages/a6/ee/f84b28e4afd13d3cac36c1d8fa8c239d2dc2c51cd978d02ee5d5ad98d9bb/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6a4e68eed961a8de6928d1c17ff3dc2a547e0e923c17f8f1cd79fb7bc9502f98", size = 26771, upload-time = "2026-08-20T07:32:57.206Z" }, + { url = "https://files.pythonhosted.org/packages/21/c3/95c07a023691ecd529da9cb6a8f0779e13ebc1bdfaa86d145fdc1c6e7e79/argon2_cffi_bindings-26.1.0-cp314-cp314t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:151dfaad9de753f4af2a7854e707e4784f2acc434340ade64239c5b104b2d605", size = 27568, upload-time = "2026-08-20T07:32:58.361Z" }, + { url = "https://files.pythonhosted.org/packages/e6/31/3a18e31406d8694b4d6a31573c3e572fff6bed318bb744453eb653766d22/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:061a6919145bbf282ebf1f9c59d3135d4833c25313c8595c0d68cf7712ddfce2", size = 27280, upload-time = "2026-08-20T07:32:59.343Z" }, + { url = "https://files.pythonhosted.org/packages/0b/39/d4be4577e178b2397aa5b5575c8a309bf0da2afe05fe0c72c8f398662d63/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:62ff20cd130c956c7c9144d5fe35228f98b51c579b2439e988b27ef93e16c02a", size = 27776, upload-time = "2026-08-20T07:33:00.325Z" }, + { url = "https://files.pythonhosted.org/packages/71/47/78f4dd96f7411339f723b96fe24039c1bd5835102b8a5ba71ac4ec712ac7/argon2_cffi_bindings-26.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:19423e5d7ac1cc354baab59eaabf18db2ec04ef6593b5abe5a34f323c4a8f87a", size = 26932, upload-time = "2026-08-20T07:33:01.272Z" }, + { url = "https://files.pythonhosted.org/packages/3b/cd/96bfd37434cc0a848a9066c291d84b28846c4c9ea289ed9866b1164d622b/argon2_cffi_bindings-26.1.0-cp314-cp314t-win32.whl", hash = "sha256:4f84cdd868978d7b7350a566c254042d44216d9e37f241f3a6d3b1dfebeede35", size = 24878, upload-time = "2026-08-20T07:33:02.189Z" }, + { url = "https://files.pythonhosted.org/packages/f1/42/d8b6810abd9b1bd2f47ebbccf460da59c9f32e94888bea4f7b137d998797/argon2_cffi_bindings-26.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2b741888c93147444fdfc851abd81cc207f37f7f7da42062a00deb3888e57da8", size = 26656, upload-time = "2026-08-20T07:33:03.222Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d1/095d95eaf2ed1d9f77268cf3291bde148c6cd56121f8db2c74c1ba618a0e/argon2_cffi_bindings-26.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:6ab674f668d5962a3a4136ae0812519b0f1586874263723a32181d60d64137e1", size = 25378, upload-time = "2026-08-20T07:33:04.332Z" }, + { url = "https://files.pythonhosted.org/packages/66/cb/214092c39c4dbcb72cf98b12234ddac2221f8fe2c0acf29c6a70fa83be53/argon2_cffi_bindings-26.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:1d98e33bd8bd67d7206c124e200bf2229c4cfa8c9c19f7b44a897f0fc71837eb", size = 25683, upload-time = "2026-08-20T07:33:05.337Z" }, + { url = "https://files.pythonhosted.org/packages/83/e5/02015b83e9b05ccb85ff2ced424cf6e83a12d3810bc7f66d679a92b69ffb/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ccaf0a46cbb380f1fd102a874e32aa629fd3cb0c0e94f4943fa1f6d5edc5dac6", size = 27310, upload-time = "2026-08-20T07:33:06.344Z" }, + { url = "https://files.pythonhosted.org/packages/c3/4a/85e612787d0796878b3b4f6bd53dcd5484b6fe7b64cc6fc7b6e6a04cf835/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0c3103fcff20183e593459cfea6e012281c0e76ae3ed8b5565ad1b92eac3990", size = 26771, upload-time = "2026-08-20T07:33:07.429Z" }, + { url = "https://files.pythonhosted.org/packages/f6/84/ccb003b6f9969820e87656398f4d49c857def71a85ca1588a0e809afd7ce/argon2_cffi_bindings-26.1.0-cp315-cp315t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c49e853a3bef9dd10329f31f702e7fa9b5c58229ff9c2ff6d069efaf09177c08", size = 27569, upload-time = "2026-08-20T07:33:08.598Z" }, + { url = "https://files.pythonhosted.org/packages/88/07/c26b76debf0998ee08fbe947ab2058ac5de37d4b9d46b06c17abaa6c4ce9/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:6376d4b3aca039375ca8bf92f770da0ec424a1ce3a37077a8d3c557411aa56ca", size = 27279, upload-time = "2026-08-20T07:33:09.518Z" }, + { url = "https://files.pythonhosted.org/packages/ee/0d/ead6ddc029f91bc9b9390686dad3c808ab08100d348f6266b5f93f8970ee/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:9bacedc04b0402837586a17f0919e3dfdd95291f441f1f56bd80ec274c2840a1", size = 27774, upload-time = "2026-08-20T07:33:10.728Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/c108530d9eb86036b78d3af4de28b83b4a2d9a70512bd10ff8e59966aab4/argon2_cffi_bindings-26.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:76ae29acace5d33355344612844d588e19deaaba4639d8bb01601e4b1418ef36", size = 26933, upload-time = "2026-08-20T07:33:11.661Z" }, + { url = "https://files.pythonhosted.org/packages/a9/02/0bfc59e781c89acf64c31c388aade9d9d1c1ea38aa1ba1292fe07f607fe9/argon2_cffi_bindings-26.1.0-cp315-cp315t-win32.whl", hash = "sha256:df612391feca41c44d20118f3b88d1b86419465cd1f5496859f715ca60ec2210", size = 24875, upload-time = "2026-08-20T07:33:12.616Z" }, + { url = "https://files.pythonhosted.org/packages/61/c7/c3e46068cddffccecb8ad94d71135e9bf62bbc789589e7dfadc7c6f59214/argon2_cffi_bindings-26.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:1a0a29ed86960e44eaace7e081bdfab4f08b012fd96ec8edba71e2ad020939e4", size = 26655, upload-time = "2026-08-20T07:33:13.521Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ca/18b9c8c45fecf34b9100ec6d7946057f14a158f2eaa20ea123a3e82351cb/argon2_cffi_bindings-26.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:d157ddfab1e8b21f2f1dedda9c09645d98b5ed0b667b0626be600a345d426440", size = 25376, upload-time = "2026-08-20T07:33:14.491Z" }, ] [[package]] @@ -248,7 +271,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f6 [[package]] name = "astropy" -version = "7.2.0" +version = "8.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "astropy-iers-data" }, @@ -257,34 +280,34 @@ dependencies = [ { name = "pyerfa" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7b/92/2dce2d48347efc3346d08ca7995b152d242ebd170c571f7c9346468d8427/astropy-7.2.0.tar.gz", hash = "sha256:ae48bc26b1feaeb603cd94bd1fa1aa39137a115fe931b7f13787ab420e8c3070", size = 7057774, upload-time = "2025-11-25T22:36:41.916Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/c4/21be4313ddfde5f60e0607fd307f367b9e0f0bf153a89b10cbd036dd8cfd/astropy-8.0.1.tar.gz", hash = "sha256:45ca31d5b91fa294cd590a4791a32db94de7f9c8a343155f4d5877baa82351da", size = 7152500, upload-time = "2026-07-05T07:24:48.482Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/6d/6330a844bad8dfc4875e0f2fa1db1fee87837ba9805aa8a8d048c071363a/astropy-7.2.0-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:efac04df4cc488efe630c2fff1992d6516dfb16a06e197fb68bc9e8e3b85def1", size = 6442332, upload-time = "2025-11-25T22:36:23.6Z" }, - { url = "https://files.pythonhosted.org/packages/a6/ba/3418133ba144dfcd1530bca5a6b695f4cdd21a8abaaa2ac4e5450d11b028/astropy-7.2.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:52e9a7d9c86b21f1af911a2930cd0c4a275fb302d455c89e11eedaffef6f2ad0", size = 6413656, upload-time = "2025-11-25T22:36:26.548Z" }, - { url = "https://files.pythonhosted.org/packages/be/ba/05e43b5a7d738316a097fa78524d3eaaff5986294b4a052d4adb3c45e7c0/astropy-7.2.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97c370421b9bb13d4c762c7af06d172bad7c01bd5bcf88314f6913c3c235b770", size = 9758867, upload-time = "2025-11-25T22:36:28.661Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1c/f06ad85180e7dd9855aa5ede901bfc2be858d7bee17d4e978a14c0ecec14/astropy-7.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f39ce2c80211fbceb005d377a5478cd0d66c42aa1498d252f2239fe5a025c24", size = 9789007, upload-time = "2025-11-25T22:36:31.063Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fb/e4d35194a5009d7a73333079481a4ef1380a255d67b9c1db578151a5fb50/astropy-7.2.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ad4d71db994d45f046a1a5449000cf0f88ab6367cb67658500654a0586d6ab19", size = 9748547, upload-time = "2025-11-25T22:36:33.154Z" }, - { url = "https://files.pythonhosted.org/packages/36/ea/f990730978ae0a7a34705f885d2f3806928c5f0bc22eefd6a1a23539cc32/astropy-7.2.0-cp311-abi3-win32.whl", hash = "sha256:95161f26602433176483e8bde8ab1a8ca09148f5b4bf5190569a26d381091598", size = 6237228, upload-time = "2025-11-25T22:36:35.236Z" }, - { url = "https://files.pythonhosted.org/packages/ec/bc/f4378f586dd63902c37d16f68f35f7d555b3b32e08ac6b1d633eb0a48805/astropy-7.2.0-cp311-abi3-win_amd64.whl", hash = "sha256:dc7c340ba1713e55c93071b32033f3153470a0f663a4d539c03a7c9b44020790", size = 6362868, upload-time = "2025-11-25T22:36:37.784Z" }, - { url = "https://files.pythonhosted.org/packages/77/79/b6d4bf01913cfd4ce0cd4c1be5916beccdb92b2970bab8c827984231eae6/astropy-7.2.0-cp311-abi3-win_arm64.whl", hash = "sha256:0c428735a3f15b05c2095bc6ccb5f98a64bc99fb7015866af19ff8492420ddaf", size = 6221756, upload-time = "2025-11-25T22:36:39.852Z" }, + { url = "https://files.pythonhosted.org/packages/ac/80/69a84af0b35d55a859cde38e16b71553840a156bdf7dc4b767ec2b2d2829/astropy-8.0.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:24813c764d5ea111e7f716127121e22a0cfe233ca1eac2ed23c4a3848390610e", size = 6635649, upload-time = "2026-07-05T07:24:31.957Z" }, + { url = "https://files.pythonhosted.org/packages/a6/34/074f367d5699a1008b24c50acc1539f05f2cfc881b1901f4b110d57eae20/astropy-8.0.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:222f0b9837e79fd3d101e6d4e4579e3aa98c490000bb01e35cd32fd3e3c12bf5", size = 6607950, upload-time = "2026-07-05T07:24:34.148Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/d29035da0a08e3b0b03d63abe9ce69b900d8ef7863dc557a2e34ebf56a4e/astropy-8.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a4044396c15969bb029b648521f7c25d294e982dbd23e7c2c7dd328178b8b98", size = 10414634, upload-time = "2026-07-05T07:24:36.129Z" }, + { url = "https://files.pythonhosted.org/packages/fa/14/6f4427419f8a02e1d0a885fb64d8d4454c5d443627aa7cb1a3a36e16abb7/astropy-8.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fa11d56855e10107ea2231a6b6a33dbf1edbea6890adf34634c1f1d8f25c5a5a", size = 10452095, upload-time = "2026-07-05T07:24:38.424Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ef/a5cf36a402c4511a776405f12d0b35196f55f4312ce407012a2fbcf1e4e0/astropy-8.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5b482bc6c57c966e6c6234410a1d9afbcf92bcac858cf287812f8c99ddc3fafc", size = 10407732, upload-time = "2026-07-05T07:24:40.774Z" }, + { url = "https://files.pythonhosted.org/packages/58/6d/59e7fb6f9ade53889c9553afff89991b8076c021581ba66eb51d913ca6c9/astropy-8.0.1-cp311-abi3-win32.whl", hash = "sha256:13a6ef59347a15c55406bb630e0d25d0248a179af84fae06a7ddb85a229065b2", size = 6394540, upload-time = "2026-07-05T07:24:43.146Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6a/8534fd98e2d3eb51cbaa261e6c6b59e4ad969a1787d72bb1208499080dbd/astropy-8.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:ee9024f2237243ebc98726f8eff2efbf201ea4e0bba1d21f6e2dee0cb499fbdf", size = 6529976, upload-time = "2026-07-05T07:24:44.693Z" }, + { url = "https://files.pythonhosted.org/packages/8a/df/96b8bf4ec218d03969a8b904ade5fc5b1a63f4a7f02c4e107b6264bcf152/astropy-8.0.1-cp311-abi3-win_arm64.whl", hash = "sha256:435e784f2cd9a4c31a03102e6ad27a51b901a8d5587bc78afe8d28e41eb44824", size = 6395252, upload-time = "2026-07-05T07:24:46.56Z" }, ] [[package]] name = "astropy-iers-data" -version = "0.2026.5.25.1.14.13" +version = "0.2026.8.24.0.24.29" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4f/35/13bc06eb74a65f2aae2b74f9a813db464c6b35666947431115c5b8a9fc6e/astropy_iers_data-0.2026.5.25.1.14.13.tar.gz", hash = "sha256:928eee767c743ee3d510e44f7d29b6f3bd57556b56e42cd2436bd5d9f22cc00e", size = 1934842, upload-time = "2026-05-25T01:14:54.669Z" } +sdist = { url = "https://files.pythonhosted.org/packages/be/4a/3b10cfce220b884451926fb440b8b528fb4dccdd6a81b8bd672072b8e5c7/astropy_iers_data-0.2026.8.24.0.24.29.tar.gz", hash = "sha256:8774d7454c2b82deae439a5ec63d563641e9d307e864b7dc84a542c8b6064521", size = 1945103, upload-time = "2026-08-24T00:25:08.378Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/81/05126142b678332f5e0238519607b23fec2bbdeb5e4051981c90111b4984/astropy_iers_data-0.2026.5.25.1.14.13-py3-none-any.whl", hash = "sha256:6cf42bbe05299378d6b109493de136e0bb07f4b39d7051f8d34f84e5f996c9e0", size = 1991597, upload-time = "2026-05-25T01:14:53.233Z" }, + { url = "https://files.pythonhosted.org/packages/85/13/afe433f358c77d0da3c9c10e2f999e146ce1f5aaa35903f8319cc4b836bf/astropy_iers_data-0.2026.8.24.0.24.29-py3-none-any.whl", hash = "sha256:4155ff5a60aafee76dd1ea233c39645b01256b6c436c3d443d0a2dde5197ebb3", size = 2000599, upload-time = "2026-08-24T00:25:06.943Z" }, ] [[package]] name = "asttokens" -version = "3.0.1" +version = "3.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, ] [[package]] @@ -382,102 +405,101 @@ wheels = [ [[package]] name = "beautifulsoup4" -version = "4.14.3" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "soupsieve" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, + { url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" }, ] [[package]] name = "bids-validator-deno" -version = "2.4.1" +version = "3.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3e/f9/d536d65bf268275710e567ea335c1dfd6dd6b62d19899f4a76b9ee109e56/bids_validator_deno-2.4.1.tar.gz", hash = "sha256:a79b4af2818a200ff5a597715a3c1050ae93be7cb523bcfef54b93af057d8466", size = 83474, upload-time = "2026-02-20T15:13:26.518Z" } +dependencies = [ + { name = "deno" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/8c/9a947b6129f7431b6d67b5142de2b4f2dfdc6a620206f1c0c39cebd7cdee/bids_validator_deno-3.0.1.tar.gz", hash = "sha256:4edc589140013acbecf0dc890b6ed651c5ecc2ca252ba9cbcdc869f44edb6c44", size = 138763, upload-time = "2026-07-20T17:39:21.165Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/f2/4e42217b9c522c2a5bcfeb5bd19950be85a928ab447ebb1ca8b6987ae603/bids_validator_deno-2.4.1-py2.py3-none-macosx_10_12_x86_64.whl", hash = "sha256:18126fed28115efbe767fc3cb558c7ebb4d215b443ac8f005c78faaaf13e0518", size = 43472933, upload-time = "2026-02-20T15:13:11.14Z" }, - { url = "https://files.pythonhosted.org/packages/e4/61/455215eb2379d32bb5e1b8526ddeef3998e3ed7a8d425d816829b6f3a704/bids_validator_deno-2.4.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:45ecc93d9e6da8ff23529dc03c128ecc5f6527155dc0a10ec00aca020bcd250f", size = 41237486, upload-time = "2026-02-20T15:13:14.121Z" }, - { url = "https://files.pythonhosted.org/packages/4c/6f/7a8f0255e802b57ab40732264a5ee5b7cdf5910981ac6ca7338ea3559ce5/bids_validator_deno-2.4.1-py2.py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f09c1e600cae71293ab5ae9ddc30aa56a871463837a020eb23b246fa2024c462", size = 43649133, upload-time = "2026-02-20T15:13:17.144Z" }, - { url = "https://files.pythonhosted.org/packages/28/15/4c2b1758ab7a628d9f1f401e6883ead26087a15940705a575e37450a0637/bids_validator_deno-2.4.1-py2.py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5087fcd13341f529b5404792a74e22f570e50f17e5ea4cabe9c91b1caf74cbf4", size = 44965143, upload-time = "2026-02-20T15:13:20.946Z" }, - { url = "https://files.pythonhosted.org/packages/3c/0e/f269e72642df5cc110720828f2477c4b9c6dadaf0c347d9c97ab248ee880/bids_validator_deno-2.4.1-py2.py3-none-win_amd64.whl", hash = "sha256:24106f32e5c9dcdcec095527300e0bf683f6f4df5fb19b49a91586491eaaee5e", size = 43994665, upload-time = "2026-02-20T15:13:23.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/10/6056053018b58db92ba412a0013504e1a5a4550d4a0c99ec31fc968d1813/bids_validator_deno-3.0.1-py3-none-any.whl", hash = "sha256:af2779e97290737bee01126ad30501f0ea82b38a6fb8346563aae6bb8e228d87", size = 4410559, upload-time = "2026-07-20T17:39:19.601Z" }, ] [[package]] name = "bidsschematools" -version = "1.2.2" +version = "1.2.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "acres" }, { name = "click" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/6b/fa31ef331e9fc8abd66d97296cf403207027fdf745ca9cd1a892987ec934/bidsschematools-1.2.2.tar.gz", hash = "sha256:4401991b68acca8e8b24c28ba096796c3794260d722b1aad31229ffce941391b", size = 1795228, upload-time = "2026-03-24T15:15:45.51Z" } +sdist = { url = "https://files.pythonhosted.org/packages/86/b6/ebf4bc6993d8ebd8b15f823954e0b2c351a9ca7a80b318f3dd74ce42d705/bidsschematools-1.2.7.tar.gz", hash = "sha256:fc4bdbbb27ac44cd9a1a296ce76922079bb7b5e42f5d51b3f34e9396b4d77639", size = 1768778, upload-time = "2026-07-20T16:48:36.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/ed/b2f33b9019201f0421c102eae11e3cd4ced42947fcfa272d4d42690d85a8/bidsschematools-1.2.2-py3-none-any.whl", hash = "sha256:a363f94703258317b78cb293496a8a4c60da7bb7b4bb9fb2d741c3c3b38a9a1a", size = 194089, upload-time = "2026-03-24T15:15:43.425Z" }, + { url = "https://files.pythonhosted.org/packages/f9/25/c7c2500f91089061e7d7fdefa04b1a9e008d32c0fde8f799705eb3178024/bidsschematools-1.2.7-py3-none-any.whl", hash = "sha256:4bda6ff33f82259b9dd11acebcccbd3fa1d3eee80a578abf012d4c4e6301346e", size = 194216, upload-time = "2026-07-20T16:48:34.665Z" }, ] [[package]] name = "bitarray" -version = "3.8.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fc/47/b5da717e7bbe97a6dc4c986f053ca55fd3276078d78f68f9e8b417d1425a/bitarray-3.8.1.tar.gz", hash = "sha256:f90bb3c680804ec9630bcf8c0965e54b4de84d33b17d7da57c87c30f0c64c6f5", size = 152471, upload-time = "2026-04-02T16:29:01.712Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/4f/6ab3767b6642a6cbee4353f10a71fe25ade9899d539fae47c3d50686ebe2/bitarray-3.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4494c599effa16064f2b600f6eb28115182d6826847d795a55691339788d8a4d", size = 149202, upload-time = "2026-04-02T16:26:55.635Z" }, - { url = "https://files.pythonhosted.org/packages/eb/53/22bfffd13dd0a266f90011338b24eec45f25c91d37155bb2aa330351e17d/bitarray-3.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ff2ca039a161d49a8c713f5380def315c6f793df5fe348b94782b1dbee37a644", size = 145999, upload-time = "2026-04-02T16:26:56.849Z" }, - { url = "https://files.pythonhosted.org/packages/5d/dc/60aff29c88b648e18248921001cf9d7169abeda4d8db96f2dc1a24ed98ca/bitarray-3.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3ffa6ef88166bb36f5d1492e71e664868b9b8b6afd55821e0ac0cb96625441", size = 335945, upload-time = "2026-04-02T16:26:58.403Z" }, - { url = "https://files.pythonhosted.org/packages/83/c8/225380610a01ae0d8f2f5256e531bae7135b2ade6f4607156424718ec43a/bitarray-3.8.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:478b9f0ea86f957624dd2b159066855716f78db94666e9b04babe85fc013e01b", size = 364213, upload-time = "2026-04-02T16:26:59.742Z" }, - { url = "https://files.pythonhosted.org/packages/6c/df/83899be9a74ec5878972e8b636f645ef1771e146c6425a161fdafdd74aaa/bitarray-3.8.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e127b2e7fc533728295196f9265d12834530f475bc6cd6f74619df415d04b8b1", size = 375409, upload-time = "2026-04-02T16:27:01.081Z" }, - { url = "https://files.pythonhosted.org/packages/6c/93/38bc15cb097107d220a942eb66dc50882496d7da54f41e5eea6c31b1c443/bitarray-3.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ef49462a615de062dcac8281944d0b036fe1e9c96a6c690bf6cf5e4b5488f0e", size = 343645, upload-time = "2026-04-02T16:27:02.577Z" }, - { url = "https://files.pythonhosted.org/packages/5a/c3/75fae6991946f8bf643ec50233432ea81b5b65bfdb2918b09d7e37605380/bitarray-3.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4da256fc567a57ded2a4aa962fc9e9d430ab740e5c67be9e98a63ef4eb467f2f", size = 333844, upload-time = "2026-04-02T16:27:03.963Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7e/649e7c3bb12ba938c387bcad6a6c0b84312663c9807ec1457888936690d8/bitarray-3.8.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b46b7aec9272fd81c984e723e599957629a91204120b3e7f0933f138e0792fdf", size = 361267, upload-time = "2026-04-02T16:27:05.361Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5f/db0fb71a7c6c3ef047b84256157e96fa35e10ed8b79b80e892d354ab37f6/bitarray-3.8.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2dc07dab252c63c4f6600e200b26fa05207db6b650d41ae88ab0cec4d6c59459", size = 359373, upload-time = "2026-04-02T16:27:07.106Z" }, - { url = "https://files.pythonhosted.org/packages/b6/b6/a082d84cba7ba509b48d160034f6a2d31df6bf4fff0471801e888bba96c9/bitarray-3.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:29c8c10a49d6a9586f592116618b99c3dabcb24d881b7a649e0691ef87f314c4", size = 340633, upload-time = "2026-04-02T16:27:08.794Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b7/1ba7ec1f3aa62933dfef505b09de0b75778a3cb05984ee8bb798539381db/bitarray-3.8.1-cp312-cp312-win32.whl", hash = "sha256:67125404d12547443d74113862a80c10310cf875aff8dbfc5548fee1d9737123", size = 143521, upload-time = "2026-04-02T16:27:10.423Z" }, - { url = "https://files.pythonhosted.org/packages/82/30/5ff9d30a1121810f336517e51b1cbdea0fa92e92b142efe0741e335dc14e/bitarray-3.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba0339d6aa80615a17f47fabc5700485e9469121d658458f95cdd2003288c28b", size = 150451, upload-time = "2026-04-02T16:27:11.993Z" }, - { url = "https://files.pythonhosted.org/packages/a6/08/51e49eb09ca45ecda4a5f05b70a10977a5f0ac39967c79479e9d3e41cb29/bitarray-3.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:c0b367a00e8c88a714b2384c97dedcc85340547b3a54b6037a42fca5554d0576", size = 147218, upload-time = "2026-04-02T16:27:13.566Z" }, - { url = "https://files.pythonhosted.org/packages/13/79/015a30f40f716a0372907a7ac5c399db5428209dcf264b85ef1305f9b3e2/bitarray-3.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:55f4b105a1686eb486069a9e578d502d1998e890d8144012225de9e0450aeabd", size = 149201, upload-time = "2026-04-02T16:27:15.383Z" }, - { url = "https://files.pythonhosted.org/packages/23/fe/f70b150ea9a330daecc546a5a63576ba2d6b3bacc1ccde42abc9dd35a1ad/bitarray-3.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b3118ec012a799456f7fca6cc002c078590578b7640fbaab52d8ecb9a651f1c1", size = 146001, upload-time = "2026-04-02T16:27:17.041Z" }, - { url = "https://files.pythonhosted.org/packages/78/49/2c637658851ea0408c7375f5f278c0ebb69cbe861f8fcc9477db14ee7fa2/bitarray-3.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2762db8049b230520358ac742cbc57bceaacebe34e5d25c096f2b4bc3887a3a8", size = 335162, upload-time = "2026-04-02T16:27:18.587Z" }, - { url = "https://files.pythonhosted.org/packages/d3/3c/ae665a0b2d6183cc706c03b683b7f9ad53195731379ab82dfa537e73f70f/bitarray-3.8.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b67b869f860eb19055e2560844d8c7d0935245938935bdb764b3e683e2014e2", size = 363031, upload-time = "2026-04-02T16:27:19.98Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ee/7b7c37fbb15209525f0daff1a51a042c035e931ebd526aabb483fdc7a476/bitarray-3.8.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a661f3492462e7adf8a054fb7414a22fc8251f1e18b9d8cbcf008d2dc85f012", size = 374623, upload-time = "2026-04-02T16:27:21.468Z" }, - { url = "https://files.pythonhosted.org/packages/96/dd/26a17534742561974e5b2a3448d70fd8d370ed885bd88bbbb36bdd022875/bitarray-3.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:300e3026d17ae3328320ba78d3165bdb1c43d0dfdbc461a69ebbdc005d9ce0b3", size = 342850, upload-time = "2026-04-02T16:27:22.814Z" }, - { url = "https://files.pythonhosted.org/packages/58/f1/97410e88a8b441c1a6e5841c651e483787c3c87f2b98c1d2421aee23790d/bitarray-3.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ad5a71c1ef4a2e404c2c888db09226c821d9d14eff8813e1da873572f5fbb89d", size = 333109, upload-time = "2026-04-02T16:27:24.271Z" }, - { url = "https://files.pythonhosted.org/packages/64/1a/74a3af2d314ec6a035ae8f139491ace4fc8b3362bfdc86aee652b8f15be5/bitarray-3.8.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:78cbda57a2808d994517b53571eaa2d9299359f63aa71cf4bc94210169aad8b1", size = 360334, upload-time = "2026-04-02T16:27:25.999Z" }, - { url = "https://files.pythonhosted.org/packages/d8/86/01ea58ca9795401489f9de662ef9ba759d6712870696a5806441b2c14224/bitarray-3.8.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:89c7c125a0913d71ba9cc1fa8e14c7cfe1517b1c1f45416e1f9babcedd3b545d", size = 358674, upload-time = "2026-04-02T16:27:27.597Z" }, - { url = "https://files.pythonhosted.org/packages/68/c9/14587fd3c712047af60a875889ad69926386c3fdbf8061e9baf23d12d997/bitarray-3.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7875abfd90f2ae3aa22d50f3fa1c93bbae456458cc73d3179b838f07bed1fc10", size = 339689, upload-time = "2026-04-02T16:27:29.14Z" }, - { url = "https://files.pythonhosted.org/packages/5b/82/a8cc5172dba50c90d7cc89d9f5c1cfb99deb77af10b4762eb75ece52e20a/bitarray-3.8.1-cp313-cp313-win32.whl", hash = "sha256:21add0aa968496a2bd8341d85720d09808e22e0adc7dbefc1e0f8f67c4b83f36", size = 143503, upload-time = "2026-04-02T16:27:30.948Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b2/f647dcd098c275a67b89d21c92471180996a797cec11e308b4d1936d170d/bitarray-3.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:40d1b57012bf9b4fefd25345aaa95aab3ca510cc693f33c2cb02a4b771d8e51a", size = 150441, upload-time = "2026-04-02T16:27:32.642Z" }, - { url = "https://files.pythonhosted.org/packages/ba/78/bde39d566f70149c6858c7e61c0a0d902a643a136a56dd37b6135cc59a68/bitarray-3.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:72b32d8c471930c95d49640ec99f7694f9b040ca1342ff03ed69d3aea90f9339", size = 147209, upload-time = "2026-04-02T16:27:34.289Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3b/d07ee3ef120a3b3f1db2434c4b955fbf900bb3f878e25a71ee82408e9d91/bitarray-3.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fe989bbed9d6f332c1e24d333936f3fa1375f380cd8028da0b985dcdefa6015a", size = 149181, upload-time = "2026-04-02T16:27:35.608Z" }, - { url = "https://files.pythonhosted.org/packages/ab/bf/43bf76bbf95354e74b80923e8aa7d6cb178e25546eeab0705524ad4d5171/bitarray-3.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:75e33c9187da271d1dbeb2582ab2df2e441346492098f67559b09173ea4edde4", size = 146020, upload-time = "2026-04-02T16:27:37.279Z" }, - { url = "https://files.pythonhosted.org/packages/89/8c/868644e4f61220529ceea0be6dff1c659a7c20dc354f8c5aa367409e6150/bitarray-3.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd7e3158be382f8f140caccc0dc7742a7553ce4bf2978982abe3054d2cedd705", size = 335102, upload-time = "2026-04-02T16:27:39.065Z" }, - { url = "https://files.pythonhosted.org/packages/f9/6f/0eb0ed1214bb6436e078a44006127685b587b6aeb1600bc2f77bf53e96b9/bitarray-3.8.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9fa5620f7f352f9706924c0e2071a212be36421f09ee064b0fd7e1128289fcdb", size = 363405, upload-time = "2026-04-02T16:27:40.596Z" }, - { url = "https://files.pythonhosted.org/packages/25/eb/07d6ec5ad40792ff92857ac51cb91c01f855e3edb7b589eb099937420722/bitarray-3.8.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:190b20cbffc9cd7f308f7a57d406119c3af3ae197613325fd2d92d99c8882ad6", size = 374225, upload-time = "2026-04-02T16:27:42.101Z" }, - { url = "https://files.pythonhosted.org/packages/46/53/2c5d688ea0f91025d3fdd08e13f9d5195c384953961070ce79719efd18b3/bitarray-3.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec3d0a6c37a816ea6e3550697c60d90861c9b0f982a98a40b59ac1f7a360bfa9", size = 342742, upload-time = "2026-04-02T16:27:43.706Z" }, - { url = "https://files.pythonhosted.org/packages/2e/8a/25a932f02a8d1ca0c97cae62399f475d219669dbfecca3b2d7567effec73/bitarray-3.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:746e25f17ba4203b5933773782cf2d30bca5cdb66a9ba5d48a53a6c795aedc57", size = 333236, upload-time = "2026-04-02T16:27:45.237Z" }, - { url = "https://files.pythonhosted.org/packages/fe/a2/83fc66eb64ee0e74dc04894fbe8ae7e2d083c824ae9c1396d68a14c50760/bitarray-3.8.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ab363a5baae965fb3438f2137583853ad9c77d7e45f2a62ba63e609a34d792ea", size = 360526, upload-time = "2026-04-02T16:27:46.724Z" }, - { url = "https://files.pythonhosted.org/packages/a1/60/eee517c36956d9fc8d4ae2b2fbcf9122477b0730dacd52a2800226b11e61/bitarray-3.8.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5e30d8e399f38ae1ec86aa9be76d20ba15872dd0c41b4b46d1b78905857363b9", size = 358208, upload-time = "2026-04-02T16:27:48.221Z" }, - { url = "https://files.pythonhosted.org/packages/f4/a5/2d35fb2d1abc8afa4fef93f3ad96192eebd81595c3f9389a95f5d01ee782/bitarray-3.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0f099a4a77daf9bb99787070854894fe588c7d6988ea729f970ba2b3b82c7559", size = 339373, upload-time = "2026-04-02T16:27:49.911Z" }, - { url = "https://files.pythonhosted.org/packages/f4/b5/64d6d485725076472e0f151643ac4fa78ed54f10f6b7bf9620690a24af7a/bitarray-3.8.1-cp314-cp314-win32.whl", hash = "sha256:539880ddf9a8cc54c9e6126e7d072c991563f0c90ef73b3519a783d53df00352", size = 142632, upload-time = "2026-04-02T16:27:51.371Z" }, - { url = "https://files.pythonhosted.org/packages/04/e9/cf02dfac88f4c7d3de2dbafec4ec0616eaf9547dd7be98e81dc0fde97a77/bitarray-3.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:c08cd5b19c570e1e9e094a6ce70d35bb39d12360e0763474ed9374229f174fcc", size = 149180, upload-time = "2026-04-02T16:27:53.027Z" }, - { url = "https://files.pythonhosted.org/packages/ef/a8/8e56397347bad7b042aefee9afc0cb085f2a779f7c8cc38954b12671d37c/bitarray-3.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0da5f17bed67ffe1d72f79fbf98403513a6e51a4f9b8293c1ff8a64e121242be", size = 146389, upload-time = "2026-04-02T16:27:54.759Z" }, - { url = "https://files.pythonhosted.org/packages/ff/a6/52bcd001c5cdf5c381a7317b07157070be1a6bc7fa5d58314ef6da33626b/bitarray-3.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:154a19e1dcd430494fdad7d1a0fb36383baaa363e1cb9d5a7b744cd2418c44d2", size = 150091, upload-time = "2026-04-02T16:27:56.154Z" }, - { url = "https://files.pythonhosted.org/packages/b6/22/86f51124a9d0e622be0bd171b797e0d507d5c9d6f76f5b97cb12e4ecf113/bitarray-3.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:814bb54db2a016026efc055a3527461e5eb551c0d91b32eeade003829ff84311", size = 147130, upload-time = "2026-04-02T16:27:57.916Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d4/2153c6de23e26d0bfa65e0994ef771f06f8697a9ae65473923f6922ab1b9/bitarray-3.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac49519fcfeb4a7ecdf6b7d0ec6cac409e59f94c1bb54630db577a97893b6e38", size = 343168, upload-time = "2026-04-02T16:27:59.345Z" }, - { url = "https://files.pythonhosted.org/packages/55/bd/6ff9be5965c11e2f67bec674cd1bbe41e81531ec970251986f4d4978a72d/bitarray-3.8.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:329b994944993c45c3845047476ef4f231fe1a53972f18f8d005fd12fac163e1", size = 371961, upload-time = "2026-04-02T16:28:00.956Z" }, - { url = "https://files.pythonhosted.org/packages/7d/24/9aca563d253ed28be47b9a8d5f2fe0942e0191bc4ef49589e7670177807c/bitarray-3.8.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1d7b786a1ddd9b8dda17c445060a94a465cba2e113603ae7bdc5364efc1efd11", size = 381778, upload-time = "2026-04-02T16:28:02.589Z" }, - { url = "https://files.pythonhosted.org/packages/be/e2/81ac4c98694857b7eabdb9ada77db5b44fb6b6d5d19a3a716fb8a486c251/bitarray-3.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd9b848c17ef034f2ae31b2a1bd9276710c2baf03509f1f3fa4dc4382b0a1b53", size = 348165, upload-time = "2026-04-02T16:28:04.431Z" }, - { url = "https://files.pythonhosted.org/packages/ee/c5/2107bf1474a139f934621703135985f2acfae92d786561edde62ec557f60/bitarray-3.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0a33f8931ac91ebc23ce4decb99ed8fdddba2bafd2af3bb2781bcfd9878d4822", size = 340225, upload-time = "2026-04-02T16:28:05.899Z" }, - { url = "https://files.pythonhosted.org/packages/31/95/a3d2571055279a09373d1f93249404ac37a34045e334935adbc2ce780f83/bitarray-3.8.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07626f76a248fce5ebbb10fb0d4899d3c7f908ba21cb2fb4f5a7a9daf24c20cd", size = 369440, upload-time = "2026-04-02T16:28:07.49Z" }, - { url = "https://files.pythonhosted.org/packages/ef/56/7fad5bb52c0b9cdcdea4405f5d9a41f5efbf2873045d668bc2b8db10213b/bitarray-3.8.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:18f3a2c8908e63a66d3994808254397a5f989b1fb91087c33739f62bf1a1a064", size = 364733, upload-time = "2026-04-02T16:28:09.086Z" }, - { url = "https://files.pythonhosted.org/packages/10/b0/a23a1c312206c65146021aea68d69c8c7d817ae2f99698cbc23b3c744bba/bitarray-3.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ced27af6aee28782260bfa5643797937e96a6489bca972202834017208cf74f5", size = 343729, upload-time = "2026-04-02T16:28:11.09Z" }, - { url = "https://files.pythonhosted.org/packages/a4/a0/fe5dbdfadcba2314551614d023db100e3aea7b09da2cdcbf1386f5c797a6/bitarray-3.8.1-cp314-cp314t-win32.whl", hash = "sha256:cf99e36c0f6ae5643ecef7ad7e1194aeb4a9798d9cff60b20ac041533fa6db0a", size = 144160, upload-time = "2026-04-02T16:28:12.702Z" }, - { url = "https://files.pythonhosted.org/packages/4e/0a/e95ed44f6d89e63ed666755fc0773223b10df0058d5de30d529f4cf35948/bitarray-3.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9befda0dbd27ed95fba1c26be4bf98a49ba166b3c91beb5fc04364c130ce950c", size = 150852, upload-time = "2026-04-02T16:28:14.149Z" }, - { url = "https://files.pythonhosted.org/packages/0f/90/454b88b193743b4cd0fce0819a11b1c43b7f629cb2533f6ddc62cbb5e097/bitarray-3.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:4b7d7d10a1c82050efbb9a83d7a43974f70cf8f021afb86463b42e4ac4e5a46b", size = 147343, upload-time = "2026-04-02T16:28:15.632Z" }, +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/c2/ac331091a307bf9f56b7a0f9a8fb4916158bf8dae3a97edebd91f43c985c/bitarray-3.10.1.tar.gz", hash = "sha256:c33e48906407ab3d0edb96cc5ab2a599bda5dd04704ebcd9b3e0eedce7310e0a", size = 168648, upload-time = "2026-08-07T06:21:16.718Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/ce/c2630dfef2d10460e67083c1bf8e3422a8f7d66fc75b02a3d7026e372e6b/bitarray-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d050414e41e67dc2f41a73a4755f322d043e0c1100d53bc2f9d7d3ead742a86b", size = 164121, upload-time = "2026-08-07T06:19:24.29Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e6/b0861dc786fa06a5d942c424410d41ec245093f2818b8c69d499c999af24/bitarray-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b8631479fea515ea22c3992a4d6ded44e0475237b652aaec9c9f1c70a72179", size = 160224, upload-time = "2026-08-07T06:19:25.401Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6f/23d33d381840ade968b92b683a5f3c9e882a58b731705c0b8b666ce214f8/bitarray-3.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54db9a52b2f6dfe0e4549ac1842c9551f030bfb929474d18e7b6cd83e05cfd55", size = 369452, upload-time = "2026-08-07T06:19:26.526Z" }, + { url = "https://files.pythonhosted.org/packages/9e/02/b4bfdbd22dc0ac9bd853dd43681d8c1aa93c8ee93021eb2dc8f99edf6204/bitarray-3.10.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:072093df2829ae426fd73c49761dee9e72d68d42a08102d61d04443413da96c1", size = 389854, upload-time = "2026-08-07T06:19:27.728Z" }, + { url = "https://files.pythonhosted.org/packages/eb/7b/77c6f9d8b7f2eadabcb82871812eca7417b55675f1dab5d8f3cc1163ce3e/bitarray-3.10.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0dae569d644af8e28576e2f750985aa480fc51a810ba0e3e2cb1bee72619a6ed", size = 404371, upload-time = "2026-08-07T06:19:28.936Z" }, + { url = "https://files.pythonhosted.org/packages/9e/96/cb01be7ef83c45c2578c58735898375e5d43b32cec6b5e6e6c4081a6424a/bitarray-3.10.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfaadcc4d72cb2855116ac7d164d62d87f668a43bc4f9034a21676688325ac80", size = 373703, upload-time = "2026-08-07T06:19:30.514Z" }, + { url = "https://files.pythonhosted.org/packages/22/18/d9816a6fdac717869896c63bb9e5b60be2470188f0288ee60b3cdf8dd076/bitarray-3.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7d6d66564add2d5f9405e754058a0acbbd4475d3de5b607c2f8fc32e82d6b000", size = 367129, upload-time = "2026-08-07T06:19:31.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/58/b26cad93fff9fd761a82f22c33ea91a55f9849210b358730d34e3a0becf1/bitarray-3.10.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1ed01b4b692abbfde7461314f473877604846195a06a2e155c5ec1bb7f1adc9c", size = 387259, upload-time = "2026-08-07T06:19:32.952Z" }, + { url = "https://files.pythonhosted.org/packages/8e/40/9f09360d18197b1d1c58d31e12a305ddf019d31a1b8c3c3a38451ac1c7a3/bitarray-3.10.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6e043d9d35d78891aa6e096f59c850c549d7da03c2a706b79834073806d170d7", size = 385708, upload-time = "2026-08-07T06:19:34.221Z" }, + { url = "https://files.pythonhosted.org/packages/c2/2e/4f158817042ff2a5ae7970bdc05ee8b1b09d695c10dba457b135618ba29c/bitarray-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8474e2ba90091424f1e3f05740939d2bdcce1319ad63ec4aba832910dffb4257", size = 370255, upload-time = "2026-08-07T06:19:35.477Z" }, + { url = "https://files.pythonhosted.org/packages/65/c2/5195493edc0a741b42dbcf1e95b7c15ece4c9a36179a67d2d7ebb461efe1/bitarray-3.10.1-cp312-cp312-win32.whl", hash = "sha256:8d3dcc6e5c24ba7b6f581446b153fd8575b373149bba6fbcbdc2f109d6a30417", size = 155969, upload-time = "2026-08-07T06:19:36.796Z" }, + { url = "https://files.pythonhosted.org/packages/39/bc/9f42846bf195b4fefebf95b26ebdb6f81e18871058caf3e470b0a973cd94/bitarray-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3138fc1695f4fc540ce8409e5478495d3ec1796ffcd2ec8254443cd2f6a779be", size = 165510, upload-time = "2026-08-07T06:19:38.006Z" }, + { url = "https://files.pythonhosted.org/packages/94/79/8da80c98f44b629721cd2fdf998f48112539f73f58f1c23bdeefbced03c6/bitarray-3.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:019d072e59b8f8cc8524794cccef857a31138e065c2cdbb902dde21f3e7e9744", size = 161195, upload-time = "2026-08-07T06:19:39.166Z" }, + { url = "https://files.pythonhosted.org/packages/f8/47/fa4457d3ba8af856c6d6ab409db28301d986726c92c29faed316bb973aff/bitarray-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b1edaf829d5fbf0640c211ce83171ade249fc4ea22ac5b87143697e443495c18", size = 163835, upload-time = "2026-08-07T06:19:40.298Z" }, + { url = "https://files.pythonhosted.org/packages/b9/dd/e909115ca81594fbd291c0240fb8727261356bfb5ff8edbf281d6fb7bed3/bitarray-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1174731b7c182cdc2a70ed860b98a912532fa9cd750459916beddbaa98a18c4", size = 159955, upload-time = "2026-08-07T06:19:41.501Z" }, + { url = "https://files.pythonhosted.org/packages/6d/92/bbe15d9da706dbcce9e11569d244930baafa689740aa9746355c5e4523f6/bitarray-3.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4b064620234f38ded80c455f2c77d62af932fe5fc14e0549ce5c41613d5509f1", size = 367725, upload-time = "2026-08-07T06:19:42.664Z" }, + { url = "https://files.pythonhosted.org/packages/13/6f/caf98c29374aaff77d2ef74d95cc5531cfa90dd102bd317c64b08629b0bb/bitarray-3.10.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:41d6b9670792383e6c604cf96dae9de44a79cbb009068f44bd1350edf4db9283", size = 388403, upload-time = "2026-08-07T06:19:44.035Z" }, + { url = "https://files.pythonhosted.org/packages/af/5a/6cd2f2fc8a4e94c29f2239c5f9a475560dd7feaf548b78306c8b1c9d345d/bitarray-3.10.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9601cac1be19a87056c3ebb53a6fd0e695b4c2f2482c95fbc21f45ac737b384f", size = 402344, upload-time = "2026-08-07T06:19:45.354Z" }, + { url = "https://files.pythonhosted.org/packages/e6/62/0049b42dbfa5cb8d584a930a611b11073ad74a34b12b0e1dd8542b56b05c/bitarray-3.10.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4145177fe23045e7f416eb7a2b12f34678b5e67e7efed619f79b384b85dd2d4a", size = 371608, upload-time = "2026-08-07T06:19:46.901Z" }, + { url = "https://files.pythonhosted.org/packages/a4/d2/372e8eb8ee0f02215d194136607b5923b44b5983aebada73e82433704aa7/bitarray-3.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:47ad63d66add4a1d39c75377b407c22027e72100a60f06c5bf854c6064c74875", size = 365103, upload-time = "2026-08-07T06:19:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/02/f6/97a561b8798b8f41f4b18b562474d8887df96d24b2bf5d0f978346bac6e8/bitarray-3.10.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0de09c7c2e366371546de3d88b8d4d5f7d2be38eebafd775981c46919171a0b4", size = 385059, upload-time = "2026-08-07T06:19:49.913Z" }, + { url = "https://files.pythonhosted.org/packages/cd/63/b9a3885b9c9a9f1816fcea765f33148c2e9c411c40faa3c00f2bd9dcf035/bitarray-3.10.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:66ac3632d2b79e57f0b762be0f331d871ff965e119a54e6e378025614736beb3", size = 383637, upload-time = "2026-08-07T06:19:51.763Z" }, + { url = "https://files.pythonhosted.org/packages/70/65/6c248b95306519a1eb56b03ce611dce96c999c70a2620d6f40dc21c2ba6d/bitarray-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5bbb74b86f4b7b017dd29161b6f05f32f7b49f3076b274de3cafb3180e11c990", size = 368124, upload-time = "2026-08-07T06:19:53.465Z" }, + { url = "https://files.pythonhosted.org/packages/a3/48/5ed21f63cb07aaf688b1609a84ffe95508f5d07ca89bf7270c0a09914aec/bitarray-3.10.1-cp313-cp313-win32.whl", hash = "sha256:e7bc260f090a57e5963427e29c47b32a5acaf89500e40e68809d981348e0c893", size = 155825, upload-time = "2026-08-07T06:19:54.68Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0e/f14360ee3929faeb5bd7a86b3b97e92558c48864ff210ca13704a27f5ef5/bitarray-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:a9a47f8fe495395176f694c2b3454848ff750783c599b7ad98c689f5c2065892", size = 165360, upload-time = "2026-08-07T06:19:55.92Z" }, + { url = "https://files.pythonhosted.org/packages/ba/40/7211826b639938c85fe189d984263959713a8955c284d6247a2295915a46/bitarray-3.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:13a58b399414422e9c0462f069511992044ae39ae4b33b176726535a0ce3fb06", size = 160977, upload-time = "2026-08-07T06:19:57.345Z" }, + { url = "https://files.pythonhosted.org/packages/bf/19/8309c1d9817311cdc90e6d79cc2df899114c11be1bc92a79b66ebea22596/bitarray-3.10.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:745b54b772c5e399f37fb22cf09d73f0ff1bc7dc2e25308628c9d3bb39a99e04", size = 163832, upload-time = "2026-08-07T06:19:58.546Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1e/1b19f398a6ab37fccaabb8af725e8bf9740c9bf6c25cde624e6731e4ec32/bitarray-3.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f0c03d3d90ec3abe36be8ef6c01a0dd7c47bede4a36a16d0c0bda9d152725219", size = 160209, upload-time = "2026-08-07T06:19:59.758Z" }, + { url = "https://files.pythonhosted.org/packages/9c/5b/3357c5e4098b98c84003b3112ef488c23b8c8c7b606353c1f49da30e9eec/bitarray-3.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6020bfca6e85b3ba551cc056ddb5cb76ae050bcad840fc541520cc3847d89a68", size = 367651, upload-time = "2026-08-07T06:20:01.456Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/04ddd055a29052a0780421922ab47f99488308f4bfde13153a5f3597cf21/bitarray-3.10.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:067122845b0d8e9d820a390c3516160a699dd6c31c2c71028cc787fcf0f1b632", size = 388405, upload-time = "2026-08-07T06:20:02.988Z" }, + { url = "https://files.pythonhosted.org/packages/b5/93/4e121148ad8d0155929764810ba6ac9eb689c75f192fa8997082c9425b17/bitarray-3.10.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0531dce521e00d0d9ee36984f8b198bcd3455f1b8b3cc635efe21114b88e74b6", size = 401716, upload-time = "2026-08-07T06:20:04.444Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f3/5d43ffc866b4398080452bc301ad39bacc87b608f9fa83ec55bce94b8b6d/bitarray-3.10.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6de68b321bcbd8f2cde7c84b0afca22855e3671ba750fc4610ae4f5cb78b57f", size = 371169, upload-time = "2026-08-07T06:20:05.798Z" }, + { url = "https://files.pythonhosted.org/packages/11/e4/f236234097a31369d22dd65b2f0d967d6fe63c20e9eb8a59e96e20768795/bitarray-3.10.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:11be8151782d755c60d65d53f81bc33f7c64dca0a5688657a8978afc667aad00", size = 365065, upload-time = "2026-08-07T06:20:07.239Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/75770317650289958b3cf9a6b98c747c3c1d24dc2b6c3c60078dbc5affb7/bitarray-3.10.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:e5dc3377a2ae3405961218dca5402ca4b7acf96d1873ffb312a4a21a7c3788b7", size = 385277, upload-time = "2026-08-07T06:20:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/a7/85/12255d8187f59776a24ce6247624ba1196c330a44396ab8cd6a87d511b0d/bitarray-3.10.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e2454206e6066dabace55bca254889d26f6d77fd91693c35efe503617c844e62", size = 383409, upload-time = "2026-08-07T06:20:10.147Z" }, + { url = "https://files.pythonhosted.org/packages/32/f5/fb2a1541248ec45683e1c48e320e49a61ef43ce23d9b59c2dabbb0000fb4/bitarray-3.10.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b2be5b44ce2e2b92d5d1a0eab0f3b2ddb9caa2ed4efdee4059a6a19c8b2da7b5", size = 367818, upload-time = "2026-08-07T06:20:11.466Z" }, + { url = "https://files.pythonhosted.org/packages/7b/0d/6af949fea9d726e6814898782efc55da0dd7c7eb5d305bd96aa5843f3d64/bitarray-3.10.1-cp314-cp314-win32.whl", hash = "sha256:e37c125a287de5e31d973fa77ed044f2438e413d98c52d8f15533beaad410fef", size = 154619, upload-time = "2026-08-07T06:20:12.852Z" }, + { url = "https://files.pythonhosted.org/packages/ad/46/ee499430e89062eaa79c1afc16ac1e9bf93a53a9beddcd9195b4abf43215/bitarray-3.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:d85840fd0999ff22a26b8bd0a6e4695d85ea8515af9e2be9f37afffd4ce7d12d", size = 164313, upload-time = "2026-08-07T06:20:14.213Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f5/dcd182ea4cfd11965917700e1944ce9ece1c255b90b03ba9e1e61bdc04ca/bitarray-3.10.1-cp314-cp314-win_arm64.whl", hash = "sha256:c9cd67a2a85f4c897b73714d4f856838c587d653e2cd67dba5a555f16390ef20", size = 160470, upload-time = "2026-08-07T06:20:15.491Z" }, + { url = "https://files.pythonhosted.org/packages/1c/89/1269cf6de1ceee6de98f22dfa6e10885014bc7580f81b5c827fae8a398e4/bitarray-3.10.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c93b6e77c5f16d28ef8d25551b6e6eaf162de51e76ed182c2186de14d367487c", size = 167063, upload-time = "2026-08-07T06:20:16.756Z" }, + { url = "https://files.pythonhosted.org/packages/17/1a/05ee259804b83c6a967beb1fe39e48ff3f6afa2abebe4faf2a8a4d6c7e9a/bitarray-3.10.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:333f57b1095d89d5d71dd862954457f288462fe7c69bccfe416e56812fd8f037", size = 163574, upload-time = "2026-08-07T06:20:18.436Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ea/dd37423c9e4b44c7234010c7fbd45e196e39381905314d3662790011c99a/bitarray-3.10.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a989ad017ac6aa2512e17f478d953de2a457bdfc25f5dc974d1d0caedce42921", size = 386189, upload-time = "2026-08-07T06:20:20.147Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/caf35ae9d79b87be8b7b2be36015ab65ace9a4ad770a1862932636986c1a/bitarray-3.10.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e2fe3018890da7c0c80a06259977ea7d112d3d06489bfad8209486d6aafafc8f", size = 405403, upload-time = "2026-08-07T06:20:21.612Z" }, + { url = "https://files.pythonhosted.org/packages/92/72/d7c217ac293353fc9a8b85e50c54c012eb4793c5e868cdcbd964a54ac0f5/bitarray-3.10.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b02744ea565e0878727ea5dcd9373397ade9fb8a9bffb81f0c0b79859e5b433", size = 418890, upload-time = "2026-08-07T06:20:23.143Z" }, + { url = "https://files.pythonhosted.org/packages/c8/5f/3d9afb63f87e3ab366de7f6934c55d5784ac51b1e3cae30b013bebfd0d89/bitarray-3.10.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:587727a15fe5d9b7d4938b816028d39a51b4660bf564cafd625da3a3457fb75e", size = 387815, upload-time = "2026-08-07T06:20:24.593Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c1/e8472b8a119e30a3317476beb2c3175421b936315641dccfaf1c6551add4/bitarray-3.10.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:11d9102d42b549a702852afb21df481eec7bf1cf870a04e74f9f26652ed0ad0e", size = 382009, upload-time = "2026-08-07T06:20:26.347Z" }, + { url = "https://files.pythonhosted.org/packages/14/e7/363bc1435f64c19c71904b969f51dfd8d0a2afa815c1d976a6c2140f148d/bitarray-3.10.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:c1e35dd7aa6e9a0c11bf7ab25ec26627db0111250632b2df859ce5fcd00b4178", size = 401433, upload-time = "2026-08-07T06:20:27.993Z" }, + { url = "https://files.pythonhosted.org/packages/28/09/2cb33a28fe665a8e4541db7f28fb241b44e8a8f8159cb9baec81c85e2c64/bitarray-3.10.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a11e3a8806f221598b05714181c79d4ffbeb984136231b4cdce2435a17772e67", size = 399566, upload-time = "2026-08-07T06:20:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/f9/50/e65b0069c4cca0c964ca35b9b645e9f74afdba5941f14d2c266633d228eb/bitarray-3.10.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:95f8913893cf8c9a7c161b9bcd922e42e4901ea2a768b763e21fa8f9765917ee", size = 383813, upload-time = "2026-08-07T06:20:31.139Z" }, + { url = "https://files.pythonhosted.org/packages/de/9e/3f86a88b7814e61a6a04e7c85f80dd8c603d7027cc8fd959ad6f611e6406/bitarray-3.10.1-cp314-cp314t-win32.whl", hash = "sha256:06a924dad0562df6bf8a22b22a863b3b9f9f73d118ca1bdbd69322e05bcae0df", size = 157972, upload-time = "2026-08-07T06:20:32.525Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dff4b97c2ae91062544e95d52f5c447649c01fc7b1ed56c2f7dc7b67e9f8/bitarray-3.10.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a0cf84cfbefc6a8238062af0ff06688e5b63884ff5c2eaf4c9ca5f74423c4c3c", size = 167865, upload-time = "2026-08-07T06:20:34.088Z" }, + { url = "https://files.pythonhosted.org/packages/70/3e/e95e7891e628d90c69a4b9e11af7aacd4590b23a36965f4a21b3ab5917f8/bitarray-3.10.1-cp314-cp314t-win_arm64.whl", hash = "sha256:d5b6d177473ad758637a9d03205f99e3b9a16fdec949b32a8814e8ecf6a3523d", size = 163676, upload-time = "2026-08-07T06:20:35.448Z" }, ] [[package]] @@ -495,14 +517,14 @@ wheels = [ [[package]] name = "bleach" -version = "6.3.0" +version = "6.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/3c/e12ac860709702bd5ebeb9b56a4fe334f1001246ee1b8f2b7ee28912df7d/bleach-6.4.0.tar.gz", hash = "sha256:4202482733d85cedd04e59fcb2f89f4e4c7c385a78d3c3c23c30446843a37452", size = 204857, upload-time = "2026-06-05T13:01:13.734Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437, upload-time = "2025-10-27T17:57:37.538Z" }, + { url = "https://files.pythonhosted.org/packages/58/9d/40b6267367182187139a4000b82a3b287d84d745bccd808e75d916920e9d/bleach-6.4.0-py3-none-any.whl", hash = "sha256:4b6b6a54fff2e69a3dde9d21cc6301220bee3c3cb792187d11403fd795031081", size = 165109, upload-time = "2026-06-05T13:01:12.504Z" }, ] [package.optional-dependencies] @@ -512,15 +534,15 @@ css = [ [[package]] name = "blessed" -version = "1.44.0" +version = "1.48.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinxed" }, - { name = "wcwidth" }, + { name = "jinxed", marker = "sys_platform != 'win32'" }, + { name = "wcwidth", marker = "sys_platform != 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7b/73/445c4ef32565d2f5af49f18c4163a32850c9328774ee0af74ed081d4ba15/blessed-1.44.0.tar.gz", hash = "sha256:d3b5037f0143eb7c80b2000be5bcdf86161af68aed231b91deadbce4e7379785", size = 14031337, upload-time = "2026-05-24T02:06:30.832Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/1b/b7c3971c1b34e6fe32ffcb00be769769cbb8ccaf0678aa9bb6f23aea677a/blessed-1.48.0.tar.gz", hash = "sha256:5ed4c0d40d0121669ef949e4f23465982614eb821bd110d1d5a98ed97dea13d8", size = 14036135, upload-time = "2026-08-07T17:35:44.794Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/c3/e8effb323af40a5d8e85ab557da2f0475f12a31f3266f28d91d0bf406963/blessed-1.44.0-py3-none-any.whl", hash = "sha256:e1d2ed93d3d90d0a1494a8b134d188c83fb89ae25590af638b921e8c1c8fa223", size = 130232, upload-time = "2026-05-24T02:06:26.458Z" }, + { url = "https://files.pythonhosted.org/packages/a3/3e/6e6ba6c809688332d2f8450371e672c76f7e8e73574aba9dfe89b55eb900/blessed-1.48.0-py3-none-any.whl", hash = "sha256:c4ce01cba220f41d2ff244e9829cb4ef2390a26ace8ce1687b8bced1613676e5", size = 131267, upload-time = "2026-08-07T17:35:42.469Z" }, ] [[package]] @@ -534,39 +556,37 @@ wheels = [ [[package]] name = "blosc2" -version = "4.3.3" +version = "4.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "httpx", extra = ["http2"] }, { name = "msgpack" }, { name = "ndindex" }, { name = "numexpr", marker = "platform_machine != 'wasm32'" }, { name = "numpy" }, { name = "pydantic" }, - { name = "requests" }, + { name = "rich" }, { name = "threadpoolctl", marker = "platform_machine != 'wasm32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/19/e5ea8014688a1b0f3be16b662b6d0837da191f8fec79f3ca7c9452457ffe/blosc2-4.3.3.tar.gz", hash = "sha256:7c477482f10506a3b1e8868cb705b45caa64d13f42572878d0e4f26978ada55f", size = 5366402, upload-time = "2026-05-21T12:06:06.502Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/e1/84f6ede106afadc0e2c6a43d35b96ed6909149023f9a6a929175ad13a503/blosc2-4.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5ca83094ce1e2885f4a44eae6e2689959af67aee22b3f69af64447206dde3d9", size = 5863526, upload-time = "2026-05-21T12:05:32.225Z" }, - { url = "https://files.pythonhosted.org/packages/da/cc/ca6129956980fc6148d6b1983bc5dfc302f73bc734b376069eb560d170b6/blosc2-4.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2153d08ba45f4a7bb632fa1eac9a7204b438336d7c7188edf3162f4a4087d719", size = 5026679, upload-time = "2026-05-21T12:05:34.244Z" }, - { url = "https://files.pythonhosted.org/packages/7f/d4/577da50cb201d9e5ca79365e6434020bb51284a0b73097bf995d75ec9096/blosc2-4.3.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8813f634d0f5b2021d427e3edefa3146f3fdbe4d2404edf9cba2be79e81bd3b1", size = 6247092, upload-time = "2026-05-21T12:05:36.046Z" }, - { url = "https://files.pythonhosted.org/packages/26/96/92119e6b279a88547a51eb99726ecae1ada839bf4fbcc2856503e2558e80/blosc2-4.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ef89bc8fadf6e586fa38dfa998f8b6091aae653c41ef85232814e59ed6e9db85", size = 6545296, upload-time = "2026-05-21T12:05:37.853Z" }, - { url = "https://files.pythonhosted.org/packages/1e/87/32a92f25cdcd94b42c65850389043de01c54fcb34292010f6bdf41f2ebc8/blosc2-4.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:5bde415c6c3838959173b4a2a93811c1b63d32eff4ee56f998f6c731eef5bbcb", size = 4127922, upload-time = "2026-05-21T12:05:39.904Z" }, - { url = "https://files.pythonhosted.org/packages/35/55/9178c8ef9a32613cd37a83275f584e1619df583c74678c1d47b6723e13b9/blosc2-4.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b21d6d3fb77b53d36f35a315bc4c4437a9f40cf35a76966871f5a8bdfbb07262", size = 5861725, upload-time = "2026-05-21T12:05:41.709Z" }, - { url = "https://files.pythonhosted.org/packages/ee/81/c30a9f3000e65acd677d0831cf23eb5d80d575d2cd5f05aa0ced29b52990/blosc2-4.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f4b5bfb37121e46fc855d273a786cfc0c731802220f254241ac01ee1384fe06", size = 5025052, upload-time = "2026-05-21T12:05:43.964Z" }, - { url = "https://files.pythonhosted.org/packages/78/5f/b5b93cd123953120df0aa992fa93a7f41f1525c74f348c95f4d8e25721ae/blosc2-4.3.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a9458facbf4323377cb32b25478d200996b699e20338087291ca35aea32c8da8", size = 6254481, upload-time = "2026-05-21T12:05:45.363Z" }, - { url = "https://files.pythonhosted.org/packages/91/19/71fe5d7e517f30b595bf9e33154959eda23910db36991728fde51bdbdf42/blosc2-4.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b1bd93b4c7e8a96afddc17883e56a38e0b799876756371f64f94e639a51aa7e5", size = 6548217, upload-time = "2026-05-21T12:05:47.03Z" }, - { url = "https://files.pythonhosted.org/packages/98/88/337a23227257bc17a8a80c33fbaa7186534d75034da74c1ad5ea7e74b9f1/blosc2-4.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:0a4aa9fad69b8c125e959d005989991c3230dfa456caf21bb81186be9e2f61a2", size = 4127867, upload-time = "2026-05-21T12:05:48.552Z" }, - { url = "https://files.pythonhosted.org/packages/5a/6d/2e811ee8dc814cd9204058bb453961b19920f9ba222a39900b8975155d78/blosc2-4.3.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f1b37cdfc41c1da50b05b674416e495efb64054554d109433e3818310da99737", size = 5863540, upload-time = "2026-05-21T12:05:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/ec/a4/5f61f69efb96c18185f5d1c5919ddb1183c33ea567eb5431762a93621c8c/blosc2-4.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c03b207730294e5809e872c5a5bd65f6d3370fdf101f1e6136e83621412d931e", size = 5027561, upload-time = "2026-05-21T12:05:51.744Z" }, - { url = "https://files.pythonhosted.org/packages/63/3a/b1f4e32b7d2947decba824a1ac34985713b7596d0986cbb22252fb67a128/blosc2-4.3.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d1834c6578d45bb50f48a293dd87fcc194cae5b45851ed07bb7e4116373d3f5b", size = 6266314, upload-time = "2026-05-21T12:05:53.278Z" }, - { url = "https://files.pythonhosted.org/packages/7e/41/e334180c1ba6f4ef1b20c6551e90aa3267d2996cff9e3f655425f35a49a9/blosc2-4.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1552a0257e4c9fc9b9594bbab5d8b908937a7a8d63bf3e33e8720fe59b4d0b03", size = 6549380, upload-time = "2026-05-21T12:05:54.866Z" }, - { url = "https://files.pythonhosted.org/packages/61/7f/35c785444704d2876402723e311ad14d387de0592682327978c10c0426a2/blosc2-4.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:fcd1bbc598542b2530fbd9fe5bf8146d15f01af4c2bcb12d2610160d218535d1", size = 4211185, upload-time = "2026-05-21T12:05:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/44/9b/2823fd88862e9f2a54dd89fea98c051a3741e36bab5ad249e307eff5fcef/blosc2-4.3.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d0c8dc54155331a439c57a8858250c2af692ddaa39361c043c0544e5a2ea692b", size = 5901833, upload-time = "2026-05-21T12:05:58.04Z" }, - { url = "https://files.pythonhosted.org/packages/10/57/c67252bce832c0d6b3c54e4bfca7a6129037be64f78522f72b3fb2eec3dc/blosc2-4.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:36e03791fa1882ef25a5d0e2c3ed92e1b1265f05fb33094aa4c6b15dd5d7bf82", size = 5073470, upload-time = "2026-05-21T12:05:59.638Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c4/1cb5ea5fed31740d9d7652944367703a1ff5cd76e74f15215e4691fd959e/blosc2-4.3.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:69afc003043df7bc090f096ad84aa952467025beb8b3bc906f77eca2e2728d07", size = 6229249, upload-time = "2026-05-21T12:06:01.512Z" }, - { url = "https://files.pythonhosted.org/packages/8f/f2/bfe3795f19b7868f41d4cfd98dbf551b771d78c9380adb39b97e08677f9f/blosc2-4.3.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee03608640c5e0363dd16f69ee8d5473d4a17d2a7b4a66bd9ac82fcfcaad6afd", size = 6519227, upload-time = "2026-05-21T12:06:03.338Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a2/57590c5eba352614e4cff272d4b28b12b55bdd2fe1e1ed459b113d87cfe6/blosc2-4.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:322afea80b919e48b67b2730ee927449793d2856d65e54b9be67dfdfb610f2df", size = 4270602, upload-time = "2026-05-21T12:06:05.182Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/ec/0f/c6c1c3decf8b8ecb6630296da81b1c8d9d0212c7f8dcfc0d6d4ff6ef038a/blosc2-4.11.0.tar.gz", hash = "sha256:3c610b076ad0422d861ff10732013c7c3461135968c3c442630542e71249a4a2", size = 6820440, upload-time = "2026-08-12T06:32:35.029Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/00/0b060c0d9dd7db22d1dc04629d1ba05fa6a38626e74621d43693955d435a/blosc2-4.11.0-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:caab9e379c5b1d41a721e30403885434c2ded9067265aa2ba3cef9576cd9fb12", size = 5439003, upload-time = "2026-08-12T06:32:06.847Z" }, + { url = "https://files.pythonhosted.org/packages/cb/59/36ba17172c6464ab9aae894d52841b5b71155a90cdd9db5007890ea273a6/blosc2-4.11.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:255568f149b74686a5de615eb91176b204c1efc0f66ddbb7d6621c2ef451e225", size = 4843423, upload-time = "2026-08-12T06:32:08.875Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2e/7f34148cf478b02d82f7e542fe0f706c98c93a3a24ab08db9a53a8d5ea25/blosc2-4.11.0-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:571876df978732371c2b53e015483a812d161d8b6939a1393d59318df9df75b3", size = 6070494, upload-time = "2026-08-12T06:32:10.355Z" }, + { url = "https://files.pythonhosted.org/packages/ac/48/b8a4ed7c3b1c1464fe2737449a73ab66b8fd9a2625f2dcf6d568135b4890/blosc2-4.11.0-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d17cb079973e0843e669cbd553be7e7e33ce815efb6a3f1f9f2167e41f1bf1ac", size = 6511059, upload-time = "2026-08-12T06:32:11.846Z" }, + { url = "https://files.pythonhosted.org/packages/20/40/8bfdf64c0fd942a5eff6e1f6cc033dbd4f8c998e53f956cdffa5f9dbea37/blosc2-4.11.0-cp311-abi3-pyemscripten_2025_0_wasm32.whl", hash = "sha256:a232274ac0813037ba2fb60317bc03dfb459fa469f330aa08ba8d03124aa6d1d", size = 2502308, upload-time = "2026-08-12T06:32:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/8e/63/ac6608416d2064d637da7fb80abacd3b10edbe18fcb70b0945d71dd5871d/blosc2-4.11.0-cp311-abi3-pyemscripten_2026_0_wasm32.whl", hash = "sha256:3beaa151b91b15fa516acef69f55d74bb7dd13b3dfeacfdaf032278091c2264f", size = 2499515, upload-time = "2026-08-12T06:32:14.82Z" }, + { url = "https://files.pythonhosted.org/packages/74/0f/dfad55037ad5bad4052fe6354b4466b7fee5e5fe4c36d0ca04f272779b7b/blosc2-4.11.0-cp311-abi3-win_amd64.whl", hash = "sha256:67fdd3e7e66004ba25adec0ade5916c8a312b9c9de72d024a63d6476051f0b75", size = 4525401, upload-time = "2026-08-12T06:32:16.341Z" }, + { url = "https://files.pythonhosted.org/packages/fe/d8/e38d8cf7b91e0c9fe7237503eedbef39198338989567b90e658c9b682cba/blosc2-4.11.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:feaf36d970b1ad4c26eeac2ca8d7df2181e9faf85bc48a3b84cda0036581f407", size = 5583731, upload-time = "2026-08-12T06:32:18.176Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3b/7e25d5b92fb910de1ff169e9d36c8ce3711e5201f05823132a60f0f22ce9/blosc2-4.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cd936aea81594c72fc2924eb7ed95083676ce04609fdce3fddc5e153b22446f5", size = 4959321, upload-time = "2026-08-12T06:32:20.025Z" }, + { url = "https://files.pythonhosted.org/packages/c8/89/69412d053a93d571533e2221bf6cc2b721c92f322c46358048463c5c48e8/blosc2-4.11.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a8af221fbeee11478e22832f62996a2d0817fd94a02aed47bc4e0c8a5e8c9143", size = 6024417, upload-time = "2026-08-12T06:32:21.699Z" }, + { url = "https://files.pythonhosted.org/packages/f8/3f/169e085b1fccbd2375db7d699e2c9c7411dae0e9ca17ea44bd71a7e01f11/blosc2-4.11.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07efb5c543f582825d8acb63fb3adf9799131893c8f04d9425371238b03e8a8b", size = 6459468, upload-time = "2026-08-12T06:32:23.52Z" }, + { url = "https://files.pythonhosted.org/packages/1c/d6/f23a3fa75946c97de151e987671a6bcd22b4471de17f3288cb788aa9ed19/blosc2-4.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:487f70ce2983e8a4b60b8bf5b4b3fd5bbb799729367d5505799db046f6f98338", size = 4716207, upload-time = "2026-08-12T06:32:25.07Z" }, + { url = "https://files.pythonhosted.org/packages/7f/75/927b25102ecacf49bd82023defff7fc1439337ca4301ba8541ab060f7d0d/blosc2-4.11.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:1ff627f1ab32a4bc6b38cd4efc0862f0740b7d3ed3f04edbf81255817b212ae9", size = 5582783, upload-time = "2026-08-12T06:32:26.719Z" }, + { url = "https://files.pythonhosted.org/packages/c3/60/d36c181bc6df8dcc18bfc33687a3209ff3a6b883d26b0af0908203ccb174/blosc2-4.11.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:0f7326bc195e13f3ecdad154f6f196b7799d4f2a93a50e98bd8ef98cbb036ad4", size = 4957704, upload-time = "2026-08-12T06:32:28.351Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f7/0c5f700420763af8ebf7564e10f42060faadf592fb8f6ecaa1fc7662dc86/blosc2-4.11.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0504eafdb147b49542be957b6f52cf19e9f72a20d6bfe3b496802972f0d2ab9", size = 6020140, upload-time = "2026-08-12T06:32:30.141Z" }, + { url = "https://files.pythonhosted.org/packages/93/da/8d25c3d928d096142fe433e264fa70e7f6c139fdebeb619b69dbaf1092b9/blosc2-4.11.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ddf049d65d8cfe1c01b6b6db615559048912f03932898c7d61fb46d3eeeb6d1", size = 6448013, upload-time = "2026-08-12T06:32:31.886Z" }, + { url = "https://files.pythonhosted.org/packages/56/f5/984777d20241905cb89b0cb58bedc0f39275ee2821fade1ea8259927691f/blosc2-4.11.0-cp315-cp315t-win_amd64.whl", hash = "sha256:88931a773f41a7415bdc78de1e38820872d3ededcf9ee63f1a1a9d033716e396", size = 4716569, upload-time = "2026-08-12T06:32:33.454Z" }, ] [[package]] @@ -649,16 +669,16 @@ wheels = [ [[package]] name = "cachelib" -version = "0.14.0" +version = "0.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/a5/5eb041dbee71766704d44cf5dfb6950ab018be0fd02cd763ade09869e33c/cachelib-0.14.0.tar.gz", hash = "sha256:73fedcadd0ba818fb2bb9f3c7cd5fcc2a71e86286f1842f55f28d500faee17f1", size = 170320, upload-time = "2026-05-09T16:16:02.896Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/f4/b20875916b83f68775093554ce2544b12255396ba69abd93d8903cce0feb/cachelib-0.17.0.tar.gz", hash = "sha256:f3c7dc8d3c1132ab699681ffdf8a52d341d9425ac1401c538cf0b1d87b1677c8", size = 135529, upload-time = "2026-08-24T00:40:51.851Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0e/5493f2078dece836979f4e28e3b2066064a6d66691d4b0888efc7c62f702/cachelib-0.14.0-py3-none-any.whl", hash = "sha256:4671000b032baa8fac47ad19850f4f522785cee764b4e04c5cfe8955a18d67de", size = 22746, upload-time = "2026-05-09T16:16:01.68Z" }, + { url = "https://files.pythonhosted.org/packages/f5/87/9110494f2816d3f2907ac9a0a0a5387f34bc4fa9755721ad09f0a2c99e9b/cachelib-0.17.0-py3-none-any.whl", hash = "sha256:f83909b6f78741c3a5d76d292d13bf24964ffb13e00ea1d18f92e20599766ce0", size = 28221, upload-time = "2026-08-24T00:40:50.237Z" }, ] [[package]] name = "cellpose" -version = "4.1.1" +version = "4.2.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastremap" }, @@ -675,148 +695,234 @@ dependencies = [ { name = "torchvision" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cb/b0/3dde4f82033a4b8e35a48d7419aa9c4f3e7c1100055a135790a41c47f19b/cellpose-4.1.1.tar.gz", hash = "sha256:859c732c8edede78ec7ee6537c5cfb18ab54f3dc01846adc10edca0cec124094", size = 4252891, upload-time = "2026-03-31T16:40:23.181Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/e4/3d4606883a5489b86fa6ab5f65b9d0a243810f64efb934033fe425089d5a/cellpose-4.2.1.1.tar.gz", hash = "sha256:229eedea3977184202b2c87b3bd41c609facd742c7203bb4ad3cebd7b6bc6839", size = 4441350, upload-time = "2026-06-14T14:25:15.082Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/33/c2fbe5d074e2bb95bacdada02ebfa05915d211b67ab590419be1449d2115/cellpose-4.1.1-py3-none-any.whl", hash = "sha256:52d33d3c890df5572bec029ec4211388611b313c58f7b7073f47622b9befc32a", size = 213394, upload-time = "2026-03-31T16:40:21.147Z" }, + { url = "https://files.pythonhosted.org/packages/cc/20/d9d1fa1abffc8dab4381116ea0d91e8f8e4315acc038b76679608c097649/cellpose-4.2.1.1-py3-none-any.whl", hash = "sha256:6c5c5159fd459115bee390ffb01d94d5e1006b97c211bf3c1a7b37d5395a1a13", size = 203334, upload-time = "2026-06-14T14:25:13.797Z" }, ] [[package]] name = "certifi" -version = "2026.5.20" +version = "2026.7.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, ] [[package]] name = "cffi" -version = "2.0.0" +version = "2.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/69/43965eccfdead3b9220015fd1320e117be8c6ed01a62ffab76eeb752f5d5/cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0", size = 184821, upload-time = "2026-08-03T21:19:44.887Z" }, + { url = "https://files.pythonhosted.org/packages/54/7d/16e5a096677b5e313ca80cd5e5170efa3ea44624a82bb111925522da64b1/cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf", size = 184719, upload-time = "2026-08-03T21:19:46.129Z" }, + { url = "https://files.pythonhosted.org/packages/56/e6/8941622732edec876dd17d0453dce07317ae96db34f2ec1436c9d3785986/cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a", size = 214799, upload-time = "2026-08-03T21:19:47.218Z" }, + { url = "https://files.pythonhosted.org/packages/44/de/f98430906df1545ffde0d543dd124a7a439bc2cd32b36b9c53f805df7333/cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890", size = 222389, upload-time = "2026-08-03T21:19:48.331Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/717f1526b9957b34456313c31645c5b82b8fb5c3fe9e4752999be7128bfc/cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50", size = 210249, upload-time = "2026-08-03T21:19:49.543Z" }, + { url = "https://files.pythonhosted.org/packages/64/b3/f8aa4f3e34986c7e4ec45072d1b1b9dd295b6b18007b45518d79726dd725/cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e", size = 208775, upload-time = "2026-08-03T21:19:50.918Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/dceb9dd5b231e1da801793f8acc9f3c52a7e1afe40bb1aae37e02b0faad5/cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf", size = 221822, upload-time = "2026-08-03T21:19:52.054Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/6cd24ae3be000a634109c247d1475d62e5616d0dc78c82770942ec384248/cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517", size = 225232, upload-time = "2026-08-03T21:19:53.109Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/3fa190537004dd7f0ab860a6dc7c0175b8667f68d1e618a46f5498d30250/cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735", size = 223597, upload-time = "2026-08-03T21:19:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/0bb75b7039588c074b37ae99f40d9bfddf990ecb2fbc346ebccd2e56b9be/cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e", size = 175292, upload-time = "2026-08-03T21:19:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/615cc094e2fb508cade7de88d3b4f6c4ec2bab695c97bce9153dc65aadf5/cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a", size = 185919, upload-time = "2026-08-03T21:19:56.89Z" }, + { url = "https://files.pythonhosted.org/packages/70/c6/d0ea84713fe46b243a436a18fcd47d639732747e21635c8a27191b06dc30/cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80", size = 180093, upload-time = "2026-08-03T21:19:58.155Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, + { url = "https://files.pythonhosted.org/packages/d3/7b/d6bbf82b8b96e7391438898c42f5bd96dd02030fd5b64937d248220003e2/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c", size = 194064, upload-time = "2026-08-03T21:20:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/94/e6/bcc91b283be94735e268487a054004f0aa19947b6348fa367db53230abc8/cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb", size = 196720, upload-time = "2026-08-03T21:20:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/d9/99/c4b0c17cacdc9c3b8f280026286a9826d6a208c0f047591a3c3ce99b91fd/cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54", size = 184964, upload-time = "2026-08-03T21:20:19.708Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a9/9db617d05d7367c1ad0ab00b3aa6e6f9281edd689b4ee9ea0e5a84e89c97/cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72", size = 184962, upload-time = "2026-08-03T21:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/b8/b42132ca113dc567d37684437b46ca1dafc885902b02a110a02d5b511857/cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1", size = 222328, upload-time = "2026-08-03T21:20:22.118Z" }, + { url = "https://files.pythonhosted.org/packages/80/10/c5c0cbf0a657aecf59ef511409734230bf556f05a0d6c9eed7aa5c0a0166/cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062", size = 209985, upload-time = "2026-08-03T21:20:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6c/bfa0b87b03b9238148beca990292843c9396ba069b54496596594173de7b/cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03", size = 208530, upload-time = "2026-08-03T21:20:24.628Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/4e7d553a7ac4b4238b38b3c1b80d486e9d4436f8d2acbf87a0997fe3f402/cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96", size = 221525, upload-time = "2026-08-03T21:20:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/82/1d/a4aaf9babd75acb4d5f223bff71533bee748dd770a382619a798960ee9ba/cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527", size = 225053, upload-time = "2026-08-03T21:20:26.985Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/5dc0e7bdd18e22107054288283380fc97a06ae3f1656a106908d666a3c88/cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13", size = 223213, upload-time = "2026-08-03T21:20:28.277Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/d0061c364cde06ee43168a0d076ac1da512cbc380d44767b844ba34fe2b6/cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c", size = 177682, upload-time = "2026-08-03T21:20:44.288Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1c3e01e3ba14c39f6d10bfbac52753b7e22259e38088e5cfe1d704918690/cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48", size = 187949, upload-time = "2026-08-03T21:20:45.623Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/da4e39efe18eeb89cf580ea9cfc66b6a7c3eadb808fc0cc1d3a295cb5a5d/cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836", size = 182947, upload-time = "2026-08-03T21:20:46.955Z" }, + { url = "https://files.pythonhosted.org/packages/23/59/40338bf421c5accea1d45158170c87006ef1cd371b05c077e76476949728/cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3", size = 188504, upload-time = "2026-08-03T21:20:29.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/47/5ecf1023850036e674c77ec4de86182d309ae344e39e7cba984b7df5d647/cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2", size = 188259, upload-time = "2026-08-03T21:20:31.291Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9c/92934c3bea9f785b23eba304538c0b4d37a2a96d2431eb3a1bc87a11aa19/cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94", size = 223864, upload-time = "2026-08-03T21:20:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/4d/45/ba4c93527bc38616a8bd36488acb69a2212d60486794f0c1f318949bbb76/cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc", size = 211538, upload-time = "2026-08-03T21:20:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/b6ef565e452acb932fb0cb5443f44a78efbd1233e566f02b5a83855e9115/cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29", size = 210688, upload-time = "2026-08-03T21:20:34.974Z" }, + { url = "https://files.pythonhosted.org/packages/9a/95/eff5f0cee78d2eabc7eebffec40d3fc1876b5f3c95582e018bb4b99601f2/cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676", size = 223803, upload-time = "2026-08-03T21:20:36.564Z" }, + { url = "https://files.pythonhosted.org/packages/fa/01/579d39fb8bef00a335a23d83757b44feb24cd6345a2c451b64cb67b9c362/cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e", size = 226763, upload-time = "2026-08-03T21:20:37.816Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b0/0b44f47c60b01b57b6e2bbd92343f13a85a1d93bc46ccf6e47e244acd99c/cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f", size = 225688, upload-time = "2026-08-03T21:20:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d2/3b7176cb570a1d3e27faf67b72f591af508036e0d8b2be2ef9af9e8c84bb/cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4", size = 182868, upload-time = "2026-08-03T21:20:40.388Z" }, + { url = "https://files.pythonhosted.org/packages/56/78/31f00c1bcd97c9bbf55f1bfdf5bc809a5de8887473e90bb9960dca825e80/cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e", size = 194104, upload-time = "2026-08-03T21:20:41.725Z" }, + { url = "https://files.pythonhosted.org/packages/7b/1b/58496f2ed0a35de575250c02a43ab3cc2c04d494a88fed31c1cabc0fd176/cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5", size = 186402, upload-time = "2026-08-03T21:20:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/9ebe220eab48a093d1a5a5e339ab0dc7316eef3bb04d63c42f0251b61f50/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d", size = 194043, upload-time = "2026-08-03T21:20:48.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/69/844bad3ece306c4782c2ecb93597035b6690d48704b803914c199da1e8b3/cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b", size = 196737, upload-time = "2026-08-03T21:20:49.457Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8a/af668013284634733f02d683458a0728739c7d6ddb5e14cb0c20832266fe/cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4", size = 184933, upload-time = "2026-08-03T21:20:50.639Z" }, + { url = "https://files.pythonhosted.org/packages/0c/75/2f5207ff6d1a613133b23a5203cc0c2a628313b5eb3974d7956ae3c57950/cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8", size = 185002, upload-time = "2026-08-03T21:20:52.173Z" }, + { url = "https://files.pythonhosted.org/packages/e2/31/9e1313b0a6e30e91b3b3d3fff51ae99c857c07738e3afcce1f7334e1b7ab/cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6", size = 222271, upload-time = "2026-08-03T21:20:53.462Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/f6234a833e6e08c7007003074723c406559eecf9b48dfc97471e5a8eb7a0/cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80", size = 209919, upload-time = "2026-08-03T21:20:54.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fc/5f74e293fced6edb51af3a46c4ccf6c23c9943774ecb375ddbd522c76add/cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779", size = 208529, upload-time = "2026-08-03T21:20:56.066Z" }, + { url = "https://files.pythonhosted.org/packages/44/16/29e6d01b388bef055ecd6ca8244b3f4d336bd09e92d5d892187b9601084e/cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399", size = 221630, upload-time = "2026-08-03T21:20:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/a4/18/fa7f1f6857d5eb88a4ca99ffcbfb7c387a287ccc154c64a73e86314745d7/cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688", size = 225134, upload-time = "2026-08-03T21:20:58.675Z" }, + { url = "https://files.pythonhosted.org/packages/e0/9f/e8e3dfa04a1b4c241f8c91faacad872b4d4efd051d49764ad4e2fd4b9fea/cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7", size = 223197, upload-time = "2026-08-03T21:20:59.968Z" }, + { url = "https://files.pythonhosted.org/packages/f8/7e/8debeb04f1ab9fe2a6963964cd6f1aaf7192627b83926586a6a4e089c9fa/cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac", size = 177683, upload-time = "2026-08-03T21:21:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/e0/31/5158704cc474ab65c1647932e88be78dc0873f47130e253be38bcaf13d01/cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960", size = 187897, upload-time = "2026-08-03T21:21:16.108Z" }, + { url = "https://files.pythonhosted.org/packages/cc/4b/b3a2da8570c704ffc0f9762cdc3ec0f02c8573798e0b5cf7f11c82bbb70f/cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1", size = 182935, upload-time = "2026-08-03T21:21:17.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/ef/5443574510a1207e6f6bc38ba6e1f1de36cb48fef07b2728bb896a21f430/cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc", size = 188464, upload-time = "2026-08-03T21:21:01.163Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ae/a56fa8c4686ad50e148fcbc8d3ae0d03915ff5c30d795058988c24118cef/cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab", size = 188262, upload-time = "2026-08-03T21:21:02.382Z" }, + { url = "https://files.pythonhosted.org/packages/53/b2/6187f46f2912276a3ae284076109cc5c8680482f11f766ccf26db4a86427/cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e", size = 223779, upload-time = "2026-08-03T21:21:03.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f6/c3ad28bd19f77047a03084424fbd4cbe997303267c14423737324be0385d/cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358", size = 211520, upload-time = "2026-08-03T21:21:04.863Z" }, + { url = "https://files.pythonhosted.org/packages/a0/cd/ccac9013a5bd9fd764de118674ab9c805b5ca10c19270d90ee273f8b2240/cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231", size = 210673, upload-time = "2026-08-03T21:21:06.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/86/2976131c639aead931c5bee5aba67e4b09fbeb8018b6f282f70803f923a7/cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6", size = 223835, upload-time = "2026-08-03T21:21:07.539Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0c/33a7aeab2f9c76918c52e084beb39c570db3588133412929e8ec06fab90b/cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94", size = 226705, upload-time = "2026-08-03T21:21:08.774Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/2cde30fdde421130bfc18f70395731a6e6b2053c6a1978a5258ff04e72fa/cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5", size = 225539, upload-time = "2026-08-03T21:21:09.911Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cd/a361394c94b2129d604bb846f624a8e88255a3ee33129c434a00d715e64f/cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66", size = 182707, upload-time = "2026-08-03T21:21:11.226Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/ba2b299993c26577d529b6ae29841f9e15b9fcf004d65f423f4fcf94ade9/cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3", size = 193772, upload-time = "2026-08-03T21:21:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/aa/29/35e016098c814cd93de9cd320c66b5bfba14dc6ecedd3cb518fa7c408c69/cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692", size = 186360, upload-time = "2026-08-03T21:21:13.636Z" }, ] [[package]] name = "charset-normalizer" -version = "3.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, - { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, - { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, - { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, - { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, - { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, - { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, - { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, - { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, - { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, - { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, - { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, - { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, - { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, - { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, - { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, - { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, - { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, - { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, - { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, - { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, - { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, - { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/27/78873dc8b6a56357517b74b6bb9568b80450e7bb4f6ef7e3fa9d22aa0bd7/charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f", size = 344456, upload-time = "2026-08-15T08:17:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/be49ada26b1f0232d57aa89bbebf997a5cc2332a5616b6eca26ff680044d/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa", size = 238530, upload-time = "2026-08-15T08:17:11.563Z" }, + { url = "https://files.pythonhosted.org/packages/76/84/6f1290fa07ae6978d3960caa3eb1b8019bf9284ab7c2297b00c099ef4250/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369", size = 230200, upload-time = "2026-08-15T08:17:12.919Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a0/47b18adeed31c8f16ba9700f32c1b18594cfa09f47eb672a488c273c22bf/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893", size = 262222, upload-time = "2026-08-15T08:17:14.571Z" }, + { url = "https://files.pythonhosted.org/packages/38/fe/341861ac118dae06f3ec0eb487488af52128f2ef2faf0b11003944d22259/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0", size = 258951, upload-time = "2026-08-15T08:17:16.158Z" }, + { url = "https://files.pythonhosted.org/packages/6f/89/bb5108dc6c3651dca963f2b0a3ba19bbcb370c94e1b6d3e0e844a58e6dca/charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08", size = 248801, upload-time = "2026-08-15T08:17:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ba/ef83ae3aca816393decfa3530976f38a79812d707b80b580ac33b83f9877/charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada", size = 244070, upload-time = "2026-08-15T08:17:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0b/c5292a2462d69b7378ea89793bbb5b2b6fcf6f7dd6d1667f9619094ad553/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9", size = 240110, upload-time = "2026-08-15T08:17:20.547Z" }, + { url = "https://files.pythonhosted.org/packages/46/22/111e5be3b740d5c2a5bfcedb3d237b6591e5c2e82ae9d6ffcb121fe0909c/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e", size = 232836, upload-time = "2026-08-15T08:17:21.895Z" }, + { url = "https://files.pythonhosted.org/packages/f9/d2/d2aad6fe0dbb44b194bf3becb60f5a0ac48446ade999a47fe7bb41eb09a7/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6", size = 262712, upload-time = "2026-08-15T08:17:23.727Z" }, + { url = "https://files.pythonhosted.org/packages/35/5a/337e4663a5eae6de99db940ee8066d4145caafb61327db62deda15313cce/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf", size = 242977, upload-time = "2026-08-15T08:17:25.157Z" }, + { url = "https://files.pythonhosted.org/packages/ca/85/f82f8a92e31c7519410e2e1afdc630f28ec47490ce2c09a11c1a43cbb459/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71", size = 260207, upload-time = "2026-08-15T08:17:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/b7/52/643d11ffd60e9ac2fd1fb87e167a19285b9eefeff4a40e63c87cbfbeab36/charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573", size = 250562, upload-time = "2026-08-15T08:17:27.971Z" }, + { url = "https://files.pythonhosted.org/packages/62/16/46556278c2168d12df9da7fede5dc6fc70e60301b26a82bbeec238c9cfe3/charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2", size = 178507, upload-time = "2026-08-15T08:17:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/4c6c298171e6b3e745633180ff59350fc0ca0db1ffd28df1e369e0579f71/charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2", size = 200551, upload-time = "2026-08-15T08:17:30.668Z" }, + { url = "https://files.pythonhosted.org/packages/cd/d7/eb95a042f0dd22e304b0b6472b154f3546a1a039a9ee89ccb2a7f61591fc/charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a", size = 180700, upload-time = "2026-08-15T08:17:32.028Z" }, + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/29/cd/2b812ce5e888f1ce69a5350281e58aab07ae64a958ecae8912f30865718e/charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8", size = 212318, upload-time = "2026-08-15T08:18:04.403Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/a6ee107430768a5334e6d63f31f148a04a1a491ef161a1ac9415a73f2fa8/charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102", size = 224897, upload-time = "2026-08-15T08:18:05.997Z" }, + { url = "https://files.pythonhosted.org/packages/c3/d9/35ae3f64f29d0179c35c3baefe575904df2913dde519129c7f75995a2b1d/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5", size = 194848, upload-time = "2026-08-15T08:18:07.397Z" }, + { url = "https://files.pythonhosted.org/packages/74/76/f2fc7380f056cc273a53af37f50d08ad54b2c59f61078f31432edcf1c2bd/charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3", size = 198163, upload-time = "2026-08-15T08:18:08.989Z" }, + { url = "https://files.pythonhosted.org/packages/e9/40/095ce62fa078483cccc1fa2b36e6bc9580b85422a20ee9f925341c50e44f/charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c", size = 341823, upload-time = "2026-08-15T08:18:10.458Z" }, + { url = "https://files.pythonhosted.org/packages/f1/5a/0e58b1c04a1596e0256f407274a92d5fb2ee21324409d1fab1da48a65b5b/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0", size = 242458, upload-time = "2026-08-15T08:18:11.989Z" }, + { url = "https://files.pythonhosted.org/packages/22/95/b4618ce912e6db0b1aae89ba788e38e8a7eba0f3025cc66e8c0699f977b2/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96", size = 226717, upload-time = "2026-08-15T08:18:13.401Z" }, + { url = "https://files.pythonhosted.org/packages/8a/76/c681192bbda3d55356db5dadd64381d5202b37c6b598fcda5282e88b5d3d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc", size = 266111, upload-time = "2026-08-15T08:18:14.961Z" }, + { url = "https://files.pythonhosted.org/packages/88/be/55127bfca72c0cff6c022488d140d7c5b04c771e3b72e9bdb4836d54979d/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f", size = 263128, upload-time = "2026-08-15T08:18:16.515Z" }, + { url = "https://files.pythonhosted.org/packages/e0/91/39c3af510b0aa32bbda03374259200f28430febfd1bf5e511fe765282ce5/charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90", size = 251240, upload-time = "2026-08-15T08:18:18.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a5/cbe418bbc6ecdfc3e05a0116002897c4b403a5e838d697e64c78e9f0190d/charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506", size = 245282, upload-time = "2026-08-15T08:18:19.625Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a4/689bb42e8e7cd492f3cb64907c6bc00ad247ec9a3628cd3f8eed126e8ae1/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5", size = 244597, upload-time = "2026-08-15T08:18:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ce/9962938e179cf9f699d3f1e7b3114b5d7642dee6a893745229f9dd04f274/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e", size = 231376, upload-time = "2026-08-15T08:18:22.57Z" }, + { url = "https://files.pythonhosted.org/packages/85/54/46000450ada53bd9eac5429a2c8c54cd2d9b39c0c255f229aea9af0948a5/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5", size = 266715, upload-time = "2026-08-15T08:18:24.235Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/618749d70f792b44252a777bf89bfb86823b9bbc1ea13fe8ce759b07f38a/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3", size = 245848, upload-time = "2026-08-15T08:18:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3f/ffb64458527c7668031d5eb095d978de561958dc9f5b53f8e488a533e603/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3", size = 264521, upload-time = "2026-08-15T08:18:27.193Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ab/74a55fd803916a35ac461daf002708191aac19b546b80dc8cabfedc63d98/charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36", size = 253054, upload-time = "2026-08-15T08:18:28.568Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2a/6a9034b7d3c60b17499afb482df5878bf9fa20b50cc3887d5ef017a833db/charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7", size = 140580, upload-time = "2026-08-15T08:18:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/f3/46/1d362e1a00d035d66b9869e1281eee115907f7e390a16a07824ab5737360/charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b", size = 180325, upload-time = "2026-08-15T08:18:31.877Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7c/4938c329b6a9d446f6a59aa2092ff7118f274209b5ed0e26893d1d30a63c/charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b", size = 204175, upload-time = "2026-08-15T08:18:33.466Z" }, + { url = "https://files.pythonhosted.org/packages/ac/33/eeb384dbd8dec570661354592f4f2e1b2fcc92585624d146a000caf53841/charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687", size = 184123, upload-time = "2026-08-15T08:18:34.913Z" }, + { url = "https://files.pythonhosted.org/packages/1c/6c/c73fa9d5a85f6ab05395de61c5f6984e0a9ff40bb5ff888d46dff02526c6/charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348", size = 381682, upload-time = "2026-08-15T08:18:36.349Z" }, + { url = "https://files.pythonhosted.org/packages/30/c7/63565f860921457feba93bae6c86fb7746deb4cffeed2f375cb845318146/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef", size = 240826, upload-time = "2026-08-15T08:18:37.887Z" }, + { url = "https://files.pythonhosted.org/packages/06/ae/7ae8807410dfa33f8e6f1715740adeaafa8a816cc4cb33508f54b1f7c896/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885", size = 227861, upload-time = "2026-08-15T08:18:39.315Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a3/887c1642f0da26000b0e0652d91071113c0e72cea33952e225cf589f49a9/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375", size = 260758, upload-time = "2026-08-15T08:18:40.88Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/e6f5b9a3d0e55b0ef7505cd3765cdd48f22db89994c947b316f52f801fd8/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1", size = 259950, upload-time = "2026-08-15T08:18:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/e4e10a94d51cd1ee638aa7e00b65399e6b2a4e8376ab6d2eac9f95586671/charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65", size = 249329, upload-time = "2026-08-15T08:18:43.914Z" }, + { url = "https://files.pythonhosted.org/packages/c4/25/d5f4198819e6059735a84e8d0bfb72dc33976da67b97adcd3fb5a5e07ec6/charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5", size = 243137, upload-time = "2026-08-15T08:18:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e9/e925ca7569cf9fb9701fd82503fee73eea5268fdb856bdd64947092d3daa/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af", size = 242820, upload-time = "2026-08-15T08:18:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/34/17/672c251a888ed2aebcdd2fe830ad0104e25ff83c43f5c4f9c15e9fc6853c/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1", size = 230504, upload-time = "2026-08-15T08:18:48.353Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fc/f6a85abebd42ce4da2f1db0aa56cc6a0df1995e318b3875d14401b8381d1/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9", size = 263087, upload-time = "2026-08-15T08:18:49.859Z" }, + { url = "https://files.pythonhosted.org/packages/98/66/7c42677e739ba66746b297e2046918d793078094dc239e1e72768cffccc6/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a", size = 243269, upload-time = "2026-08-15T08:18:51.601Z" }, + { url = "https://files.pythonhosted.org/packages/de/d8/a50b79237f417af10f8c2a501ce8d1ca87829a22e69117891ca4ba20a69e/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032", size = 258766, upload-time = "2026-08-15T08:18:53.23Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1d/0fc91aeaeb3c83b748f532399ce67cf84604b48297405d740000f7a9e786/charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e", size = 250814, upload-time = "2026-08-15T08:18:54.768Z" }, + { url = "https://files.pythonhosted.org/packages/ae/10/3d8c777cf9024615295aa1b808324ad5b4a77855869c00824bad74ffaf8a/charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4", size = 191074, upload-time = "2026-08-15T08:18:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/4d/81/ae557d3c44d1a1d688696d60563413a0866a91b7ebc50f20df838be3d8c8/charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00", size = 216476, upload-time = "2026-08-15T08:18:57.889Z" }, + { url = "https://files.pythonhosted.org/packages/27/e9/61c01fb8b804692569c036b3fc50495814502dcf13a60649c6055390b02c/charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f", size = 194115, upload-time = "2026-08-15T08:18:59.418Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4e/8544831ef59d8f27ce92c80871380fdacc8076a8a56ed62f82e54f991333/charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af", size = 342048, upload-time = "2026-08-15T08:19:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/7f/a6/e3b46852424246065355644f4fb6dbccc0239a42a2eee27ecfc8957f0bcd/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8", size = 242997, upload-time = "2026-08-15T08:19:02.492Z" }, + { url = "https://files.pythonhosted.org/packages/03/3b/0cc9a26777334ab2f2e3089b948bbf4e4fe72ea70b897715ef6415043ec8/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90", size = 237014, upload-time = "2026-08-15T08:19:03.943Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c2/027335f0aa337a2a2e121bac1ad88c4f02ba6053ea0926802784f3db11af/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20", size = 266174, upload-time = "2026-08-15T08:19:05.598Z" }, + { url = "https://files.pythonhosted.org/packages/86/d3/e367787febe4e74769dec0f406f2c3c8d1b955fce5aee1fd0f94e8367a45/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449", size = 263361, upload-time = "2026-08-15T08:19:07.251Z" }, + { url = "https://files.pythonhosted.org/packages/af/3d/391b193eb9f3e84b02f9314088c386debdc0debee843535aaea2e2c6715d/charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a", size = 252143, upload-time = "2026-08-15T08:19:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/2e/57/de221f1745a90d418199761967e2776bfe2c275a1194220985e8c1d37833/charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0", size = 252086, upload-time = "2026-08-15T08:19:10.255Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e3/d119f86a01f9331e8186175f24873b1d74a7ee9e2e4b4d68f9947dae5afd/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e", size = 245231, upload-time = "2026-08-15T08:19:11.807Z" }, + { url = "https://files.pythonhosted.org/packages/26/de/d8e48c135ae480879539cdb179c8d3b50c7879497d75dd899b5763b69cee/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2", size = 241546, upload-time = "2026-08-15T08:19:13.416Z" }, + { url = "https://files.pythonhosted.org/packages/67/c4/217755fd1abc50d326c252922cd642002758095a81ff45010337b8b3ef65/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626", size = 267033, upload-time = "2026-08-15T08:19:14.981Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d7/34d8e404e358d2adcc5a228c2134643af00104c8fb0bf525f3688d756f05/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5", size = 252045, upload-time = "2026-08-15T08:19:16.618Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/40414471acf0aa0692ca77305aa00e434fcd8288f0941c93c30e9a5f8f2f/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774", size = 264866, upload-time = "2026-08-15T08:19:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/32/90/fcc850bae791abd2e0c041847f13e270aa08692a79f3e00de6d2dce1cb50/charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7", size = 253932, upload-time = "2026-08-15T08:19:19.734Z" }, + { url = "https://files.pythonhosted.org/packages/af/af/53afe99068b3c10b4cbae592a52ef72a7c92c0188440e83ee3a078fd8f75/charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9", size = 180320, upload-time = "2026-08-15T08:19:21.37Z" }, + { url = "https://files.pythonhosted.org/packages/c9/bc/f46a132041b29e4a8779ed712d3df1bf112e94ca8de58b66d7ec2c0cf8b9/charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712", size = 204174, upload-time = "2026-08-15T08:19:23.088Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5d/9ed554480eda8e447b673648628fdc29574d23dbad01fe11837adedd1cae/charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7", size = 184126, upload-time = "2026-08-15T08:19:24.471Z" }, + { url = "https://files.pythonhosted.org/packages/3b/32/9b8929bf384061ee1fe5d9c27c6f9776d3d824039ad4e14c88ec00c7808e/charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663", size = 381441, upload-time = "2026-08-15T08:19:26.038Z" }, + { url = "https://files.pythonhosted.org/packages/96/10/e9aa7923d3ddac652c99a1c5f7be494e737e151566a44abe018daf757f2c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11", size = 241742, upload-time = "2026-08-15T08:19:27.532Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/a2d249ebddf47b889a100c0bdcb61a2f9dbb8bc24ef325cc062e4f476877/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc", size = 235298, upload-time = "2026-08-15T08:19:29.274Z" }, + { url = "https://files.pythonhosted.org/packages/7d/07/469f78af590f7d5cd48e20d8dbfa3d66deeff9ba37768c04d886b5afd45c/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a", size = 262500, upload-time = "2026-08-15T08:19:30.955Z" }, + { url = "https://files.pythonhosted.org/packages/55/66/3bb56a47f7dcba014055b1a1d33c6f08bbe9c1e74dba154cfa25f90ae885/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4", size = 258888, upload-time = "2026-08-15T08:19:32.458Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c1/2adc2800903fb013210349313b710a5376856578d9e33e6b9a1d8b36714a/charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004", size = 250243, upload-time = "2026-08-15T08:19:33.94Z" }, + { url = "https://files.pythonhosted.org/packages/95/b5/a18d0dd1157ab655cc2cb14a545f4a4784bbad70ab3502412e36097502d9/charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b", size = 249871, upload-time = "2026-08-15T08:19:35.413Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c3/525f508cd1e58d0450ac55ed40ac75bc3a97482c59def5278456a5fbf03c/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263", size = 243580, upload-time = "2026-08-15T08:19:36.886Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c1/49a91fe7e97c8140094ca5c64161ab623a70d9f636bf834eace14048acb5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee", size = 239807, upload-time = "2026-08-15T08:19:38.392Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/56a48c296601274c4689b864a8e2dfb209b81dfcb39472753ce95eea662b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c", size = 264083, upload-time = "2026-08-15T08:19:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/10/4c/dc48409274a1817ff349711d26c62aa0c597df865d4d69ef79160c859193/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e", size = 250317, upload-time = "2026-08-15T08:19:41.53Z" }, + { url = "https://files.pythonhosted.org/packages/81/58/d325912115caec62d6bdd77bbab5e0b7da5d234a9f20affdffcbcb530d0b/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d", size = 258173, upload-time = "2026-08-15T08:19:43.07Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/b13b1ccae2c8ec63980d13be1890eb73f8aeabbfce02a24aabc0908788f5/charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61", size = 251960, upload-time = "2026-08-15T08:19:44.587Z" }, + { url = "https://files.pythonhosted.org/packages/1e/25/ed3f9919c5aef8cc818be1f972f565f7610d7b2076b8ebb98839516ffc3c/charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f", size = 191186, upload-time = "2026-08-15T08:19:46.293Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/43c2b3e9d8267092b913eb8b0603f0f71993c395632886bd37a7223f96cf/charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb", size = 215947, upload-time = "2026-08-15T08:19:47.853Z" }, + { url = "https://files.pythonhosted.org/packages/a8/76/9aad3e9c8865e5e0efa9a7f6f81c37a67635a985145ecd44528a81e088ee/charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a", size = 193909, upload-time = "2026-08-15T08:19:49.383Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, ] [[package]] @@ -830,14 +936,11 @@ wheels = [ [[package]] name = "click" -version = "8.1.8" +version = "8.5.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, + { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" }, ] [[package]] @@ -938,121 +1041,127 @@ wheels = [ [[package]] name = "cryptography" -version = "48.0.0" +version = "50.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9f/a9/db8f313fdcd85d767d4973515e1db101f9c71f95fced83233de224673757/cryptography-48.0.0.tar.gz", hash = "sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920", size = 832984, upload-time = "2026-05-04T22:59:38.133Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/3d/01f6dd9190170a5a241e0e98c2d04be3664a9e6f5b9b872cde63aff1c3dd/cryptography-48.0.0-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:0c558d2cdffd8f4bbb30fc7134c74d2ca9a476f830bb053074498fbc86f41ed6", size = 8001587, upload-time = "2026-05-04T22:57:36.803Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6e/e90527eef33f309beb811cf7c982c3aeffcce8e3edb178baa4ca3ae4a6fa/cryptography-48.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f5333311663ea94f75dd408665686aaf426563556bb5283554a3539177e03b8c", size = 4690433, upload-time = "2026-05-04T22:57:40.373Z" }, - { url = "https://files.pythonhosted.org/packages/90/04/673510ed51ddff56575f306cf1617d80411ee76831ccd3097599140efdfe/cryptography-48.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7995ef305d7165c3f11ae07f2517e5a4f1d5c18da1376a0a9ed496336b69e5f3", size = 4710620, upload-time = "2026-05-04T22:57:42.935Z" }, - { url = "https://files.pythonhosted.org/packages/14/d5/e9c4ef932c8d800490c34d8bd589d64a31d5890e27ec9e9ad532be893294/cryptography-48.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:40ba1f85eaa6959837b1d51c9767e230e14612eea4ef110ee8854ada22da1bf5", size = 4696283, upload-time = "2026-05-04T22:57:45.294Z" }, - { url = "https://files.pythonhosted.org/packages/0c/29/174b9dfb60b12d59ecfc6cfa04bc88c21b42a54f01b8aae09bb6e51e4c7f/cryptography-48.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:369a6348999f94bbd53435c894377b20ab95f25a9065c283570e70150d8abc3c", size = 5296573, upload-time = "2026-05-04T22:57:47.933Z" }, - { url = "https://files.pythonhosted.org/packages/95/38/0d29a6fd7d0d1373f0c0c88a04ba20e359b257753ac497564cd660fc1d55/cryptography-48.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a0e692c683f4df67815a2d258b324e66f4738bd7a96a218c826dce4f4bd05d8f", size = 4743677, upload-time = "2026-05-04T22:57:50.067Z" }, - { url = "https://files.pythonhosted.org/packages/30/be/eef653013d5c63b6a490529e0316f9ac14a37602965d4903efed1399f32b/cryptography-48.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:18349bbc56f4743c8b12dc32e2bccb2cf83ee8b69a3bba74ef8ae857e26b3d25", size = 4330808, upload-time = "2026-05-04T22:57:52.301Z" }, - { url = "https://files.pythonhosted.org/packages/84/9e/500463e87abb7a0a0f9f256ec21123ecde0a7b5541a15e840ea54551fd81/cryptography-48.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e8eac43dfca5c4cccc6dad9a80504436fca53bb9bc3100a2386d730fbe6b602", size = 4695941, upload-time = "2026-05-04T22:57:54.603Z" }, - { url = "https://files.pythonhosted.org/packages/e3/dc/7303087450c2ec9e7fbb750e17c2abfbc658f23cbd0e54009509b7cc4091/cryptography-48.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9ccdac7d40688ecb5a3b4a604b8a88c8002e3442d6c60aead1db2a89a041560c", size = 5252579, upload-time = "2026-05-04T22:57:57.207Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c0/7101d3b7215edcdc90c45da544961fd8ed2d6448f77577460fa75a8443f7/cryptography-48.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:bd72e68b06bb1e96913f97dd4901119bc17f39d4586a5adf2d3e47bc2b9d58b5", size = 4743326, upload-time = "2026-05-04T22:57:59.535Z" }, - { url = "https://files.pythonhosted.org/packages/ac/d8/5b833bad13016f562ab9d063d68199a4bd121d18458e439515601d3357ec/cryptography-48.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59baa2cb386c4f0b9905bd6eb4c2a79a69a128408fd31d32ca4d7102d4156321", size = 4826672, upload-time = "2026-05-04T22:58:01.996Z" }, - { url = "https://files.pythonhosted.org/packages/98/e1/7074eb8bf3c135558c73fc2bcf0f5633f912e6fb87e868a55c454080ef09/cryptography-48.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9249e3cd978541d665967ac2cb2787fd6a62bddf1e75b3e347a594d7dacf4f74", size = 4972574, upload-time = "2026-05-04T22:58:03.968Z" }, - { url = "https://files.pythonhosted.org/packages/04/70/e5a1b41d325f797f39427aa44ef8baf0be500065ab6d8e10369d850d4a4f/cryptography-48.0.0-cp311-abi3-win32.whl", hash = "sha256:9c459db21422be75e2809370b829a87eb37f74cd785fc4aa9ea1e5f43b47cda4", size = 3294868, upload-time = "2026-05-04T22:58:06.467Z" }, - { url = "https://files.pythonhosted.org/packages/f4/ac/8ac51b4a5fc5932eb7ee5c517ba7dc8cd834f0048962b6b352f00f41ebf9/cryptography-48.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:5b012212e08b8dd5edc78ef54da83dd9892fd9105323b3993eff6bea65dc21d7", size = 3817107, upload-time = "2026-05-04T22:58:08.845Z" }, - { url = "https://files.pythonhosted.org/packages/6b/84/70e3feea9feea87fd7cbe77efb2712ae1e3e6edf10749dc6e95f4e60e455/cryptography-48.0.0-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:3cb07a3ed6431663cd321ea8a000a1314c74211f823e4177fefa2255e057d1ec", size = 7986556, upload-time = "2026-05-04T22:58:11.172Z" }, - { url = "https://files.pythonhosted.org/packages/89/6e/18e07a618bb5442ba10cf4df16e99c071365528aa570dfcb8c02e25a303b/cryptography-48.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c7378637d7d88016fa6791c159f698b3d3eed28ebf844ac36b9dc04a14dae18", size = 4684776, upload-time = "2026-05-04T22:58:13.712Z" }, - { url = "https://files.pythonhosted.org/packages/be/6a/4ea3b4c6c6759794d5ee2103c304a5076dc4b19ae1f9fe47dba439e159e9/cryptography-48.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc90c0b39b2e3c65ef52c804b72e3c58f8a04ab2a1871272798e5f9572c17d20", size = 4698121, upload-time = "2026-05-04T22:58:16.448Z" }, - { url = "https://files.pythonhosted.org/packages/2f/59/6ff6ad6cae03bb887da2a5860b2c9805f8dac969ef01ce563336c49bd1d1/cryptography-48.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:76341972e1eff8b4bea859f09c0d3e64b96ce931b084f9b9b7db8ef364c30eff", size = 4690042, upload-time = "2026-05-04T22:58:18.544Z" }, - { url = "https://files.pythonhosted.org/packages/ca/b4/fc334ed8cfd705aca282fe4d8f5ae64a8e0f74932e9feecb344610cf6e4d/cryptography-48.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:55b7718303bf06a5753dcdccf2f3945cf18ad7bffde41b61226e4db31ab89a9c", size = 5282526, upload-time = "2026-05-04T22:58:20.75Z" }, - { url = "https://files.pythonhosted.org/packages/11/08/9f8c5386cc4cd90d8255c7cdd0f5baf459a08502a09de30dc51f553d38dc/cryptography-48.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:a64697c641c7b1b2178e573cbc31c7c6684cd56883a478d75143dbb7118036db", size = 4733116, upload-time = "2026-05-04T22:58:23.627Z" }, - { url = "https://files.pythonhosted.org/packages/b8/77/99307d7574045699f8805aa500fa0fb83422d115b5400a064ddd306d7750/cryptography-48.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:561215ea3879cb1cbbf272867e2efda62476f240fb58c64de6b393ae19246741", size = 4316030, upload-time = "2026-05-04T22:58:25.581Z" }, - { url = "https://files.pythonhosted.org/packages/fd/36/a608b98337af3cb2aff4818e406649d30572b7031918b04c87d979495348/cryptography-48.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ad64688338ed4bc1a6618076ba75fd7194a5f1797ac60b47afe926285adb3166", size = 4689640, upload-time = "2026-05-04T22:58:27.747Z" }, - { url = "https://files.pythonhosted.org/packages/dd/a6/825010a291b4438aecc1f568bc428189fc1175515223632477c07dc0a6df/cryptography-48.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:906cbf0670286c6e0044156bc7d4af9cbb0ef6db9f73e52c3ec56ba6bdde5336", size = 5237657, upload-time = "2026-05-04T22:58:29.848Z" }, - { url = "https://files.pythonhosted.org/packages/b9/09/4e76a09b4caa29aad535ddc806f5d4c5d01885bd978bd984fbc6ca032cae/cryptography-48.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:ea8990436d914540a40ab24b6a77c0969695ed52f4a4874c5137ccf7045a7057", size = 4732362, upload-time = "2026-05-04T22:58:32.009Z" }, - { url = "https://files.pythonhosted.org/packages/18/78/444fa04a77d0cb95f417dda20d450e13c56ba8e5220fc892a1658f44f882/cryptography-48.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c18684a7f0cc9a3cb60328f496b8e3372def7c5d2df39ac267878b05565aaaae", size = 4819580, upload-time = "2026-05-04T22:58:34.254Z" }, - { url = "https://files.pythonhosted.org/packages/38/85/ea67067c70a1fd4be2c63d35eeed82658023021affccc7b17705f8527dd2/cryptography-48.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9be5aafa5736574f8f15f262adc81b2a9869e2cfe9014d52a44633905b40d52c", size = 4963283, upload-time = "2026-05-04T22:58:36.376Z" }, - { url = "https://files.pythonhosted.org/packages/75/54/cc6d0f3deac3e81c7f847e8a189a12b6cdd65059b43dad25d4316abd849a/cryptography-48.0.0-cp314-cp314t-win32.whl", hash = "sha256:c17dfe85494deaeddc5ce251aebd1d60bbe6afc8b62071bb0b469431a000124f", size = 3270954, upload-time = "2026-05-04T22:58:38.791Z" }, - { url = "https://files.pythonhosted.org/packages/49/67/cc947e288c0758a4e5473d1dcb743037ab7785541265a969240b8885441a/cryptography-48.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27241b1dc9962e056062a8eef1991d02c3a24569c95975bd2322a8a52c6e5e12", size = 3797313, upload-time = "2026-05-04T22:58:40.746Z" }, - { url = "https://files.pythonhosted.org/packages/f2/63/61d4a4e1c6b6bab6ce1e213cd36a24c415d90e76d78c5eb8577c5541d2e8/cryptography-48.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:58d00498e8933e4a194f3076aee1b4a97dfec1a6da444535755822fe5d8b0b86", size = 7983482, upload-time = "2026-05-04T22:58:43.769Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ac/f5b5995b87770c693e2596559ffafe195b4033a57f14a82268a2842953f3/cryptography-48.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:614d0949f4790582d2cc25553abd09dd723025f0c0e7c67376a1d77196743d6e", size = 4683266, upload-time = "2026-05-04T22:58:46.064Z" }, - { url = "https://files.pythonhosted.org/packages/ec/c6/8b14f67e18338fbc4adb76f66c001f5c3610b3e2d1837f268f47a347dbbb/cryptography-48.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ce4bfae76319a532a2dc68f82cc32f5676ee792a983187dac07183690e5c66f", size = 4696228, upload-time = "2026-05-04T22:58:48.22Z" }, - { url = "https://files.pythonhosted.org/packages/ea/73/f808fbae9514bd91b47875b003f13e284c8c6bdfd904b7944e803937eec1/cryptography-48.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2eb992bbd4661238c5a397594c83f5b4dc2bc5b848c365c8f991b6780efcc5c7", size = 4689097, upload-time = "2026-05-04T22:58:50.9Z" }, - { url = "https://files.pythonhosted.org/packages/93/01/d86632d7d28db8ae83221995752eeb6639ffb374c2d22955648cf8d52797/cryptography-48.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:22a5cb272895dce158b2cacdfdc3debd299019659f42947dbdac6f32d68fe832", size = 5283582, upload-time = "2026-05-04T22:58:53.017Z" }, - { url = "https://files.pythonhosted.org/packages/02/e1/50edc7a50334807cc4791fc4a0ce7468b4a1416d9138eab358bfc9a3d70b/cryptography-48.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2b4d59804e8408e2fea7d1fbaf218e5ec984325221db76e6a241a9abd6cdd95c", size = 4730479, upload-time = "2026-05-04T22:58:55.611Z" }, - { url = "https://files.pythonhosted.org/packages/6f/af/99a582b1b1641ff5911ac559beb45097cf79efd4ead4657f578ef1af2d47/cryptography-48.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:984a20b0f62a26f48a3396c72e4bc34c66e356d356bf370053066b3b6d54634a", size = 4326481, upload-time = "2026-05-04T22:58:57.607Z" }, - { url = "https://files.pythonhosted.org/packages/90/ee/89aa26a06ef0a7d7611788ffd571a7c50e368cc6a4d5eef8b4884e866edb/cryptography-48.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5a5ed8fde7a1d09376ca0b40e68cd59c69fe23b1f9768bd5824f54681626032a", size = 4688713, upload-time = "2026-05-04T22:59:00.077Z" }, - { url = "https://files.pythonhosted.org/packages/70/ba/bcb1b0bb7a33d4c7c0c4d4c7874b4a62ae4f56113a5f4baefa362dfb1f0f/cryptography-48.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:8cd666227ef7af430aa5914a9910e0ddd703e75f039cef0825cd0da71b6b711a", size = 5238165, upload-time = "2026-05-04T22:59:02.317Z" }, - { url = "https://files.pythonhosted.org/packages/c9/70/ca4003b1ce5ca3dc3186ada51908c8a9b9ff7d5cab83cc0d43ee14ec144f/cryptography-48.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9071196d81abc88b3516ac8cdfad32e2b66dd4a5393a8e68a961e9161ddc6239", size = 4729947, upload-time = "2026-05-04T22:59:05.255Z" }, - { url = "https://files.pythonhosted.org/packages/44/a0/4ec7cf774207905aef1a8d11c3750d5a1db805eb380ee4e16df317870128/cryptography-48.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1e2d54c8be6152856a36f0882ab231e70f8ec7f14e93cf87db8a2ed056bf160c", size = 4822059, upload-time = "2026-05-04T22:59:07.802Z" }, - { url = "https://files.pythonhosted.org/packages/1e/75/a2e55f99c16fcac7b5d6c1eb19ad8e00799854d6be5ca845f9259eae1681/cryptography-48.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5da777e32ffed6f85a7b2b3f7c5cbc88c146bfcd0a1d7baf5fcc6c52ee35dd4", size = 4960575, upload-time = "2026-05-04T22:59:09.851Z" }, - { url = "https://files.pythonhosted.org/packages/b8/23/6e6f32143ab5d8b36ca848a502c4bcd477ae75b9e1677e3530d669062578/cryptography-48.0.0-cp39-abi3-win32.whl", hash = "sha256:77a2ccbbe917f6710e05ba9adaa25fb5075620bf3ea6fb751997875aff4ae4bd", size = 3279117, upload-time = "2026-05-04T22:59:12.019Z" }, - { url = "https://files.pythonhosted.org/packages/9d/9a/0fea98a70cf1749d41d738836f6349d97945f7c89433a259a6c2642eefeb/cryptography-48.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:16cd65b9330583e4619939b3a3843eec1e6e789744bb01e7c7e2e62e33c239c8", size = 3792100, upload-time = "2026-05-04T22:59:14.884Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/bb/ad/5d6702db60b1e40b41ef513b6967ff5848f307d50f8449baf1634f5908f1/cryptography-50.0.1.tar.gz", hash = "sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20", size = 880381, upload-time = "2026-08-25T19:45:45.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/19/797e2aaac9df6a66f1550f49979dc1b1e39ecd2077501c30efa81e8d5d67/cryptography-50.0.1-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986", size = 4010153, upload-time = "2026-08-25T19:44:03.155Z" }, + { url = "https://files.pythonhosted.org/packages/90/34/9ce9a62ed9dc82ca9fd6a34445b6904af56e5f38b3eae2ed32e49c36053d/cryptography-50.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f", size = 4723133, upload-time = "2026-08-25T19:44:05.461Z" }, + { url = "https://files.pythonhosted.org/packages/57/26/e6d4fc8512a51a5f9ee7bfdbfb853bce1197087df40c9ad993ad370b846f/cryptography-50.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef", size = 4712478, upload-time = "2026-08-25T19:44:07.375Z" }, + { url = "https://files.pythonhosted.org/packages/e6/de/d3cdc2815697aae84126cbd6a030ca7b6b452e28a88b501b836bd3aa7a86/cryptography-50.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8", size = 4730726, upload-time = "2026-08-25T19:44:09.294Z" }, + { url = "https://files.pythonhosted.org/packages/55/32/38c0d344b98c06d34b5df8946565a9c0d6dbf32c8e0730a7f05f0a3c6cab/cryptography-50.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45", size = 5353524, upload-time = "2026-08-25T19:44:11.96Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1b/82f0f0d8858d4432be1af790477edf62aef90324041aa07c57e57bef1af7/cryptography-50.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad", size = 4746720, upload-time = "2026-08-25T19:44:14.051Z" }, + { url = "https://files.pythonhosted.org/packages/29/ba/042ca458b8c64348c768284b5d23e69b92ed53d057ab779fee628564676d/cryptography-50.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49", size = 4361866, upload-time = "2026-08-25T19:44:16.167Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/e96c1ef71edef71057c7e3c3d982ce8fda554e0c52d0cc19c18845cde3eb/cryptography-50.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f", size = 4730028, upload-time = "2026-08-25T19:44:18.085Z" }, + { url = "https://files.pythonhosted.org/packages/e3/38/45abd72ef63f2e7d0754a6cacf97bd8b69512ace7f6130d24c39ece65da2/cryptography-50.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527", size = 5308405, upload-time = "2026-08-25T19:44:20.197Z" }, + { url = "https://files.pythonhosted.org/packages/85/66/6ccca4722987ddedaa7fc9c3f4708af7431f5535666c174350830888c6b7/cryptography-50.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a", size = 4746230, upload-time = "2026-08-25T19:44:22.376Z" }, + { url = "https://files.pythonhosted.org/packages/13/0e/b1f92e013228111413f2e6743948b80bc24dfd3c1b87ba98ceea16f5df89/cryptography-50.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959", size = 4862596, upload-time = "2026-08-25T19:44:24.472Z" }, + { url = "https://files.pythonhosted.org/packages/7e/22/c3654cccc856e9d682817b04ac3ee79731cb09ca6f95996a95c904de2883/cryptography-50.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b", size = 5014082, upload-time = "2026-08-25T19:44:26.709Z" }, + { url = "https://files.pythonhosted.org/packages/42/8b/cb12b1b60c91b074ca6bf0fdd59aa8f10d8bc5f73af8faece86ef0421b37/cryptography-50.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648", size = 3842826, upload-time = "2026-08-25T19:44:28.784Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f0/424cb557d99aa86ac55da5e2add02e2882e44047b6264f93ade1b975a993/cryptography-50.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30a125032e5642a21ff816e021152bd4e7e94f03eff3f4b7fca41cd22bc3110f", size = 3973525, upload-time = "2026-08-25T19:44:30.7Z" }, + { url = "https://files.pythonhosted.org/packages/4d/72/3a2711d967977ab5fc80b782837c7e8d1ac7445e764c20c381a265c57ef3/cryptography-50.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a0b1a59e3a089064a0ec309e9428c8e3ae4e161419d20ac33600767e83fc658a", size = 4708817, upload-time = "2026-08-25T19:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f2/bb1f56e10815b789df0b409a69fa4992ff3d3fef9c72747f4a6b26fed38e/cryptography-50.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8921d58f426793c5f1b47f0b59575780de9a095214958d0eb37d909593db8367", size = 4697300, upload-time = "2026-08-25T19:44:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/08/bd/ed5396be499ffcf8807a585bfe38b71a1fbdd1c342b4f9b6d0ef5162a946/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a8f40ea47330e71b594a7e246898f93177c259490c63183dbaf9e571d71ed9a5", size = 4716039, upload-time = "2026-08-25T19:44:37.192Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6e/1cf405c5c8e8df7545378048e954792f00b7f2367af8863ce8b8f3e10607/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:a255449073358275b64b67d3f595f268bbef70e72b6edb65e0c70c735bf739c9", size = 5332388, upload-time = "2026-08-25T19:44:39.16Z" }, + { url = "https://files.pythonhosted.org/packages/47/92/b4317e8c32c4f47b062f5398bd79106b220a124546f42be83bf32b761e2a/cryptography-50.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8df2de9102026855887e4587084f6eabd80ed0f345b8ad8a7ac27ab9bf4723e0", size = 4730293, upload-time = "2026-08-25T19:44:41.298Z" }, + { url = "https://files.pythonhosted.org/packages/39/0d/a1e7633e2c744d0f2983320a27e924ef2264c79c56e1a58d5fb0a1cfd413/cryptography-50.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:ac02b07824d4d1001bd4367599f839c19cb171924c796e52c23508ac14c2c0cc", size = 4346031, upload-time = "2026-08-25T19:44:43.245Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/b215616f9bab3fc18510c78a4e5c9f362d77838503c363dc747c7d4f5c6f/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:cbf74a81765ee67413503ca6e26dcc4f6f5a519822436cc0a1b97aab6c1b8a17", size = 4715344, upload-time = "2026-08-25T19:44:45.291Z" }, + { url = "https://files.pythonhosted.org/packages/b1/1b/ec3ebd31741d0e963612c4fe43caa39341b9b1e031e469820e42e4c83918/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:16c5ecd954b3330ebfb6605eca4fd952da8bef376551d5cc264534e3770a9ee6", size = 5287201, upload-time = "2026-08-25T19:44:47.297Z" }, + { url = "https://files.pythonhosted.org/packages/1a/01/0127d11a762b31a9ee0221894f540318761783f3fdc4bc5d057698caebd5/cryptography-50.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:79bf008d1f9af6071c797ad133e39915dfee7614f18f18f4db9072eb715064a3", size = 4730023, upload-time = "2026-08-25T19:44:49.435Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b9/e7425ebfb599241a0c1d7000f1b466c3062da66c19d9525031315dff7213/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:330fbb252391c596f1ae42c5754449dc924e6ad012dca8efe0d703f9f2d12ec6", size = 4847362, upload-time = "2026-08-25T19:44:51.94Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/60d0ddf4defa12e482c9d5e0f554384d6e8ab25341fd15f060028fd92e6a/cryptography-50.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:42be3bb70596b3abe4ac097b75be223e8b3ab614a0e5de068e3dcc54d71d6149", size = 4999247, upload-time = "2026-08-25T19:44:53.876Z" }, + { url = "https://files.pythonhosted.org/packages/4d/56/bc4f2b209e766c93372cfcd59b781a0b2b59700f62a969580415b699c2b2/cryptography-50.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f74455bb086a85d5e81246412602aaa97ed095e504cd40dd261ef50be42205bf", size = 3825806, upload-time = "2026-08-25T19:44:56.209Z" }, + { url = "https://files.pythonhosted.org/packages/84/a9/ee16a903f13755e914d1eecc482fe64d1f10761c3960e5d8fa6837377aff/cryptography-50.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0", size = 4035307, upload-time = "2026-08-25T19:44:58.305Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a5/9ec7e81e8526c0d7a387d73386b2daed3f39e10d81a85930bd1b6bfba65c/cryptography-50.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23", size = 4751900, upload-time = "2026-08-25T19:45:00.401Z" }, + { url = "https://files.pythonhosted.org/packages/7e/3c/0e77bd5ffcf078e9dd27d3074aad6c030d9b10d0bf69329d573c927a188c/cryptography-50.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733", size = 4738357, upload-time = "2026-08-25T19:45:02.786Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/3c5f80daa4dcd47323c7af8a2fcb90de27a33564d4fcac69846c0972691a/cryptography-50.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88", size = 4758474, upload-time = "2026-08-25T19:45:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2b/214cf0cf93db9628c3c20c896b229f327f6fb1b20e4b3743d8ad3f00af8b/cryptography-50.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054", size = 5375862, upload-time = "2026-08-25T19:45:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/d6/51/3f9701867a46b6c1740c9b52fc4d3bed6cbdcfedcc9b6e64305c07f39cff/cryptography-50.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5", size = 4772942, upload-time = "2026-08-25T19:45:09.396Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/13ea642e08e2544d0f5396122055f4820cfacb3203562197b5967125ea97/cryptography-50.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361", size = 4383347, upload-time = "2026-08-25T19:45:11.659Z" }, + { url = "https://files.pythonhosted.org/packages/84/d5/7d1fe1cb93f91c428093ff234e128c89ba8ea61a6f26aab406081f9b996e/cryptography-50.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71", size = 4758050, upload-time = "2026-08-25T19:45:13.745Z" }, + { url = "https://files.pythonhosted.org/packages/dd/04/557fc5ead96a829e0bc812a3b9dc4a52a2f27e4f7f5950da7ff27653a805/cryptography-50.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80", size = 5332955, upload-time = "2026-08-25T19:45:16.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/eb/5d7124083e8d8cda8f5b348f544b71ad6f707ad63193758ef4d8e569da02/cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239", size = 4772694, upload-time = "2026-08-25T19:45:18.315Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/f1f955e0921dd2b6d22eae7e8d24a4c4b638d10735ffbf6a71f99eb0fcb8/cryptography-50.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558", size = 4888413, upload-time = "2026-08-25T19:45:20.4Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ab/89e2b798d2c3925f82e2bb72d5979f3d2f6da2dd22ef4a8cd8b70d920039/cryptography-50.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e", size = 5044355, upload-time = "2026-08-25T19:45:22.353Z" }, + { url = "https://files.pythonhosted.org/packages/99/89/87ef49ffe383ef4e147d27b7bf2088fb0b54ea409dd87b5a89442e5828a5/cryptography-50.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2", size = 3875429, upload-time = "2026-08-25T19:45:24.418Z" }, ] [[package]] name = "cuda-bindings" -version = "13.3.0" +version = "13.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-pathfinder" }, + { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/e0/4b3fdba08ff177e9451f376a4ba2df18d76f9158e6a16cdc062bd83db9fa/cuda_bindings-13.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f72f67f5790e7fa51e3f893e007e49567573ccdf4ed1ca988fbbbd36cd77847c", size = 6020531, upload-time = "2026-05-27T03:59:07.942Z" }, - { url = "https://files.pythonhosted.org/packages/04/40/a2ea4d8f032bfd6c220d50b6f92cd61f33d48f31959da39ed1b178cfee54/cuda_bindings-13.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a99c3b8d584f266c616bd0f30c7cd83e33553e3ef2abad41ff5a74fbc033a69a", size = 6653764, upload-time = "2026-05-27T03:59:09.981Z" }, - { url = "https://files.pythonhosted.org/packages/ae/a0/156efe7816699c2de1ea2395031db7d010b7af23c243563a3ee6f0ecc1de/cuda_bindings-13.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7698fcc4577aa96372866f4d0c9a6cf686cd5c90eab94581c29d37fe6600542", size = 5914803, upload-time = "2026-05-27T03:59:14.011Z" }, - { url = "https://files.pythonhosted.org/packages/51/91/510aae64d53227b5b36db6bfaea41514b66d92cd65ddc43aa49566f18313/cuda_bindings-13.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abd908f651160d12c45c5714a38ee102a1173a55433c0d1509ec0e8293beb4a6", size = 6472506, upload-time = "2026-05-27T03:59:16.551Z" }, - { url = "https://files.pythonhosted.org/packages/01/53/2ef49e5b3734a5531b2ba5d726cba724d9cbb262404e586ed61070604826/cuda_bindings-13.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a801fa30e75d25b74252123aefc746b6c4275624d2b8640632dd1dfeeaa1f88", size = 6008814, upload-time = "2026-05-27T03:59:20.921Z" }, - { url = "https://files.pythonhosted.org/packages/2f/cb/3a9fcf0651e0a49b4d0f1955837ce079245b27086c22fb2f253039bdf324/cuda_bindings-13.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94d40ef7b4bdd9dce0244a1baa132e0e538f1eb2c0d162fb3648a15e48515365", size = 6531477, upload-time = "2026-05-27T03:59:23.391Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/6987c5ee98f117317a85650ddc79480a3fa59a573ae1c923d0722b56ae71/cuda_bindings-13.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e5911bea15810b749a8077f8c45423ed785d51618b8e8664dea1fc8f5a2a76c8", size = 5807073, upload-time = "2026-05-27T03:59:28.218Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ab/46ceee07dc19f18a5d1c28d592750ed9dbdc803077eb083576a442c9938c/cuda_bindings-13.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2870fed7707a37f8af0c02364b05f355ebe8921604e8c68eb56cf66867e0798", size = 6354325, upload-time = "2026-05-27T03:59:30.715Z" }, + { url = "https://files.pythonhosted.org/packages/ce/67/5e7dba1ba576dd73da5dee894ca076ca5e959450dfff66d6d510a255d1f7/cuda_bindings-13.3.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7855c4868aabc0cfae28abbe83d56734bdfbd08f08fc234ac1912a12858bf49", size = 6025351, upload-time = "2026-05-29T23:11:49.685Z" }, + { url = "https://files.pythonhosted.org/packages/39/2a/6d2e9047d1fb243dbaa364b01e0297534b9ed7fd27dba1c9f361519cf69b/cuda_bindings-13.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e32d08f71ebcdf00f0f41eab2eb37e8da94c8ed411cc9f7f7a019ce6b34abe3a", size = 6657965, upload-time = "2026-05-29T23:11:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6e/2394f8163360f8391f8f1b7e72d300a82724edb81a7b7084c799fbd4c91f/cuda_bindings-13.3.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9efb21c1ee64981e184b9e0ba5eb3179e5ba3d4b51665a6cb52b8ef3d01a7cbf", size = 5920504, upload-time = "2026-05-29T23:11:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/34/c2/ef9b6a63f7dc432712a462c816662e662e00d38caa9b861c8c2588195d03/cuda_bindings-13.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2732904099e0a4d4db774a5fc6d91ee95fae065b4d2ecabb4968c5fe2406c9d7", size = 6476660, upload-time = "2026-05-29T23:11:59.188Z" }, + { url = "https://files.pythonhosted.org/packages/b1/81/bff68ce829999c1e4209c761bbf903b1c06ec570416ddb25020864ad5907/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ab2f74ed65bfef4163ba07a8db16f1085e0729291db12a2423aff84ee8278b8", size = 6013639, upload-time = "2026-05-29T23:12:03.509Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e0/c8a1f0c8f9ffdea4f5fe6dbab89b326cef4d85caf489dad39e209da89416/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80", size = 6534419, upload-time = "2026-05-29T23:12:05.633Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/83b1f563925b290f2d11a01a77a84013ba56052fe3653a5bef3ccfbb43d6/cuda_bindings-13.3.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3c772dfff49681541d59630c90f858e173ac926b9c593a2b7123f2a1043cc76", size = 5809771, upload-time = "2026-05-29T23:12:10.422Z" }, + { url = "https://files.pythonhosted.org/packages/12/20/e79b4bfe98f075195afb6343d41c498f9dbd2d161d7021d4d28bceb83581/cuda_bindings-13.3.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36febb7c1079d68a981dbbd8d5a67235b399802b82075c9388624719607e52b9", size = 6358584, upload-time = "2026-05-29T23:12:12.767Z" }, ] [[package]] name = "cuda-pathfinder" -version = "1.5.5" +version = "1.7.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/c8/26f2e4aae92f11522a96043892ba39a90eac610d5242523aa863212bc1c7/cuda_pathfinder-1.5.5-py3-none-any.whl", hash = "sha256:0228c023f95d1480f143ef5c8922d27a2ab052087a942e81dc289c9eb8f91689", size = 51671, upload-time = "2026-05-27T01:21:25.413Z" }, + { url = "https://files.pythonhosted.org/packages/62/01/a7171c5e2e8755597bd8f1c1eb228a0876f502afdf25f936061f5dbe2880/cuda_pathfinder-1.7.0-py3-none-any.whl", hash = "sha256:e9d67e950f3d5992b854dfd25917c3719d0c21d3057b11abe86ba6feec526138", size = 63091, upload-time = "2026-08-24T04:13:56.054Z" }, ] [[package]] name = "cuda-toolkit" -version = "13.0.2" +version = "13.0.3.0" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c7/a79086a62c98befcdb8349656c6f114e2db3b8b2422f6e25c97a7f2a9a3c/cuda_toolkit-13.0.3.0-py2.py3-none-any.whl", hash = "sha256:d693caaa261214ddd7dbb60d68e71cbed884e68c2be7509778f3051da0b91c3f", size = 2512, upload-time = "2026-04-14T00:50:08.173Z" }, ] [package.optional-dependencies] +cublas = [ + { name = "nvidia-cublas", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-cuda-nvrtc", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, +] cudart = [ - { name = "nvidia-cuda-runtime" }, + { name = "nvidia-cuda-runtime", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] cufft = [ - { name = "nvidia-cufft" }, + { name = "nvidia-cufft", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] cufile = [ - { name = "nvidia-cufile" }, + { name = "nvidia-cufile", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] cupti = [ - { name = "nvidia-cuda-cupti" }, + { name = "nvidia-cuda-cupti", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] curand = [ - { name = "nvidia-curand" }, + { name = "nvidia-curand", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] cusolver = [ - { name = "nvidia-cusolver" }, + { name = "nvidia-cublas", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-cusolver", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-cusparse", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] cusparse = [ - { name = "nvidia-cusparse" }, + { name = "nvidia-cusparse", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc" }, + { name = "nvidia-cuda-nvrtc", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] nvtx = [ - { name = "nvidia-nvtx" }, + { name = "nvidia-nvtx", marker = "(platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" }, ] [[package]] @@ -1066,7 +1175,7 @@ wheels = [ [[package]] name = "dandi" -version = "0.76.0" +version = "0.77.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "bids-validator-deno" }, @@ -1102,14 +1211,14 @@ dependencies = [ { name = "zarr" }, { name = "zarr-checksum" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/c8/b17d880182f5dab427e4dbb4b156f2119c2373906b244e82dff90214bfe9/dandi-0.76.0.tar.gz", hash = "sha256:ceefd547d9f77606a6ec1efb2aeccef3e764e7f7cd862c78c2cc86b161ada846", size = 392833, upload-time = "2026-05-21T18:48:11.478Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/70/d3eb3f227eebba44e9b2f8f2912f6886b6d1bead97863b53a81f1adcba77/dandi-0.77.0.tar.gz", hash = "sha256:6d766a5be9491ff55755daced14199ee29371b424f1d51f68ba29e5940dc4c47", size = 403423, upload-time = "2026-08-08T01:08:22.705Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/2b/2fbc1d6c43690d93c57d66de502503eafea3010373ac585b4bf8e201b118/dandi-0.76.0-py3-none-any.whl", hash = "sha256:2a9693e88301897604950d92b29b6b62bbaa42bd613555d720e064cf72d248ec", size = 395021, upload-time = "2026-05-21T18:48:09.651Z" }, + { url = "https://files.pythonhosted.org/packages/50/8f/1a6563a4eefd574907d3adf535b6f23337c0a5803dd828156f8db574305e/dandi-0.77.0-py3-none-any.whl", hash = "sha256:da21a72918a53e33f0cbda58de6d39fd9f1c2575a3a2a5ecebb7e1472792c9e9", size = 404371, upload-time = "2026-08-08T01:08:21.263Z" }, ] [[package]] name = "dandischema" -version = "0.12.1" +version = "0.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema", extra = ["format"] }, @@ -1119,34 +1228,37 @@ dependencies = [ { name = "requests" }, { name = "zarr-checksum" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/23/b7/b44244184c16c1b1cc69070b53325965285b81843ad7755c429e1ffaa341/dandischema-0.12.1.tar.gz", hash = "sha256:481ed1da9481090d8000b3b2373a0d4876043f48d4cddc3364c18e0a97bd0c22", size = 98659, upload-time = "2025-11-26T20:16:58.672Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/e6/55c462074cb9106b553c53bc83b66b98a487ee32e154acbbe34b98c1fd9a/dandischema-0.14.0.tar.gz", hash = "sha256:963af71311c356bce99c4e056754f3a2bd1a4f33836f13d9197c399c7732176f", size = 102428, upload-time = "2026-08-05T19:32:26.784Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/16/959ccdc06e45781d3c41cd552baeaaf563ffb5fe240fbd24efd26b8b2b12/dandischema-0.12.1-py3-none-any.whl", hash = "sha256:88f84cefd7883ce15d5c2f6b92411b1d00fd76468b77950fff25381e17eaab44", size = 118561, upload-time = "2025-11-26T20:16:57.121Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b5/0f0828a19e023ccf5535b69d434611a7cfd17fed88bc1eca7c836339c908/dandischema-0.14.0-py3-none-any.whl", hash = "sha256:fce0c6c9df5b9504a230ba44d623656f4a798507f47fc3c9b0777cda016fbb73", size = 121953, upload-time = "2026-08-05T19:32:25.634Z" }, ] [[package]] name = "dash" -version = "4.1.0" +version = "4.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "comm" }, { name = "flask" }, { name = "importlib-metadata" }, + { name = "janus" }, { name = "nest-asyncio" }, { name = "plotly" }, + { name = "pydantic" }, { name = "requests" }, { name = "retrying" }, { name = "setuptools" }, { name = "typing-extensions" }, { name = "werkzeug" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/44/da/a13ae3a6528bd51a6901461dbff4549c6009de203d6249a89b9a09ac5cfb/dash-4.1.0.tar.gz", hash = "sha256:17a92a87b0c1eacc025079a705e44e72cd4c5794629c0a2909942b611faeb595", size = 6927689, upload-time = "2026-03-23T20:39:47.578Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/67/d5cea6dedfbfde4165436fb58154480ea6358a9e71a739d3366575b5b724/dash-4.4.1.tar.gz", hash = "sha256:9356ca7856bc496c12c5b6de5978aaf783e090d07450ee395ade1c0c2cbdf816", size = 8536482, upload-time = "2026-07-21T18:58:19.72Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/00/10b1f8b3885fc4add1853e9603af15c593fa0be20d37c158c4d811e868dc/dash-4.1.0-py3-none-any.whl", hash = "sha256:1af9f302bc14061061012cdb129b7e370d3604b12a7f730b252ad8e4966f01f7", size = 7232489, upload-time = "2026-03-23T20:39:40.658Z" }, + { url = "https://files.pythonhosted.org/packages/9a/29/498125538103a11eab9cfbbde41bacf93e14ab3ac92ae9fb4ac0ac4dd61b/dash-4.4.1-py3-none-any.whl", hash = "sha256:72120a91b10ee4d73f9446efd5d6a4ec218086feed7b1b479d2259844d1f658f", size = 8945027, upload-time = "2026-07-21T18:58:11.405Z" }, ] [[package]] name = "dash-extensions" -version = "2.0.5" +version = "2.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dash" }, @@ -1156,21 +1268,21 @@ dependencies = [ { name = "more-itertools" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/80/c2/feb284e47ba3a1f759d6c95003b83522c970690cf6baf3a21096c4f36263/dash_extensions-2.0.5.tar.gz", hash = "sha256:5ee9b444d5e4318637019fcd513857f9b4f488569963fa270f77ee07802e5405", size = 998632, upload-time = "2026-03-05T12:02:58.782Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/75/6ad77416195f3c93e4dbbb380e1d254c8a3927603781901e3826a157bab3/dash_extensions-2.0.6.tar.gz", hash = "sha256:84e0b2d60e48983fa275dc11df87b57b1930bfe0efe9ffafdc253199027c9fa8", size = 998460, upload-time = "2026-07-16T08:20:35.471Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/8b/cff245f82a869ca897545c2adbeacaddd6cc7851f7c9f9832337b4cdd976/dash_extensions-2.0.5-py3-none-any.whl", hash = "sha256:e672f693c799614c6ca802c2ca07f0c083042647983114d42b7c5fd1c7fa25e6", size = 1019240, upload-time = "2026-03-05T12:02:57.095Z" }, + { url = "https://files.pythonhosted.org/packages/23/22/4b66512a5c4109e728a4aed324203a4d0583a16fe0c794856c1ab60460f1/dash_extensions-2.0.6-py3-none-any.whl", hash = "sha256:35a9ef516dd9431e472b68a76f4ae63a95223fcf9d319dfac79278157de85670", size = 1019130, upload-time = "2026-07-16T08:20:33.861Z" }, ] [[package]] name = "dataclass-wizard" -version = "0.39.1" +version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/36/ea/6b2811092feecbe9d672e3641196ac5fcbec6664074da5dec8b9fd9b9059/dataclass_wizard-0.39.1.tar.gz", hash = "sha256:1679948ed7c62103f40b34df97d03b35e6b2ad50f58173fdbe30074e2e4730f2", size = 361190, upload-time = "2026-01-06T03:30:57.054Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/9d/465deff762411b97cc37fdd475402484724f695af042fa89ff221f725172/dataclass_wizard-1.0.0.tar.gz", hash = "sha256:d458e6a97585377337f1633e5738ee1c051e84ca7726276ecde78d6534e485b5", size = 449143, upload-time = "2026-07-03T03:21:14.302Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/a0/a221942b3fbbafaea4e211744d298366b6a9712c1aa336b05fc1c865ac0c/dataclass_wizard-0.39.1-py3-none-any.whl", hash = "sha256:3324e59eca705882eb34e2b3989b2beadd8c2b523e6269d4002cf1a4a5bf703b", size = 215344, upload-time = "2026-01-06T03:30:54.915Z" }, + { url = "https://files.pythonhosted.org/packages/2d/8b/d4db2e85e6f0a5dd2e590eb646aea1cabbf3c4629aec2bc5a5540c7a4250/dataclass_wizard-1.0.0-py3-none-any.whl", hash = "sha256:0dc53acbfed4ca5fe6bbdc517003959afbd50c0794dec1f8405d3c4d8ae6690c", size = 305849, upload-time = "2026-07-03T03:21:12.252Z" }, ] [[package]] @@ -1202,32 +1314,23 @@ wheels = [ [[package]] name = "debugpy" -version = "1.8.20" +version = "1.8.21" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207, upload-time = "2026-01-29T23:03:28.199Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/aa/12037145b7a56eaa5b29b41872f7a21b538e807e13f32c4d3c46e59be084/debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6", size = 1697577, upload-time = "2026-06-01T19:30:35.156Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/57/7f34f4736bfb6e00f2e4c96351b07805d83c9a7b33d28580ae01374430f7/debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d", size = 2550686, upload-time = "2026-01-29T23:03:42.023Z" }, - { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588, upload-time = "2026-01-29T23:03:43.314Z" }, - { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372, upload-time = "2026-01-29T23:03:45.526Z" }, - { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835, upload-time = "2026-01-29T23:03:47.245Z" }, - { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560, upload-time = "2026-01-29T23:03:48.738Z" }, - { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272, upload-time = "2026-01-29T23:03:50.169Z" }, - { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208, upload-time = "2026-01-29T23:03:51.547Z" }, - { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930, upload-time = "2026-01-29T23:03:53.585Z" }, - { url = "https://files.pythonhosted.org/packages/33/2e/f6cb9a8a13f5058f0a20fe09711a7b726232cd5a78c6a7c05b2ec726cff9/debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173", size = 2538066, upload-time = "2026-01-29T23:03:54.999Z" }, - { url = "https://files.pythonhosted.org/packages/c5/56/6ddca50b53624e1ca3ce1d1e49ff22db46c47ea5fb4c0cc5c9b90a616364/debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad", size = 4269425, upload-time = "2026-01-29T23:03:56.518Z" }, - { url = "https://files.pythonhosted.org/packages/c5/d9/d64199c14a0d4c476df46c82470a3ce45c8d183a6796cfb5e66533b3663c/debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f", size = 5331407, upload-time = "2026-01-29T23:03:58.481Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d9/1f07395b54413432624d61524dfd98c1a7c7827d2abfdb8829ac92638205/debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be", size = 5372521, upload-time = "2026-01-29T23:03:59.864Z" }, - { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658, upload-time = "2026-01-29T23:04:17.404Z" }, -] - -[[package]] -name = "decorator" -version = "5.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, + { url = "https://files.pythonhosted.org/packages/a2/df/bf625547431a9cadc9f4cbfeda38866e2b17f6aed147b625377e87834449/debugpy-1.8.21-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:9f96713896f39c3dff0ee841f47320c3f2983d33c341e009361bb0ebc79adc4e", size = 2483609, upload-time = "2026-06-01T19:30:50.794Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/59324b903599031ff9faaec1758292409f6561a0ec2492fe4b703327705a/debugpy-1.8.21-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:c193d474f0a211191f2b4449d2d06157c689013035bd952f3b617e0ef422b176", size = 3968900, upload-time = "2026-06-01T19:30:52.341Z" }, + { url = "https://files.pythonhosted.org/packages/14/cd/27f65b805d7fe005c44e1a36b9183ecdfbcdbf9d3e721a5115d461ecc7ee/debugpy-1.8.21-cp312-cp312-win32.whl", hash = "sha256:4743373c1cac7f9e74a1b9915bf1dbe0e900eca657ffb170ae07ac8363205ae9", size = 5336340, upload-time = "2026-06-01T19:30:54.047Z" }, + { url = "https://files.pythonhosted.org/packages/77/1d/c84e30c0c674184948b66f076ab271c01d940618a2824c23cd035a27bc20/debugpy-1.8.21-cp312-cp312-win_amd64.whl", hash = "sha256:bd7ba9dd3daa7c2f942c6ca8d4695a16bf9ac16b63615261c7982bc74f7ed20c", size = 5374751, upload-time = "2026-06-01T19:30:55.891Z" }, + { url = "https://files.pythonhosted.org/packages/77/6b/d817e1f8cc77aa055d37fba092e0febfdff40fe652d8d53d4cd7a86ad98d/debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88", size = 2477398, upload-time = "2026-06-01T19:30:57.644Z" }, + { url = "https://files.pythonhosted.org/packages/48/57/412421516afc3055fa577516f00beec3d663f9b0ab330639547ae6c57720/debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2", size = 3962096, upload-time = "2026-06-01T19:30:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2c616337cf6ba7b07ebbc97f02c6c945a8e2f76b365e33ee809c32ee36d1/debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1", size = 5336288, upload-time = "2026-06-01T19:31:00.79Z" }, + { url = "https://files.pythonhosted.org/packages/f8/99/9175103392f84c4b1bf7622888cdc68da07f0ff7d9e581266428f6776033/debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0", size = 5376567, upload-time = "2026-06-01T19:31:02.56Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3d/f4bbb323a548bfab2af3d6b4ffd9bf22636e55956a1285d317a1de643aad/debugpy-1.8.21-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9bb2a685287a2ac9b181cde89edcec64845cb51de7faaa75badb9a698bc24782", size = 2477209, upload-time = "2026-06-01T19:31:04.157Z" }, + { url = "https://files.pythonhosted.org/packages/8c/2d/6e7ec524984a1702777868de49a4c53202bddac2a432a76a093469587750/debugpy-1.8.21-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:3d6922439bf33fd38a3e2c447869ebc7b97da5cd3d329ff1ef9bc06c4903437e", size = 3927115, upload-time = "2026-06-01T19:31:05.863Z" }, + { url = "https://files.pythonhosted.org/packages/97/47/d1aa6d64005a98a9144647d99306b419396f9ad7bf1d73c119e17a81fb4d/debugpy-1.8.21-cp314-cp314-win32.whl", hash = "sha256:15d4963bd5ffa48f0da0947fd06757fa7621945048a14ad7705431566d3c0e7c", size = 5336724, upload-time = "2026-06-01T19:31:07.711Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/b905b90d163af11878c1af8abafa4a25206335e112e284e413454543a6da/debugpy-1.8.21-cp314-cp314-win_amd64.whl", hash = "sha256:fe0744a12353406de0ae8ccff0d0a4a666f00801a3db8fd04e7a5f761cd520e8", size = 5373803, upload-time = "2026-06-01T19:31:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92", size = 5352888, upload-time = "2026-06-01T19:31:25.186Z" }, ] [[package]] @@ -1252,6 +1355,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, ] +[[package]] +name = "deno" +version = "2.9.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/27/06ad530f3be68dafdfae57457c534d5bb014cd6da58c2bd0f5b28f9ab8fa/deno-2.9.5.tar.gz", hash = "sha256:2f9681d7d2118a5e92e18915d1d88a6966fd6173ba4a8fb772f04080057e5a6a", size = 8166, upload-time = "2026-08-06T15:08:32.319Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/99/1a1ff9e40e82d857b426a86d2159e3560000c2f98edb0f63170256582067/deno-2.9.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d321f54f82cb535904a108afd970c1c3e1db23716db1ab0cda5e0ca993dbf824", size = 42353187, upload-time = "2026-08-06T15:08:10.431Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/d60dac70124d045dfc6f01bbd181e2865904ecca5710b2d319869ff59727/deno-2.9.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:696dffb666d6336a3527857b2f9b665db33b07883bb6adc3595dbb3b78748cf1", size = 38520058, upload-time = "2026-08-06T15:08:14.978Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b4/5d462bc738b2172043a470ab97d7b6f3e7a287fa1916065e777e034ef1b1/deno-2.9.5-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bccec0965917b6daa323f9ce6ad8e884e0854506b0cdaec9de41bdac7620109a", size = 39908447, upload-time = "2026-08-06T15:08:19.751Z" }, + { url = "https://files.pythonhosted.org/packages/60/54/c6e0fb4b5e96dd7611bc75c8137046d7436666bd2e278f686e36d6a805af/deno-2.9.5-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:e5aec0419739fd0359663a78765d4feda19d1d0b60a682d25add9b78e19f95b4", size = 41642333, upload-time = "2026-08-06T15:08:24.965Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0b/3ca6468ec928d817ce6ef062ddfa11e71a3c68035c3401057d7cb33845f6/deno-2.9.5-py3-none-win_amd64.whl", hash = "sha256:570d4ee6f1ddb16d14848d36dac6cd2f586d8a0c94cf9c3e6b5da130da2597d5", size = 41615800, upload-time = "2026-08-06T15:08:30.015Z" }, +] + [[package]] name = "deprecated" version = "1.3.1" @@ -1304,7 +1420,7 @@ wheels = [ [[package]] name = "element-array-ephys" version = "0.3.6" -source = { git = "https://github.com/BrainCOGS/element-array-ephys.git#4067c9ace413b56aa2b71aa9986c3676e649fbd3" } +source = { git = "https://github.com/BrainCOGS/element-array-ephys.git#8a7942ad90ec0776e1d66776f8a846e13950df04" } dependencies = [ { name = "datajoint" }, { name = "ipykernel" }, @@ -1334,8 +1450,8 @@ dependencies = [ [[package]] name = "element-interface" -version = "0.8.1" -source = { git = "https://github.com/datajoint/element-interface.git#f9679f9ff9dfcd6c6c7a76b1c7556b484d9c51b2" } +version = "0.9.0" +source = { git = "https://github.com/datajoint/element-interface.git#987f2cdb4ed88c5edbcf1713bf1c75d3304fcd8f" } dependencies = [ { name = "dandi" }, { name = "numpy" }, @@ -1399,14 +1515,14 @@ wheels = [ [[package]] name = "faker" -version = "40.19.1" +version = "40.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/15/01/28c8ddae8caaf82c929655000963d83e3f01265a9af34e823c2ef2eee8ac/faker-40.19.1.tar.gz", hash = "sha256:76fa71fd3bf320db25e5504eb356f9a76b8a95cd6098524d006f446035b6b89d", size = 1969318, upload-time = "2026-05-22T15:57:37.433Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/fb/35acc76128d5ee8983d940da871cc8eba876e7b0e9e6bd402ecd7104dcdc/faker-40.37.0.tar.gz", hash = "sha256:a92dff7f310e61fb544c61720e15edb2e7448bc33d15a321a99e9ab7b94abf54", size = 2025920, upload-time = "2026-08-21T16:33:16.261Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/b4/40a1ec12ec834604f3848143343baf1c67bc9a1096e401907eaa0d25876a/faker-40.19.1-py3-none-any.whl", hash = "sha256:265259b37c013838baaae34940207288170df385d6c5281413fce56a3504d580", size = 2007643, upload-time = "2026-05-22T15:57:35.867Z" }, + { url = "https://files.pythonhosted.org/packages/3e/22/bf589b6b2c7527047f55450358fbe5961aeaadf168d6b51a1a1c67da497f/faker-40.37.0-py3-none-any.whl", hash = "sha256:ddbafa55c94d5b69c08ced3a7f202614204a02e07ba6548c729b8d18acc0b490", size = 2062853, upload-time = "2026-08-21T16:33:14.516Z" }, ] [[package]] @@ -1420,55 +1536,55 @@ wheels = [ [[package]] name = "fastjsonschema" -version = "2.21.2" +version = "2.22.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload-time = "2025-08-14T18:49:36.666Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/a4/9473c7c3b87009d9c1d74034e4a0f6a35ff0d42dd0f9866d0c3ec4e9217b/fastjsonschema-2.22.2.tar.gz", hash = "sha256:72064e12356a7d6ef02165be2946b9abadbdf238536e07eb587e3dbaa33099cf", size = 385171, upload-time = "2026-08-15T19:47:08.853Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, + { url = "https://files.pythonhosted.org/packages/49/82/2755c7c982086f00d4dab85bc120ec35045a9fc2191893a6ce79afe94443/fastjsonschema-2.22.2-py3-none-any.whl", hash = "sha256:0fb3915616adac85ccfdd737d26be1089845d2019819505b42d39888458f74d4", size = 27413, upload-time = "2026-08-15T19:47:04.406Z" }, ] [[package]] name = "fastremap" -version = "1.19.0" +version = "1.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/9b/b971717b03bd4dfb477d603b54f1433b899f1cff621340c421c6d8140f83/fastremap-1.19.0.tar.gz", hash = "sha256:53e8ad6d4e9c526b2ce963185d9b3cf95703b92ca20ae7d99821ac17f4e5f19c", size = 52335, upload-time = "2026-04-29T00:40:11.007Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/fe/73fdd6b735ff871c2c306e3c509dd87e17bda2467b738aaae4ef49bd9c8f/fastremap-1.19.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:570847a554546a5fd0c7083942bff87582d8e83418f8e52d673d09e5ce19ea67", size = 701848, upload-time = "2026-04-29T00:38:36.953Z" }, - { url = "https://files.pythonhosted.org/packages/b2/95/00890479f3d524f5cf05df366253d359bfc360a07b7fc6f124db60b48fff/fastremap-1.19.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6468890ba56e88f0b1ef339e1a64d9ae796241a8b76527900d26d663dd3c54c", size = 582130, upload-time = "2026-04-29T00:38:38.88Z" }, - { url = "https://files.pythonhosted.org/packages/fa/79/32965998a8ff298f89b472cefb5f25d9ee087521a4d273938fda7dc3ea9c/fastremap-1.19.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b77fc9eaa96a0b3d9e66e0017d95e316e554ca21b7ceed07e9dc80e1683a195", size = 6904718, upload-time = "2026-04-29T00:38:50.653Z" }, - { url = "https://files.pythonhosted.org/packages/1e/21/24f86d9673067fe5752daadeedc7abb8ddebb8a63b01539edd459dcd4ec8/fastremap-1.19.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5913454be791c0d9ef839ff4d8f703fbcae5a329d977687eb10f91ab0812593", size = 7082899, upload-time = "2026-04-29T00:38:57.583Z" }, - { url = "https://files.pythonhosted.org/packages/30/ae/b5a39af74e13e512885d8e782c93f05d8b439ffcd6197fec49bbd2e3e966/fastremap-1.19.0-cp312-cp312-win32.whl", hash = "sha256:b90f3ad97c9b0a540accc49b122a1690531f536f1bd7023133b734d5ca0b9fee", size = 428617, upload-time = "2026-04-29T00:39:04.902Z" }, - { url = "https://files.pythonhosted.org/packages/8a/49/67ffee4d1ddc9d1caf5688a3992692e756e9d346d4dcb49da59f9a5e299d/fastremap-1.19.0-cp312-cp312-win_amd64.whl", hash = "sha256:9474d9eeeb90eeed6d45e574d2f33bc155a7195a9db044aa27db62506ac03140", size = 602878, upload-time = "2026-04-29T00:38:59.476Z" }, - { url = "https://files.pythonhosted.org/packages/26/80/e998b2c8799340c082801b22160b0fb78591aa75215bda0b5c8e83ede2e1/fastremap-1.19.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a471eea6ba31253811fe557b82f3c8058604808ec261faf71c0af64526e8e2c8", size = 701135, upload-time = "2026-04-29T00:39:07.869Z" }, - { url = "https://files.pythonhosted.org/packages/02/9d/a15abce359d1b87dfd3fca19ad547180c1b5396f60464dd31efe1550b6e3/fastremap-1.19.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1f2d74278bb4fe8958b8043c74a4509892a9e0946f94ccd4958bc798aa56643", size = 581320, upload-time = "2026-04-29T00:39:10.4Z" }, - { url = "https://files.pythonhosted.org/packages/4d/7f/09f7f69eb44418f12e364a3bda87673bd5afcb7a3db5236dbc1c4f149611/fastremap-1.19.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c49010c8ae151ccf19ed74debc74646b510f96c2e13ea2b920069ef2ec7b0206", size = 6826649, upload-time = "2026-04-29T00:39:15.037Z" }, - { url = "https://files.pythonhosted.org/packages/16/41/e70db40a9d1a2cb8d4bbd5416f1c3607c52beb482fdc28ca7c4ef05630c9/fastremap-1.19.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be07b2f2f240947563e3959e561eadd3c6574254d41adbf7146cb15b4bce8f92", size = 6976692, upload-time = "2026-04-29T00:39:19.867Z" }, - { url = "https://files.pythonhosted.org/packages/c2/66/9bd9e8a3485876a9cb520fdb0616999db98500206180bed88ad8d3f5be71/fastremap-1.19.0-cp313-cp313-win32.whl", hash = "sha256:6619a877a16e732a4cc909268b10ec4dccffed70b3eb05eb6d259f5282094883", size = 432989, upload-time = "2026-04-29T00:39:24.756Z" }, - { url = "https://files.pythonhosted.org/packages/bd/17/5f82236f7b742753204d1388ecac5b9b2cc8d3043fbfb7176f0df071bdad/fastremap-1.19.0-cp313-cp313-win_amd64.whl", hash = "sha256:bba7d43fe3770960086cc69fcaca63768dd149159df42e02ef05fa1b8b2d79c0", size = 602795, upload-time = "2026-04-29T00:39:23.397Z" }, - { url = "https://files.pythonhosted.org/packages/77/ef/65cad42fe60d4b4611a1e95ba2d406d202e825de663d86961be82ee54b3b/fastremap-1.19.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:00197b4b2609ec8a14953d3af4780ed4d3b2dedb6fa612c8854217d4673e07a8", size = 700693, upload-time = "2026-04-29T00:39:26.335Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ab/b9d5a26e3b3ab4bd624e610e0a71e47f73917edfbd4fbb70a26ef5fd4a98/fastremap-1.19.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8b8ba5e9df854c7fef5a77a48be5f892520d8222c6f4602c2de41f6966c9cefb", size = 591630, upload-time = "2026-04-29T00:39:28.18Z" }, - { url = "https://files.pythonhosted.org/packages/63/7d/dd7b1938b142978ee2dc1e656d195aedb7527affb108f31124a884d66164/fastremap-1.19.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da8b90e6e8c6e32b9e18e490509ce098097bcd9cd0a30280b381460b507e98f9", size = 6796504, upload-time = "2026-04-29T00:39:32.508Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ea/101b1aea304127b532642f7985a816a65af29953de36e83877a2cc2a7a3e/fastremap-1.19.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03627be1bac4c66578de3793a7a3b9c6fda7ec2c16af0a1c52ee5ac025b132b1", size = 6882715, upload-time = "2026-04-29T00:39:36.398Z" }, - { url = "https://files.pythonhosted.org/packages/6c/d1/1ae713ca32044abaa326df048f9196f68ac897fe1f1d4349ec14ad4f8f96/fastremap-1.19.0-cp314-cp314-win32.whl", hash = "sha256:228f2fbf1df40da2a3268283fcaf3da700fe477f4c8a99e042e9235eab4013d2", size = 438590, upload-time = "2026-04-29T00:39:41.741Z" }, - { url = "https://files.pythonhosted.org/packages/bf/4c/45aaed0599d2e2eaea839c1604eb8a1d7850d122697890169360509e2618/fastremap-1.19.0-cp314-cp314-win_amd64.whl", hash = "sha256:d63c5980fbe91301d4ae37caf4e054b908b37878b68c7c8cc8cd523689576be6", size = 616956, upload-time = "2026-04-29T00:39:39.789Z" }, - { url = "https://files.pythonhosted.org/packages/d9/d7/a9251e6e279410fe3702e7bfec87b80e1559b686ff1c5a31c575483441cd/fastremap-1.19.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2cab361d27df0c3256729ef1a2047e2a0ee3d644f8bf6acf5f6d7aa01332f59a", size = 756620, upload-time = "2026-04-29T00:39:43.009Z" }, - { url = "https://files.pythonhosted.org/packages/18/8c/26dd49757f78498619be417b1a9b062acb073f62873581f766debf9e9408/fastremap-1.19.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0305002a45e57eef021c9003638134434a1fc7fabe68e1c909132b66eef6a920", size = 648660, upload-time = "2026-04-29T00:39:44.689Z" }, - { url = "https://files.pythonhosted.org/packages/cd/0a/40fb911b25b9c7bbc5c6a251d4109a686167791b4b6b794e2b4be62e144a/fastremap-1.19.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5704e0e632567a32adbee5f6ec85428983e1cac02531ae1ba283555ab7ab92ab", size = 6937623, upload-time = "2026-04-29T00:39:48.651Z" }, - { url = "https://files.pythonhosted.org/packages/39/3a/e0e07c196fab28a023888c27cdcfe7d421d44b12f24f1d782f3a40889bff/fastremap-1.19.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c495f7e5687a65766803b1ca8fb5468a0bcfd9b98b1585817ca91dfeb90672fc", size = 6764452, upload-time = "2026-04-29T00:39:52.621Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/311c7629d93e05b180742cb5319540fdbc506f4c8221d80cb09ff0ee9436/fastremap-1.19.0-cp314-cp314t-win32.whl", hash = "sha256:f9eddcee20abecbd96bed4c3547aaeb2a7d0692f9507e287c7001012a22ef568", size = 551561, upload-time = "2026-04-29T00:39:55.936Z" }, - { url = "https://files.pythonhosted.org/packages/09/09/8d81617b388d1be461e6e1dd318c287c3aba2c5bf3978c7075570443b2c3/fastremap-1.19.0-cp314-cp314t-win_amd64.whl", hash = "sha256:c48b6400090721f92d3ea5ff2f5c289b9d034e12722d97c5f3239c189b00f5f4", size = 770527, upload-time = "2026-04-29T00:39:54.467Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/22/3c/54d2378454d92ca1a894939d7db8b1a828ba45737e05532750520dd03e9f/fastremap-1.20.0.tar.gz", hash = "sha256:a64ffb4a99fd06c6f54f0ffbf48c73532fa238c429a4278b45767a55957468a0", size = 55917, upload-time = "2026-06-11T15:36:19.713Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/4e/751c65c98ddc2bb70e73e6c6fe3471e2f2091dd76001b5c73f827b9803b0/fastremap-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5638c0096bd5648343e8387b7fe9db45bf3f605ae95ccb9b65ea430a6db4d52e", size = 739587, upload-time = "2026-06-11T15:35:21.071Z" }, + { url = "https://files.pythonhosted.org/packages/ec/2a/34ad4f73183defb188accb1947e4bee06b8b86f5644419e31faf5fa98c9c/fastremap-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec8707820d06f3fd524c4a05b51174eaf9650827172cdf77efa1ed18293412e4", size = 609890, upload-time = "2026-06-11T15:35:22.921Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4b/adfb43a0170ba3b542021faff83d0a6d1426603cc4389e248b140fabda23/fastremap-1.20.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d834527d15139611624ac11d307b44dd5fc9e37f18fb2592ac5612d4852a54c", size = 7327271, upload-time = "2026-06-11T15:35:25.632Z" }, + { url = "https://files.pythonhosted.org/packages/33/e4/8c526e16c80c52fbd982e2a048bea10dcd256dc7422b29bb8d6cf76bf3b7/fastremap-1.20.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2daa147a1c02a74a4e2344a5631482e51e194bcf3bcc50410639511eed260f74", size = 7550963, upload-time = "2026-06-11T15:35:33.441Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e9/1541bc16846088cdcd5d55b1b61f6c1d3eb8f3e15c4b435dce3ca8eaa0ee/fastremap-1.20.0-cp312-cp312-win32.whl", hash = "sha256:23ca9cb8ff3ff182e391bcaea6af497fee2f2f861a6dff66d97d578b18124caf", size = 450602, upload-time = "2026-06-11T15:35:36.995Z" }, + { url = "https://files.pythonhosted.org/packages/27/47/b5a91118129433c19e6f686e8a6934cb1758b75554537161cd2efd697ed1/fastremap-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:823f51f444c54c6e32fd0e61b0b9bc620e39de97cc16db0e513e15ebe902311a", size = 627051, upload-time = "2026-06-11T15:35:35.747Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e2/fb69ac50568ca79dda1acea70df98c733fefb1f95fb12667090b34ce0d63/fastremap-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:50a265e258304a09d7afecf3f806b50a7db7a955d0bedba8feb33c11c378035c", size = 738322, upload-time = "2026-06-11T15:35:38.294Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d0/5b9ed5c553d77e301a9ae69b5aa349aa9cc06e06b2bfd2980260d997c928/fastremap-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2cb35c664850c3a3d8f60512268e68b6f717c7a1baa518a20b1050bce42f3c7f", size = 609416, upload-time = "2026-06-11T15:35:39.413Z" }, + { url = "https://files.pythonhosted.org/packages/57/8c/ccf8f996efdb83391ac0236806f0fe8e21a2cd81bc7dfe58d4be4a514163/fastremap-1.20.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6fcdbe8b589b86e61c2025b4c8e8f8182726f3d1b32e70d265156fa969b91196", size = 7285779, upload-time = "2026-06-11T15:35:41.689Z" }, + { url = "https://files.pythonhosted.org/packages/94/ec/2c8ed4fbec5d6a9a48ad17278686a9a2a6c2ad4279420a0724d75f0dafc4/fastremap-1.20.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd645a162abeaa0b0d2ae9c497314c2819a339b8c617e1718eea72e0e067cc4b", size = 7430315, upload-time = "2026-06-11T15:35:44.203Z" }, + { url = "https://files.pythonhosted.org/packages/76/a7/d08fa28ef70e7106bbc0e0581f3c4d57b7891fc9570570c0420206f8b27d/fastremap-1.20.0-cp313-cp313-win32.whl", hash = "sha256:6603d64c3547b84913acdb49b360dd9c6864d5defd0564ef839f4202849274e4", size = 454626, upload-time = "2026-06-11T15:35:46.495Z" }, + { url = "https://files.pythonhosted.org/packages/6a/33/0b130e2f6efd1b8d8862a14c20b2eadba18fe58d561dfe8ba40841ba2cca/fastremap-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:a653f54c1f5b52eca443eab33ca9700585c9d1298e309d5cc5ff8ce6d05111b0", size = 626936, upload-time = "2026-06-11T15:35:45.498Z" }, + { url = "https://files.pythonhosted.org/packages/66/20/00275ba5776982a7992fd828f284ba29af2674ed8f66d547502b36cdc849/fastremap-1.20.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f06a89985c1b5619c2fd1ffe0824da83689a0f1562c58b1667e18a8ec241faf3", size = 735745, upload-time = "2026-06-11T15:35:47.947Z" }, + { url = "https://files.pythonhosted.org/packages/41/f3/9fbaaa754dbe42a4557120af2da782c50e9fbbd0b429a86706ab8d75e0f5/fastremap-1.20.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:410e6a014b7f6e7c10aed91edc870773ce07023a6937129b3b96e69c99ee484f", size = 618685, upload-time = "2026-06-11T15:35:49.366Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ac/f2087ade77fb852258b03b9d4ba89d3b50c1e29792d92d0826a4025c83ba/fastremap-1.20.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:114ab797b7621f50e4fbc4ef3d5f9cf0604e5199a2f2bf9b185bd1318e54765b", size = 7241954, upload-time = "2026-06-11T15:35:51.51Z" }, + { url = "https://files.pythonhosted.org/packages/0d/82/363d99040c496fae137de7be1036a16489d470f94d96f94eb3ef8f52eedd/fastremap-1.20.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7a5e2abf28eb75b9b852abfcc1ceab169473d36ca2a5526e0637567d411e6e8", size = 7326676, upload-time = "2026-06-11T15:35:53.911Z" }, + { url = "https://files.pythonhosted.org/packages/90/29/8d246dd3c0c5c5a408eddf12cca5aa5832d26344ccd22f4bcb7952270241/fastremap-1.20.0-cp314-cp314-win32.whl", hash = "sha256:9fb5bb87167a36e519b23ac28a40c2296f70082dba05db0022ed051c685da887", size = 460685, upload-time = "2026-06-11T15:35:56.489Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0d/bb044a005bfeab74e3c488593ae31237f9912d8f2a82d085eaec054ec83f/fastremap-1.20.0-cp314-cp314-win_amd64.whl", hash = "sha256:8a1431fb5f60792f6072d4bf2216c248512c6baab8a6f1385b76b655c420896a", size = 642651, upload-time = "2026-06-11T15:35:55.234Z" }, + { url = "https://files.pythonhosted.org/packages/aa/57/8782a8e39cba8fd9f9ea7f0140f909af038219c3203cf0ed72906a2c9047/fastremap-1.20.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3d19af90c62356685d77b3bb852d5701dff001224dcf847c7a2fec904eb86ec0", size = 796849, upload-time = "2026-06-11T15:35:58.311Z" }, + { url = "https://files.pythonhosted.org/packages/ce/33/02e447089ecdb3827513b9deb5e6298a6cd79c5a954369c2a9b2f287af3f/fastremap-1.20.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c31a3e6aa9a88375c2b2b58f277b83ada5eb8d8122b3c0bc74b3cb719260a08a", size = 680463, upload-time = "2026-06-11T15:36:01.686Z" }, + { url = "https://files.pythonhosted.org/packages/6b/af/1190afa75ee6a7a22d710a4786f3cdc8d861695282f5c839d5fd6e9ff273/fastremap-1.20.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78088c09176a5c14364b4c2fcbf5970375516adc94638ce02f2c7af257cb7dc2", size = 7351102, upload-time = "2026-06-11T15:36:03.834Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ba/3b0f124b1fa2960e47d07004ba187cc4499a42d7d85029970c5a6cc43e43/fastremap-1.20.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb517805c2b82b28cc7231fa5469327d6b3327a7ae8d036ab87f019e5d7096d0", size = 7203188, upload-time = "2026-06-11T15:36:05.901Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d9/0fe3bb3ecc078dc4367c1651e23bd28ced778212be564bca972c4872b00d/fastremap-1.20.0-cp314-cp314t-win32.whl", hash = "sha256:b7701f3e5c870f84906afc9ca1daed2f046a98c4fadc66e994687439e26ade0a", size = 576045, upload-time = "2026-06-11T15:36:08.746Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c8/e6707c4f9161063cf31bdba1284361d81716642dd18342d2349dc42cc986/fastremap-1.20.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e45c389f99b77c764281350d3158e5ad3eb864d786733dedb63cc699a89ad363", size = 804680, upload-time = "2026-06-11T15:36:07.431Z" }, ] [[package]] name = "filelock" -version = "3.29.0" +version = "3.32.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/30/03b03951873a1a0ffc7e8ca0e10c15597b59e8d0e39260704cd2ea087bc4/filelock-3.32.4.tar.gz", hash = "sha256:2bde2e4cf732e0153406d8a7bc80620ecf5e621fe0d25e41143c4e3b4733ff30", size = 222126, upload-time = "2026-08-23T17:37:55.363Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" }, + { url = "https://files.pythonhosted.org/packages/01/a4/9b63d595d748e3aff8812b65eacc1a2c4bd90b7c2012e08e72373b4835eb/filelock-3.32.4-py3-none-any.whl", hash = "sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd", size = 99864, upload-time = "2026-08-23T17:37:53.913Z" }, ] [[package]] @@ -1530,15 +1646,15 @@ wheels = [ [[package]] name = "flask-caching" -version = "2.4.0" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cachelib" }, { name = "flask" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/53/5c46b6a80adc13ed9179879a93cfc2c1f190c64c48ba732b4f5819df520e/flask_caching-2.4.0.tar.gz", hash = "sha256:a7f14e43617cd0612a57bec2f80516d6d2ec888bfc50a807b1e4e41ca345a3b5", size = 153673, upload-time = "2026-04-17T20:27:24.318Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/ce/a54552acb28bd0ac617703780e8f2344a4e5aee7a46936328fe7cf5b3a95/flask_caching-2.5.0.tar.gz", hash = "sha256:5a8779b54695f96e1b4a7a149dd8c6d863433ea66327cde4311ce7fd7b57391f", size = 218694, upload-time = "2026-08-24T18:52:01.459Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/7c/acd8624c1295bcf10c0b67d0e5191b570081b181bc0e8aa5a5a8ab89ca0d/flask_caching-2.4.0-py3-none-any.whl", hash = "sha256:d15b8135f055c4f28f6f7dbcf8d36a3de4af1224def975ae6e0b43cbfa684486", size = 28727, upload-time = "2026-04-17T20:27:22.763Z" }, + { url = "https://files.pythonhosted.org/packages/fc/51/ce7bc1eb0787acef0fecd6dae3f9f45cf46da5c5a51da79efa1e0eb2724c/flask_caching-2.5.0-py3-none-any.whl", hash = "sha256:8e625acd99759171a428ceb9b669ba6743c11dd9b37ace4e0ea7a3ee34097ccd", size = 34976, upload-time = "2026-08-24T18:52:00.136Z" }, ] [[package]] @@ -1695,11 +1811,11 @@ wheels = [ [[package]] name = "fsspec" -version = "2026.4.0" +version = "2026.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/78/f34251dadb8f3921264a1d9b8946f5e542014ee2614b285261b4e40e6775/fsspec-2026.7.0.tar.gz", hash = "sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88", size = 317040, upload-time = "2026-07-28T16:34:51.052Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3c/6a2bf344106328fd04963664a60b9bb6496fc25df8e962fcdc1367285fb9/fsspec-2026.7.0-py3-none-any.whl", hash = "sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279", size = 206583, upload-time = "2026-07-28T16:34:49.538Z" }, ] [[package]] @@ -1716,14 +1832,14 @@ wheels = [ [[package]] name = "gitpython" -version = "3.1.50" +version = "3.1.60" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gitdb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/f6/354ae6491228b5eb40e10d89c4d13c651fe1cf7556e35ebdded50cff57ce/gitpython-3.1.50.tar.gz", hash = "sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc", size = 219798, upload-time = "2026-05-06T04:01:26.571Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/14/e6b1a48d831755a53c2029351fcef82e70db4a08f338daefe29d8d0cf31c/gitpython-3.1.60.tar.gz", hash = "sha256:e936431879fa85581b4311fa63492ea52251909e2d655b6529c704c904ddcc24", size = 230793, upload-time = "2026-08-25T18:33:46.102Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z" }, + { url = "https://files.pythonhosted.org/packages/71/63/ba28697918b7c190af9f3f21940d03e8814e25dd4ddd39d6929f3a553995/gitpython-3.1.60-py3-none-any.whl", hash = "sha256:39548bffb8fa0f3a548133348868bb4838e79d73283052207dc97781a569b6b4", size = 221893, upload-time = "2026-08-25T18:33:44.75Z" }, ] [[package]] @@ -1749,6 +1865,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] +[[package]] +name = "h2" +version = "4.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hpack" }, + { name = "hyperframe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/85/7c366e69d84c17bb778fe41419e1fbcce3033d5b7ce29bbffff0a98b859f/h2-4.4.1.tar.gz", hash = "sha256:4e866ffb1a869ae14dd9b5e6beb5c24a13da0495ad72b65925ded182521c1516", size = 2157281, upload-time = "2026-08-03T11:45:09.509Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/22/e85faf23bd72a92d1921e37d674ca56eb298a3c8be31fdecef0ff2b3aaac/h2-4.4.1-py3-none-any.whl", hash = "sha256:0e25f1462b23c9cb82d9eb02e28bc706dac2a68cb457c6a0d74d63c8a2a5d0e6", size = 62636, upload-time = "2026-08-03T11:44:59.164Z" }, +] + [[package]] name = "h5py" version = "3.16.0" @@ -1794,7 +1923,7 @@ wheels = [ [[package]] name = "hdmf" -version = "4.2.0" +version = "6.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "h5py" }, @@ -1803,9 +1932,18 @@ dependencies = [ { name = "pandas" }, { name = "ruamel-yaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/17/79/13daab608114a550ef53433d1718a923d01c9d9b0f1e713bf2b9c3f98c69/hdmf-4.2.0.tar.gz", hash = "sha256:3555fb39874544ec3cd741b9eccd8db2339fae000e5a51859e5c20c3b0c6d4b5", size = 16618478, upload-time = "2025-12-18T18:49:18.707Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/0d/1d41f54b7bc2232b168bdfc84d3f46958b40f086081e04d24378f2bc573d/hdmf-6.2.0.tar.gz", hash = "sha256:47dd0d0ebdf834b0cc5d1fdbe6b73d718549cffa489e47f68f638a4add20b65d", size = 16703812, upload-time = "2026-08-19T14:52:50.954Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/c4/2200240c6318b2057162335f77697011c07e85275ec64f11212fdeb7fd38/hdmf-4.2.0-py3-none-any.whl", hash = "sha256:d2856ebdd6058ff50d09ec226d65d72617919dd9e7ebcd6912c7e0917600f319", size = 340400, upload-time = "2025-12-18T18:49:16.507Z" }, + { url = "https://files.pythonhosted.org/packages/02/97/c6db59c49643f10bf1d9185a23263be78e54205d881a6004c898573624fa/hdmf-6.2.0-py3-none-any.whl", hash = "sha256:303e5c066a175448b3176b3377389e5d16bb4c5fc753f2dca540d6bd7b118b7c", size = 366628, upload-time = "2026-08-19T14:52:48.53Z" }, +] + +[[package]] +name = "hpack" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/5b/fcabf6028144a8723726318b07a32c2f3314acdff6265743cf08a344b18e/hpack-4.2.0.tar.gz", hash = "sha256:0895cfa3b5531fc65fe439c05eb65144f123bf7a394fcaa56aa423548d8e45c0", size = 51300, upload-time = "2026-06-23T18:34:46.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/b4/4a9fcfb2aef6ba44d9073ecd301443aa00b3dac95de5619f2a7de7ec8a91/hpack-4.2.0-py3-none-any.whl", hash = "sha256:858ac0b02280fa582b5080d68db0899c62a80375e0e5413a74970c5e518b6986", size = 34246, upload-time = "2026-06-23T18:34:45.472Z" }, ] [[package]] @@ -1836,27 +1974,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, ] +[package.optional-dependencies] +http2 = [ + { name = "h2" }, +] + [[package]] name = "humanize" -version = "4.15.0" +version = "4.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599, upload-time = "2025-12-20T20:16:13.19Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/ea/13a1ef3c12d12662905801495283530251918b70d62d368f1d2e0272c70d/humanize-4.16.0.tar.gz", hash = "sha256:7dc2244a2f84a4bfb1d36c37bac80cd78e35cdc5c119206d87b018e1445f3a3f", size = 89515, upload-time = "2026-06-30T16:17:29.859Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, + { url = "https://files.pythonhosted.org/packages/b0/aa/0b7365d30fed43e7a3449aba1fe20a0a7174d9cf13e282af4e69ac825441/humanize-4.16.0-py3-none-any.whl", hash = "sha256:353eb2f34c09d098b2880eee8bef21832eae6d174f48c5762fff7e5fcb74d01d", size = 137209, upload-time = "2026-06-30T16:17:28.36Z" }, +] + +[[package]] +name = "hyperframe" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" }, ] [[package]] name = "icalendar" -version = "7.1.2" +version = "7.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/e2/13c732a8da65961a249f9d745d2da5e06fc34a6c2ff24b13138bdedbf5f9/icalendar-7.1.2.tar.gz", hash = "sha256:ebc43ebeb357be98984b573d975118008dee3410d8df28b054ef2943cf3e367e", size = 471132, upload-time = "2026-05-22T10:42:29.729Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/2b/1bbf82d316df18c3331d9a06228819c8a5814ceda545a3e9980e52ffce1b/icalendar-7.3.0.tar.gz", hash = "sha256:7bd001c8e648205e1bde5c6a5b77096598e8d0893dcf57755c6c597635620132", size = 525811, upload-time = "2026-08-19T15:10:21.05Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/a0/2929543a1dfe2667e1ce08f2d6af59480d1467c0ee38acb94637965b3de3/icalendar-7.1.2-py3-none-any.whl", hash = "sha256:01c76243c76c549f58bb51510a8f0a4edb7c539726adda1356dfd0dc04fb7a53", size = 474031, upload-time = "2026-05-22T10:42:28.308Z" }, + { url = "https://files.pythonhosted.org/packages/bb/82/50bff78b0bb0c7d7c0cb39e0ee189b92f611fff6bd7cf57f25e92d5a7551/icalendar-7.3.0-py3-none-any.whl", hash = "sha256:8355acfe17be81b368f0b1e3740817cea9b56ea889931f8f1a87c62f2d28db0b", size = 542540, upload-time = "2026-08-19T15:10:19.525Z" }, ] [[package]] @@ -1876,42 +2028,58 @@ wheels = [ [[package]] name = "idna" -version = "3.16" +version = "3.19" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/88/bcf9709822fe69d02c2a6a77956c98ce6ea8ca8767a9aadcedc7eb6a2390/idna-3.16.tar.gz", hash = "sha256:d7a6da03db833450fca25d2358ac9ff06cd624577a4aea3a596d5c0f77b8e03d", size = 203770, upload-time = "2026-05-22T00:16:18.781Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/16/70255075a9859a0e3adb789b68ceb0e210dec03934245fd98d248226572f/idna-3.16-py3-none-any.whl", hash = "sha256:cc246e3a3f89580c3a951b5ad298ca4638078b2cdd4f115654332b5c26daded5", size = 74165, upload-time = "2026-05-22T00:16:16.698Z" }, + { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, ] [[package]] name = "imagecodecs" -version = "2026.5.10" +version = "2026.8.16" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/50/99/e461ccb522390cc05f8f0d33a10d66ca3febce2ebc2e06b5212263465000/imagecodecs-2026.5.10.tar.gz", hash = "sha256:1c0c46860f35e4637c2df70ebe8aa15141f6c4202a698e63757a4d7917a85acc", size = 9707764, upload-time = "2026-05-10T23:45:45.116Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/e4/7ad831028df07311002d58a937891492e1b2a73a8d14b6f3b6232ce8275b/imagecodecs-2026.5.10-cp312-abi3-macosx_10_15_x86_64.whl", hash = "sha256:80fab8afdc466cd5c1d74a788ccabc310084b0e6d9debc70881b7711b612ce83", size = 14843524, upload-time = "2026-05-14T00:22:11.939Z" }, - { url = "https://files.pythonhosted.org/packages/9d/46/31b84c3b671319dac1259e8714b9a728a9e427f92c242c2fa0cf657e8c5f/imagecodecs-2026.5.10-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc8e1e7267bd0dbb1b7ea8dd4cb7ecaf1415b75709649e08729c526c6aa45e66", size = 12431290, upload-time = "2026-05-10T23:44:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a5/ce27388cae7ea48cbfc39b542b877a415d0122be4c6183be41406bb18d9e/imagecodecs-2026.5.10-cp312-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8278d966b55b4d97a2278136c1ef44b81db52ee59f32c4698cdc8282741c0072", size = 26771645, upload-time = "2026-05-10T23:45:04.443Z" }, - { url = "https://files.pythonhosted.org/packages/e5/0d/3caa568e37e36532cfe767ccfa6da085150497e9023fe380989790be755f/imagecodecs-2026.5.10-cp312-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5a0a81f3fa95ce2503ab08afcc794d9fb976cc8e9465eb30db603182796d6cec", size = 27830401, upload-time = "2026-05-10T23:45:08.742Z" }, - { url = "https://files.pythonhosted.org/packages/ea/e6/9e3c8d2b76eefb6fa5c2c7a70d590005a6c27d8800f9fcddcff1c1f57574/imagecodecs-2026.5.10-cp312-abi3-win32.whl", hash = "sha256:e518a0569451de0648425e3a058538afee588a532921ab690be78c1ce9c8ebca", size = 16249481, upload-time = "2026-05-10T23:45:12.298Z" }, - { url = "https://files.pythonhosted.org/packages/01/bc/6ee42c44e4022dbed5a11ea4f368ad39c3fc17d6113f84432abf7c9cdce4/imagecodecs-2026.5.10-cp312-abi3-win_amd64.whl", hash = "sha256:200f70965c483ecf1755ba840485d42f4c5ab0467b3566685b18574947be8831", size = 19960184, upload-time = "2026-05-10T23:45:16.848Z" }, - { url = "https://files.pythonhosted.org/packages/56/e5/3e8ada169498fd55199ad1e9264fbcb4b29315fbf5f64440542ed2a7e9c9/imagecodecs-2026.5.10-cp312-abi3-win_arm64.whl", hash = "sha256:1c0fbc228506a41156fcf2bb7c8a38fed98807c59413aab8a805251e1eec0bf4", size = 15808614, upload-time = "2026-05-10T23:45:20.191Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/87/da/c2488dd650a72f65e6f7c808fecea4650e1fe9d34783583870056399e378/imagecodecs-2026.8.16.tar.gz", hash = "sha256:03a6add9ad9ba61dce1520489fd090b1b5cf2a2701a9666d1ab8e7653278175f", size = 9703497, upload-time = "2026-08-15T16:07:19.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/e4/f0db4e878aa61a7b70940531be3d21ecd9d0730744d366757fb283d0d604/imagecodecs-2026.8.16-cp312-abi3-macosx_10_15_x86_64.whl", hash = "sha256:45be0f38ca22144dcaf2927feceab6f765cd311581e554302abc3fcb9c3aeddb", size = 14993070, upload-time = "2026-08-15T16:06:04.7Z" }, + { url = "https://files.pythonhosted.org/packages/be/ea/416657fb1cf0cb93c2564922a94f8bd361ae3d73a591c4b84e257a2305d8/imagecodecs-2026.8.16-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:53f4b7d70a5554f8d5f6f09746e5e9569ce4932b12e6997d805b81c377621fed", size = 12928116, upload-time = "2026-08-15T16:06:08.041Z" }, + { url = "https://files.pythonhosted.org/packages/21/cf/398d49c8b616bc997b58749812dab5719e68165caa0275d5a1e3e310a1ba/imagecodecs-2026.8.16-cp312-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:908fa48740d52acbaea200d422e2267623122a1987fc85e898c77b2bb02d3e00", size = 28094370, upload-time = "2026-08-15T16:06:11.642Z" }, + { url = "https://files.pythonhosted.org/packages/67/1b/0771f9b93a8f43b1e98a20d33fab02a6eceb8bb75c32764b5d47ee4db36f/imagecodecs-2026.8.16-cp312-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c1068e0db9bc09cbd32510e543caed50f231096aecbb4c9cf7bcfbd2ffc53a50", size = 28080673, upload-time = "2026-08-15T16:06:15.463Z" }, + { url = "https://files.pythonhosted.org/packages/66/57/876bf8245b672b1fc901b65b9d1d0a37c60f7ed36e6ae8815c4af49e2779/imagecodecs-2026.8.16-cp312-abi3-pyemscripten_2025_0_wasm32.whl", hash = "sha256:59e16b27641bd08b5162de01a8bc382cd32a5e448cb5c2f4a1b252ea96d37fed", size = 2280993, upload-time = "2026-08-15T16:06:17.576Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a2/b0ea5fee8c2c4f3cf68bb2243f640ea087885598aedb2f98bde0298f73ec/imagecodecs-2026.8.16-cp312-abi3-pyemscripten_2026_0_wasm32.whl", hash = "sha256:fcb28f8e552f26c195710bddbf7e8685e789ee9309725df4a275df16d7a136bc", size = 2273594, upload-time = "2026-08-15T16:06:19.082Z" }, + { url = "https://files.pythonhosted.org/packages/cf/b7/cae1b739d368bc17df669f43793b5e6a7d1f56e19438eaa41add21611919/imagecodecs-2026.8.16-cp312-abi3-win32.whl", hash = "sha256:82bc27758f25d181eb4fd4fd8997b3eb07118dc673dee93aa3e64df8485e89bc", size = 16562229, upload-time = "2026-08-15T16:06:21.677Z" }, + { url = "https://files.pythonhosted.org/packages/3e/da/d168a0e706103db3b82bde1b088d493e84a20da26f58be42bb2f1fca87e7/imagecodecs-2026.8.16-cp312-abi3-win_amd64.whl", hash = "sha256:6444a421272665ebd0116b54ad96347b86b4a5e21b59ed184487145cd3937f4b", size = 21271669, upload-time = "2026-08-15T16:06:25.021Z" }, + { url = "https://files.pythonhosted.org/packages/99/0b/31642c8c404d436496b76c7cf6df220617f2e1ae36ae25e6809aa0a36a10/imagecodecs-2026.8.16-cp312-abi3-win_arm64.whl", hash = "sha256:b05e3ae5fa190c9722a0865cc06a3efccf27b025cbeeb8e9fd6beae0de5ce1d2", size = 16870662, upload-time = "2026-08-15T16:06:28.055Z" }, + { url = "https://files.pythonhosted.org/packages/52/f4/cacc8eca9b6349e75b3fd01148d4b5e3cccae5b4873643fd821d53764b11/imagecodecs-2026.8.16-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4af18875b6f9b9bed35b9905e2e00ef8e303981846e112e835583f52094581fe", size = 15419161, upload-time = "2026-08-15T16:06:31.213Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/93aa21ba529f61a988c2358e34ecb7f0a0a57f6735839bdb4902b285a86a/imagecodecs-2026.8.16-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1849ac820ca3073dfa9fe799d267b77cdf0f5118be4841274acf4c43e0608d3f", size = 13393687, upload-time = "2026-08-15T16:06:34.095Z" }, + { url = "https://files.pythonhosted.org/packages/77/bf/2963c729c8126821f90dfcfc8a22cf50d66ae82f5e9228e1261919cab020/imagecodecs-2026.8.16-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:8778982a9bb2d286793799d3e67715cc74479ff483572523e26316db10650e59", size = 33032087, upload-time = "2026-08-15T16:06:38.302Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e3/92588bf8bddcf642fa4370adb6ad2aad92bed92c6f3b5a02f3c1c00f0199/imagecodecs-2026.8.16-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8afd5d0802ee1ebcbdb809fe1758f8ca2b1900eabb7d737453297c7f218b4f6f", size = 32438276, upload-time = "2026-08-15T16:06:42.633Z" }, + { url = "https://files.pythonhosted.org/packages/1d/60/3d29f474719688346ec95dd4a7b3bcd799e31f4c7d15617f9c6dafa811cb/imagecodecs-2026.8.16-cp314-cp314t-win32.whl", hash = "sha256:6265622835428c21dc891261993f59c24f1e4255502c90aa36778996e91315f9", size = 17304429, upload-time = "2026-08-15T16:06:46.007Z" }, + { url = "https://files.pythonhosted.org/packages/74/95/90e45470ed4f0d8ca3e90174db4352bd40961315fc3ecffc15f0aed80683/imagecodecs-2026.8.16-cp314-cp314t-win_amd64.whl", hash = "sha256:a04b7f31fe4ec6416d2036b28b1df2f444ae1aa5163394059565e14677c9fc48", size = 22106210, upload-time = "2026-08-15T16:06:49.59Z" }, + { url = "https://files.pythonhosted.org/packages/78/1c/9ba4d8ede7829cabf7dd56ba806fe648e90dfd5a07d83f8afc28be034d79/imagecodecs-2026.8.16-cp314-cp314t-win_arm64.whl", hash = "sha256:fa7b9fd436b4e1a066fc71d42f506e028d2256f96950c03b1798e1fb257605b3", size = 17666610, upload-time = "2026-08-15T16:06:52.686Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7d/183d18f5b3c28d9aefa2130f12d633a57636865453f1ce7433041e00d31a/imagecodecs-2026.8.16-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f2b2f7f7a7c4918b3c1bc5a8dba7fd369c7456449fe7f61e522a72eec6905698", size = 15406581, upload-time = "2026-08-15T16:06:55.579Z" }, + { url = "https://files.pythonhosted.org/packages/62/41/f9cd37481294ba0eeecfb0063253406e79e1b2cb398d6198df26538c5e36/imagecodecs-2026.8.16-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:31537513f46db6822b5ccff57d02ea131e9f7786d52e2e0b69ce38792350a3fa", size = 13383849, upload-time = "2026-08-15T16:06:58.617Z" }, + { url = "https://files.pythonhosted.org/packages/37/dc/31ec12056945f18a6ddc1410325fa29b834eb52eb7bd3b63008db1bb1c66/imagecodecs-2026.8.16-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:207747fe4b1c65b46eedef0ede388cbc527d03e5de1dfc73873e305d8ecd6f06", size = 32775737, upload-time = "2026-08-15T16:07:02.631Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ac/4ddd09edc70dccb68ba0ed0074b9389b0cb05862cfb9b351adc4f0adf1ae/imagecodecs-2026.8.16-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:70959750594ab4fb16cc966e344979109efac0d3d3897bc8bac20cf560a825bd", size = 32271785, upload-time = "2026-08-15T16:07:07.154Z" }, + { url = "https://files.pythonhosted.org/packages/15/28/aef2f6919cfface4354d21f5b2ba923ee6d5ccdbc673bfa68661902dea4a/imagecodecs-2026.8.16-cp315-cp315t-win32.whl", hash = "sha256:701645d424f8fdb9007da269888797b16c50b774f1720b68302466771c339a7d", size = 17304445, upload-time = "2026-08-15T16:07:10.479Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a8/8716691a21dc3249ec5c8945a21010cdc0db68aaf21e21d23ad6700acbd6/imagecodecs-2026.8.16-cp315-cp315t-win_amd64.whl", hash = "sha256:8065dbb611562bb61b666a453d7c9b35533dd28b5afbeceb79dd69bb91162855", size = 22100436, upload-time = "2026-08-15T16:07:14.02Z" }, + { url = "https://files.pythonhosted.org/packages/56/a1/11a85d6243ef49da4cf141f0d52eb0a85028b0b0a1c82dda2ef8f1da3b57/imagecodecs-2026.8.16-cp315-cp315t-win_arm64.whl", hash = "sha256:64626fb7fc7a722136990dde9a5c3455dfcf579d5907db062eabb5c7d8c0e7cf", size = 17664176, upload-time = "2026-08-15T16:07:17.111Z" }, ] [[package]] name = "imageio" -version = "2.37.3" +version = "2.37.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "pillow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/84/93bcd1300216ea50811cee96873b84a1bebf8d0489ffaf7f2a3756bab866/imageio-2.37.3.tar.gz", hash = "sha256:bbb37efbfc4c400fcd534b367b91fcd66d5da639aaa138034431a1c5e0a41451", size = 389673, upload-time = "2026-03-09T11:31:12.573Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/62/aa770a9307508d2a2a2c62d536a49347bffe9e55322db27838d3c93d0b07/imageio-2.37.4.tar.gz", hash = "sha256:e45cbc5e83502047fb138f7f585f7f105a136a57eea5f4b3cfc6ce1b52720bd3", size = 390173, upload-time = "2026-07-20T05:26:11.369Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/fa/391e437a34e55095173dca5f24070d89cbc233ff85bf1c29c93248c6588d/imageio-2.37.3-py3-none-any.whl", hash = "sha256:46f5bb8522cd421c0f5ae104d8268f569d856b29eb1a13b92829d1970f32c9f0", size = 317646, upload-time = "2026-03-09T11:31:10.771Z" }, + { url = "https://files.pythonhosted.org/packages/3e/2d/ca050652104bab2cf55e569db2a178b1b61cb041fef28307f2db383f6d9f/imageio-2.37.4-py3-none-any.whl", hash = "sha256:1ab2e22c8debf700f24c3ac43e8f95f3b3a8110c83b93411e97b4b0b2cd1c7e6", size = 318000, upload-time = "2026-07-20T05:26:09.874Z" }, ] [[package]] @@ -1955,7 +2123,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "7.2.0" +version = "7.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -1965,38 +2133,37 @@ dependencies = [ { name = "jupyter-client" }, { name = "jupyter-core" }, { name = "matplotlib-inline" }, - { name = "nest-asyncio" }, + { name = "nest-asyncio2" }, { name = "packaging" }, { name = "psutil" }, { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ca/8d/b68b728e2d06b9e0051019640a40a9eb7a88fcd82c2e1b5ce70bef5ff044/ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e", size = 176046, upload-time = "2026-02-06T16:43:27.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/c4/e4a38f579de4225a561305666f7541cdabb30075def2aa1ac17bd73c1fb5/ipykernel-7.3.0.tar.gz", hash = "sha256:9acaaaf97d16355166e4085afe9d225bfbdf2b7ef520f9df3be8f2b248275e09", size = 184899, upload-time = "2026-06-10T08:41:25.481Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661", size = 118788, upload-time = "2026-02-06T16:43:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl", hash = "sha256:897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057", size = 120583, upload-time = "2026-06-10T08:41:23.648Z" }, ] [[package]] name = "ipython" -version = "9.13.0" +version = "9.16.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, { name = "ipython-pygments-lexers" }, { name = "jedi" }, { name = "matplotlib-inline" }, { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "prompt-toolkit" }, - { name = "psutil" }, + { name = "psutil", marker = "sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, { name = "pygments" }, { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549, upload-time = "2026-04-24T12:24:55.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/96/b150fe7e25a5a29ae9ac1374e71488639605d39a1ea4abb74c9ce33af235/ipython-9.16.1.tar.gz", hash = "sha256:5a3d1f9a47ff216d6cf9cf863124f6a2c1a198d1354c546a4d24a370a283b64c", size = 4515302, upload-time = "2026-08-03T08:36:15.571Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274, upload-time = "2026-04-24T12:24:53.038Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8e/1239df488393d61076653bfb29f759d0f60cab8e030abdf7c17c31539b51/ipython-9.16.1-py3-none-any.whl", hash = "sha256:4acae635506f6d352d94c4899a19d5f85f8bc4d230932342dca556fdab1c69b4", size = 625974, upload-time = "2026-08-03T08:36:13.654Z" }, ] [[package]] @@ -2013,7 +2180,7 @@ wheels = [ [[package]] name = "ipywidgets" -version = "8.1.8" +version = "8.1.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "comm" }, @@ -2022,9 +2189,9 @@ dependencies = [ { name = "traitlets" }, { name = "widgetsnbextension" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4c/ae/c5ce1edc1afe042eadb445e95b0671b03cee61895264357956e61c0d2ac0/ipywidgets-8.1.8.tar.gz", hash = "sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668", size = 116739, upload-time = "2025-11-01T21:18:12.393Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/7c/6db60eddf38547353b06d57941f5eee22a990640ce30479fd71a810507f2/ipywidgets-8.1.9.tar.gz", hash = "sha256:bcccba38a6ec3253f7a39c943cea5b9ad01999ce071396171adbc51c6a6a8613", size = 117252, upload-time = "2026-08-18T08:54:24.123Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl", hash = "sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e", size = 139808, upload-time = "2025-11-01T21:18:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/c3/55/298e9b3b864a198234997e87a1471c1b17d7f3546ace6d18fb5cf1ce24b2/ipywidgets-8.1.9-py3-none-any.whl", hash = "sha256:f2b8cbcaae10252b809fbe4d7470db75c09b769a32cbf816d20e5ca6d3c5a79d", size = 140101, upload-time = "2026-08-18T08:54:22.339Z" }, ] [[package]] @@ -2057,6 +2224,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, ] +[[package]] +name = "janus" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/7f/69884b6618be4baf6ebcacc716ee8680a842428a19f403db6d1c0bb990aa/janus-2.0.0.tar.gz", hash = "sha256:0970f38e0e725400496c834a368a67ee551dc3b5ad0a257e132f5b46f2e77770", size = 22910, upload-time = "2024-12-13T12:59:08.622Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/34/65604740edcb20e1bda6a890348ed7d282e7dd23aa00401cbe36fd0edbd9/janus-2.0.0-py3-none-any.whl", hash = "sha256:7e6449d34eab04cd016befbd7d8c0d8acaaaab67cb59e076a69149f9031745f9", size = 12161, upload-time = "2024-12-13T12:59:06.106Z" }, +] + [[package]] name = "jaraco-classes" version = "3.4.0" @@ -2080,14 +2256,14 @@ wheels = [ [[package]] name = "jaraco-functools" -version = "4.5.0" +version = "4.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "more-itertools" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/36/cf/ea4ef2920830dea3f5ab2ea4da6fb67724e6dca80ee2553788c3607243d0/jaraco_functools-4.5.0.tar.gz", hash = "sha256:3bb5665ea4a020cf78a7040e89154c77edadb3ca74f366479669c5999aa70b03", size = 20272, upload-time = "2026-05-15T21:34:10.025Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/1f/c23395957d41ccf27c4e535c3d334c4051e5395b3752057ba4cbaec35c56/jaraco_functools-4.6.0.tar.gz", hash = "sha256:880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280", size = 20837, upload-time = "2026-07-14T01:28:02.544Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/9a/982e48afcffcd727a9144506720ffd4224b6b7e355c98641866f38b7c043/jaraco_functools-4.5.0-py3-none-any.whl", hash = "sha256:79ce39246eddbde4b3a03b77ea5f0f7878dc669b166a66cf3fa8e266aa3fa2f4", size = 10594, upload-time = "2026-05-15T21:34:08.595Z" }, + { url = "https://files.pythonhosted.org/packages/02/36/ecc85bc96c273dc8a11273ed4782272975e6338d4a3e9228621175edf0e3/jaraco_functools-4.6.0-py3-none-any.whl", hash = "sha256:99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30", size = 11677, upload-time = "2026-07-14T01:28:01.59Z" }, ] [[package]] @@ -2125,11 +2301,11 @@ wheels = [ [[package]] name = "jinxed" -version = "2.0.4" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3c/5e/2eea62fd64689685b082f29e1dcd0e57a19009c90733318a4bc9ddb54b2c/jinxed-2.0.4.tar.gz", hash = "sha256:a92ac48923433c0a88577bb0479191788813fd5055ef17ff2b04a701a1b83f19", size = 135991, upload-time = "2026-05-23T16:30:58.304Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/d7/6e6d474ec5eaeca6a61acc17766bb19563b3a372b4b9d92910078f5fe49f/jinxed-2.1.0.tar.gz", hash = "sha256:7e755b831faa2443d44fb4ce7c0202eb9c3ed39bd5bf1193365888f4f6092b54", size = 61287, upload-time = "2026-07-03T15:46:48.153Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/b8/fe4e07cffa35c13fb8c7d21062082f27c89663f3009ec7d0c9b6908faa10/jinxed-2.0.4-py2.py3-none-any.whl", hash = "sha256:58ae0a4a2930b51e9de162208c356b382f5e25b3bc0ad73e2013b02a62d84e8b", size = 96427, upload-time = "2026-05-23T16:30:57.229Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1d/0a6be99b69bb448448403a45a241aff0dca751832ae54f027ed940d2eb52/jinxed-2.1.0-py2.py3-none-any.whl", hash = "sha256:43b802d18b70e405d410fb66eb2837d1101e7e5ea922e666507bb43f34d11d09", size = 104999, upload-time = "2026-07-03T15:46:47.114Z" }, ] [[package]] @@ -2143,24 +2319,23 @@ wheels = [ [[package]] name = "jsbeautifier" -version = "1.15.4" +version = "2.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "editorconfig" }, - { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ea/98/d6cadf4d5a1c03b2136837a435682418c29fdeb66be137128544cecc5b7a/jsbeautifier-1.15.4.tar.gz", hash = "sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592", size = 75257, upload-time = "2025-02-27T17:53:53.252Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/81/e0e11e305caa89831a0c8e555638d588c28b426d1105e734e113b00efd5d/jsbeautifier-2.0.3.tar.gz", hash = "sha256:9579d4e9dbaa00383f3efdff4c98c8140bb85ba319398e8b97cdaba27abd6ba3", size = 74659, upload-time = "2026-06-30T15:41:13.691Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/14/1c65fccf8413d5f5c6e8425f84675169654395098000d8bddc4e9d3390e1/jsbeautifier-1.15.4-py3-none-any.whl", hash = "sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528", size = 94707, upload-time = "2025-02-27T17:53:46.152Z" }, + { url = "https://files.pythonhosted.org/packages/51/0b/607e06204b207c29a86759c763624aabbdd16613844564536847d71ad461/jsbeautifier-2.0.3-py3-none-any.whl", hash = "sha256:f0190e279a2cdb827556ada63f41c9c63c11f8116ee06e264b24aa50311cbee3", size = 93877, upload-time = "2026-06-30T15:41:11.731Z" }, ] [[package]] name = "json5" -version = "0.14.0" +version = "0.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/4b/6f8906aaf67d501e259b0adab4d312945bb7211e8b8d4dcc77c92320edaa/json5-0.14.0.tar.gz", hash = "sha256:b3f492fad9f6cdbced8b7d40b28b9b1c9701c5f561bef0d33b81c2ff433fefcb", size = 52656, upload-time = "2026-03-27T22:50:48.108Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/7d/05c46a96a78147ae3bf99c2f4169ce144a70220b8d6fcd56f6ec368b8ce9/json5-0.15.0.tar.gz", hash = "sha256:7424d1f1eb1d56da6e3d70643f53619862b4ce81440bdb8ecfd6f875e5ba4a71", size = 53278, upload-time = "2026-06-19T20:08:27.716Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/42/cf027b4ac873b076189d935b135397675dac80cb29acb13e1ab86ad6c631/json5-0.14.0-py3-none-any.whl", hash = "sha256:56cf861bab076b1178eb8c92e1311d273a9b9acea2ccc82c276abf839ebaef3a", size = 36271, upload-time = "2026-03-27T22:50:47.073Z" }, + { url = "https://files.pythonhosted.org/packages/eb/be/59527c99478aade6bb33a68d72e6e18dd4e6ff6eacfc7d01bdb15bc76912/json5-0.15.0-py3-none-any.whl", hash = "sha256:56636a30c0e8a4665fe2179c0212f32eae3796dea89ea6f649b9436ecdb39618", size = 36570, upload-time = "2026-06-19T20:08:26.748Z" }, ] [[package]] @@ -2222,9 +2397,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, ] +[[package]] +name = "jupyter-builder" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/e1/e4ef07e2be228271b59e011a746d97feef69577af1f465b1cff0f1d7c760/jupyter_builder-1.2.2.tar.gz", hash = "sha256:b6cea88f58e44b2c5eba96f28d2e0d16fd453d3ca6dc9c4492ff8a1f2e97f601", size = 981074, upload-time = "2026-08-07T06:47:18.742Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/3b/920bc7f3c2ad25abc0071ae7ae55789f4b85ecf3e4467f0602a88dc668cb/jupyter_builder-1.2.2-py3-none-any.whl", hash = "sha256:6ebcd4c49daf5df6a18068a74a48010406700ed90a76c189fac43eaf85c60c63", size = 915266, upload-time = "2026-08-07T06:47:16.249Z" }, +] + [[package]] name = "jupyter-client" -version = "8.8.0" +version = "8.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-core" }, @@ -2232,10 +2420,11 @@ dependencies = [ { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/05/e4/ba649102a3bc3fbca54e7239fb924fd434c766f855693d86de0b1f2bec81/jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e", size = 348020, upload-time = "2026-01-08T13:55:47.938Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/dc/5512503b088997c2250b8bf18258fba9d9ce5ead641183700960d3c9d342/jupyter_client-8.9.1.tar.gz", hash = "sha256:a58f730dd9e728ba16ba1d62ebccf7ffe1ebbdbce4e95cfae941b7321ae1f4fa", size = 359256, upload-time = "2026-06-09T13:15:01.033Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/0b/ceb7694d864abc0a047649aec263878acb9f792e1fec3e676f22dc9015e3/jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a", size = 107371, upload-time = "2026-01-08T13:55:45.562Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl", hash = "sha256:0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81", size = 109828, upload-time = "2026-06-09T13:14:58.835Z" }, ] [[package]] @@ -2284,7 +2473,7 @@ wheels = [ [[package]] name = "jupyter-server" -version = "2.18.2" +version = "2.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2306,9 +2495,9 @@ dependencies = [ { name = "traitlets" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ca/15/1eacb0fcb79ef86e8a0a79a708e6ad7435f6f223097dd29a4ce861fabc44/jupyter_server-2.18.2.tar.gz", hash = "sha256:06b4f40d8a7a00bb39d5216859c81374a0e7cfefe6d8a5a7facc5a5c37c679a7", size = 753177, upload-time = "2026-05-06T07:04:36.274Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/dc/db3a582633170186f8c8b31298d7eb26ad0eb031a1f53476c258b64eed05/jupyter_server-2.20.0.tar.gz", hash = "sha256:b5778ba337d8015a3dc2b80803ecdd5ac18d3797fddf61a50ea5fb472b4ebe14", size = 756523, upload-time = "2026-06-17T12:09:09.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/50/ecf4f70d65bdb7519b28a33d1b2fee8a4b4ba1ae1a92f15d97e877c5de21/jupyter_server-2.18.2-py3-none-any.whl", hash = "sha256:fa5e46539ded65791838035a2b6001f13e54d5f64b8b3752eb1e91fdd641a5b8", size = 391907, upload-time = "2026-05-06T07:04:34.014Z" }, + { url = "https://files.pythonhosted.org/packages/f3/71/8c002223e873a870f5c41dc69b0a7c922301123e4a31d5d01ecb700aef77/jupyter_server-2.20.0-py3-none-any.whl", hash = "sha256:c3b67c93c471e947c18b5026f04f21614218adb706df8f48227d3ee8e0a7cdcc", size = 393143, upload-time = "2026-06-17T12:09:07.234Z" }, ] [[package]] @@ -2326,26 +2515,26 @@ wheels = [ [[package]] name = "jupyterlab" -version = "4.5.7" +version = "4.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, { name = "httpx" }, { name = "ipykernel" }, { name = "jinja2" }, + { name = "jupyter-builder" }, { name = "jupyter-core" }, { name = "jupyter-lsp" }, { name = "jupyter-server" }, { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "packaging" }, - { name = "setuptools" }, { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2b/22/8440ec827762146e7cdecf04335bd348795899d29dc6ae82238707353a2c/jupyterlab-4.5.7.tar.gz", hash = "sha256:55a9822c4754da305f41e113452c68383e214dcf96de760146af89ce5d5117b0", size = 23992763, upload-time = "2026-04-29T16:43:51.328Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/c0/45934229995d4c6e38192ca118d93185f60808f64157e3df3c5c28f8c5fd/jupyterlab-4.6.3.tar.gz", hash = "sha256:2e3db6e3a12495ebd188276e985bf5ac502fbde3d1e8628819920210008de498", size = 28319771, upload-time = "2026-08-10T18:50:57.947Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/aa/537b8f7d80e799af19af35fb3ddfc970b951088a13c57dd9387dcfbb7f61/jupyterlab-4.5.7-py3-none-any.whl", hash = "sha256:fba4cb0e2c44a52859669d8c98b45de029d5e515f8407bf8534d2a8fc5f0964d", size = 12450123, upload-time = "2026-04-29T16:43:46.639Z" }, + { url = "https://files.pythonhosted.org/packages/e9/47/242f46de028074651c9bd6d8000fc340ed0d3cdd1a0eae4387826123413a/jupyterlab-4.6.3-py3-none-any.whl", hash = "sha256:0a1ebc6567186f1eabd99536e94df7ed9e96d1e7c5ddf3e4406ae16e88abacb7", size = 17168312, upload-time = "2026-08-10T18:50:53.044Z" }, ] [[package]] @@ -2377,11 +2566,11 @@ wheels = [ [[package]] name = "jupyterlab-widgets" -version = "3.0.16" +version = "3.0.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/2d/ef58fed122b268c69c0aa099da20bc67657cdfb2e222688d5731bd5b971d/jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0", size = 897423, upload-time = "2025-11-01T21:11:29.724Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/8b/e739cf9066ad5037a2d4b0a403f06da374fdccb9748221661c8b492d3dbc/jupyterlab_widgets-3.0.17.tar.gz", hash = "sha256:6e61fe21ca8a66039180a5cc52a433e07279d2fee79c8be963e00d55193f17a8", size = 213919, upload-time = "2026-08-18T08:52:17.511Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8", size = 914926, upload-time = "2025-11-01T21:11:28.008Z" }, + { url = "https://files.pythonhosted.org/packages/33/ef/6d27fc118f58cb24886da413545a7efb0853d405fddbfd8b2d9ac09fbed4/jupyterlab_widgets-3.0.17-py3-none-any.whl", hash = "sha256:40ac1e9955acf116c4d995d9bfa082d86ad9ec6d91c4f134827cf5e0a5eb75e0", size = 217292, upload-time = "2026-08-18T08:52:15.47Z" }, ] [[package]] @@ -2523,26 +2712,39 @@ wheels = [ [[package]] name = "llvmlite" -version = "0.47.0" +version = "0.49.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/27/72ae94ea5c8f7349ec1c229d4cd058feb799cbd0833ad6d1b47c919b37b7/llvmlite-0.49.0.tar.gz", hash = "sha256:00f16db782f4a13c78c5804aedc434e46794a77e89999a168f9401106270e50a", size = 194467, upload-time = "2026-08-11T16:26:00.489Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/ae/3f699ebe3590e15e023a6372dd147526fd8ec398aacf9ceb844e854964a8/llvmlite-0.49.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b541c8fac3450db7574d1f53cf9dff83f285bfed9d69bf81fe71fc2a7d4f97fe", size = 40479231, upload-time = "2026-08-11T16:23:56.773Z" }, + { url = "https://files.pythonhosted.org/packages/be/3c/e97f69c62a2d972066d9a2612ce1f3de313035ac897a5b9f787cad8b55f7/llvmlite-0.49.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6acba646d88abbc87d5c113a3d62c1fbf8b8fee11c6493f516803e30f21ae870", size = 59890658, upload-time = "2026-08-11T16:24:05.451Z" }, + { url = "https://files.pythonhosted.org/packages/69/e6/e942ee08605fc0526ff3854260c384d8315a5830e16c4c2a5aebc14dc9bf/llvmlite-0.49.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ec8ad805e7515cb8440a690eb3cef4d34acb29eef80b705ec4e1c1ad3c43c68", size = 58344481, upload-time = "2026-08-11T16:24:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/84/49/2a44871cac6b5a2fd4aabd68cfdaf6de9a5c7edb36dee5d47b77bda4b50f/llvmlite-0.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a9c9e3af4e214acfefa4f73ebe7bc3fb35854a62b654edb3953f5ae33c08ba3", size = 41865543, upload-time = "2026-08-11T16:24:20.41Z" }, + { url = "https://files.pythonhosted.org/packages/7d/85/0b536a3c59f2636d9dd51dda832b6c1d0ffec37608429dedf128664918f1/llvmlite-0.49.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:039fa4054a06f537fb39248d4472284ca96be311a142ec09e69f95630ab469cc", size = 40479230, upload-time = "2026-08-11T16:24:27.295Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1c/ca8ba47b057b793099784475499771780ec46839f2782f753a7079d23520/llvmlite-0.49.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ddc7aecd4f56397ed6e8f120ec5dcd5a1a8f0e6032ca4af413462792d4dca2e3", size = 59890659, upload-time = "2026-08-11T16:24:35.595Z" }, + { url = "https://files.pythonhosted.org/packages/de/af/9526dfdd33a923f33e29a18b8f9801ee7ee4b7397e88d28192c1024c4a75/llvmlite-0.49.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3dee64784201b64c13a8df62c48a4f4218858faaa65889866bb29bdc243c038", size = 58344482, upload-time = "2026-08-11T16:24:45.79Z" }, + { url = "https://files.pythonhosted.org/packages/96/7f/9f5afcf6476b228d6b170408f377a0c4f91477fc1fc91f8141088b45bf46/llvmlite-0.49.0-cp313-cp313-win_amd64.whl", hash = "sha256:a1b414dc6b164738ec39dd8987cea73829057b7dd92fc6d91b52838385fc1dd2", size = 41865544, upload-time = "2026-08-11T16:24:53.962Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/16599b8c9f21802448059482eab48a9e74086dc56b901a677ba355565e64/llvmlite-0.49.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:80a84683d04516bb51da1bbeebddaf2c2f558809c93078a8f91807909ae331f8", size = 40479230, upload-time = "2026-08-11T16:25:01.513Z" }, + { url = "https://files.pythonhosted.org/packages/3a/61/0b23849141a4c4e7091fcd158ebb45195896974bebca3e58fee7cad4b4f4/llvmlite-0.49.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4281a0171d66d2098adce4ba706b8c550b1b10718650f682d64cde16e84e4de5", size = 59890659, upload-time = "2026-08-11T16:25:08.733Z" }, + { url = "https://files.pythonhosted.org/packages/c4/92/628692b74b31e27af9ba7e8ba651941ee4956959d5478123c453f59aad4a/llvmlite-0.49.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b095f15fb12c4d90495df5b1a3772b4732cc408398b204a787dbedd370e09c69", size = 58344479, upload-time = "2026-08-11T16:25:15.731Z" }, + { url = "https://files.pythonhosted.org/packages/96/8a/412fc273521b02cbfe0b5f8ad56cc696385f6eaeecdb9e9ae6a90111d98d/llvmlite-0.49.0-cp314-cp314-win_amd64.whl", hash = "sha256:294e2f0b70aef8f92d0ae7b203e2609f08beb39437eee73de59a21669331aae9", size = 42986588, upload-time = "2026-08-11T16:25:22.534Z" }, + { url = "https://files.pythonhosted.org/packages/fc/15/f47cf45c00c8b165ac3d268502dcb21d900e86f27fd338268a66ce922ab0/llvmlite-0.49.0-cp314-cp314-win_arm64.whl", hash = "sha256:95d1071023ed858b79f6971954fd7cc1f5dbcbab987718a4ccbe1411e47d0b81", size = 37441881, upload-time = "2026-08-11T16:25:28.324Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2e/eafd488766d1c02413cba24f7b22acb9b3ccdfd8407e98d30eb16bac4e2a/llvmlite-0.49.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:f3f2ff0aeb17d34fcce9f79b99baac441cfd3efa41b83e233ca4530a72381f72", size = 40479230, upload-time = "2026-08-11T16:25:35.125Z" }, + { url = "https://files.pythonhosted.org/packages/98/07/a2c4f04e2111ccc274b4d5e3331398a9dcf6d6e5e55d6444b1ad9d6381cf/llvmlite-0.49.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d5555ea1d63928481cbf7fcb1d67452b216c7e5b393a4eb7aa1401e67f2a4fc4", size = 59890658, upload-time = "2026-08-11T16:25:43.294Z" }, + { url = "https://files.pythonhosted.org/packages/80/f9/7b7b50f80b4585bcd78675ff3110c256877b11df32a8cde284f851762f57/llvmlite-0.49.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32adb84fdaae28aeb86fdb6253084ee707ee157289a2e98fe3caf48a62bee82", size = 58344482, upload-time = "2026-08-11T16:25:51.527Z" }, + { url = "https://files.pythonhosted.org/packages/d8/c6/32d68bfbf1d0c36888530ef6fd72864861af23dc546302b41033471a8c3a/llvmlite-0.49.0-cp314-cp314t-win_amd64.whl", hash = "sha256:be637e465010bc9c50f070468f7f1cf5385e92fee364d192dd5e6cea790ecba9", size = 42986602, upload-time = "2026-08-11T16:25:57.69Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:306a265f408c259067257a732c8e159284334018b4083a9e35f67d19792b164f", size = 37232769, upload-time = "2026-03-31T18:28:43.735Z" }, - { url = "https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5853bf26160857c0c2573415ff4efe01c4c651e59e2c55c2a088740acfee51cd", size = 56275178, upload-time = "2026-03-31T18:28:48.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/55/a3b4a543185305a9bdf3d9759d53646ed96e55e7dfd43f53e7a421b8fbae/llvmlite-0.47.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:003bcf7fa579e14db59c1a1e113f93ab8a06b56a4be31c7f08264d1d4072d077", size = 55128632, upload-time = "2026-03-31T18:28:52.901Z" }, - { url = "https://files.pythonhosted.org/packages/2f/f5/d281ae0f79378a5a91f308ea9fdb9f9cc068fddd09629edc0725a5a8fde1/llvmlite-0.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:f3079f25bdc24cd9d27c4b2b5e68f5f60c4fdb7e8ad5ee2b9b006007558f9df7", size = 38138692, upload-time = "2026-03-31T18:28:57.147Z" }, - { url = "https://files.pythonhosted.org/packages/77/6f/4615353e016799f80fa52ccb270a843c413b22361fadda2589b2922fb9b0/llvmlite-0.47.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a3c6a735d4e1041808434f9d440faa3d78d9b4af2ee64d05a66f351883b6ceec", size = 37232771, upload-time = "2026-03-31T18:29:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/31/b8/69f5565f1a280d032525878a86511eebed0645818492feeb169dfb20ae8e/llvmlite-0.47.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2699a74321189e812d476a43d6d7f652f51811e7b5aad9d9bba842a1c7927acb", size = 56275178, upload-time = "2026-03-31T18:29:05.748Z" }, - { url = "https://files.pythonhosted.org/packages/d6/da/b32cafcb926fb0ce2aa25553bf32cb8764af31438f40e2481df08884c947/llvmlite-0.47.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c6951e2b29930227963e53ee152441f0e14be92e9d4231852102d986c761e40", size = 55128632, upload-time = "2026-03-31T18:29:11.235Z" }, - { url = "https://files.pythonhosted.org/packages/46/9f/4898b44e4042c60fafcb1162dfb7014f6f15b1ec19bf29cfea6bf26df90d/llvmlite-0.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:c2e9adf8698d813a9a5efb2d4370caf344dbc1e145019851fee6a6f319ba760e", size = 38138695, upload-time = "2026-03-31T18:29:15.43Z" }, - { url = "https://files.pythonhosted.org/packages/1c/d4/33c8af00f0bf6f552d74f3a054f648af2c5bc6bece97972f3bfadce4f5ec/llvmlite-0.47.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:de966c626c35c9dff5ae7bf12db25637738d0df83fc370cf793bc94d43d92d14", size = 37232773, upload-time = "2026-03-31T18:29:19.453Z" }, - { url = "https://files.pythonhosted.org/packages/64/1d/a760e993e0c0ba6db38d46b9f48f6c7dceb8ac838824997fb9e25f97bc04/llvmlite-0.47.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ddbccff2aeaff8670368340a158abefc032fe9b3ccf7d9c496639263d00151aa", size = 56275176, upload-time = "2026-03-31T18:29:24.149Z" }, - { url = "https://files.pythonhosted.org/packages/84/3b/e679bc3b29127182a7f4aa2d2e9e5bea42adb93fb840484147d59c236299/llvmlite-0.47.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4a7b778a2e144fc64468fb9bf509ac1226c9813a00b4d7afea5d988c4e22fca", size = 55128631, upload-time = "2026-03-31T18:29:29.536Z" }, - { url = "https://files.pythonhosted.org/packages/be/f7/19e2a09c62809c9e63bbd14ce71fb92c6ff7b7b3045741bb00c781efc3c9/llvmlite-0.47.0-cp314-cp314-win_amd64.whl", hash = "sha256:694e3c2cdc472ed2bd8bd4555ca002eec4310961dd58ef791d508f57b5cc4c94", size = 39153826, upload-time = "2026-03-31T18:29:33.681Z" }, - { url = "https://files.pythonhosted.org/packages/40/a1/581a8c707b5e80efdbbe1dd94527404d33fe50bceb71f39d5a7e11bd57b7/llvmlite-0.47.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:92ec8a169a20b473c1c54d4695e371bde36489fc1efa3688e11e99beba0abf9c", size = 37232772, upload-time = "2026-03-31T18:29:37.952Z" }, - { url = "https://files.pythonhosted.org/packages/11/03/16090dd6f74ba2b8b922276047f15962fbeea0a75d5601607edb301ba945/llvmlite-0.47.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa1cbd800edd3b20bc141521f7fd45a6185a5b84109aa6855134e81397ffe72b", size = 56275178, upload-time = "2026-03-31T18:29:42.58Z" }, - { url = "https://files.pythonhosted.org/packages/f5/cb/0abf1dd4c5286a95ffe0c1d8c67aec06b515894a0dd2ac97f5e27b82ab0b/llvmlite-0.47.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6725179b89f03b17dabe236ff3422cb8291b4c1bf40af152826dfd34e350ae8", size = 55128632, upload-time = "2026-03-31T18:29:46.939Z" }, - { url = "https://files.pythonhosted.org/packages/4f/79/d3bbab197e86e0ff4f9c07122895b66a3e0d024247fcff7f12c473cb36d9/llvmlite-0.47.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6842cf6f707ec4be3d985a385ad03f72b2d724439e118fcbe99b2929964f0453", size = 39153839, upload-time = "2026-03-31T18:29:51.004Z" }, + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, ] [[package]] @@ -2622,7 +2824,7 @@ wheels = [ [[package]] name = "matplotlib" -version = "3.10.9" +version = "3.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "contourpy" }, @@ -2635,43 +2837,43 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/c6/5581e26c72233ebb2a2a6fed2d24fb7c66b4700120b813f51b0555acf0b6/matplotlib-3.10.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f0c3c28d9fbcc1fe7a03be236d73430cf6409c41fb2383a7ac52fe932b072cb1", size = 8319908, upload-time = "2026-04-24T00:12:21.323Z" }, - { url = "https://files.pythonhosted.org/packages/b7/18/4880dd762e40cd360c1bf06e890c5a97b997e91cb324602b1a19950ad5ce/matplotlib-3.10.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41cb28c2bd769aa3e98322c6ab09854cbcc52ab69d2759d681bba3e327b2b320", size = 8216016, upload-time = "2026-04-24T00:12:23.4Z" }, - { url = "https://files.pythonhosted.org/packages/32/91/d024616abdba99e83120e07a20658976f6a343646710760c4a51df126029/matplotlib-3.10.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ae20801130378b82d647ff5047c07316295b68dc054ca6b3c13519d0ea624285", size = 8789336, upload-time = "2026-04-24T00:12:26.096Z" }, - { url = "https://files.pythonhosted.org/packages/5c/04/030a2f61ef2158f5e4c259487a92ac877732499fb33d871585d89e03c42d/matplotlib-3.10.9-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c63ebcd8b4b169eb2f5c200552ae6b8be8999a005b6b507ed76fb8d7d674fe2", size = 9604602, upload-time = "2026-04-24T00:12:29.052Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c2/541e4d09d87bb6b5830fc28b4c887a9a8cf4e1c6cee698a8c05552ae2003/matplotlib-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d75d11c949914165976c621b2324f9ef162af7ebf4b057ddf95dd1dba7e5edcf", size = 9670966, upload-time = "2026-04-24T00:12:32.131Z" }, - { url = "https://files.pythonhosted.org/packages/04/a1/4571fc46e7702de8d0c2dc54ad1b2f8e29328dea3ee90831181f7353d93c/matplotlib-3.10.9-cp312-cp312-win_amd64.whl", hash = "sha256:d091f9d758b34aaaaa6331d13574bf01891d903b3dec59bfff458ef7551de5d6", size = 8217462, upload-time = "2026-04-24T00:12:35.226Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d0/2269edb12aa30c13c8bcc9382892e39943ce1d28aab4ec296e0381798e81/matplotlib-3.10.9-cp312-cp312-win_arm64.whl", hash = "sha256:10cc5ce06d10231c36f40e875f3c7e8050362a4ee8f0ee5d29a6b3277d57bb42", size = 8136688, upload-time = "2026-04-24T00:12:37.442Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d3/8d4f6afbecb49fc04e060a57c0fce39ea51cc163a6bd87303ccd698e4fa6/matplotlib-3.10.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b580440f1ff81a0e34122051a3dfabb7e4b7f9e380629929bde0eff9af72165f", size = 8320331, upload-time = "2026-04-24T00:12:39.688Z" }, - { url = "https://files.pythonhosted.org/packages/63/d9/9e14bc7564bf92d5ffa801ae5fac819ce74b925dfb55e3ebde61a3bbad3e/matplotlib-3.10.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b1b745c489cd1a77a0dc1120a05dc87af9798faebc913601feb8c73d89bf2d1e", size = 8216461, upload-time = "2026-04-24T00:12:42.494Z" }, - { url = "https://files.pythonhosted.org/packages/8a/17/4402d0d14ccf1dfc70932600b68097fbbf9c898a4871d2cbbe79c7801a32/matplotlib-3.10.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f3bcac1ca5ed000a6f4337d47ba67dfddf37ed6a46c15fd7f014997f7bf865f", size = 8790091, upload-time = "2026-04-24T00:12:44.789Z" }, - { url = "https://files.pythonhosted.org/packages/3e/0b/322aeec06dd9b91411f92028b37d447342770a24392aa4813e317064dad5/matplotlib-3.10.9-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a8d66a55def891c33147ba3ba9bfcabf0b526a43764c818acbb4525e5ed0838", size = 9605027, upload-time = "2026-04-24T00:12:47.583Z" }, - { url = "https://files.pythonhosted.org/packages/74/88/5f13482f55e7b00bcfc09838b093c2456e1379978d2a146844aae05350ad/matplotlib-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d843374407c4017a6403b59c6c81606773d136f3259d5b6da3131bc814542cc2", size = 9671269, upload-time = "2026-04-24T00:12:50.878Z" }, - { url = "https://files.pythonhosted.org/packages/c5/e0/0840fd2f93da988ec660b8ad1984abe9f25d2aed22a5e394ff1c68c88307/matplotlib-3.10.9-cp313-cp313-win_amd64.whl", hash = "sha256:f4399f64b3e94cd500195490972ae1ee81170df1636fa15364d157d5bdd7b921", size = 8217588, upload-time = "2026-04-24T00:12:53.784Z" }, - { url = "https://files.pythonhosted.org/packages/47/b9/d706d06dd605c49b9f83a2aed8c13e3e5db70697d7a80b7e3d7915de6b17/matplotlib-3.10.9-cp313-cp313-win_arm64.whl", hash = "sha256:ba7b3b8ef09eab7df0e86e9ae086faa433efbfbdb46afcb3aa16aabf779469a8", size = 8136913, upload-time = "2026-04-24T00:12:56.501Z" }, - { url = "https://files.pythonhosted.org/packages/9b/45/6e32d96978264c8ca8c4b1010adb955a1a49cfaf314e212bbc8908f04a61/matplotlib-3.10.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:09218df8a93712bd6ea133e83a153c755448cf7868316c531cffcc43f69d1cc9", size = 8368019, upload-time = "2026-04-24T00:12:58.896Z" }, - { url = "https://files.pythonhosted.org/packages/86/0a/c8e3d3bba245f0f7fc424937f8ff7ef77291a36af3edb97ccd78aa93d84f/matplotlib-3.10.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:82368699727bfb7b0182e1aa13082e3c08e092fa1a25d3e1fd92405bff96f6d4", size = 8264645, upload-time = "2026-04-24T00:13:01.406Z" }, - { url = "https://files.pythonhosted.org/packages/3d/aa/5bf5a14fe4fed73a4209a155606f8096ff797aad89c6c35179026571133e/matplotlib-3.10.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3225f4e1edcb8c86c884ddf79ebe20ecd0a67d30188f279897554ccd8fded4dc", size = 8802194, upload-time = "2026-04-24T00:13:03.702Z" }, - { url = "https://files.pythonhosted.org/packages/dd/5e/b4be852d6bba6fd15893fadf91ff26ae49cb91aac789e95dde9d342e664f/matplotlib-3.10.9-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de2445a0c6690d21b7eb6ce071cebad6d40a2e9bdf10d039074a96ba19797b99", size = 9622684, upload-time = "2026-04-24T00:13:06.647Z" }, - { url = "https://files.pythonhosted.org/packages/4c/3d/ed428c971139112ef730f62770654d609467346d09d4b62617e1afd68a5a/matplotlib-3.10.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b2b9516251cb89ff618d757daec0e2ed1bf21248013844a853d87ef85ab3081d", size = 9680790, upload-time = "2026-04-24T00:13:10.009Z" }, - { url = "https://files.pythonhosted.org/packages/e7/09/052e884aaf2b985c63cb79f715f1d5b6a3eaa7de78f6a52b9dbc077d5b53/matplotlib-3.10.9-cp313-cp313t-win_amd64.whl", hash = "sha256:e9fae004b941b23ff2edcf1567a857ed77bafc8086ffa258190462328434faf8", size = 8287571, upload-time = "2026-04-24T00:13:13.087Z" }, - { url = "https://files.pythonhosted.org/packages/f4/38/ae27288e788c35a4250491422f3db7750366fc8c97d6f36fbdecfc1f5518/matplotlib-3.10.9-cp313-cp313t-win_arm64.whl", hash = "sha256:6b63d9c7c769b88ab81e10dc86e4e0607cf56817b9f9e6cf24b2a5f1693b8e38", size = 8188292, upload-time = "2026-04-24T00:13:15.546Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e6/3bd8afd04949f02eabc1c17115ea5255e19cacd4d06fc5abdde4eeb0052c/matplotlib-3.10.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:172db52c9e683f5d12eaf57f0f54834190e12581fe1cc2a19595a8f5acb4e77d", size = 8321276, upload-time = "2026-04-24T00:13:18.318Z" }, - { url = "https://files.pythonhosted.org/packages/41/86/86231232fff41c9f8e4a1a7d7a597d349a02527109c3af7d618366122139/matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97e35e8d39ccc85859095e01a53847432ba9a53ddf7986f7a54a11b73d0e143f", size = 8218218, upload-time = "2026-04-24T00:13:20.974Z" }, - { url = "https://files.pythonhosted.org/packages/85/8f/becc9722cafc64f5d2eb0b7c1bf5f585271c618a45dbd8fabeb021f898b6/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aba1615dabe83188e19d4f75a253c6a08423e04c1425e64039f800050a69de6b", size = 9608145, upload-time = "2026-04-24T00:13:23.228Z" }, - { url = "https://files.pythonhosted.org/packages/32/5d/f7e914f7d9325abff4057cee62c0fa70263683189f774473cbfb534cd13b/matplotlib-3.10.9-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34cf8167e023ad956c15f36302911d5406bd99a9862c1a8499ea6f7c0e015dc2", size = 9885085, upload-time = "2026-04-24T00:13:25.849Z" }, - { url = "https://files.pythonhosted.org/packages/a5/fd/fa69f2221534e80cc5772ac2b7d222011a2acafc2ec7216d5dd174c864ae/matplotlib-3.10.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59476c6d29d612b8e9bb6ce8c5b631be6ba8f9e3a2421f22a02b192c7dd28716", size = 9672358, upload-time = "2026-04-24T00:13:28.906Z" }, - { url = "https://files.pythonhosted.org/packages/ab/1a/5a4f747a8b271cbb024946d2dd3c913ab5032ba430626f8c3528ada96b4b/matplotlib-3.10.9-cp314-cp314-win_amd64.whl", hash = "sha256:336b9acc64d309063126edcdaca00db9373af3c476bb94388fe9c5a53ad13e6f", size = 8349970, upload-time = "2026-04-24T00:13:31.904Z" }, - { url = "https://files.pythonhosted.org/packages/64/dc/95d60ecaefe30680a154b52ea96ab4b0dab547f1fd6aa12f5fb655e89cae/matplotlib-3.10.9-cp314-cp314-win_arm64.whl", hash = "sha256:2dc9477819ffd78ad12a20df1d9d6a6bd4fec6aaa9072681465fddca052f1456", size = 8272785, upload-time = "2026-04-24T00:13:34.511Z" }, - { url = "https://files.pythonhosted.org/packages/70/a0/005d68bc8b8418300ce6591f18586910a8526806e2ab663933d9f20a41e9/matplotlib-3.10.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:da4e09638420548f31c354032a6250e473c68e5a4e96899b4844cf39ddea23fe", size = 8367999, upload-time = "2026-04-24T00:13:36.962Z" }, - { url = "https://files.pythonhosted.org/packages/22/05/1236cc9290be70b2498af20ca348add76e3fffe7f67b477db5133a84f3ea/matplotlib-3.10.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:345f6f68ecc8da0ca56fad2ea08fde1a115eda530079eca185d50a7bc3e146c6", size = 8264543, upload-time = "2026-04-24T00:13:39.851Z" }, - { url = "https://files.pythonhosted.org/packages/cd/c2/071f5a5ff6c5bd63aaaf2f45c811d9bf2ced94bde188d9e1a519e21d0cba/matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4edcfbd8565339aa62f1cd4012f7180926fdbe71850f7b0d3c379c175cd6b66c", size = 9622800, upload-time = "2026-04-24T00:13:42.296Z" }, - { url = "https://files.pythonhosted.org/packages/95/57/da7d1f10a85624b9e7db68e069dd94e58dc41dbf9463c5921632ecbe3661/matplotlib-3.10.9-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6be157fe17fc37cb95ac1d7374cf717ce9259616edec911a78d9d26dae8522d4", size = 9888561, upload-time = "2026-04-24T00:13:45.026Z" }, - { url = "https://files.pythonhosted.org/packages/67/b2/ef8d6bb59b0edb6c16c968b70f548aa13b54348972def5aa6ac85df67145/matplotlib-3.10.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4e42042d54db34fda4e95a7bd3e5789c2a995d2dad3eb8850232ee534092fbbf", size = 9680884, upload-time = "2026-04-24T00:13:48.066Z" }, - { url = "https://files.pythonhosted.org/packages/61/1c/d21bfeb9931881ebe96bcfcff27c7ae4b160ae0ec291a714c42641a56d75/matplotlib-3.10.9-cp314-cp314t-win_amd64.whl", hash = "sha256:c27df8b3848f32a83d1767566595e43cfaa4460380974da06f4279a7ec143c39", size = 8432333, upload-time = "2026-04-24T00:13:51.008Z" }, - { url = "https://files.pythonhosted.org/packages/78/23/92493c3e6e1b635ccfff146f7b99e674808787915420373ac399283764c2/matplotlib-3.10.9-cp314-cp314t-win_arm64.whl", hash = "sha256:a49f1eadc84ca85fd72fa4e89e70e61bf86452df6f971af04b12c60761a0772c", size = 8324785, upload-time = "2026-04-24T00:13:53.633Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/49/64/f9a391af28f518b11ad45a8a712353c94a0aefce09d3703200e5c54b610a/matplotlib-3.11.1.tar.gz", hash = "sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30", size = 32612045, upload-time = "2026-07-18T03:39:46.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/6c/7ef7ebcb2bd9739b2b66b18b076e077f44bb46fdbe28ca0506edb3c62c79/matplotlib-3.11.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e15ef41507f3d525f46154ac9e3ae785dacde9f20e593a25de8986267892ef74", size = 9453849, upload-time = "2026-07-18T03:38:19.593Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f8/6d0c312c8d9738e7d9677f09fe5c986b3239e651a7b73a2deb38b65e4a71/matplotlib-3.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:21a67b961a6d597bca54fae826cd20695ba4a6e4d05424a08da6e13e3176fd6b", size = 9283113, upload-time = "2026-07-18T03:38:21.95Z" }, + { url = "https://files.pythonhosted.org/packages/c9/cf/b4ad2cc81b6672ea29ea04e64e350a9f9b493b0908ccd884c67eeff8f7b2/matplotlib-3.11.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ba8f811b8ddfac493734d6af0b2dff96919d0c28ca0d641858dab4262777c6ea", size = 10035615, upload-time = "2026-07-18T03:38:24.315Z" }, + { url = "https://files.pythonhosted.org/packages/88/90/4e10e033d9b66589d8ed98b84c95cdbb57033d57c1f41339d7393dbd2f2e/matplotlib-3.11.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c52f7ad20ef476806ed212380b1d54d20310c8b86bdc2c9a68b51f0024a44472", size = 10842559, upload-time = "2026-07-18T03:38:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/88/eb/799612d0f8cd3e816a10fec59329fca52cd2353264df80378dfc541ae855/matplotlib-3.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8b14eb22961fe865efb0e4ff167e333e428908b00115a8d800ccb65ee108e481", size = 10927532, upload-time = "2026-07-18T03:38:28.532Z" }, + { url = "https://files.pythonhosted.org/packages/88/89/56649bbaa2fd12e20f3be03dbcc135b0c8676d88bac17977599e3eb442a0/matplotlib-3.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:88a2a27dd9691ae448dfae4b26f59036be90c3c28757edd3553a29559d00859f", size = 9333886, upload-time = "2026-07-18T03:38:30.477Z" }, + { url = "https://files.pythonhosted.org/packages/c1/11/4d124efbbad677b7b7552f6f85a3bd432d4232f95400cea98fcd2ae36ef3/matplotlib-3.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:480194afceca4df2f137c2721227d3cba67121fbf4397b69cee7f83714b0a58a", size = 9007545, upload-time = "2026-07-18T03:38:32.833Z" }, + { url = "https://files.pythonhosted.org/packages/04/6c/4798363b7fb5644e309fe1fac30216e9146c9f70859d80d588c18caf5317/matplotlib-3.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191", size = 9454341, upload-time = "2026-07-18T03:38:35.001Z" }, + { url = "https://files.pythonhosted.org/packages/59/98/6acadbe7f98df19d274bc107ac58bb439fa75df82c33dc110d71a4a8501f/matplotlib-3.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1", size = 9283627, upload-time = "2026-07-18T03:38:37.061Z" }, + { url = "https://files.pythonhosted.org/packages/24/ea/65cec46fe241390ccea1b1754207ee28eb71c5ab866bd5f22fe47e538fa4/matplotlib-3.11.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3", size = 10035860, upload-time = "2026-07-18T03:38:39.663Z" }, + { url = "https://files.pythonhosted.org/packages/c7/10/63fdccccbabe002fb0960876baabc5e3f24d9c1bb4cfb25651457f74b3a0/matplotlib-3.11.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e", size = 10843594, upload-time = "2026-07-18T03:38:42.144Z" }, + { url = "https://files.pythonhosted.org/packages/98/51/a1155945bff7b91381875022ac1522c5dfdac0d006be8e7df389b3134eae/matplotlib-3.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f", size = 10927962, upload-time = "2026-07-18T03:38:44.302Z" }, + { url = "https://files.pythonhosted.org/packages/0d/3a/3d5e1f42dc761bf53401a62a83ff93389b37de9d2c093b2a3aa49ac34f1b/matplotlib-3.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b", size = 9334074, upload-time = "2026-07-18T03:38:46.616Z" }, + { url = "https://files.pythonhosted.org/packages/e2/db/3f5ea5a5b64060ef5e1ff60a19170423e41ce21b8497a6fe15a36e0b43e3/matplotlib-3.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2", size = 9007662, upload-time = "2026-07-18T03:38:49.112Z" }, + { url = "https://files.pythonhosted.org/packages/98/6e/c7ae5e0531425b69c0826b00ebbc264c85cab853f1cd6e096c9983c2cdc1/matplotlib-3.11.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f", size = 9503790, upload-time = "2026-07-18T03:38:51.527Z" }, + { url = "https://files.pythonhosted.org/packages/92/79/15be162e0a2ed546939674e2e97d0e33ec2447d86d4d4e611fa295bb178c/matplotlib-3.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1", size = 9336148, upload-time = "2026-07-18T03:38:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7f/36ffe144fc4aacfe0e3ed2318f72b6755d1e73b041d619b4d393e60f5a66/matplotlib-3.11.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464", size = 10049244, upload-time = "2026-07-18T03:38:55.911Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/55812d68c0a840d3a463638f48c00ab1fe338518ec49a640cb6473b444af/matplotlib-3.11.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf", size = 10860798, upload-time = "2026-07-18T03:38:58.282Z" }, + { url = "https://files.pythonhosted.org/packages/7a/64/cca444b4eb5e6c768c44fc5e1f0b5211f20ca2b282778051996e996a2bdf/matplotlib-3.11.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f", size = 10943282, upload-time = "2026-07-18T03:39:00.465Z" }, + { url = "https://files.pythonhosted.org/packages/e5/0f/a49c329d394f2e9ef38506982107e8b04ecf94dd41a9d8423ff82cc737c7/matplotlib-3.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78", size = 9383532, upload-time = "2026-07-18T03:39:02.468Z" }, + { url = "https://files.pythonhosted.org/packages/e4/50/103e86afb806d8f64d04ede14e4cfc09dbfc25f512421ff85fdd6ebd59cf/matplotlib-3.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a", size = 9059665, upload-time = "2026-07-18T03:39:04.607Z" }, + { url = "https://files.pythonhosted.org/packages/35/04/3079499fa8cb661ea66d13d6439d5a3ae6710a7afd5c7f72e08914f275f8/matplotlib-3.11.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c492d4ba9448595b6fd8708c6725963f8148e25c0d8842948da5b05f0ee8d3", size = 9456022, upload-time = "2026-07-18T03:39:07.041Z" }, + { url = "https://files.pythonhosted.org/packages/53/a2/69acfe84ec1f32930e801a5782a07fc5c79c8c6599a507b806d859d5da8e/matplotlib-3.11.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ac104be2768ffdd8655db9e71b768cbb45f2b9aa7b450cf1595e8f65d3822319", size = 9285475, upload-time = "2026-07-18T03:39:09.562Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b3/31b15a2ca56d4ddd6aaa1c884c2f51cf9a61cfaf5ca6f6fbd6343d38e6df/matplotlib-3.11.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be943cb68bc6660ead58c55b3aa6366cba2ef7feb06460fbcce32360376f19f", size = 10847102, upload-time = "2026-07-18T03:39:11.532Z" }, + { url = "https://files.pythonhosted.org/packages/64/0d/a17e966e620545c1548125af0b29ac812dd17b197a18a7462ac12fa859ee/matplotlib-3.11.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5af0dcda57d471440a7b5b623e70e0a61003518443d9098f211a96ecfbbc25be", size = 11131087, upload-time = "2026-07-18T03:39:13.764Z" }, + { url = "https://files.pythonhosted.org/packages/97/c5/5e100efdd67abb7de20befaa333612ef9bfc63417fb71398f904f25d083c/matplotlib-3.11.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3d3fd84082b1afbd9398466c81309e20045be20d48fe0fb18c43504d164cbbb2", size = 10929036, upload-time = "2026-07-18T03:39:16.888Z" }, + { url = "https://files.pythonhosted.org/packages/ce/04/d719a0a36930ecc8dfc801ff340f9dcfc4223f8ca5d39d06b4020032fff8/matplotlib-3.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:9601a1e90be21e4884c53b4f3dc3ee0544654946f9975258d691f1c2e2f119c6", size = 9489571, upload-time = "2026-07-18T03:39:19.449Z" }, + { url = "https://files.pythonhosted.org/packages/48/65/facabdc2f1f6caba7e856db64dfedddca25f7608df07d96a1c8fd114fd3b/matplotlib-3.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:ae30c6109848ac0f9fa36c5d6270938487614c47ba31860bd5361266dabc5685", size = 9164486, upload-time = "2026-07-18T03:39:21.424Z" }, + { url = "https://files.pythonhosted.org/packages/88/dd/18da6cd01cf96354534f98c468a25380c68ce582a2c9dd0cae12b04af4f2/matplotlib-3.11.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:dadfe80797174e2984aae3be0b77594a3c72d2c0a40fbd4a0de48d2728caf3ae", size = 9504876, upload-time = "2026-07-18T03:39:23.633Z" }, + { url = "https://files.pythonhosted.org/packages/79/b0/f0b63555a18b79d038c81fd6126f35fc4dfce0eaff48d96103348c7cf935/matplotlib-3.11.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:89b193b255f4f6f7948dbcee3691f4f341ab05d9a8874a67b45ddb4182922eda", size = 9336120, upload-time = "2026-07-18T03:39:25.797Z" }, + { url = "https://files.pythonhosted.org/packages/c6/dd/f210ec7c4a6f198d5567237048a93d0811fb5a1f1691f13320e592f95b41/matplotlib-3.11.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191163532cdefcb1571ca38a6d7e6474baccde64495783e6ba47aa07ec4b9bbb", size = 10858033, upload-time = "2026-07-18T03:39:27.999Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d2/d6d5324507c5fbb316db48e258c09c2807f3de03d9af47017e120070926f/matplotlib-3.11.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fdf1c818ab05d0e74002091ddaf414478a3a449ec9d51c8976d45be7e3a01e2", size = 11141827, upload-time = "2026-07-18T03:39:30.092Z" }, + { url = "https://files.pythonhosted.org/packages/0f/68/3c22e9320bdce2c4d2f1320643ef706db7a24cb7420eea28b97a2d67f5a8/matplotlib-3.11.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b937b9dba5f5f6c1e31c47abe2186c865c0914fd18f2ce0dfc39c9adcef5951d", size = 10943061, upload-time = "2026-07-18T03:39:32.356Z" }, + { url = "https://files.pythonhosted.org/packages/f6/4a/907ed190ee81a9df581e0ed5456134fc0f7cb55ffcfda2f9e54ca900761c/matplotlib-3.11.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f2912f647f3fbe1ccf085f91e213936f9101bead81a5e670565b1f1b3712f4fb", size = 9540074, upload-time = "2026-07-18T03:39:34.789Z" }, + { url = "https://files.pythonhosted.org/packages/23/d4/97c19b77e0a6e3b48581185bb65088f431cd20186076cc0f650a1757ea46/matplotlib-3.11.1-cp314-cp314t-win_arm64.whl", hash = "sha256:54d47b8ae8b579633a3902ca5b4ad6c1e132a5626d64447b2e22a66394e79987", size = 9213472, upload-time = "2026-07-18T03:39:37.141Z" }, ] [[package]] @@ -2686,6 +2888,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, ] +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + [[package]] name = "minio" version = "7.2.20" @@ -2704,47 +2915,52 @@ wheels = [ [[package]] name = "mistune" -version = "3.2.1" +version = "3.3.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003, upload-time = "2026-05-03T14:33:22.312Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/92/328a294a6de83bacb95bed01f04e0eaff4e3616ee359fc821a5dfc539b02/mistune-3.3.4.tar.gz", hash = "sha256:58b5c96d6fcb61190dfe5fae498d2b2065f99cf61e9649418fd54cf1ada86dfe", size = 121426, upload-time = "2026-07-22T05:22:30.89Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749, upload-time = "2026-05-03T14:33:20.551Z" }, + { url = "https://files.pythonhosted.org/packages/77/e4/288365afae98953bc01de09f686f40d8ee84578135aa7767d5d4e60b5278/mistune-3.3.4-py3-none-any.whl", hash = "sha256:ee015381e955e370962968befe1d729ab60fafb6a715ac6751763fbce38c8d4a", size = 66862, upload-time = "2026-07-22T05:22:29.419Z" }, ] [[package]] name = "ml-dtypes" -version = "0.5.4" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/4a/c27b42ed9b1c7d13d9ba8b6905dece787d6259152f2309338aed29b2447b/ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453", size = 692314, upload-time = "2025-11-17T22:32:31.031Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/b8/3c70881695e056f8a32f8b941126cf78775d9a4d7feba8abcb52cb7b04f2/ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac", size = 676927, upload-time = "2025-11-17T22:31:48.182Z" }, - { url = "https://files.pythonhosted.org/packages/54/0f/428ef6881782e5ebb7eca459689448c0394fa0a80bea3aa9262cba5445ea/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900", size = 5028464, upload-time = "2025-11-17T22:31:50.135Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cb/28ce52eb94390dda42599c98ea0204d74799e4d8047a0eb559b6fd648056/ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff", size = 5009002, upload-time = "2025-11-17T22:31:52.001Z" }, - { url = "https://files.pythonhosted.org/packages/f5/f0/0cfadd537c5470378b1b32bd859cf2824972174b51b873c9d95cfd7475a5/ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:c1a953995cccb9e25a4ae19e34316671e4e2edaebe4cf538229b1fc7109087b7", size = 212222, upload-time = "2025-11-17T22:31:53.742Z" }, - { url = "https://files.pythonhosted.org/packages/16/2e/9acc86985bfad8f2c2d30291b27cd2bb4c74cea08695bd540906ed744249/ml_dtypes-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:9bad06436568442575beb2d03389aa7456c690a5b05892c471215bfd8cf39460", size = 160793, upload-time = "2025-11-17T22:31:55.358Z" }, - { url = "https://files.pythonhosted.org/packages/d9/a1/4008f14bbc616cfb1ac5b39ea485f9c63031c4634ab3f4cf72e7541f816a/ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48", size = 676888, upload-time = "2025-11-17T22:31:56.907Z" }, - { url = "https://files.pythonhosted.org/packages/d3/b7/dff378afc2b0d5a7d6cd9d3209b60474d9819d1189d347521e1688a60a53/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b", size = 5036993, upload-time = "2025-11-17T22:31:58.497Z" }, - { url = "https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d", size = 5010956, upload-time = "2025-11-17T22:31:59.931Z" }, - { url = "https://files.pythonhosted.org/packages/e1/8b/200088c6859d8221454825959df35b5244fa9bdf263fd0249ac5fb75e281/ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:f21c9219ef48ca5ee78402d5cc831bd58ea27ce89beda894428bc67a52da5328", size = 212224, upload-time = "2025-11-17T22:32:01.349Z" }, - { url = "https://files.pythonhosted.org/packages/8f/75/dfc3775cb36367816e678f69a7843f6f03bd4e2bcd79941e01ea960a068e/ml_dtypes-0.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:35f29491a3e478407f7047b8a4834e4640a77d2737e0b294d049746507af5175", size = 160798, upload-time = "2025-11-17T22:32:02.864Z" }, - { url = "https://files.pythonhosted.org/packages/4f/74/e9ddb35fd1dd43b1106c20ced3f53c2e8e7fc7598c15638e9f80677f81d4/ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6", size = 702083, upload-time = "2025-11-17T22:32:04.08Z" }, - { url = "https://files.pythonhosted.org/packages/74/f5/667060b0aed1aa63166b22897fdf16dca9eb704e6b4bbf86848d5a181aa7/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d", size = 5354111, upload-time = "2025-11-17T22:32:05.546Z" }, - { url = "https://files.pythonhosted.org/packages/40/49/0f8c498a28c0efa5f5c95a9e374c83ec1385ca41d0e85e7cf40e5d519a21/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298", size = 5366453, upload-time = "2025-11-17T22:32:07.115Z" }, - { url = "https://files.pythonhosted.org/packages/8c/27/12607423d0a9c6bbbcc780ad19f1f6baa2b68b18ce4bddcdc122c4c68dc9/ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6", size = 225612, upload-time = "2025-11-17T22:32:08.615Z" }, - { url = "https://files.pythonhosted.org/packages/e5/80/5a5929e92c72936d5b19872c5fb8fc09327c1da67b3b68c6a13139e77e20/ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1", size = 164145, upload-time = "2025-11-17T22:32:09.782Z" }, - { url = "https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22", size = 673781, upload-time = "2025-11-17T22:32:11.364Z" }, - { url = "https://files.pythonhosted.org/packages/04/f9/067b84365c7e83bda15bba2b06c6ca250ce27b20630b1128c435fb7a09aa/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465", size = 5036145, upload-time = "2025-11-17T22:32:12.783Z" }, - { url = "https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f", size = 5010230, upload-time = "2025-11-17T22:32:14.38Z" }, - { url = "https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56", size = 221032, upload-time = "2025-11-17T22:32:15.763Z" }, - { url = "https://files.pythonhosted.org/packages/76/a3/9c912fe6ea747bb10fe2f8f54d027eb265db05dfb0c6335e3e063e74e6e8/ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049", size = 163353, upload-time = "2025-11-17T22:32:16.932Z" }, - { url = "https://files.pythonhosted.org/packages/cd/02/48aa7d84cc30ab4ee37624a2fd98c56c02326785750cd212bc0826c2f15b/ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9", size = 702085, upload-time = "2025-11-17T22:32:18.175Z" }, - { url = "https://files.pythonhosted.org/packages/5a/e7/85cb99fe80a7a5513253ec7faa88a65306be071163485e9a626fce1b6e84/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7", size = 5355358, upload-time = "2025-11-17T22:32:19.7Z" }, - { url = "https://files.pythonhosted.org/packages/79/2b/a826ba18d2179a56e144aef69e57fb2ab7c464ef0b2111940ee8a3a223a2/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf", size = 5366332, upload-time = "2025-11-17T22:32:21.193Z" }, - { url = "https://files.pythonhosted.org/packages/84/44/f4d18446eacb20ea11e82f133ea8f86e2bf2891785b67d9da8d0ab0ef525/ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1", size = 236612, upload-time = "2025-11-17T22:32:22.579Z" }, - { url = "https://files.pythonhosted.org/packages/ad/3f/3d42e9a78fe5edf792a83c074b13b9b770092a4fbf3462872f4303135f09/ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d", size = 168825, upload-time = "2025-11-17T22:32:23.766Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/6a/441eb053b078954f7fea284dfb288701884d0a1404d39babb858e1649023/ml_dtypes-0.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5359c588cc62de6f78d7430f06b65853d884955494d86d6ad90b6dd64a3f3a08", size = 565447, upload-time = "2026-08-13T14:14:01.737Z" }, + { url = "https://files.pythonhosted.org/packages/ed/cf/87e8a6c57eed63a91782a0d229856ddf73e138ce004dd71e2799a9dcdb33/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37da32aa97749251025666d62372775019594577b9c9e9cfda83bed48d778fdb", size = 360227, upload-time = "2026-08-13T14:14:02.938Z" }, + { url = "https://files.pythonhosted.org/packages/c7/f9/7d76c1eae866f5d4636401b31b6d6dd90e4b4ced1fa7cfdfcca9c60e4bd3/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b4a480aa8fd54a1805b8ac10f3f91763926a74f73c0c364c10f9231854f4170", size = 409890, upload-time = "2026-08-13T14:14:04.248Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/9c61ec2760b5cbfb1c6558d5c991a6d8fd3271053c32db20506a9a90272b/ml_dtypes-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e9d53925597fbffafd2a37048dadeddd0bdaba58058f6ae0869ed709a184d", size = 439333, upload-time = "2026-08-13T14:14:05.501Z" }, + { url = "https://files.pythonhosted.org/packages/6a/57/780ca3e5ab135b9fbdd8e5441abf5f801b30398371b691291e05ab9834c0/ml_dtypes-0.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eaed129a4afe90694b8685e2f9b6294849f5eda4af9a15be83a4326eeebd775", size = 552268, upload-time = "2026-08-13T14:14:06.866Z" }, + { url = "https://files.pythonhosted.org/packages/50/51/fd1582b8f5ed8a9e7be0e161a6ea0dff70cb280479a12178df0b3a72700e/ml_dtypes-0.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:084dfe51a7ad58b171f05115f8226ed4233a454a1611371947e806e76f0c638d", size = 565468, upload-time = "2026-08-13T14:14:08.5Z" }, + { url = "https://files.pythonhosted.org/packages/d2/22/20fd70ca6ed12446cb92d5b2a7745bd185f9d8b8cdeeadad976574398e6b/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28d676428b104bb9717b0928bc5c5129f2d6b51b6727587cc4289e7bf8713cb5", size = 360232, upload-time = "2026-08-13T14:14:09.873Z" }, + { url = "https://files.pythonhosted.org/packages/89/a5/da8ae6c6f1babe4b68e3e55d43d39b529e29774f10e0910671a6b8c86eb8/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26b1f1fa4f0435a2946859823f6e2bf06796f1e9f10f5a05b08a5e3c8f46ff69", size = 410169, upload-time = "2026-08-13T14:14:11.036Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/4561acefa00fa4bcbfb82ca6a48578b41f372cd7dd7cdd6eb4720abc2e5f/ml_dtypes-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:fb87f46b4f7ad7b5d3ad8f4b452b024bd4229d44c8ff934798c1fe656210387a", size = 439357, upload-time = "2026-08-13T14:14:12.172Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5d/6a01538e507ef0ed5e879985b13a92467bf8960696fb1131f8b8cadc60ff/ml_dtypes-0.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:57ed0d6b4ac5e7868361303a9c57fbcf63b768236ee14456f585dfcf260d0292", size = 552278, upload-time = "2026-08-13T14:14:13.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7a/97dc35667b7c9db33c5344c673cd27f87e34771875ea7100138726132ac9/ml_dtypes-0.6.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:84fa136b8602c8c39e3b6cb24918960cd6f36cade7a70376f56770729cd56510", size = 562551, upload-time = "2026-08-13T14:14:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/db/48/77f0ede10558d0d935da2e3276ed7e9c8cc2bad3463b9a0b66b03fc60be2/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317be9967fb84b0ce4e80e6b1bf71213d21971621cf6f1e501a63602a95297bf", size = 360334, upload-time = "2026-08-13T14:14:16.079Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b1/1831dd8c9b06c013085d31a2ac4f03392d43bd36bfc6ff591a08bcedc1cf/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f490c003369ce60e514a0c3b12374f05274c101fee1bead6740ec8a564032b0", size = 409966, upload-time = "2026-08-13T14:14:17.477Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ad/9c32c53f823dda3742df19a79c10bc198365937873ea125ba65747440c23/ml_dtypes-0.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:d574c2b28921dc72e869df248f1a278f6eee176a1f237c8642e1a71eb15f3977", size = 457224, upload-time = "2026-08-13T14:14:18.608Z" }, + { url = "https://files.pythonhosted.org/packages/41/3d/dd98205418a13353d41c52bf5326d8cbec515aace46174e23c6ea01c2978/ml_dtypes-0.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:f4adb4af61516510d786cf8c01851a66f6d3ddfa79e1144deaa5b40d8507231e", size = 568378, upload-time = "2026-08-13T14:14:19.843Z" }, + { url = "https://files.pythonhosted.org/packages/65/36/32e7beef3281fed74883451477ad976364323206dbfaa95e948ba788dac7/ml_dtypes-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3e169214e0d80ff1c038e1b3017e33c23e43bdf948d42d31de8283111c7e2fa3", size = 590177, upload-time = "2026-08-13T14:14:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/99b3d9b3c984b3bd1e81d8244f1fa2f812e44060d853205b2df6271aa17c/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:573b11f3c327e17ef3826d266e676cf1149a1f3016f822a05f2306c55d8246bf", size = 363142, upload-time = "2026-08-13T14:14:22.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fb/8091c0aee7f2712de99c7fd4b1642382644dec6a4962effe4f5b9d16a973/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b76fa1d3f92967d58289ac47ab7458ede66e6f3527fff3e59142aee57d9307cd", size = 430645, upload-time = "2026-08-13T14:14:23.737Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/962d2c589513b5930d05b6eae5fbd22ad8bbcf26bb763449f3d8f912360f/ml_dtypes-0.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3be9911d953f97cddded4b9961d7b650473b7e55806d20f6176f8356dfe7b38e", size = 465667, upload-time = "2026-08-13T14:14:25.04Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ca/bcb25e246edd19af5fa1cf6267040bd9977a7afca846e6cfd4a52078b44f/ml_dtypes-0.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e74266ca8e97874a937b7646378c178025650a236584f7474d10d8086a6edea3", size = 572706, upload-time = "2026-08-13T14:14:26.296Z" }, + { url = "https://files.pythonhosted.org/packages/12/42/46cb442648e3c774d8cb25f2e1e41d496cdcc91fbe9c2a6f75c0b8df7af6/ml_dtypes-0.6.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:b1b503864fada3f74fabf8d9fee7b4c1cbe956301e6fdece975d5f77c2fce958", size = 562550, upload-time = "2026-08-13T14:14:27.542Z" }, + { url = "https://files.pythonhosted.org/packages/07/56/844eff5af7a2d1a09d75df12c70225c3a6b6a771f95876b2bf5f7d10ad44/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c6ad60af4102789a5c09824004beade2f7f28cd1cd581ee5c170d9dc2fbb00e", size = 360332, upload-time = "2026-08-13T14:14:28.767Z" }, + { url = "https://files.pythonhosted.org/packages/b6/29/b7165a3a76364a5baa6aa4ee82a0adf73a3c014b8cd126120b62cc087992/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4f1b9329a251e4affe3bb58f4d3e2db22a714396fd7ffb40d0b5db423c24d17", size = 409964, upload-time = "2026-08-13T14:14:30.023Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2e/f61c54a0544b6a170ac1bb89bcf406af53fb2deffc5476b6d2d3df5ba13e/ml_dtypes-0.6.0-cp315-cp315-win_amd64.whl", hash = "sha256:488c99ab181a2f59d9ec3b12c5fa11ec904e92be2c4ba18cded54dd7501208fe", size = 457249, upload-time = "2026-08-13T14:14:31.213Z" }, + { url = "https://files.pythonhosted.org/packages/63/00/bee1bc9faa02a46e7a851019fd23f47ca1f906609edbec8b6ba5decc3cc3/ml_dtypes-0.6.0-cp315-cp315-win_arm64.whl", hash = "sha256:de9d14748dbf3968951436ef514a29c9d1fe438aa680d110134ee2f7a9f9df18", size = 568381, upload-time = "2026-08-13T14:14:32.548Z" }, + { url = "https://files.pythonhosted.org/packages/72/f7/9a5edede28f73185fd51d75030ef7f11d76997bab3a92427d986e54fe2eb/ml_dtypes-0.6.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e25bb3b0ad1217b60626e4ed45b10ca170c41d99fbe44a12bebc1e07ec4aad55", size = 589877, upload-time = "2026-08-13T14:14:33.695Z" }, + { url = "https://files.pythonhosted.org/packages/fd/81/d5924a141b850b606eb027493c9c3ca3c665cca5163af3f5b6e5e3345503/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31f1ce979d31a357e95aa81812f20412c8c954fa43c44ee3ead1e1c8a78575ef", size = 362788, upload-time = "2026-08-13T14:14:34.996Z" }, + { url = "https://files.pythonhosted.org/packages/59/8f/3298e3f334832bc28dd144af6b99cdc93502a8687e71922ea68b0a319929/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2d6149f3a57f405bcad5fb41e03218b8373936253f23e1ca84c0108abbc3392", size = 430823, upload-time = "2026-08-13T14:14:36.44Z" }, + { url = "https://files.pythonhosted.org/packages/93/d2/f2dbf118f42ce4c325a139c9236737f436b7f8e00cd18701c99ef2405e6f/ml_dtypes-0.6.0-cp315-cp315t-win_amd64.whl", hash = "sha256:ce7563e0b1a4482cbc1b4a6272145e54e4489e54fe7428f94908c3d87103abfa", size = 465119, upload-time = "2026-08-13T14:14:37.776Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ff/bda40387b5c5c64254595f4d81a12351770856acc5de4e6d43606a31f161/ml_dtypes-0.6.0-cp315-cp315t-win_arm64.whl", hash = "sha256:f6cb525101b6b903779188c1e9e9490c343b455ab822883e02cf01e5547338d2", size = 572666, upload-time = "2026-08-13T14:14:38.993Z" }, ] [[package]] @@ -2767,46 +2983,54 @@ wheels = [ [[package]] name = "msgpack" -version = "1.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939, upload-time = "2025-10-08T09:15:01.472Z" }, - { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064, upload-time = "2025-10-08T09:15:03.764Z" }, - { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131, upload-time = "2025-10-08T09:15:05.136Z" }, - { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556, upload-time = "2025-10-08T09:15:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920, upload-time = "2025-10-08T09:15:08.179Z" }, - { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013, upload-time = "2025-10-08T09:15:09.83Z" }, - { url = "https://files.pythonhosted.org/packages/41/0d/2ddfaa8b7e1cee6c490d46cb0a39742b19e2481600a7a0e96537e9c22f43/msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029", size = 65096, upload-time = "2025-10-08T09:15:11.11Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b", size = 72708, upload-time = "2025-10-08T09:15:12.554Z" }, - { url = "https://files.pythonhosted.org/packages/c5/31/5b1a1f70eb0e87d1678e9624908f86317787b536060641d6798e3cf70ace/msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69", size = 64119, upload-time = "2025-10-08T09:15:13.589Z" }, - { url = "https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf", size = 81212, upload-time = "2025-10-08T09:15:14.552Z" }, - { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315, upload-time = "2025-10-08T09:15:15.543Z" }, - { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721, upload-time = "2025-10-08T09:15:16.567Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657, upload-time = "2025-10-08T09:15:17.825Z" }, - { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668, upload-time = "2025-10-08T09:15:19.003Z" }, - { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040, upload-time = "2025-10-08T09:15:20.183Z" }, - { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037, upload-time = "2025-10-08T09:15:21.416Z" }, - { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631, upload-time = "2025-10-08T09:15:22.431Z" }, - { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118, upload-time = "2025-10-08T09:15:23.402Z" }, - { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127, upload-time = "2025-10-08T09:15:24.408Z" }, - { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981, upload-time = "2025-10-08T09:15:25.812Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885, upload-time = "2025-10-08T09:15:27.22Z" }, - { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658, upload-time = "2025-10-08T09:15:28.4Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290, upload-time = "2025-10-08T09:15:29.764Z" }, - { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234, upload-time = "2025-10-08T09:15:31.022Z" }, - { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391, upload-time = "2025-10-08T09:15:32.265Z" }, - { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787, upload-time = "2025-10-08T09:15:33.219Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453, upload-time = "2025-10-08T09:15:34.225Z" }, - { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264, upload-time = "2025-10-08T09:15:35.61Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076, upload-time = "2025-10-08T09:15:36.619Z" }, - { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242, upload-time = "2025-10-08T09:15:37.647Z" }, - { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509, upload-time = "2025-10-08T09:15:38.794Z" }, - { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957, upload-time = "2025-10-08T09:15:40.238Z" }, - { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910, upload-time = "2025-10-08T09:15:41.505Z" }, - { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197, upload-time = "2025-10-08T09:15:42.954Z" }, - { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772, upload-time = "2025-10-08T09:15:43.954Z" }, - { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868, upload-time = "2025-10-08T09:15:44.959Z" }, +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/f9/c0a1c127f9049db9155afc316952ea571720dd01833ff5e4d7e8e6352dbb/msgpack-1.2.1.tar.gz", hash = "sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647", size = 183960, upload-time = "2026-06-18T16:13:52.594Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/dd/9e8cbd8f5582ca4b590336f2b91ee5662f6a6ca562b565abaf696a0f81ff/msgpack-1.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35", size = 83531, upload-time = "2026-06-18T16:12:58.249Z" }, + { url = "https://files.pythonhosted.org/packages/50/2e/ebdb85a8da151397a2790363676b7ed7c125924fe618e4c6d8befb0cc62c/msgpack-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c", size = 82657, upload-time = "2026-06-18T16:12:59.396Z" }, + { url = "https://files.pythonhosted.org/packages/26/aa/753ad8b007b464e1d8aa0c8e650b9c5f4f725e658fc5ac8a7635c55b7f6e/msgpack-1.2.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60926b75d00c8e816ef98f3034f484a8bc64242d66839cef4cf7e503142316a0", size = 410634, upload-time = "2026-06-18T16:13:00.383Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/6adabd4f6d5e686f97dd02ce7fce3fe4cf672cbac36b8f67ff4040e8ad8b/msgpack-1.2.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a", size = 419989, upload-time = "2026-06-18T16:13:01.776Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cc/85039b7b0eb168aaad7383a23c97e291a11f08351cb45a606ce865e4e3f1/msgpack-1.2.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4202c74688ca06591f78cb18988228bd4cca2cc75d57b60008372892d2f1e6e6", size = 377544, upload-time = "2026-06-18T16:13:03.637Z" }, + { url = "https://files.pythonhosted.org/packages/ed/bf/35963899493b32030c85fc513b723ae66144ac70c11ebc52e889e16e3d99/msgpack-1.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8b267ce94efb76fbd1b3373511420074ee3187f0f7811bf394531de13294735a", size = 400842, upload-time = "2026-06-18T16:13:05.012Z" }, + { url = "https://files.pythonhosted.org/packages/a6/df/8e2ac970c8f99264cd9997d1c73df5466bc19da3301d7dc5500862a9b089/msgpack-1.2.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e4f1d0f8f98ade9634e01fb704a408f9336c0a8f1117b369f5db83dc7551d8b1", size = 374108, upload-time = "2026-06-18T16:13:06.232Z" }, + { url = "https://files.pythonhosted.org/packages/17/dd/fa8bd265110dfa51c20cb529f9e6d240a16fafe7e645004c6af2d01353ba/msgpack-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f02cf17a6ca1abe29b5f980644f7551f94d71f2011509b26d8625ce038f0df64", size = 414939, upload-time = "2026-06-18T16:13:07.478Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b9/8377a5ad8953fc0437c70cc98d9ae29f27fe5ac5109fbec0812085865735/msgpack-1.2.1-cp312-cp312-win32.whl", hash = "sha256:0c0d9802354507bcba62af19c17918e3eb437cc25e6f50657d511b5856a77aac", size = 64504, upload-time = "2026-06-18T16:13:08.822Z" }, + { url = "https://files.pythonhosted.org/packages/57/7f/ce1e377df7e62461fefd9eb23bfb93a4a523f40a517b377b8f844d836828/msgpack-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:5c24aa15d5963051e1a5c62b12c50cd705992502b5ec1f3bece6046f33c9fc24", size = 71421, upload-time = "2026-06-18T16:13:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/8f/32/ebfe84c9929f08f188d56c7a2fd913406a9ddad76a634697c1c43b8112e6/msgpack-1.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:4227224aaec8f7fbcbfbd4272319347b2bb4030366502600f8c45588c5187b07", size = 64775, upload-time = "2026-06-18T16:13:11.056Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ac/dcddcab6f6c20ecb387ca5e980371cdb3f87ff69aeca388be97eebc4c074/msgpack-1.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a70e3cf2804a300d921bb0940426e35f4e489a23adfb77a808892241db0a064", size = 83151, upload-time = "2026-06-18T16:13:12.173Z" }, + { url = "https://files.pythonhosted.org/packages/64/71/fbcfa83a1d6a9c6091942d1cfd070962244664b87427a9a49a6897b1b219/msgpack-1.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:491cc39455ca765fad51fb451bf2915eb2cf41192ab5801ce8d67c1d614fe056", size = 82351, upload-time = "2026-06-18T16:13:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/e3/10/ddf7b06db879e8792d13934ddda09ff20bd2a583fd84c9b59aae9b0e650b/msgpack-1.2.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f310233ef7fb9c14e201c93639fe5f5260b005f56f0b29048e999c30935596cc", size = 407518, upload-time = "2026-06-18T16:13:14.233Z" }, + { url = "https://files.pythonhosted.org/packages/79/d3/36a46a8ed992b781acbc05928bd5bee3c810cb0c3563bf81a7b0c04a1a76/msgpack-1.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d", size = 416405, upload-time = "2026-06-18T16:13:15.435Z" }, + { url = "https://files.pythonhosted.org/packages/f9/84/e8e9598b557c0ba6ddae901a73780a4c75ac667dddf59414b1e56a42fb34/msgpack-1.2.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dc871b997a9370d855b7394465f2f350e847a5b806dd38dcc9c989e7d87da155", size = 376257, upload-time = "2026-06-18T16:13:17.022Z" }, + { url = "https://files.pythonhosted.org/packages/40/16/738fe6d875ad7e2a9429c165322a4ec088f4f273cdfae63d96a89c467961/msgpack-1.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:85f57e960d877f2977f6430896191b04a21f8901b3b4baf2e4604329f4db5402", size = 397469, upload-time = "2026-06-18T16:13:18.287Z" }, + { url = "https://files.pythonhosted.org/packages/ca/be/6d5952df75a7f24f35833af764c3a6860780364cb3a0030beb8099e1b2b4/msgpack-1.2.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:1233ee2dd0cefba127583de50ea654677277047d238303521db35def3d7b2e7c", size = 372802, upload-time = "2026-06-18T16:13:19.685Z" }, + { url = "https://files.pythonhosted.org/packages/e1/39/e2ef7dbf0473bcb8dc7c50bf782a892d67414877b63e47fc88eb189ef5e6/msgpack-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3dc2feb0876209d9c38aa56cb1de169bd6c4348f1aa48271f241226590993e6", size = 411273, upload-time = "2026-06-18T16:13:21.028Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c5/133f4512a56e983a93445c836c9d94d88f3bc2e0980ff4b9e577bd8416ce/msgpack-1.2.1-cp313-cp313-win32.whl", hash = "sha256:6d09badf350af2be9d189184e04e64cf54ad93569ab3d96fca58bd3e84aad707", size = 64471, upload-time = "2026-06-18T16:13:22.293Z" }, + { url = "https://files.pythonhosted.org/packages/e2/98/577e10b055096a7dd40732358cabaf7180a20c79ed1dcdbb618e4b9deac7/msgpack-1.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:33f14fba63278b714efe6ad07e50ea5f03d91537aa6a1c5f1ceca4cf44013ca9", size = 71274, upload-time = "2026-06-18T16:13:23.455Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ee/0c0048e7cfbef23c6a94791b8959ab28155232e7956de8a305b5ff588f05/msgpack-1.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:afc5febcd4c99effbc02b528e49d6fd0760b2b7d48c05239e345a5fa6e743d9a", size = 64795, upload-time = "2026-06-18T16:13:24.687Z" }, + { url = "https://files.pythonhosted.org/packages/77/58/cce442852c6b9e1639c7c8ac8fd9143121cb32dab0f308df4d1426a8eb9c/msgpack-1.2.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:05f340e47e7e47d2da8db9b53e1bb1d294369e9ef45a747441309f6650b8351d", size = 83610, upload-time = "2026-06-18T16:13:25.724Z" }, + { url = "https://files.pythonhosted.org/packages/60/5c/15b4c7a0182f75ffa90751958ba36a9c01cafee367d49a3edc10ed140b01/msgpack-1.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7", size = 83138, upload-time = "2026-06-18T16:13:26.781Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a6/99e58722feaffc5f2fbcc0c8c0d1451ab9f84097f7af87291b46af2390f4/msgpack-1.2.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca0dacff965c47afdc3749a8469d7302a8f801d6a28758d55120d75e66ce6889", size = 406090, upload-time = "2026-06-18T16:13:28.072Z" }, + { url = "https://files.pythonhosted.org/packages/19/03/8c63e8cf52958534ef688625965ab04c269a6cadd8caef16758b380a821a/msgpack-1.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720", size = 412106, upload-time = "2026-06-18T16:13:29.427Z" }, + { url = "https://files.pythonhosted.org/packages/63/d2/155d9e71b40e41fd934bc0c48b9b2770f22263e1ac20aad8e29fdca7be3f/msgpack-1.2.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6c4be5d1c02a42b066ca6ddb71adf36432868fdcdb6ee87e634e86e0674190", size = 374851, upload-time = "2026-06-18T16:13:30.631Z" }, + { url = "https://files.pythonhosted.org/packages/98/48/deaf2326262a8d5ea3295ce9649912ecd3f551ba7ec8e33c665d2ba583f3/msgpack-1.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec0e675d59150a6269ddc9139087c722292664a37d071a849c05c473350f1f2d", size = 396168, upload-time = "2026-06-18T16:13:31.977Z" }, + { url = "https://files.pythonhosted.org/packages/10/2a/b4410f906c2ec0008f1608d3ab5143afc3ad3f4e6da0fed3ea2231d0bef4/msgpack-1.2.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:dd3bfe82d53edfe4b7fc9a7ec9761e23a7a5b1dac22264505af428253c29ed24", size = 371959, upload-time = "2026-06-18T16:13:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/59/86/1edc67270099a528fa2093ea60fe191233cd238e4bd30cfacf7db79fc959/msgpack-1.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5ad5467fc3f68b5468e06c5f788d712e9f8ffc8b0cd1bcb160c105c1ee92dae7", size = 408457, upload-time = "2026-06-18T16:13:34.567Z" }, + { url = "https://files.pythonhosted.org/packages/82/90/8b630fef07d8c5ab457b71ff2c217910c83d333c7a68472c186e87cc504a/msgpack-1.2.1-cp314-cp314-win32.whl", hash = "sha256:98b58bdb89c46190e4609bb36abe17c6d4105ad13f9c5f8f6f64d320f8ced3fb", size = 65942, upload-time = "2026-06-18T16:13:36.056Z" }, + { url = "https://files.pythonhosted.org/packages/16/f1/467b81e98b24dd3885d7b1857728797b4ffc76a7a7483af4fb321a07de3c/msgpack-1.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:74847557e28ce71bd3c438a447ca90e4b507e997ddbdef8a12a7b283b86c156b", size = 72627, upload-time = "2026-06-18T16:13:37.079Z" }, + { url = "https://files.pythonhosted.org/packages/a7/1d/5d8c4c89985feb6acefb82a09e501c60392261856d2408d20bfe4f0360b1/msgpack-1.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:b50b727bd652bdc37d950336c848ef20ec54a4cafc38dce19b1cd86ad625d0f7", size = 66908, upload-time = "2026-06-18T16:13:38.23Z" }, + { url = "https://files.pythonhosted.org/packages/1b/02/ad2afb678b4de94496cd432b581759b756a92c1192d8c767edd6b132efdc/msgpack-1.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8d00f177ca88a77c1cf848d204a38f249751650b601cb6532acc68805d8a8273", size = 86000, upload-time = "2026-06-18T16:13:39.44Z" }, + { url = "https://files.pythonhosted.org/packages/54/74/0b797484013128837f3b1cbb6cea019277c4de4e377dc512b4d9a0f92940/msgpack-1.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5bb9c386f0a329c035ddbab4b72d1028bf9627add8dda41070288563d57ed1b1", size = 86544, upload-time = "2026-06-18T16:13:40.447Z" }, + { url = "https://files.pythonhosted.org/packages/a9/b4/b774d7eb95561739907fec675582f83203cf41c597a418c2589b4bfb8e9d/msgpack-1.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20466cca18c49c7292a8984bc15d65857b171e7264bdcb5f96baf8be238791fc", size = 427661, upload-time = "2026-06-18T16:13:41.574Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f9/3243191dc9937e00756c8bc1b0272fed8f23758e43df2a3b46f533e5090f/msgpack-1.2.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:196300e7e5d6e74d50f1607ab9c06c4a1484c383cd22defd727902591f7e8dde", size = 426375, upload-time = "2026-06-18T16:13:42.936Z" }, + { url = "https://files.pythonhosted.org/packages/23/c7/1693111db9944ba4ad4b67a1e788400d78a0b6af7a6523dc7e4e58f8274b/msgpack-1.2.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575957e79cd51903a4e8495a242442949641e08f1efd5197b43bebd3ea7682b4", size = 380495, upload-time = "2026-06-18T16:13:44.306Z" }, + { url = "https://files.pythonhosted.org/packages/3e/2b/92f86956a0c13e8662f7e2ad630c4eb4db07497b967589bd5245e018b2c1/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8c2ed1e48cc0f460bf3c7780e7137ff21a4e18433451916f2442c1b21036cd7d", size = 410897, upload-time = "2026-06-18T16:13:45.629Z" }, + { url = "https://files.pythonhosted.org/packages/da/ea/1479f72d200313a76fc2f823a79d1e07ed052ab7b8a0280640aa7b95de42/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:5f6277e5f783c36786a145e0247fc189a03f35f84b251646e53592d2bc12b355", size = 378519, upload-time = "2026-06-18T16:13:46.998Z" }, + { url = "https://files.pythonhosted.org/packages/f5/4d/fa006060ffa1011d32bfae826fe766fe73e02982183601633b7121058ab3/msgpack-1.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9389552ecf4784886345ead0647e4edc96bee37cbab05b75540f542f766c48c", size = 419815, upload-time = "2026-06-18T16:13:48.205Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/aab6c946570496b78e67804721f3d5e2d62a93081b9b37df77764ef56347/msgpack-1.2.1-cp314-cp314t-win32.whl", hash = "sha256:c1c79a604a2969a868a78b6ebd27a887e00c624f14f66b3038e0590cb23332d1", size = 70914, upload-time = "2026-06-18T16:13:49.385Z" }, + { url = "https://files.pythonhosted.org/packages/13/0a/e608956488a2af014cfe6e3d665e090b8ee42aa14b07f8f95b8880d66b09/msgpack-1.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f12038a35fabd52e56a3547bab42401af49a45caa6dd00b34c44de235bc93ee2", size = 77999, upload-time = "2026-06-18T16:13:50.467Z" }, + { url = "https://files.pythonhosted.org/packages/d2/8a/27e2e57055176e366a46b85d02d68e7a5bcfbdd8474c9706375d965f24d3/msgpack-1.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0adcf06ffde0777c0e1a9b771a2b1c4226ba1bbf748c8efcc02fcdeca3299107", size = 71160, upload-time = "2026-06-18T16:13:51.498Z" }, ] [[package]] @@ -2910,11 +3134,11 @@ wheels = [ [[package]] name = "narwhals" -version = "2.21.2" +version = "2.25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cf/a0/6198c56d42ef2f3c6ed0c42ba30dbcefdc86a91262d7d449010770ae085b/narwhals-2.21.2.tar.gz", hash = "sha256:5c5b2d0b47aef7c73ea412cfcbcd467f2f2d5be73e3c2ab19d78f4a97718790a", size = 632176, upload-time = "2026-05-16T08:49:08.314Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/7b/6248dada39781db1ab3ebf08943080df0796098515a87f6f8696d14ec744/narwhals-2.25.0.tar.gz", hash = "sha256:62c036c810662bf7820b7737077176313bc59350eeeefb808510f388c743e4b2", size = 677076, upload-time = "2026-08-20T18:10:15.454Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/77/928ea2e70641ca177a11140062cc5840d421795f2e82749d408d0cce900a/narwhals-2.21.2-py3-none-any.whl", hash = "sha256:7bb57c3700486039215455b9bf2d64261915cc0fd845cc30272d631df696b251", size = 451201, upload-time = "2026-05-16T08:49:05.536Z" }, + { url = "https://files.pythonhosted.org/packages/eb/dc/55481808fd70ef1567cf13540ffd4702af3f74b112e35427564b03f79c2d/narwhals-2.25.0-py3-none-any.whl", hash = "sha256:1f0f403e8c7e4463cde9bfe78b12fdd809e3ae3dda6d9b2f802934fb9c7a6a8f", size = 467373, upload-time = "2026-08-20T18:10:13.834Z" }, ] [[package]] @@ -2928,7 +3152,7 @@ wheels = [ [[package]] name = "nbclient" -version = "0.10.4" +version = "0.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, @@ -2936,9 +3160,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/91/1c1d5a4b9a9ebba2b4e32b8c852c2975c872aec1fe42ab5e516b2cecd193/nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9", size = 62554, upload-time = "2025-12-23T07:45:46.369Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/a5/b3bae4b590c0cbcada2c63a34f7580024e834a8ba213e949a2f906705787/nbclient-0.11.0.tar.gz", hash = "sha256:04a134a5b087f2c5887f228aca155db50169b8cd9334dee6942c8e927e56081a", size = 62535, upload-time = "2026-06-05T07:52:41.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/a0/5b0c2f11142ed1dddec842457d3f65eaf71a0080894eb6f018755b319c3a/nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440", size = 25465, upload-time = "2025-12-23T07:45:44.51Z" }, + { url = "https://files.pythonhosted.org/packages/36/c9/94d73e5a01c5b926c3fa2496e97d7a8dc28ed5a77c0b2ed712f1a62e6694/nbclient-0.11.0-py3-none-any.whl", hash = "sha256:ef7fa0d59d6e1d41103933d8a445a18d5de860ca6b613b87b8574accdb3c2895", size = 25288, upload-time = "2026-06-05T07:52:40.115Z" }, ] [[package]] @@ -2968,7 +3192,7 @@ wheels = [ [[package]] name = "nbformat" -version = "5.10.4" +version = "5.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastjsonschema" }, @@ -2976,9 +3200,9 @@ dependencies = [ { name = "jupyter-core" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } +sdist = { url = "https://files.pythonhosted.org/packages/31/72/b3446efab8756e7df4b8ec587f8e611cb5a7249e4323db480802f1d3be04/nbformat-5.11.1.tar.gz", hash = "sha256:32d4521c68c6e7d5b29c76defaeed9f42ea733142b9b19f88277ce10390b9c4d", size = 147775, upload-time = "2026-08-17T08:10:51.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, + { url = "https://files.pythonhosted.org/packages/1a/69/ee613f74085ca7103f79cd08d579c4f3177d1d26e5d3d9528d2d6536a707/nbformat-5.11.1-py3-none-any.whl", hash = "sha256:cc6698fa75f4fab8755ead786317815f13a6fee3b53311c0abb1a8b51d52f7ec", size = 79849, upload-time = "2026-08-17T08:10:50.18Z" }, ] [[package]] @@ -3031,16 +3255,16 @@ wheels = [ [[package]] name = "neo" -version = "0.14.4" +version = "0.14.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "packaging" }, { name = "quantities" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/b1/e9228d616c817098b673ab990e82acb431856559f4e0235a687854df1ef4/neo-0.14.4.tar.gz", hash = "sha256:cbe24031c514543005ec698d8fe024b95a0839e9efd469bf6f8290dc3d86b3b5", size = 5085927, upload-time = "2026-03-12T09:59:56.893Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/ee/168b94170399e21d68cba4efb79f532e81b2cb3ce747d642d95370da8882/neo-0.14.5.tar.gz", hash = "sha256:5485668c5ab4fc9e384e5e645edc9e560987374d24ba8b53665b7a93cd4dcd37", size = 5101786, upload-time = "2026-06-25T09:08:40.76Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/66/93359047a9c7ede7c6319f58b2cee3be19552f57ef5380fe95cb812272fb/neo-0.14.4-py3-none-any.whl", hash = "sha256:0cd863424e35dddd768d713cfcc48cb06ab127fe1b5b132a0793c82975de5be4", size = 697727, upload-time = "2026-03-12T09:59:54.609Z" }, + { url = "https://files.pythonhosted.org/packages/88/c0/7d482249c9678902b7cef16b7262d91d2fe7492010f170149ad3abfeee87/neo-0.14.5-py3-none-any.whl", hash = "sha256:2b54b5617ff08852486244974c462a892414d3581c3b0eaa8c3e1f9a000dba44", size = 712507, upload-time = "2026-06-25T09:08:38.921Z" }, ] [[package]] @@ -3052,6 +3276,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, ] +[[package]] +name = "nest-asyncio2" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/73/731debf26e27e0a0323d7bda270dc2f634b398e38f040a09da1f4351d0aa/nest_asyncio2-1.7.2.tar.gz", hash = "sha256:1921d70b92cc4612c374928d081552efb59b83d91b2b789d935c665fa01729a8", size = 14743, upload-time = "2026-02-13T00:34:04.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl", hash = "sha256:f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01", size = 7843, upload-time = "2026-02-13T00:34:02.691Z" }, +] + [[package]] name = "networkx" version = "3.6.1" @@ -3075,30 +3308,31 @@ wheels = [ [[package]] name = "numba" -version = "0.65.1" +version = "0.67.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "llvmlite" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f6/c5/db2ac3685833d626c0dcae6bd2330cd68433e1fd248d15f70998160d3ad7/numba-0.65.1.tar.gz", hash = "sha256:19357146c32fe9ed25059ab915e8465fb13951cf6b0aace3826b76886373ab23", size = 2765600, upload-time = "2026-04-24T02:02:56.551Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/90/2544f4e3a61e501d6c9a5418fd4b905323222693d54a02cab0106a0af865/numba-0.67.0.tar.gz", hash = "sha256:cd75aa535b33fa05d9d930b1ae8af9f97a2881e96d72dfb38ec9b78284d9f851", size = 2836515, upload-time = "2026-08-11T23:04:00.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/bc/76f8f8c5cf9adee47fdb7bbb03be8900f76f902d451d7477cf12b845e1de/numba-0.65.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac3f1e77c352dd0ea9712732c2d8f9ca507717435eec5b5013bf138ac33c4a08", size = 2681371, upload-time = "2026-04-24T02:02:26.105Z" }, - { url = "https://files.pythonhosted.org/packages/69/47/a415af0283e4db0398104c6d1c11c9861a98dc67a7aa442a7769ed5d6196/numba-0.65.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:52bc6f3ceb8fcaff9b2ae26b4c6b1e9fee39db8d355534c0fe4f39a901246b84", size = 3802467, upload-time = "2026-04-24T02:02:27.712Z" }, - { url = "https://files.pythonhosted.org/packages/46/36/246f73ec99cfeab2f2cb2ce7d4218766cc36a2da418901223f4f4da9c813/numba-0.65.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90ca10b3463bae0bd70589726fe3c77d01d6b5fc86bee54bcdf9fb6b47c28977", size = 3502628, upload-time = "2026-04-24T02:02:29.763Z" }, - { url = "https://files.pythonhosted.org/packages/db/9e/3c679b2ee078425b9e99a91e44f8d132a6830d8ccce5227bc5e9181aeed8/numba-0.65.1-cp312-cp312-win_amd64.whl", hash = "sha256:5971c632be2a2351500431f46213821dba8d02b18a9f7d02fd36bd2743e41a6a", size = 2750611, upload-time = "2026-04-24T02:02:31.477Z" }, - { url = "https://files.pythonhosted.org/packages/79/37/14a4579049c1eb673afd0de0cb4842982acd55b9ce2643e763db858bcea0/numba-0.65.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:1735c15c1134a5108b4d6a5c77fc0947924ea066a738dc09a52008c13df9cad3", size = 2681344, upload-time = "2026-04-24T02:02:33.65Z" }, - { url = "https://files.pythonhosted.org/packages/a0/22/b8d873f6466b20aa563fc9b33acd48dec89a07803ddaa2f1c8ca1cd33126/numba-0.65.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c09f49117ef255e1f1c6dad0c7a1ed39868243862a73be5706793241a3755f1b", size = 3810619, upload-time = "2026-04-24T02:02:36.041Z" }, - { url = "https://files.pythonhosted.org/packages/62/08/e16a8b5d9a018962ebb5c66be662317cde32b9f5dab08441f90bed5522fb/numba-0.65.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:594a8680b3fadac99e97e489b1fd89007177e5336713745c3b769528c635a464", size = 3509783, upload-time = "2026-04-24T02:02:38.245Z" }, - { url = "https://files.pythonhosted.org/packages/fd/a5/03c970d57f4c1741354837353ce39fb5206952ae1dba8922d29c86f64805/numba-0.65.1-cp313-cp313-win_amd64.whl", hash = "sha256:85be74c0d036842699a30058f82fb88fc5ffdc59f7615cab5792ea92914c9b62", size = 2750534, upload-time = "2026-04-24T02:02:39.903Z" }, - { url = "https://files.pythonhosted.org/packages/4f/2e/8aed9b726d9ba5f11ad287645fd479e88278db3060a25cb1225d730eb2b7/numba-0.65.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:33f5eb68eb1c843511615d14663ce60258525d6a4c65ab040e2c2b0c4cf17450", size = 2681554, upload-time = "2026-04-24T02:02:41.812Z" }, - { url = "https://files.pythonhosted.org/packages/87/96/f3eb235fafa82a34e2ab5dd7dc9ffff998ebf5f0bbc23fa56a96aeb44da6/numba-0.65.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71e73029bf53a62cc6afcf96be4bd942290d8b4c55f0a454fb536158115790f7", size = 3779602, upload-time = "2026-04-24T02:02:43.726Z" }, - { url = "https://files.pythonhosted.org/packages/09/90/b0f09b48752d23640b8284f22aa597737e8adaddc7fbfacc4708b7f73a4c/numba-0.65.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a07635e0be926b9bdbffb09137c230fb13f6ec0e564914ba937cee12ce3eb35", size = 3479532, upload-time = "2026-04-24T02:02:45.427Z" }, - { url = "https://files.pythonhosted.org/packages/56/46/3f7fc04fb853559e74b210e0b62c19974ec844cefec611f9e535f4da3761/numba-0.65.1-cp314-cp314-win_amd64.whl", hash = "sha256:2a20fcdabdefbdacf88d85caf70c3b18c4bcb7ebb8f82e6a19486383dd26ab63", size = 2752637, upload-time = "2026-04-24T02:02:47.664Z" }, - { url = "https://files.pythonhosted.org/packages/81/7b/c1a341a9067367778f4152a5f01061cf281fb09582c92c510ec4918cabf6/numba-0.65.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:548dd4b3a4508d5062768d1514b2cd7b015f9a25ec7af651c50dee243965e652", size = 2684600, upload-time = "2026-04-24T02:02:49.653Z" }, - { url = "https://files.pythonhosted.org/packages/03/36/98ddbcf3e4f04a6dd07e1c67249955920579ba4af6bb6868e3088f4ed282/numba-0.65.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:78abc28feff2c2ff8307fff3975b6438352759c9acb797ecd6b1fb6e7e39e31d", size = 3817198, upload-time = "2026-04-24T02:02:51.266Z" }, - { url = "https://files.pythonhosted.org/packages/a3/83/0dad21057ece5a835599f5d24099b091703995e23dbbf894f259e91c010b/numba-0.65.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee7676cb389555805f9b9a1840cbcd1ea6c8bd5376ab6918e3a29c5ea1dbda20", size = 3533862, upload-time = "2026-04-24T02:02:52.987Z" }, - { url = "https://files.pythonhosted.org/packages/32/36/8be7118ffd4c8440881046eac3d0982cc5ab42909508cf5d67024d62a2e4/numba-0.65.1-cp314-cp314t-win_amd64.whl", hash = "sha256:20609346e3bd75204950dcbbfe383a8d7dbf4902f442aedbf00f97fef4aa8f38", size = 2758237, upload-time = "2026-04-24T02:02:54.612Z" }, + { url = "https://files.pythonhosted.org/packages/0d/58/915cddba90010348ed0444451132fdde9b000bcbaff1582029b5bf115d11/numba-0.67.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:6004d8d5f28d4028687fb2d972d629295b13685943bd2ed5cd8810c3b848e219", size = 2745050, upload-time = "2026-08-11T23:03:25.607Z" }, + { url = "https://files.pythonhosted.org/packages/bb/38/926757caaac18a66f057d7544a63620bf360a07d281c9f7ecadd2aa83963/numba-0.67.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f63d43db06b4756424d6d2484737c902e0ae944a0eec3e8b0b4de2c695b15caa", size = 3884596, upload-time = "2026-08-11T23:03:27.688Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6d/58291dc58da39d98b32db7f044729f6d8d4920cd9622fbab3179b54ff4c4/numba-0.67.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76d3335aaeffb9dc88309420890e73497a00be08a7530441bc2b58ffe025bfa5", size = 3585290, upload-time = "2026-08-11T23:03:29.684Z" }, + { url = "https://files.pythonhosted.org/packages/6e/63/ab21828b4056afed71f9ecb40f4de26c2c19de731cc001961aca74b79464/numba-0.67.0-cp312-cp312-win_amd64.whl", hash = "sha256:50e2b72406c18cda5dd7431b0082cb85ea94e06c64c33607248fc8bef92cfb81", size = 2815645, upload-time = "2026-08-11T23:03:31.732Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/bd9fe772f6c84597b76cac229b3f2890f01a2c64fd70e48ceaae10dd65cb/numba-0.67.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:77e1c7173fee57a0d84e006c7e70346689d6cb3e7db503489bae58646b4eff7b", size = 2744872, upload-time = "2026-08-11T23:03:33.649Z" }, + { url = "https://files.pythonhosted.org/packages/a1/1c/c05609739cc41116d36e30cb2b41fb00f126bb52e1b0bac907051ad8a35d/numba-0.67.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c4953387c77864b596d8296e2cfbdef82b0eea4166ab4864b05d226c51143e0", size = 3892004, upload-time = "2026-08-11T23:03:35.797Z" }, + { url = "https://files.pythonhosted.org/packages/4a/77/a5276ad4178250403e0e2251f3e1f8ac18feac779b0474a8bcb08558490d/numba-0.67.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88f6e0f5cb6c545e158b6ef0496c01b6d6958a7ccc6634a1576a94bbbab29ff2", size = 3591878, upload-time = "2026-08-11T23:03:37.845Z" }, + { url = "https://files.pythonhosted.org/packages/0f/80/d48f0ba7442516ceb5a1585f0c81d3aa531bc96bfcabcd9f8f925768c426/numba-0.67.0-cp313-cp313-win_amd64.whl", hash = "sha256:b68ad5125fe245339cc8dcc036081fc1ea482c5063387b9612a76ccd83dc91cd", size = 2815504, upload-time = "2026-08-11T23:03:39.736Z" }, + { url = "https://files.pythonhosted.org/packages/d7/16/345b1e4774a08247aafcfdb93d4e8d24a3646366cbe72de33053fc0de1b5/numba-0.67.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f99f880ff25f418a67f9a1d00d0ddfbc63430f627b523e515085a592a7567f4b", size = 2745088, upload-time = "2026-08-11T23:03:41.864Z" }, + { url = "https://files.pythonhosted.org/packages/1b/36/e614ba2bc0f005ed0f37a6413f08fe705210297ddb9a37a475a8b9fdab61/numba-0.67.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5269245a675abdd3e2c35ec6bb2f250355effa9032514d8f2354f0d2d10854bd", size = 3861040, upload-time = "2026-08-11T23:03:43.842Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/30c42a1dbc4176cf355e8e8be61803732c55597b1332925fe233912a43d9/numba-0.67.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f074a8e23db78490f11a3930c940be758316c10ac5985be83d2f298dc080acf7", size = 3561811, upload-time = "2026-08-11T23:03:46.037Z" }, + { url = "https://files.pythonhosted.org/packages/18/6d/21bd16f770476e394c5e5f504935817967442a71251d6b86c244a2767980/numba-0.67.0-cp314-cp314-win_amd64.whl", hash = "sha256:4d576e62bf2c9370f61312b51573c4bb1f3fe96798bbab56730847a368a316c4", size = 2817421, upload-time = "2026-08-11T23:03:47.922Z" }, + { url = "https://files.pythonhosted.org/packages/95/06/bb41b0e59b9ff52c94a2f01db24f6437df058caebb377b5f372fc343a6a2/numba-0.67.0-cp314-cp314-win_arm64.whl", hash = "sha256:7930748ce8355d2a5a28602abab056a61fdc676d17377f27d17993905428171f", size = 2788885, upload-time = "2026-08-11T23:03:49.967Z" }, + { url = "https://files.pythonhosted.org/packages/10/7c/aa07151fbd0f4283f78de437cc196f9084789be89a2b4de3fdc2f6a4b414/numba-0.67.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:4a2ed006635bbd0fe45681ed49f3b4f4bad1abf0c233bcc5842c9e3a34cabd61", size = 2748150, upload-time = "2026-08-11T23:03:51.755Z" }, + { url = "https://files.pythonhosted.org/packages/74/62/b8174ca95a4cc1a7ba1520767734e016991545590b8fbde521b681701a9f/numba-0.67.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa5f002f665bec321b950dacaa26ee009e1d720f6ac9d9856eed5efe1caa03a6", size = 3896986, upload-time = "2026-08-11T23:03:53.752Z" }, + { url = "https://files.pythonhosted.org/packages/8c/f9/3a7b6dbf81e01a48958b45ad2239edbc64707522ab17f11f9f18c44bf6d1/numba-0.67.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83ab968b0e0fa744eba03351282dd8000796e6ec8e4518f47bd3ed86c0a20c7b", size = 3614644, upload-time = "2026-08-11T23:03:55.794Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5b/248f5681c121ca853a9f4e39d342a3e01b8a0261b0275853eb3d0d56aa20/numba-0.67.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00c964a5b94d3ae82d83ac162cd610755875b98dadb779fdde06e6bfcdbca47e", size = 2822870, upload-time = "2026-08-11T23:03:58.097Z" }, ] [[package]] @@ -3123,114 +3357,122 @@ wheels = [ [[package]] name = "numexpr" -version = "2.14.1" +version = "2.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400, upload-time = "2025-10-13T16:17:27.351Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430", size = 162790, upload-time = "2025-10-13T16:16:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659", size = 152196, upload-time = "2025-10-13T16:16:36.593Z" }, - { url = "https://files.pythonhosted.org/packages/72/94/cc921e35593b820521e464cbbeaf8212bbdb07f16dc79fe283168df38195/numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1", size = 452468, upload-time = "2025-10-13T16:13:29.531Z" }, - { url = "https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083", size = 443631, upload-time = "2025-10-13T16:15:02.473Z" }, - { url = "https://files.pythonhosted.org/packages/7b/6c/78f83b6219f61c2c22d71ab6e6c2d4e5d7381334c6c29b77204e59edb039/numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48", size = 1417670, upload-time = "2025-10-13T16:13:33.464Z" }, - { url = "https://files.pythonhosted.org/packages/0e/bb/1ccc9dcaf46281568ce769888bf16294c40e98a5158e4b16c241de31d0d3/numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b", size = 1466212, upload-time = "2025-10-13T16:15:12.828Z" }, - { url = "https://files.pythonhosted.org/packages/31/9f/203d82b9e39dadd91d64bca55b3c8ca432e981b822468dcef41a4418626b/numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07", size = 166996, upload-time = "2025-10-13T16:17:10.369Z" }, - { url = "https://files.pythonhosted.org/packages/1f/67/ffe750b5452eb66de788c34e7d21ec6d886abb4d7c43ad1dc88ceb3d998f/numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f", size = 160187, upload-time = "2025-10-13T16:17:11.974Z" }, - { url = "https://files.pythonhosted.org/packages/73/b4/9f6d637fd79df42be1be29ee7ba1f050fab63b7182cb922a0e08adc12320/numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222", size = 162794, upload-time = "2025-10-13T16:16:38.291Z" }, - { url = "https://files.pythonhosted.org/packages/35/ae/d58558d8043de0c49f385ea2fa789e3cfe4d436c96be80200c5292f45f15/numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6", size = 152203, upload-time = "2025-10-13T16:16:39.907Z" }, - { url = "https://files.pythonhosted.org/packages/13/65/72b065f9c75baf8f474fd5d2b768350935989d4917db1c6c75b866d4067c/numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30", size = 455860, upload-time = "2025-10-13T16:13:35.811Z" }, - { url = "https://files.pythonhosted.org/packages/fc/f9/c9457652dfe28e2eb898372da2fe786c6db81af9540c0f853ee04a0699cc/numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c", size = 446574, upload-time = "2025-10-13T16:15:17.367Z" }, - { url = "https://files.pythonhosted.org/packages/b6/99/8d3879c4d67d3db5560cf2de65ce1778b80b75f6fa415eb5c3e7bd37ba27/numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5", size = 1417306, upload-time = "2025-10-13T16:13:42.813Z" }, - { url = "https://files.pythonhosted.org/packages/ea/05/6bddac9f18598ba94281e27a6943093f7d0976544b0cb5d92272c64719bd/numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421", size = 1466145, upload-time = "2025-10-13T16:15:27.464Z" }, - { url = "https://files.pythonhosted.org/packages/24/5d/cbeb67aca0c5a76ead13df7e8bd8dd5e0d49145f90da697ba1d9f07005b0/numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b", size = 166996, upload-time = "2025-10-13T16:17:13.803Z" }, - { url = "https://files.pythonhosted.org/packages/cc/23/9281bceaeb282cead95f0aa5f7f222ffc895670ea689cc1398355f6e3001/numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb", size = 160189, upload-time = "2025-10-13T16:17:15.417Z" }, - { url = "https://files.pythonhosted.org/packages/f3/76/7aac965fd93a56803cbe502aee2adcad667253ae34b0badf6c5af7908b6c/numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b", size = 163524, upload-time = "2025-10-13T16:16:42.213Z" }, - { url = "https://files.pythonhosted.org/packages/58/65/79d592d5e63fbfab3b59a60c386853d9186a44a3fa3c87ba26bdc25b6195/numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73", size = 152919, upload-time = "2025-10-13T16:16:44.229Z" }, - { url = "https://files.pythonhosted.org/packages/84/78/3c8335f713d4aeb99fa758d7c62f0be1482d4947ce5b508e2052bb7aeee9/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc", size = 465972, upload-time = "2025-10-13T16:13:45.061Z" }, - { url = "https://files.pythonhosted.org/packages/35/81/9ee5f69b811e8f18746c12d6f71848617684edd3161927f95eee7a305631/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9", size = 456953, upload-time = "2025-10-13T16:15:31.186Z" }, - { url = "https://files.pythonhosted.org/packages/6d/39/9b8bc6e294d85cbb54a634e47b833e9f3276a8bdf7ce92aa808718a0212d/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e", size = 1426199, upload-time = "2025-10-13T16:13:48.231Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ce/0d4fcd31ab49319740d934fba1734d7dad13aa485532ca754e555ca16c8b/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19", size = 1474214, upload-time = "2025-10-13T16:15:38.893Z" }, - { url = "https://files.pythonhosted.org/packages/b7/47/b2a93cbdb3ba4e009728ad1b9ef1550e2655ea2c86958ebaf03b9615f275/numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611", size = 167676, upload-time = "2025-10-13T16:17:17.351Z" }, - { url = "https://files.pythonhosted.org/packages/86/99/ee3accc589ed032eea68e12172515ed96a5568534c213ad109e1f4411df1/numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09", size = 161096, upload-time = "2025-10-13T16:17:19.174Z" }, - { url = "https://files.pythonhosted.org/packages/ac/36/9db78dfbfdfa1f8bf0872993f1a334cdd8fca5a5b6567e47dcb128bcb7c2/numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21", size = 162848, upload-time = "2025-10-13T16:16:46.216Z" }, - { url = "https://files.pythonhosted.org/packages/13/c1/a5c78ae637402c5550e2e0ba175275d2515d432ec28af0cdc23c9b476e65/numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082", size = 152270, upload-time = "2025-10-13T16:16:47.92Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ed/aabd8678077848dd9a751c5558c2057839f5a09e2a176d8dfcd0850ee00e/numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574", size = 455918, upload-time = "2025-10-13T16:13:50.338Z" }, - { url = "https://files.pythonhosted.org/packages/88/e1/3db65117f02cdefb0e5e4c440daf1c30beb45051b7f47aded25b7f4f2f34/numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de", size = 446512, upload-time = "2025-10-13T16:15:42.313Z" }, - { url = "https://files.pythonhosted.org/packages/9a/fb/7ceb9ee55b5f67e4a3e4d73d5af4c7e37e3c9f37f54bee90361b64b17e3f/numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8", size = 1417845, upload-time = "2025-10-13T16:13:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/45/2d/9b5764d0eafbbb2889288f80de773791358acf6fad1a55767538d8b79599/numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c", size = 1466211, upload-time = "2025-10-13T16:15:48.985Z" }, - { url = "https://files.pythonhosted.org/packages/5d/21/204db708eccd71aa8bc55bcad55bc0fc6c5a4e01ad78e14ee5714a749386/numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3", size = 168835, upload-time = "2025-10-13T16:17:20.82Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3e/d83e9401a1c3449a124f7d4b3fb44084798e0d30f7c11e60712d9b94cf11/numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2", size = 162608, upload-time = "2025-10-13T16:17:22.228Z" }, - { url = "https://files.pythonhosted.org/packages/7f/d6/ec947806bb57836d6379a8c8a253c2aeaa602b12fef2336bfd2462bb4ed5/numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5", size = 163525, upload-time = "2025-10-13T16:16:50.133Z" }, - { url = "https://files.pythonhosted.org/packages/0d/77/048f30dcf661a3d52963a88c29b52b6d5ce996d38e9313a56a922451c1e0/numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a", size = 152917, upload-time = "2025-10-13T16:16:52.055Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d3/956a13e628d722d649fbf2fded615134a308c082e122a48bad0e90a99ce9/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091", size = 466242, upload-time = "2025-10-13T16:13:55.795Z" }, - { url = "https://files.pythonhosted.org/packages/d6/dd/abe848678d82486940892f2cacf39e82eec790e8930d4d713d3f9191063b/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73", size = 457149, upload-time = "2025-10-13T16:15:52.036Z" }, - { url = "https://files.pythonhosted.org/packages/fd/bb/797b583b5fb9da5700a5708ca6eb4f889c94d81abb28de4d642c0f4b3258/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3", size = 1426493, upload-time = "2025-10-13T16:13:59.244Z" }, - { url = "https://files.pythonhosted.org/packages/77/c4/0519ab028fdc35e3e7ee700def7f2b4631b175cd9e1202bd7966c1695c33/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e", size = 1474413, upload-time = "2025-10-13T16:15:59.211Z" }, - { url = "https://files.pythonhosted.org/packages/d4/4a/33044878c8f4a75213cfe9c11d4c02058bb710a7a063fe14f362e8de1077/numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e", size = 169502, upload-time = "2025-10-13T16:17:23.829Z" }, - { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589, upload-time = "2025-10-13T16:17:25.696Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/79/c4/27ea7849eb4a7e3b51db446b0414254326dba8c6bdee09b9f2abf963e55d/numexpr-2.14.2.tar.gz", hash = "sha256:e7144e83ea9e581f2273e0304f15836736c4e470e2bd2e378ce617662a1ca278", size = 121744, upload-time = "2026-07-18T10:52:43.185Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/fd/3e7ca4328c22b28717cfe05cd23ca35ffd84e4ca36c3da004323528e9e20/numexpr-2.14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:606ceaf5722e295ef965ca591736fc26d9e5f13ad950a479e64cead1947f8a3d", size = 164757, upload-time = "2026-07-18T10:51:49.05Z" }, + { url = "https://files.pythonhosted.org/packages/ed/5c/9780d48c4d5effcf55fc7ab7c5651ed82b43250ac8410cce4ef1e97583ed/numexpr-2.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:790da022539fe7c37dc893acf530a91c2ca6964d7ba11f464131383729d058f3", size = 153507, upload-time = "2026-07-18T10:51:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/41/13/ed5efda74ace9a7e2e933476b85bba6d00f2ebf6b833ef59a796ec9af88c/numexpr-2.14.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:327be9ee62251c173236dc620147ff2d0e732a32f5bad918d78a10082f502f63", size = 455373, upload-time = "2026-07-18T10:51:51.466Z" }, + { url = "https://files.pythonhosted.org/packages/ea/11/e8953226d658ae67e3e002abaa60a101c693f9c57d74974001729afab5ef/numexpr-2.14.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6a5d8fc7016bf6f6e1808b011510aa7c3bd75ec1407f7650874ec591db59f5e", size = 445187, upload-time = "2026-07-18T10:51:52.849Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f7/f51b7e10c312bd9617df829e063c87a6d443fd97af54688282ba2b11b1fd/numexpr-2.14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4b1ff261c3e69c4c59578d3a9ca6132603619d38ae1abe73325563bed3b9bbaf", size = 1420426, upload-time = "2026-07-18T10:51:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/14/bf/21b4e362039ba52f9033a3f57d68160c0829c9c8d66fa7b443b82491322c/numexpr-2.14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8b8384592c49cb15a91caa54e2cd84d1ce18edb7af030bb76cd29b52e5dc155d", size = 1467554, upload-time = "2026-07-18T10:51:55.391Z" }, + { url = "https://files.pythonhosted.org/packages/2b/75/0856b1add4e5a7741b80b615f3faace8e3cfffe11e22b6a940ebf25443aa/numexpr-2.14.2-cp312-cp312-win32.whl", hash = "sha256:41cdeacf1b4e51c1143983ea61fcee68139ca47222b55a9265b4fa73826c4260", size = 161441, upload-time = "2026-07-18T10:51:56.503Z" }, + { url = "https://files.pythonhosted.org/packages/a3/78/c87a88b8e63b5f78c67d555afebefafe81f6e3d98640b4bc1c125d76c9d3/numexpr-2.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:8fc55d14bcf17b3fe69213bea14f999451892b4690717008c66f2edfd6a085ce", size = 157563, upload-time = "2026-07-18T10:51:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/15/37/eea56d5ed1ae5252447f45bb461930eab66338eeab32e533aceb080db0bb/numexpr-2.14.2-cp312-cp312-win_arm64.whl", hash = "sha256:806a4471310fe20aa7cb1b2816a6f5e508073a1ad1c2e18041b83e57066fad6a", size = 148820, upload-time = "2026-07-18T10:51:58.536Z" }, + { url = "https://files.pythonhosted.org/packages/6e/7c/feb19571eb92d70c9952c94deb20092682e7657dc23b3e6c3a22503c9a97/numexpr-2.14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0741efbd75c284e709b0fd430c85c31982b44c9962922ba8a9cbbea1bf413321", size = 164763, upload-time = "2026-07-18T10:51:59.709Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8a/c4c1f171e101dbfe8b31d8d9f91369ff1bc49b1b4c9a4dc04bb9ed6e4155/numexpr-2.14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92b00c78664070e3af155c6be713a0a5d75d598647ce32a5609adb79a8f961d3", size = 153509, upload-time = "2026-07-18T10:52:00.641Z" }, + { url = "https://files.pythonhosted.org/packages/cb/fb/c27f10ca2e85511a1b0fd3248b1ab5454ea22d932f8fa84836d4bb5c7949/numexpr-2.14.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:149ab5744a5222f07b1d60455c4021c754d395e44938944ac7c7c2495f7feb54", size = 458652, upload-time = "2026-07-18T10:52:01.639Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/1003cc9cc35aad4d56a68f5ffeb26baa4a235b8eb6c0d1ce9b143bece462/numexpr-2.14.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2f5882a66a7792aa6614c68831aa20085b499d41422aedd001080624ebb14c", size = 448200, upload-time = "2026-07-18T10:52:02.872Z" }, + { url = "https://files.pythonhosted.org/packages/06/c7/c66fe3a137bb1dc7229adadde22299a156f730016ac70348dcaac4f7b1ef/numexpr-2.14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:375d8bee15be42dab22100a0a3de05fe6689a2de853eca012858768a9a7e02ab", size = 1420290, upload-time = "2026-07-18T10:52:04.055Z" }, + { url = "https://files.pythonhosted.org/packages/0b/87/913bb467d71df80dbccaa7fc37402ba681fd6656d5a79652393f40bd5571/numexpr-2.14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c1ffaf805d8636c3f95d0996517ecf9684c9ac62d768030ca78d1d00af2b3504", size = 1467495, upload-time = "2026-07-18T10:52:05.288Z" }, + { url = "https://files.pythonhosted.org/packages/f2/24/bf7b467570cd3264c2ab7cf02d7b1806c7dd6b2835b63a4f34e0ad0742d3/numexpr-2.14.2-cp313-cp313-win32.whl", hash = "sha256:449a57fb9d38de136e742b1fc429572b42f29778f1d695c3fe50ffec9d3c9a71", size = 161440, upload-time = "2026-07-18T10:52:06.504Z" }, + { url = "https://files.pythonhosted.org/packages/a7/59/bdebacebdd073b7ec316c5c3ed95f2e88e8bfc9bcd41af50ee2e0d53a3b2/numexpr-2.14.2-cp313-cp313-win_amd64.whl", hash = "sha256:dd905922d7dce457947d54b84c7ac345cef37332b724445e159a5a1a2080ce2b", size = 157565, upload-time = "2026-07-18T10:52:07.595Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9c/efcb3dc3a5723149842546ca7475549276bd023fe5fafb996e10b88927a0/numexpr-2.14.2-cp313-cp313-win_arm64.whl", hash = "sha256:b02738853b9b5b8a995f6c680f8f6ef33e8f419395b8fa380e38690495fdb911", size = 148823, upload-time = "2026-07-18T10:52:08.68Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c2/2430700212c749983ea3126e5f6900d02b64d72a95a88193c194783ad7ce/numexpr-2.14.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:76e87c7bd70d721ce4d418e81f4fb7ecf9e7e67d7cea8102527b07fd3d3facf9", size = 164781, upload-time = "2026-07-18T10:52:09.723Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/ce7f08f9ce509dd324afdc97b74c578a4847702e5f49ed32f7910a54cfcf/numexpr-2.14.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:939c89f613b814e64bb568859397dc9f99b219c3ef681a72fb99a86e435262f9", size = 153539, upload-time = "2026-07-18T10:52:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/ca/29/2e3a7ad419ec0b4b70ac7e09e4cbb811ccec0ea50976fe657427ec2113b7/numexpr-2.14.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b20c1c55aba7812ff2f2c6a50006425d02282fabb1eaf8d75fe638ffcf6deb02", size = 458710, upload-time = "2026-07-18T10:52:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/22/79/ce34593e425b5ac1c4aba69306c8811017bea34a4e9f966f6947514e8acb/numexpr-2.14.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bac00898930f962f360c3d763a8e2273fc931f65a1759ff1bf64b3cf13d65aee", size = 448255, upload-time = "2026-07-18T10:52:12.81Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ac/dab6fb4c66713b7676c2ea133a213dcc95a1359ebe52dacb4eeaa7c0f2b3/numexpr-2.14.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:022e61a3d5dbf5807746264b62126d1c2c24057ad90052478a4d4482ab2555c2", size = 1420432, upload-time = "2026-07-18T10:52:14.193Z" }, + { url = "https://files.pythonhosted.org/packages/12/bc/6131d1ab0166e982542c6034b516a94d6f006fb394b2deffb97e6c07688a/numexpr-2.14.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1d4593e2c6fa060cd7441e8b6ef25c16321a6be2144b3c82d1e00885f1fb6e94", size = 1467525, upload-time = "2026-07-18T10:52:15.474Z" }, + { url = "https://files.pythonhosted.org/packages/58/b1/23eadd1c0a880ee7c035681837960bd4ae295895ce52e917f152fc3d7995/numexpr-2.14.2-cp314-cp314-win32.whl", hash = "sha256:66f3b125b1104241322811de87918724d6709bf082dc0703722d0cecb7b29e82", size = 163695, upload-time = "2026-07-18T10:52:16.976Z" }, + { url = "https://files.pythonhosted.org/packages/2e/30/d605eddf0825bfd0ca64219cfa493bc87dee598d919d4c7d30bf9d4b7e49/numexpr-2.14.2-cp314-cp314-win_amd64.whl", hash = "sha256:ef576a1cded27ba2f3129bc3c42df452a1c498072680d560793f98b0024cd7e6", size = 160100, upload-time = "2026-07-18T10:52:18.159Z" }, + { url = "https://files.pythonhosted.org/packages/0d/48/00c82bd49202d27d9c6072fa3b20ac04bb45c8ee4ffdede67d026a591f0c/numexpr-2.14.2-cp314-cp314-win_arm64.whl", hash = "sha256:8274c51ae1842948f3ae7fe6951a23dcf4ddcbeeaff3737e978e7740b754662d", size = 150953, upload-time = "2026-07-18T10:52:19.183Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3d/0731d84de115f134631142284d636027e0e7702f88838533cff3c449fce0/numexpr-2.14.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f3526699350f94c6277fb16863773a1af9defd95a6f78bbd69b1f0338fd94756", size = 165453, upload-time = "2026-07-18T10:52:20.128Z" }, + { url = "https://files.pythonhosted.org/packages/2f/1e/349cf53bba707856f4186a831421727bdc9a352210bea5750ef22fb04212/numexpr-2.14.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:91e7928435f14fcb351c0157000bce65122b897cc8b0df6bcc48251f25850a6d", size = 154091, upload-time = "2026-07-18T10:52:21.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/f35e5096006ee89f5e5f65482c5e4a4512faf387e395c7578e5efd4ccaf8/numexpr-2.14.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c66925deb968f0b5280f723e2bb5918c11e6be2ca60e9e1530006286ab44031d", size = 469560, upload-time = "2026-07-18T10:52:22.402Z" }, + { url = "https://files.pythonhosted.org/packages/f9/00/698b6bdd95403af044928af9fc1dcf7c2b0909146ca5ae26882ebf22dfca/numexpr-2.14.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a404c9a55902572eec810068d06b79a7c99e96f0400f5a7d73f39dff5ec5e371", size = 459233, upload-time = "2026-07-18T10:52:23.687Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/87e160de8cba2779a82f7b9a3c93e39feb4ae50e397f676f96e979ecd92b/numexpr-2.14.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:44dc6b1dfa9abcbfc9917297f0d2af7c87c16b6ecd45747a8e70f54399a3a2f9", size = 1430032, upload-time = "2026-07-18T10:52:25.076Z" }, + { url = "https://files.pythonhosted.org/packages/00/91/bef92d9f6fb5ce18a3baf96451e1feed99e85b035fc142436e5d7b31bb55/numexpr-2.14.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:93233040f4bed3bce5abb0c2d20aeb1074511f29cbaa9c14828f86bcfa44d321", size = 1476032, upload-time = "2026-07-18T10:52:26.361Z" }, + { url = "https://files.pythonhosted.org/packages/51/b0/241550ecad5984bb816e1cc39125a2a9eccf92b85811125a58d10b0eadb7/numexpr-2.14.2-cp314-cp314t-win32.whl", hash = "sha256:2aceefa08f8f86317fa6e8fe9f6dc20d24ab8365d715be4a26306acf406d2dbe", size = 164124, upload-time = "2026-07-18T10:52:27.56Z" }, + { url = "https://files.pythonhosted.org/packages/87/ad/c5933948b275db2eb5bc3d90c4dff0f53b65622a97dd80aedd99416f3d6d/numexpr-2.14.2-cp314-cp314t-win_amd64.whl", hash = "sha256:cd684ac9daa539fcdac3437678834797b29d7780cfaad71111745132d466d51f", size = 160459, upload-time = "2026-07-18T10:52:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/d7/df/d7a61d34c48d79f8c72c2dfe0339f4249cfec68a6ebf49be269ac7971ac1/numexpr-2.14.2-cp314-cp314t-win_arm64.whl", hash = "sha256:2ef72de3d3dd466cb0c435cae7141c99b0f8091b1eae9d03dcb38690f56c3f79", size = 151337, upload-time = "2026-07-18T10:52:29.701Z" }, ] [[package]] name = "numpy" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, - { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, - { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, - { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, - { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, - { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, - { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, - { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, - { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, - { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, - { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, - { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, - { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, - { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, - { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, - { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, - { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, - { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, - { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, - { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, - { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, - { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, - { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, - { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, - { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, - { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, - { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, - { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, - { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, - { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, - { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, - { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, - { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, - { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, - { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, - { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, - { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, - { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, - { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, - { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, - { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, - { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, +version = "2.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/80/db0b4559e57ec36362bedbb05530a87fafbcb6067708c946967a41d449e7/numpy-2.5.2.tar.gz", hash = "sha256:d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860", size = 20773161, upload-time = "2026-08-09T13:48:27.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/72/dccb0aaf40972777283303919f613964227266d0c13adebb79ac124f1c3e/numpy-2.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:14e373cfc6387177e8409dac3c7159be8eb05cd77096cd7c950268b86f62831c", size = 16891693, upload-time = "2026-08-09T13:44:51.702Z" }, + { url = "https://files.pythonhosted.org/packages/60/2e/b5aee50a1f74ac815cf8331812cb8251e29024025de462e0c047641c614c/numpy-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbd96c833ecc8cc069ce518078fc8c60cb9cbfb0fea5b7a803ad65035596d03", size = 11903109, upload-time = "2026-08-09T13:44:55.501Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f4/29e78102a80601cf034d4e9767022cffeca2c3b4c926e1754572ca95593d/numpy-2.5.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:6e8172ddfcf5cf74b811d372b570b83c60bd2de87a6fbfbebdadb4a9bd9c6cbb", size = 5350202, upload-time = "2026-08-09T13:44:58.401Z" }, + { url = "https://files.pythonhosted.org/packages/11/4b/dcd3b7eadaf4035d2c7a4289d232523a6964f602598ef7674e4bd7291f93/numpy-2.5.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:65f188481f1669e26f62b701e8205d19e460fa4a9b52a1414ba382330e4a3414", size = 6687736, upload-time = "2026-08-09T13:45:00.813Z" }, + { url = "https://files.pythonhosted.org/packages/e5/21/4947e0e9d6c9fc2e2ff15b8949049ee44f63adb9cacc729ab8793f97e712/numpy-2.5.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ee9c4eeb8454b3660a8b53493563c3e121c2fc94fbd72b848ef814ed7b676a9", size = 15612696, upload-time = "2026-08-09T13:45:04.151Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5f/62d28cf019460c7f1394105b4d49d9911a9c444cb77ab0bd95a204c5a6de/numpy-2.5.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3cdec01fa790a186d430433fdd4d4ffb70eed6f0eeb4bf05c8dbe2dce0a9bcb8", size = 16722264, upload-time = "2026-08-09T13:45:07.714Z" }, + { url = "https://files.pythonhosted.org/packages/14/25/3f0be4c1b9fdf5dd5e708a6806978564d7c46a055c000496309ff2a2f8af/numpy-2.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7999d4ddb0c4025018373fd787510d46e04c769467af22869707b3c1cfd459ab", size = 16974396, upload-time = "2026-08-09T13:45:11.316Z" }, + { url = "https://files.pythonhosted.org/packages/22/72/6262cbdeeb45da9d971e40715f579d791603ba8ec0b5e2db1ac55454421d/numpy-2.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1f017dc0875c9209d219f97feceb7d54c2661bb243deb4114478e1295808af7", size = 18476044, upload-time = "2026-08-09T13:45:14.869Z" }, + { url = "https://files.pythonhosted.org/packages/36/33/29208b8b075bde62d26a81d14b358c42b0f69b6cabd98d4ff97f37f22b05/numpy-2.5.2-cp312-cp312-win32.whl", hash = "sha256:d6a48072864e3324e194a8fbb3c657bcc5b5c869dbc64c9537b1d5c862572c0a", size = 6072817, upload-time = "2026-08-09T13:45:17.867Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b9/87fea2769fe1c47c1b5b01d8310772c9d1a85d485de7cf386ef7a3332b02/numpy-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:28ac63476ec7651484215ee7fa15a1f78b57c14621f01e392afe17b9a1390ce4", size = 12464674, upload-time = "2026-08-09T13:45:20.734Z" }, + { url = "https://files.pythonhosted.org/packages/14/52/032b97e00461ab0809bbe4c588b035620e5a14b8cdee47ecddefc7b17d33/numpy-2.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:27650bb0e7140fa3d37b9923b4803645e0b125d190f326eecfd3f4dad8e8ade1", size = 10397131, upload-time = "2026-08-09T13:45:23.73Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/6b24738a0ef4557d189b150046cd07823c50e4273e8aebd651222e24306f/numpy-2.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e4cb9a754c8a0c62eaa88273a5fba3391f4a610d1dee893c0755da31c083f15", size = 16886595, upload-time = "2026-08-09T13:45:27.323Z" }, + { url = "https://files.pythonhosted.org/packages/65/60/f2d208d366f263f39c6e69ed309290717aab41078b6d04c9be2a84fa2a07/numpy-2.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52c808f96484f5571a5cc863775ce50247c17dfb3b0361f8ed6b4b0456f80080", size = 11896845, upload-time = "2026-08-09T13:45:31.638Z" }, + { url = "https://files.pythonhosted.org/packages/3c/79/81e0bf24f4d020a2b1d5cd297a9f60c3f24eeb116f9bba5870443f7b6a4a/numpy-2.5.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:29d81e97f668489cba8ebfd796b9bdd453525d35dd9e162e2daec94bf3fc7740", size = 5343880, upload-time = "2026-08-09T13:45:34.373Z" }, + { url = "https://files.pythonhosted.org/packages/ba/cc/e3141cf06d1a8a2c7e107543fe1269c1d1af760d4d683c0794a4ee1127c2/numpy-2.5.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afb3f0632d6b2e3ba04dbce8d1e48d321b369138b73830b5ca371a0e8d479d56", size = 6682264, upload-time = "2026-08-09T13:45:36.7Z" }, + { url = "https://files.pythonhosted.org/packages/29/f1/2a64a307d92c5d98f5255a4014eb43bb6103ee477087b61ecae44a3aa9b9/numpy-2.5.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0aadf13b60048d501e05fa699efaf7734e2494f3498a4c2a5521d822640324f3", size = 15609566, upload-time = "2026-08-09T13:45:39.518Z" }, + { url = "https://files.pythonhosted.org/packages/7b/44/59a1eb68e773c4098d107ef34a0dbdeca501d72ffcfbff9a7707343921ce/numpy-2.5.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29b86ff8a6cc556b47ec6b64b194815cc80e6bf5eedcc6cddfd65318cb0b4eee", size = 16709995, upload-time = "2026-08-09T13:45:43.661Z" }, + { url = "https://files.pythonhosted.org/packages/8a/4c/3e54d4ddbc359a1295f8b633e8106bcd4d7d4a206e82df051bdfb3058755/numpy-2.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6950c4b7dd562453090548ba7f5da7e59f57f85663f15d5dcc60e249192f7e59", size = 16972511, upload-time = "2026-08-09T13:45:47.094Z" }, + { url = "https://files.pythonhosted.org/packages/f2/9f/02e371638ebf19b66d46231e4be52999e87f32d1961b113bc45656608b22/numpy-2.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9727f472d2f3888053b8a75ab0cb94745a9de224bb5846dbadc0092101bc71d", size = 18465609, upload-time = "2026-08-09T13:45:50.808Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ae/ad6645abc7a3510fe48e8ea1ab4598166f500057ef4ebf38bfad4f1577de/numpy-2.5.2-cp313-cp313-win32.whl", hash = "sha256:4f9744f9fbdcea0bc552e8f19e1f141f811a3f9bc2be2cc6e86d982cab23e3f4", size = 6070204, upload-time = "2026-08-09T13:45:54.111Z" }, + { url = "https://files.pythonhosted.org/packages/15/20/f3489f86d81ea460b2bcdceaed094142ca6579f6be0ec527b781d39afe68/numpy-2.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:85aaccb24182c25df891ad0ec333585967e115269d5f1b17f2c9ae005bc96657", size = 12460532, upload-time = "2026-08-09T13:45:57.167Z" }, + { url = "https://files.pythonhosted.org/packages/d5/21/35b31dde1b283b79de828b80f876afd8c94e28fe1e9c375f89e261cc4c0d/numpy-2.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:bd68ece1553d2023c09a4226d9e41c586ad2d20594d1a456186c33513d2cb3f2", size = 10396725, upload-time = "2026-08-09T13:46:00.478Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f8/c3b222bf075b50afd8e949a07a15c4b312a4a84bd8102a332bcd953cbbb4/numpy-2.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d787cf769c3baeb5f6235e778edb52c08dfa923789b5958f28e6450f96107cb1", size = 16885180, upload-time = "2026-08-09T13:46:03.939Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/2c1d4b1987795a92b5bbf7c24fe249ab96aa2573ab0d7604802c189d7b86/numpy-2.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:24b9dc2e3d84aa58523798805194e23e736f3f6ce2d1a5b92583ae734e6dbda8", size = 11907878, upload-time = "2026-08-09T13:46:07.045Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ee/d08226fc858044355983a6e5b94f08ff6f3969e0a2b160a4a89f0ddb3445/numpy-2.5.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:9e9413326d726c2545bfa65d2c0876871e8d8386e77f992c1d426e180bbd4323", size = 5354922, upload-time = "2026-08-09T13:46:10.04Z" }, + { url = "https://files.pythonhosted.org/packages/94/f0/6d3d933056440ebbc5e6bad92065fc6c26a48a84a36b1208580e94eea76c/numpy-2.5.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:60e902ac295855348a5ca2ea4c89108989a9f5fddfad3dfc0a8f36b10358567e", size = 6679168, upload-time = "2026-08-09T13:46:12.275Z" }, + { url = "https://files.pythonhosted.org/packages/c4/3b/ecd49dd90033cceb2704d88ca905d4d7d89b0e8c739608754ffd325fa820/numpy-2.5.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50e500dc868e9313530ce12ba470fe50ff3afe3d62993ed6eff652dacd555b65", size = 15624501, upload-time = "2026-08-09T13:46:15.322Z" }, + { url = "https://files.pythonhosted.org/packages/c7/99/461bd36dbdfac6c1c53efa370bd55a83227542d0d118f1677dbf1a3dacd5/numpy-2.5.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318b9a4c845dbea06708a29c84ee429cc3065048db34cdb799047643492050ee", size = 16713701, upload-time = "2026-08-09T13:46:18.949Z" }, + { url = "https://files.pythonhosted.org/packages/f9/9c/2b251df9e8a5d647b62b0cbc1b90a91850c1cf4859ecb532fd0b4eacff6c/numpy-2.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:34c319e2963be042673fb46570501b2f06c41924e17e3563d58646b4380dfb68", size = 16986065, upload-time = "2026-08-09T13:46:23.006Z" }, + { url = "https://files.pythonhosted.org/packages/8f/25/20de43f53ff1390534a124475055a19f01fe10c920a0fd11b8e18d6d6052/numpy-2.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f06571a052127dc1b4e8b83029b4d1b20daa2b64a31cdd181fc6bc774e9000eb", size = 18470031, upload-time = "2026-08-09T13:46:27.102Z" }, + { url = "https://files.pythonhosted.org/packages/56/5e/0c577ca308d6da5eb79b546ba10bbe5b60148192194e2da060913b1de4f1/numpy-2.5.2-cp314-cp314-win32.whl", hash = "sha256:2cc779226e476d1e1f08c74068c419e60f41a9e0e069c92f6671d31d5c985e98", size = 6121028, upload-time = "2026-08-09T13:46:30.046Z" }, + { url = "https://files.pythonhosted.org/packages/15/5c/7bcbd5b11f94199073320410cddcbb80cee62415bfeb540874b265c2d922/numpy-2.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:7587f53dfbd5edc0f7b87c6217b4c6d2d1f2ef9c3da70bc1315e7db5f8d7ec9d", size = 12597627, upload-time = "2026-08-09T13:46:32.886Z" }, + { url = "https://files.pythonhosted.org/packages/87/bc/4d0b06fba0da90ccc75af62823cb9dcedb6c9ea0cffa058cb2c9ee773a77/numpy-2.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:3e4c367352d3747784248a227fbec218e193b56f7e6692e3b64fc805478ecfdf", size = 10680414, upload-time = "2026-08-09T13:46:36.036Z" }, + { url = "https://files.pythonhosted.org/packages/cd/17/f429aac9dc08833a0d0f188eba38c532a751b1a1f2ca6018a37b455cb321/numpy-2.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b879fb674276e331513fb136b78dbc6bd3c848309e0d841cfd63be3896c4cfc1", size = 12026967, upload-time = "2026-08-09T13:46:39.084Z" }, + { url = "https://files.pythonhosted.org/packages/ca/9f/d0849de96a2a4ceaa16662f18ee13eaa9c0aa418269fdc8c4857c56b11da/numpy-2.5.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:fd0d703772bba096843785bd38371e31bb4a0c1151497ad5739d182114a73f7f", size = 5473874, upload-time = "2026-08-09T13:46:42.075Z" }, + { url = "https://files.pythonhosted.org/packages/89/3c/8df216d4a4a5422a3de045301cf7df8ea47286d76f5cb7160b0128ac26b7/numpy-2.5.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:3a2f061cebd9e3d23bdcfaaded5e2293a4c6a5b60fa42df85d410a725ce621bf", size = 6789276, upload-time = "2026-08-09T13:46:44.387Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3a/20d7e9891c4ddfadd6ff8d95bf4b29f353d8e1770553de2099880551dfb9/numpy-2.5.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6df895598c0edcb41030126c89e0f353b07d93238116143b7405e937359736c4", size = 15659154, upload-time = "2026-08-09T13:46:47.538Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d6/f3aa3d2688bf501b858835c6bd087ae9b51a56ae6fca8e2b0990abd177af/numpy-2.5.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ab3d4a901f844ea836c3e80bf463c6a27d7f3c14e8e292fcf28d348b25b9bce", size = 16748909, upload-time = "2026-08-09T13:46:51.442Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8f/1c5cae8d2baf86ab802ae97a00be55bc7e21ebc11b12bbc33376c5f05342/numpy-2.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:cebc2d6dbb605a7703d59751dea4bd6b0ab127a5a4338a6f432df1936fef8b26", size = 17027685, upload-time = "2026-08-09T13:46:55.095Z" }, + { url = "https://files.pythonhosted.org/packages/5c/27/71d3467404aedc1c24ce79610f91b52b0b0f466c43a701aa56fc75c145ab/numpy-2.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:eaca7ff36f0f52e2111ec71f169d8fd3e889e7ddc0d2592e0d703fd8d3ce8fac", size = 18501181, upload-time = "2026-08-09T13:46:59.09Z" }, + { url = "https://files.pythonhosted.org/packages/14/2f/42921d27c40aea7e077f4a423ae509fd9220b028cd787bafefd8ab2b3a5f/numpy-2.5.2-cp314-cp314t-win32.whl", hash = "sha256:ddf47472af2e4280d79bac82304f5e80150211f1b9e614b760061d5fdfbb6eba", size = 6271085, upload-time = "2026-08-09T13:47:01.903Z" }, + { url = "https://files.pythonhosted.org/packages/75/e6/bad5f5d56de9b1971bac959963dda276d35c40f1854475005434bbe08692/numpy-2.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:44ef9675d908e65f9953063837c3277730f3f4437615a4cdab67b366cabaf884", size = 12787971, upload-time = "2026-08-09T13:47:04.963Z" }, + { url = "https://files.pythonhosted.org/packages/df/05/f608795cb34391acd67e38d94a3c36abd8d8576293a3a80727d7595c372c/numpy-2.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:eaa088384c46f519dacb93b7ec483a6d6b19a4a2085ae4f25ab9b1c43d387d1e", size = 10750306, upload-time = "2026-08-09T13:47:07.976Z" }, + { url = "https://files.pythonhosted.org/packages/33/c6/28de0191c5f82b7d42a0a51390ba98587048aa93a39fafb05bdbe6e8d00c/numpy-2.5.2-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:078f9b027b478c9379b9677babbf0f8b8f1ecfada27636d7b9a93990c638739f", size = 16885274, upload-time = "2026-08-09T13:47:11.439Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d1/973ca116000d244897e468ea1aff30b589e5022e3c8744b71706fe33bd57/numpy-2.5.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:50a68f4bacd8a2b33d8da3d2269d0d78500f86ea582e4786dc10f5ef2c2c6842", size = 11907846, upload-time = "2026-08-09T13:47:15.128Z" }, + { url = "https://files.pythonhosted.org/packages/78/d9/8c4b3937ef204cb2fd88d389ccd0f265a2ffb11f35a01d2064cf46714bd6/numpy-2.5.2-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:e79aba74ffaf5f78a050d777c184cddf8fdffabab38acf5f3ef1fecbc17895d6", size = 5354892, upload-time = "2026-08-09T13:47:18.07Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/b6ee65ea2999fdb7023935e108e6fb776ee4082aa15f159acfa857e578c8/numpy-2.5.2-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:9a0731745a72a184490a582fb4af2533512bd071ace67785b5fdffc0ae58dce8", size = 6679309, upload-time = "2026-08-09T13:47:20.456Z" }, + { url = "https://files.pythonhosted.org/packages/43/f3/acb18d8b137a393c8e7803a8c994c9e64bde3930692a69d826993113a159/numpy-2.5.2-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ec954036759bcee3aa484f8603bd9c14f3e776293b85578b8734c2d72777c69", size = 15625850, upload-time = "2026-08-09T13:47:24.365Z" }, + { url = "https://files.pythonhosted.org/packages/a9/bf/a8e9bb0db815a0e265b5744ebedd3af0bd5faad8604e5b50a1cd012f3c91/numpy-2.5.2-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc649493697006bc90614a5f0bbc8cb3cb1866715c474e473694968d7e6b99ab", size = 16713664, upload-time = "2026-08-09T13:47:27.965Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c3/6e913736b3dd6582344af32418b5fb9dab34282e8a8174ae1d54ceb0fc13/numpy-2.5.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:cf7de32f486e4ac9e2d93b810f9e9ac72a728dd46a32a0bb403222f27f653514", size = 16986749, upload-time = "2026-08-09T13:47:31.541Z" }, + { url = "https://files.pythonhosted.org/packages/80/09/7d3b23eff5c7428ef6c01e6f7052bb60d504c4d33e317b36b8959c24ad97/numpy-2.5.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:2ffa7bacab3e2ee1b19ed31766bb60bb380b68c23f051e199c5cc598afd68710", size = 18470495, upload-time = "2026-08-09T13:47:35.364Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a4/68a321d825374f6eb677ffe8ef8c6b9a328304e6fd2e39d9530822776607/numpy-2.5.2-cp315-cp315-win32.whl", hash = "sha256:6b588cc8f902d6bff201c19fd00c43ab8545671e3554d014e12e14139e5e8617", size = 6120696, upload-time = "2026-08-09T13:47:38.561Z" }, + { url = "https://files.pythonhosted.org/packages/c8/23/deafbb1700f79fae9cd1e91220f133d124cc267de1b584da3fbf6db2f6cd/numpy-2.5.2-cp315-cp315-win_amd64.whl", hash = "sha256:07d4e89f3a9ab0a9ba24264ccdb642b3dd951b2281e8883a5481a4aa79cc31a7", size = 12597324, upload-time = "2026-08-09T13:47:41.401Z" }, + { url = "https://files.pythonhosted.org/packages/33/cd/3272ba105e3bbbdaeb11357eda31e7a6825ffe159e8171665660299a948f/numpy-2.5.2-cp315-cp315-win_arm64.whl", hash = "sha256:a610dc7e3c52edd39c2bc2375ff9c3fd59cb3ad00e4472d36f83bc1457145788", size = 10680466, upload-time = "2026-08-09T13:47:44.873Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0e/58370637b1bb70a5c9ce2b43f4b521ccb224e36ccb76a6596b17ae4b447c/numpy-2.5.2-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:40f4d451aed46a8046a1aae41c4e55fb3612273df9c502480135e1501576a34b", size = 16993947, upload-time = "2026-08-09T13:47:48.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/93/2abcb807712b289d6d60fe4cf30532f98974a8396d885650f3ba5a13026e/numpy-2.5.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:c081cbe16ba1ab53078e5ff29013621e33c509eedab055775d956427712c236e", size = 12025331, upload-time = "2026-08-09T13:47:52.646Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3a/2898e003a5fbaf87e76c039b4ee1f5eb390471b4ffe74887c1f34c4e791e/numpy-2.5.2-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:0090ccdd57ec2703e9b49d0bf554767370581c1dd0a6b2bb2b2d9def317d042a", size = 5472336, upload-time = "2026-08-09T13:47:55.403Z" }, + { url = "https://files.pythonhosted.org/packages/61/a5/23f69d07c544597b29758b31b55c27dc9d541012a2c1496189fef702aec2/numpy-2.5.2-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:6a9bb119fb8dd21ba30b3f0e555b7e2b081bd9883af21ec9c1c633d161cda3a8", size = 6788387, upload-time = "2026-08-09T13:47:58.192Z" }, + { url = "https://files.pythonhosted.org/packages/15/ea/c0dbdbcf22f43782510a3e492dd3da73c6112b69cac8929d16d127536fc4/numpy-2.5.2-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a839318485284a6fb31be4f8f2c91c8f2cb22f4543c4a8903f12b0671ffe07cc", size = 15667096, upload-time = "2026-08-09T13:48:01.562Z" }, + { url = "https://files.pythonhosted.org/packages/fc/5e/29c73c31748cdb0f7566642125ba17fd5b56780cddf891b085dab27e4466/numpy-2.5.2-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba0a474801b8dc67b66bf465548abc90e82b44d2611b5770f33008dcabffe8ec", size = 16751730, upload-time = "2026-08-09T13:48:05.706Z" }, + { url = "https://files.pythonhosted.org/packages/47/95/02501e8454796bb58dadf7a99d3181e0b464bf264e1003039572f9779fac/numpy-2.5.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:0a4035ae1129ff8777f08bfbd44f1e5d8e9c049ce0c2dd78fc0d92c13e7251c0", size = 17038686, upload-time = "2026-08-09T13:48:09.627Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b5/53a681d91b5c82687067d8ea5035e02d917b5509d6f334cb06484a954714/numpy-2.5.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:77843ca236b777e67f8d6b3660ea116e499612703a0ecd7093f316201eb9d8e2", size = 18507727, upload-time = "2026-08-09T13:48:13.744Z" }, + { url = "https://files.pythonhosted.org/packages/42/06/6e11443f7b64ee376c860506091103bf68f92d2cab9e8d96d4501babf07c/numpy-2.5.2-cp315-cp315t-win32.whl", hash = "sha256:7354826bc6f8f69402e9b7fe28d15fcd34feebd74f856f111585c5b0c9fb0251", size = 6269775, upload-time = "2026-08-09T13:48:17.543Z" }, + { url = "https://files.pythonhosted.org/packages/f1/18/195d6b86cd72dbbc501edfa778005fa6b87afd34c153e46028cd3a0938f4/numpy-2.5.2-cp315-cp315t-win_amd64.whl", hash = "sha256:e5651f3f87add730ee6608d915009e19c911fba0cb000c7e3ea994b7d768eb12", size = 12782559, upload-time = "2026-08-09T13:48:21.023Z" }, + { url = "https://files.pythonhosted.org/packages/b4/07/458c344f0f0c178f4481dad5cca790626ffe4c34eabf9467069d06ee4999/numpy-2.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:5f8e00be2ec6f45f4e8a41a527f68d44a7d96fee92a650e4d8b1326f77f61e6e", size = 10748103, upload-time = "2026-08-09T13:48:24.21Z" }, ] [[package]] @@ -3238,7 +3480,7 @@ name = "nvidia-cublas" version = "13.1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cuda-nvrtc" }, + { name = "nvidia-cuda-nvrtc", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, @@ -3277,7 +3519,7 @@ name = "nvidia-cudnn-cu13" version = "9.20.0.48" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas" }, + { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, @@ -3289,7 +3531,7 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -3319,9 +3561,9 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas" }, - { name = "nvidia-cusparse" }, - { name = "nvidia-nvjitlink" }, + { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -3333,7 +3575,7 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -3360,11 +3602,11 @@ wheels = [ [[package]] name = "nvidia-nvjitlink" -version = "13.0.88" +version = "13.3.33" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, - { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/580ca6f29dcab0221db8706badca1bbbb084f1975c4d4e83329c3a7e31f0/nvidia_nvjitlink-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5", size = 40742423, upload-time = "2026-05-26T16:54:51.613Z" }, + { url = "https://files.pythonhosted.org/packages/69/30/45414e35ff2eee7db3da037e5707037ccf9d2b5218ffbdb055ea4d5aa98a/nvidia_nvjitlink-13.3.33-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ce48b37dfeb3cb1eae4cf85adacb47d7a6539ea2272870c9a3628ce275c2037e", size = 39168635, upload-time = "2026-05-26T16:54:13.906Z" }, ] [[package]] @@ -3409,20 +3651,21 @@ wheels = [ [[package]] name = "opencv-python-headless" -version = "4.13.0.92" +version = "5.0.0.93" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/1d/99/76b7c80252aa83c1af16393454aafd125a0287101afe8deb0a6821af0e30/opencv_python_headless-5.0.0.93.tar.gz", hash = "sha256:b82f9831daab90b725c7c1ee1b36cb5732c367096ac76d119e64e14eb70d5f3c", size = 81817738, upload-time = "2026-07-02T07:01:06.039Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/42/2310883be3b8826ac58c3f2787b9358a2d46923d61f88fedf930bc59c60c/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:1a7d040ac656c11b8c38677cc8cccdc149f98535089dbe5b081e80a4e5903209", size = 46247192, upload-time = "2026-02-05T07:01:35.187Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1e/6f9e38005a6f7f22af785df42a43139d0e20f169eb5787ce8be37ee7fcc9/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:3e0a6f0a37994ec6ce5f59e936be21d5d6384a4556f2d2da9c2f9c5dc948394c", size = 32568914, upload-time = "2026-02-05T07:01:51.989Z" }, - { url = "https://files.pythonhosted.org/packages/21/76/9417a6aef9def70e467a5bf560579f816148a4c658b7d525581b356eda9e/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c8cfc8e87ed452b5cecb9419473ee5560a989859fe1d10d1ce11ae87b09a2cb", size = 33703709, upload-time = "2026-02-05T10:24:46.469Z" }, - { url = "https://files.pythonhosted.org/packages/92/ce/bd17ff5772938267fd49716e94ca24f616ff4cb1ff4c6be13085108037be/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0525a3d2c0b46c611e2130b5fdebc94cf404845d8fa64d2f3a3b679572a5bd22", size = 56016764, upload-time = "2026-02-05T10:26:48.904Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b4/b7bcbf7c874665825a8c8e1097e93ea25d1f1d210a3e20d4451d01da30aa/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb60e36b237b1ebd40a912da5384b348df8ed534f6f644d8e0b4f103e272ba7d", size = 35010236, upload-time = "2026-02-05T10:28:11.031Z" }, - { url = "https://files.pythonhosted.org/packages/4b/33/b5db29a6c00eb8f50708110d8d453747ca125c8b805bc437b289dbdcc057/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0bd48544f77c68b2941392fcdf9bcd2b9cdf00e98cb8c29b2455d194763cf99e", size = 60391106, upload-time = "2026-02-05T10:30:14.236Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c3/52cfea47cd33e53e8c0fbd6e7c800b457245c1fda7d61660b4ffe9596a7f/opencv_python_headless-4.13.0.92-cp37-abi3-win32.whl", hash = "sha256:a7cf08e5b191f4ebb530791acc0825a7986e0d0dee2a3c491184bd8599848a4b", size = 30812232, upload-time = "2026-02-05T07:02:29.594Z" }, - { url = "https://files.pythonhosted.org/packages/4a/90/b338326131ccb2aaa3c2c85d00f41822c0050139a4bfe723cfd95455bd2d/opencv_python_headless-4.13.0.92-cp37-abi3-win_amd64.whl", hash = "sha256:77a82fe35ddcec0f62c15f2ba8a12ecc2ed4207c17b0902c7a3151ae29f37fb6", size = 40070414, upload-time = "2026-02-05T07:02:26.448Z" }, + { url = "https://files.pythonhosted.org/packages/53/7c/8c8097891c509d98cd128493835c95631c80be6a8f37ed9d25716c2e16f1/opencv_python_headless-5.0.0.93-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:030ca5e0837a2963ab36ef896baa9767eb8d2b83353fb28af5a521e40dd8756f", size = 48322581, upload-time = "2026-07-02T05:50:34.207Z" }, + { url = "https://files.pythonhosted.org/packages/90/8c/eab2ad388c3cbab2a350c10c2ef19ce6bd099240afc31789032c996bab52/opencv_python_headless-5.0.0.93-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:1e55af3abfb462eeeabe5c775f12bdb36216d8a93a3583d69e6bd6e1d6ba7d00", size = 34782894, upload-time = "2026-07-02T05:51:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/ec/78/afca939f40ffe2b2380bfa86f812b2f7d4acc5a27b27dc41b49cad7ce7b4/opencv_python_headless-5.0.0.93-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:10818d91510e05c04568ae12b5cd120779c70c01bf897b001a6221fe430df80f", size = 36521085, upload-time = "2026-07-02T06:55:24.429Z" }, + { url = "https://files.pythonhosted.org/packages/2b/97/8170e9819764c47e436c130d3ff6cfb73b58f923eae9d3a03d8982b04aec/opencv_python_headless-5.0.0.93-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:09a872a157c1376ab922a69bbf22f9a95bcc7b658a9d8b436a60212b02b2eeb4", size = 56563598, upload-time = "2026-07-02T06:55:47.355Z" }, + { url = "https://files.pythonhosted.org/packages/3a/98/1a28a7101e31801042b3098871a74b76c61581d328ef40774ff4edb53a56/opencv_python_headless-5.0.0.93-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:840bd717c21e5c11cadadc022a823315ea417f961213d06b4df010e019eb16f4", size = 39648433, upload-time = "2026-07-02T06:56:04.255Z" }, + { url = "https://files.pythonhosted.org/packages/9b/21/f6ef335f6e65724aa78b8d792b48d40a48c381715f1e62f5a5049e09d07e/opencv_python_headless-5.0.0.93-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ed709fdf9aa0bd1f2ed8549e71d19449b03a675bb581eb292285f6861953be37", size = 61204038, upload-time = "2026-07-02T06:56:41.823Z" }, + { url = "https://files.pythonhosted.org/packages/d0/8f/b8756467ea991449a293797f6b3fa80fcfdd29598a0a60d1cd5715b96e61/opencv_python_headless-5.0.0.93-cp37-abi3-win32.whl", hash = "sha256:c6bcd96b185975ea240d22cfdb15a1f6d080cc95264cfbe2621f21bb144d89b9", size = 35411237, upload-time = "2026-07-02T05:50:12.901Z" }, + { url = "https://files.pythonhosted.org/packages/b8/88/763b967f7efd7226b82c9fae16d560cba049b1f0c036647e65c610fd636e/opencv_python_headless-5.0.0.93-cp37-abi3-win_amd64.whl", hash = "sha256:829717b6a95554f273e49e357cee3b3a2a26b6f4842fbc1bed2b45bdd8f87e0e", size = 43825962, upload-time = "2026-07-02T05:50:09.627Z" }, ] [[package]] @@ -3463,63 +3706,57 @@ wheels = [ [[package]] name = "packaging" -version = "26.2" +version = "26.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, ] [[package]] name = "pandas" -version = "3.0.3" +version = "3.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, - { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, - { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, - { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, - { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/be/4f/5f3422a2afec5ffc46308b79e53291365a93748b498ac2e58bead0197916/pandas-3.0.5.tar.gz", hash = "sha256:dca3734d6ab7c906e6730f0788b0a1dbb9f2467731f9711f77995c8e9d62d712", size = 4658219, upload-time = "2026-07-22T22:19:28.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/54/1dc810ea558d1320b597aa140a514f2fdf1d2ea09c38cf556f13ea712ec9/pandas-3.0.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa290c16964d4963fbfbc358928239cf3bd755b20e988ce944877def2f44471d", size = 10411717, upload-time = "2026-07-22T22:18:08.307Z" }, + { url = "https://files.pythonhosted.org/packages/68/56/fbe81c09195924d8b7b8d4461a20458fe80a6a5ed6b24f0314da684277e1/pandas-3.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2e26bb46934b8a2ca0c3de1d3d606fc5f6746584791b2db264d58cf370e08dc", size = 9957095, upload-time = "2026-07-22T22:18:10.6Z" }, + { url = "https://files.pythonhosted.org/packages/e0/51/fac252f4a913ed5eabf3c11b880a9e8d5a6c10f0b2129d0462212d238b4d/pandas-3.0.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73fa87b08a7ef706f8aafda39ddaccf2a99047bea62d8c88a0361bcafb2237bc", size = 10485458, upload-time = "2026-07-22T22:18:12.834Z" }, + { url = "https://files.pythonhosted.org/packages/12/98/e976540c1addf70442be7842a18cf70884a964abbf69442504f4d2939989/pandas-3.0.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d373ce03ffd84010ed9839fa73672a9c8256990532e158440c0085db7d914b34", size = 10998091, upload-time = "2026-07-22T22:18:15.209Z" }, + { url = "https://files.pythonhosted.org/packages/a4/8c/1f29b5be8d3fc47dd7567eb167fabba2085879b31e0287ce7cba6d3d2ff4/pandas-3.0.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a29c53d85ea98c5e792c59ef82ee9fbe6ca902c0d0adb6b23f45ef894cd7bf6", size = 11499501, upload-time = "2026-07-22T22:18:17.689Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e2/bd9c98ad2df7b38bde002adde4cdf353519da51881634323b126c55997f9/pandas-3.0.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ad3b02ed6bc7d7ae9b70804b2c6aa31827489d150f8e623ce82491b82085d7", size = 12060559, upload-time = "2026-07-22T22:18:20.147Z" }, + { url = "https://files.pythonhosted.org/packages/f3/9a/ffbd852d58bd74a617fe2f8ee6a58a96982271ce41cf981eab22190b4a4b/pandas-3.0.5-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:b2acb4650527eec6822c3dadb2b771277b65e7dae7a267d4bccf65fd1bb3fbce", size = 7197652, upload-time = "2026-07-22T22:18:22.502Z" }, + { url = "https://files.pythonhosted.org/packages/70/b5/d2d3e9ae73362ba4229651b0ee1455cf78073a1ce585f6ff693782ce263e/pandas-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:80a611068e8a3ac23f7398c6c14eb46dc974e5cc9997f653e2dcfd1da74edd41", size = 9831691, upload-time = "2026-07-22T22:18:24.534Z" }, + { url = "https://files.pythonhosted.org/packages/52/51/dea1e89d6a6796b9c43f85a09b484ee03edb8a4c4842e73e200a8c11301c/pandas-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:25ff585b972a18ef1fe9ffa3ac6544d9950508aa76832e5147640b6022821e49", size = 9105796, upload-time = "2026-07-22T22:18:27.064Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/7b95c4a0025227d6f118c4039b423412ac6a982db02864166185d812fbc7/pandas-3.0.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c1c05a767fe8e5b4fe9e1c29806829c582052eaedb9120a3da83ba3f69e24a5b", size = 10385742, upload-time = "2026-07-22T22:18:29.346Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0c/dc78fd8c4da477b4b5e8ad37295af352190d21ef63a9ee1bc071753074cc/pandas-3.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b86765f268b56f7e665b93bce9d5df69dee7f99e595cf8fb839483ab315942a3", size = 9932067, upload-time = "2026-07-22T22:18:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/3e/71/3592c055cf44df9808550f9368ceda80ff2b224d355ef73fe251dcda1802/pandas-3.0.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c597ecf5616b5c420372c1d4d4c00dbbfba7398bea857dcc984347e1ea48417b", size = 10466756, upload-time = "2026-07-22T22:18:34.195Z" }, + { url = "https://files.pythonhosted.org/packages/e3/70/4363150359f95b4cb4bcbb34ca23572bb5495749a621a8f3d5a1ddfd293c/pandas-3.0.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b11c36e218331d0387cbe3a0a5f75162357a1d92d57b2b08a336ff94b19b2be", size = 10938525, upload-time = "2026-07-22T22:18:36.81Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/317e7a0c67c0e69fa905a0161409397a7dc2d46ff611f6ca4803352c042b/pandas-3.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf52e1f61d229496da17dc7ab54acdee627357e7008fd4fecba3d0ba2937fa58", size = 11489303, upload-time = "2026-07-22T22:18:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8d/36dade89b49e4f9d5cbdbe863772581f98c0c6d78fc39ad4c557f6f2e17e/pandas-3.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db172144bb56422bd157812f3b021eacc255451470b31e2c633c349490a1cfee", size = 11989004, upload-time = "2026-07-22T22:18:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ba/18c4ec8a746e177da05a9e7a7963781d8ea195780724f854601b6ebd6b78/pandas-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6", size = 9826896, upload-time = "2026-07-22T22:18:44.539Z" }, + { url = "https://files.pythonhosted.org/packages/de/ec/28a57266b753799a87b8bc79e7887ac6fd981b8c6d2978a0b7e7b6bd708c/pandas-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:66266d3442a5e8b3c90274c2b8b230bee42dd1c286bc822cc2f9f2c7e12b883e", size = 9094790, upload-time = "2026-07-22T22:18:47.468Z" }, + { url = "https://files.pythonhosted.org/packages/51/2f/cf6aae281264f4463f0875bcbb15fd2bb6d291cc535187dad1732475e4a9/pandas-3.0.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2f264fc46911cc8131a7322a16199bbf8e353d27c10bb211f5bd0c814324dc36", size = 10390034, upload-time = "2026-07-22T22:18:49.818Z" }, + { url = "https://files.pythonhosted.org/packages/06/ec/5189518c7a7659c4bdcc6b1eb32c46c6f3c86b0661ffd84143d1112c7732/pandas-3.0.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:53730687fcd161883b24e10411c06d6a4c0f2275d2faf3bb2bc25deb4ba8007c", size = 9980065, upload-time = "2026-07-22T22:18:52.249Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f1/598503ce8d7e3c35601e0747ba288c7864baae66380725bc12f13f884dfe/pandas-3.0.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:960d3ebcf249f75206899fcd2c6de53f736b7265759ced0d3e559df0b8b709b0", size = 10545532, upload-time = "2026-07-22T22:18:54.813Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/ceae2adf7034e07e9910299fe412e1819c4f0dd520700a888bcb03625448/pandas-3.0.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e94c2c5ca43bd3ca32bf64d32308887b65e5f9bfd8023ea52755107a999f93b", size = 10963120, upload-time = "2026-07-22T22:18:57.42Z" }, + { url = "https://files.pythonhosted.org/packages/66/25/86e0f4451874eb79e688deeebe3c451fec4557f8952005818d800ee8ac7e/pandas-3.0.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e819dd5f62966b481a8cb649d3299ebd886a1ea91ed5a99bf7ce77c98d18ab94", size = 11563178, upload-time = "2026-07-22T22:18:59.729Z" }, + { url = "https://files.pythonhosted.org/packages/f3/45/8643daa3b4147e433adfcccefdd0380d3aad79d86b15d8999730fe1944d5/pandas-3.0.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3c5ed2e7c06e91d340dfd091d7934f9bc82e4a36b95f647f090b9d1c9ac649da", size = 12028708, upload-time = "2026-07-22T22:19:02.164Z" }, + { url = "https://files.pythonhosted.org/packages/96/58/ad979ae617615576e8aafd569c9d4b62f1191d896e38f51d66ba06f3b89a/pandas-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:cd8f7c6dc98527058ee6264219343f5392240a6f1bfa654fc5d79023020d0c92", size = 9951806, upload-time = "2026-07-22T22:19:04.596Z" }, + { url = "https://files.pythonhosted.org/packages/69/32/7ac03886b304049a9d2625ee88f59af760d8a93bd30ed9239bce7b9869a8/pandas-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:5183427f5a8156d480f30333777bc978be93650a49a7c01db26adffe95b31e85", size = 9238297, upload-time = "2026-07-22T22:19:06.836Z" }, + { url = "https://files.pythonhosted.org/packages/be/ed/1d1f2ee5547d5167face2376d11c8b2a4c7bfff5a416ee7a9046891fab1e/pandas-3.0.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:303da736987d481074ca720ada325f8bd80c64ebc2d45ed79b29df3aaa4a26ca", size = 10849690, upload-time = "2026-07-22T22:19:09.391Z" }, + { url = "https://files.pythonhosted.org/packages/57/55/17e17152e98fbb0c4b1e562bc65387a2f20a80db0f4a86bf8d3a0e4248d4/pandas-3.0.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3b2801bbb049d0136f6c213eae02b5fca969384fc2064dd728d8620552aa49da", size = 10509945, upload-time = "2026-07-22T22:19:11.773Z" }, + { url = "https://files.pythonhosted.org/packages/88/90/817d44dbf83facf9556f33576d9af0a241981e7bb5c00606c0bcb5df8dda/pandas-3.0.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cce3a9d11d2b1f82c69a27ec1f4948a170e2c403c4bbfa8cca62e3fdebe2ef3a", size = 10392197, upload-time = "2026-07-22T22:19:14.024Z" }, + { url = "https://files.pythonhosted.org/packages/f1/da/889f00c0a6f5aa1545add70abbf01502dff87ab577adb855bd631c54d2f2/pandas-3.0.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef01af4d8dc6cd2c8d6c7736f149574ef93fe043811eeb5e445f2647154b5040", size = 10862726, upload-time = "2026-07-22T22:19:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/f1e934fb3c98fce859c6147c6785816c7b5b9ab7821115c5d8c4de9842b9/pandas-3.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e2759e890db96dfcffdbd9b86c3c2cb6afaf58def482820317e06163ec1066cd", size = 11414864, upload-time = "2026-07-22T22:19:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/fe/be/d448af7d657d82e1888dd8551f79c6d6fb161080b5b9752d84d910ec2319/pandas-3.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b58b1b39d46a5862e3fb18f50d1a201398619d16a0f9f73f57eea5583cf0e63c", size = 11925105, upload-time = "2026-07-22T22:19:21.515Z" }, + { url = "https://files.pythonhosted.org/packages/29/c1/ccb4238212c8c4f496c584f3044d94e0c030ed8e1d68999db46c91c2242f/pandas-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:1c10461f6eeb35d8f05b6184c65c8b9991663b66c46b1d559b682cb34ae7c6ea", size = 10387612, upload-time = "2026-07-22T22:19:24.257Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cf/6a51b2c38980e04c279fd2fa908a1b0982064e860444acfca4ec2e2c8359/pandas-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:3c5015fd1730fbf883647e88068176c839c102cea883ba1769a6f4593bfc1f8c", size = 9509776, upload-time = "2026-07-22T22:19:26.694Z" }, ] [[package]] @@ -3560,7 +3797,7 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess" }, + { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ @@ -3569,93 +3806,95 @@ wheels = [ [[package]] name = "pillow" -version = "12.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5", size = 5308279, upload-time = "2026-04-01T14:43:13.246Z" }, - { url = "https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421", size = 4695490, upload-time = "2026-04-01T14:43:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/de/af/4e8e6869cbed569d43c416fad3dc4ecb944cb5d9492defaed89ddd6fe871/pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987", size = 6284462, upload-time = "2026-04-01T14:43:18.268Z" }, - { url = "https://files.pythonhosted.org/packages/e9/9e/c05e19657fd57841e476be1ab46c4d501bffbadbafdc31a6d665f8b737b6/pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76", size = 8094744, upload-time = "2026-04-01T14:43:20.716Z" }, - { url = "https://files.pythonhosted.org/packages/2b/54/1789c455ed10176066b6e7e6da1b01e50e36f94ba584dc68d9eebfe9156d/pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005", size = 6398371, upload-time = "2026-04-01T14:43:23.443Z" }, - { url = "https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780", size = 7087215, upload-time = "2026-04-01T14:43:26.758Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f8/2f6825e441d5b1959d2ca5adec984210f1ec086435b0ed5f52c19b3b8a6e/pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5", size = 6509783, upload-time = "2026-04-01T14:43:29.56Z" }, - { url = "https://files.pythonhosted.org/packages/67/f9/029a27095ad20f854f9dba026b3ea6428548316e057e6fc3545409e86651/pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5", size = 7212112, upload-time = "2026-04-01T14:43:32.091Z" }, - { url = "https://files.pythonhosted.org/packages/be/42/025cfe05d1be22dbfdb4f264fe9de1ccda83f66e4fc3aac94748e784af04/pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940", size = 6378489, upload-time = "2026-04-01T14:43:34.601Z" }, - { url = "https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5", size = 7084129, upload-time = "2026-04-01T14:43:37.213Z" }, - { url = "https://files.pythonhosted.org/packages/10/e1/542a474affab20fd4a0f1836cb234e8493519da6b76899e30bcc5d990b8b/pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414", size = 2463612, upload-time = "2026-04-01T14:43:39.421Z" }, - { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837, upload-time = "2026-04-01T14:43:41.506Z" }, - { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528, upload-time = "2026-04-01T14:43:43.773Z" }, - { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401, upload-time = "2026-04-01T14:43:45.87Z" }, - { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094, upload-time = "2026-04-01T14:43:48.438Z" }, - { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402, upload-time = "2026-04-01T14:43:51.292Z" }, - { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005, upload-time = "2026-04-01T14:43:54.242Z" }, - { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669, upload-time = "2026-04-01T14:43:57.335Z" }, - { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194, upload-time = "2026-04-01T14:43:59.864Z" }, - { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423, upload-time = "2026-04-01T14:44:02.74Z" }, - { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667, upload-time = "2026-04-01T14:44:05.381Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580, upload-time = "2026-04-01T14:44:08.39Z" }, - { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896, upload-time = "2026-04-01T14:44:11.197Z" }, - { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266, upload-time = "2026-04-01T14:44:13.947Z" }, - { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508, upload-time = "2026-04-01T14:44:16.312Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927, upload-time = "2026-04-01T14:44:18.89Z" }, - { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624, upload-time = "2026-04-01T14:44:21.115Z" }, - { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252, upload-time = "2026-04-01T14:44:23.663Z" }, - { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550, upload-time = "2026-04-01T14:44:26.772Z" }, - { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114, upload-time = "2026-04-01T14:44:29.615Z" }, - { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667, upload-time = "2026-04-01T14:44:32.773Z" }, - { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966, upload-time = "2026-04-01T14:44:35.252Z" }, - { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241, upload-time = "2026-04-01T14:44:37.875Z" }, - { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, - { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, - { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, - { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, - { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, - { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, - { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, - { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, - { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, - { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, - { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, - { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, - { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, - { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, - { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, - { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, - { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, - { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, - { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, - { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, - { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, - { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, - { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, - { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, - { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, + { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, + { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, + { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, + { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, + { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, + { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, + { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, + { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, + { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, + { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, + { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, ] [[package]] name = "platformdirs" -version = "4.9.6" +version = "4.11.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" } +sdist = { url = "https://files.pythonhosted.org/packages/50/bb/ebc6636e1ae41314f796ebb7215fd28febb45f9aac72f2b04cb74b5071dc/platformdirs-4.11.4.tar.gz", hash = "sha256:f3373be828247211d0febabea97e238c3dfde8a60b3c90c32756fb52cb21556d", size = 34079, upload-time = "2026-08-24T14:53:49.676Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" }, + { url = "https://files.pythonhosted.org/packages/28/be/0ff05fcd2938fb58ad9219bd54135968342d214737e012d62d43f06a2dd6/platformdirs-4.11.4-py3-none-any.whl", hash = "sha256:e34ff91a24bcddc6d939b878bdf3f5c437c9c46fe9e212b1bf455fdf1ee57586", size = 23741, upload-time = "2026-08-24T14:53:48.406Z" }, ] [[package]] name = "plotly" -version = "6.7.0" +version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "narwhals" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/7f/0f100df1172aadf88a929a9dbb902656b0880ba4b960fe5224867159d8f4/plotly-6.7.0.tar.gz", hash = "sha256:45eea0ff27e2a23ccd62776f77eb43aa1ca03df4192b76036e380bb479b892c6", size = 6911286, upload-time = "2026-04-09T20:36:45.738Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/9e/8894e8eae20a5b2a44aa568b1d2d80291e8eea6ce7bc75cdc7a152aef0ac/plotly-7.0.0.tar.gz", hash = "sha256:08b21f1244a97e7a1a699833c4bb2678475aa108b3f1989886ed0b038ebfd849", size = 6218668, upload-time = "2026-08-25T17:47:29.088Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl", hash = "sha256:ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0", size = 9898444, upload-time = "2026-04-09T20:36:39.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/2f/6f492108d9955bac97979d9949c1b35eab30fc630b1f22bbdd2c7cacbab4/plotly-7.0.0-py3-none-any.whl", hash = "sha256:78cbf7bd06d1b05bb3b8ec1b709864695229b55151b6f7530fbf55517ead6fdd", size = 9052859, upload-time = "2026-08-25T17:47:24.689Z" }, ] [[package]] @@ -3683,23 +3922,23 @@ wheels = [ [[package]] name = "prometheus-client" -version = "0.25.0" +version = "0.26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/fb/d9aa83ffe43ce1f19e557c0971d04b90561b0cfd50762aafb01968285553/prometheus_client-0.25.0.tar.gz", hash = "sha256:5e373b75c31afb3c86f1a52fa1ad470c9aace18082d39ec0d2f918d11cc9ba28", size = 86035, upload-time = "2026-04-09T19:53:42.359Z" } +sdist = { url = "https://files.pythonhosted.org/packages/52/73/f1334c29c2af4cd9dba6c7817e61b611bd0215e2eb5565c6064a4de18802/prometheus_client-0.26.0.tar.gz", hash = "sha256:04a91bcf94e2cf74a44a1a874d651a2e853ed354b6e822f3b7487751465d5c2b", size = 92910, upload-time = "2026-07-24T19:36:41.893Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/9b/d4b1e644385499c8346fa9b622a3f030dce14cd6ef8a1871c221a17a67e7/prometheus_client-0.25.0-py3-none-any.whl", hash = "sha256:d5aec89e349a6ec230805d0df882f3807f74fd6c1a2fa86864e3c2279059fed1", size = 64154, upload-time = "2026-04-09T19:53:41.324Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a3/b69efbf4143b5b9859b977770bbbabcc2796b702fa69dc40271e45cd5a56/prometheus_client-0.26.0-py3-none-any.whl", hash = "sha256:fa93d06737aa02bacd05794768508bb97d2fbee28cb3bca04eaae92f0ca953d6", size = 64494, upload-time = "2026-07-24T19:36:40.854Z" }, ] [[package]] name = "prompt-toolkit" -version = "3.0.52" +version = "3.0.53" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, ] [[package]] @@ -4017,16 +4256,16 @@ wheels = [ [[package]] name = "pydantic-settings" -version = "2.14.1" +version = "2.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "python-dotenv" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/60/1d1e59c9c90d54591469ada7d268251f71c24bdb765f1a8a832cee8c6653/pydantic_settings-2.14.1.tar.gz", hash = "sha256:e874d3bec7e787b0c9958277956ed9b4dd5de6a80e162188fdaff7c5e26fd5fa", size = 235551, upload-time = "2026-05-08T13:40:06.542Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/ca/31c57507b13119d7d3cfa1576dad2911a4861e3be07b579395f4e9d393f9/pydantic_settings-2.15.0.tar.gz", hash = "sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117", size = 261253, upload-time = "2026-08-07T09:24:57.419Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/8d/f1af3832f5e6eb13ba94ee809e72b8ecb5eef226d27ee0bef7d963d943c7/pydantic_settings-2.14.1-py3-none-any.whl", hash = "sha256:6e3c7edfd8277687cdc598f56e5cff0e9bfff0910a3749deaa8d4401c3a2b9de", size = 60964, upload-time = "2026-05-08T13:40:04.958Z" }, + { url = "https://files.pythonhosted.org/packages/30/a4/2bffa9f8e804325a09867f0e9d30795c80ea9f8d62560bd1b6ad6220eb2f/pydantic_settings-2.15.0-py3-none-any.whl", hash = "sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42", size = 69413, upload-time = "2026-08-07T09:24:55.839Z" }, ] [[package]] @@ -4061,11 +4300,11 @@ wheels = [ [[package]] name = "pygments" -version = "2.20.0" +version = "2.21.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, ] [[package]] @@ -4128,7 +4367,7 @@ wheels = [ [[package]] name = "pynwb" -version = "3.1.3" +version = "4.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "h5py" }, @@ -4138,9 +4377,9 @@ dependencies = [ { name = "platformdirs" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6d/83/0c37d99d2a262ca69be2df5bf9153b7bf2d79391d668e7ec232e89129ab4/pynwb-3.1.3.tar.gz", hash = "sha256:ee75219aa241b72b10d1c6830ae6bafa7e3e44f0429715c2ef0920a19654e185", size = 35784649, upload-time = "2025-12-09T23:40:50.358Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/90/bd86cdd9628f415332e5f521f700ca34b602164a3a5ef80b640cdf3e2d23/pynwb-4.1.0.tar.gz", hash = "sha256:2d2672ba467826e61b14d9518866e75b6d2925ddc23c30672309bf7644ea0ed0", size = 36407506, upload-time = "2026-07-24T23:28:12.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/47/b5b7d5285e823a16fe7b007bce3cf79ddcd3b6d7c8b3ca15cbe8c17c0a17/pynwb-3.1.3-py3-none-any.whl", hash = "sha256:43b5d753c6c2c8f6b4fa6c784ac85675556b64b42c727d9eab27670ef529929a", size = 1396673, upload-time = "2025-12-09T23:40:48.454Z" }, + { url = "https://files.pythonhosted.org/packages/77/7b/838eb069a734c7c0be53ffe899486964e3c9d9c8321905684d2a9f471699/pynwb-4.1.0-py3-none-any.whl", hash = "sha256:b0de4dd385ad9ebbbfa1825020854fc37837cab48578f137c2be100728ab2084", size = 1413186, upload-time = "2026-07-24T23:28:10.1Z" }, ] [[package]] @@ -4212,29 +4451,29 @@ wheels = [ [[package]] name = "python-dotenv" -version = "1.2.2" +version = "1.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/53/ed9d74092561d4b01a2ef1349d52cdbc135e526c245f366b089cfca6de49/python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35", size = 58945, upload-time = "2026-08-16T16:54:54.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, + { url = "https://files.pythonhosted.org/packages/0d/17/c5c6b53ddc18f297992099b3d9ec16c855c0ccc83263a21fe4d1c625ec6c/python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9", size = 22780, upload-time = "2026-08-16T16:54:52.473Z" }, ] [[package]] name = "python-json-logger" -version = "4.1.0" +version = "4.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/ff/3cc9165fd44106973cd7ac9facb674a65ed853494592541d339bdc9a30eb/python_json_logger-4.1.0.tar.gz", hash = "sha256:b396b9e3ed782b09ff9d6e4f1683d46c83ad0d35d2e407c09a9ebbf038f88195", size = 17573, upload-time = "2026-03-29T04:39:56.805Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/25/5473e46b179f8e8b4ad3aeeb36773d1701b7770eaf5e5bc2025c7303b598/python_json_logger-4.2.0.tar.gz", hash = "sha256:e371ebe22ec01e289850102091a2b1f6fc9e655c7f1f5f29073936756c290afa", size = 18211, upload-time = "2026-08-15T11:36:38.232Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/be/0631a861af4d1c875f096c07d34e9a63639560a717130e7a87cbc82b7e3f/python_json_logger-4.1.0-py3-none-any.whl", hash = "sha256:132994765cf75bf44554be9aa49b06ef2345d23661a96720262716438141b6b2", size = 15021, upload-time = "2026-03-29T04:39:55.266Z" }, + { url = "https://files.pythonhosted.org/packages/dc/55/6467fde553886cb293e41538f3a8b4e4fd4688c6df242cf982162d8367fb/python_json_logger-4.2.0-py3-none-any.whl", hash = "sha256:158a52126fcd6869e09574d2b66272666f3dc8f468c62637ef9a1fa883719cb9", size = 14988, upload-time = "2026-08-15T11:36:36.821Z" }, ] [[package]] name = "pytz" -version = "2026.2" +version = "2026.3.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, ] [[package]] @@ -4248,20 +4487,20 @@ wheels = [ [[package]] name = "pywinpty" -version = "3.0.3" +version = "3.0.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309, upload-time = "2026-02-04T21:51:09.524Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/ef/2d27f30c59a67be7025b2d7858c8c2d282b74d66544b2384730b82de74fd/pywinpty-3.0.5.tar.gz", hash = "sha256:61db0db063de9865adbea66db294628f8577f608d9764a4c7d3384eeacc4e81b", size = 16223484, upload-time = "2026-06-11T00:11:58.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0", size = 2113098, upload-time = "2026-02-04T21:54:37.711Z" }, - { url = "https://files.pythonhosted.org/packages/b9/53/7278223c493ccfe4883239cf06c823c56460a8010e0fc778eef67858dc14/pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9", size = 234901, upload-time = "2026-02-04T21:53:31.35Z" }, - { url = "https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab", size = 2112686, upload-time = "2026-02-04T21:52:03.035Z" }, - { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591, upload-time = "2026-02-04T21:52:29.821Z" }, - { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360, upload-time = "2026-02-04T21:55:33.397Z" }, - { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107, upload-time = "2026-02-04T21:51:45.455Z" }, - { url = "https://files.pythonhosted.org/packages/28/88/2ff917caff61e55f38bcdb27de06ee30597881b2cae44fbba7627be015c4/pywinpty-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:d4b6b7b0fe0cdcd02e956bd57cfe9f4e5a06514eecf3b5ae174da4f951b58be9", size = 2113282, upload-time = "2026-02-04T21:52:08.188Z" }, - { url = "https://files.pythonhosted.org/packages/63/32/40a775343ace542cc43ece3f1d1fce454021521ecac41c4c4573081c2336/pywinpty-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:34789d685fc0d547ce0c8a65e5a70e56f77d732fa6e03c8f74fefb8cbb252019", size = 234207, upload-time = "2026-02-04T21:51:58.687Z" }, - { url = "https://files.pythonhosted.org/packages/8d/54/5d5e52f4cb75028104ca6faf36c10f9692389b1986d34471663b4ebebd6d/pywinpty-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0c37e224a47a971d1a6e08649a1714dac4f63c11920780977829ed5c8cadead1", size = 2112910, upload-time = "2026-02-04T21:52:30.976Z" }, - { url = "https://files.pythonhosted.org/packages/0a/44/dcd184824e21d4620b06c7db9fbb15c3ad0a0f1fa2e6de79969fb82647ec/pywinpty-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c4e9c3dff7d86ba81937438d5819f19f385a39d8f592d4e8af67148ceb4f6ab5", size = 233425, upload-time = "2026-02-04T21:51:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/45/34/942cc95ca4e26489875aa8a95192766247a687379ec29543eebe73ec945f/pywinpty-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:d62946adf14b15b54c0b8d785f93fe18b04da23f4ad59e2e8c4612646e9abd23", size = 2090915, upload-time = "2026-06-10T23:43:14.98Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/5b9053004844139ea8bd86209c57ade12b134b2782f383a095784c8531ec/pywinpty-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:e9391c05fbfa7a992a97e831fc6849887b4014a614192e3d984a7ca59592b376", size = 815934, upload-time = "2026-06-10T23:41:42.384Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f4/2a464b9893cceb3b3f416356e94fdc3e1bca9476993927e4e6d99fe95382/pywinpty-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:48db1b0ad9d0a1b81dcaaa7163a99a7808deaceb0c1b2344716dc1fc090c3c4c", size = 2090471, upload-time = "2026-06-10T23:42:11.071Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2c/a138491a0afbdb50eb79395577bd326d4b0fbde7209417d1a8087ff2493a/pywinpty-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:2c6008fb2d3774b48693b2fcb7f2cc317ade9dc581289a964ffeeaf81307c9b5", size = 815518, upload-time = "2026-06-10T23:42:02.363Z" }, + { url = "https://files.pythonhosted.org/packages/6f/15/54400049a380582acd1282665c70fcf11e0bd3713679aca78e24c3aae738/pywinpty-3.0.5-cp313-cp313t-win_amd64.whl", hash = "sha256:22ce1b780d89821cc52daf6eac0708af22d93d000ce9c7c07e37489db8594598", size = 2089920, upload-time = "2026-06-10T23:44:13.395Z" }, + { url = "https://files.pythonhosted.org/packages/94/0c/6f24f3c0799f502259b24bdf841a99ad2b0d59df5c2525b4e2a286d14be2/pywinpty-3.0.5-cp313-cp313t-win_arm64.whl", hash = "sha256:9c2919a81bc5cfb09b86fc5a002112b2de95ca4304a07413cbeeb746a1307a5c", size = 814520, upload-time = "2026-06-10T23:43:28.588Z" }, + { url = "https://files.pythonhosted.org/packages/e9/23/f3cd1b1e5fc56517f54452c49f92049e7dd9ffc8a63de22a495581f50d04/pywinpty-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:03bb3c16d691d9242267201830bcd0e64a9b663170e9042bc84b210da9de15ac", size = 2090663, upload-time = "2026-06-10T23:43:59.845Z" }, + { url = "https://files.pythonhosted.org/packages/9d/dd/96d6cbfc6d9ddab5c1c2f92c26545ae8997446a2ba7ee2024cd43c81f49b/pywinpty-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:89c5c6ef08997a3b4b277b214a35fe15cab4dd6d119f0140aa71df5b1168fdbc", size = 815700, upload-time = "2026-06-10T23:40:50.001Z" }, + { url = "https://files.pythonhosted.org/packages/30/36/d98087bce0acaa4cce7f196103cfa7be3f63ce65f52473bb3e38784ae5d9/pywinpty-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7b566165e0c5fdd6abe167a5ac8b954be6a843eb55a85946576d6bc1dea03d6d", size = 2090093, upload-time = "2026-06-10T23:40:58.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/fd/fe2b0db922ba052ce3976a08f3fc05d0c05047c8b4ebb6102e832b8ef563/pywinpty-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:24366280a8aa677323da87bec729cb3ea3b35367386cece0978bdc6e4695c690", size = 814517, upload-time = "2026-06-10T23:42:34.946Z" }, ] [[package]] @@ -4312,45 +4551,50 @@ wheels = [ [[package]] name = "pyzmq" -version = "27.1.0" +version = "27.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/e7/038aab64a946d535901103da16b953c8c9cc9c961dadcbf3609ed6428d23/pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc", size = 1306279, upload-time = "2025-09-08T23:08:03.807Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5e/c3c49fdd0f535ef45eefcc16934648e9e59dace4a37ee88fc53f6cd8e641/pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113", size = 895645, upload-time = "2025-09-08T23:08:05.301Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e5/b0b2504cb4e903a74dcf1ebae157f9e20ebb6ea76095f6cfffea28c42ecd/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233", size = 652574, upload-time = "2025-09-08T23:08:06.828Z" }, - { url = "https://files.pythonhosted.org/packages/f8/9b/c108cdb55560eaf253f0cbdb61b29971e9fb34d9c3499b0e96e4e60ed8a5/pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31", size = 840995, upload-time = "2025-09-08T23:08:08.396Z" }, - { url = "https://files.pythonhosted.org/packages/c2/bb/b79798ca177b9eb0825b4c9998c6af8cd2a7f15a6a1a4272c1d1a21d382f/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28", size = 1642070, upload-time = "2025-09-08T23:08:09.989Z" }, - { url = "https://files.pythonhosted.org/packages/9c/80/2df2e7977c4ede24c79ae39dcef3899bfc5f34d1ca7a5b24f182c9b7a9ca/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856", size = 2021121, upload-time = "2025-09-08T23:08:11.907Z" }, - { url = "https://files.pythonhosted.org/packages/46/bd/2d45ad24f5f5ae7e8d01525eb76786fa7557136555cac7d929880519e33a/pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496", size = 1878550, upload-time = "2025-09-08T23:08:13.513Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, - { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, - { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e7/8d/5b3d5631c2f4b4b8862f64cd0c9eb777b5710eeb5125b4be8dd0a200a4c0/pyzmq-27.2.0.tar.gz", hash = "sha256:54d4259d1bfae24ecdb5ca79f7acc2eac6c286a02d6a0ae617797cb45f0726d3", size = 292316, upload-time = "2026-08-20T19:08:21.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/8a/153532fa53db30e116118164f3af269a1f3966b3e2ba32c89b12fe864bd8/pyzmq-27.2.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:591c8de5851c5ea372194469fe97587b97c3b641e9a70f31bb3474acbfde0241", size = 1431074, upload-time = "2026-08-20T19:06:40.601Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ef/c08b91248bb90a9efa81fa00ba81b69c157c74d0c5efbb2c319d91babb62/pyzmq-27.2.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:00e73942ef12cecbc7951c4a9104bb8ffaed742abb13af2da6833d90dd368cef", size = 973915, upload-time = "2026-08-20T19:06:42.037Z" }, + { url = "https://files.pythonhosted.org/packages/b4/78/a3a3a86c2b00fadb92ece1ca4f8f028d62b2ce9ac3526097239ab2d6fba9/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f8079d0521fe94bbb401fe9407578b28f3701627c8be2c9f7e0c5b77dcb0109", size = 697722, upload-time = "2026-08-20T19:06:43.325Z" }, + { url = "https://files.pythonhosted.org/packages/62/2c/d5828306f795e8d34676d266823b74e2101e0ad3760d12083de3e02abbb2/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dea74fd65f1fc5f7fe167916a473ebe6ed6174e5e5d9de11ea6583661be6cf43", size = 872258, upload-time = "2026-08-20T19:06:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/51253b78fd8739293e283407eeecb14215c02c71b6519af21f6eed8e69cd/pyzmq-27.2.0-cp312-abi3-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dcc99ca132b667a4ed750afd42db4ea73288f18425a9b2e3c0af095665c491f5", size = 739591, upload-time = "2026-08-20T19:06:46.214Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3e/142c85b67a4c9678629b0cf6d5125b29663d75be69bfaa57a3cac344d780/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b8d5f66e4a8246cf77f7b8f7902af64f00553368fa0373c89d99b78f0ad79394", size = 1689031, upload-time = "2026-08-20T19:06:47.612Z" }, + { url = "https://files.pythonhosted.org/packages/0e/ee/0776fb0f98ed1eb74d77240087fef0ab045b6ad15cb09555c6c5134c98ad/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:d1526b42a2e725b84ed226f37becedc250c6347594e5ed304e4e9aff68c9aec3", size = 2059547, upload-time = "2026-08-20T19:06:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0e/ec77f691a4aebe29ab6329f996fb0e0270c876a3016086e3ca6ef733bcae/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f707bcf2c1d007d14d70531d4dd7b41060881c73efa845580bf6faaf9ea24d42", size = 1910457, upload-time = "2026-08-20T19:06:50.783Z" }, + { url = "https://files.pythonhosted.org/packages/30/97/1f5530ff4fc271b4597048371d5af972c2baab51be132ba15874e0327a6a/pyzmq-27.2.0-cp312-abi3-win32.whl", hash = "sha256:fdaaa4ea3242f6ad298eb5177eb042aea5c73c30e76d20caee7b15af20d24ec2", size = 563450, upload-time = "2026-08-20T19:06:52.307Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/b83f7780dad22e0878e4c7bd9158ebd24ed12bc3d5e3a471cd0576f77ded/pyzmq-27.2.0-cp312-abi3-win_amd64.whl", hash = "sha256:2c218c6ab8bc447ba62054b581fd30209689d199c6ecb253f79615ca74a38e12", size = 628633, upload-time = "2026-08-20T19:06:53.809Z" }, + { url = "https://files.pythonhosted.org/packages/52/aa/3918b5ac7f9987bd9c421b065074fd7409ded88f856f2c704a24341877ec/pyzmq-27.2.0-cp312-abi3-win_arm64.whl", hash = "sha256:348d6fd3e4b81ae4580622ea8c2ea60224e84b2ac1b3be4482e6edc7de06e7a3", size = 556006, upload-time = "2026-08-20T19:06:55.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/5e/d0541596b48c5a19f85dcbea83d6673d8e91681cdf853eb194c31fc9766e/pyzmq-27.2.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:c551b9e2f86dc625fcb1a032c0d68042678caf96a8dd7c28796766b673bd5b52", size = 1127193, upload-time = "2026-08-20T19:06:56.545Z" }, + { url = "https://files.pythonhosted.org/packages/50/9f/8c7411bb283982d46e6d56dca6a095678c87eb0398daead12776d9881ac2/pyzmq-27.2.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:288cc790da0e3064a14a38ddc56ba169dada8c8af4cb86518db2bcbd380eedbb", size = 1166833, upload-time = "2026-08-20T19:06:58.011Z" }, + { url = "https://files.pythonhosted.org/packages/f9/84/a849161ff88b2de9b991cc8ab332218824741122fdc4fdf222a5b822ac8c/pyzmq-27.2.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:3d45189c0c3c99f817b7fefff0d32eeef684cf33e1e3c0fc4281515357c54702", size = 1134452, upload-time = "2026-08-20T19:06:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/3c/34/ff4aaff0cfba2a4d7ad1a16ffedc52c6deb89fcf673d455085446b23f215/pyzmq-27.2.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:d61910b52be5b2cd8b248dbcbe3a1b0275556a7d99fb613fc43323b546e273b8", size = 1167520, upload-time = "2026-08-20T19:07:01.283Z" }, + { url = "https://files.pythonhosted.org/packages/b6/07/42111e9dc1041d78b4443d6eb1b82b027f1a58178dc8a38385effbc72ad5/pyzmq-27.2.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3ab6eb88590e510ab16715c32dbba12000da9bee989fdadd9ee19a234c492eb7", size = 1466289, upload-time = "2026-08-20T19:07:02.738Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b4/def7a478458da78665840564161772e7e938600c32a89f28e8b221b54d2d/pyzmq-27.2.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1ecbdd131b9669f62d3a45afee5527c7ae9f141e4301267f21714c90bd21725f", size = 975868, upload-time = "2026-08-20T19:07:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/38/d5/e3e85f7fea37153097aaff49db9e33093909cc2a7b22c1ac4ebe546600fc/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3146385b94a760236c5eceff468a66a296a716ca98a2e0f9217b1518118466b1", size = 706054, upload-time = "2026-08-20T19:07:05.623Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ef/3b7d9449b223183222bf517245e1e53d5f1ab8c10be8b45f6a301b2f994a/pyzmq-27.2.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9846e881620dd62566ca76a53e384c3f37490faf4b9240aebc7498810dfca853", size = 878984, upload-time = "2026-08-20T19:07:07.153Z" }, + { url = "https://files.pythonhosted.org/packages/be/a5/8b49dbd494f6dcfda69dc4cade322a4b02706ef4e3d30cc366d4e369899f/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d9527e3dbaef1edaeeb2446fa7379446814a43ade8adc7c4a5ebe69437815ddd", size = 1697489, upload-time = "2026-08-20T19:07:08.945Z" }, + { url = "https://files.pythonhosted.org/packages/da/5a/4bb8280901130c26ea25f0cbb4a6d39d94250860c6b3dbd912f1cf48fca7/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:56b48fa9d478a3af7254f397697a62f5ad3e1bb677e200b2701f0c290d97e5af", size = 2064236, upload-time = "2026-08-20T19:07:10.384Z" }, + { url = "https://files.pythonhosted.org/packages/de/38/f433af66922554adb2b5f79e897018c8e19a90b9eaeb49c4814f8355ebe4/pyzmq-27.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bf0b6e4ce1bb089751c504c5493d6b0557eabd02dd21b76e9086cf964234b103", size = 1917424, upload-time = "2026-08-20T19:07:11.909Z" }, + { url = "https://files.pythonhosted.org/packages/36/81/ea1c1ae3f801d96ba2c269e056761ebcfe023476e651d3af2a7817962051/pyzmq-27.2.0-cp314-cp314t-win32.whl", hash = "sha256:fba8afcf265c6e9fbe1594cb045d4765c6c9a7d607653a8196067ef23566b843", size = 591103, upload-time = "2026-08-20T19:07:13.451Z" }, + { url = "https://files.pythonhosted.org/packages/8a/04/149a627707e780fa9f2c1ede3590c14fa6b18b5576d15744342622299a50/pyzmq-27.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d1bc1d380a91d954ed5fc9f12915dba014eed0978d2de05ee7ca688bdaac144a", size = 670215, upload-time = "2026-08-20T19:07:15.069Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/f9c3c1536c41ef3dbf765ea04218990e2056e558f98184ecd883767fc501/pyzmq-27.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:c7cfb75caa83f5153c687e9d2107f64b5ef0ef0d6edd260d3ff920baaaa69101", size = 582252, upload-time = "2026-08-20T19:07:16.582Z" }, + { url = "https://files.pythonhosted.org/packages/fa/00/78fe097a304a408275747ce43f20428789130b059c5649956277c20f30cf/pyzmq-27.2.0-cp315-cp315-android_24_arm64_v8a.whl", hash = "sha256:c5129a8fe43ecc49b99eb75616603d483a3c2fcaef504988fafe8ea392aea98b", size = 1134295, upload-time = "2026-08-20T19:07:17.94Z" }, + { url = "https://files.pythonhosted.org/packages/f2/83/1c36270658d2ee56e23a3f9ef5fbcb94cbd2f9fe966a6641f2f38e697162/pyzmq-27.2.0-cp315-cp315-android_24_x86_64.whl", hash = "sha256:baa2ce3485145653194d6c8c5beedd1e9f0bf46a0919c9fa2fe2204fc35b74d9", size = 1167492, upload-time = "2026-08-20T19:07:19.476Z" }, + { url = "https://files.pythonhosted.org/packages/58/b2/f0ae223438d7faa991f6feefdc823815f11cc604f898738376b59fd96515/pyzmq-27.2.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e1ed46048d1920cabc96d952a0d5cfe4127ad8db572c335aae4e3c57b9278d7f", size = 1465992, upload-time = "2026-08-20T19:07:20.941Z" }, + { url = "https://files.pythonhosted.org/packages/59/46/fb56f3f37a6a0937b0e1d2885e808b5eedc171320bac85573cfae78fa9bc/pyzmq-27.2.0-cp315-cp315t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e0fa0bc6b1a184aee59b32efcd1b7f0e6d5b8f9387799e4c16a4cb66a86747d6", size = 976118, upload-time = "2026-08-20T19:07:22.577Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/a2c9bfd7c4d34eea1278493cd041bc000d41acb4463c89ceaad29dc813b6/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4bd6743e8bf854c3bfce892dd6578a514aabf128e37a4b2eafcf01856f7e44", size = 705968, upload-time = "2026-08-20T19:07:24.019Z" }, + { url = "https://files.pythonhosted.org/packages/d6/12/b906b269116b6591dc15c0acc5d04c043957c8a531d336999731f4b1d899/pyzmq-27.2.0-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95369ed6626afcfe2ac89832fb1b917c077fbeb905fbbe5d918349ce0222b89b", size = 879011, upload-time = "2026-08-20T19:07:25.428Z" }, + { url = "https://files.pythonhosted.org/packages/12/13/f96359534bfb77651c15f1fbfc4bfdd7ec3489d23f434706d39598dd0dcd/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40124779c3a56ad5d91902df1ff89159cb414b6c1a0ee697abcc66cf5e6db62d", size = 1697496, upload-time = "2026-08-20T19:07:26.821Z" }, + { url = "https://files.pythonhosted.org/packages/21/b4/2c007ae5f2fe5eca86cbfbc874ed86b5135f2f7812615dfd78606d3c93f6/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:ec8a318dfc27c7d946651b3d9e8025d5734f30c168a822195601827207bac09b", size = 2064347, upload-time = "2026-08-20T19:07:28.315Z" }, + { url = "https://files.pythonhosted.org/packages/9b/88/767af3a6630c15215f3a66700ec79598a375edd1fdc9d75a3ad522178c01/pyzmq-27.2.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:88c0fac061bac269076edeb3a209acefc96cd6167c239daf1c2b404ac48d7012", size = 1917360, upload-time = "2026-08-20T19:07:29.693Z" }, + { url = "https://files.pythonhosted.org/packages/35/c1/80dd2d20d6e57bc68e1dce1e84bf3e76c9577c1bf728199985c8b4ea0fd1/pyzmq-27.2.0-cp315-cp315t-win32.whl", hash = "sha256:ac126d48cf18aa955daabef43bf0009ff76ad4deee437d09ecf15388214b5beb", size = 591073, upload-time = "2026-08-20T19:07:31.341Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b5/33b781666f3f52ae834bc9c8e38f4f0483a826c5a91cccc993292007bf10/pyzmq-27.2.0-cp315-cp315t-win_amd64.whl", hash = "sha256:edce90a1e588ec63adbf612cc0ad582de4169cd216c7ae53c15f42a2ee902f35", size = 670701, upload-time = "2026-08-20T19:07:32.895Z" }, + { url = "https://files.pythonhosted.org/packages/6e/97/bc4f0edefb992df4fdebcf9f0cc40f631cd4ed277e1ed59ef2cd99a5c8c5/pyzmq-27.2.0-cp315-cp315t-win_arm64.whl", hash = "sha256:a843094b4d3d633bc3623e47a2ff50742d6af02bc1f7606aa2e67e971e21878d", size = 581985, upload-time = "2026-08-20T19:07:34.19Z" }, ] [[package]] @@ -4445,97 +4689,125 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046, upload-time = "2025-07-18T01:05:03.843Z" }, ] +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + [[package]] name = "roifile" -version = "2026.2.10" +version = "2026.7.30" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/cf/49d9a139e292415d669dccd0c283d99a4d027b9edbd533d7f56db8ff85e0/roifile-2026.2.10.tar.gz", hash = "sha256:87d2b685b00a4ca15125187727e634ae5c00b902362de302b592f892259f3751", size = 27311, upload-time = "2026-02-11T19:54:35.027Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/6c/1d13ff9600a4197b3a9738020f5189d43fd5ec78662a279173dfd1e6d88d/roifile-2026.7.30.tar.gz", hash = "sha256:9da29d1ef8088522636e951c93a634a41308f03392c3c96e24f5371491807a41", size = 28539, upload-time = "2026-07-30T01:47:03.395Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/78/3cc84d58e13234861adf91d2897254cd84d3d4a90534d91c960b672e67d1/roifile-2026.2.10-py3-none-any.whl", hash = "sha256:5928a616b58a8ff1c9f89a0590db3616ccbf069c6692f8ecec2a7349f8bbb6ec", size = 21201, upload-time = "2026-02-11T19:54:34.137Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ec/0830d60c31a7b8e1c953568ff873bd9fbc7a751bb83a704cf25cba4a367a/roifile-2026.7.30-py3-none-any.whl", hash = "sha256:109e86078ba056b35fc2b6d2dcfac8942408202223b0ef5c4aa6f8047a94d68b", size = 21611, upload-time = "2026-07-30T01:47:02.355Z" }, ] [[package]] name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, ] [[package]] @@ -4549,27 +4821,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/8a/8bce2894573e9dae6ff4d77fe34ad727d79b9e6238ad288c5638990d90f6/ruff-0.15.14.tar.gz", hash = "sha256:48e866b165be4a9bdbf310f7d3c9a07edef2fe8cd63ffeb4e00bb590506ebf9f", size = 4700910, upload-time = "2026-05-21T14:34:55.177Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/c8/74a92c6ff9fcfb4f1f947126d3ebee8389276e161ecc85de5bda7cda51bd/ruff-0.15.14-py3-none-linux_armv6l.whl", hash = "sha256:8dd2db9416e487c8d4b01fa7056bb02c4d05969d4f8d17a08c229c2f4ff3c108", size = 10739177, upload-time = "2026-05-21T14:34:37.332Z" }, - { url = "https://files.pythonhosted.org/packages/45/91/254a35c20acc38a7223c9d2d594af12e794432464f2cdeb52af1dc4a892d/ruff-0.15.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:be4ff55af755bd71a00ab3dc6bd7ffc467bd76e0df6881e286c2e3d23e8fb43b", size = 11144969, upload-time = "2026-05-21T14:34:43.978Z" }, - { url = "https://files.pythonhosted.org/packages/56/9e/d13e40f83b8d0a94430e6778ce1d94a43b38cf2efe63278bdd2b4c65abbf/ruff-0.15.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:48d5909d7d06276ce7dde6d32bfa4b0d4cb2651145cd8ee4b440722cbc77832f", size = 10478207, upload-time = "2026-05-21T14:34:48.378Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f1/b15a7839fa4f332f8acec78e20564f26bb2d866e3d21710b877fd0263000/ruff-0.15.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca8cbfa94c4f90984a67561978602746d4cd27103568f745fa90eee3f0d4107d", size = 10818459, upload-time = "2026-05-21T14:34:22.318Z" }, - { url = "https://files.pythonhosted.org/packages/45/33/53d651177f84f94b400a0e27f8824eeada3dddc9d5ee8aeb048f4352a520/ruff-0.15.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a6bbc0333f1ab053423bcbf6226477d266ca7cec7738c4c8e3f55647803f3c4", size = 10541800, upload-time = "2026-05-21T14:34:20.209Z" }, - { url = "https://files.pythonhosted.org/packages/b8/a6/868f87e0bf9786ed24b5d0d0ad8676b8a94fd1912f42cddf9cfc7857818a/ruff-0.15.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a24a4f7605d7003a6674d4387651effd939dead3fddd0f36561eb77a9a2e542", size = 11342149, upload-time = "2026-05-21T14:34:46.365Z" }, - { url = "https://files.pythonhosted.org/packages/a7/8b/38cd5c19faffdcc05a408d2b78edccc69492ab9720eadb49ea15ef80d768/ruff-0.15.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:049b5326e53ed80978f2fc041a280603f69dd6b0c95464342a2bb4572d9d9e2f", size = 12212563, upload-time = "2026-05-21T14:34:28.579Z" }, - { url = "https://files.pythonhosted.org/packages/3e/4d/a3c5b874a556d5731e3e657aaf04311bb76f0a5c3ec220ed43051be6b64b/ruff-0.15.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4ed42e6696c8dfa5f06728e6441993901f548eb92d73bc472cb5a38d1395fbf", size = 11493299, upload-time = "2026-05-21T14:34:41.836Z" }, - { url = "https://files.pythonhosted.org/packages/1e/c0/56472c251d09858a53e51efbd485b09e1995d8731668b76d52e5dd6ee0f1/ruff-0.15.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715c543cf450c4888251f91c52f1942a800541d9bddd7ac060aa4e6b77ae7cba", size = 11455931, upload-time = "2026-05-21T14:34:57.276Z" }, - { url = "https://files.pythonhosted.org/packages/2c/4a/e2e7b4d8dbf233d4eace59c75bc3435fa6d8bd3bae82d351d4e4300c0fd1/ruff-0.15.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:72ebab6013ec887d439d8b7593737a0a4ffb06d45d209d4e4bf2e92813082d3f", size = 11400794, upload-time = "2026-05-21T14:34:39.773Z" }, - { url = "https://files.pythonhosted.org/packages/97/c7/83c0539fe34c3e09136204d1e75d6052492364e0b3cb05e9465423f567d7/ruff-0.15.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:49072d36abdbe97a8dd7f480afe9c675699c0c495d4c84076e2c1203c4550581", size = 10804759, upload-time = "2026-05-21T14:34:31.045Z" }, - { url = "https://files.pythonhosted.org/packages/86/a6/18f2bfc095a2ab4a78745644e428205532ce6653a5d0fa8501572891534d/ruff-0.15.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:958522aee105068640c2c2ceae08f413ae44d922f52a1374ac13d6a96032fc93", size = 10539517, upload-time = "2026-05-21T14:34:53.064Z" }, - { url = "https://files.pythonhosted.org/packages/54/3a/5a8b3b69c654d4e4bf1d246ac5b49cbcdac6eaab6905925f8915f31e3b80/ruff-0.15.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f3707da619a143a2e8830e2abab8224478d69ace2d28cb6c20543ae97c36bf61", size = 11065169, upload-time = "2026-05-21T14:34:24.484Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c5/8864e4e7925b836ea354b31d57641ec03830564e281a8b6f061f8c3e0ec1/ruff-0.15.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:bb01d645694e3ec0102105d07ef2d53703970407d59c04e59d3ba0b7a1d53553", size = 11560214, upload-time = "2026-05-21T14:34:50.975Z" }, - { url = "https://files.pythonhosted.org/packages/36/38/012bf76752e1f89ed50b77b99532d90f3a3e287bc7918e1fc0948ac866ac/ruff-0.15.14-py3-none-win32.whl", hash = "sha256:6d0c1ad2a0ab718d39b6d8fd2217981ce4d625cd96a720095f798fb47d8b13e6", size = 10805548, upload-time = "2026-05-21T14:34:33.453Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b7/4ea2c170f10ad760fff2a5250beb18897719dc8b52b53a24cddbb9dd3f19/ruff-0.15.14-py3-none-win_amd64.whl", hash = "sha256:802342981e056db3851a7836e5b070f8f15f67d4a685ae2a6160939d364b2902", size = 11939523, upload-time = "2026-05-21T14:34:18.077Z" }, - { url = "https://files.pythonhosted.org/packages/62/d5/bc97ff895ec35cf3925d4bd60f3b39d822f377a446906ec9bcc87405e59b/ruff-0.15.14-py3-none-win_arm64.whl", hash = "sha256:ff47b90a9ef6a40c9e2f3b479c1fb78531adf055b94c1eba0a7ba04b31951826", size = 11208607, upload-time = "2026-05-21T14:34:26.525Z" }, +version = "0.16.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/8f/d8074b1f25e003164087a8bfe79a0f1a3945135764dbb6aaab04103dcaf9/ruff-0.16.4.tar.gz", hash = "sha256:13171aa9d9af2240ee3504e639de73122c67e74036de5ba2e1d01422cd17e3dc", size = 4899731, upload-time = "2026-08-20T17:43:59.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/80/779895ef584e089d22f2c6df0d0e99a65ec2df0805f1fffd439415b8c1f0/ruff-0.16.4-py3-none-linux_armv6l.whl", hash = "sha256:df4075f71ddac40b9934af60c3ec8a53047dd5a5fdc43224e6e4e8e9a27cb6f7", size = 10006909, upload-time = "2026-08-20T17:43:16.888Z" }, + { url = "https://files.pythonhosted.org/packages/a9/e6/f553199b5e8927a05cb5c422d921fd0656b29ab976e91c44802107c6b0da/ruff-0.16.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0c95538517af68004306b0fb3214ff2f2af67a65092aee77cd9eb86db6656604", size = 10240201, upload-time = "2026-08-20T17:43:19.337Z" }, + { url = "https://files.pythonhosted.org/packages/1c/70/4a6dc4bb34da4dee35e30f09bbd1bfbdd26f33b62fb9b8df31f08a199cd2/ruff-0.16.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:963f83df8e69e575b64d67dd447ebbc917db41a14bf38d4593a4183e7aaa8255", size = 9835122, upload-time = "2026-08-20T17:43:21.708Z" }, + { url = "https://files.pythonhosted.org/packages/24/12/c6e22d686372c15bcb7af99831f1a1be96df696491babf4f24e4f942c527/ruff-0.16.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32a5057c7ff3f6e6480a48fccfb3a412a690f48a3d03ac5cf08177d6c2da3ade", size = 9977162, upload-time = "2026-08-20T17:43:24.236Z" }, + { url = "https://files.pythonhosted.org/packages/46/49/72b10ec912f5ab5854992eaf7aa7cd36729b6937d9dc4e0fb41b3bf428ec/ruff-0.16.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3dce8d9b0c57c265b91885a66a567d8ea1372e8eb4e250fa8e5e3f579e99cff", size = 9829789, upload-time = "2026-08-20T17:43:26.966Z" }, + { url = "https://files.pythonhosted.org/packages/fa/80/0f30e32e7f6ee26edc39075502db9d368d788a44a79b55f763eb4ab03796/ruff-0.16.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7dc651db49283c69f8e72c834eec4fe5573e4c646856aebece0ce385dceb2a80", size = 10527949, upload-time = "2026-08-20T17:43:29.384Z" }, + { url = "https://files.pythonhosted.org/packages/52/3d/86e8ad3542169e56cac3859a343afdb9df2ad54d35a59ce1e67baee83421/ruff-0.16.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3817b87dbcabc92f13b05019257c5b89b5b4d51b5fb20f56fb5235ceb723cd07", size = 11333695, upload-time = "2026-08-20T17:43:31.872Z" }, + { url = "https://files.pythonhosted.org/packages/d0/16/481c29b380c20a0054a8261066665e1b3488e23636c49d0a43e75975b9bb/ruff-0.16.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9fce1499134b2c8c68e5166f95705a5812062bb93aacc5f9873bb1a27084bc7", size = 10727741, upload-time = "2026-08-20T17:43:34.596Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b6/56bc0b8cf45b54b28b3a5e6381c8945d51b5b18adf659454c32295209a31/ruff-0.16.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2d812e482f5a7e02eee26cd73d2a37ebbdf47d795ea63ba1b89110ae93e9fb3", size = 10286522, upload-time = "2026-08-20T17:43:37.288Z" }, + { url = "https://files.pythonhosted.org/packages/e8/8b/b345b4fb110f2fbe2bd31eabd271e5e8b3b7e4ee6c0e02f2dc6be78db000/ruff-0.16.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6baaf984aa7976edf93d3b627fe2d1d22ee94bbca05fa6f90fc76d73924e3454", size = 10584182, upload-time = "2026-08-20T17:43:39.984Z" }, + { url = "https://files.pythonhosted.org/packages/29/e5/827b34041c35f58774a9681a4213994c164fc987800f4dddabcf451da0bf/ruff-0.16.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:bdfcf0b28662eb890372d50f92c283bb94e67e7635ed93c7fd533970acff7b2b", size = 10134195, upload-time = "2026-08-20T17:43:42.351Z" }, + { url = "https://files.pythonhosted.org/packages/0f/10/d0bffcdd6729b87afc82ba0ef377173356a7dc8e972f5179968cf2fdf98c/ruff-0.16.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b66b02cb9b04f537643cadf5768e5f98dc461890d530cb67113d71c8c76e605d", size = 9825821, upload-time = "2026-08-20T17:43:44.532Z" }, + { url = "https://files.pythonhosted.org/packages/f5/32/0db2a863b796ca62d83e92a07a3ccf00921b14db02059347576a2fda3d4b/ruff-0.16.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8528bf9a4b291a60bf02ea453511e8ce6215bd2b982ee80405b66b008b6c30a0", size = 10267658, upload-time = "2026-08-20T17:43:46.989Z" }, + { url = "https://files.pythonhosted.org/packages/b2/a0/fbdeb59e48c6261f523e56c8f12e9c08fbe693786595cc7e3959207a9232/ruff-0.16.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:fbd85d2875fdd67e833213a651f613bbf25303abf6aa822a5121f4531195678d", size = 10697071, upload-time = "2026-08-20T17:43:49.891Z" }, + { url = "https://files.pythonhosted.org/packages/aa/28/0c6dd865859c6d17bc8ccc34cb72b0e02d6c7eb25e8a1e22b5bea681e2c0/ruff-0.16.4-py3-none-win32.whl", hash = "sha256:312769988007aaeb8e189b443ccdd03c0e6374489e053467be6d96518ebff76e", size = 10021687, upload-time = "2026-08-20T17:43:52.281Z" }, + { url = "https://files.pythonhosted.org/packages/a3/03/e724450f621698117f9aa6dd241c94d0274ae96781378dc86745ae29f0e7/ruff-0.16.4-py3-none-win_amd64.whl", hash = "sha256:05d9d27a18c4bcbefada602480ec9e01e0bc949d432e0ced5df77edac195919c", size = 10567657, upload-time = "2026-08-20T17:43:54.78Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fe/da8b9e1347696bb22120b77280ec5ce25d500ca5cb39d5ad6e5c18de19c1/ruff-0.16.4-py3-none-win_arm64.whl", hash = "sha256:a3a61621c9b6f6a89573e938a080e648f1695baa3f58570a3a707bc51ff65a21", size = 10451579, upload-time = "2026-08-20T17:43:57.135Z" }, ] [[package]] @@ -4650,119 +4922,124 @@ wheels = [ [[package]] name = "scikit-learn" -version = "1.8.0" +version = "1.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, + { name = "narwhals" }, { name = "numpy" }, { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/74/e6a7cc4b820e95cc38cf36cd74d5aa2b42e8ffc2d21fe5a9a9c45c1c7630/scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e", size = 8548242, upload-time = "2025-12-10T07:07:51.568Z" }, - { url = "https://files.pythonhosted.org/packages/49/d8/9be608c6024d021041c7f0b3928d4749a706f4e2c3832bbede4fb4f58c95/scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76", size = 8079075, upload-time = "2025-12-10T07:07:53.697Z" }, - { url = "https://files.pythonhosted.org/packages/dd/47/f187b4636ff80cc63f21cd40b7b2d177134acaa10f6bb73746130ee8c2e5/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4", size = 8660492, upload-time = "2025-12-10T07:07:55.574Z" }, - { url = "https://files.pythonhosted.org/packages/97/74/b7a304feb2b49df9fafa9382d4d09061a96ee9a9449a7cbea7988dda0828/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a", size = 8931904, upload-time = "2025-12-10T07:07:57.666Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c4/0ab22726a04ede56f689476b760f98f8f46607caecff993017ac1b64aa5d/scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809", size = 8019359, upload-time = "2025-12-10T07:07:59.838Z" }, - { url = "https://files.pythonhosted.org/packages/24/90/344a67811cfd561d7335c1b96ca21455e7e472d281c3c279c4d3f2300236/scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb", size = 7641898, upload-time = "2025-12-10T07:08:01.36Z" }, - { url = "https://files.pythonhosted.org/packages/03/aa/e22e0768512ce9255eba34775be2e85c2048da73da1193e841707f8f039c/scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a", size = 8513770, upload-time = "2025-12-10T07:08:03.251Z" }, - { url = "https://files.pythonhosted.org/packages/58/37/31b83b2594105f61a381fc74ca19e8780ee923be2d496fcd8d2e1147bd99/scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e", size = 8044458, upload-time = "2025-12-10T07:08:05.336Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5a/3f1caed8765f33eabb723596666da4ebbf43d11e96550fb18bdec42b467b/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57", size = 8610341, upload-time = "2025-12-10T07:08:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/38/cf/06896db3f71c75902a8e9943b444a56e727418f6b4b4a90c98c934f51ed4/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e", size = 8900022, upload-time = "2025-12-10T07:08:09.862Z" }, - { url = "https://files.pythonhosted.org/packages/1c/f9/9b7563caf3ec8873e17a31401858efab6b39a882daf6c1bfa88879c0aa11/scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271", size = 7989409, upload-time = "2025-12-10T07:08:12.028Z" }, - { url = "https://files.pythonhosted.org/packages/49/bd/1f4001503650e72c4f6009ac0c4413cb17d2d601cef6f71c0453da2732fc/scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3", size = 7619760, upload-time = "2025-12-10T07:08:13.688Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7d/a630359fc9dcc95496588c8d8e3245cc8fd81980251079bc09c70d41d951/scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735", size = 8826045, upload-time = "2025-12-10T07:08:15.215Z" }, - { url = "https://files.pythonhosted.org/packages/cc/56/a0c86f6930cfcd1c7054a2bc417e26960bb88d32444fe7f71d5c2cfae891/scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd", size = 8420324, upload-time = "2025-12-10T07:08:17.561Z" }, - { url = "https://files.pythonhosted.org/packages/46/1e/05962ea1cebc1cf3876667ecb14c283ef755bf409993c5946ade3b77e303/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e", size = 8680651, upload-time = "2025-12-10T07:08:19.952Z" }, - { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, - { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, - { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, - { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, - { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, - { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, - { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, - { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, - { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, - { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, - { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, - { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122, upload-time = "2026-06-02T11:53:24.08Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512, upload-time = "2026-06-02T11:53:27.183Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603, upload-time = "2026-06-02T11:53:30.328Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097, upload-time = "2026-06-02T11:53:33.456Z" }, + { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173, upload-time = "2026-06-02T11:53:36.602Z" }, + { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451, upload-time = "2026-06-02T11:53:39.075Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188, upload-time = "2026-06-02T11:53:41.964Z" }, + { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299, upload-time = "2026-06-02T11:53:44.817Z" }, + { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690, upload-time = "2026-06-02T11:53:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723, upload-time = "2026-06-02T11:53:50.702Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330, upload-time = "2026-06-02T11:53:53.396Z" }, + { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653, upload-time = "2026-06-02T11:53:56.035Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162", size = 8713289, upload-time = "2026-06-02T11:53:58.788Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2", size = 8245141, upload-time = "2026-06-02T11:54:01.694Z" }, + { url = "https://files.pythonhosted.org/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913", size = 8847671, upload-time = "2026-06-02T11:54:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb", size = 9118104, upload-time = "2026-06-02T11:54:07.205Z" }, + { url = "https://files.pythonhosted.org/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673", size = 8290674, upload-time = "2026-06-02T11:54:10.087Z" }, + { url = "https://files.pythonhosted.org/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42", size = 7978807, upload-time = "2026-06-02T11:54:12.769Z" }, + { url = "https://files.pythonhosted.org/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949", size = 9031941, upload-time = "2026-06-02T11:54:15.436Z" }, + { url = "https://files.pythonhosted.org/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96", size = 8613528, upload-time = "2026-06-02T11:54:18.842Z" }, + { url = "https://files.pythonhosted.org/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b", size = 8855050, upload-time = "2026-06-02T11:54:21.699Z" }, + { url = "https://files.pythonhosted.org/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a", size = 9097190, upload-time = "2026-06-02T11:54:24.454Z" }, + { url = "https://files.pythonhosted.org/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666", size = 8963204, upload-time = "2026-06-02T11:54:27.428Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661, upload-time = "2026-06-02T11:54:30.192Z" }, ] [[package]] name = "scipy" -version = "1.17.1" +version = "1.18.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, - { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, - { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, - { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, - { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, - { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, - { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, - { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, - { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, - { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, - { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, - { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, - { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, - { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, - { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, - { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, - { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, - { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, - { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, - { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, - { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, - { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, - { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, - { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, - { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, - { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, - { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, - { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, - { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, - { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, - { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, - { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, - { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, - { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/7e/74/66de6258867beb2ef08f35f9f2ac017a52cacd5081714d239ff1a442d458/scipy-1.18.1.tar.gz", hash = "sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307", size = 30781235, upload-time = "2026-08-21T23:28:50.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/f7/240c110c08693826b4513a52f5717d62ec7c7af72f2920821247c03b17b3/scipy-1.18.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:457fd7a2a8edeb044ab6ffbc0aa03ff6cd18491356e5e0c834d76ce621b916d1", size = 31111061, upload-time = "2026-08-21T23:23:44.522Z" }, + { url = "https://files.pythonhosted.org/packages/05/4a/78c6285577c375e7cf27277ea8ee6961224327f1e1a0c44af5f17f23635c/scipy-1.18.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:e708533e8b2ae2497d65346538a7dcc92814410b25b81432eac66de0f2af8265", size = 28733332, upload-time = "2026-08-21T23:23:50.015Z" }, + { url = "https://files.pythonhosted.org/packages/a5/f6/a5b82f8abbe14d134691b8b903696f701d25a081353a29dc655c364d9e62/scipy-1.18.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:7bbf207c4453ce1ad2e00b17313852b33310b83090c2311bdaf97f93c0380d12", size = 20475078, upload-time = "2026-08-21T23:23:54.138Z" }, + { url = "https://files.pythonhosted.org/packages/23/22/0858a0bbd6b3e825ceb8cd9baf9eaf3b2f2b1d77727eb6be40500bcdc92f/scipy-1.18.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:78c0665edead396b1abb4897c41a5c1d9bf090c8a637a4c20a61678e0a264e66", size = 23108904, upload-time = "2026-08-21T23:23:57.824Z" }, + { url = "https://files.pythonhosted.org/packages/75/9a/2e71719f31eaefe0e3a1706c4a1ded94e664bfd95ffca2b219a671faee01/scipy-1.18.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c085faa2cfa879c5141df483f836f4d691045a078224a670fa570fa01612d89", size = 34025113, upload-time = "2026-08-21T23:24:02.209Z" }, + { url = "https://files.pythonhosted.org/packages/df/64/ff35eb9e54894cf471ff4716abd3c81eb0a0626869217ce3e6ba4ccf17d7/scipy-1.18.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f55fa87b6c612ecd6b058f167c53231b1d14e412efe361d3d6e38b3631c73218", size = 35344199, upload-time = "2026-08-21T23:24:07.844Z" }, + { url = "https://files.pythonhosted.org/packages/d3/af/c5538be1792f7034c12c7db6ee67cace58253c7b87b122d68253eaf5de89/scipy-1.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c35d74ce0e193ff740c2f2be2ac913ddc232fe6c1ff40b26cfecb9c670c63314", size = 35639587, upload-time = "2026-08-21T23:24:13.05Z" }, + { url = "https://files.pythonhosted.org/packages/91/4c/075e4f66471bac101141ac739e9e135549be1bae584571bd03a530c056e1/scipy-1.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2924a03db38dc2e848bca2fe9f077dafb891480b91a00a0963a8cf86dfc31c1", size = 37480330, upload-time = "2026-08-21T23:24:19.608Z" }, + { url = "https://files.pythonhosted.org/packages/39/e7/979fd14e75008623df31ba70d6bb144700f68feadcea042021c06a05bf82/scipy-1.18.1-cp312-cp312-win_amd64.whl", hash = "sha256:5e4d44984abc0020154ea81b247adeddcc3ac5527b975ff798bd1ba0adc513c2", size = 36658278, upload-time = "2026-08-21T23:24:25.463Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0b/e1525354ff9d7d5feb6d1b31af6d14072e5c91e9607b421fa1ec889660b3/scipy-1.18.1-cp312-cp312-win_arm64.whl", hash = "sha256:d65d448389b8436493abcf629cc94ad0cf32aecaf06e1acca1de53cc795f2f12", size = 24400588, upload-time = "2026-08-21T23:24:30.579Z" }, + { url = "https://files.pythonhosted.org/packages/b6/55/4540ee0f9c42a9ad7109d0d1a8cc70de54c3572b01c6693a2b1c70e90ceb/scipy-1.18.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:3ab3523da44749156e1f68b464dc56af11ae4cbc5c739a49d05f32b982eca9f3", size = 31089958, upload-time = "2026-08-21T23:24:35.8Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/769f36d14922b8071a43e95d24d18b6bdafad10d7f5cf647867e1ac052bc/scipy-1.18.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e6fb6a55cc0ba97b59a1f288fb86dc6fce8bdfc0fffcbfd015e3a954bf2a2d93", size = 28715106, upload-time = "2026-08-21T23:24:40.775Z" }, + { url = "https://files.pythonhosted.org/packages/9a/d7/21d890274f75ea37a8209d5519e72da3da90302e3b9fb8397a0918386a62/scipy-1.18.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ea324d9dd34c38bfb9bec8ca4d1b407db97dbb74029f566b8e322b1b6fe56fe6", size = 20456846, upload-time = "2026-08-21T23:24:45.066Z" }, + { url = "https://files.pythonhosted.org/packages/ec/01/798430ecea2e78ec7c02663d5f71c007bb6abeca931080debd40d7fa55ea/scipy-1.18.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:75b00eb8fb802090aa903f4ea1c7f5a584779f967361e68b7e98e531cc2d7174", size = 23087986, upload-time = "2026-08-21T23:24:49.539Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5f/4634e9d35c68496e4e34cb6946eafab044458e6cedab42b40b6588e475b6/scipy-1.18.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d416b16cccfd70fbf62400e84d0bb2f4e6af519a45557f1692c749b37f14b315", size = 33998146, upload-time = "2026-08-21T23:24:54.714Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/6450ed9243315322bbc19ac57b9b70d66a20bf1d38d124c96bc4bf6af9ea/scipy-1.18.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fdaf5ea890a6183d0565f51a61799d67081bd5b1cf03c5f4b3fd3732108625c9", size = 35312578, upload-time = "2026-08-21T23:25:00.44Z" }, + { url = "https://files.pythonhosted.org/packages/00/bd/bf5a4be6a3525676499f6dff307991739ff6fdcad1481b1aeb6745339f58/scipy-1.18.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c825cef2f49e46753726a7181a8e199804a912b29519ada542c6ebc654951899", size = 35612621, upload-time = "2026-08-21T23:25:06.144Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4e/3c45c33e00a77996c4b1cb707929f833ba7b1d522ee29f882512c330676d/scipy-1.18.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3b417bf8c2c7c16e8f58ad91db17783ec911ac16e7b50eb6eab6e809b4f5b07", size = 37457323, upload-time = "2026-08-21T23:25:12.483Z" }, + { url = "https://files.pythonhosted.org/packages/93/0e/e0348fbc0dbab65c114cf78957e7dfeb49f8e8b556b4d930cc12ff195e18/scipy-1.18.1-cp313-cp313-win_amd64.whl", hash = "sha256:559ed65f60c1af5a03f3912605a1b5114f522c7c32fb23c3376ae8f03219fe28", size = 36622841, upload-time = "2026-08-21T23:25:18.722Z" }, + { url = "https://files.pythonhosted.org/packages/50/a8/6a77f5f267c555108f0a864b6db714363dab567a8266422a79a385f9232b/scipy-1.18.1-cp313-cp313-win_arm64.whl", hash = "sha256:cd479fc04dd9401e3b4f49e76518768ef99c4f517a98c284eb091fd725719adf", size = 24399315, upload-time = "2026-08-21T23:25:23.458Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/d8eb4e280ddb56a4ab2c6f02ee49b56b23f6e977cf0802fd6d68dbef14f5/scipy-1.18.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:83de5453a7799afc9048b4616bd085cef126e36412f0ea2f6370c36a2a3a51e7", size = 31090936, upload-time = "2026-08-21T23:25:28.686Z" }, + { url = "https://files.pythonhosted.org/packages/2a/49/59ea385dc3a62ff498ddf3cfff7c2b41b0f9f9d3c4122b3f1dcb6d6327fe/scipy-1.18.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:9554bcc6d715ee87a633a3cc8e7703c6628b100dd29cb8a2efc4c0533c7ff729", size = 28725221, upload-time = "2026-08-21T23:25:33.244Z" }, + { url = "https://files.pythonhosted.org/packages/70/e8/6b0c288c50942d78193696c9f15f9a0874f5178aa0ddf40f83d9924b3e8d/scipy-1.18.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:011413b7426b75012840e35649e00fe0a2c3bae89fed433876e3a99251572efc", size = 20466839, upload-time = "2026-08-21T23:25:37.516Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e0/54fd3793c729e3b936782f181b59cbb1205bf250ab605a16cb1ba61cdd5e/scipy-1.18.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:88f0e784020649f88ea48c9f5ddfa403bf9205820667c0914740b392035afb82", size = 23089121, upload-time = "2026-08-21T23:25:42.019Z" }, + { url = "https://files.pythonhosted.org/packages/0b/56/030af62bea3cf878e0028515dff78c123b01633606a879b63f42d2db99cc/scipy-1.18.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d3ab0e8c69a17dd3559eab8cbb88f258e285c94d572c2719033f90f83290c89", size = 34053851, upload-time = "2026-08-21T23:25:47.998Z" }, + { url = "https://files.pythonhosted.org/packages/6b/89/2a844506d49651e9aa1af6ef95b6bd8031cb1d5a4375edec6155037e04cf/scipy-1.18.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac0333bdf38309aa3dcbe7e3fa7ea29e7a2c37c6ea306a757b700ded8e4596ad", size = 35329183, upload-time = "2026-08-21T23:25:53.522Z" }, + { url = "https://files.pythonhosted.org/packages/eb/56/c7370c3640e92ac9613cbf26cb3f729f9b12ddf1727b55b94b53b24d6f48/scipy-1.18.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:911de823097db8b63f034299d12662db93344e6ffa0b881cbb57748974b70168", size = 35672551, upload-time = "2026-08-21T23:25:59.387Z" }, + { url = "https://files.pythonhosted.org/packages/24/16/ec8536f351421f8bf60a1120930638f83790f4710b8230446aca3d6159d4/scipy-1.18.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:95298364e251be3e60249facbeeca03631d3bb7584f85879516ec55ac717b81f", size = 37469416, upload-time = "2026-08-21T23:26:05.432Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/d73da0d28f16c45bb9b0a5691b91610b0275c5ef0eb5e43c87cf2dc1bf31/scipy-1.18.1-cp314-cp314-win_amd64.whl", hash = "sha256:78a0d7c918e74a232394117160e7e3db503377572a45bcef8826e4ab8a35feba", size = 37362755, upload-time = "2026-08-21T23:26:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/89/25/e996e4dc74e10e227b1e14db5eaf6608bb6dd33884a64851c38f18dd4249/scipy-1.18.1-cp314-cp314-win_arm64.whl", hash = "sha256:cbf38d043c1aa4ab306e1ada6ab6eddacc3322a20b7af1b30bc93254b366fe09", size = 25036090, upload-time = "2026-08-21T23:26:15.887Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c9/c00213f92309d753b48903e6a451b87eb52ff5b7a16e789d1568bbf221c4/scipy-1.18.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0fcb3c93519f27bb4f0c4b0f7802cdcaca7fcf93267b75edda2e9f4e8a55cbd7", size = 31485550, upload-time = "2026-08-21T23:26:20.776Z" }, + { url = "https://files.pythonhosted.org/packages/74/b2/e3067c487982d4eeab2938928529410370c06fea84a4d3f4925e7d96647d/scipy-1.18.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ddef79fb382df40104a19bb7151b3b23e57c1778fcf857c71ceecd9bd264513f", size = 29174642, upload-time = "2026-08-21T23:26:25.395Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ab/374c9fe2d1ec014e576c781a4b5d8e1ba340e8f6b4638c16f711d2b194f0/scipy-1.18.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0e82073ecc7acc6436fac4b31674109c7e1d3e596789767eda01258a8c9e8123", size = 20916357, upload-time = "2026-08-21T23:26:30.112Z" }, + { url = "https://files.pythonhosted.org/packages/90/38/223915c88a17317cafbf8ca2a42b11c265a9fb1e804aa665544132b5fe8a/scipy-1.18.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8bcf3c1ba5d6456e2effd30fcbd3459b044d683fcdac79a2e6830f0bdf7de487", size = 23482611, upload-time = "2026-08-21T23:26:34.846Z" }, + { url = "https://files.pythonhosted.org/packages/c4/d1/db0948da8ca57a80b36520ef0a768b967d99f3af65f4b6f1bf6362ad4dd4/scipy-1.18.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cfbf154f2ba187f2ed6cce2639efff7d105f1140573642c0161615b6d91d6a87", size = 34143202, upload-time = "2026-08-21T23:26:40.4Z" }, + { url = "https://files.pythonhosted.org/packages/87/53/39d046cc7574ed6acacb6bd5723e220107ece80bff12faaf3efc4ddeede4/scipy-1.18.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1d33a7836f7ddc1993427966a0823468ec41bcbdb1a9f9942d1d7e57f803ba3", size = 35380876, upload-time = "2026-08-21T23:26:46.1Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/32e0e799d875a85ca57d9bde6c78148afcc0e38276df683d95854eadc8c3/scipy-1.18.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7f4b8bc363b6d65ee2152bec57568e3c52639bb34c46057b09857a307ed5e21d", size = 35770885, upload-time = "2026-08-21T23:26:51.533Z" }, + { url = "https://files.pythonhosted.org/packages/88/2e/f97a666d362fee68b18f41c9c30ed502ca5c98b549749bfcb52a8b74d1eb/scipy-1.18.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:11c423f1049c5755ad4409af52a9ada1cff96fe9b50795d4af3619f292901239", size = 37525424, upload-time = "2026-08-21T23:26:56.751Z" }, + { url = "https://files.pythonhosted.org/packages/ca/d5/a9e765a84654ebba8479a1fd1b059ced1af72b168a3b2a3a46540ea38d20/scipy-1.18.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c24acac1e18912761c4700239bbc1fd32f615af690f1584d49b35859be51324d", size = 37416961, upload-time = "2026-08-21T23:27:01.546Z" }, + { url = "https://files.pythonhosted.org/packages/ee/16/e79e0d1c63ef698879d85439d37e9fb434e3b804e506a6991038d086ebd9/scipy-1.18.1-cp314-cp314t-win_arm64.whl", hash = "sha256:9f2897bf7737392ad0d5213ea7b6add72a4edf5679b3153106aeb88b6507b3b9", size = 25331848, upload-time = "2026-08-21T23:27:05.884Z" }, + { url = "https://files.pythonhosted.org/packages/be/4f/1bd37c883b67163e2ca1f60977a399500e6879c15defecac62831c8d078d/scipy-1.18.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:eb0dfcf4e28a99c12c999744a2ff67c9b06200e20401c7c88186e33552a46331", size = 31091484, upload-time = "2026-08-21T23:27:11.051Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c5/ba929d7feb9b2332f96827c12e0e924b61973b59b4dea383b603372c65ce/scipy-1.18.1-cp315-cp315-macosx_12_0_arm64.whl", hash = "sha256:30f464bee641fa8e282577c7dce027308403213c6ca8270bba73285c91024bc5", size = 28725057, upload-time = "2026-08-21T23:27:15.9Z" }, + { url = "https://files.pythonhosted.org/packages/a4/19/68f1c50f609d955d230e66d25d02bd3e1e167ec540232135354fb9a4b9e3/scipy-1.18.1-cp315-cp315-macosx_14_0_arm64.whl", hash = "sha256:1bca3b943fc2567ea49cd02c99abde49da4d5178ec46f624bd8255cda8755beb", size = 20466734, upload-time = "2026-08-21T23:27:20.044Z" }, + { url = "https://files.pythonhosted.org/packages/ef/6d/319fa29b73d1802fa80b32a6eaf3f5be456ef81526da2716a9493bcb5501/scipy-1.18.1-cp315-cp315-macosx_14_0_x86_64.whl", hash = "sha256:c9d18a33309122074ea483dd92dd444189166b8b2ec429fe9ed5ac73c7a0aa23", size = 23089664, upload-time = "2026-08-21T23:27:24.345Z" }, + { url = "https://files.pythonhosted.org/packages/b7/db/30992f9b51a63de671daf3888ffd18378b6cb9ec9f2c972264238ffa7fd6/scipy-1.18.1-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82f201b4c878551d48558337aab270d3c6cca5507b8737c8d8a608d234cccde0", size = 34054035, upload-time = "2026-08-21T23:27:29.409Z" }, + { url = "https://files.pythonhosted.org/packages/91/d4/bf3e735dc0b9d5a8ff45079d2540e17d3aff7a2f0048dd8f552ffd031d2b/scipy-1.18.1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ac49ea97594532dd44b7136094d35f5440fa06e6d9c6384a74c01764df388c5", size = 35333883, upload-time = "2026-08-21T23:27:34.293Z" }, + { url = "https://files.pythonhosted.org/packages/19/93/12d78ce9f871fe945fca588d32644e6e63f553c2a35c564d73f3b22a3313/scipy-1.18.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:ceb30a00ce7c92d459819443d29ca486d882b83fb6738bdcbb2a1cce94ac5daa", size = 35673124, upload-time = "2026-08-21T23:27:39.059Z" }, + { url = "https://files.pythonhosted.org/packages/70/cd/886219313a1012a48e6ae0ec4f302c837151beb92e1ff0d709ef8fdfc488/scipy-1.18.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f29633129f9fa7e88a3f0fca835de2d030bfc9643f7799e1a0c46cee24d38fc7", size = 37470753, upload-time = "2026-08-21T23:27:44.435Z" }, + { url = "https://files.pythonhosted.org/packages/17/6c/a776888ce618bee54fbde26172f0f46ac1da70d27b63861797fe78e1904b/scipy-1.18.1-cp315-cp315-win_amd64.whl", hash = "sha256:92c14f5bdbfb6216315ce33e78080474082de8b3830122ba97809bfbe65f75c0", size = 37361483, upload-time = "2026-08-21T23:27:49.334Z" }, + { url = "https://files.pythonhosted.org/packages/ab/09/97b651691322ebee97999b017ffc18a15a0b815103844c97e8da9d469731/scipy-1.18.1-cp315-cp315-win_arm64.whl", hash = "sha256:e402cf31eb68f453dbb2d36fc6d722b33f24a55d68b2ae1d92fa6305ca71c298", size = 25035883, upload-time = "2026-08-21T23:27:53.596Z" }, + { url = "https://files.pythonhosted.org/packages/ed/0f/9ec20467bbabd0d44e2a77d0fd3d124f884b4d67df92af82c91d2d6a486f/scipy-1.18.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:2a0b02f9fc46f8520330c23d45e6560db7e3a0d927232139427637f98943e11d", size = 31474926, upload-time = "2026-08-21T23:27:57.993Z" }, + { url = "https://files.pythonhosted.org/packages/8a/58/dcb79161e56efbedc50079fcd2f5fe427a0ebb53022eb476aa73c015ad8f/scipy-1.18.1-cp315-cp315t-macosx_12_0_arm64.whl", hash = "sha256:1d73131e358976663dd969e1fb4ed1404b815cd977eaaedc3b3a133ba2d81c35", size = 29164940, upload-time = "2026-08-21T23:28:03.062Z" }, + { url = "https://files.pythonhosted.org/packages/71/d3/1eeea80c817fcb8ef7bd4a05a58824977a0e57a375cfc3d7ea7c911c01ad/scipy-1.18.1-cp315-cp315t-macosx_14_0_arm64.whl", hash = "sha256:bff0b729edd992766136b34e39cc76bc2fad905aa58897ee72a9cd000a6d8443", size = 20906742, upload-time = "2026-08-21T23:28:07.642Z" }, + { url = "https://files.pythonhosted.org/packages/54/46/e59350428b6099301a20128108c995e2eb175a43f383af9a346e38824f9b/scipy-1.18.1-cp315-cp315t-macosx_14_0_x86_64.whl", hash = "sha256:10ac20c69d880f77f375db44c22e3e6a644f9fefa291d4cd2fb9790a89fc99fd", size = 23472183, upload-time = "2026-08-21T23:28:12.109Z" }, + { url = "https://files.pythonhosted.org/packages/89/31/cc91623fa98f0621766a0f0aaaadb2c66de74a7ea7e3837164f6e4354260/scipy-1.18.1-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33a834464fdabc0f26a45508df31b3cc5d028e04dbf6c5ed398541418e0a12fe", size = 34130796, upload-time = "2026-08-21T23:28:17.906Z" }, + { url = "https://files.pythonhosted.org/packages/fc/3e/8572ef536957ddb8aa81bb4090d9e25f257e3b4e05d97deb54319deb8a3a/scipy-1.18.1-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49023963c193dacee096301452f223ee24d86ec5807f8df93c0f7221d119e305", size = 35374253, upload-time = "2026-08-21T23:28:23.732Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c6/59fdeffb4f1435299f93d9dc8140b43ad2916e6cfc944be6c3041fcec86d/scipy-1.18.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:d84a09d0dad90ba6525d8ac1c2334b33e64bf3ccfe9e841f02feb867a22681e4", size = 35758543, upload-time = "2026-08-21T23:28:29.431Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d9/135be205d9de8783193aff9cc3bf483a03a38e4b29432c954e8cb66ac14e/scipy-1.18.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:179ce34a8d0fe273d8883ba59e17e052247d08973dfcb743ca52bb1cce2d60b0", size = 37521946, upload-time = "2026-08-21T23:28:35.245Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a2/5b7d5270621ab7cfa3f7766067bf95dc360b5efb6394694e8143b4156e2b/scipy-1.18.1-cp315-cp315t-win_amd64.whl", hash = "sha256:5632e3ae3d09197c446310cd5187de63e28448ce22f0f67b2b93d97503c0c230", size = 37408295, upload-time = "2026-08-21T23:28:40.724Z" }, + { url = "https://files.pythonhosted.org/packages/63/ad/741c19fcb66755ff953daf9243af8480e4bf3d7fbe57583c178c7d2b6b51/scipy-1.18.1-cp315-cp315t-win_arm64.whl", hash = "sha256:eda632a7981f69730d6281f451db9c1c370993a2c0d7ddb43e2a809a2862b83a", size = 25319710, upload-time = "2026-08-21T23:28:45.713Z" }, ] [[package]] name = "scp" -version = "0.15.0" +version = "0.16.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "paramiko" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/1c/d213e1c6651d0bd37636b21b1ba9b895f276e8057f882c9f944931e4f002/scp-0.15.0.tar.gz", hash = "sha256:f1b22e9932123ccf17eebf19e0953c6e9148f589f93d91b872941a696305c83f", size = 13905, upload-time = "2024-05-23T21:37:41.835Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/35/fcef45d52d76a6dc70778c11eea719ff0ab550594bc51e55e66d28b5f424/scp-0.16.1.tar.gz", hash = "sha256:3f2b260bf9bd4c2b6857f697a1d7e8edc26fa569282b77027e849dfe1e48580a", size = 13131, upload-time = "2026-07-29T16:00:08.265Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/b3/561cd6afa959e9dd522af12acc4f803e8bab1bd0e383bffc5211721c5fcb/scp-0.15.0-py2.py3-none-any.whl", hash = "sha256:9e7f721e5ac563c33eb0831d0f949c6342f1c28c3bdc3b02f39d77b5ea20df7e", size = 8753, upload-time = "2024-05-23T21:37:46.226Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/07fcfe4bc53d9768ffd13c895bfc88c33b6b337927f53078270e51c6538a/scp-0.16.1-py2.py3-none-any.whl", hash = "sha256:52d48423ffb0d22afcec738d66c2c8d5865ab9b45e040a7508789f58b39533fe", size = 8909, upload-time = "2026-07-29T16:00:13.168Z" }, ] [[package]] @@ -4784,8 +5061,8 @@ name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography" }, - { name = "jeepney" }, + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jeepney", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ @@ -4848,16 +5125,16 @@ wheels = [ [[package]] name = "soupsieve" -version = "2.8.4" +version = "2.9.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/99/a6ca3beb3ccacb41fb3321d8a60e5566f9e6467601ef8eba6a17e1b89778/soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74", size = 122445, upload-time = "2026-08-07T00:57:24.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" }, + { url = "https://files.pythonhosted.org/packages/eb/dc/ad025c1ee131eba60c69f4dd5779b18fcf1e6b21a343e2162a84d5d133c7/soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823", size = 37370, upload-time = "2026-08-07T00:57:23.524Z" }, ] [[package]] name = "spikeinterface" -version = "0.104.3" +version = "0.104.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "neo" }, @@ -4870,9 +5147,9 @@ dependencies = [ { name = "tqdm" }, { name = "zarr" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/9e/29b474f64dccd4c9c65a33d60bceff22f830b2f64bb5902824721d36af41/spikeinterface-0.104.3.tar.gz", hash = "sha256:ee2f689701e8bdbf3c9f110ab8f686cbfa04736a2698bfec7327e2f21ac888b5", size = 907345, upload-time = "2026-04-22T14:54:59.085Z" } +sdist = { url = "https://files.pythonhosted.org/packages/89/bf/d039a0ba89e529f1406c8ec94a79f24f21e896bc78c3c3632202a19807b7/spikeinterface-0.104.8.tar.gz", hash = "sha256:ebd5b3ff19066c795ab7c424a7c06bbc3a312e59807c01647821d3c68b00b24b", size = 907430, upload-time = "2026-06-30T13:49:39.972Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/32/89f7372b4221c18506005e8261648d29cebd816e6655882dbf9083214057/spikeinterface-0.104.3-py3-none-any.whl", hash = "sha256:58b3f3599cedc03dfa836737fdc61e1cd5dfcb6361607fe842d1ead5768f5b41", size = 1129081, upload-time = "2026-04-22T14:54:57.488Z" }, + { url = "https://files.pythonhosted.org/packages/a1/83/cd37e77b850628353069f2f82cd9402fe286bd397b22bdf7095f566d359e/spikeinterface-0.104.8-py3-none-any.whl", hash = "sha256:e99a9b3c4e87b9ce33eef6d262c96a57af38efdb25b2cbae3719126009a979ae", size = 1129221, upload-time = "2026-06-30T13:49:38.251Z" }, ] [[package]] @@ -4891,7 +5168,7 @@ wheels = [ [[package]] name = "suite2p" -version = "1.0.0.1" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cellpose" }, @@ -4906,9 +5183,9 @@ dependencies = [ { name = "tifffile" }, { name = "torch" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/1d/386d35f71e4e53383dbd1ff6533810cd0192f055b387fdefa557422b147f/suite2p-1.0.0.1.tar.gz", hash = "sha256:9d59c77cf61eefb7f20867b171879886f8bdc82b46cd671c38c0aa06b3cbfc60", size = 9692208, upload-time = "2026-02-11T17:45:42.15Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/27/1031be9357bbea04db27195e7f9846fc895e9e9def6550d2fe52d69b0b72/suite2p-1.1.0.tar.gz", hash = "sha256:82d53175bfd4686462c18f183d5206cb6eefc8b214de03aa249b00f1c7c2d9bb", size = 9709772, upload-time = "2026-06-02T16:52:09.445Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/7c/534c6c158b5a203848b16839a43b3c7b783d21fffa224d1f47c77e75e00a/suite2p-1.0.0.1-py3-none-any.whl", hash = "sha256:51b93ac4e6e33a1a4cd0242fa7c6b7ee92a9b6cdc99cf9b2533fce8247049b18", size = 682770, upload-time = "2026-02-11T17:45:40.094Z" }, + { url = "https://files.pythonhosted.org/packages/a1/48/7f8c84641b74a62a36211a26ac6272d0f965a3198eb6db294d0bfd80a27c/suite2p-1.1.0-py3-none-any.whl", hash = "sha256:8a231a5f78d0190c3db68b1f1d7ed8efb72facc8513154e7e1346afc601d77d1", size = 686261, upload-time = "2026-06-02T16:52:07.846Z" }, ] [[package]] @@ -4959,33 +5236,33 @@ wheels = [ [[package]] name = "tensorstore" -version = "0.1.84" +version = "0.1.85" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ml-dtypes" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/18/c8e8b4faffab1a434b6c013d54cf7f5b754a6849429d9dbb718297705796/tensorstore-0.1.84.tar.gz", hash = "sha256:3cb091dfde68600e6d8f03a389ccc92ffa7c0798a0c600d1013c0138d7163e6b", size = 7208048, upload-time = "2026-05-16T06:17:58.448Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/8a/1b5231e965257c3ee7d4615cb49a0fac53a71a1c34b293bcf524bb7c6d13/tensorstore-0.1.84-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:915371fc2c27540e8b69c573b7a06217fb8d161ec231cedfa9f3d264615a326d", size = 16571584, upload-time = "2026-05-16T06:17:13.283Z" }, - { url = "https://files.pythonhosted.org/packages/88/5d/52e52aa00a5ae3ebe1116ca52ac9f47ef98e94f6c4e411649cd3d1bb79cc/tensorstore-0.1.84-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4477eabe26e2f5131f1b1a3444cd9167fe69fabc29579eab8259d218399b9e6b", size = 14905169, upload-time = "2026-05-16T06:17:15.638Z" }, - { url = "https://files.pythonhosted.org/packages/61/36/f88b4bf267902f12cd2ca33aff10fabd6839dd1ce7d51876ebefa98aaf2c/tensorstore-0.1.84-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ace00cf2e45dc5d64fe3a10c2cbef61343915683808a10a3e081233566a7231", size = 19345134, upload-time = "2026-05-16T06:17:17.984Z" }, - { url = "https://files.pythonhosted.org/packages/18/7c/b7b24e10e5cb0213c85204d53fcd60d0568d986ea0001a00a815e14e01e1/tensorstore-0.1.84-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64c8039558d5607b73903948fce058725731df410c5c196cf58b3fc6222395b5", size = 20968745, upload-time = "2026-05-16T06:17:20.569Z" }, - { url = "https://files.pythonhosted.org/packages/dd/36/33ad454a2b667a93b35e74595a351dbf9b8693440bd68665990663b79164/tensorstore-0.1.84-cp312-cp312-win_amd64.whl", hash = "sha256:08e7ec5b35db5d4c4b6a867be8500448f9bd4e0c9d5a52d7f0b460650622baf6", size = 13398458, upload-time = "2026-05-16T06:17:22.701Z" }, - { url = "https://files.pythonhosted.org/packages/e7/27/3c637c0f987866f6fb92cf96ee4d40eee4b5ab699135803ada851f2a56ad/tensorstore-0.1.84-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:9337d96693b4a0e555fbe63bb228e3e2e681a80e4d371f351fb67810f197f74e", size = 16571472, upload-time = "2026-05-16T06:17:24.885Z" }, - { url = "https://files.pythonhosted.org/packages/41/83/4f3c6ef9bed01f384036c2030b3901cf075bbc8eff6e4529e502f0283ab5/tensorstore-0.1.84-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:028455cccdc05c31f194048cf459a26669b26d38f0516caf9213e7219b1ee79a", size = 14905288, upload-time = "2026-05-16T06:17:26.753Z" }, - { url = "https://files.pythonhosted.org/packages/4d/28/03e46405ba7c616e7a1ec5425a8f4a1b3f4d6ec2be359cb2f248199849e4/tensorstore-0.1.84-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50afb06c57a509091015af6a85da6f483a7f5ad0372284dd95d5513d877336e4", size = 19344890, upload-time = "2026-05-16T06:17:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/5e/c6/82669e70cef67c803852285ba6f59d7e3d102983c0ab4be8269c14756677/tensorstore-0.1.84-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ea53a851ea86aad3d99c14a790c85468d6324be14c7ac211f1f0265e8fab707", size = 20968230, upload-time = "2026-05-16T06:17:31.374Z" }, - { url = "https://files.pythonhosted.org/packages/a5/12/97d8ad183e3130e168f2feb860edd68f1b72e57f29268d980f3b70e34cd0/tensorstore-0.1.84-cp313-cp313-win_amd64.whl", hash = "sha256:fe9bf1c7fef69884a91222179550f9b5ba6c1454f9534429221824d9b15c00ec", size = 13398858, upload-time = "2026-05-16T06:17:33.658Z" }, - { url = "https://files.pythonhosted.org/packages/39/bd/fda828e7915ddb61704a6f4568b5b7ce9fe607c33b7535cf51b4fd900b38/tensorstore-0.1.84-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:97e767a64415297f019dd1e4b9af6a23d72e126e2a2d05cf41083253abe81428", size = 16576451, upload-time = "2026-05-16T06:17:35.993Z" }, - { url = "https://files.pythonhosted.org/packages/8a/99/2e72fcb19404de43f9412880c542a8ef8651bd30183c85454d6ca14ebe56/tensorstore-0.1.84-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7d01775985fcaa2b0f100349766a953c5086e92e746bf395e936151d4d8f9ac", size = 14907896, upload-time = "2026-05-16T06:17:38.458Z" }, - { url = "https://files.pythonhosted.org/packages/25/d4/9a3964cdfdc5a15df6d0485694de9684c13990a5b0f5d88bfa365e0a2936/tensorstore-0.1.84-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b2ff5d5536a8a9b1596c51b9075cc9d40b4c4ea4e6cc03c0480111dbe5d956d", size = 19347021, upload-time = "2026-05-16T06:17:41.316Z" }, - { url = "https://files.pythonhosted.org/packages/43/19/70532cb2bf2f6fc3bf252f850bfb528b26eeb9c30c3cafffb075cbb7c77a/tensorstore-0.1.84-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c9108ae6c29adc90b72ca267ba2b577386c5e410ea2f8e87eabce5ebdad327e", size = 20970345, upload-time = "2026-05-16T06:17:43.874Z" }, - { url = "https://files.pythonhosted.org/packages/4e/22/a523e7576c83a6c35bd1415e5f4530b0f1e448c099d7e22684f55792755c/tensorstore-0.1.84-cp314-cp314-win_amd64.whl", hash = "sha256:4096220f4b9a2411c3751597dd8ced2f671d7a217575613c915191e19d5ea150", size = 13787429, upload-time = "2026-05-16T06:17:46.135Z" }, - { url = "https://files.pythonhosted.org/packages/2b/23/40b0a0a91973431770ac09a8b69039bd7a051169f6707b63a1c51ad36782/tensorstore-0.1.84-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:70284a7225d94adad5989de7f9238638ec9fec2bdd8c0fdb86d567f16d59e615", size = 16652804, upload-time = "2026-05-16T06:17:49.226Z" }, - { url = "https://files.pythonhosted.org/packages/01/99/2ea3b37864adb2e9f6e724c6959ab2b7f56aa4dad01964d4b32adf211e68/tensorstore-0.1.84-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98e10cae5b3fc0828967b8ddf36242b3b26ac8bc79880bc3e36346063259212a", size = 14990904, upload-time = "2026-05-16T06:17:51.464Z" }, - { url = "https://files.pythonhosted.org/packages/ff/26/fe72887d7b91e832bef3033d244c4c548993d1b6fb19177dff3895659c12/tensorstore-0.1.84-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98edbc57d453ba8ebcf0d19bc28e4de6de95922bee2eca0805955b0833b8ce26", size = 19365698, upload-time = "2026-05-16T06:17:53.748Z" }, - { url = "https://files.pythonhosted.org/packages/37/74/35a1d41343f86f6e2ef135e81f6b8107b9f16c777a3e8be9e3fbce541d18/tensorstore-0.1.84-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bd20de85c1b83dd3ca94db24e7bd449bdb055590a1b162b05691f6b81fff00f", size = 20986107, upload-time = "2026-05-16T06:17:56.571Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/26/16/a6530387ed22d07e974af2ef55e34fb19a7251a6911c85a0be029a4dcf9c/tensorstore-0.1.85.tar.gz", hash = "sha256:26698bded0278e98e0988eb8f7d76ad248762afc5f55a38b9122ffd1474e505f", size = 7317948, upload-time = "2026-08-05T15:35:56.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/81/612d3f58009ea1380f9befe2dced9d98c0a0fd608cd3e9d89389f9a04757/tensorstore-0.1.85-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:6b9453f28de853c804339bf882d0bc3eb523c4c55600b764239240bdec4460a8", size = 17015828, upload-time = "2026-08-05T15:35:03.426Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3c/74050e09a490c0cfed6016430226710d29fe4e165e12145368c7de4c6426/tensorstore-0.1.85-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af9189ca9f692bf83ce53e760a8b53fcf46ad0bf365930726faa0e301d0ab147", size = 15411026, upload-time = "2026-08-05T15:35:05.89Z" }, + { url = "https://files.pythonhosted.org/packages/88/7e/a1100ea66dbb028e0ea02f6d2e413e05285534d82d560f1f7d6145603640/tensorstore-0.1.85-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0e2f42d1e57df7e07655b819dd07f3de258fde97e39b896a53f089d7d7067e21", size = 19973651, upload-time = "2026-08-05T15:35:09.016Z" }, + { url = "https://files.pythonhosted.org/packages/78/49/c311f02b82299c6d79e18c7012c8b816141c54721253cbcba1c7c59550d4/tensorstore-0.1.85-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de27f2d6e063050f4283d1fdfe41e6c0ebc6ceacaab10ca2f7e9ecbf35221962", size = 21580735, upload-time = "2026-08-05T15:35:11.727Z" }, + { url = "https://files.pythonhosted.org/packages/88/da/3d66562291808e1edd433704bfdd4f212c1a6c53920293fb5f7296d644a5/tensorstore-0.1.85-cp312-cp312-win_amd64.whl", hash = "sha256:a5421480cd6ab144039c88fc7018ea5cefb8d00038e6dd2470cf776ef1bf45a5", size = 14129526, upload-time = "2026-08-05T15:35:14.98Z" }, + { url = "https://files.pythonhosted.org/packages/58/be/29c9c5d21a9fc7cae9e8c3cdaede865619a137921e633b38807085ac8b1f/tensorstore-0.1.85-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:7c6d5689948e5ff4bc220de3e239db3550f5e7c2355c6889746baa2c93f4b3ca", size = 17015970, upload-time = "2026-08-05T15:35:17.822Z" }, + { url = "https://files.pythonhosted.org/packages/89/03/a3d6fd62fb22b58eebc6741d31dfff1e5bc491935881a06d6b180efda6e1/tensorstore-0.1.85-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c0eeea5581a79fdc13b77efd2dfb35ff10ff67ee4f84d3ed2df0a7e250c3e6c", size = 15410397, upload-time = "2026-08-05T15:35:20.331Z" }, + { url = "https://files.pythonhosted.org/packages/15/39/c8aa7ecaa715e722358a2e45f77420646db527897eee1a2e2dbfa511c63c/tensorstore-0.1.85-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5dae40b25cf99543d466d054b99064354055c2813470440fe46503cbaf450a0", size = 19973413, upload-time = "2026-08-05T15:35:23.469Z" }, + { url = "https://files.pythonhosted.org/packages/93/f5/759503078567055731f747e6141bd878d1f706341a9d7a34b9eb6ad0ed50/tensorstore-0.1.85-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3b03f52c8982764133ddd045c05582608d2ad9011b3a20ff832680467697d6d", size = 21580016, upload-time = "2026-08-05T15:35:26.249Z" }, + { url = "https://files.pythonhosted.org/packages/07/74/91a1f9038e2c018f21ea52729ade7d700dde9f01d566b0ed528ae4a7f1d3/tensorstore-0.1.85-cp313-cp313-win_amd64.whl", hash = "sha256:5c7567c8101b3568a5d34f2a5e7235eeb78161a86588d039b5f5658cba6a0b2a", size = 14129625, upload-time = "2026-08-05T15:35:28.928Z" }, + { url = "https://files.pythonhosted.org/packages/91/f2/43f7c95524724e42042fd1e35dc51797277f4b5240fe9093583009a16ef6/tensorstore-0.1.85-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bb4533783df1596e362e0eeb5f8b79be77ea7f6930012701aa75795a61d2bd65", size = 17017251, upload-time = "2026-08-05T15:35:31.391Z" }, + { url = "https://files.pythonhosted.org/packages/d3/37/b00787f8fa0a4f5ade03e112b971b871f1d9bfc19759f22d91c86a68e282/tensorstore-0.1.85-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f486c88b5107157f4819856d9f09d94925096ff167382bfcd0525c089c997bf0", size = 15413971, upload-time = "2026-08-05T15:35:33.989Z" }, + { url = "https://files.pythonhosted.org/packages/1a/17/9cdf2f17db23bc412f39efbe615c163dbeb94121fb47aeff08e72a133f45/tensorstore-0.1.85-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52d4ff5c6db93721a8a3bc7c93e8a00ce2becd5d7b795881c3b71494d8354614", size = 19973625, upload-time = "2026-08-05T15:35:36.772Z" }, + { url = "https://files.pythonhosted.org/packages/ad/f6/557d714bb3ce13cd5115c24906d6732c251040dd4bcc96133fcb6f6a49db/tensorstore-0.1.85-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5398a9eda248eb0ed4fe2dad10fed28287ad14bf2ffc5a6f3022905ac0dadc78", size = 21581093, upload-time = "2026-08-05T15:35:39.88Z" }, + { url = "https://files.pythonhosted.org/packages/65/46/fee81370d763ff0f88c32291d3f1d4eb03cd133723ce5d9cfac8ddc0a489/tensorstore-0.1.85-cp314-cp314-win_amd64.whl", hash = "sha256:07245185b399402d139a9e7e90bd5938a08f5e33867efc91299e97c3e7fa0d0d", size = 14540718, upload-time = "2026-08-05T15:35:42.604Z" }, + { url = "https://files.pythonhosted.org/packages/97/ec/9a1beaf29e46b2b527e2130c98fd533729dee6b64f242906ddde1ad79891/tensorstore-0.1.85-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:66d2d85533a2b74b9b0a3b5faf51a19c417e3d592642b49b504cd92a34f00612", size = 17093402, upload-time = "2026-08-05T15:35:45.16Z" }, + { url = "https://files.pythonhosted.org/packages/b5/0d/cbc231244789b634a5796b1bdddc704806c94cdf13cc7ad2d66d8616ef53/tensorstore-0.1.85-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:19a3a809948a96eb44a6da72eef04f8ba44086d52f1e8122b84938890551fa2e", size = 15499976, upload-time = "2026-08-05T15:35:47.733Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e4/c6c573e4b75410bbd8ce541b1222f04fec9a87dff5298ee85b2267d0805b/tensorstore-0.1.85-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da1b05a99b568dbf8f807efe307d7832f31cb1db35b3bc4144f3740dc7a04cae", size = 19986971, upload-time = "2026-08-05T15:35:50.451Z" }, + { url = "https://files.pythonhosted.org/packages/66/91/02d93b2d718e33d0c50e06445ab7518b3b8f391dea5c55838f9f9ff9f9cc/tensorstore-0.1.85-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:82df9ad8e1df057f38203d12475a2929f36032a5a5224ac584851ed89e64622c", size = 21599959, upload-time = "2026-08-05T15:35:53.617Z" }, ] [[package]] @@ -5051,75 +5328,70 @@ wheels = [ [[package]] name = "tifffile" -version = "2026.5.15" +version = "2026.8.23" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/66/0aef917d525767a40edebe088f8ed6a4417e6eb489c58f6805bfa872636b/tifffile-2026.5.15.tar.gz", hash = "sha256:ee4f3e07ee0d8ff4745a8c735ac2b72caa3173c7d6059b00fdc3ff492a0b635b", size = 429998, upload-time = "2026-05-15T20:04:55.896Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/07/90078f49e60718d414d5440dc498301f11ff049458e65cf8d27c62a5c9d1/tifffile-2026.8.23.tar.gz", hash = "sha256:bd3c816f166f85c93329a54a0c9a1eccc9968a6a78f91d63b65d7b17675915f2", size = 446179, upload-time = "2026-08-23T18:45:05.976Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/6e/7d8850ff112f8f80d394ca45e89b975a3a43559d47af3137b767669b3294/tifffile-2026.5.15-py3-none-any.whl", hash = "sha256:6715515a53cabc0cefc5c9f13a0ae2c250e63e2ca784ce02d0b6c333810c2a17", size = 266665, upload-time = "2026-05-15T20:04:54.227Z" }, + { url = "https://files.pythonhosted.org/packages/82/38/05347ae8b1b268c068b3ca38822558038f38c6494604837d7ca3cbcceb9c/tifffile-2026.8.23-py3-none-any.whl", hash = "sha256:a03045afce67d97cb4ef56a1cd47eae6ab8115c7e84cfedeb5cadbfbb6d14fbe", size = 273795, upload-time = "2026-08-23T18:45:04.466Z" }, ] [[package]] name = "tinycss2" -version = "1.4.0" +version = "1.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "webencodings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/ae/2ca4913e5c0f09781d75482874c3a95db9105462a92ddd303c7d285d3df2/tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957", size = 88195, upload-time = "2025-11-23T10:29:10.082Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, + { url = "https://files.pythonhosted.org/packages/60/45/c7b5c3168458db837e8ceab06dc77824e18202679d0463f0e8f002143a97/tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661", size = 28404, upload-time = "2025-11-23T10:29:08.676Z" }, ] [[package]] name = "torch" -version = "2.12.0" +version = "2.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-bindings", marker = "sys_platform == 'linux'" }, - { name = "cuda-toolkit", extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, + { name = "cuda-bindings", marker = "python_full_version < '3.15' and sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, { name = "filelock" }, { name = "fsspec" }, { name = "jinja2" }, { name = "networkx" }, - { name = "nvidia-cublas", marker = "sys_platform == 'linux'" }, { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" }, { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" }, { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, { name = "setuptools" }, { name = "sympy" }, - { name = "triton", marker = "sys_platform == 'linux'" }, + { name = "triton", marker = "python_full_version < '3.15' and sys_platform == 'linux'" }, { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/bb/285d643f254731294c9b595a007eac39db4600a98682d7bca688f42ca164/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", size = 88010197, upload-time = "2026-05-13T14:55:35.414Z" }, - { url = "https://files.pythonhosted.org/packages/79/81/76debf1db1343bd929bbb5d74c89fb437c2ed88eb144712557e7bd3eea45/torch-2.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8fbef9f108a863e7722a73740998967e3b074742a834fc5be3a535a2befa7057", size = 426376751, upload-time = "2026-05-13T14:55:03.353Z" }, - { url = "https://files.pythonhosted.org/packages/de/f0/80026028b603c4650ff270fc3785bdef4bd6738765a9cc5a0f5a637d65a2/torch-2.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4b4f64c2c2b11f7510d93dd6412b87025ff6eddd6bb61c3b5a3d892ea20c4756", size = 532261691, upload-time = "2026-05-13T14:52:54.453Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c2/64b06cbb7830fb3cd9be13e1158b31a3f36b68e6a209105ee3c9d9480be0/torch-2.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:8b958caff4a14d3a3b0b2dfc6a378f64dda9728a9dad28c08a0db9ce4dafb549", size = 122988114, upload-time = "2026-05-13T14:54:42.153Z" }, - { url = "https://files.pythonhosted.org/packages/86/ca/01896c80ba921676aa45886b2c5b8d774912de2a1f719de48169c6f755cd/torch-2.12.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:90dd587a5f61bfe1307148b581e2084fc5bc4a06e2b90a20e9a36b81087ff16b", size = 88009511, upload-time = "2026-05-13T14:54:47.411Z" }, - { url = "https://files.pythonhosted.org/packages/a5/04/52bdaf4787eab6ac7d7f5851dff934e4def0bc8ead9c8fd2b69b3e529699/torch-2.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:864392c73b7654f4d2b3ae712f607937d0dbb1101c4555fbb41848106b297f39", size = 426383231, upload-time = "2026-05-13T14:53:32.129Z" }, - { url = "https://files.pythonhosted.org/packages/49/8a/94bdecd13f5aaa90d45920b89789d9fe7c6f4af8c3cdd7ce01fcb59908fc/torch-2.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5d6b560dfa7d56291c07d615c3bb73e8d9943d9b6d87f76cd0d9d570c4797fa6", size = 532269288, upload-time = "2026-05-13T14:53:49.423Z" }, - { url = "https://files.pythonhosted.org/packages/3e/2f/bdbaaa267de519ef1b73054bf590d8c93c37a266c9a4e24a01bd38b6918f/torch-2.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:3fee918902090ade827643e758e98363278815de583c75d111fdd665ebffde9f", size = 122987706, upload-time = "2026-05-13T14:54:00.335Z" }, - { url = "https://files.pythonhosted.org/packages/9b/ad/e95e822f3538171e22640a7fbe839a1fdb666600bf6487025de2ff03b11a/torch-2.12.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:10ee1448a9f304d3b987eb4656f664ba6e4d7b410ca7a5a7c642199777a2cf88", size = 88319556, upload-time = "2026-05-13T14:54:05.574Z" }, - { url = "https://files.pythonhosted.org/packages/b7/07/055d06d985b445d67422d25b033c11cf55bbb81785d4c4e68e28bca5820e/torch-2.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:af68dbf403439cae9ceaeaaf92f8352b460787dcd27b92aa05c40dd4a19c0f1e", size = 426397656, upload-time = "2026-05-13T14:52:38.84Z" }, - { url = "https://files.pythonhosted.org/packages/43/94/b0b4fdc3014122e0a7302fb90086d352aa48f2576f0b252561ebb38c01a8/torch-2.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:a6a2eebb237d3b1d9ad3b378e86d9b9e0782afdea8b1e0eba6a13646b9b49c07", size = 532183124, upload-time = "2026-05-13T14:53:16.178Z" }, - { url = "https://files.pythonhosted.org/packages/d8/c8/052405e6ad05d3237bfe5a4df78f917773956f8e17813a2d44c059068b74/torch-2.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2140e373e9a51a3e22ef62e8d14366d0b470d18f0adf19fdc757368077133a34", size = 123232462, upload-time = "2026-05-13T14:52:27.26Z" }, - { url = "https://files.pythonhosted.org/packages/67/dc/ac069f8d6e8be701535921141055293b0d4819d3d7f224a4612cf157c7f9/torch-2.12.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f7dfae4a519197dfa050e98d8e36378a0fb5899625a875c2b54445005a2e404e", size = 88027282, upload-time = "2026-05-13T14:53:05.258Z" }, - { url = "https://files.pythonhosted.org/packages/33/c3/1c1eb00e34555b536dddf792676026a988d710ed36981aa00499b36b0620/torch-2.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:891c769072637c74e9a5a77a3bc782894696d8ffec83b938df8536dee7f0ba78", size = 426386961, upload-time = "2026-05-13T14:51:28.406Z" }, - { url = "https://files.pythonhosted.org/packages/cd/d4/7e730dba0c7032a4154dc9056b76cf9625515e030e269cfbf8098fcfee7d/torch-2.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e2ad3eb85d39c3cab62dfa93ed5a73516e6a53c6713cb97d004004fe089f0f1f", size = 532272265, upload-time = "2026-05-13T14:51:59.308Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b4/92c80d1bbfee1c0036c06d1d2155a3065bd2423134c83bf8a47e65cd6b9b/torch-2.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:c66696857e987efb8bc1777a37357ec4f60ab5e8af6250b83d6034437fa2d8f3", size = 122987138, upload-time = "2026-05-13T14:51:45.942Z" }, - { url = "https://files.pythonhosted.org/packages/7b/78/2e12b37ce50a19a037d7bc62d652a5a8f27385a7b05859d6bc9204f20cfe/torch-2.12.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:b4556715c8572758625d62b6e0ae3b1f76c440221913a6fb5e100f321fb4fb02", size = 88320100, upload-time = "2026-05-13T14:51:39.955Z" }, - { url = "https://files.pythonhosted.org/packages/56/5e/83c450ec7b0bb40a7b74611c1b5440f9260e33c54c90d556fd4a1f0fd955/torch-2.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a43ac605a5e13116c72b64c359644cce0229f213dde48d2ae0ae5eb5becf7feb", size = 426391871, upload-time = "2026-05-13T14:52:14.989Z" }, - { url = "https://files.pythonhosted.org/packages/c9/e9/1a0b575d98d0afedd8f157d23fa3d2759421483660448e60d0a4b10b6daa/torch-2.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6a7512adfdd7f6732e40de1c620831e3c75b39b98cef60b11d0c5f0a76473ec5", size = 532192241, upload-time = "2026-05-13T14:51:07.795Z" }, - { url = "https://files.pythonhosted.org/packages/88/21/afadd25ecd81b3cea1e11c73cf1ab41a983a50271548c3ec7ec3b9efc3e9/torch-2.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:5f96b63f8287f66a005dd1b5a6abba2920f11156c5e5c4d815f3e2050fd1aa16", size = 123231092, upload-time = "2026-05-13T14:51:18.854Z" }, + { url = "https://files.pythonhosted.org/packages/c4/3a/ed0f4d4d1dcde03bced7aac9a28e800abcdc0cbd06b6775044c9fbd877b7/torch-2.13.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2fe228aba290d14b9f31b049be550dbd469c3fd3013d7a19705b30454da97027", size = 111213045, upload-time = "2026-07-08T16:05:22.997Z" }, + { url = "https://files.pythonhosted.org/packages/df/a9/f6a2a4d763ff1df02e9a64c477029db614295bc9367f4131223791ccc243/torch-2.13.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:572df8be8ffb4599c88cbd6a0726f1f854f4da65d2e3c09f0e2c2283333cd6d4", size = 427210998, upload-time = "2026-07-08T16:04:37.708Z" }, + { url = "https://files.pythonhosted.org/packages/f3/82/fea946351658e6534db52d2cc12bc53087cbf87f9440c5f180f367c1950b/torch-2.13.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:796633c4cdf0fe2cdced72d8f88f22e73dbcfce83132763162f6d4bff13b820b", size = 526605292, upload-time = "2026-07-08T16:04:22.81Z" }, + { url = "https://files.pythonhosted.org/packages/21/d6/e8f3c6f7e01f626f77259de9860d2a78bc84c40539e28e79b7e98b0bb659/torch-2.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:024c6cc0c1b085f2f91f20a3dc27b0471d021c31ce84b81be3afdc39f791fd9d", size = 122057313, upload-time = "2026-07-08T16:03:53.43Z" }, + { url = "https://files.pythonhosted.org/packages/0d/fa/c1c10b7aff4a9a3e8956d4f0a5f468fa6db7abc3208805719076772b4833/torch-2.13.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:33449899ce5496c1b84b4853179d94fd102028ae1407314d9fb956bb79e70d09", size = 111213743, upload-time = "2026-07-08T16:03:28.579Z" }, + { url = "https://files.pythonhosted.org/packages/11/18/9ecb37b56293a0be8d80f810bf672a72fe7e02f8b475d5ef1b9bf8a0d748/torch-2.13.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:1e09d6a722504957c694faceca843acde562786df1144ebcc5a74075ec7f6005", size = 427213008, upload-time = "2026-07-08T16:03:44.106Z" }, + { url = "https://files.pythonhosted.org/packages/d4/5a/7c50ba1b7b713d71d34669c6d13dab0a11531a3eceb0307a5162dbfec0f7/torch-2.13.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:a3a9a21312872af8a26950b2c15680335a386a1f56ed03e780653d78b9607e9e", size = 526602329, upload-time = "2026-07-08T16:03:12.649Z" }, + { url = "https://files.pythonhosted.org/packages/91/3d/e7adcc6aaf36961cd18f56cf8ad0f3058c3a5c84ccf391762176c94581b8/torch-2.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:49b58f1e2c52440abb6f17c28f0335fe6c6d01ad1a7f55b0183b81e4b34d64e6", size = 122057920, upload-time = "2026-07-08T16:03:01.808Z" }, + { url = "https://files.pythonhosted.org/packages/36/76/6dcc7f0c07052102dd36f83cbc5800842a909c8c3fbf1a7f8a5844954de9/torch-2.13.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d849b390e07d8d333ce8ecaf91b273c656c598379a19c9acf1318a883f6b391c", size = 111227066, upload-time = "2026-07-08T16:03:33.6Z" }, + { url = "https://files.pythonhosted.org/packages/e9/09/2c10e8cd0e00fa5d23c052df6ce467eaa7182399f5e0f824f1e4ff42ccae/torch-2.13.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:a3893dc2da0a972a8ca5d698c85a9f967559ac5f8ee1797b77408aa8734d073c", size = 427226309, upload-time = "2026-07-08T16:02:53.127Z" }, + { url = "https://files.pythonhosted.org/packages/76/c6/22c2102bbef14ca6a6cb4c20e42f088e49c5f812be4e160ae57502e325f9/torch-2.13.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:49f1ea385c754e54919408a9bb3b5a72b0b755bbe2c916c1d6f70afbec4908a2", size = 526614507, upload-time = "2026-07-08T16:02:16.441Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0c/7d1deb6bce5bc3e6042caf39100ac768eba3b9a098e1dddd16f75bd6489b/torch-2.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:4f8573e3ce9ebcd53fe922f01077a6085ccdfbe5f12fd215883a9d87d7a744fd", size = 122051871, upload-time = "2026-07-08T16:03:23.521Z" }, + { url = "https://files.pythonhosted.org/packages/f4/ce/aa8b7f9949d32e0f2f624f342bc3b48112c1b8a130288465938bc83bcbf9/torch-2.13.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c28def70706c2f9ecc752574766e8ae4da9b810ab6676b611166761a78a9f1e1", size = 111537025, upload-time = "2026-07-08T16:02:44.28Z" }, + { url = "https://files.pythonhosted.org/packages/69/d1/491e3a0389430946145888b0203f2b6a759ce2a61481b96a85c2da4f2ced/torch-2.13.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:31061ff56ed8fbf26c749806905aeb749ebeb819810fd5d52508aa5afd90dddc", size = 427219769, upload-time = "2026-07-08T16:02:31.18Z" }, + { url = "https://files.pythonhosted.org/packages/9a/1d/38006e045bf0a1fc28ef01e757c554e59e59a8770c284bc4f47b14e60441/torch-2.13.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:cc26eead4cf51d0b544e31e364dcf000846549c273bd148936fe9d24d29acb92", size = 526571320, upload-time = "2026-07-08T16:01:59.348Z" }, + { url = "https://files.pythonhosted.org/packages/56/94/655c91992a882bd5071aa0b5d22a07dbb130d801e872be97c0b627a7c693/torch-2.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:a7de8a313090dc5c7d7ba4bfe5c3be222528f9a4dba1acc83bddb1157360c4b8", size = 122306773, upload-time = "2026-07-08T16:02:39.832Z" }, ] [[package]] name = "torchvision" -version = "0.27.0" +version = "0.28.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -5127,111 +5399,105 @@ dependencies = [ { name = "torch" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c8/5cd91932f7f3671b0743dc4ae1a4c16b1d0b45bf4087976277d325bda718/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", size = 1758824, upload-time = "2026-05-13T14:57:15.227Z" }, - { url = "https://files.pythonhosted.org/packages/d9/36/7fb7d19477b3d93283b52fea11fa8ee30ab9064a08c97b4a6b91445e26cb/torchvision-0.27.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65772ff3ec4f4f5d680e30019835555dd239e7fefee4b0a846375fe1cb1592ef", size = 7831034, upload-time = "2026-05-13T14:57:06.483Z" }, - { url = "https://files.pythonhosted.org/packages/62/43/dfd894c3f8b01b5b33fde990f0159c1926ebc7b6e2c4193e2efb7da3c4cb/torchvision-0.27.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7a9966a088d06b4cf6c610e03be62de469efa6f2cd2e7c7eed8e925ed6af59ac", size = 7579774, upload-time = "2026-05-13T14:56:59.337Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0c/722e989f9cf026e97ef7cb24a9bb1859e099f72d247ae35388fb89729f73/torchvision-0.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c037709072ca9b19750c0cbe9e8bb6f91c9a1be1befa26df33e281deccbd8c7", size = 4021073, upload-time = "2026-05-13T14:57:00.848Z" }, - { url = "https://files.pythonhosted.org/packages/d8/ae/36547812e6e047c1d80bcacd1b17a340612b08a6e876e0aabf3d0b9228b0/torchvision-0.27.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:41d6dae73e1af09fa82ded597ae57f2a2314285acde54b25890a8f8e51b999d7", size = 1758826, upload-time = "2026-05-13T14:57:05.262Z" }, - { url = "https://files.pythonhosted.org/packages/ae/30/32c4ea842738728a14e3df8c576c62dedcf5ae5cb6a5c984c6429ebe7524/torchvision-0.27.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:70f071c6f74b60d5fe8851636d8d4cd5f4fa29d57fd9348a87a6f17b990b95ba", size = 7789501, upload-time = "2026-05-13T14:56:57.786Z" }, - { url = "https://files.pythonhosted.org/packages/f6/24/4d0d48684251bd0673f87d633d5d88ab00227983b00591156eed2f86c8d5/torchvision-0.27.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:aaafa6962c9d91f42503de1957d6fa349907d028c06f335bd95da7a5bc57147d", size = 7579868, upload-time = "2026-05-13T14:56:41.618Z" }, - { url = "https://files.pythonhosted.org/packages/ba/da/e6edd051d2ba25adf23b120fa97f458dff888d098c51e84724f17d2d1470/torchvision-0.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:aee384a2782c89517c4ab9061d2720ba59fd2ffe5ef89d0a149cc2d43abdf521", size = 4092700, upload-time = "2026-05-13T14:57:09.729Z" }, - { url = "https://files.pythonhosted.org/packages/fa/23/95dfa40431360f42ca949bf861434bed51164adfa8fb9801e05bf3194f50/torchvision-0.27.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:c5121f1b9ab09a7f73e837871deb8321551f7eaeb19d87aa00de9191968eae44", size = 1845008, upload-time = "2026-05-13T14:57:03.768Z" }, - { url = "https://files.pythonhosted.org/packages/23/b9/9dbdf76b2b49a75ba8088df6f7c755bdb520afb6c6dbac0102b46cde5e99/torchvision-0.27.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:1c01f0d1091ae22b9dfc082b0a0fe5faaf053686a29b4fb082ba7691375c73cf", size = 7791430, upload-time = "2026-05-13T14:56:56.206Z" }, - { url = "https://files.pythonhosted.org/packages/5c/6a/e4a16cf2f3310c2ea7760dc5d9054496844391e0f4c1fae87fefac2f3d9e/torchvision-0.27.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dadea3c5ecfd05bbb2a3312ab0374f213c58bf6459cb059122e2f4dfe13d10ed", size = 7668441, upload-time = "2026-05-13T14:57:02.127Z" }, - { url = "https://files.pythonhosted.org/packages/00/70/01b6461117a6a94b5af3f8ee166bb0f045056f3cf187750c110dabfdfffa/torchvision-0.27.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a49e55055a39a8506fe7e59850522cab004efb2c3839f6057658889c1d69c815", size = 4141602, upload-time = "2026-05-13T14:56:53.449Z" }, - { url = "https://files.pythonhosted.org/packages/92/22/c0633677b3b3f3e69554a21ac087bf705f829c40cd5e3783507b8c006681/torchvision-0.27.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:c1fac0fc2a7adf29481fc1938a0e7845c57ba1147a986784109c4d98f434ea8c", size = 1758818, upload-time = "2026-05-13T14:56:54.988Z" }, - { url = "https://files.pythonhosted.org/packages/48/e8/55f9d9667b56dae470e69e31beac9b00d458ea393feec1aae95cc4f3f1c9/torchvision-0.27.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:cbf89764fc76f3f17fbf80c12d5a89c691e91cb9d82c38412aaf0568655ffb19", size = 7789667, upload-time = "2026-05-13T14:56:48.858Z" }, - { url = "https://files.pythonhosted.org/packages/00/bc/6f8681daf3bbc4c315bb0005110f99d28e3ecd675bf9c8f2c0d393fbac7a/torchvision-0.27.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:91f61b9865423037c327eb56afa207cc72de874e458c361840db9dcf5ce0c0eb", size = 7579848, upload-time = "2026-05-13T14:56:38.209Z" }, - { url = "https://files.pythonhosted.org/packages/19/6c/8d8020e6bd1e46c53e487c9c4e9457a07f2ee28931028fb5d71e2da40adc/torchvision-0.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:5bb82fc3c55daf1788621e504310b0a286f1069627a8742f692aebb075ef25a7", size = 4119284, upload-time = "2026-05-13T14:56:46.625Z" }, - { url = "https://files.pythonhosted.org/packages/8d/7e/e78c48662a8d551606efdbe11c6b9c1d6d2391b92cd0e4591b9e6a2412b8/torchvision-0.27.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:2c4099a15150143b9b034730b404a56d572efe0b79489b4c765d929cb4eac7f3", size = 1758828, upload-time = "2026-05-13T14:56:52.293Z" }, - { url = "https://files.pythonhosted.org/packages/21/dd/d03ee9f9ee7bf11a8c7c776fb8e7fd6102f59c013791a2a4e5175bd6cba7/torchvision-0.27.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:b4c6bb0a670dcba017b3643e21902c9b8a1cc1c127d602f1488fa29ec3c6e865", size = 7790618, upload-time = "2026-05-13T14:56:44.721Z" }, - { url = "https://files.pythonhosted.org/packages/39/08/4002336a74742be70728603ec1769feb2b55e0d19c532c9ec9f92008de76/torchvision-0.27.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1c2db4bde82bc48ebff73436a6adf34d4f809448268a70d9a1285f5c8f92313d", size = 7580217, upload-time = "2026-05-13T14:56:43.274Z" }, - { url = "https://files.pythonhosted.org/packages/ed/cb/4dd4783eb3565f526ba6e64b6f6ca26c00eacc924cdfe60455db9d91b84b/torchvision-0.27.0-cp314-cp314t-win_amd64.whl", hash = "sha256:72bf547e58ddb948689734eed6f4b6a2031f979dba4fb08e3690688b392e929f", size = 4226392, upload-time = "2026-05-13T14:56:40.235Z" }, + { url = "https://files.pythonhosted.org/packages/15/49/c1cab1ecbb3ff1a380a3f99283db1dee61b8afe354f6352c643b65937130/torchvision-0.28.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:e9f54c30cd52e3ef7fd034cc69b7bb7e0964e1c8f8743e018ab92e95b40f9eee", size = 1856020, upload-time = "2026-07-08T16:07:52.182Z" }, + { url = "https://files.pythonhosted.org/packages/f0/4c/95233776e2def960e5abb7a07931230a545f43717a56a1e1140162033598/torchvision-0.28.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:5cf78ebc401ce64ae19b8c55de866bb836797d559a4de9c25ccbe74cfa642d3a", size = 7842127, upload-time = "2026-07-08T16:07:53.446Z" }, + { url = "https://files.pythonhosted.org/packages/93/e4/e9b2495d0d57b9f60d63c57d0a910410a81b4b073bf70917bef815291119/torchvision-0.28.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:028a3d481b37d785605620d7cdad897064c5a55bae2aa1f2658766333e291940", size = 7675040, upload-time = "2026-07-08T16:07:58.017Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9c/55ed9cb6dfe3ee9c837df5cd0e758372e5829aa38b8dd71343aa632cc4e2/torchvision-0.28.0-cp312-cp312-win_amd64.whl", hash = "sha256:87dc16b2df427c1318ad335f1e2be2b3b15b2cf20f7934c83b0505a48425ee5d", size = 4085785, upload-time = "2026-07-08T16:07:50.928Z" }, + { url = "https://files.pythonhosted.org/packages/20/55/08a726c14c67b37c8aca04b077766909f1c7ed23f76116884fe63b9bd033/torchvision-0.28.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d483b4aa3f5237569053f749cd1a2b5bb548ca456e40461a5dd087f21149d123", size = 1856021, upload-time = "2026-07-08T16:07:45.386Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/40beacd53809194f5259e590d1afaeaa8ad57da15f77c646e6560bcc4616/torchvision-0.28.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:bb6dd6918460ed89cc7644adcc2402991474d6933cf1ce92b390641cb233fddf", size = 7797014, upload-time = "2026-07-08T16:07:43.04Z" }, + { url = "https://files.pythonhosted.org/packages/32/db/062cdb5a84380a60439775311fff34d89229760d2a50680393dc18699956/torchvision-0.28.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad7b3a439265cc3739a4ab5b4c998c0e38ea99c0ee7ca4dea35c5d0b099ec237", size = 7674669, upload-time = "2026-07-08T16:07:38.91Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a6/b4081e2d04e1541abf82785ac9e5178a494c19330391f551356c8c18b7b3/torchvision-0.28.0-cp313-cp313-win_amd64.whl", hash = "sha256:7e9dd6f60d6e15f8dc27d4f877fdb6002fc70d70272412135f1c2ff9cfa08d3b", size = 4157380, upload-time = "2026-07-08T16:07:40.22Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b9/da40eca5bbe9596c12ae9899ab7abaf887f5e20f29d08b924b4633714821/torchvision-0.28.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3bd9dba55224a9db4a2d77f6feaa5651770d8c8e86d3d0ddb0fa6bec54c8712b", size = 1856014, upload-time = "2026-07-08T16:07:44.282Z" }, + { url = "https://files.pythonhosted.org/packages/06/d6/313aafd3df4eaf5f330211bd4e75b7598bddbfee4f55580d3b58536e1b20/torchvision-0.28.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:89f90e29b0966352811b12589f3a3c61943bf2bb9487b9d7bbec10efb1096bb5", size = 7796873, upload-time = "2026-07-08T16:07:30.907Z" }, + { url = "https://files.pythonhosted.org/packages/b3/41/31f8e959ab8f942600b6357f8999c21d779d5fd3304b0fd204ff4b518239/torchvision-0.28.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:36beb0782976906069ca03d4c9aacaf4b6b838b06ed6c20960ea9c51cce7acdd", size = 7674634, upload-time = "2026-07-08T16:07:29.657Z" }, + { url = "https://files.pythonhosted.org/packages/15/15/4c5115253fd470672cdac0a1cf139e06b4f3e29d041238a2b255937f63be/torchvision-0.28.0-cp314-cp314-win_amd64.whl", hash = "sha256:3557cc7b539f46dabcda2b6f2b14017ccbeef024de466d4fc5835fc3f287f769", size = 4184005, upload-time = "2026-07-08T16:07:35.805Z" }, + { url = "https://files.pythonhosted.org/packages/6a/80/822a6163da716f8a78141cf6678d74e26a572285d4ea866ef8aa657bb307/torchvision-0.28.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:09ce8f56e81f19b9c378ae7bb109f83f6659fd8bc3cd14241a48e4af46e9ed49", size = 1856011, upload-time = "2026-07-08T16:07:33.404Z" }, + { url = "https://files.pythonhosted.org/packages/7f/d1/cd3f9463b39a790ec8c0c2f6e6c8061edb1562114d04fcdfa786ed889345/torchvision-0.28.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:62c7d110f86a039245b587e4fae60278c649f3bd42ff79cfbc1178eca4e72542", size = 7796742, upload-time = "2026-07-08T16:07:28.339Z" }, + { url = "https://files.pythonhosted.org/packages/d9/82/3e0a7ad18e99831e2d7f4713d3be717b7159ff5a920862dd5c23c454aa71/torchvision-0.28.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:904cf89af220f8c6b2ed0296bb5065b474ce43b77558e48b2bf9de8b0ba17204", size = 7675526, upload-time = "2026-07-08T16:07:34.572Z" }, + { url = "https://files.pythonhosted.org/packages/18/d4/23aea03b28297bc66a4461f55ae4296368a9d85fa9a454bafcb2a5348bd7/torchvision-0.28.0-cp314-cp314t-win_amd64.whl", hash = "sha256:46f581979c010ad6da6bd85ee602aa707e1ff44312670223b7a0ee517ad06d47", size = 4291452, upload-time = "2026-07-08T16:07:32.236Z" }, ] [[package]] name = "tornado" -version = "6.5.6" +version = "6.5.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139, upload-time = "2026-05-27T15:35:54.646Z" } +sdist = { url = "https://files.pythonhosted.org/packages/10/d3/343e5bb989d6515b1646cf3d40135d73f3d5e45339bded401b56cdac24dd/tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f", size = 520493, upload-time = "2026-08-07T02:12:42.971Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737, upload-time = "2026-05-27T15:35:38.122Z" }, - { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899, upload-time = "2026-05-27T15:35:40.519Z" }, - { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964, upload-time = "2026-05-27T15:35:42.106Z" }, - { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935, upload-time = "2026-05-27T15:35:43.906Z" }, - { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767, upload-time = "2026-05-27T15:35:45.793Z" }, - { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174, upload-time = "2026-05-27T15:35:47.485Z" }, - { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230, upload-time = "2026-05-27T15:35:49.322Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667, upload-time = "2026-05-27T15:35:51.194Z" }, - { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690, upload-time = "2026-05-27T15:35:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/f2/d5/007086fd8df5489338e204f65adce33fd4f21a4999dbb2b9cff2f897b5f4/tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403", size = 449487, upload-time = "2026-08-07T02:12:28.682Z" }, + { url = "https://files.pythonhosted.org/packages/70/c8/5a24a99495903f594f6a199dd7beead1cbc0a13e2cb9102727bcaaf2a997/tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb", size = 447649, upload-time = "2026-08-07T02:12:30.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/de/f2e733f386b85962d1b1dc82cd63d169b5b4580062b35397eac9244a41fe/tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58", size = 450707, upload-time = "2026-08-07T02:12:31.95Z" }, + { url = "https://files.pythonhosted.org/packages/0b/94/20efeee9a01c141e9ac47c397f81679dfda24b32768fc4fff24e76d36c2c/tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808", size = 451677, upload-time = "2026-08-07T02:12:33.512Z" }, + { url = "https://files.pythonhosted.org/packages/42/ec/a96ccb8ccf0de2b7bc2c5fa1608a4803735018242e90c4882365a9fd418f/tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22", size = 451510, upload-time = "2026-08-07T02:12:35.346Z" }, + { url = "https://files.pythonhosted.org/packages/29/b5/93185859245ad3f00e62175f29607346788b696369347f0146e0421286bb/tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195", size = 450917, upload-time = "2026-08-07T02:12:36.963Z" }, + { url = "https://files.pythonhosted.org/packages/97/cf/fe33cf062834487d34d1559746a4a12521033c22645b6d74d4bca702e018/tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836", size = 451952, upload-time = "2026-08-07T02:12:38.512Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e1/468ad54333e92ccb62627e62cb88e5fc14a2171daa67ed47b1b8542d5b86/tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee", size = 452391, upload-time = "2026-08-07T02:12:39.971Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, ] [[package]] name = "tqdm" -version = "4.67.3" +version = "4.70.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, ] [[package]] name = "traitlets" -version = "5.15.0" +version = "5.16.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/22/40f55b26baeab80c2d7b3f1db0682f8954e4617fee7d90ce634022ef05c6/traitlets-5.15.0.tar.gz", hash = "sha256:4fead733f81cf1c4c938e06f8ca4633896833c9d89eff878159457f4d4392971", size = 163197, upload-time = "2026-05-06T08:05:58.016Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/2e/a7fbfe268c8a3b32546930c0297c101d65a4a14c304ad5790a9f478f0e4e/traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1", size = 166137, upload-time = "2026-08-03T08:32:36.848Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/98/a9937a969d018a23badfea0b381f66783649d48e0ea6c41923265c3cbeb3/traitlets-5.15.0-py3-none-any.whl", hash = "sha256:fb36a18867a6803deab09f3c5e0fa81bb7b26a5c9e82501c9933f759166eff40", size = 85877, upload-time = "2026-05-06T08:05:55.853Z" }, + { url = "https://files.pythonhosted.org/packages/ad/66/0d785f0bc5e4315a96c989bb476d0fc07ea4f85132550c7b156ca2035d52/traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b", size = 86211, upload-time = "2026-08-03T08:32:34.48Z" }, ] [[package]] name = "triton" -version = "3.7.0" +version = "3.7.1" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/13/ec05adfcd87311d532ba61e3af143e8be59fcd26675884c4682841406a20/triton-3.7.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4bf49b00a7a377a68a6da603a876e797614e6455a80e9021669c476a953ad9a", size = 188505104, upload-time = "2026-05-07T19:05:09.843Z" }, - { url = "https://files.pythonhosted.org/packages/62/7b/468a576e35beef1426e0828e28e9ba9e65f5474d496f16ee126c15646324/triton-3.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f111161d49bf903c0eaedde3962353a3d841c08a836839b7cc1025b8426efcf", size = 201457567, upload-time = "2026-05-07T18:46:13.505Z" }, - { url = "https://files.pythonhosted.org/packages/01/e1/a59a583de59b8f62c495d67c80ee3ea97d09e91ac80c4c6e76456ed8d8ac/triton-3.7.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abdf6beaa89b1bcfb9a43cd990536ce66091a997841a4814b260b7bee4c88c3c", size = 188503209, upload-time = "2026-05-07T19:05:17.935Z" }, - { url = "https://files.pythonhosted.org/packages/30/b1/b7507bb9815d403927c8dd51d4158ed2e11751a92dbc118a044f247b6848/triton-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a35d7afe3f3f058e7ec49fcce09794049e0ffc5c59019ac25ec3413741b8c4e7", size = 201453566, upload-time = "2026-05-07T18:46:20.427Z" }, - { url = "https://files.pythonhosted.org/packages/a6/8f/0bea7a6a0c989315c9135a1d7fb37e41905cfb3a17cbc1f10044ebd4cc3a/triton-3.7.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc1d61c172d257db80ddf42595131fb196ad2e9bdd751e90fe2ef13531734e8b", size = 188612899, upload-time = "2026-05-07T19:05:24.955Z" }, - { url = "https://files.pythonhosted.org/packages/e1/02/d96f57828d0912aec733b9bc7e0e7dbfd2c6f079a8fa433ac25cb93d1a30/triton-3.7.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70fb9bbdc9f400afc54bbf6eb2670af28829a6ae3996863317964783141daf56", size = 201553816, upload-time = "2026-05-07T18:46:27.49Z" }, - { url = "https://files.pythonhosted.org/packages/40/fb/82a802dac4689f2a2fb2e69302e6a138eecc3e175bbe976ba3cfc717683a/triton-3.7.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a44a8476d0d3571eac4e4d1048e1ff75aad81a09ff4602ccfc56c6dea1672e", size = 188507879, upload-time = "2026-05-07T19:05:32.209Z" }, - { url = "https://files.pythonhosted.org/packages/8f/af/9904ec6d3c93d9b24e5ec360445bbdf758b7f00bfbeedb89cb0eb64eb8bb/triton-3.7.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9b85e72968a9d8bba5ddb24e9b64aaabaf48affb042f2755cb7cfa92b7531ce", size = 201460637, upload-time = "2026-05-07T18:46:34.749Z" }, - { url = "https://files.pythonhosted.org/packages/a1/f9/4835a8ea746b88727d8899f4e3ccce4f9cacb38abfc3bb0a638266c53111/triton-3.7.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18a160de426fd99f92b0baf509045360afbd3bfaa0b4a5171dde800ec9f09684", size = 188608706, upload-time = "2026-05-07T19:05:39.218Z" }, - { url = "https://files.pythonhosted.org/packages/c1/68/fa86e5a39608000f645535b2c124920126327ab731f8c4fafd5b07ff8d4b/triton-3.7.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce061073102714b725f3660ec6939d94a1da7984b3aa99c921417cae273672f5", size = 201546766, upload-time = "2026-05-07T18:46:42.088Z" }, + { url = "https://files.pythonhosted.org/packages/94/fa/f856e24deb462d5f18bd4b5a746957862ab9b6ee5834bda60605ec348366/triton-3.7.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9497f2e696ee368862a181a90b2dcc03ca978cc4f602abd67c7d81022a6988e1", size = 184692359, upload-time = "2026-06-17T20:03:48.288Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/fb96d15db6f36d6eae4cafb998c2e0353bf59d7c4ea1662d7497f269134a/triton-3.7.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e40869937a68206ec70d7f25bb7ec6433cb083f9135e1f36dbd318dc449a728", size = 197719725, upload-time = "2026-06-17T19:53:20.419Z" }, + { url = "https://files.pythonhosted.org/packages/00/42/c5089d4d9327fcd1e862c599cc2927f39418f84dd11a84cb2ccff9d4787a/triton-3.7.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cdbfc09d9ec58bc5e68321525653220de7515c199e7a8097a97c85e62b52cd0a", size = 184694629, upload-time = "2026-06-17T20:03:53.444Z" }, + { url = "https://files.pythonhosted.org/packages/07/42/2c3ac59253ae8892b6f307875263dd23dc875cdf732d3aea40d6d41fb7cb/triton-3.7.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58c0e131da05134a2a4788ccbcc0c1105cf0f54c8e98f19e34cd465396dc15eb", size = 197729241, upload-time = "2026-06-17T19:53:27.801Z" }, + { url = "https://files.pythonhosted.org/packages/40/71/e01aa7ad573883ed9456f130226babdec70b005e098c4d6226a6238e761b/triton-3.7.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe4ea396a06171f1f1f58cbd39c70b09294398f7dd7c620939bab54ad6f934fa", size = 184705764, upload-time = "2026-06-17T20:03:59.064Z" }, + { url = "https://files.pythonhosted.org/packages/a4/09/5683146fda6a2b569deb78ccfd8fbfea8bfe55f726b081c0a6bb18dd6f28/triton-3.7.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2020153b08280415ec0da6607834e79166442147e78e144df06b508c75b186d2", size = 197729537, upload-time = "2026-06-17T19:53:35.516Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f8/448220c3092019f9fdfab39ec47985968181d67da34b44f6a7f6280a5cbb/triton-3.7.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c58e4c61f0c73b5dba3b5d19b4a7093c32f90dc18b2a7f121a7c16ccd31107b7", size = 184814760, upload-time = "2026-06-17T20:04:04.984Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ac/229b7d4589d2e5937310e72c6d46e89599d16a4a12b479ffa1499fee8eb8/triton-3.7.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10ba85fa2cca4a2fbdeb36bf1cb082f2c252bda55bf9fccd74f65ec5bc647e68", size = 197824404, upload-time = "2026-06-17T19:53:42.772Z" }, ] [[package]] name = "typing-extensions" -version = "4.15.0" +version = "4.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ] [[package]] name = "typing-inspection" -version = "0.4.2" +version = "0.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, ] [[package]] name = "tzdata" -version = "2026.2" +version = "2026.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, ] [[package]] @@ -5369,11 +5635,11 @@ wheels = [ [[package]] name = "wcwidth" -version = "0.7.0" +version = "0.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/ee/afaf0f85a9a18fe47a67f1e4422ed6cf1fe642f0ae0a2f81166231303c52/wcwidth-0.7.0.tar.gz", hash = "sha256:90e3a7ea092341c44b99562e75d09e4d5160fe7a3974c6fb842a101a95e7eed0", size = 182132, upload-time = "2026-05-02T16:04:12.653Z" } +sdist = { url = "https://files.pythonhosted.org/packages/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253, upload-time = "2026-06-29T18:11:11.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/52/e465037f5375f43533d1a80b6923955201596a99142ed524d77b571a1418/wcwidth-0.7.0-py3-none-any.whl", hash = "sha256:5d69154c429a82910e241c738cd0e2976fac8a2dd47a1a805f4afed1c0f136f2", size = 110825, upload-time = "2026-05-02T16:04:11.033Z" }, + { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166, upload-time = "2026-06-29T18:11:09.888Z" }, ] [[package]] @@ -5387,11 +5653,11 @@ wheels = [ [[package]] name = "webencodings" -version = "0.5.1" +version = "0.6.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/a0/8fd707bcb776a7be556bad06a2ea5fb9bd519df78ef8e26f70ccf0f38bff/webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910", size = 15001, upload-time = "2026-08-15T14:22:57.549Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/77/c6/040cbc72480d789a5f40d63fb484d3106554c4dfa2d2b70ad5022057750f/webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b", size = 8745, upload-time = "2026-08-15T14:22:56.31Z" }, ] [[package]] @@ -5417,89 +5683,89 @@ wheels = [ [[package]] name = "widgetsnbextension" -version = "4.0.15" +version = "4.0.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b7404b7aefcd7569a9c0d6bd071299bf4198ae7a5d95/widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9", size = 1097402, upload-time = "2025-11-01T21:15:55.178Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/60/bc7a980fc78837d6ef8f5940cca4cadc433364503a4c4d42e2a7a0de3231/widgetsnbextension-4.0.16.tar.gz", hash = "sha256:adeea0ae78f0856ee4945f413299801b82a0a01416303301f39a704282a37b73", size = 1111094, upload-time = "2026-08-18T08:52:55.859Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503, upload-time = "2025-11-01T21:15:53.565Z" }, + { url = "https://files.pythonhosted.org/packages/34/95/40e17e20046b7bc820d29d09ae84ec157ec8dd6e6f6cd722626292c31b2e/widgetsnbextension-4.0.16-py3-none-any.whl", hash = "sha256:a31a8774885b96fe825462f5d6496166f0c7cae111195b6465c801d230eb5a4e", size = 2225148, upload-time = "2026-08-18T08:52:53.736Z" }, ] [[package]] name = "wrapt" -version = "2.2.1" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/9f/06263fcd8ad6c405f05a3905fd7a84dd3176eb5ad46e44bccc0cd16348bb/wrapt-2.2.1.tar.gz", hash = "sha256:6744f504375775d7609c82c8d3d94af1c9a6f05586984536905908ba905277b9", size = 127620, upload-time = "2026-05-22T14:49:43.056Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/0c/bfae7b9401583b6d05938cd16dedc43857d96da2f8a3d50d78cc515bf6ff/wrapt-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ffad790d9d11d8ecf9f17c4bb671a5b4089e4d8b575c46c5129597f41f836b0", size = 81021, upload-time = "2026-05-22T14:48:00.313Z" }, - { url = "https://files.pythonhosted.org/packages/26/58/80f6a6599f933f4caecc1cb3ee88a04faf81e8b9bddbd6109c688dd63e0f/wrapt-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:628f5220c7a904d5fc78f7075c8d7871433eb6d035c94728a22fdf85f193d2a8", size = 81692, upload-time = "2026-05-22T14:48:01.49Z" }, - { url = "https://files.pythonhosted.org/packages/17/93/fb357cc7847c58a8ae790be718903afa81a28d23e642c843dc4129e8a0b2/wrapt-2.2.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:61acce4257a9883669703c525447c5b4c392edf0f987ae77ec32668440158f0e", size = 169364, upload-time = "2026-05-22T14:48:02.791Z" }, - { url = "https://files.pythonhosted.org/packages/aa/0b/76b601ee309a8bd556af0eecb184394c20b3c49aa9c8e085aa1ffacc2568/wrapt-2.2.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727ab4244622cd6ad2390f322642090c877d2e83a608d2653a7643ae5368d926", size = 171079, upload-time = "2026-05-22T14:48:04.22Z" }, - { url = "https://files.pythonhosted.org/packages/cd/87/ee3f32d5658e3e26d3e0e457922b47a36dd3bfbdfee7f97bb3e802344a66/wrapt-2.2.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03df9ebed4c73ab93fa8c07e3d41d818dfca1852b15731a3de59457b27814624", size = 160205, upload-time = "2026-05-22T14:48:05.553Z" }, - { url = "https://files.pythonhosted.org/packages/b1/d0/ae2fd64277a67f5d7bffcf2d05eea1e476263fb2a072baf0b0129ab85984/wrapt-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0d9ff006f420b2ec8296aa56ade43ea7da3e997e85769f0aafc5e0661aacb710", size = 168922, upload-time = "2026-05-22T14:48:07.132Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f3/2d541a060c5bbafb9400bca4917e4d78bfd1f239f404782c86831a8f6b29/wrapt-2.2.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:844c858fc3bb7eacc0ba8efa904935d16aac6a4470948ad1e7e55c9f5a2a665f", size = 158388, upload-time = "2026-05-22T14:48:08.629Z" }, - { url = "https://files.pythonhosted.org/packages/1d/68/8d92c8800c57e93cb116ae9e9d6cbafc34fade5ee9f9107b6f203fb4dc35/wrapt-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87bacdaf225117a342a20d9c03438d701c02112f6e3f351ce9b7f32354f14797", size = 167682, upload-time = "2026-05-22T14:48:10.042Z" }, - { url = "https://files.pythonhosted.org/packages/30/72/83ea3790ea352439442349388e29ff07b76e0686265f9088bbb505d1608d/wrapt-2.2.1-cp312-cp312-win32.whl", hash = "sha256:2f8c90c8afde51969487be4e1343ae049b268854877d415c2510baf833775052", size = 77857, upload-time = "2026-05-22T14:48:11.782Z" }, - { url = "https://files.pythonhosted.org/packages/ef/cb/99450668dd3502d62a54a1c8aa56e44f34cb8c1261b381cfe2e7926c3b75/wrapt-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ce32763ac31ce94fe9aada947e479b1975012bff166da409b4b9e4e376cf7e5", size = 80825, upload-time = "2026-05-22T14:48:13.046Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3a/87512881be64e743f9ee4c66f4cbe8e884974bef2a5989af71f999653ac7/wrapt-2.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d1b4d0e0c2119587a31f5c029abd547e0c81d93b89d394566fe1588659eb579", size = 79087, upload-time = "2026-05-22T14:48:14.323Z" }, - { url = "https://files.pythonhosted.org/packages/88/d1/a1b08f8f4fac8cbb156fa51cf64ee2c7f7f74f9875ba3cf70b3c58368694/wrapt-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d2beb1c7cab10603aecdc42f8edd6ff013f9a32e4543474e38e6b77ce9975aeb", size = 80831, upload-time = "2026-05-22T14:48:15.598Z" }, - { url = "https://files.pythonhosted.org/packages/54/ce/57890814991446a845e09b3445ce8b694f27eb0577004f2c2a36a9772ed4/wrapt-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0cb7e4dd71f4c32e5e84843cd3c4cd65dda034314004bbe1d7f99af2426ab80", size = 81375, upload-time = "2026-05-22T14:48:17.071Z" }, - { url = "https://files.pythonhosted.org/packages/38/65/08d7a6c76ac4493bdb668205ee9c1de1bd5daca61717c3e9aa49b4c01499/wrapt-2.2.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95821352042722cd9f1108874579a47989d0a7e12a37d87d2fc4af20fd99ab8a", size = 167417, upload-time = "2026-05-22T14:48:18.303Z" }, - { url = "https://files.pythonhosted.org/packages/62/ce/f1ccbee7a1bfe5cdc6b3da6bab4b45713d628b9294da32a39f563d648140/wrapt-2.2.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abd621552ede77c4c69be7fac44ba911225b0c812b6ba604e5964cf98085b474", size = 166948, upload-time = "2026-05-22T14:48:19.768Z" }, - { url = "https://files.pythonhosted.org/packages/86/2a/f85d48d1cd4869aee6704028d257d740a47c1c467b457ce396b4b5b55d07/wrapt-2.2.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e3677c7146ce694874941ba82b57092cc4875445aadf29d72807351023105143", size = 158148, upload-time = "2026-05-22T14:48:21.96Z" }, - { url = "https://files.pythonhosted.org/packages/fe/5c/93939ad11d4a12358ab1aab219a2ef5efa5612e0db6b9fc65af8af1a891b/wrapt-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9a5934eaea872e17936b5f45501eba5ab0bce9a74122e172b663d7c28c459c4a", size = 165905, upload-time = "2026-05-22T14:48:23.373Z" }, - { url = "https://files.pythonhosted.org/packages/e0/22/b8c2aa89862ff58605934d7abf4b70e6a5a1c33df96656f49035ccdf1c8a/wrapt-2.2.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f5b9daf6b629fce418e0cc3dd0436eac045188fa35deadb7a7f3941d5b8203f9", size = 156712, upload-time = "2026-05-22T14:48:24.767Z" }, - { url = "https://files.pythonhosted.org/packages/5d/78/bf00a7b02239c12bb02ddcc3c0b971bfcc36e578c5a44f1ccfef5b458545/wrapt-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f53ac9f3ef573326d009ed809beff4efcac6451931c2b8132586da4b9e53ff31", size = 166560, upload-time = "2026-05-22T14:48:26.83Z" }, - { url = "https://files.pythonhosted.org/packages/fe/93/6390ca9c5b787683cef588d04f57c8d41b9a2323b5597a65f18638c90ef2/wrapt-2.2.1-cp313-cp313-win32.whl", hash = "sha256:1ffa9cfd4bdb581539951b14ae661ff20ed0c3599b3e911a131ee0ec5ac11337", size = 77817, upload-time = "2026-05-22T14:48:28.221Z" }, - { url = "https://files.pythonhosted.org/packages/97/73/ce10f0e71c0cfaa1a65faadb8efd4852028b3bb9ba28932b8889df769d38/wrapt-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:368eac1e20fd0bb03dd3cc42bf9887154c3861b60989389ccb5fac032617d215", size = 80736, upload-time = "2026-05-22T14:48:30.139Z" }, - { url = "https://files.pythonhosted.org/packages/c7/4c/89f4a6818fafbbd840330e4fa3873073e1bfc166133a64cac7f8fde7a5e3/wrapt-2.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:c754dafdf5aaf0b401b644a90a30046929a0dd1a536e0ff0ec959a59155d9c7f", size = 79099, upload-time = "2026-05-22T14:48:31.405Z" }, - { url = "https://files.pythonhosted.org/packages/bf/f2/9a8741c46f8c208ac0a45b25ba170bcb4fb72a2781d5fb97dbd7b6be73cb/wrapt-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ed928d0fda15fc0adc8d13305c8b3c0f2fba5b0669950c9e6d019d9162a3b3e8", size = 82802, upload-time = "2026-05-22T14:48:33.307Z" }, - { url = "https://files.pythonhosted.org/packages/9c/0d/e9c855716a3705eef1416456bdf062b60620726fdc59428ff670fc3c60dc/wrapt-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fafb4e739e43544d12cb4abd1605fd4683b6ca6a9ad682b7fd8f4d21973eafa8", size = 83329, upload-time = "2026-05-22T14:48:34.593Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d6/a88f1c13112b7831adac75cea65d8310e0d696d570c8961844c90a57b865/wrapt-2.2.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74d6a0c31472fe5d814917266b9f46495d7c61ed890af08b468acea92fb89a8d", size = 202937, upload-time = "2026-05-22T14:48:35.859Z" }, - { url = "https://files.pythonhosted.org/packages/42/65/e29d54aef06a4d898a5b8a25589a0b3769bde454f922fad8f6f89fbfb650/wrapt-2.2.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab5be648d5a0b86b7438864f8df3c705a65cef35a2fd3e5561e3e203167e0f27", size = 209997, upload-time = "2026-05-22T14:48:38.153Z" }, - { url = "https://files.pythonhosted.org/packages/2a/91/e4454263516cf0e12640912fbca9a83654e424f0a6ddb79f5cd7ce14bf33/wrapt-2.2.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9d8f204c8e3a8bf9ece17e0a83d137fd807440977f8a5e762d59306795011440", size = 194856, upload-time = "2026-05-22T14:48:39.69Z" }, - { url = "https://files.pythonhosted.org/packages/de/d0/fe0ee202286afdf4a7f77dd29f195703145764d572aec209c5086e57d924/wrapt-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d047f6498c973874ba08ac3f97c69a2c4b2211c8de6f4c205f75cb1c9522596e", size = 205654, upload-time = "2026-05-22T14:48:43.456Z" }, - { url = "https://files.pythonhosted.org/packages/23/b6/87d860dfc6460c246af70b1fd5c8b76df77571b42a493459423ded94fd7d/wrapt-2.2.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:7a4fdb9326aab4a5a477a1640e5ad786a8495901009d7e7b038371edd23a9d2b", size = 192206, upload-time = "2026-05-22T14:48:44.858Z" }, - { url = "https://files.pythonhosted.org/packages/df/46/3eea8cde077d985f239a38c0257087b8064fd9ee9b1a99e282d2c86da4ef/wrapt-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c8cc5094b08abeae52da9c73c8a32003623be691a5193df2f4e3eac3d557c394", size = 198428, upload-time = "2026-05-22T14:48:46.319Z" }, - { url = "https://files.pythonhosted.org/packages/18/dc/b927ee9c7fc67adc3a5658f246a0d275425eb840ba36e7b702e70f18bde8/wrapt-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:9907a4402ab6db12b7077a0ea5d7a4d028ecb22c8eee2b53527080d347cd1562", size = 79448, upload-time = "2026-05-22T14:48:47.901Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b3/fd30b473fe498c70e6b9a5f328b8d3fbaf1b8c3c481465f59724bba8eb70/wrapt-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:5590d63f5243251641cf543009b4c9314a79d0598fdb8a8e4cfc918494536c53", size = 83021, upload-time = "2026-05-22T14:48:49.201Z" }, - { url = "https://files.pythonhosted.org/packages/ee/f3/96c39153a8737a6e9aa85adef254ac4195bea3f2d24efc60472ccc3c9e2e/wrapt-2.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:c318a64b53d97b841d7b5e637517e50a27be64bc695128422953d4b21710954e", size = 80295, upload-time = "2026-05-22T14:48:50.479Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a3/11d7f34ebbf3231bc907a3e6d5ee051b14d034c1bc7b65a97d5cc00516df/wrapt-2.2.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6f56a647e4eaf5f0ca40330fb070f566bdf9f7b0db89a1af20d71c28dcd7a0ab", size = 80879, upload-time = "2026-05-22T14:48:51.802Z" }, - { url = "https://files.pythonhosted.org/packages/13/3c/b74cfd984cef560b900fb1a727af20352d89e1f06bf2e1114dd3f00f5f5a/wrapt-2.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:64b7deeda4b70408e382328d8bbe52a256fe9bc63ae3db86d804608367e5422c", size = 81462, upload-time = "2026-05-22T14:48:53.18Z" }, - { url = "https://files.pythonhosted.org/packages/15/a3/7c8f704b8dc07dfe0a5d01c2edbfd88317aa8e5e3fa7c743eb7a085ae767/wrapt-2.2.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b9cf53ba90717db2e292401de290776c498d4bbfb0d4a559ca2895db8b9dcb5c", size = 167251, upload-time = "2026-05-22T14:48:54.562Z" }, - { url = "https://files.pythonhosted.org/packages/80/85/a34d1888d97247da6c2ff6118c3a721c73ed8cc4dd198c00208bb73b6f80/wrapt-2.2.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cf3638274ab9d9b724c9baa0b4c04e132cd6faefb78b4dd3dd1a02a4bdaad41e", size = 166316, upload-time = "2026-05-22T14:48:56.065Z" }, - { url = "https://files.pythonhosted.org/packages/e9/d7/72ffaeb01eebc704afe3fb99e840480f4bda45f0fa66e3381b6a39251c8f/wrapt-2.2.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aed9658797d0b45d6c49adcfc6b41f66e6f2d0c6de3ec79e16cf4b1855df240f", size = 157952, upload-time = "2026-05-22T14:48:57.924Z" }, - { url = "https://files.pythonhosted.org/packages/24/5b/36f5d6b024e4edfdd90b140742d11ebcf7836daf5c9daf326c55c24db412/wrapt-2.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1d676ee388bc42a04d56dd7deb5605244dac2e35cc2fadbb43c9fa25bbd93508", size = 166130, upload-time = "2026-05-22T14:48:59.384Z" }, - { url = "https://files.pythonhosted.org/packages/81/06/9296d9e97bfdef5483dfcc859d57b095b257144b2bc5300ab521e06f4bc7/wrapt-2.2.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e395f7bc31851ef9b612050368cb446e9bc14cd7454b025018980349caf25ae5", size = 156604, upload-time = "2026-05-22T14:49:00.921Z" }, - { url = "https://files.pythonhosted.org/packages/53/37/16953929ed6776175720e58fc966e779926d8d71e2c7b2273230590ca71f/wrapt-2.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f1845c2a8cc1180ccccfa45785dd06f562730d19ef75be180334254012b6283", size = 166007, upload-time = "2026-05-22T14:49:02.332Z" }, - { url = "https://files.pythonhosted.org/packages/b9/73/20ee58c0612dae7c31131a7095345812ed2c7b389019e175f68cde34e5b4/wrapt-2.2.1-cp314-cp314-win32.whl", hash = "sha256:436addbc4bb4fc0a88c702577f51195d7d73683a7f3e0e5b253d8404d7847243", size = 78327, upload-time = "2026-05-22T14:49:03.722Z" }, - { url = "https://files.pythonhosted.org/packages/22/b3/ef7c3295d02e0448a71c639a36a057f46d524d057c9486291a7a3039e65c/wrapt-2.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:50972a1d974ea07725a7f6b1cec5f8759008afd030a0024843ebe7d52de47f2b", size = 81144, upload-time = "2026-05-22T14:49:05.093Z" }, - { url = "https://files.pythonhosted.org/packages/ac/dc/7bdf336953f99f4ceb0a584bb8870e42c8f26f93ea10c87834dad62f1668/wrapt-2.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:1c9934ea5d92957e3cd0adbc0845539dccfd62710ebe16195a8c66c53954db36", size = 79569, upload-time = "2026-05-22T14:49:06.413Z" }, - { url = "https://files.pythonhosted.org/packages/6a/6d/6dfae80150ff1919c356d1dd528f049bcdfaae29b4d284bc957e022caef4/wrapt-2.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17de18fc12cea55b8a9587314cb830573e37fb33b247a7515696350863714188", size = 82892, upload-time = "2026-05-22T14:49:07.925Z" }, - { url = "https://files.pythonhosted.org/packages/82/7b/4e34766a7d7804ffce9e71befe47e9b3225dc350c49c94493c4ab39fd3a5/wrapt-2.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9dec1aca52dddde7df94818310fa2fe79739c8f385b2014c4cb1035f5508199", size = 83333, upload-time = "2026-05-22T14:49:09.257Z" }, - { url = "https://files.pythonhosted.org/packages/9d/57/0b34db3e8de44ccfece62d7b337abd1631dd810f5adc5f3db571727836b5/wrapt-2.2.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:69f2e9244542cb34dd59c7f073445b9e54ad9f3fce8d93606c368a1b499fc413", size = 202899, upload-time = "2026-05-22T14:49:10.572Z" }, - { url = "https://files.pythonhosted.org/packages/e5/45/ac0c459f154b99d92789a6cba7ca727185b83513b986f8ec7fe2aacddcbf/wrapt-2.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d83966dc7f4f45e8b97b5933685ac2e6e67fc0e19246ea314bceb9a8970c956", size = 209986, upload-time = "2026-05-22T14:49:12.229Z" }, - { url = "https://files.pythonhosted.org/packages/b7/e4/77e37ff33ad018fa81ade52c25fa327b80b56f81d734279a63614fcb4cbc/wrapt-2.2.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:78b0aa6bfb7be8deed0ab23e7aa028cc5210c29bc2d32a04d52b50e517a7307e", size = 194893, upload-time = "2026-05-22T14:49:14.139Z" }, - { url = "https://files.pythonhosted.org/packages/dd/9d/7ea651d1ab032fc5fa222fbec91d0f8a1397f6ae04ebb93fa7219aa921d7/wrapt-2.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:05d5cb74d1b232ec8cfa130a8f900708699ff2491d97b8f85a4cdc5996294b85", size = 205636, upload-time = "2026-05-22T14:49:15.714Z" }, - { url = "https://files.pythonhosted.org/packages/09/af/8e88031a701275b9085c54e64bc88c0b1cd55c77eadd400691c371cd76c4/wrapt-2.2.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f6518b94edb9150452e9aba08027d4cc293433753ec1fbefb4629a21cbc74181", size = 192267, upload-time = "2026-05-22T14:49:17.283Z" }, - { url = "https://files.pythonhosted.org/packages/bf/a8/e657ca876b06710194f243d81c4b0896ade646e244bdbec2d87c8c56a8bd/wrapt-2.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ed55af48b3eb28f43228ca2306788892bcb629eb2b5c4876e2a3659872c2f17a", size = 198378, upload-time = "2026-05-22T14:49:18.785Z" }, - { url = "https://files.pythonhosted.org/packages/c8/59/822efe4ea722a3961331bfa35b7d90937790d2c20f0616de1997ccc3aebd/wrapt-2.2.1-cp314-cp314t-win32.whl", hash = "sha256:2e08688ab16525897da6589d56d0aebaf417bbe91c2d8e3b96203b1efa596e85", size = 80226, upload-time = "2026-05-22T14:49:20.264Z" }, - { url = "https://files.pythonhosted.org/packages/ab/31/2a7dc5f6abb2fca0b6e1610e120419f603650aceb4f1d3ac4cae0354e162/wrapt-2.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:fd0135d34387f5fd087d9be368ea77ea89cf2451dc1cd1c622d35021bcb3ab50", size = 83835, upload-time = "2026-05-22T14:49:21.634Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c0/782b86e28d1ceebeb74cccea12d2cd3d2ba0bd68e3dec20b1bc5873f6127/wrapt-2.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:f70db64e8266d7c45d3b735f2e08eeb434b5e03da9a479ae42b2e2e486a21a00", size = 80722, upload-time = "2026-05-22T14:49:23.59Z" }, - { url = "https://files.pythonhosted.org/packages/53/46/29ac9daf11a86c22a8c38cd9236c62928ccae83f7ceb06bd3b0467cf9d05/wrapt-2.2.1-py3-none-any.whl", hash = "sha256:3aafea2975caef8ca49400640dde02cc7426e798f24870ed01f490bc3cffd32f", size = 61000, upload-time = "2026-05-22T14:49:41.593Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/2b/b0/c1f5a970721f06b85c0cd5142e0ff8fe067708abd779b0c4f4be7d61d09f/wrapt-2.3.0.tar.gz", hash = "sha256:681a2d0eefd721998f90642762b8e75c2159ec531b20ad5e437245ea7b06a107", size = 131509, upload-time = "2026-07-28T06:06:14.895Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/4a/d17a0fad1bf1c5f2c887ff71fef75654141b0880bff71d157d955b5bec3a/wrapt-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a45ffae742ce91a16e11cb6c7cd71e7f9994f3cbd283b962ab093f5c6dcf525", size = 82139, upload-time = "2026-07-28T06:04:35.082Z" }, + { url = "https://files.pythonhosted.org/packages/6e/55/51b92daaf6defb57f4dc56bdcce985400f75c6984a03ca5e78ccac717028/wrapt-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:69e477046f2237ef0bc6547544ee73008dc764ca26eff44f09e976d221b34d5d", size = 82723, upload-time = "2026-07-28T06:04:36.502Z" }, + { url = "https://files.pythonhosted.org/packages/28/7f/cfd9bc4b1f5e424eeea83d0493e43f3b1b02707ce8e50c47945873982bd5/wrapt-2.3.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d221a6e6ddd302b8397433184e96b59f259f50024b854db1c411a881586b6b8", size = 172381, upload-time = "2026-07-28T06:04:37.674Z" }, + { url = "https://files.pythonhosted.org/packages/cb/89/ff7814f6eb6856b479946117d1138a2fbb46cdb6b1f379db359056c69743/wrapt-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:392158c9a7f2ab1b8699418bfc0fe6f83548788c418b27d7bf2019ad3405cebb", size = 174120, upload-time = "2026-07-28T06:04:38.987Z" }, + { url = "https://files.pythonhosted.org/packages/12/1e/8eded8615d39e3ce81f626937a3a87b280a2a86239a2bf14a4b4bb345034/wrapt-2.3.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e5301c35cf75655eb33498f2bd6ae8703ca19940e3167dc9cdf740c712a39c60", size = 163035, upload-time = "2026-07-28T06:04:40.361Z" }, + { url = "https://files.pythonhosted.org/packages/35/ea/a0af2d9da62897af2a055484920de05dade30d2ba2c0d65cbdea875d3d8b/wrapt-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:418f54bb09d1762db02c7009b4051149893af3153a87f92d70356703c11eea02", size = 171887, upload-time = "2026-07-28T06:04:41.614Z" }, + { url = "https://files.pythonhosted.org/packages/7e/dd/63cd4c864c65ef4906df64bd2d378f4a62b54f28063f282dfb3bf93caead/wrapt-2.3.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1598becd30f8f2777d18564064eb4f4dbe1ab0e05a8f09786d0ef505ac782bf3", size = 161113, upload-time = "2026-07-28T06:04:42.864Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ee/82f1fc9e431b5c2c5a6d201aa865dbeae3984c311c6d11a185f0c8367cf6/wrapt-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3da470536bf9645143323dd41b32db55c6f4304ad382094c1a1da8a92061e10d", size = 170530, upload-time = "2026-07-28T06:04:44.212Z" }, + { url = "https://files.pythonhosted.org/packages/37/a5/5dc590e863a419930d988f8b7ca3e75a6befcfb10b6003b3a152f3d5f732/wrapt-2.3.0-cp312-cp312-win32.whl", hash = "sha256:fb8e2e6704a1e0b1b989546c69e2688371ef4a07fa5f61bde3eb6211186f5ac1", size = 78323, upload-time = "2026-07-28T06:04:45.484Z" }, + { url = "https://files.pythonhosted.org/packages/51/f9/4a6925a07951df56394f7e6ebe14f69f1c5ef9d87aa63e0839acf15aa63a/wrapt-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:cdc021cb0b62471d6aac7f2bd92f3b4658073775f9ee7fcd325c511129e7bcc8", size = 81180, upload-time = "2026-07-28T06:04:47.021Z" }, + { url = "https://files.pythonhosted.org/packages/a8/4f/8b5de0395b2a72216751d41c9861df6facaeb611b619d8810ed2b3b23eb2/wrapt-2.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:67bfe2485f50368c3fcd2275fc1fd100e350d601e0058921a7c82678a465aeab", size = 80155, upload-time = "2026-07-28T06:04:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/8e/6e/0f88a072483e76b881e3fdcd6b6ffb4a5791002514fe541e72b1b73c859a/wrapt-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d3fb71e65b001adfc42684522eeccd9c21d8ba679945abc993439567b66e59f", size = 81960, upload-time = "2026-07-28T06:04:49.622Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ff/b7e2776e7c294075eb712cc9ef573d1b818f393006d09787262b8fc871c4/wrapt-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51a7a4181c1295774812271fbcd7c909df372bc25579d4ed9eb875caaf0ae86f", size = 82435, upload-time = "2026-07-28T06:04:50.9Z" }, + { url = "https://files.pythonhosted.org/packages/d8/90/343bb5d0f1f9669bc252a6073f085b4abf862511bd5c9c9eaec754341f1d/wrapt-2.3.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9045917809c63fdf7abe3a2ceaed3d670b8ee4500ddd9291192d30aeb34467c5", size = 170350, upload-time = "2026-07-28T06:04:52.187Z" }, + { url = "https://files.pythonhosted.org/packages/59/f8/13b79a392930bd0dd6b86cbfbfe1c40944110456e1dc6d809e5c46ece904/wrapt-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54ca1d5573f69b5fe1d74f1f65799c68015e82f685efec9fd8cfa40a094c44d0", size = 170022, upload-time = "2026-07-28T06:04:53.599Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fc/4f1b6918f5290db959d6e0c07f77385d87cede29c39c9cf8f145e9c82954/wrapt-2.3.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:242b60c21e30866e6a2fa606c612b47c553fa60c0eaeeeb7797fb842ac0ce609", size = 161043, upload-time = "2026-07-28T06:04:54.936Z" }, + { url = "https://files.pythonhosted.org/packages/01/e1/45d3cf74414780bdff6d0380467e003f6eb0f028b6c9403db868dbc7209c/wrapt-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3f3d7ec0a51fbfe00d3aef047641ff2c58b25565b4717fc1f90e050be01cba8", size = 168576, upload-time = "2026-07-28T06:04:56.261Z" }, + { url = "https://files.pythonhosted.org/packages/f3/73/2fa58dd97f191c997755e2c6d569a68f0c433db4e4b36099bdd7227b6cac/wrapt-2.3.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:261f53870cd4fb2bf38f9f972c56c728fd224cb7c65721307de59d9e7e6741ae", size = 159140, upload-time = "2026-07-28T06:04:57.754Z" }, + { url = "https://files.pythonhosted.org/packages/29/a8/08a56e2000a8816d449dcbad8c8b081697acbbd490821ceca0f9d8e8d20c/wrapt-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8159ec0b0cb7608175eb150de94c19e34f4d47ac655f5ca9baf45df6b688ffd3", size = 169263, upload-time = "2026-07-28T06:04:59.161Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d4/354e1725e35a73b2af4fa70a3e024c7a5d1bf1802dfb862dcb668aae0253/wrapt-2.3.0-cp313-cp313-win32.whl", hash = "sha256:10461884b3014fbfc8eb7d09a93c5f246363e6711d9d881f95eb8c27fdef049f", size = 78241, upload-time = "2026-07-28T06:05:00.507Z" }, + { url = "https://files.pythonhosted.org/packages/6c/7e/34c87fa2174848dfee820322aaa318bab08913998ccecc8d2f57b4ad4639/wrapt-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:ac870cc97b73bb00ac353329e9559a4bebc47c4c86792ed9b23b58c15b6ad838", size = 81113, upload-time = "2026-07-28T06:05:01.839Z" }, + { url = "https://files.pythonhosted.org/packages/11/86/fcc9a530579e008c9478bb565a6cdfbfd33536660f069c8b91a6607c5050/wrapt-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:a65e8db2b4e90c2e7ade931086351c98ef420bf7a94ee08c95ac8a3cbbc43579", size = 80182, upload-time = "2026-07-28T06:05:03.152Z" }, + { url = "https://files.pythonhosted.org/packages/96/50/3864848b95b28ef73e17551fc8dccbff2628a834f52cf26a57f9c419fb83/wrapt-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:fd1f2f557dd3491fe75905e578f4db967393d40d1a8f468edc4d40ac7f2d5944", size = 83921, upload-time = "2026-07-28T06:05:04.476Z" }, + { url = "https://files.pythonhosted.org/packages/3b/4c/3d1921a60c3e8c71c540ff136e6a47a1fbccf7f671e818394889f7871d9c/wrapt-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9f5d2aec29dfc76c37e23897dee92766a3fd4f3bff3ae7fc9c6b4bf37d8c1360", size = 84412, upload-time = "2026-07-28T06:05:05.921Z" }, + { url = "https://files.pythonhosted.org/packages/fa/1a/4a796ff7adb26ada6d4b758c94d47a38320b085e7099afc088efbbcdb006/wrapt-2.3.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:646d20d413ffcd1b0a2f700076e2d0252d872dcb7754860a73e45a59ea883614", size = 207168, upload-time = "2026-07-28T06:05:07.256Z" }, + { url = "https://files.pythonhosted.org/packages/1d/3e/d7777776806c579b761bac2f91721dda9f04c7a1b380213c5935cc750ae6/wrapt-2.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:379f670f45b7bb8993edd9f6fc36c6cc65edb81cffa0b504be34acb0303fff0a", size = 214351, upload-time = "2026-07-28T06:05:08.945Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/2d64d394df7bf181955b3bb562bf33c4492fb4be113f53071106d43ad8b5/wrapt-2.3.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6208f302f110295d64b22a7ac96500c791bf492dce4366e622e4912b077c9687", size = 199020, upload-time = "2026-07-28T06:05:10.418Z" }, + { url = "https://files.pythonhosted.org/packages/3e/3d/fb31d3db7d9834d265fb1a27a2adf0ddf51557c67458c97b22439ad6ae3d/wrapt-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ed635a9ca4f3a5a2b900c10c69e823373bc00ebc114b459383596d3487da3570", size = 209969, upload-time = "2026-07-28T06:05:11.983Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d1/8724b5da582e62070dc9bf4d8bf1972f317297eefd7ba1f2b5c6393ccf6c/wrapt-2.3.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:e3b9eaa742ae7a0aaaaad4ca4b69469d757af2d6e6663ef1dadc47adec0aeb41", size = 196324, upload-time = "2026-07-28T06:05:13.557Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/3d9ef411149543016ee6bcf3af707f787cebd946527452b94bf122e9b7b4/wrapt-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0f7284f88f4833705132d06d3b425a43095c2cbd07c58166aac3ab646ba12a4", size = 202610, upload-time = "2026-07-28T06:05:15.048Z" }, + { url = "https://files.pythonhosted.org/packages/13/9b/4fc042ceb757866dd4a5fc057b3b736f2b360d3703ce9f830d83dc9226e0/wrapt-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:7ebb274aba688b043429eb1500ff8a76ce0cb8ac0812ca3e301f06247b8722b3", size = 79178, upload-time = "2026-07-28T06:05:16.469Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ff/b94878f8eed809ca042685276bcea9f24e8c2ca7c9653bb80bbb920a68a5/wrapt-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:c4bded758ad6f03b965830944a2f0bc5b2eb3767fe5a7310134315d1a6610e98", size = 82634, upload-time = "2026-07-28T06:05:18.026Z" }, + { url = "https://files.pythonhosted.org/packages/80/fb/663e1de5332a71685a729754312d327d4cada767c36e1c5a2db4c8de49e6/wrapt-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:d2cc64539da63e39ffb9c7ede849b6e8ddaaf7b3876b5cfb04efd85a5f3f4eb6", size = 81387, upload-time = "2026-07-28T06:05:19.417Z" }, + { url = "https://files.pythonhosted.org/packages/58/10/b073beaea89bc0d3670a75ff51139430a54b6af7ba7796507730634536dd/wrapt-2.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ea52a0d0f08c584943d5764be0e84efa912c8da23c23e1e285ff2f5641c18fcc", size = 81978, upload-time = "2026-07-28T06:05:21.133Z" }, + { url = "https://files.pythonhosted.org/packages/b3/31/0916d9cebf848ed3f1a0c1888faee421747df77331e4db2bc527a9a85988/wrapt-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd85b0aa88efdb189d6ae2f35f4526943a8f091c38599c9c31478241c819e6a1", size = 82518, upload-time = "2026-07-28T06:05:22.562Z" }, + { url = "https://files.pythonhosted.org/packages/f5/73/31c1bf0f3384062751c2094dadb314916d70aa9b6bfd26d994b4a7b393fa/wrapt-2.3.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:141ed6211286a9660d8d6702de598b43f0934b4f0eda16393f100a80f501d945", size = 170187, upload-time = "2026-07-28T06:05:23.904Z" }, + { url = "https://files.pythonhosted.org/packages/ed/25/fce087d54b79b8905f3c3c9dd5f454bbd8d8acb80b960c4a6aee5b4659b3/wrapt-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e49885a62ec4ee854d1b9e6371fda6afd219917225752abf729a3f36d4df9a5", size = 169288, upload-time = "2026-07-28T06:05:25.378Z" }, + { url = "https://files.pythonhosted.org/packages/c7/30/0d09e6dddc6b7a7230ac77f50254b5980ab4fcd22976f72f8cc8a0404458/wrapt-2.3.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d6159c9b2fefec02314e1332dbbbfaf960e369dfd26bcf7f8b258b5732065b3", size = 160932, upload-time = "2026-07-28T06:05:27.022Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ca/0913af0d2ec0c43865d32d615f518fea66c13c5c930e489e9b0de248e9a8/wrapt-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:24da48596326ef8e448cfa837b454f638713d3531262375f00e5a9681682fc07", size = 169017, upload-time = "2026-07-28T06:05:28.501Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f2/3d1e47ea81b822210f5df1bf942fd90780a75c055243d569b664529dea88/wrapt-2.3.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cd3a2edf0427013736b8127955cec62608c56e53ea47e82812ea32059cda407f", size = 159065, upload-time = "2026-07-28T06:05:30.01Z" }, + { url = "https://files.pythonhosted.org/packages/43/a5/ef2066ced8e5fca204e2b361e9708e36555b40949c583d997ea3b590817d/wrapt-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4fa0df3bff4e7ce45759f33fd39335fe2f60477bb9ecf7b8aa41e7d07ee36a23", size = 168821, upload-time = "2026-07-28T06:05:31.649Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e1/016104650d4e572fa91506eb396b3dd8efbccc9284fdc1c9479c3d21db28/wrapt-2.3.0-cp314-cp314-win32.whl", hash = "sha256:2935d5454b3f179a29b12cf390ee47246740ba2c3a7545b1b46ba31a5f2a4a0b", size = 78700, upload-time = "2026-07-28T06:05:33.391Z" }, + { url = "https://files.pythonhosted.org/packages/3d/97/6fdc20a9f2ca304748b3f0819cbf377d55260562777bf0b615431bc3c181/wrapt-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:cc2cea812e5cb179a796b766747e7d3b21088760d8deb95676d482b8c8e6fa7d", size = 81422, upload-time = "2026-07-28T06:05:34.774Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a4/9cbd53bf05746bea2c392af39cb052427a8ec95cbd494d930733d8f44681/wrapt-2.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:22cc5c0a717bd4da87018ae0bffd4c19c6fb679d3ff357216ba566ab26c76cab", size = 80639, upload-time = "2026-07-28T06:05:36.228Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/6c5e4a0f66ea0d2b2dd267e8dd05a0014eea56840b3c8595d40b0a5d1f91/wrapt-2.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a6b5984cd65dd639546f0eb4b8eacf1c31cb2fe9fb5c27bffe240987cdb2cf84", size = 84030, upload-time = "2026-07-28T06:05:37.714Z" }, + { url = "https://files.pythonhosted.org/packages/6a/eb/a1aedf03283bc9cbf8a1783995ddc54e3c5a86878f19002d2c428494f4c5/wrapt-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c88abcf53daef80e01a75c7530e727fa6e2c1888fe83e3dcdba4c96216a1f5c7", size = 84419, upload-time = "2026-07-28T06:05:39.131Z" }, + { url = "https://files.pythonhosted.org/packages/63/61/50d511c0dc5105563849e86daa3e16ac7feef699f79fb05af45ea70107d5/wrapt-2.3.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:85de890ff968196e92dd1ae73a9fb8970495e7650a457b1c9ef0ac3dd550bce2", size = 207171, upload-time = "2026-07-28T06:05:40.69Z" }, + { url = "https://files.pythonhosted.org/packages/3f/59/9b538cf7795217e810699d16bc88b96a830d9b5c403eb2ec2db6b5f2ae81/wrapt-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50f416b74d092bb9f41b424e90dd457f365f7ba4b11de62a23679769a21bd85c", size = 214329, upload-time = "2026-07-28T06:05:42.287Z" }, + { url = "https://files.pythonhosted.org/packages/b3/28/9935d62b1499e5c8b3d191e99ba4eb31ca237a0b699142011a837e9dc7ea/wrapt-2.3.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39febbee6d77301d31da6996b152ce52452da7c7ef72aba10c2fa976dff9c295", size = 199079, upload-time = "2026-07-28T06:05:43.958Z" }, + { url = "https://files.pythonhosted.org/packages/2b/01/4446b80fa2ffa47a3449b250d004ba1c1937f07f64a179608fec735df866/wrapt-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:93513bec052c6cd987f9f580c3df068c8bc4ebae6543736be3ca7ec5959cafcd", size = 209992, upload-time = "2026-07-28T06:05:45.677Z" }, + { url = "https://files.pythonhosted.org/packages/d4/07/56f26c9f9979586a021e8148747004aba4498f49458c90b0502969b904e1/wrapt-2.3.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:729126e667da34d251b8ebf8a45ef0c5ddadc21542b3d6e1abf4259ece6508df", size = 196334, upload-time = "2026-07-28T06:05:47.608Z" }, + { url = "https://files.pythonhosted.org/packages/8b/41/6d7bcc895b0f28b2250e10908f060687b9165429dcd7f22ddb3d4c031b74/wrapt-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:626b69db2021aa01671ec7bbc9740e558522bd44c18cf2ce69bf3d666a014109", size = 202644, upload-time = "2026-07-28T06:05:49.183Z" }, + { url = "https://files.pythonhosted.org/packages/cd/25/7860927edba06b758b8852a6f02e832be715563c67a6795d94350bc81099/wrapt-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:629d73378082c00a8173031f9fb30a3ac6abbc894a5bfdfae71fabc60642d501", size = 79685, upload-time = "2026-07-28T06:05:50.976Z" }, + { url = "https://files.pythonhosted.org/packages/c4/0f/270bafe92fde3b069a39bc01e39ee79340895b335640df861d43d2a51885/wrapt-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:42869085687f0aefd57c0f636c3f9354f8ffb321a8ba9cb52d19beb796e561c5", size = 83104, upload-time = "2026-07-28T06:05:52.405Z" }, + { url = "https://files.pythonhosted.org/packages/55/b3/af176d79a8515a8a720eccdad9a96f6e31a30abf2865430c8c42adf2fd13/wrapt-2.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:b1e5aa486e269b00ed35e64771c7d0ab8096cfd2643405ca8cd60ebedc099a51", size = 81774, upload-time = "2026-07-28T06:05:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/00/39/3daf9f47be208606586de4568ba6713db53ebc8fd7a575aea1fe57983b69/wrapt-2.3.0-py3-none-any.whl", hash = "sha256:d8c7ed08477429752b8c44991f40ad7838b18332a160698740a6bfbc10d998a2", size = 61866, upload-time = "2026-07-28T06:06:12.9Z" }, ] [[package]] name = "xarray" -version = "2026.4.0" +version = "2026.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "packaging" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311, upload-time = "2026-04-13T19:45:36.688Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/96/3f7bdd00e505ec3698903415b30135024703e017b28c6b61f98da3193b0d/xarray-2026.7.0.tar.gz", hash = "sha256:361b495928fdbf5b58d0969bb6775339019da5e93ca74d61ddf4eb5edd6ce604", size = 3145348, upload-time = "2026-07-09T17:38:26.515Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326, upload-time = "2026-04-13T19:45:34.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/5b/28365212062939d213802e5e5fe855cdb231e1c2a93254ba1690066504e3/xarray-2026.7.0-py3-none-any.whl", hash = "sha256:bf9dd130b93806dc78e90c1b7ac24851b31557b888674c53622235691cf21824", size = 1426778, upload-time = "2026-07-09T17:38:24.224Z" }, ] [[package]] @@ -5522,84 +5788,84 @@ wheels = [ [[package]] name = "yarl" -version = "1.24.2" +version = "1.24.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "multidict" }, { name = "propcache" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/da/866bcb01076ba49d2b42b309867bed3826421f1c479655eb7a607b44f20b/yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8", size = 129957, upload-time = "2026-05-19T21:28:51.695Z" }, - { url = "https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2", size = 92164, upload-time = "2026-05-19T21:28:53.242Z" }, - { url = "https://files.pythonhosted.org/packages/29/b6/170e2b8d4e3bc30e6bfdcca53556537f5bf595e938632dfcb059311f3ff6/yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d", size = 91688, upload-time = "2026-05-19T21:28:54.865Z" }, - { url = "https://files.pythonhosted.org/packages/fe/a5/c9f655d5553ea0b99fdac9d6a99ad3f9b3e73b8e5758bb46f58c9831f74c/yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035", size = 102902, upload-time = "2026-05-19T21:28:56.963Z" }, - { url = "https://files.pythonhosted.org/packages/5d/bc/6b9664d815d79af4ee553337f9d606c56bbf269186ada9172de45f1b5f60/yarl-1.24.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576", size = 97931, upload-time = "2026-05-19T21:28:58.56Z" }, - { url = "https://files.pythonhosted.org/packages/98/ec/32ba48acae30fecd60928f5791188b80a9d6ee3840507ffda29fecd37b71/yarl-1.24.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8", size = 111030, upload-time = "2026-05-19T21:29:00.148Z" }, - { url = "https://files.pythonhosted.org/packages/82/5a/6f4cd081e5f4934d2ae3a8ef4abe3afacc010d26f0035ee91b35cd7d7c37/yarl-1.24.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7", size = 110392, upload-time = "2026-05-19T21:29:02.155Z" }, - { url = "https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c", size = 105612, upload-time = "2026-05-19T21:29:04.247Z" }, - { url = "https://files.pythonhosted.org/packages/7c/80/264ab684f181e1a876389374519ff05d10248725535ae2ac4e8ac4e563d6/yarl-1.24.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d", size = 104487, upload-time = "2026-05-19T21:29:06.491Z" }, - { url = "https://files.pythonhosted.org/packages/41/07/efabe5df87e96d7ad5959760b888344be48cd6884db127b407c6b5503adc/yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db", size = 102333, upload-time = "2026-05-19T21:29:08.267Z" }, - { url = "https://files.pythonhosted.org/packages/44/0c/bcf7c42603e1009295f586d8890f2ba032c8b53310e815adf0a202c73d9f/yarl-1.24.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712", size = 99025, upload-time = "2026-05-19T21:29:10.682Z" }, - { url = "https://files.pythonhosted.org/packages/4f/82/84482ab1a57a0f21a08afe6a7004c61d741f8f2ecc3b05c321577c612164/yarl-1.24.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996", size = 110507, upload-time = "2026-05-19T21:29:12.954Z" }, - { url = "https://files.pythonhosted.org/packages/c4/8d/a546ba1dfe1b0f290e05fef145cd07614c0f15df1a707195e512d1e39d1d/yarl-1.24.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b", size = 103719, upload-time = "2026-05-19T21:29:14.893Z" }, - { url = "https://files.pythonhosted.org/packages/1a/b6/267f2a09213138473adfce6b8a6e17791d7fee70bd4d9003218e4dec58b0/yarl-1.24.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c", size = 110438, upload-time = "2026-05-19T21:29:16.485Z" }, - { url = "https://files.pythonhosted.org/packages/48/2d/1c8d89c7c5f9cad9fb2902445d94e2ab1d7aa35de029afbb8ae95c42d00f/yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1", size = 105719, upload-time = "2026-05-19T21:29:18.367Z" }, - { url = "https://files.pythonhosted.org/packages/a7/25/722e3b93bd687009afb2d59a35e13d30ddd8f80571445bb0c4e4ce26ec66/yarl-1.24.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad", size = 92901, upload-time = "2026-05-19T21:29:20.014Z" }, - { url = "https://files.pythonhosted.org/packages/39/47/4486ccfb674c04854a1ef8aa77868b6a6f765feaf69633409d7ca4f02cb8/yarl-1.24.2-cp312-cp312-win_arm64.whl", hash = "sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30", size = 87229, upload-time = "2026-05-19T21:29:22.1Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/fcf0ce677f17e5c471c06311dd25964be38a4c586993632910d2e75278bc/yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536", size = 128978, upload-time = "2026-05-19T21:29:23.83Z" }, - { url = "https://files.pythonhosted.org/packages/d3/58/8e63299bb71ed61a834121d9d3fe6c9fcf2a6a5d09754ff4f20f2d20baf5/yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607", size = 91733, upload-time = "2026-05-19T21:29:25.375Z" }, - { url = "https://files.pythonhosted.org/packages/c1/24/16748d5dab6daec8b0ed81ccec639a1cded0f18dcc62a4f696b4fe366c37/yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1", size = 91113, upload-time = "2026-05-19T21:29:26.928Z" }, - { url = "https://files.pythonhosted.org/packages/1b/66/b63fff7b71211e866624b21432d5943cbb633eb0c2872d9ee3070648f22c/yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986", size = 103899, upload-time = "2026-05-19T21:29:28.842Z" }, - { url = "https://files.pythonhosted.org/packages/9d/ac/ba1974b8533909636f7733fe86cf677e3619527c3c2fa913e0ea89c48757/yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488", size = 97862, upload-time = "2026-05-19T21:29:31.086Z" }, - { url = "https://files.pythonhosted.org/packages/1b/a5/123ac993b5c2ba6f554a140305620cb8f150fa543711bbc49be3ec0a65a4/yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b", size = 111060, upload-time = "2026-05-19T21:29:32.657Z" }, - { url = "https://files.pythonhosted.org/packages/23/37/c472d3af3509688392134a88a825276770a187f1daa4de3f6dc0a327a751/yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592", size = 110613, upload-time = "2026-05-19T21:29:34.379Z" }, - { url = "https://files.pythonhosted.org/packages/df/88/09c28dad91e662ccfaa1b78f1c57badde74fc9d0b23e74aef644750ecd73/yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617", size = 107012, upload-time = "2026-05-19T21:29:36.216Z" }, - { url = "https://files.pythonhosted.org/packages/07/ab/9d4f69d571a94f4d112fa7e2e007200f5a54d319f58c82ac7b7baa61f5c6/yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92", size = 105887, upload-time = "2026-05-19T21:29:38.746Z" }, - { url = "https://files.pythonhosted.org/packages/8e/9a/000b2b66c0d772a499fc531d21dab92dfeb73b640a12eed6ba89f49bb2d0/yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a", size = 103620, upload-time = "2026-05-19T21:29:40.368Z" }, - { url = "https://files.pythonhosted.org/packages/41/7c/7c1050f73450fbdaa3f0c72017059f00ce5e13366692f3dba25275a1083d/yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44", size = 100599, upload-time = "2026-05-19T21:29:42.66Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b1/29e5756b3926705f5f6089bd5b9f50a56eaac550da6e260bf713ead44d04/yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a", size = 110604, upload-time = "2026-05-19T21:29:44.632Z" }, - { url = "https://files.pythonhosted.org/packages/a3/4b/8415bc96e9b150cde942fbac9a8182985e58f40ce5c54c34ed015407d3ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf", size = 105161, upload-time = "2026-05-19T21:29:46.755Z" }, - { url = "https://files.pythonhosted.org/packages/8b/d4/cde059abfa229553b7298a2eadde2752e723d50aeedaef86ce59da2718ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056", size = 110619, upload-time = "2026-05-19T21:29:48.972Z" }, - { url = "https://files.pythonhosted.org/packages/e7/2c/d6a6c9a61549f7b6c7e6dc6937d195bcf069582b47b7200dcd0e7b256acf/yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992", size = 107362, upload-time = "2026-05-19T21:29:51Z" }, - { url = "https://files.pythonhosted.org/packages/92/dd/3ae5fe417e9d1c353a548553326eb9935e76b6b727161563b424cc296df3/yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656", size = 92667, upload-time = "2026-05-19T21:29:52.743Z" }, - { url = "https://files.pythonhosted.org/packages/10/cc/a7beb239f78f27fca1b053c8e8595e4179c02e62249b4687ec218c370c50/yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461", size = 87069, upload-time = "2026-05-19T21:29:54.442Z" }, - { url = "https://files.pythonhosted.org/packages/40/0e/e08087695fc12789263821c5dc0f8dc52b5b17efd0887cacf419f8a43ba3/yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2", size = 129670, upload-time = "2026-05-19T21:29:56.631Z" }, - { url = "https://files.pythonhosted.org/packages/3a/98/ab4b5ed1b1b5cd973c8a3eb994c3a6aefb6ce6d399e21bb5f0316c33815c/yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630", size = 91916, upload-time = "2026-05-19T21:29:58.645Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8", size = 91625, upload-time = "2026-05-19T21:30:00.412Z" }, - { url = "https://files.pythonhosted.org/packages/02/a7/45baabfff76829264e623b185cff0c340d7e11bf3e1cd9ea37e7d17934bd/yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14", size = 104574, upload-time = "2026-05-19T21:30:02.544Z" }, - { url = "https://files.pythonhosted.org/packages/f3/40/3a5ab144d3d650ca37d4f4b57e56169be8af3ca34c448793e064b30baaed/yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535", size = 97534, upload-time = "2026-05-19T21:30:04.319Z" }, - { url = "https://files.pythonhosted.org/packages/9c/b5/5658fef3681fb5776b4513b052bec750009f47b3a592251c705d75375798/yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14", size = 111481, upload-time = "2026-05-19T21:30:05.988Z" }, - { url = "https://files.pythonhosted.org/packages/4c/06/fdcd7dde037f00866dce123ed4ba23dba94beb56fc4cf561668d27be37f2/yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3", size = 111529, upload-time = "2026-05-19T21:30:07.738Z" }, - { url = "https://files.pythonhosted.org/packages/c2/53/d81269aaafccea0d33396c03035de997b743f11e648e6e27a0df99c72980/yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208", size = 107338, upload-time = "2026-05-19T21:30:09.713Z" }, - { url = "https://files.pythonhosted.org/packages/ae/04/23049463f729bd899df203a7960505a75333edd499cda8aa1d5a82b64df5/yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50", size = 106147, upload-time = "2026-05-19T21:30:11.365Z" }, - { url = "https://files.pythonhosted.org/packages/14/18/04a4b5830b43ed5e4c5015b40e9f6241ad91487d71611061b4e111d6ac80/yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd", size = 104272, upload-time = "2026-05-19T21:30:12.978Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f7/8cffdf319aee7a7c1dbd07b61d91c3e3fda460c7a93b5f93e445f3806c4c/yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67", size = 99962, upload-time = "2026-05-19T21:30:15.001Z" }, - { url = "https://files.pythonhosted.org/packages/d7/39/b3cce3b7dbef64ac700ad4cea156a207d01bede0f507587616c364b5468e/yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1", size = 111063, upload-time = "2026-05-19T21:30:16.683Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ea/100818505e7ebf165c7242ff17fdf7d9fee79e27234aeca871c1082920d7/yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1", size = 105438, upload-time = "2026-05-19T21:30:18.769Z" }, - { url = "https://files.pythonhosted.org/packages/8f/d2/e075a0b32aa6625087de9e653087df0759fed5de4a435fef594181102a77/yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b", size = 111458, upload-time = "2026-05-19T21:30:21.024Z" }, - { url = "https://files.pythonhosted.org/packages/e6/5c/ceea7ba98b65c8eb8d947fdc52f9bedfcd43c6a57c9e3c90c17be8f324a3/yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8", size = 107589, upload-time = "2026-05-19T21:30:23.412Z" }, - { url = "https://files.pythonhosted.org/packages/fa/d9/5582d57e2b2db9b85eb6663a22efdd78e08805f3f5389566e9fcad254d1b/yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0", size = 94424, upload-time = "2026-05-19T21:30:25.425Z" }, - { url = "https://files.pythonhosted.org/packages/92/10/7dc07a0e22806a9280f42a57361395506e800c64e22737cd7b0886feab42/yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57", size = 88690, upload-time = "2026-05-19T21:30:27.623Z" }, - { url = "https://files.pythonhosted.org/packages/9e/13/d5b8e2c8667db955bcb3de233f18798fefe7edf1d7429c2c9d4f9c401114/yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b", size = 136248, upload-time = "2026-05-19T21:30:29.297Z" }, - { url = "https://files.pythonhosted.org/packages/de/46/a4a97c05c9c9b8fd266bb2a0df12992c7fbd02391eb9640583411b6dab32/yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761", size = 95084, upload-time = "2026-05-19T21:30:31.031Z" }, - { url = "https://files.pythonhosted.org/packages/95/b2/845cf2074a015e6fe0d0808cf1a2d9e868386c4220d657ebd8302b199043/yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8", size = 95272, upload-time = "2026-05-19T21:30:33.062Z" }, - { url = "https://files.pythonhosted.org/packages/fe/16/e69d4aa244aef45235ddfebc0e04036a6829842bc5a6a795aedc6c998d23/yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed", size = 101497, upload-time = "2026-05-19T21:30:34.842Z" }, - { url = "https://files.pythonhosted.org/packages/15/94/c07107715d621076863ee88b3ddf183fa5e9d4aba5769623c9979828410a/yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543", size = 94002, upload-time = "2026-05-19T21:30:37.724Z" }, - { url = "https://files.pythonhosted.org/packages/a9/35/fc1bbdd895b5e4010b8fdd037f7ed3aa289d3863e08231b30231ca9a0815/yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0", size = 106524, upload-time = "2026-05-19T21:30:40.196Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f2/32b66d0a4ba47c296cf86d03e2c67bff58399fe6d6d84d5205c04c66cc6d/yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024", size = 106165, upload-time = "2026-05-19T21:30:41.888Z" }, - { url = "https://files.pythonhosted.org/packages/95/47/37cb5ff50c5e825d4d38e81bb04d1b7e96bf960f7ab89f9850b162f3f114/yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf", size = 103010, upload-time = "2026-05-19T21:30:43.985Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/4597912315096f7bb359e46e13bf8b60994fcbb2db29b804c0902ef4eff5/yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc", size = 101128, upload-time = "2026-05-19T21:30:46.291Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d5/c8e86e120521e646013d02a8e3b8884392e28494be8f392366e50d208efc/yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb", size = 101382, upload-time = "2026-05-19T21:30:48.085Z" }, - { url = "https://files.pythonhosted.org/packages/fa/98/70b229236118f89dbeb739b76f10225bbf53b5497725502594c9a01d699a/yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420", size = 95964, upload-time = "2026-05-19T21:30:49.785Z" }, - { url = "https://files.pythonhosted.org/packages/87/f8/56c386981e3c8648d279fdef2397ffec577e8320fd5649745e34d54faeb7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f", size = 106204, upload-time = "2026-05-19T21:30:51.862Z" }, - { url = "https://files.pythonhosted.org/packages/1a/1e/765afe97811ca35933e2a7de70ac57b1997ea2e4ee895719ee7a231fb7e5/yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa", size = 101510, upload-time = "2026-05-19T21:30:53.62Z" }, - { url = "https://files.pythonhosted.org/packages/ee/78/393913f4b9039e1edd09ae8a9bbb9d539be909a8abf6d8a2084585bed4b7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe", size = 105584, upload-time = "2026-05-19T21:30:55.962Z" }, - { url = "https://files.pythonhosted.org/packages/78/87/deb17b7049bbe74ea11a713b86f8f27800cc1c8648b0b797243ebb4830ba/yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd", size = 103410, upload-time = "2026-05-19T21:30:57.962Z" }, - { url = "https://files.pythonhosted.org/packages/8f/be/f9f7594e23b5b93affff0318e4593c1920331bcaefda326cabcad94296a1/yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215", size = 102980, upload-time = "2026-05-19T21:30:59.735Z" }, - { url = "https://files.pythonhosted.org/packages/65/a4/ba80dccd3593ff1f01051a818694d07b58cb8232677ee9a22a5a1f93a9fc/yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d", size = 91219, upload-time = "2026-05-19T21:31:01.934Z" }, - { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/31/33/ebe9e3d1f86c7a0b51094c0a146392045ca1631d2664889539dec8088a33/yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f", size = 228679, upload-time = "2026-07-20T02:07:45.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/84/71d051c850b5af41d168c679d9eb67eb7c55283ac4ee131673edf134bc4e/yarl-1.24.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d693396e5aea78db03decd60aec9ece16c9b40ba00a587f089615ff4e718a81d", size = 136035, upload-time = "2026-07-20T02:05:25.489Z" }, + { url = "https://files.pythonhosted.org/packages/03/4d/8ad27f9a1b7e69313cca5d695b925b48efe51208d3490e0844bae97cabc0/yarl-1.24.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3363fcc96e665878946ad7a106b9a13eac0541766a690ef287c0232ac768b6ec", size = 97642, upload-time = "2026-07-20T02:05:27.429Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b4/05b4131c407006cd1e410e9c6539f16a0945724677e5364447313c15ea3e/yarl-1.24.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d399bdcfb4a0f659b9b3788bbc89babe63d9a6a65aacdf4d4e7065ff2e6316c", size = 97323, upload-time = "2026-07-20T02:05:29.441Z" }, + { url = "https://files.pythonhosted.org/packages/20/16/e618c875c73e0e39611f20a581b3d5e8d59b8857bf001bee3263044c6deb/yarl-1.24.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90333fd89b43c0d08ac85f3f1447593fc2c66de18c3d6378d7125ea118dc7a54", size = 107741, upload-time = "2026-07-20T02:05:31.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9a/c4defeaf3ed33fcb346aacf9c6e971a8d4e2bde04a0310e79abb208e7965/yarl-1.24.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:665b0a2c463cc9423dd647e0bfd9f4ccc9b50f768c55304d5e9f80b177c1de12", size = 103570, upload-time = "2026-07-20T02:05:33.303Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e7/0e0e0de5865ebd5914537ef486f36c727a59865c3ac0cf5ff1b32aececbf/yarl-1.24.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e006d3a974c4ee19512e5f058abedb6eef36a5e553c14812bdeba1758d812e6d", size = 115815, upload-time = "2026-07-20T02:05:35.292Z" }, + { url = "https://files.pythonhosted.org/packages/2b/27/ca56b700cb170aba25a3893b75355b213935657dc5714d2383354a270e62/yarl-1.24.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e7d42c531243450ef0d4d9c172e7ed6ef052640f195629065041b5add4e058d1", size = 116025, upload-time = "2026-07-20T02:05:37.503Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d0/d56c859b8222116f5d68459199f48359e0bf121b6f65a69bf329b3602ba0/yarl-1.24.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f08c7513ecef5aad65687bfdf6bc601ae9fccd04a42904501f8f7141abad9eb9", size = 109835, upload-time = "2026-07-20T02:05:39.506Z" }, + { url = "https://files.pythonhosted.org/packages/70/a2/3a35557e4d1a79425040eba202ccaf08bdc8717680fc77e2498a1ad2e0a5/yarl-1.24.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c95b17fe34ed802f17e205112e6e10db92275c34fee290aa9bdc55a9c724027", size = 108884, upload-time = "2026-07-20T02:05:41.584Z" }, + { url = "https://files.pythonhosted.org/packages/e4/35/ef4c26356b7913c68983bac2d72a4212b3347af551cb8d250b99b5ed7b7f/yarl-1.24.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56b149b22de33b23b0c6077ab9518c6dcb538ad462e1830e68d06591ccf6e38b", size = 107308, upload-time = "2026-07-20T02:05:43.697Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/ff0dc66c2ccf3e0153ab97ff61eabab4400e6a5264af427ab30cd69f1857/yarl-1.24.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a8fe66b8f300da93798025a785a5b90b42f3810dc2b72283ff84a41aaaebc293", size = 103646, upload-time = "2026-07-20T02:05:45.895Z" }, + { url = "https://files.pythonhosted.org/packages/74/f0/33b9271c7f881766359d58266fa0811d2e5210ed860e28da7dc6d7786344/yarl-1.24.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:377fe3732edbaf78ee74efdf2c9f49f6e99f20e7f9d2649fda3eb4badd77d76e", size = 115305, upload-time = "2026-07-20T02:05:47.832Z" }, + { url = "https://files.pythonhosted.org/packages/ef/65/fd79fb1868c4a80db8661091de525bf430f63c3bea1b20e8b6a84fc7d359/yarl-1.24.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e8ffa78582120024f476a611d7befc123cee59e47e8309d470cf667d806e613b", size = 108404, upload-time = "2026-07-20T02:05:49.604Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ba/dbabe6b262f17a816c70cfc09558dbf03ece3ec76684d02f911a3d3a189c/yarl-1.24.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:daba5e594f06114e37db186efd2dd916609071e59daca901a0a2e71f02b142ce", size = 115940, upload-time = "2026-07-20T02:05:51.741Z" }, + { url = "https://files.pythonhosted.org/packages/a5/43/fab2d1dad9d340a268cdde63756a123d069723efff6a372d123fa74a9517/yarl-1.24.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:65be18ec59496c13908f02a2472751d9ef840b4f3fb5726f129306bf6a2a7bba", size = 110006, upload-time = "2026-07-20T02:05:53.554Z" }, + { url = "https://files.pythonhosted.org/packages/c4/27/41eb51bbd1b8d89546b83897cfb0164f1e109304fd408dbb151b639eec0f/yarl-1.24.5-cp312-cp312-win_amd64.whl", hash = "sha256:a929d878fec099030c292803b31e5d5540a7b6a31e6a3cc76cb4685fc2a2f51b", size = 97618, upload-time = "2026-07-20T02:05:55.57Z" }, + { url = "https://files.pythonhosted.org/packages/3c/25/b2553764b3d65db711d8f45416351ec4f420847558eb669edcbcaadf5780/yarl-1.24.5-cp312-cp312-win_arm64.whl", hash = "sha256:7ce27823052e2013b597e0c738b13e7e36b8ccb9400df8959417b052ab0fd92c", size = 93018, upload-time = "2026-07-20T02:05:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/e1/63/64ef361967cc983573149dc1515d531db5da8a4c92d22bb833d59e01b313/yarl-1.24.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79af890482fc94648e8cde4c68620378f7fef60932710fa17a66abc039244da2", size = 135075, upload-time = "2026-07-20T02:05:59.671Z" }, + { url = "https://files.pythonhosted.org/packages/bb/89/55920fd853ce43e608adbc3962456f0d649d6bb15250dc2988321da0fe1c/yarl-1.24.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46c2f213e23a04b93a392942d782eb9e413e6ef6bf7c8c53884e599a5c174dcb", size = 97225, upload-time = "2026-07-20T02:06:01.769Z" }, + { url = "https://files.pythonhosted.org/packages/15/f0/7688d3f2cfff7590df2af38ec46d969f4281a4dddb08a9ad2eafbcdddf98/yarl-1.24.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92ab3e11448f2ff7bf53c5a26eff0edc086898ec8b21fb154b85839ce1d88075", size = 96751, upload-time = "2026-07-20T02:06:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/05/1a/a851a0f94aaaf379dd4f901bfc80f634280bec51eb260b47363e2a4cd62e/yarl-1.24.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebb0ec7f17803063d5aeb982f3b1bd2b2f4e4fae6751226cbd6ba1fcfe9e63ff", size = 107960, upload-time = "2026-07-20T02:06:05.699Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a8/faea066c12f9c77ca0de90641f1655f9dd7b412477bf28c76d692f3aecff/yarl-1.24.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:82632daed195dcc8ea664e8556dc9bdbd671960fb3776bd92806ce05792c2448", size = 103500, upload-time = "2026-07-20T02:06:07.556Z" }, + { url = "https://files.pythonhosted.org/packages/fb/9c/1e67084c2a6e2f2db0e3be798328cb3be42c0119b621d25461479a224d21/yarl-1.24.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:53e549287ef628fecba270045c9701b0c564563a9b0577d24a4ec75b8ab8040f", size = 115780, upload-time = "2026-07-20T02:06:09.599Z" }, + { url = "https://files.pythonhosted.org/packages/58/86/1f94664e147474337e3359f52012cf3d02f825f694317b178bfba1078c62/yarl-1.24.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fcd3b77e2f17bbe4ca56ec7bcb07992647d19d0b9c05d84886dcd6f9eb810afd", size = 115308, upload-time = "2026-07-20T02:06:11.352Z" }, + { url = "https://files.pythonhosted.org/packages/0a/43/8e55ae7538ba5f28ccb3c845c6dd4549cf7016d5992e5326512519107cdd/yarl-1.24.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d46b86567dd4e248c6c159fcbcdcce01e0a5c8a7cd2334a0fff759d0fa075b16", size = 110574, upload-time = "2026-07-20T02:06:13.129Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ba/a889ec8765cedcf2ac44dcb02d6a21e4861399b243b263c5f2dde27ee740/yarl-1.24.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f72c74aa99359e27a2ee8d6613fefa28b5f76a983c083074dfc2aaa4ab46213", size = 109914, upload-time = "2026-07-20T02:06:15.243Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c3/e45f821af67b791c2dbbe4a9f4137a1d33f8d386654a05a0c3f47bdfa25d/yarl-1.24.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f45789ce415a7ec0820dc4f82925f9b5f7732070be1dec1f5f23ec381435a24", size = 107712, upload-time = "2026-07-20T02:06:17.443Z" }, + { url = "https://files.pythonhosted.org/packages/02/00/2ab0f42c9857fcb490bfaa6647b14540b53d241ab209f23220b958cc5832/yarl-1.24.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6e73e7fe93f17a7b191f52ec9da9dd8c06a8fe735a1ecbd13b97d1c723bff385", size = 104251, upload-time = "2026-07-20T02:06:19.259Z" }, + { url = "https://files.pythonhosted.org/packages/7a/70/709d9a286e98af2c7fd8e4e6cada658b5c0e30d87dd7e2a63c2fb5767217/yarl-1.24.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4a36f9becdd4c5c52a20c3e9484128b070b1dcfc8944c006f3a528295a359a9c", size = 115319, upload-time = "2026-07-20T02:06:21.207Z" }, + { url = "https://files.pythonhosted.org/packages/5c/6c/3eaa515142991fe84cfc483ff986492211f1978f90161ccefdbec919d09b/yarl-1.24.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:7bcbe0fcf850eae67b6b01749815a4f7161c560a844c769ad7b48fcd99f791c4", size = 109163, upload-time = "2026-07-20T02:06:23.006Z" }, + { url = "https://files.pythonhosted.org/packages/bb/64/711dafce66c323a3144d470547a71c5384c57623308ac8bb5e4b903ac148/yarl-1.24.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:24e861e9630e0daddcb9191fb187f60f034e17a4426f8101279f0c475cd74144", size = 115435, upload-time = "2026-07-20T02:06:24.923Z" }, + { url = "https://files.pythonhosted.org/packages/cf/f3/9b9d0e6d84bea851eb1ba99e4bdc755b86fd813e49ec86dfe42f26befdef/yarl-1.24.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9335a099ad87287c37fe5d1a982ff392fa5efe5d14b40a730b1ec1d6a41382b4", size = 110691, upload-time = "2026-07-20T02:06:26.973Z" }, + { url = "https://files.pythonhosted.org/packages/86/e4/62a06b7e87c4246ac76b7c2da136f972eb4a3a1fc94abb07e7022d6fdb0a/yarl-1.24.5-cp313-cp313-win_amd64.whl", hash = "sha256:2dbe06fc16bc91502bca713704022182e5729861ae00277c3a23354b40929740", size = 97454, upload-time = "2026-07-20T02:06:29.163Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c9/5fc8025b318ab10db413b61056bd0d95c557a70e8df4210c7511f866329c/yarl-1.24.5-cp313-cp313-win_arm64.whl", hash = "sha256:6b8536851f9f65e7f00c7a1d49ba7f2be0ffe2c11555367fc9f50d9f842410a1", size = 92813, upload-time = "2026-07-20T02:06:31.113Z" }, + { url = "https://files.pythonhosted.org/packages/a9/08/5f3085fef9564217074db9dd8573de1795bc82cde61a7ad10b6a7234a569/yarl-1.24.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2729fcfc4f6a596fb0c50f32090400aa9367774ac296a00387e65098c0befa76", size = 135680, upload-time = "2026-07-20T02:06:33.273Z" }, + { url = "https://files.pythonhosted.org/packages/98/35/ba9436e579bd48a8801f2021d842d9ab4994c26e4c7dd3a4c1f1bcb57a9e/yarl-1.24.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ff330d3c30db4eb6b01d79e29d2d0b407a7ecad39cfd9ec993ece57396a2ec0d", size = 97395, upload-time = "2026-07-20T02:06:35.259Z" }, + { url = "https://files.pythonhosted.org/packages/18/a9/a07f76f3c44e02b25cc743af5ef93eef27f7013eadca770451b6a6ccb5db/yarl-1.24.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e42d75862735da90e7fc5a7b23db0c976f737113a54b3c9777a9b665e9cbff75", size = 97223, upload-time = "2026-07-20T02:06:37.216Z" }, + { url = "https://files.pythonhosted.org/packages/77/f7/a9a1d6fa7dd9e388f95b30f6ad3ec4e285f6c8f61f44ce16070c3fcfe414/yarl-1.24.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3732e66413163e72508da9eff9ce9d2846fde51fae45d3605393d3e6cd303e9", size = 108777, upload-time = "2026-07-20T02:06:39.292Z" }, + { url = "https://files.pythonhosted.org/packages/2f/44/e0b86c302471fabd6f02808ecf2ac52b8412b624787849d4bf2cdb466f6f/yarl-1.24.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5b8ee53be440a0cffc991a27be3057e0530122548dbe7c0892df08822fce5ede", size = 103119, upload-time = "2026-07-20T02:06:41.456Z" }, + { url = "https://files.pythonhosted.org/packages/d1/16/9c16d180bf8faaf223225eb50e1245870ff1ae0e302a27153988e65c51fd/yarl-1.24.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:af3aefa655adb5869491fa907e652290386800ae99cc50095cba71e2c6aefdca", size = 116471, upload-time = "2026-07-20T02:06:43.696Z" }, + { url = "https://files.pythonhosted.org/packages/d2/8d/b219b9df28a02ce95cfbdd41d2f7caa5669d0ff979c1c9975697145e33c5/yarl-1.24.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2120b96872df4a117cde97d270bac96aea7cc52205d305cf4611df694a487027", size = 115974, upload-time = "2026-07-20T02:06:45.874Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e8/f20557aca240d88e69850ad1ee91756821d094bb1310565c04d25c6682a2/yarl-1.24.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:66410eb6345d467151934b49bfa70fb32f5b35a6140baa40ad97d6436abea2e9", size = 110830, upload-time = "2026-07-20T02:06:47.852Z" }, + { url = "https://files.pythonhosted.org/packages/db/18/199b85109a53eeca64ee19c9cca228287e8e4ab0cc1a09b28f530e65cce0/yarl-1.24.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4af7b7e1be0a69bee8210735fe6dcfc38879adfac6d62e789d53ba432d1ffa41", size = 110054, upload-time = "2026-07-20T02:06:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2f/ed28147f8cd7f48c49367c90713b30a555284b6105a6a56f3a05568da795/yarl-1.24.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa139875ff98ab97da323cfadfaff08900d1ad42f1b5087b0b812a55c5a06373", size = 108312, upload-time = "2026-07-20T02:06:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c5/55e16ae0a5c227cea8df1c6871ba57d614a34243146c05729caf2a1bd9c5/yarl-1.24.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0055afc45e864b92729ac7600e2d102c17bef060647e74bca75fa84d66b9ff36", size = 103662, upload-time = "2026-07-20T02:06:54.061Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ea/dbd7c2caec459c9a426f18b02688ecbfb58620d0f6a3422d24769fbaf8ab/yarl-1.24.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f0e466ed7511fe9d459a819edbc6c2585c0b6eabde9fa8a8947552468a7a6ef0", size = 116090, upload-time = "2026-07-20T02:06:56.015Z" }, + { url = "https://files.pythonhosted.org/packages/06/84/39ce4ce3059e07fece5fbdbee8c4053406af9aca911ce9fa5f8548aab6af/yarl-1.24.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f141474e85b7e54998ec5180530a7cda99ab29e282fa50e0756d89981a9b43c5", size = 109523, upload-time = "2026-07-20T02:06:57.926Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8b/71ff44137b405c64a7788075669c24010019f57a7464b78c3a6cbee539d9/yarl-1.24.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e2935f8c39e3b03e83519292d78f075189978f3f4adc15a78144c7c8e2a1cba5", size = 116084, upload-time = "2026-07-20T02:06:59.868Z" }, + { url = "https://files.pythonhosted.org/packages/62/c0/423078fdd4042e1862c11f0ffd977a0ffa393783c12bee94685923bc189e/yarl-1.24.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9d1216a7f6f77836617dba35687c5b78a4170afc3c3f18fc788f785ba26565c4", size = 111006, upload-time = "2026-07-20T02:07:01.907Z" }, + { url = "https://files.pythonhosted.org/packages/cf/52/6daa2ee9d95e5c98b8128f8df91eb692eb423ab274b8cf08db52152fad26/yarl-1.24.5-cp314-cp314-win_amd64.whl", hash = "sha256:5ba4f78df2bcc19f764a4b26a8a4f5049c110090ad5825993aacb052bf8003ad", size = 99215, upload-time = "2026-07-20T02:07:03.852Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0e/464a847d7359e0da75dd9fc5c1d1aa35d0159ea31e5f8e66a3c1c29ff3d0/yarl-1.24.5-cp314-cp314-win_arm64.whl", hash = "sha256:9e4e16c73d717c5cf27626c524d0a2e261ad20e46932b2670f64ad5dde23e26f", size = 94566, upload-time = "2026-07-20T02:07:06.074Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/e03acc4446772660bc335e86e41ef31e4d0d838fd641531a11a5ee33b493/yarl-1.24.5-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e1ae548a9d901adca07899a4147a7c826bbcc06239d3ce9a59f57886a28a4c88", size = 142533, upload-time = "2026-07-20T02:07:08.284Z" }, + { url = "https://files.pythonhosted.org/packages/ae/71/4acd3a1fc7cf14345cdb302665ecd2097f62c365b4f14ca17d4f37775cf9/yarl-1.24.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ff405d91509d88e8d44129cd87b18d70acd1f0c1aeabd7bc3c46792b1fe2acba", size = 100776, upload-time = "2026-07-20T02:07:10.197Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/cfb76b7fe99686db264bff829779a539d923e7564ffd7ef18da6c54c3774/yarl-1.24.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:47e98aab9d8d82ff682e7b0b5dded33bf138a32b817fcf7fa3b27b2d7c412928", size = 100913, upload-time = "2026-07-20T02:07:12.357Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3f/7116e782992abbd4fb6948488aec72078895e929a23078290739e8396fce/yarl-1.24.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0a658a6d3fafee5c6f63c58f3e785c8c43c93fbc02bf9f2b6663f8185e0971f", size = 106507, upload-time = "2026-07-20T02:07:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/33/90/d4d2d73ee78229cc889872eb8e085d8f5c6f51abdb178409fd9b23cf74fd/yarl-1.24.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4377407001ca3c057773f44d8ddd6358fa5f691407c1ba92210bd3cf8d9e4c95", size = 99219, upload-time = "2026-07-20T02:07:16.019Z" }, + { url = "https://files.pythonhosted.org/packages/3e/fa/a6df1a9bccd644eec00abee0dff4277416222cec435330fd1f2858523ec1/yarl-1.24.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7c0494a31a1ac5461a226e7947a9c9b78c44e1dc7185164fa7e9651557a5d9bc", size = 111804, upload-time = "2026-07-20T02:07:18.141Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9e/7b2a1f4bcc20e9447156dd2b1c4d01f70d9df0759025ee7d09a84ffae134/yarl-1.24.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a7cff474ab7cd149765bb784cf6d78b32e18e20473fb7bda860bce98ab58e9da", size = 110943, upload-time = "2026-07-20T02:07:20.06Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/22c92affb0f9b623ca753d27d968b5625b868f12c6378d049d55ae247643/yarl-1.24.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cbb833ccacdb5519eff9b8b71ee618cc2801c878e77e288775d77c3a2ced858a", size = 108251, upload-time = "2026-07-20T02:07:22.217Z" }, + { url = "https://files.pythonhosted.org/packages/45/44/5769b96298c1e195fb412997b6090af2a84105cf59c17613558a2d011d1f/yarl-1.24.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:82f75e05912e84b7a0fe57075d9c59de3cb352b928330f2eb69b2e1f54c3e1f0", size = 106025, upload-time = "2026-07-20T02:07:24.083Z" }, + { url = "https://files.pythonhosted.org/packages/4c/40/009e8e791fd9762c0e1567e69248acb4f49064597e1680874c16dd8bb798/yarl-1.24.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:16a2f5010280020e90f5330257e6944bc33e73593b136cc5a241e6c1dc292498", size = 106573, upload-time = "2026-07-20T02:07:26.248Z" }, + { url = "https://files.pythonhosted.org/packages/20/c6/b7480578f8a0a80946f36ad6df547ecec704f9ba69d2de60f8aa6f1c1cbf/yarl-1.24.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104", size = 100751, upload-time = "2026-07-20T02:07:28.098Z" }, + { url = "https://files.pythonhosted.org/packages/d4/27/4476f3360b91a48c5cf125e91f59a3bd35299d84a431a258d57f5977bb11/yarl-1.24.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0465ec8cedc2349b97a6b595ace64084a50c6e839eca40aa0626f38b8350e331", size = 111643, upload-time = "2026-07-20T02:07:30.88Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/5cdd3e5ee944e8af31e52f6cd3d3af5fd7b937e036ccbbba2c9ffebede95/yarl-1.24.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4db9aecb141cb7a5447171b57aa1ed3a8fee06af40b992ffc31206c0b0121550", size = 106312, upload-time = "2026-07-20T02:07:33.06Z" }, + { url = "https://files.pythonhosted.org/packages/18/86/f406b0c2a6f99575de2da671ef47aa06f89a5be83a27a46971c3b86cecdb/yarl-1.24.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f540c013589084679a6c7fac07096b10159737918174f5dfc5e11bf5bca4dfe6", size = 110379, upload-time = "2026-07-20T02:07:35.155Z" }, + { url = "https://files.pythonhosted.org/packages/f0/6c/9f3adfbd3b30b4fa0f7ccb3a83eba2c1152d3fff554d535e640ba0f7ba2b/yarl-1.24.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a61834fb15d81322d872eaafd333838ae7c9cea84067f232656f75965933d047", size = 108497, upload-time = "2026-07-20T02:07:37.35Z" }, + { url = "https://files.pythonhosted.org/packages/dd/37/91eb2e5ca883a529c1b390348a74cd9fc0512171727f547ce70bfe02be5c/yarl-1.24.5-cp314-cp314t-win_amd64.whl", hash = "sha256:5c88e5815a49d289e599f3513aa7fde0bc2092ff188f99c940f007f90f53d104", size = 102450, upload-time = "2026-07-20T02:07:39.578Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f4/ed5c402ac8fde4403ed3366c2716bfddc8a6677ebd59f3d62772cc7fe468/yarl-1.24.5-cp314-cp314t-win_arm64.whl", hash = "sha256:cf139c02f5f23ef6532040a30ff662c00a318c952334f211046b8e60b7f17688", size = 97222, upload-time = "2026-07-20T02:07:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/61/02/962c1cbfc401a30c1d034dc67ff395f64b52302c6d62de556c1fca99acc0/yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7", size = 58612, upload-time = "2026-07-20T02:07:43.461Z" }, ] [[package]] From 67713bdabdf91e43c30c2ca08d531fa41dd322f2 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 15:17:00 -0400 Subject: [PATCH 09/30] docs: make Python ownership of frame synchronization explicit in handoff Assisted-by: ClaudeCode:claude-fable-5 --- docs/HANDOFF_nwb_imaging_export.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/HANDOFF_nwb_imaging_export.md b/docs/HANDOFF_nwb_imaging_export.md index e28e4bc8..1b06a600 100644 --- a/docs/HANDOFF_nwb_imaging_export.md +++ b/docs/HANDOFF_nwb_imaging_export.md @@ -61,6 +61,30 @@ uv run python -m u19_pipeline.utils.imaging_behavior_sync ~/neuro-data/ef932_act Expected: trials at frames 644–1176 / 1177–1690 / 1691–2000; fit slope ≈1.000027891, residual ≈10.4 ms. +## Synchronization ownership — Python, not MATLAB + +The per-frame synchronization for NWB is done **entirely in this repo**, by +`u19_pipeline/utils/imaging_behavior_sync.py`. Do not shell out to MATLAB and +do not depend on the nightly MATLAB populate. The chain, per frame: + +1. `parse_scanimage_sync(tif)` — reads each TIFF frame's header: the frame's + own timestamp on the imaging clock (`frameTimestamps_sec`) and the I2C + packet giving `(block, trial, iteration)`. +2. `sync_imaging_behavior(tif_files, log)` — assigns every frame a + `(block, trial, iteration)` (forward-filling frames that missed a packet). +3. `frame_times_on_behavior_clock(sync, log)` — looks up each frame's + **iteration time from the behavior log** (`trial.start + + trial.time[iteration-1]`, the per-iteration timestamps ViRMEn logged), + pairs it with the frame's imaging-clock time, and fits one linear clock + mapping. Result: a behavior-clock timestamp for **every** frame, including + pre/post-behavior stretches with no I2C data. This array is what feeds + `set_aligned_timestamps` on the imaging interface. + +The MATLAB `u19_imaging_pipeline.SyncImagingBehavior` table stores only the +block/trial/iteration vectors (no time vector); treat it as an optional +cross-check, never as a dependency. Full explanation and verified numbers: +`docs/imaging_behavior_sync.md` §4–5. + ## Step 0 — done for you The sync port and docs are already committed on `feat/nwb-imaging-export` From 74c4da7b6e68586d984df3e64e8e6c7d64e6ed8e Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:36:44 -0400 Subject: [PATCH 10/30] docs: record NWB imaging spike result and the converter defects it found The spike passes: TowersNWBConverter, ScanImageImagingInterface and our behavior-clock timestamps coexist, and a real conversion of the sample session puts trial 1's first imaging frame 22.3 ms after trial 1 starts. Getting there surfaced defects in tank-lab-to-nwb (one sync array applied to every interface, a hard MATLAB requirement, and a tz-aware/naive subtraction) plus the block-vs-session clock zero, which costs 27 ms if missed. Assisted-by: ClaudeCode:claude-opus-5 --- docs/nwb_imaging_export_plan.md | 41 ++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/nwb_imaging_export_plan.md b/docs/nwb_imaging_export_plan.md index 6c1ac92e..5143d144 100644 --- a/docs/nwb_imaging_export_plan.md +++ b/docs/nwb_imaging_export_plan.md @@ -27,7 +27,46 @@ Tracking issue: https://github.com/BrainCOGS/U19-pipeline-python/issues/111 ## Phase B — Implementation (after feasibility verdict + user go-ahead) -- [ ] Rebase/merge strategy: bring `feat/nwb-export-handler-completion` and our sync branch together +### Spike result — **PASS** (2026-08-26) + +`TowersNWBConverter` + `ScanImageImagingInterface` + our behavior-clock +timestamps coexist in one env (neuroconv 0.10.0, roiextractors 0.9.0, pynwb +4.1.0, hdmf 6.2.0, spikeinterface 0.104.8, datajoint 0.14.9 — no conflict). +A real conversion of the sample session wrote a 0.42 GB NWB with VirmenData +behavior (179 trials) + a `TwoPhotonSeries` of 400 volume timestamps, and +trial 1's first imaging frame lands **+22.3 ms** after trial 1 starts — one +frame period at 50.2 Hz, as expected. + +Three defects surfaced that task D must fix in `tank-lab-to-nwb`: + +1. **One `sync_timestamps` array for every interface.** + `temporally_align_data_interfaces` applies the same array to all + interfaces; imaging has a different sample count (400 volumes vs behavior's + per-iteration frames) and needs its own. Alignment must become + per-interface. +2. **`convert_function_handle_to_str` hard-requires MATLAB.** It raises when + `which("matlab")` is None, which kills the whole conversion — even though + all four values it produces (`experiment_name`, `protocol_name`, + `trial_choice`, `trial_type`) are already treated as optional by the only + caller. It should warn and return `{}`. No MATLAB on the export host means + no export at all today. +3. **tz-aware/naive mismatch in `VirmenDataInterface.get_original_timestamps`.** + `_get_session_start_time()` is tz-aware (`America/New_York`) but + `array_to_dt(epoch["start"])` is naive, so the subtraction raises + `TypeError`. It is masked whenever `sync_timestamps` is supplied — which an + imaging-only session has no reason to supply, so this fires the moment + imaging goes through. + +**Clock zero-point (contract detail, easy to get wrong).** +`frame_times_on_behavior_clock` returns times on the *block-relative* ViRMEn +clock (`trial.start + trial.time`), but the converter zeroes the NWB timeline +at `log.session.start` and shifts its trials table by `epoch_start_nwb`. On +the sample session that offset is **+27.0 ms**. Imaging timestamps must take +the same shift; without it frame 644 lands 4.7 ms *before* trial 1 starts, +which is physically backwards. + +- [x] Spike: converter + ScanImage interface + our timestamps in one env, real conversion, aligned TwoPhotonSeries +- [x] Rebase/merge strategy: bring `feat/nwb-export-handler-completion` and our sync branch together - [ ] `validate_imaging_data_exists`: fix table references; resolve session→recording→TiffSplit - [ ] `resolve_input_paths` / `build_source_data`: add imaging tiff paths + behavior file - [ ] Converter: add ScanImage imaging interface with behavior-clock timestamps (subclass or extend TowersNWBConverter) From a4a6637ae4192b7d688f57d209514008161649c9 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:36:44 -0400 Subject: [PATCH 11/30] docs: explain the block-vs-session clock zero behind the 27 ms NWB offset trial.start rides ViRMEn's vr.timeElapsed, which the engine zeroes at firstTic - after vr.code.initialization has already stamped both session.start and block.start. NWB zeroes at session.start, so every timeElapsed-based quantity, imaging timestamps included, needs the block-vs-session shift. The shift is struct allocation plus log-file I/O between two clock calls, so it varies per session and has to be read from each log rather than hardcoded. Also records why wall clocks can't do this job: reconstructing the zero through the imaging PC's epoch stamp lands 958 ms out, which is the inter-machine skew that motivates content-based I2C sync in the first place. Assisted-by: ClaudeCode:claude-opus-5 --- docs/imaging_behavior_sync.md | 94 +++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/docs/imaging_behavior_sync.md b/docs/imaging_behavior_sync.md index 9b5968cb..2d5c6d6e 100644 --- a/docs/imaging_behavior_sync.md +++ b/docs/imaging_behavior_sync.md @@ -322,3 +322,97 @@ in this document are the missing ingredient for that TODO: resolve the scan's TIFFs, run `sync_imaging_behavior` + `frame_times_on_behavior_clock` (or fetch the stored vectors from `u19_imaging_pipeline.SyncImagingBehavior`), and hand the aligned timestamps to `ScanImageImagingInterface`. + +## 6. Which clock is `trial.start` on? (and the ~27 ms NWB offset) + +Short answer: `trial.start` is on ViRMEn's `vr.timeElapsed` clock, which is +zeroed at **block start**, not at `log.session.start`. NWB zeroes its timeline +at `session.start`. The gap between the two is the offset, and it must be read +out of each session's log rather than assumed. + +### Where the numbers come from + +`ExperimentLog` writes trial times straight off the engine clock, with no +block-relative correction anywhere: + +```matlab +% ExperimentLog.m:501 +obj.currentTrial.start = vr.timeElapsed; +% ExperimentLog.m:~540 (logTick) +obj.currentTrial.time(obj.currentIt,1) = vr.timeElapsed - obj.currentTrial.start; +``` + +`obj.blockStart` exists but is only ever read to compute `block.duration` +(`ExperimentLog.m:381,848`) — it is never subtracted from `trial.start`. + +So the question is what zeroes `vr.timeElapsed`. The engine: + +```matlab +% virmenEngine.m +101 vr.initialTimestamp = clock; % logged as log.initialTimestamp +102 vr.preTic = tic; +105 vr = vr.code.initialization(vr); % <- ExperimentLog built in here +123 vr.timeElapsedFirstTrial = toc(vr.preTic); +124 firstTic = tic; % <- vr.timeElapsed zero +367 timeElapsed = toc(firstTic); +``` + +`vr.code.initialization` is where the `ExperimentLog` is constructed, and that +constructor stamps `session.start = clock` (`ExperimentLog.m:228`) and then, via +`newBlock()`, `block.start = clock` (`ExperimentLog.m:864`). Both land *before* +`firstTic`. So the ordering on the wall clock is: + +``` +initialTimestamp ... session.start ... block.start ... firstTic (timeElapsed = 0) + 12:03:17.783 12:03:23.152 12:03:23.179 ~12:03:23.179 + eps +``` + +### What the 27 ms actually is + +It is the wall-clock time between two `clock` calls during ViRMEn startup — +the tail of the `ExperimentLog` constructor plus the start of `newBlock()`: + +- version/bookkeeping struct assembly, +- `obj.makeOrContinueLog(cfg.logFile)` — **file I/O on the behavior log**, +- `repmat(obj.trialInfo, 1, totalTrials)` — allocating the entire trial struct + array up front (`ExperimentLog.m:858`). + +It is not clock drift, not a physical delay in the data, and not a sync +artifact. It is allocation and file-I/O cost. It therefore **varies per +session** — it scales with `totalTrials` and with whatever else the machine was +doing — so it must be computed from each log as +`block[0].start - session.start` and never hardcoded to 27 ms. + +### Consequence for NWB export + +Everything measured in `timeElapsed` units shares the block-start zero: trial +starts, per-iteration `trial.time`, and — because +`frame_times_on_behavior_clock` fits against `trial.start + trial.time` — our +per-frame imaging timestamps. NWB zeroes at `session.start`. So all of them take +the same shift: + +```python +epoch_offset = (block[0].start - session.start).total_seconds() +timestamps = frame_times_on_behavior_clock(sync, log)[0] + epoch_offset +``` + +`VirmenDataInterface` already applies this shift to its trials table +(`epoch_start_nwb`). Imaging must match it. Skipping it puts trial 1's first +imaging frame 4.7 ms *before* trial 1 starts instead of 22.3 ms after — wrong +by one frame period, and small enough to pass for ordinary jitter. + +### Why wall clocks can't do this job + +The imaging TIFF header carries an absolute `epoch` (acquisition start on the +ScanImage PC). Reconstructing the `timeElapsed` zero through it — imaging +`epoch` + `frameTimestamps_sec` for a frame, minus that frame's behavior time — +gives an instant **958 ms** after `block.start`. That residual is inter-machine +wall-clock skew between the ViRMEn and ScanImage PCs, and it is three orders of +magnitude larger than the alignment we need. + +It does cleanly rule out `initialTimestamp` as the zero (that candidate misses +by 6.35 s, far outside any plausible skew), which is what it was used for here. +But it is also the whole reason the sync is content-based: the I2C +`[block, trial, iteration]` packets tie the two streams together by *what* was +happening, not by *when* two unsynchronized clocks each thought it was. Never +align these streams through `epoch`. From e82feaf56d42e1c714e159e89122caab7a540555 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:37:01 -0400 Subject: [PATCH 12/30] fix: validate and size imaging exports against the real TiffSplit tables validate_imaging_data_exists referenced imaging_element.Scan and imaging_element.FieldOfView, neither of which exists -- imaging_element is element_calcium_imaging.imaging_preprocess. It now walks the real chain, ImagingPipelineSession -> AcquiredTiff -> TiffSplit -> TiffSplit.File, and takes a recording key so callers resolve session -> recording_ids the same way the ephys validator does. An empty fov_numbers list now requires at least one TiffSplit to exist rather than passing vacuously: an empty DataJoint restriction matches every row, which is what made the old code report success for sessions with no imaging at all. estimate_imaging_size_gb computed 0.05 GB/FOV, more than 10x short for raw stacks. It now derives bytes from fov_pixel_resolution_xy and the frame counts in TiffSplit.File, at 2 bytes/pixel for ScanImage int16, and falls back to 0.5 GB/FOV only when the lookup fails. estimate_total_size's imaging branch no longer skips: the Scan-to-session linkage its TODO was waiting on is the same recording_ids_for_session hop the ephys branch above it already uses. Assisted-by: ClaudeCode:claude-opus-5 --- u19_pipeline/nwb_production_utils.py | 161 +++++++++++++++++++++------ 1 file changed, 127 insertions(+), 34 deletions(-) diff --git a/u19_pipeline/nwb_production_utils.py b/u19_pipeline/nwb_production_utils.py index 5a61ade8..cb5d2ece 100644 --- a/u19_pipeline/nwb_production_utils.py +++ b/u19_pipeline/nwb_production_utils.py @@ -79,23 +79,83 @@ def estimate_ephys_size_gb(recording_key: dict, probe_numbers: list) -> float: return size_gb -def estimate_imaging_size_gb(scan_key: dict, fov_numbers: list) -> float: +def estimate_imaging_size_gb(recording_key: dict, fov_numbers: list) -> float: """ - Estimate NWB size for imaging data (ROI traces only). - - Logic: ~50MB per FOV for ROI masks + calcium traces + Estimate the on-disk size of raw ScanImage imaging data for a recording. + + Logic: for each requested FOV (an imaging_pipeline.TiffSplit.tiff_split + number), sum the frame counts of its TiffSplit.File rows -- each + file_frame_range is a [first last] frame-index pair, inclusive -- and + multiply by the per-frame pixel count from + TiffSplit.fov_pixel_resolution_xy and 2 bytes/pixel (ScanImage raw frames + are int16). If fov_numbers is empty, all TiffSplits for the recording are + used. + + Sanity check against the sample session: a 2000-frame, 512x512 int16 + ScanImage BigTIFF (5-slice fastZ, single FOV) works out to + 512 * 512 * 2000 frames * 2 bytes/pixel = 1,048,576,000 bytes + ~= 0.98 GiB + by this formula. The actual TIFF measured 0.62 GB on disk (ScanImage + applies TIFF compression) and the NWB file converted from it measured + 0.42 GB. This function deliberately estimates the *uncompressed raw* + footprint rather than the compressed-on-disk or NWB-output size, so for + this sample it comes out ~1.6-2.3x the true footprint -- overestimating + is the safer failure mode for a size estimate used to provision space. + + Falls back to a flat per-FOV constant only if the DB lookup fails (e.g. + frame-range/resolution metadata not yet populated for this recording). + The fallback is calibrated off the same sample (0.62 GB observed for one + FOV) and rounds down slightly to 0.5 GB/FOV as a documented, + order-of-magnitude-correct default -- replacing the old flat 0.05 GB/FOV + guess, which was more than 10x too small. Args: - scan_key: Dictionary with scan identifiers - fov_numbers: List of FOV numbers + recording_key: Dictionary with recording identifiers (e.g. + {"recording_id": rid}). Callers with only an acquisition.Session + key should resolve recording_id(s) via recording_ids_for_session() + first and call this once per recording_id. + fov_numbers: List of FOV numbers (TiffSplit.tiff_split values). Empty + means "all FOVs for this recording". Returns: - Estimated size in GB + Estimated size in GB. """ - fov_count = len(fov_numbers) - # 50MB per FOV - size_gb = fov_count * 0.05 - return size_gb + from u19_pipeline import imaging_pipeline # noqa: PLC0415 + + bytes_per_pixel = 2 # ScanImage raw frames are int16 + fallback_gb_per_fov = 0.5 # see docstring for derivation + + try: + if fov_numbers: + restriction = [ + {**recording_key, "tiff_split": fov_num} for fov_num in fov_numbers + ] + else: + restriction = recording_key + + split_keys = (imaging_pipeline.TiffSplit & restriction).fetch("KEY") + if not split_keys: + raise ValueError("No TiffSplit rows found for recording/FOVs") + + total_bytes = 0 + for split_key in split_keys: + rows, cols = (imaging_pipeline.TiffSplit & split_key).fetch1( + "fov_pixel_resolution_xy" + ) + pixels_per_frame = int(rows) * int(cols) + + frame_ranges = (imaging_pipeline.TiffSplit.File & split_key).fetch( + "file_frame_range" + ) + n_frames = sum(int(fr[1]) - int(fr[0]) + 1 for fr in frame_ranges) + + total_bytes += pixels_per_frame * n_frames * bytes_per_pixel + + return total_bytes / (1024**3) + except Exception: + # Conservative fallback -- see docstring for the 0.5 GB/FOV derivation. + fov_count = len(fov_numbers) if fov_numbers else 1 + return fov_count * fallback_gb_per_fov def _parse_number_list(raw) -> list: @@ -160,16 +220,20 @@ def estimate_total_size(nwb_job_key: dict) -> float: total_gb += estimate_ephys_size_gb({"recording_id": rid}, probe_numbers) elif modality_name == "imaging": - # TODO: the imaging_element.Scan <-> acquisition.Session linkage is - # not reliably known. Until it is confirmed we cannot build a real - # scan_key; estimating against an empty restriction would be vacuous, - # so skip with a logged warning rather than fabricate a key. - log.warning( - "estimate_total_size: imaging Scan<->session linkage not yet wired " - "for session %s; skipping imaging estimate.", - session_key, - ) - continue + # The job carries the session key, not recording_id. Resolve the + # recording_id(s) for the session via the BehaviorSession Part table, + # exactly like the ephys branch above. + recording_ids = recording_ids_for_session(session_key) + fov_numbers = _parse_number_list(modality.get("fov_numbers")) + if not recording_ids: + log.warning( + "estimate_total_size: no recording linked to session %s; " + "skipping imaging estimate.", + session_key, + ) + continue + for rid in recording_ids: + total_gb += estimate_imaging_size_gb({"recording_id": rid}, fov_numbers) return total_gb @@ -233,29 +297,58 @@ def validate_ephys_data_exists( return False, f"Error validating ephys data: {str(e)}" -def validate_imaging_data_exists(scan_key: dict, fov_numbers: list) -> tuple[bool, str]: +def validate_imaging_data_exists( + recording_key: dict, fov_numbers: list +) -> tuple[bool, str]: """ - Validate that imaging data exists for specified FOVs. + Validate that imaging data exists for specified FOVs (tiff splits). + + Validates through the real imaging tables in u19_pipeline.imaging_pipeline: + ImagingPipelineSession (one row per imaging recording) -> AcquiredTiff (the + raw tiff acquisition record) -> TiffSplit (one row per FOV, keyed by the + tinyint `tiff_split` number that fov_numbers refers to) -> TiffSplit.File + (the actual split files on disk). Args: - scan_key: Dictionary with scan identifiers - fov_numbers: List of FOV numbers + recording_key: Dictionary with recording identifiers (must resolve to + a recording.Recording primary key, e.g. {"recording_id": rid}). + Callers with only an acquisition.Session key should resolve + recording_id(s) via recording_ids_for_session() first and call + this once per recording_id, the same way validate_ephys_data_exists + is called. + fov_numbers: List of FOV numbers (TiffSplit.tiff_split values). If + empty, validates that at least one TiffSplit exists for the + recording instead of vacuously passing (an empty DataJoint + restriction matches everything). Returns: Tuple of (valid, error_message) """ - from u19_pipeline.imaging_pipeline import imaging_element # noqa: PLC0415 + from u19_pipeline import imaging_pipeline # noqa: PLC0415 try: - # Check if scan exists - if not (imaging_element.Scan & scan_key): - return False, "Scan not found in database" - - # Check if FOVs exist + # Check if the imaging session exists for this recording + if not (imaging_pipeline.ImagingPipelineSession & recording_key): + return False, "Imaging session not found in database" + + # Check if the raw tiff acquisition record exists + if not (imaging_pipeline.AcquiredTiff & recording_key): + return False, "No acquired tiff found for imaging session" + + if not fov_numbers: + # Guard against vacuously passing on an empty restriction: require + # at least one tiff split to exist for this recording. + if not (imaging_pipeline.TiffSplit & recording_key): + return False, "No tiff splits found for imaging session" + return True, "" + + # Check if each requested FOV (tiff split) exists and has files for fov_num in fov_numbers: - fov_key = {**scan_key, "fov": fov_num} - if not (imaging_element.FieldOfView & fov_key): - return False, f"FOV {fov_num} not found" + split_key = {**recording_key, "tiff_split": fov_num} + if not (imaging_pipeline.TiffSplit & split_key): + return False, f"FOV (tiff split) {fov_num} not found" + if not (imaging_pipeline.TiffSplit.File & split_key): + return False, f"FOV (tiff split) {fov_num} has no files recorded" return True, "" except Exception as e: From 9eb4398384a126211249300772961578916dcbab Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:37:01 -0400 Subject: [PATCH 13/30] test: cover the imaging validation, sizing and source-data paths Replaces the stale imaging validator tests, which mocked the nonexistent imaging_element.Scan/FieldOfView tables, with tests against the real TiffSplit chain. Pins the vacuous-pass bug from both sides so an empty fov_numbers list cannot silently report success again. The conversion-side tests describe path resolution and the imaging source_data entry, which are not implemented yet, so two of them fail by design until that lands. Assisted-by: ClaudeCode:claude-opus-5 --- tests/nwb_export/test_imaging_conversion.py | 229 ++++++++++++++++++ .../test_imaging_size_estimation.py | 167 +++++++++++++ tests/nwb_export/test_modality_validators.py | 116 ++++++--- 3 files changed, 484 insertions(+), 28 deletions(-) create mode 100644 tests/nwb_export/test_imaging_conversion.py create mode 100644 tests/nwb_export/test_imaging_size_estimation.py diff --git a/tests/nwb_export/test_imaging_conversion.py b/tests/nwb_export/test_imaging_conversion.py new file mode 100644 index 00000000..3b3c3856 --- /dev/null +++ b/tests/nwb_export/test_imaging_conversion.py @@ -0,0 +1,229 @@ +""" +No-db tests for imaging TIFF path resolution and source-data wiring in +u19_pipeline.nwb_export.conversion (imaging export wiring, see +docs/nwb_imaging_export_plan.md Phase B and +docs/HANDOFF_nwb_imaging_export.md Step 3, item D). + +Covers: +- resolve_imaging_paths: maps imaging_pipeline.TiffSplit / TiffSplit.File rows + to absolute filesystem paths under dj.config's imaging root dir. +- build_source_data: adds an imaging entry when the job requests imaging and + TIFF paths resolve, omits it cleanly otherwise, and leaves the existing + behavior/ephys entries untouched either way. + +As of writing, neither piece has landed in conversion.py yet (task D is +in-flight in parallel with this test file) -- these tests are written against +the contract described in the handoff doc, not against a stub. Where the +exact function signature is a guess, it is marked with a `# contract:` +comment. A failure here because the function does not exist yet is expected +and should be reported, not weakened. +""" + +from __future__ import annotations + +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest + + +def _make_dj_table(rows: list): + """Mirrors the helper in tests/nwb_export/test_modality_validators.py.""" + mock = MagicMock() + mock.__bool__ = lambda self: bool(rows) + mock.__and__ = lambda self, _: self + mock.fetch.return_value = rows + return mock + + +# --------------------------------------------------------------------------- +# resolve_imaging_paths +# --------------------------------------------------------------------------- + + +@pytest.mark.no_db +class TestResolveImagingPaths: + """ + contract: resolve_imaging_paths(recording_key, fov_numbers) -> list[str] + lives in u19_pipeline.nwb_export.conversion. It queries + imaging_pipeline.TiffSplit / TiffSplit.File and joins + tiff_split_directory/tiff_split_filename onto + dj.config['custom']['imaging_root_data_dir'], mirroring the existing + imaging_pipeline.get_scan_image_files / get_calcium_imaging_files helpers + (u19_pipeline/imaging_pipeline.py:277-311). + """ + + def test_maps_tiffsplit_rows_to_absolute_paths_under_imaging_root( + self, tmp_path, monkeypatch + ): + import importlib + + conversion = importlib.import_module("u19_pipeline.nwb_export.conversion") + if not hasattr(conversion, "resolve_imaging_paths"): + pytest.fail( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths does not " + "exist yet -- expected per docs/HANDOFF_nwb_imaging_export.md " + "Step 3/D.2 (TIFF path resolution helper)." + ) + + # Realistic on-disk layout: // + relative_dir = "subj1/2026-08-07_1/tiff_split_0" + filename = "split_0_00001.tif" + split_dir = tmp_path / relative_dir + split_dir.mkdir(parents=True) + (split_dir / filename).write_bytes(b"\x00") + + import datajoint as dj + + monkeypatch.setitem( + dj.config, + "custom", + {**dj.config.get("custom", {}), "imaging_root_data_dir": [str(tmp_path)]}, + ) + + file_rows = [ + { + "recording_id": 1, + "tiff_split": 0, + "file_number": 0, + "tiff_split_directory": relative_dir, + "tiff_split_filename": filename, + } + ] + + tiffsplit_mock = _make_dj_table([{"recording_id": 1, "tiff_split": 0}]) + file_mock = _make_dj_table(file_rows) + file_mock.fetch.return_value = file_rows + tiffsplit_mock.File = file_mock + + img_m = MagicMock() + img_m.TiffSplit = tiffsplit_mock + + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": img_m}): + paths = conversion.resolve_imaging_paths({"recording_id": 1}, [0]) + + assert len(paths) == 1 + resolved = Path(paths[0]) + assert resolved.is_absolute() + assert resolved.name == filename + assert str(tmp_path) in str(resolved) + + +# --------------------------------------------------------------------------- +# build_source_data — imaging wiring +# --------------------------------------------------------------------------- + + +@pytest.mark.no_db +class TestBuildSourceDataImaging: + """ + contract: build_source_data(job, export_params, virmen_file, kilosort_dir) + gains an imaging branch analogous to the existing ephys branch: when + export_params['include_imaging'] is truthy, it resolves TIFF paths (via + resolve_imaging_paths or equivalent) and adds an imaging source_data + entry; when TIFF paths do not resolve, or imaging was not requested, + imaging is simply absent from source_data -- and the other entries are + unaffected either way. + """ + + @pytest.fixture() + def virmen_file(self, tmp_path): + f = tmp_path / "session.mat" + f.write_bytes(b"\x00") + return f + + @pytest.fixture() + def base_job(self): + return { + "subject_fullname": "subj1", + "session_date": "2026-08-07", + "session_number": 1, + } + + @staticmethod + def _imaging_like_keys(source_data: dict) -> list: + return [ + k + for k in source_data + if any(tag in k.lower() for tag in ("imag", "scanimage", "tiff")) + ] + + def test_no_imaging_modality_omits_imaging_entry_cleanly( + self, virmen_file, base_job + ): + from u19_pipeline.nwb_export.conversion import build_source_data + + export_params: dict = {} # no include_imaging flag at all + source_data = build_source_data(base_job, export_params, virmen_file, None) + + assert "VirmenData" in source_data + assert self._imaging_like_keys(source_data) == [] + + def test_behavior_entry_unaffected_by_imaging_wiring(self, virmen_file, base_job): + from u19_pipeline.nwb_export.conversion import build_source_data + + export_params = {"include_imaging": True} + with patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + create=True, + return_value=["/data/root/subj1/split_0.tif"], + ): + source_data = build_source_data(base_job, export_params, virmen_file, None) + + assert source_data["VirmenData"] == {"file_path": str(virmen_file)} + + def test_ephys_entry_unaffected_by_imaging_wiring( + self, virmen_file, base_job, tmp_path + ): + from u19_pipeline.nwb_export.conversion import build_source_data + + kilosort_dir = tmp_path / "kilosort" + probe_dir = kilosort_dir / "probeA_imec0" / "job_id_1" / "kilosort2_output" + probe_dir.mkdir(parents=True) + + export_params = {"include_ephys": True, "include_imaging": True} + with patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + create=True, + return_value=["/data/root/subj1/split_0.tif"], + ): + source_data = build_source_data( + base_job, export_params, virmen_file, kilosort_dir + ) + + assert "KilosortProbe0" in source_data + assert source_data["KilosortProbe0"] == {"folder_path": str(probe_dir)} + + def test_adds_imaging_entry_when_included_and_paths_resolve( + self, virmen_file, base_job + ): + from u19_pipeline.nwb_export.conversion import build_source_data + + export_params = {"include_imaging": True} + resolved_paths = ["/data/root/subj1/split_0.tif"] + + with patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + create=True, + return_value=resolved_paths, + ): + source_data = build_source_data(base_job, export_params, virmen_file, None) + + imaging_keys = self._imaging_like_keys(source_data) + assert imaging_keys, ( + f"expected an imaging source_data entry when include_imaging=True " + f"and TIFF paths resolve, got keys={list(source_data)}" + ) + + def test_omits_imaging_when_paths_do_not_resolve(self, virmen_file, base_job): + from u19_pipeline.nwb_export.conversion import build_source_data + + export_params = {"include_imaging": True} + with patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + create=True, + return_value=[], + ): + source_data = build_source_data(base_job, export_params, virmen_file, None) + + assert self._imaging_like_keys(source_data) == [] diff --git a/tests/nwb_export/test_imaging_size_estimation.py b/tests/nwb_export/test_imaging_size_estimation.py new file mode 100644 index 00000000..0e6cf0b1 --- /dev/null +++ b/tests/nwb_export/test_imaging_size_estimation.py @@ -0,0 +1,167 @@ +""" +No-db tests for estimate_imaging_size_gb (u19_pipeline.nwb_production_utils). + +Companion to tests/nwb_export/test_modality_validators.py's imaging validator +tests -- covers the size-estimation half of the same imaging wiring (see +docs/nwb_imaging_export_plan.md Phase B). + +The estimator is expected to derive size from real frame count and pixel +geometry (imaging_pipeline.TiffSplit.fov_pixel_resolution_xy and +TiffSplit.File.file_frame_range), not a flat per-FOV constant -- the original +implementation used a flat 0.05 GB/FOV, which was >10x too small versus the +measured sample session (a 2000-frame, 512x512 int16 ScanImage TIFF is 0.62 GB +on disk and produced a 0.42 GB NWB). +""" + +from __future__ import annotations + +from unittest.mock import MagicMock, patch + +import pytest + + +def _make_tiffsplit_mock(split_keys: list, resolution, frame_ranges: list): + """ + Mock imaging_pipeline.TiffSplit (and its .File part table) sufficient for + estimate_imaging_size_gb: + + split_keys = (TiffSplit & restriction).fetch("KEY") + rows, cols = (TiffSplit & split_key).fetch1("fov_pixel_resolution_xy") + frame_ranges = (TiffSplit.File & split_key).fetch("file_frame_range") + + `&` is a no-op here (returns the same mock) since these tests only need a + single FOV's worth of data -- mirrors the simplification already used by + the existing validator mocks in test_modality_validators.py. + """ + tiffsplit_mock = MagicMock() + tiffsplit_mock.__and__ = lambda self, _restriction: tiffsplit_mock + tiffsplit_mock.fetch = MagicMock( + side_effect=lambda field=None, **_kw: split_keys if field == "KEY" else None + ) + tiffsplit_mock.fetch1 = MagicMock(return_value=resolution) + + file_mock = MagicMock() + file_mock.__and__ = lambda self, _restriction: file_mock + file_mock.fetch = MagicMock(return_value=frame_ranges) + + tiffsplit_mock.File = file_mock + + img_m = MagicMock() + img_m.TiffSplit = tiffsplit_mock + return img_m + + +@pytest.mark.no_db +class TestEstimateImagingSizeGb: + def test_2000_frame_512x512_int16_lands_in_sane_band(self): + """ + Ground truth: 2000 frames * 512 * 512 pixels * 2 bytes/pixel + ~= 1.05 GB (0.98 GiB). The real sample TIFF is 0.62 GB on disk + (ScanImage compresses) and its NWB is 0.42 GB, so the *raw* estimate + should land noticeably above both -- assert a sane band rather than + an exact float. + """ + from u19_pipeline.nwb_production_utils import estimate_imaging_size_gb + + img_m = _make_tiffsplit_mock( + split_keys=[{"recording_id": 1, "tiff_split": 0}], + resolution=(512, 512), + frame_ranges=[[1, 2000]], + ) + + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": img_m}): + size_gb = estimate_imaging_size_gb({"recording_id": 1}, [0]) + + assert 0.3 <= size_gb <= 2.0 + + def test_not_a_flat_per_fov_constant(self): + """ + Drive two very different frame-count/geometry combinations through the + estimator and require different answers -- pins that the result comes + from real metadata, not a fixed per-FOV number like the original + (buggy) 0.05 GB/FOV flat estimate. + """ + from u19_pipeline.nwb_production_utils import estimate_imaging_size_gb + + small_img_m = _make_tiffsplit_mock( + split_keys=[{"recording_id": 1, "tiff_split": 0}], + resolution=(256, 256), + frame_ranges=[[1, 100]], + ) + large_img_m = _make_tiffsplit_mock( + split_keys=[{"recording_id": 1, "tiff_split": 0}], + resolution=(512, 512), + frame_ranges=[[1, 2000]], + ) + + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": small_img_m}): + small_gb = estimate_imaging_size_gb({"recording_id": 1}, [0]) + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": large_img_m}): + large_gb = estimate_imaging_size_gb({"recording_id": 1}, [0]) + + assert large_gb > small_gb + # The old flat-constant implementation returned exactly 0.05 GB/FOV + # regardless of geometry/frame count -- confirm neither result matches it. + assert small_gb != pytest.approx(0.05) + assert large_gb != pytest.approx(0.05) + + def test_multiple_fovs_sum_their_individual_sizes(self): + """Two FOVs with different geometry should sum, not just multiply a + single FOV's estimate by fov count.""" + from u19_pipeline.nwb_production_utils import estimate_imaging_size_gb + + split_keys = [ + {"recording_id": 1, "tiff_split": 0}, + {"recording_id": 1, "tiff_split": 1}, + ] + img_m = _make_tiffsplit_mock( + split_keys=split_keys, + resolution=(512, 512), + frame_ranges=[[1, 1000]], + ) + + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": img_m}): + two_fov_gb = estimate_imaging_size_gb({"recording_id": 1}, [0, 1]) + + single_fov_img_m = _make_tiffsplit_mock( + split_keys=[{"recording_id": 1, "tiff_split": 0}], + resolution=(512, 512), + frame_ranges=[[1, 1000]], + ) + with patch.dict( + "sys.modules", {"u19_pipeline.imaging_pipeline": single_fov_img_m} + ): + single_fov_gb = estimate_imaging_size_gb({"recording_id": 1}, [0]) + + assert two_fov_gb == pytest.approx(2 * single_fov_gb, rel=1e-6) + + def test_falls_back_to_documented_constant_on_db_error(self): + """When the DB lookup raises (e.g. metadata not populated yet), the + function must not propagate the exception -- it falls back to a fixed, + documented per-FOV constant.""" + from u19_pipeline.nwb_production_utils import estimate_imaging_size_gb + + broken_tiffsplit = MagicMock() + broken_tiffsplit.__and__ = MagicMock(side_effect=RuntimeError("db down")) + img_m = MagicMock() + img_m.TiffSplit = broken_tiffsplit + + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": img_m}): + size_gb = estimate_imaging_size_gb({"recording_id": 1}, [0, 1]) + + # Documented fallback in the current implementation is 0.5 GB/FOV + # (see estimate_imaging_size_gb's docstring "fallback_gb_per_fov"). + assert size_gb == pytest.approx(1.0) + assert size_gb > 0 + + def test_falls_back_when_no_tiffsplit_rows_found(self): + """An empty split_keys result (no TiffSplit rows at all) must also + hit the fallback path rather than silently returning 0.""" + from u19_pipeline.nwb_production_utils import estimate_imaging_size_gb + + img_m = _make_tiffsplit_mock(split_keys=[], resolution=(0, 0), frame_ranges=[]) + + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": img_m}): + size_gb = estimate_imaging_size_gb({"recording_id": 1}, [0]) + + assert size_gb > 0 diff --git a/tests/nwb_export/test_modality_validators.py b/tests/nwb_export/test_modality_validators.py index 5dd88bbd..e5087c40 100644 --- a/tests/nwb_export/test_modality_validators.py +++ b/tests/nwb_export/test_modality_validators.py @@ -148,51 +148,111 @@ def test_returns_tuple_bool_str(self): # --------------------------------------------------------------------------- # Imaging validator tests # --------------------------------------------------------------------------- +# +# validate_imaging_data_exists was rewritten (see +# u19_pipeline/nwb_production_utils.py:300-355) to walk the real imaging +# tables in u19_pipeline.imaging_pipeline instead of the nonexistent +# imaging_element.Scan/FieldOfView: +# +# ImagingPipelineSession (imaging recording exists) +# -> AcquiredTiff (raw tiff acquisition record) +# -> TiffSplit (one row per FOV, keyed by tinyint `tiff_split`) +# -> TiffSplit.File (the split files actually on disk) +# +# It also takes a recording_key (like validate_ephys_data_exists), not a +# scan_key -- callers resolve recording_id(s) via recording_ids_for_session() +# first, exactly like the ephys path. @pytest.mark.no_db class TestImagingValidatorLogic: """validate_imaging_data_exists decision paths.""" - def _call(self, scan_exists: bool, fovs_exist: bool, fov_numbers: list | None = None): + def _make_imaging_pipeline_mock( + self, + session_exists: bool = True, + acquired_tiff_exists: bool = True, + tiffsplit_exists: bool = True, + files_exist: bool = True, + ): + session_mock = _make_dj_table([{"recording_id": 1}] if session_exists else []) + acquired_tiff_mock = _make_dj_table( + [{"recording_id": 1}] if acquired_tiff_exists else [] + ) + tiffsplit_mock = _make_dj_table([{"tiff_split": 0}] if tiffsplit_exists else []) + file_mock = _make_dj_table([{"file_number": 0}] if files_exist else []) + tiffsplit_mock.File = file_mock + + img_m = MagicMock() + img_m.ImagingPipelineSession = session_mock + img_m.AcquiredTiff = acquired_tiff_mock + img_m.TiffSplit = tiffsplit_mock + return img_m + + def _call( + self, + session_exists: bool = True, + acquired_tiff_exists: bool = True, + tiffsplit_exists: bool = True, + files_exist: bool = True, + fov_numbers: list | None = None, + ): from u19_pipeline.nwb_production_utils import validate_imaging_data_exists - fov_numbers = fov_numbers or [0] + fov_numbers = [0] if fov_numbers is None else fov_numbers - scan_mock = _make_dj_table([{"scan_id": 1}] if scan_exists else []) - fov_mock = _make_dj_table([{"fov": 0}] if fovs_exist else []) + img_m = self._make_imaging_pipeline_mock( + session_exists, acquired_tiff_exists, tiffsplit_exists, files_exist + ) - img_m = MagicMock() - img_m.Scan = scan_mock - img_m.FieldOfView = fov_mock - imaging_pipeline_m = MagicMock() - imaging_pipeline_m.imaging_element = img_m - - with patch.dict( - "sys.modules", - { - "u19_pipeline.imaging_pipeline": imaging_pipeline_m, - "u19_pipeline.imaging_pipeline.imaging_element": img_m, - }, - ): - return validate_imaging_data_exists({"scan_id": 1}, fov_numbers) + with patch.dict("sys.modules", {"u19_pipeline.imaging_pipeline": img_m}): + return validate_imaging_data_exists({"recording_id": 1}, fov_numbers) - def test_valid_scan_with_fovs_returns_true(self): - ok, msg = self._call(scan_exists=True, fovs_exist=True) + def test_valid_session_with_fovs_and_files_returns_true(self): + ok, msg = self._call() assert ok is True + assert msg == "" - def test_missing_scan_returns_false(self): - ok, msg = self._call(scan_exists=False, fovs_exist=False) + def test_missing_imaging_session_returns_false_with_clear_message(self): + ok, msg = self._call( + session_exists=False, acquired_tiff_exists=False, tiffsplit_exists=False + ) assert ok is False + assert "session" in msg.lower() - def test_missing_fov_returns_false(self): - ok, msg = self._call(scan_exists=True, fovs_exist=False) + def test_missing_acquired_tiff_returns_false(self): + ok, msg = self._call(acquired_tiff_exists=False, tiffsplit_exists=False) assert ok is False + assert "tiff" in msg.lower() - def test_error_message_mentions_fov(self): - ok, msg = self._call(scan_exists=True, fovs_exist=False) - assert "fov" in msg.lower() or "0" in msg + def test_missing_tiffsplit_for_requested_fov_returns_false(self): + ok, msg = self._call(tiffsplit_exists=False, files_exist=False, fov_numbers=[0]) + assert ok is False + assert "fov" in msg.lower() or "tiff split" in msg.lower() or "0" in msg + + def test_tiffsplit_without_file_rows_returns_false(self): + ok, msg = self._call(files_exist=False) + assert ok is False + assert "file" in msg.lower() + + def test_empty_fov_numbers_does_not_pass_vacuously(self): + """ + Pin the original bug: an empty DataJoint restriction matches every + row, so an empty fov_numbers list must not vacuously return True. With + no TiffSplit rows present at all for the recording, it must fail. + """ + ok, msg = self._call(tiffsplit_exists=False, files_exist=False, fov_numbers=[]) + assert ok is False + assert len(msg) > 0 + + def test_empty_fov_numbers_passes_when_a_tiffsplit_exists(self): + """Empty fov_numbers means 'validate the recording has *some* imaging + data', not 'skip validation entirely' -- it must still require at + least one real TiffSplit row.""" + ok, msg = self._call(fov_numbers=[]) + assert ok is True def test_returns_tuple(self): - result = self._call(scan_exists=True, fovs_exist=True) + result = self._call() + assert isinstance(result, tuple) assert len(result) == 2 From b491407912bfc03c72956783a118c913cdc09e21 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:37:01 -0400 Subject: [PATCH 14/30] docs: document the NWB export pipeline and how to wire a modality Covers the handler's stage flow, the six-step recipe for adding a modality, the imaging specifics (deferring to imaging_behavior_sync.md for the sync and clock details), and the tank-lab-to-nwb dependency, which is path-installed and unpinned and so has to move in lockstep with this repo. Records the clock convention as policy: imaging-only sessions use the ViRMEn clock, and the block-vs-session offset is computed per session rather than hardcoded. Mixed ephys+imaging sessions stay an open question, flagged for sign-off before the first DANDI upload, since ephys currently aligns behavior onto the ephys clock instead. Assisted-by: ClaudeCode:claude-opus-5 --- docs/nwb_export.md | 331 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 docs/nwb_export.md diff --git a/docs/nwb_export.md b/docs/nwb_export.md new file mode 100644 index 00000000..cc90b80b --- /dev/null +++ b/docs/nwb_export.md @@ -0,0 +1,331 @@ +# Running and extending the NWB export pipeline + +*Verified 2026-08-26 against `u19_pipeline/automatic_job/nwb_export_handler.py`, +`u19_pipeline/nwb_export/`, `u19_pipeline/nwb_production.py`, +`u19_pipeline/nwb_production_utils.py` and `scripts/run_nwb_export.py`. Several +of these files are under active development on other branches of the same +effort (issue #111) as this document was written — see the note at the end of +§2 for what was still unwired at read time.* + +This document has two audiences: someone who needs to run (or debug) an +export job, and someone who needs to add a new data modality to the pipeline. +For the imaging-specific sync mechanics, this document defers to +`docs/imaging_behavior_sync.md` rather than repeating it. + +## 1. Pipeline stages + +An export job is one row in `nwb_production.NwbExportJob`, keyed by +`nwb_job_id` and pointing at one `acquisition.Session`. Its `status_id` +(`u19_pipeline/nwb_export_enums.py`, `NwbExportStatusEnum`) walks a fixed +state machine, enforced declaratively in +`u19_pipeline/nwb_export/state_machine.py:38-49`: + +``` +QUEUED → DATA_VALIDATION → PROCESSING → VALIDATION → COMPLETED + ↘ UPLOAD → UPLOADED ↗ +Any of the above → FAILED (terminal) +``` + +`UPLOAD`/`UPLOADED` is only entered if the job requested a DANDI upload; +otherwise `VALIDATION` goes straight to `COMPLETED`. `COMPLETED` and `FAILED` +are terminal — nothing transitions out of them. `state_machine.py` is +currently descriptive (`is_valid_transition` / `assert_valid_transition`) but +not yet called from the handler below; the handler enforces the same shape by +construction (each stage method only ever proposes one of two next states: +success or `FAILED`). + +### The handler loop + +`NwbExportHandler.pipeline_handler_main()` +(`u19_pipeline/automatic_job/nwb_export_handler.py:69-188`) is the driver. It +fetches every job whose `status_id` is non-terminal — + +```python +restriction = f"status_id >= 0 AND status_id < {completed} AND status_id != {failed}" +``` + +— and, per job, dispatches on `current_status` to exactly one stage method, +then advances `status_id` (or drops it to `FAILED`) and writes a row to +`nwb_production.NwbExportLogStatus` via `update_status_pipeline` (`:540-579`). +A Slack notification fires on both `COMPLETED` and `FAILED` +(`config.slack_webhooks_dict["nwb_export_notification"]`); a failure to send +the Slack message itself is caught and logged, not fatal. Any exception +*outside* the stage methods (a bug in the dispatch loop itself) is also caught +per-job so one bad job can't wedge the whole batch; it is recorded as a +`FAILED` transition with the traceback truncated to 4095 characters (the +`error_exception` column's width). The loop sleeps 1 second between jobs. + +Stage methods share a return contract: `(success: bool, error_info: dict)` +where `error_info` has `error_message` (truncated to 255 chars — the column +width) and `error_exception` (4095 chars). `process_upload` additionally +smuggles the next status through `error_info["_next_status"]`, since it must +choose between `UPLOAD`→`UPLOADED` and `UPLOAD`/`VALIDATION`→`COMPLETED` +depending on whether a DANDI upload was requested; the dispatch loop pops +that key back out (`:114-123`). + +| Stage | Method | What it does | Where it can fail | +|---|---|---|---| +| QUEUED → DATA_VALIDATION | `process_data_validation` (`:191-264`) | For each row in `NwbExportModality` for this job, branch on `modality_name` and call that modality's `validate_*_data_exists` function. | Any modality's validator returns `(False, msg)`, or raises — becomes `ValueError`, caught, job → `FAILED`. | +| DATA_VALIDATION → PROCESSING | `process_nwb_conversion` (`:266-324`) | Parses `export_parameters`, resolves input paths (`resolve_input_paths`), calls `run_conversion_to_file` (shared with the CLI — see §1.3), writes `actual_file_size_gb`. | Missing/unresolvable source files, converter exceptions (including cross-repo `tank_lab_to_nwb` errors — see §5), disk write failures. | +| PROCESSING → VALIDATION | `process_validation` (`:326-457`) | Opens the written NWB file with `h5py` and checks it has top-level keys; if `nwbinspector` is importable, runs `inspect_nwbfile` and counts errors/warnings. Inserts (or replaces) one `NwbExportValidation` row. | HDF5 won't open, or NWB Inspector reports `ERROR`-importance messages. `nwbinspector` not being installed is *not* a failure — it's skipped and `nwb_inspector_passed` is left `True`. | +| VALIDATION → UPLOAD/COMPLETED | `process_upload` (`:459-538`) | If the job has no `NwbExportJobDandi` row, finalizes straight to `COMPLETED`. Otherwise checks `can_upload_to_dandi(user_id)`, fetches the decrypted API key, and uploads via `DandiUploadClient`. | No DANDI credentials configured for a job that requested upload (a requested upload is never silently skipped — this is a hard failure, not a fallback to `COMPLETED`), or the DANDI client raising. | +| UPLOAD → UPLOADED/COMPLETED | `process_upload` again | Same method handles both `VALIDATION` and `UPLOAD` entry points. | Same as above. | +| UPLOADED → COMPLETED | inline in `pipeline_handler_main` (`:125-131`) | No-op finalize; upload already succeeded. | Not expected to fail. | + +Note on `process_upload`'s recorded asset id: the neuroconv/DANDI upload +client returns organized file paths, not a DANDI asset ID, so +`dandi_asset_id` is left `NULL` on success today (`:523-525`, marked `TODO` +in the code). + +### Entry points + +- **Cronjob** — `u19_pipeline/automatic_job/cronjob_nwb_export.py` loads the + DataJoint conf, then loops `NwbExportHandler.pipeline_handler_main()` every + 5 seconds forever, catching and logging any exception that escapes the + handler entirely so the process itself never dies. This is the production + entry point; wire it into `automatic_job/crontab_example` / + `call_cronjob_automatic_job.sh`-style supervision the same way the other + `cronjob_*.py` scripts in that directory are run. (`cronjob_nwb_export_enhanced.py` + also exists in the same directory — check which one is actually deployed + before assuming `cronjob_nwb_export.py` is current.) +- **CLI** — `scripts/run_nwb_export.py` drives a *single* job (or, with no + `--job-id`, every non-terminal job in submission order) through the same + stages synchronously and prints progress instead of going through the + cron loop. It shares `run_conversion_to_file` with the handler + (imported from `u19_pipeline.nwb_export.conversion`) so behavior matches + production, but it does its own thinner DATA_VALIDATION (only + `validate_behavior_data_exists`, `:181-192`) and VALIDATION (HDF5-only, + `:237-246`) — it does not run the ephys/imaging validators or NWB + Inspector that the handler runs. Useful for a manual/debug run of one job; + do not treat its validation as equivalent to the cronjob's. It refuses to + run a job that isn't `QUEUED` or `FAILED` (`:139-144`), and `--dry-run` + prints the intended transition sequence without touching the DB or disk. + +## 2. How a modality gets wired in + +Every modality follows the same recipe. Behavior and ephys are the two +already fully wired; the general shape, using them as examples: + +1. **Registry row** — `nwb_production.NwbExportModality` + (`u19_pipeline/nwb_production.py:91-106`) has one row per + `(nwb_job_id, modality_name)`, with `modality_name` a free-text column + (`'behavior'`, `'ephys'`, `'imaging'` by convention — there is no lookup + table constraining it) plus `modality_type` and a JSON-array-as-string + column for sub-selection (`probe_numbers` for ephys, `fov_numbers` for + imaging). Jobs are created through `submit_nwb_export_job` (`:222-290`), + which takes a list of `(modality_name, modality_type, numbers)` tuples. +2. **Data-existence validator** — a `validate__data_exists(key, + ...)` function in `u19_pipeline/nwb_production_utils.py` returning + `(bool, error_message)`. `validate_behavior_data_exists` (`:241-265`) + checks `acquisition.Session` and `behavior.TowersBlock.Trial`. + `validate_ephys_data_exists` (`:268-297`) checks `recording.Recording` + and, per requested probe, `ephys_element.ProbeInsertion`. + `validate_imaging_data_exists` (`:300-355`) is the imaging analogue — + see §3. Because `NwbExportJob` only carries the `acquisition.Session` + primary key (not `recording_id`), any modality that needs a recording + (ephys, imaging) must first resolve it via `recording_ids_for_session` + (`:12-34`, which reads `recording.Recording.BehaviorSession`) and loop + over the result — a session can, in principle, map to more than one + recording. +3. **Size estimator** — an `estimate__size_gb(...)` function in + the same file, summed by `estimate_total_size` (`:179-238`), which is + what informs `NwbExportJob.estimated_file_size_gb` at submission time. + Being wrong here doesn't fail an export; it just mis-sizes disk/quota + planning. +4. **Path resolution + `source_data`** — `resolve_input_paths` and + `build_source_data` in `u19_pipeline/nwb_export/conversion.py` + (`:29-87`, `:112-165`) turn the job record and `export_parameters` into + a `source_data` dict keyed by neuroconv interface name + (`"VirmenData"`, `"KilosortProbe0"`, ...) with the arguments that + interface's `__init__` expects (typically `file_path` or `folder_path`). + `resolve_input_paths` currently only resolves the single behavior + `.mat` file and a Kilosort base directory; a new modality that needs + its own path convention (imaging's TIFF splits, for instance) needs a + third resolution branch here, not just in `build_source_data`. +5. **Neuroconv interface on `TowersNWBConverter`** — the actual read/write + code lives in the external `tank-lab-to-nwb` repository (see §5), in + `tank_lab_to_nwb/convert_towers_task/towersnwbconverter.py`, whose + `data_interface_classes` dict maps `source_data` keys to neuroconv + `DataInterface` subclasses (e.g. `VirmenDataInterface`, + `SpikeGLXRecordingInterface`, per-probe `KiloSortWithProbeInterface` + registered dynamically for any `source_data` key starting with + `"Kilosort"`, `:69-70`). Adding a modality here is a change in that + repo, not this one. +6. **Handler branch** — `NwbExportHandler.process_data_validation` + (`nwb_export_handler.py:218-255`) has one `if modality_name == ...` + branch per modality that calls step 2's validator (resolving + `recording_ids_for_session` first if needed, mirroring the ephys + branch at `:226-245`). + +### State at the time of this read + +Reading the branch live during the imaging work (2026-08-26), the pieces +above are wired for imaging **unevenly** — worth flagging explicitly since +these files are being edited concurrently and may look different by the time +you read this: + +- `validate_imaging_data_exists` and `estimate_imaging_size_gb` in + `nwb_production_utils.py` are fully implemented against the real imaging + tables (`imaging_pipeline.TiffSplit` / `TiffSplit.File`), not the stale + `imaging_element.Scan`/`FieldOfView` references an earlier version had. +- `estimate_total_size`'s imaging branch (`nwb_production_utils.py:222-236`) + correctly resolves `recording_ids_for_session` and calls the estimator. +- **But** `NwbExportHandler.process_data_validation`'s imaging branch + (`nwb_export_handler.py:247-255`) still unconditionally raises + `"could not resolve imaging Scan ... imaging export not yet wired"` — it + does not call `validate_imaging_data_exists` at all yet. Any imaging job + fails DATA_VALIDATION today regardless of whether the data actually + exists. +- `conversion.py`'s `build_source_data` (`:112-165`) has no imaging branch — + only `VirmenData` and per-probe `Kilosort*` entries — and + `resolve_input_paths` has no notion of a TIFF/FOV path. +- `towersnwbconverter.py` on `tank-lab-to-nwb`'s + `feat/scanimage-per-interface-alignment` branch (the branch with the most + recent imaging-related work as of this read) still maps `"TiffImagaging"` + to the generic `TiffImagingInterface`, not `ScanImageImagingInterface`, and + `temporally_align_data_interfaces` still applies one `sync_timestamps` + array to every interface rather than a per-interface array. + +In other words: the validation/estimation half of imaging wiring (step 2/3 +above) is done; the path-resolution, source-data, and converter-registration +halves (steps 4/5/6) were not yet landed on this branch as of this read. If +you're picking this up, check `git log` / the other in-flight branches before +assuming either state — this section describes a snapshot, not a guarantee. + +## 3. Imaging specifics + +The full mechanism — how ScanImage frames get I2C-stamped with +`[block, trial, iteration]`, how the Python port +(`u19_pipeline/utils/imaging_behavior_sync.py`) decodes and aligns them, and +the verified numbers from the sample session — is documented in +`docs/imaging_behavior_sync.md`. This section only summarizes the parts +relevant to wiring imaging into this pipeline; **read +`docs/imaging_behavior_sync.md` §5 (the NWB recipe) and §6 (the clock +convention) for the actual mechanics and derivations** rather than relying on +the summary below. + +In brief: imaging data arrives as ScanImage BigTIFFs, read by +`neuroconv.datainterfaces.ScanImageImagingInterface` into a +`TwoPhotonSeries`. Per-frame timestamps on the behavior clock come from +`u19_pipeline/utils/imaging_behavior_sync.py` +(`sync_imaging_behavior` + `frame_times_on_behavior_clock`), not from the +TIFF's own clock (see §4 below for why). One subtlety worth restating because +it's easy to get backwards: a volumetric (fastZ) acquisition has more TIFF +*pages* than the interface exposes as *volumes* — the sample session's +5-slice fastZ file has 2000 pages but `ScanImageImagingInterface` reports 400 +volumes, so the per-frame timestamp array must be subset `[::5][:n_volumes]` +(one timestamp per volume, taking every 5th frame time) before being handed +to `set_aligned_timestamps`. Passing all 2000 per-frame timestamps to a +400-volume series is a length mismatch that neuroconv will reject. + +## 4. The clock convention + +This was investigated (`docs/imaging_behavior_sync.md` §6) and is settled +policy — record it here as the rule, not as an open design question: + +- **Imaging-only sessions use the ViRMEn behavior clock.** The NWB file's + `session_start_time` is `log.session.start`. +- **All `vr.timeElapsed`-based quantities are zeroed at block start, not + session start.** This includes trial start times, per-iteration times + within a trial, and — because `frame_times_on_behavior_clock` fits against + `trial.start + trial.time` — the imaging frame timestamps too. All of them + must be shifted onto the NWB timeline by + `epoch_offset = (block[0].start - session.start).total_seconds()` + before being written. On the sample session, `epoch_offset` is +27.0 ms. +- **That offset is not a constant.** It is the wall-clock cost of MATLAB + struct allocation plus behavior-log file I/O between two `clock()` calls + during ViRMEn startup, so it scales with trial count and machine load. It + must be computed from each session's own log, never hardcoded to 27 ms or + any other value. +- **Never align imaging to behavior through wall clocks.** The TIFF header's + absolute `epoch` timestamp (ScanImage PC clock) and the ViRMEn PC's clock + disagree by roughly 958 ms on the sample session — three orders of + magnitude larger than the alignment precision needed. Alignment must stay + content-based, through the I2C `[block, trial, iteration]` packets, exactly + as `imaging_behavior_sync.py` does it. +- **Mixed ephys+imaging sessions are an open question, not a decided one.** + Ephys exports today align behavior onto the ephys clock (via the + `nwb_production.BehaviorSync` table consumed in + `conversion.py:query_metadata`, `:223-236`). That directly conflicts with + the ViRMEn-clock rule above for imaging. No resolution is written down for + a session that has both modalities in one export job. **This needs + explicit sign-off before the first DANDI upload of a mixed-modality + session** — once timestamps are published to DANDI they are effectively + immutable, so this is not a decision to make casually or silently default. + Do not invent an answer here; flag it on the tracking issue if you hit it. + +## 5. The `tank-lab-to-nwb` dependency + +The actual NWB-writing code — `TowersNWBConverter` and all its per-modality +`DataInterface`s — lives in a separate repository, `tank-lab-to-nwb`, not in +this one. This repo only builds `source_data` dicts and calls into it +(`u19_pipeline/nwb_export/conversion.py:264-276`). + +This is an operational hazard worth taking seriously: + +- **The live branch is `building-nwb-converter`**, not `main`. `main` is + stale and known broken (its `__init__` references `se.` without importing + the module it comes from). Whatever branch you install must match the + `TowersNWBConverter(source_data, sync_timestamps=...)` signature the + handler calls — check the branch's `towersnwbconverter.py` signature + against `conversion.py:273-276` if conversion starts failing with a + `TypeError` on construction. +- **It is path-installed and version-unpinned.** Nothing in this repo + records a commit SHA, tag, or lockfile entry for `tank-lab-to-nwb`; it is + installed as a local editable package + (`pip install -e /path/to/tank-lab-to-nwb-clean`, per the docstrings in + `scripts/run_nwb_export.py:26-28` and the CLI's own `ImportError` message + at `:202-206`). Two clones of this repo pointed at different + `tank-lab-to-nwb` checkouts can silently behave differently. +- **Installing it needs `--no-deps`.** `tank-lab-to-nwb`'s own + `pyproject.toml` declares + `[tool.uv.sources]` entries pointing at sibling directories — + `../ndx-tank-metadata-clean` and `../U19-pipeline_python` — that assume a + specific multi-repo checkout layout next to it. In a worktree (or any + layout that doesn't have those exact sibling paths), a plain + `uv pip install -e ` fails trying to resolve those sources. Install + it with `uv pip install --no-deps -e ` and separately bring in the + NWB/neuroconv stack it needs + (`neuroconv[kilosort,openephys,spikeglx]`, `pynwb>=3`, `hdmf>=4`, + `spikeinterface`, `ndx-tank-metadata`, ...) — see + `docs/HANDOFF_nwb_imaging_export.md` for a working incantation. +- **The two repos must move in lockstep.** Any change to the `source_data` + keys or converter signature on either side breaks the other silently at + runtime (an unexpected key, or a missing one, doesn't raise until + conversion actually runs). There is no CI cross-check between them today. +- **It isn't pinned today because the converter is still under active, + fast-moving development** for this integration (imaging support, the + per-interface-timestamps fix, the MATLAB-hard-dependency fix below are + all landing on it concurrently as of this writing). Pin it — to a specific + commit SHA via `uv`'s git source syntax, or vendor a lockfile entry — once + the imaging work stabilizes; until then a moving pin would just have to be + bumped constantly and would give false confidence. + +**Known constraint to work around until fixed upstream:** +`VirmenDataInterface` (in `tank-lab-to-nwb`) calls +`convert_function_handle_to_str` (ported into this repo too, at +`u19_pipeline/utils/matlab_utils.py:145`) to shell out to MATLAB and convert +a few metadata fields (`experiment_name`, `protocol_name`, `trial_choice`, +`trial_type`) that were stored as MATLAB function handles. That helper +**raises if MATLAB is not on `PATH`**, which takes down the *entire* +conversion — even though all four values it produces are already treated as +optional by their only caller. A fix (making the helper warn and return `{}` +instead of raising) is planned for `tank-lab-to-nwb`, but until it lands, any +export host without a MATLAB installation cannot run a conversion at all, +regardless of whether the session actually needs those four fields. + +## Reference: relevant files + +| Purpose | File | +|---|---| +| Status enum | `u19_pipeline/nwb_export_enums.py` | +| Transition table | `u19_pipeline/nwb_export/state_machine.py` | +| Handler / stage logic | `u19_pipeline/automatic_job/nwb_export_handler.py` | +| Cronjob entry point | `u19_pipeline/automatic_job/cronjob_nwb_export.py` | +| CLI entry point | `scripts/run_nwb_export.py` | +| Shared conversion logic | `u19_pipeline/nwb_export/conversion.py` | +| Validators / size estimators | `u19_pipeline/nwb_production_utils.py` | +| Schema / job submission API | `u19_pipeline/nwb_production.py` | +| DANDI upload client | `u19_pipeline/nwb_export/dandi/upload_client.py` | +| Imaging-behavior sync mechanism | `docs/imaging_behavior_sync.md` | +| Imaging wiring handoff notes | `docs/HANDOFF_nwb_imaging_export.md`, `docs/nwb_imaging_export_plan.md` | From 027c9bf1b6c5faccf64c4ad2fc9769fcc1ca31a0 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:41:30 -0400 Subject: [PATCH 15/30] feat: wire imaging into the NWB export conversion path and handler resolve_imaging_paths maps a session or recording key through TiffSplit and TiffSplit.File to absolute TIFF paths, in acquisition order -- the ScanImage interface treats a multi-file list as one continuous recording, so unordered paths would produce unordered frames. The root join is done inline rather than via element_interface.find_full_path, since element-interface is in the optional "pipeline" extra and this helper should import without it. imaging_timestamps_for_session runs the I2C sync and applies the block-vs-session offset, read per session rather than assumed, then strides the per-frame array down to whatever sample count the interface reports -- a volumetric fastZ stack exposes volumes, not pages. A frame count that is not a whole multiple of the sample count now raises instead of silently misaligning. build_source_data gains an imaging branch, and run_conversion_to_file passes imaging timestamps through the converter's new per-interface aligned_timestamps rather than the shared sync_timestamps array. The handler's imaging branch no longer raises "not yet wired": it takes the same session -> recording hop as ephys and calls validate_imaging_data_exists. The path-resolution test's mock gains __mul__: tiff_split_directory is on the TiffSplit master and tiff_split_filename on the Part, so resolving a path needs the join and not just a restriction. Assisted-by: ClaudeCode:claude-opus-5 --- tests/nwb_export/test_imaging_conversion.py | 10 +- .../automatic_job/nwb_export_handler.py | 27 ++- u19_pipeline/nwb_export/conversion.py | 228 ++++++++++++++++++ 3 files changed, 256 insertions(+), 9 deletions(-) diff --git a/tests/nwb_export/test_imaging_conversion.py b/tests/nwb_export/test_imaging_conversion.py index 3b3c3856..b00e2947 100644 --- a/tests/nwb_export/test_imaging_conversion.py +++ b/tests/nwb_export/test_imaging_conversion.py @@ -28,10 +28,18 @@ def _make_dj_table(rows: list): - """Mirrors the helper in tests/nwb_export/test_modality_validators.py.""" + """ + Mirrors the helper in tests/nwb_export/test_modality_validators.py. + + ``__mul__`` is defined too: tiff_split_directory lives on the TiffSplit + master and tiff_split_filename on the Part table, so resolving a path needs + the join, not just a restriction. + """ mock = MagicMock() mock.__bool__ = lambda self: bool(rows) mock.__and__ = lambda self, _: self + mock.__mul__ = lambda self, _: self + mock.__rmul__ = lambda self, _: self mock.fetch.return_value = rows return mock diff --git a/u19_pipeline/automatic_job/nwb_export_handler.py b/u19_pipeline/automatic_job/nwb_export_handler.py index 4e0e1dbb..58abb61d 100644 --- a/u19_pipeline/automatic_job/nwb_export_handler.py +++ b/u19_pipeline/automatic_job/nwb_export_handler.py @@ -20,6 +20,7 @@ recording_ids_for_session, validate_behavior_data_exists, validate_ephys_data_exists, + validate_imaging_data_exists, ) @@ -245,14 +246,24 @@ def process_data_validation(job: dict) -> tuple[bool, dict]: ) elif modality_name == "imaging": - # TODO: the imaging_element.Scan <-> acquisition.Session linkage - # is not reliably known. Do NOT fabricate a scan key (an empty - # restriction matches all rows and passes vacuously). Fail loud - # until the linkage is confirmed and wired here. - raise ValueError( - f"Imaging validation failed: could not resolve imaging Scan " - f"for session {session_key}; imaging export not yet wired." - ) + # Same session -> recording hop as ephys above; the imaging + # tables hang off recording.Recording, not off a separate + # Scan key. + recording_ids = recording_ids_for_session(session_key) + if not recording_ids: + raise ValueError( + f"Imaging validation failed: no recording linked to " + f"session {session_key}" + ) + fov_numbers = _parse_number_list(modality.get("fov_numbers")) + for rid in recording_ids: + valid, error_msg = validate_imaging_data_exists( + {"recording_id": rid}, fov_numbers + ) + if not valid: + raise ValueError( + f"Imaging validation failed for recording {rid}: {error_msg}" + ) print(f"Data validation passed for job {job['nwb_job_id']}") return True, error_info diff --git a/u19_pipeline/nwb_export/conversion.py b/u19_pipeline/nwb_export/conversion.py index b818ca6b..7cc561bc 100644 --- a/u19_pipeline/nwb_export/conversion.py +++ b/u19_pipeline/nwb_export/conversion.py @@ -109,6 +109,172 @@ def _find_kilosort_output(probe_dir: Path) -> Path | None: return kilosort_outputs[0] if kilosort_outputs else None +def resolve_imaging_paths(recording_key: dict, fov_numbers: list | None = None) -> list: + """ + Resolve the split TIFF files for an imaging recording to absolute paths. + + Mirrors ``imaging_pipeline.get_scan_image_files`` (:277-290), joining + ``TiffSplit.tiff_split_directory`` / ``TiffSplit.File.tiff_split_filename`` + onto the configured imaging root. Files come back in acquisition order + (``tiff_split``, then ``file_number``), which is what the ScanImage + interface needs — it treats a multi-file list as one continuous recording, + so out-of-order paths silently produce out-of-order frames. + + Args: + recording_key: Key resolvable to a ``recording.Recording`` row, e.g. + ``{"recording_id": 3}``. + fov_numbers: ``tiff_split`` numbers to include. Empty or ``None`` means + every split belonging to the recording. + + Returns: + List of absolute path strings; empty if nothing resolves. + """ + import pathlib as _pathlib # noqa: PLC0415 + + import datajoint as dj # noqa: PLC0415 + + from u19_pipeline import imaging_pipeline # noqa: PLC0415 + from u19_pipeline.nwb_production_utils import ( + recording_ids_for_session, # noqa: PLC0415 + ) + + restriction = dict(recording_key) + if "recording_id" not in restriction: + # A job carries the acquisition.Session key; the imaging tables hang off + # recording.Recording, so take the same hop the validators do. + recording_ids = recording_ids_for_session(restriction) + if not recording_ids: + return [] + restriction = [{"recording_id": rid} for rid in recording_ids] + + splits = imaging_pipeline.TiffSplit & restriction + if fov_numbers: + splits = splits & [{"tiff_split": int(n)} for n in fov_numbers] + + # tiff_split_directory lives on the master, tiff_split_filename on the Part, + # so the join is required to get both -- same shape as + # imaging_pipeline.get_scan_image_files. + rows = (imaging_pipeline.TiffSplit.File * splits).fetch( + "tiff_split_directory", "tiff_split_filename", as_dict=True + ) + + def _order(row): + return (row.get("tiff_split", 0), row.get("file_number", 0)) + + # Same roots imaging_pipeline.get_imaging_root_data_dir reads. Resolved + # inline rather than through element_interface.find_full_path because + # element-interface lives in the optional "pipeline" extra, and this helper + # should stay importable without it. + roots = dj.config.get("custom", {}).get("imaging_root_data_dir", None) or [] + if isinstance(roots, (str, _pathlib.Path)): + roots = [roots] + + paths = [] + for row in sorted(rows, key=_order): + relative = ( + _pathlib.Path(row["tiff_split_directory"]) / row["tiff_split_filename"] + ) + for root in roots: + candidate = _pathlib.Path(root) / relative + if candidate.exists(): + paths.append(candidate.as_posix()) + break + else: + log.warning( + "Imaging file listed in TiffSplit.File not found under any " + "imaging_root_data_dir: %s", + relative, + ) + return paths + + +def imaging_timestamps_for_session( + tiff_paths: list, + virmen_file, + n_samples: int | None = None, +): + """ + Per-frame imaging timestamps on the NWB timeline for ``tiff_paths``. + + Runs the I2C content-based sync (``u19_pipeline.utils.imaging_behavior_sync``) + and then applies the block-vs-session shift, because the two clocks do not + share a zero: ``trial.start`` rides ViRMEn's ``vr.timeElapsed``, zeroed at + block start, while NWB zeroes at ``log.session.start``. That offset is + allocation and file-I/O cost during ViRMEn startup, so it differs per + session and is read from each log rather than assumed. See + ``docs/imaging_behavior_sync.md`` section 6. + + Args: + tiff_paths: Split TIFFs in acquisition order. + virmen_file: The session's ViRMEn behavior .mat file. + n_samples: How many timestamps the imaging interface expects. A + volumetric fastZ file reports one sample per *volume*, not per page, + so the per-frame array is strided down to match. ``None`` returns + the full per-frame array. + + Returns: + ``(timestamps, diagnostics)`` — diagnostics carries the fit slope, + residual and the applied offset, for logging and validation. + """ + import numpy as np # noqa: PLC0415 + + from u19_pipeline.utils.imaging_behavior_sync import ( # noqa: PLC0415 + _as_list, + frame_times_on_behavior_clock, + load_behavior_log, + sync_imaging_behavior, + ) + + log_struct = load_behavior_log(str(virmen_file)) + sync = sync_imaging_behavior([str(p) for p in tiff_paths], log_struct) + timestamps, slope, offset, residual = frame_times_on_behavior_clock( + sync, log_struct + ) + + def _to_datetime(datevec): + arr = np.asarray(datevec, dtype=float) + return datetime( + *[int(v) for v in arr[:5]], + int(arr[5]), + int(round(np.mod(arr[5], 1) * 1e6)), + ) + + block_start = _to_datetime(_as_list(log_struct.block)[0].start) + session_start = _to_datetime(log_struct.session.start) + epoch_offset = (block_start - session_start).total_seconds() + timestamps = timestamps + epoch_offset + + n_frames = int(np.size(timestamps)) + if n_samples is not None and n_samples != n_frames: + if n_samples <= 0 or n_frames % n_samples: + raise ValueError( + f"Cannot map {n_frames} imaging frame timestamps onto {n_samples} " + f"interface samples: {n_frames} is not a whole multiple of {n_samples}. " + f"Expected a volumetric fastZ stack (frames = volumes x slices)." + ) + stride = n_frames // n_samples + timestamps = timestamps[::stride][:n_samples] + + diagnostics = { + "slope": float(slope), + "fit_offset": float(offset), + "residual_std_s": float(residual), + "epoch_offset_s": float(epoch_offset), + "n_frames": n_frames, + "n_samples": int(np.size(timestamps)), + } + log.info( + " imaging sync: %d frames -> %d samples, clock slope %.9f, " + "residual %.1f ms, block-vs-session offset %+.1f ms", + n_frames, + diagnostics["n_samples"], + slope, + residual * 1000, + epoch_offset * 1000, + ) + return timestamps, diagnostics + + def build_source_data( job: dict, export_params: dict, @@ -162,6 +328,42 @@ def build_source_data( "include_ephys=True but no kilosort_dir provided; ephys data will not be included." ) + # ── Imaging ─────────────────────────────────────────────────────────────── + if export_params.get("include_imaging"): + tiff_paths = export_params.get("tiff_paths") + if not tiff_paths: + fov_numbers = export_params.get("fov_numbers") or [] + recording_ids = export_params.get("recording_ids") or [] + if recording_ids: + tiff_paths = [] + for rid in recording_ids: + tiff_paths.extend( + resolve_imaging_paths({"recording_id": rid}, fov_numbers) + ) + else: + # No explicit recordings: hand the session key over and let + # resolve_imaging_paths do the session -> recording hop. + session_key = { + k: job[k] + for k in ("subject_fullname", "session_date", "session_number") + if k in job + } + tiff_paths = resolve_imaging_paths(session_key, fov_numbers) + + if tiff_paths: + # ScanImage BigTIFFs, not the generic TiffImagingInterface: only the + # ScanImage reader understands their volumetric fastZ layout and the + # per-frame headers the I2C sync depends on. + source_data["ScanImageImaging"] = { + "file_paths": [str(p) for p in tiff_paths] + } + log.info(f" ScanImageImaging: {len(tiff_paths)} tiff file(s)") + else: + log.warning( + "include_imaging=True but no TIFF files resolved; " + "imaging data will not be included." + ) + return source_data @@ -270,9 +472,35 @@ def run_conversion_to_file( metadata = query_metadata(session_key) + # Imaging gets its own timestamp array rather than the shared behavior one: + # the interface reports one sample per volume for a fastZ stack, so a single + # array cannot describe both streams. Build the converter once without + # alignment to ask the interface how many samples it actually has, then + # again with an array cut to fit. + aligned_timestamps: dict = {} + if "ScanImageImaging" in source_data: + import numpy as np # noqa: PLC0415 + + probe = TowersNWBConverter(source_data=source_data) + n_samples = int( + np.size( + probe.data_interface_objects[ + "ScanImageImaging" + ].get_original_timestamps() + ) + ) + imaging_ts, diagnostics = imaging_timestamps_for_session( + source_data["ScanImageImaging"]["file_paths"], + virmen_file, + n_samples=n_samples, + ) + aligned_timestamps["ScanImageImaging"] = imaging_ts + log.info(f" imaging sync diagnostics: {diagnostics}") + converter = TowersNWBConverter( source_data=source_data, sync_timestamps=metadata["sync_timestamps"], + aligned_timestamps=aligned_timestamps or None, ) raw_metadata = converter.get_metadata() From b6fad823381c5e872ad9844dff46471b14889555 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 26 Aug 2026 18:43:57 -0400 Subject: [PATCH 16/30] docs: tick off Phase B/C and record the cross-repo contract status Also records what is not verified: the session -> recording -> TiffSplit hop has only mocked coverage, since no DataJoint instance was reachable, and the end-to-end run supplied TIFF paths directly to bypass it. Assisted-by: ClaudeCode:claude-opus-5 --- docs/nwb_imaging_export_plan.md | 53 +++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/docs/nwb_imaging_export_plan.md b/docs/nwb_imaging_export_plan.md index 5143d144..0e7c1702 100644 --- a/docs/nwb_imaging_export_plan.md +++ b/docs/nwb_imaging_export_plan.md @@ -67,15 +67,50 @@ which is physically backwards. - [x] Spike: converter + ScanImage interface + our timestamps in one env, real conversion, aligned TwoPhotonSeries - [x] Rebase/merge strategy: bring `feat/nwb-export-handler-completion` and our sync branch together -- [ ] `validate_imaging_data_exists`: fix table references; resolve session→recording→TiffSplit -- [ ] `resolve_input_paths` / `build_source_data`: add imaging tiff paths + behavior file -- [ ] Converter: add ScanImage imaging interface with behavior-clock timestamps (subclass or extend TowersNWBConverter) -- [ ] Handler `process_data_validation` imaging branch: replace fail-loud TODO -- [ ] Size estimation: `estimate_imaging_size_gb` with real numbers (raw frames ≫ 0.05 GB/FOV) -- [ ] Tests (mirror existing handler tests) -- [ ] End-to-end run on the `~/neuro-data` sample session +- [x] `validate_imaging_data_exists`: fix table references; resolve session→recording→TiffSplit +- [x] `resolve_input_paths` / `build_source_data`: add imaging tiff paths + behavior file +- [x] Converter: add ScanImage imaging interface with behavior-clock timestamps (subclass or extend TowersNWBConverter) +- [x] Handler `process_data_validation` imaging branch: replace fail-loud TODO +- [x] Size estimation: `estimate_imaging_size_gb` with real numbers (raw frames ≫ 0.05 GB/FOV) +- [x] Tests (mirror existing handler tests) +- [x] End-to-end run on the `~/neuro-data` sample session ## Phase C — Documentation -- [ ] `docs/nwb_export.md`: how imaging export works and how to add future modalities -- [ ] Update `docs/imaging_behavior_sync.md` cross-references +- [x] `docs/nwb_export.md`: how imaging export works and how to add future modalities +- [x] Update `docs/imaging_behavior_sync.md` cross-references + +## Phase D — Cross-repo contract (coordinator) + +- [x] `tank-lab-to-nwb`: register `ScanImageImagingInterface`, fix the `TiffImagaging` typo key +- [x] `tank-lab-to-nwb`: per-interface `aligned_timestamps`, with a length guard on the shared array +- [x] `tank-lab-to-nwb`: stop `convert_function_handle_to_str` raising when MATLAB is absent +- [x] `tank-lab-to-nwb`: run its scratch files in a TemporaryDirectory instead of the cwd +- [x] `tank-lab-to-nwb`: fix the tz-aware/naive subtraction in `get_original_timestamps` +- [x] Clock convention decided and written down (`docs/imaging_behavior_sync.md` section 6, `docs/nwb_export.md`) +- [ ] **Open:** mixed ephys+imaging clock rule — needs sign-off before the first DANDI upload +- [ ] Pin the `tank-lab-to-nwb` dependency to a commit +- [ ] PRs: this repo + `tank-lab-to-nwb` (`building-nwb-converter`) + +### End-to-end result (sample session, through the shipped code path) + +``` +source_data: ['ScanImageImaging', 'VirmenData'] +diagnostics: slope 1.000027891, residual 10.4 ms, epoch_offset 27.0 ms, + 2000 frames -> 400 volumes +nwb: TwoPhotonSeries + 179 trials, 0.420 GB +frame 644 (trial 1's first imaging frame) = +22.3 ms after trial 1 start +``` + +The per-frame check is the meaningful one; the written file stores volumes, so +its resolution is one volume period (99.6 ms). + +### Known gaps + +- `resolve_imaging_paths` and the handler's imaging branch are exercised only by + mocked tests — no DataJoint instance was reachable here, so the + session -> recording -> TiffSplit hop is unverified against a real database. +- The end-to-end run supplied TIFF paths directly, bypassing that same hop. +- `tests/nwb_export/test_nwb_export_handler.py` has 10 failures + 9 errors that + predate this work: they fail at import on `dj.config["custom"]`, with no DB + configured. From ce04670d2f24ec9411ddee7270ba176d90cf8422 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Thu, 27 Aug 2026 15:40:39 -0400 Subject: [PATCH 17/30] feat: one imaging interface per field of view A mesoscope session has one TiffSplit per field of view, and fields of view are separate regions of tissue rather than continuations of one another. The previous code flattened every split's files into a single ScanImageImaging entry, which presented unrelated regions as one continuous recording and misaligned every field of view after the first. resolve_imaging_paths_by_fov groups the same resolution by tiff_split, and build_source_data emits ScanImageImagingFOV per field of view, each with its own timestamps computed from its own files. An explicit tiff_paths override still names exact files and stays a single interface. Assisted-by: ClaudeCode:claude-opus-5 --- tests/nwb_export/test_imaging_conversion.py | 94 +++++++++++-- u19_pipeline/nwb_export/conversion.py | 148 +++++++++++++++----- 2 files changed, 195 insertions(+), 47 deletions(-) diff --git a/tests/nwb_export/test_imaging_conversion.py b/tests/nwb_export/test_imaging_conversion.py index b00e2947..b3ac4d8e 100644 --- a/tests/nwb_export/test_imaging_conversion.py +++ b/tests/nwb_export/test_imaging_conversion.py @@ -128,8 +128,8 @@ class TestBuildSourceDataImaging: contract: build_source_data(job, export_params, virmen_file, kilosort_dir) gains an imaging branch analogous to the existing ephys branch: when export_params['include_imaging'] is truthy, it resolves TIFF paths (via - resolve_imaging_paths or equivalent) and adds an imaging source_data - entry; when TIFF paths do not resolve, or imaging was not requested, + resolve_imaging_paths_by_fov) and adds one imaging source_data entry per + field of view, named ScanImageImagingFOV; when TIFF paths do not resolve, or imaging was not requested, imaging is simply absent from source_data -- and the other entries are unaffected either way. """ @@ -172,9 +172,9 @@ def test_behavior_entry_unaffected_by_imaging_wiring(self, virmen_file, base_job export_params = {"include_imaging": True} with patch( - "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", create=True, - return_value=["/data/root/subj1/split_0.tif"], + return_value={0: ["/data/root/subj1/split_0.tif"]}, ): source_data = build_source_data(base_job, export_params, virmen_file, None) @@ -191,9 +191,9 @@ def test_ephys_entry_unaffected_by_imaging_wiring( export_params = {"include_ephys": True, "include_imaging": True} with patch( - "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", create=True, - return_value=["/data/root/subj1/split_0.tif"], + return_value={0: ["/data/root/subj1/split_0.tif"]}, ): source_data = build_source_data( base_job, export_params, virmen_file, kilosort_dir @@ -211,9 +211,9 @@ def test_adds_imaging_entry_when_included_and_paths_resolve( resolved_paths = ["/data/root/subj1/split_0.tif"] with patch( - "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", create=True, - return_value=resolved_paths, + return_value={0: resolved_paths}, ): source_data = build_source_data(base_job, export_params, virmen_file, None) @@ -228,10 +228,84 @@ def test_omits_imaging_when_paths_do_not_resolve(self, virmen_file, base_job): export_params = {"include_imaging": True} with patch( - "u19_pipeline.nwb_export.conversion.resolve_imaging_paths", + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", create=True, - return_value=[], + return_value={}, ): source_data = build_source_data(base_job, export_params, virmen_file, None) assert self._imaging_like_keys(source_data) == [] + + +@pytest.mark.no_db +class TestBuildSourceDataMultipleFovs: + """ + A mesoscope session has one TiffSplit per field of view, and fields of view + are separate regions rather than continuations of one another. Each must get + its own interface: merging them presents unrelated regions as one continuous + recording and misaligns every field of view after the first. + """ + + @pytest.fixture() + def virmen_file(self, tmp_path): + f = tmp_path / "session.mat" + f.write_bytes(b"\x00") + return f + + @pytest.fixture() + def base_job(self): + return { + "subject_fullname": "subj1", + "session_date": "2026-08-07", + "session_number": 1, + } + + def test_each_fov_gets_its_own_interface(self, virmen_file, base_job): + from u19_pipeline.nwb_export.conversion import build_source_data + + by_fov = { + 0: ["/root/fov0_00001.tif", "/root/fov0_00002.tif"], + 1: ["/root/fov1_00001.tif", "/root/fov1_00002.tif"], + } + with patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", + create=True, + return_value=by_fov, + ): + source_data = build_source_data( + base_job, {"include_imaging": True}, virmen_file, None + ) + + assert source_data["ScanImageImagingFOV0"]["file_paths"] == by_fov[0] + assert source_data["ScanImageImagingFOV1"]["file_paths"] == by_fov[1] + + def test_fov_files_are_not_cross_contaminated(self, virmen_file, base_job): + from u19_pipeline.nwb_export.conversion import build_source_data + + by_fov = {0: ["/root/fov0.tif"], 1: ["/root/fov1.tif"]} + with patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", + create=True, + return_value=by_fov, + ): + source_data = build_source_data( + base_job, {"include_imaging": True}, virmen_file, None + ) + + for fov in (0, 1): + paths = source_data[f"ScanImageImagingFOV{fov}"]["file_paths"] + assert len(paths) == 1 + assert f"fov{fov}" in paths[0] + + def test_explicit_tiff_paths_stay_a_single_interface(self, virmen_file, base_job): + """An explicit override names exact files, so it is one interface.""" + from u19_pipeline.nwb_export.conversion import build_source_data + + source_data = build_source_data( + base_job, + {"include_imaging": True, "tiff_paths": ["/root/a.tif", "/root/b.tif"]}, + virmen_file, + None, + ) + imaging = [k for k in source_data if k.startswith("ScanImageImaging")] + assert imaging == ["ScanImageImaging"] diff --git a/u19_pipeline/nwb_export/conversion.py b/u19_pipeline/nwb_export/conversion.py index 7cc561bc..c950ff04 100644 --- a/u19_pipeline/nwb_export/conversion.py +++ b/u19_pipeline/nwb_export/conversion.py @@ -188,6 +188,77 @@ def _order(row): return paths +def resolve_imaging_paths_by_fov( + recording_key: dict, fov_numbers: list | None = None +) -> dict: + """ + Same resolution as :func:`resolve_imaging_paths`, grouped by ``tiff_split``. + + A ``tiff_split`` is one field of view of a mesoscope session. Fields of view + are separate regions of tissue, not continuations of one another, so each + needs its own imaging interface and its own ``TwoPhotonSeries``. Flattening + them into a single file list would present unrelated fields of view as one + continuous recording, and would misalign every one after the first. + + Returns: + ``{tiff_split: [absolute path, ...]}``, each list in acquisition order. + Splits whose files are all missing from disk are omitted. + """ + import pathlib as _pathlib # noqa: PLC0415 + + import datajoint as dj # noqa: PLC0415 + + from u19_pipeline import imaging_pipeline # noqa: PLC0415 + from u19_pipeline.nwb_production_utils import ( # noqa: PLC0415 + recording_ids_for_session, + ) + + restriction = dict(recording_key) + if "recording_id" not in restriction: + recording_ids = recording_ids_for_session(restriction) + if not recording_ids: + return {} + restriction = [{"recording_id": rid} for rid in recording_ids] + + splits = imaging_pipeline.TiffSplit & restriction + if fov_numbers: + splits = splits & [{"tiff_split": int(n)} for n in fov_numbers] + + rows = (imaging_pipeline.TiffSplit.File * splits).fetch( + "tiff_split", + "file_number", + "tiff_split_directory", + "tiff_split_filename", + as_dict=True, + ) + + roots = dj.config.get("custom", {}).get("imaging_root_data_dir", None) or [] + if isinstance(roots, (str, _pathlib.Path)): + roots = [roots] + + by_fov: dict = {} + for row in sorted( + rows, key=lambda r: (r.get("tiff_split", 0), r.get("file_number", 0)) + ): + relative = ( + _pathlib.Path(row["tiff_split_directory"]) / row["tiff_split_filename"] + ) + for root in roots: + candidate = _pathlib.Path(root) / relative + if candidate.exists(): + by_fov.setdefault(int(row.get("tiff_split", 0)), []).append( + candidate.as_posix() + ) + break + else: + log.warning( + "Imaging file listed in TiffSplit.File not found under any " + "imaging_root_data_dir: %s", + relative, + ) + return by_fov + + def imaging_timestamps_for_session( tiff_paths: list, virmen_file, @@ -330,39 +401,41 @@ def build_source_data( # ── Imaging ─────────────────────────────────────────────────────────────── if export_params.get("include_imaging"): - tiff_paths = export_params.get("tiff_paths") - if not tiff_paths: + explicit = export_params.get("tiff_paths") + if explicit: + # Manual override: one interface over exactly the files given. + source_data["ScanImageImaging"] = {"file_paths": [str(p) for p in explicit]} + log.info(f" ScanImageImaging: {len(explicit)} tiff file(s)") + else: fov_numbers = export_params.get("fov_numbers") or [] recording_ids = export_params.get("recording_ids") or [] if recording_ids: - tiff_paths = [] + by_fov: dict = {} for rid in recording_ids: - tiff_paths.extend( - resolve_imaging_paths({"recording_id": rid}, fov_numbers) - ) + for fov, paths in resolve_imaging_paths_by_fov( + {"recording_id": rid}, fov_numbers + ).items(): + by_fov.setdefault(fov, []).extend(paths) else: - # No explicit recordings: hand the session key over and let - # resolve_imaging_paths do the session -> recording hop. session_key = { k: job[k] for k in ("subject_fullname", "session_date", "session_number") if k in job } - tiff_paths = resolve_imaging_paths(session_key, fov_numbers) - - if tiff_paths: - # ScanImage BigTIFFs, not the generic TiffImagingInterface: only the - # ScanImage reader understands their volumetric fastZ layout and the - # per-frame headers the I2C sync depends on. - source_data["ScanImageImaging"] = { - "file_paths": [str(p) for p in tiff_paths] - } - log.info(f" ScanImageImaging: {len(tiff_paths)} tiff file(s)") - else: - log.warning( - "include_imaging=True but no TIFF files resolved; " - "imaging data will not be included." - ) + by_fov = resolve_imaging_paths_by_fov(session_key, fov_numbers) + + # One interface per field of view. Fields of view are separate + # regions, so merging them would both misrepresent the anatomy and + # break alignment for every FOV after the first. + for fov in sorted(by_fov): + source_data[f"ScanImageImagingFOV{fov}"] = {"file_paths": by_fov[fov]} + log.info(f" ScanImageImagingFOV{fov}: {len(by_fov[fov])} tiff file(s)") + + if not by_fov: + log.warning( + "include_imaging=True but no TIFF files resolved; " + "imaging data will not be included." + ) return source_data @@ -478,24 +551,25 @@ def run_conversion_to_file( # alignment to ask the interface how many samples it actually has, then # again with an array cut to fit. aligned_timestamps: dict = {} - if "ScanImageImaging" in source_data: + imaging_interfaces = [k for k in source_data if k.startswith("ScanImageImaging")] + if imaging_interfaces: import numpy as np # noqa: PLC0415 + # Build once without alignment purely to ask each interface how many + # samples it reports: a volumetric fastZ stack exposes volumes, not + # pages, and the count differs per field of view. probe = TowersNWBConverter(source_data=source_data) - n_samples = int( - np.size( - probe.data_interface_objects[ - "ScanImageImaging" - ].get_original_timestamps() + for name in imaging_interfaces: + n_samples = int( + np.size(probe.data_interface_objects[name].get_original_timestamps()) ) - ) - imaging_ts, diagnostics = imaging_timestamps_for_session( - source_data["ScanImageImaging"]["file_paths"], - virmen_file, - n_samples=n_samples, - ) - aligned_timestamps["ScanImageImaging"] = imaging_ts - log.info(f" imaging sync diagnostics: {diagnostics}") + imaging_ts, diagnostics = imaging_timestamps_for_session( + source_data[name]["file_paths"], + virmen_file, + n_samples=n_samples, + ) + aligned_timestamps[name] = imaging_ts + log.info(f" {name} sync diagnostics: {diagnostics}") converter = TowersNWBConverter( source_data=source_data, From cddc3f547e042b099093556a98712efb528535cc Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Thu, 27 Aug 2026 15:41:33 -0400 Subject: [PATCH 18/30] docs: mixed ephys+imaging needs no clock rule The two modalities are not acquired in the same session, so the conflict between the ephys clock and the ViRMEn clock cannot arise. Records the condition under which the question would come back rather than dropping it. Assisted-by: ClaudeCode:claude-opus-5 --- docs/nwb_export.md | 18 ++++++++---------- docs/nwb_imaging_export_plan.md | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/nwb_export.md b/docs/nwb_export.md index cc90b80b..31fa9f86 100644 --- a/docs/nwb_export.md +++ b/docs/nwb_export.md @@ -243,16 +243,14 @@ policy — record it here as the rule, not as an open design question: magnitude larger than the alignment precision needed. Alignment must stay content-based, through the I2C `[block, trial, iteration]` packets, exactly as `imaging_behavior_sync.py` does it. -- **Mixed ephys+imaging sessions are an open question, not a decided one.** - Ephys exports today align behavior onto the ephys clock (via the - `nwb_production.BehaviorSync` table consumed in - `conversion.py:query_metadata`, `:223-236`). That directly conflicts with - the ViRMEn-clock rule above for imaging. No resolution is written down for - a session that has both modalities in one export job. **This needs - explicit sign-off before the first DANDI upload of a mixed-modality - session** — once timestamps are published to DANDI they are effectively - immutable, so this is not a decision to make casually or silently default. - Do not invent an answer here; flag it on the tracking issue if you hit it. +- **Ephys and imaging are separate modalities and are not combined in one + session.** Ephys exports align behavior onto the ephys clock (via + `nwb_production.BehaviorSync`, consumed in `conversion.py:query_metadata`, + `:223-236`); imaging exports use the ViRMEn clock as described above. The two + rules would conflict in a session carrying both, but no such session is + acquired, so there is no combined rule and none is needed. If that ever + changes, decide and write the rule down *before* the first DANDI upload of + such a session — published timestamps are effectively immutable. ## 5. The `tank-lab-to-nwb` dependency diff --git a/docs/nwb_imaging_export_plan.md b/docs/nwb_imaging_export_plan.md index 0e7c1702..2ab8df8c 100644 --- a/docs/nwb_imaging_export_plan.md +++ b/docs/nwb_imaging_export_plan.md @@ -88,7 +88,7 @@ which is physically backwards. - [x] `tank-lab-to-nwb`: run its scratch files in a TemporaryDirectory instead of the cwd - [x] `tank-lab-to-nwb`: fix the tz-aware/naive subtraction in `get_original_timestamps` - [x] Clock convention decided and written down (`docs/imaging_behavior_sync.md` section 6, `docs/nwb_export.md`) -- [ ] **Open:** mixed ephys+imaging clock rule — needs sign-off before the first DANDI upload +- [x] Mixed ephys+imaging clock rule — **not applicable**: the two modalities are not acquired in the same session (confirmed 2026-08-27) - [ ] Pin the `tank-lab-to-nwb` dependency to a commit - [ ] PRs: this repo + `tank-lab-to-nwb` (`building-nwb-converter`) From fc00a600417c2306aed3ebd9eda515aa2adb3eda Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Thu, 27 Aug 2026 15:50:56 -0400 Subject: [PATCH 19/30] docs: record the ViRMEn time model behind the trial.time lookup The I2C packet's third field is the per-trial iteration counter, not ViRMEn's global one: logTick assigns obj.currentIt, writes trial.time at that index, and returns the same number for broadcast, all in one call. Indexing trial.time with the global counter instead would be badly wrong, so the reasoning and its confirmation on the sample session are worth keeping. Also notes what the packets do not give: most frames carry none, and the packet marks when ViRMEn computed the iteration rather than when it was displayed. Assisted-by: ClaudeCode:claude-opus-5 --- docs/imaging_behavior_sync.md | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/docs/imaging_behavior_sync.md b/docs/imaging_behavior_sync.md index 2d5c6d6e..11ff6cad 100644 --- a/docs/imaging_behavior_sync.md +++ b/docs/imaging_behavior_sync.md @@ -416,3 +416,71 @@ But it is also the whole reason the sync is content-based: the I2C `[block, trial, iteration]` packets tie the two streams together by *what* was happening, not by *when* two unsynchronized clocks each thought it was. Never align these streams through `epoch`. + +## 7. How ViRMEn records time (and why `trial.time[iter-1]` is the right lookup) + +The I2C packet carries `[block, trial, iteration]`, and turning that into a time +depends on knowing exactly which counter `iteration` is. It is the **per-trial** +iteration index, not ViRMEn's global one, and the source makes that unambiguous. + +### The clock + +`vr.timeElapsed = toc(firstTic)` (`virmenEngine.m:367`). `firstTic` is set once +at `:124`, after initialization, and never reset — so this is one monotonic +clock for the whole session, zeroed at approximately block 1 start (section 6). + +### One `logTick` call writes both the time and the number that is broadcast + +```matlab +% ExperimentLog.m, logTick() +obj.currentIt = obj.currentIt + 1; +obj.currentTrial.time(obj.currentIt,1) = vr.timeElapsed - obj.currentTrial.start; +... +indices = [numel(obj.block), obj.writeIndex, obj.currentIt]; +``` + +`obj.currentIt` is reset to 0 at each trial start, alongside +`obj.currentTrial.start = vr.timeElapsed` (`ExperimentLog.m:~497-501`). The +returned `indices` triple is handed straight to `updateDAQSyncSignals`, which +sends it over I2C: + +```matlab +%data(1): block number +%data(2): trial number. +%data(3): VR iteration in the present trial. +``` + +So the number stamped into the TIFF header and the index into `trial.time` are +the same counter, assigned in the same call. Hence: + +``` +time(block, trial, iter) = trial.start + trial.time[iter-1] +``` + +on the `timeElapsed` clock, with the section 6 offset applied to reach the NWB +timeline. + +### Confirmed against the sample session + +- `trial.viStart` holds the *global* counter (`vr.iterations`) at trial start. + Its successive deltas — 904, 903, 949, 676, 698 — equal the per-trial + iteration counts exactly, which is what distinguishes the two counters. +- Packets for trial 1 span iterations 1..904, and `trial.time` for trial 1 has + 904 entries. Trial 3's packets span 1..565. A global counter would put trial + 3 in the thousands. +- `trial.time[0] == 0`: the first iteration coincides with trial start, so + there is no off-by-one at the trial boundary. + +### Two things this does not give you + +- **Not every frame has a packet** — 1180 of 2000 on the sample session. + ViRMEn iterations and imaging frames are not 1:1, and imaging runs before and + after behavior. This is why every frame's timestamp comes from the linear fit + rather than a direct lookup. +- **The packet marks computation, not display.** `updateDAQSyncSignals` is + called from `runtimeCodeFun`, which its own header notes runs *just before* + ViRMEn executes that iteration's display update. The logged time and the + broadcast packet refer to the same instant, so they stay mutually consistent, + but an unmeasured display latency separates both from what the animal saw. It + is a constant offset rather than a drift, and it is smaller than the ~10 ms + fit residual. From 7d707cba5f11f86d080abba83796ba352ecdfa10 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 23 Sep 2026 13:55:37 -0400 Subject: [PATCH 20/30] test: pin the imaging clock fit against late I2C packets Once per trial, the iteration that ends the trial does its end-of-trial work after vr.timeElapsed is stamped and before the I2C packet is sent, so that one packet reaches ScanImage 200-450 ms after the time the behavior log records for it. A plain least-squares fit lets those packets drag the slope: on the sample session's first file it reported +28 ppm drift where the long-baseline figure is about +5 ppm. The late-packet tests fail against the current plain fit. The rest cover corner cases the fit must keep handling: zero scatter, frames with no packet, zeroed or out-of-range indices, multiple blocks, and two or fewer usable packets. Assisted-by: ClaudeCode:claude-opus-5-5 --- tests/utils/test_imaging_behavior_sync.py | 208 ++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 tests/utils/test_imaging_behavior_sync.py diff --git a/tests/utils/test_imaging_behavior_sync.py b/tests/utils/test_imaging_behavior_sync.py new file mode 100644 index 00000000..5db07c17 --- /dev/null +++ b/tests/utils/test_imaging_behavior_sync.py @@ -0,0 +1,208 @@ +""" +Tests for frame_times_on_behavior_clock, the clock fit that turns I2C packets +into a behavior-clock timestamp for every imaging frame. + +The fixtures build a synthetic session whose true imaging -> behavior mapping +is known, so the fit can be checked exactly. Late packets are modelled on what +the sample session shows: once per trial, the iteration that ends the trial does +its end-of-trial work *after* vr.timeElapsed is stamped and *before* the I2C +packet goes out, so that one packet reaches ScanImage 200-450 ms after the time +the behavior log records for it. +""" + +from __future__ import annotations + +from types import SimpleNamespace + +import numpy as np +import pytest + +from u19_pipeline.utils.imaging_behavior_sync import frame_times_on_behavior_clock + +TRUE_SLOPE = 1.000005 # +5 ppm, the drift measured on the sample session +TRUE_OFFSET = -11.03 # imaging started ~11 s before behavior + + +def _session( + n_trials=6, + iters_per_trial=120, + dt=0.012, + iti=1.0, + late_packets=(), + lead_frames=0, + n_blocks=1, +): + """ + Synthetic sync dict + behavior log with one imaging frame per iteration. + + late_packets: iterable of (trial_index_0based, iteration_1based, delay_s). + lead_frames: frames acquired before behavior starts (no packet), as in the + real session's ~11 s of pre-behavior imaging. + """ + blocks = [SimpleNamespace(trial=[]) for _ in range(n_blocks)] + frame_time, sync_time, blk, tri, itr = [], [], [], [], [] + + # Imaging frames before behavior: on the imaging clock, no packet. + for k in range(lead_frames): + frame_time.append(k * dt) + sync_time.append(np.nan) + blk.append(0) + tri.append(0) + itr.append(0) + t0_img = lead_frames * dt + + t_behav = (t0_img * TRUE_SLOPE) + TRUE_OFFSET # behavior time of first iteration + late = {(t, i): d for t, i, d in late_packets} + trial_global = 0 + for b in range(n_blocks): + per_block = n_trials // n_blocks + for t_in_block in range(per_block): + times = np.arange(iters_per_trial) * dt + trial = SimpleNamespace(start=t_behav, time=times) + blocks[b].trial.append(trial) + for i, tt in enumerate(times, start=1): + behav = t_behav + tt + img = (behav - TRUE_OFFSET) / TRUE_SLOPE + frame_time.append(img) + sync_time.append(img + late.get((trial_global, i), 0.0)) + blk.append(b + 1) + tri.append(t_in_block + 1) + itr.append(i) + t_behav += times[-1] + iti + trial_global += 1 + + f = SimpleNamespace( + frame_time=np.asarray(frame_time), + sync_time=np.asarray(sync_time), + ) + sync = { + "files": [f], + "sync_behav_block_by_im_frame": np.asarray(blk), + "sync_behav_trial_by_im_frame": np.asarray(tri), + "sync_behav_iter_by_im_frame": np.asarray(itr), + } + log = SimpleNamespace(block=blocks if n_blocks > 1 else blocks[0]) + return sync, log + + +class TestCleanData: + def test_recovers_the_true_mapping(self): + sync, log = _session() + ts, slope, offset, residual = frame_times_on_behavior_clock(sync, log) + + assert slope == pytest.approx(TRUE_SLOPE, abs=1e-9) + assert offset == pytest.approx(TRUE_OFFSET, abs=1e-6) + assert residual == pytest.approx(0.0, abs=1e-6) + + def test_zero_scatter_does_not_reject_everything(self): + """Perfect data has zero MAD; an outlier threshold of k * 0 would + reject every point. The fit must still use all of them.""" + sync, log = _session() + ts, slope, offset, _ = frame_times_on_behavior_clock(sync, log) + expected = TRUE_SLOPE * sync["files"][0].frame_time + TRUE_OFFSET + np.testing.assert_allclose(ts, expected, atol=1e-6) + + +class TestLatePackets: + """Regression: one late packet per trial must not bias the clock fit.""" + + LATE = [(0, 90, 0.57), (1, 88, 0.23), (2, 95, 0.22), (3, 80, 0.45), (4, 91, 0.44)] + + def test_late_packets_do_not_bias_slope_or_offset(self): + sync, log = _session(late_packets=self.LATE) + _, slope, offset, _ = frame_times_on_behavior_clock(sync, log) + + # A 0.2-0.6 s outlier in a plain least-squares fit shifts these far + # more than this; the robust fit should be essentially exact. + assert (slope - TRUE_SLOPE) * 1e6 == pytest.approx(0.0, abs=0.5) # ppm + assert offset == pytest.approx(TRUE_OFFSET, abs=1e-3) + + def test_residual_reports_scatter_of_good_packets(self): + sync, log = _session(late_packets=self.LATE) + _, _, _, residual = frame_times_on_behavior_clock(sync, log) + assert residual < 1e-3 + + def test_timestamps_of_frames_with_late_packets_are_not_shifted(self): + """Timestamps come from the fit, not from the late packet itself.""" + sync, log = _session(late_packets=self.LATE) + ts, *_ = frame_times_on_behavior_clock(sync, log) + expected = TRUE_SLOPE * sync["files"][0].frame_time + TRUE_OFFSET + np.testing.assert_allclose(ts, expected, atol=1e-3) + + def test_single_late_packet_on_a_short_baseline(self): + """File 1 of the sample session: ~3 trials and one 573 ms stall gave + a +28 ppm slope with a plain fit.""" + sync, log = _session(n_trials=3, late_packets=[(0, 90, 0.573)]) + _, slope, _, _ = frame_times_on_behavior_clock(sync, log) + assert abs(slope - TRUE_SLOPE) * 1e6 < 1.0 + + +class TestCoverage: + def test_frames_without_packets_still_get_timestamps(self): + """Pre-behavior frames carry no packet; they are placed by the fit + and come out negative on the behavior clock.""" + sync, log = _session(lead_frames=50) + ts, *_ = frame_times_on_behavior_clock(sync, log) + + assert ts.size == sync["files"][0].frame_time.size + assert np.all(np.isfinite(ts)) + assert ts[0] < 0 + assert np.all(np.diff(ts) > 0) + + def test_zero_and_out_of_range_indices_are_ignored(self): + sync, log = _session() + n = sync["sync_behav_iter_by_im_frame"].size + # a frame whose packet decoded to zeros, and one past the trial's end + sync["sync_behav_block_by_im_frame"][5] = 0 + sync["sync_behav_iter_by_im_frame"][7] = 10_000 + ts, slope, offset, _ = frame_times_on_behavior_clock(sync, log) + + assert ts.size == n + assert slope == pytest.approx(TRUE_SLOPE, abs=1e-9) + assert offset == pytest.approx(TRUE_OFFSET, abs=1e-6) + + def test_multiple_blocks_use_their_own_trials(self): + sync, log = _session(n_trials=6, n_blocks=2) + _, slope, offset, residual = frame_times_on_behavior_clock(sync, log) + assert slope == pytest.approx(TRUE_SLOPE, abs=1e-9) + assert offset == pytest.approx(TRUE_OFFSET, abs=1e-6) + assert residual == pytest.approx(0.0, abs=1e-6) + + +class TestDegenerateInput: + def test_fewer_than_two_synced_frames_raises(self): + sync, log = _session() + st = sync["files"][0].sync_time + st[1:] = np.nan + with pytest.raises(ValueError, match="Not enough synchronized frames"): + frame_times_on_behavior_clock(sync, log) + + def test_no_synced_frames_raises(self): + sync, log = _session() + sync["files"][0].sync_time[:] = np.nan + with pytest.raises(ValueError, match="Not enough synchronized frames"): + frame_times_on_behavior_clock(sync, log) + + def test_exactly_two_synced_frames_fit_exactly(self): + sync, log = _session() + st = sync["files"][0].sync_time + keep = [3, 200] + mask = np.ones(st.size, bool) + mask[keep] = False + st[mask] = np.nan + _, slope, offset, residual = frame_times_on_behavior_clock(sync, log) + assert slope == pytest.approx(TRUE_SLOPE, abs=1e-8) + assert offset == pytest.approx(TRUE_OFFSET, abs=1e-5) + assert residual == pytest.approx(0.0, abs=1e-6) + + def test_three_points_with_one_outlier_does_not_crash(self): + """Rejection must never leave fewer than two points to fit.""" + sync, log = _session(late_packets=[(0, 50, 0.4)]) + st = sync["files"][0].sync_time + keep = [10, 49, 300] # frame 49 is iteration 50 of trial 0: the late one + mask = np.ones(st.size, bool) + mask[keep] = False + st[mask] = np.nan + ts, slope, offset, residual = frame_times_on_behavior_clock(sync, log) + assert np.all(np.isfinite(ts)) + assert np.isfinite(slope) and np.isfinite(offset) and np.isfinite(residual) From 3bef3d90bd736237dbfe0892032b3c3f08319863 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 23 Sep 2026 13:59:07 -0400 Subject: [PATCH 21/30] fix: reject late end-of-trial I2C packets in the imaging clock fit The iteration that ends each trial runs logEnd, endVRTrial and the performance plot update after vr.timeElapsed is stamped and before updateDAQSyncSignals sends its packet, so that packet reaches ScanImage 200-450 ms after the time the log records. The logged time is correct; the packet is late. A plain least-squares fit let these ~1-in-130 packets drag the slope and inflate the residual. The fit now rejects packets more than max(5 MAD, 5 ms) from the line and refits, never dropping below two points. On files 1-3 and 40 of the sample session, drift comes out at about +5 ppm with 1.1 ms scatter; the +28 ppm and 10.4 ms reported before were artifacts of a short baseline and one late packet. A fit on files 1-3 predicts file 40, 25 minutes later, to within 1.9 ms. Frame 644's placement moves by 0.4 ms. Docs now carry the corrected figures, the multi-file continuity checks, and the call-order explanation. Assisted-by: ClaudeCode:claude-opus-5-5 --- docs/HANDOFF_nwb_imaging_export.md | 3 +- docs/imaging_behavior_sync.md | 89 ++++++++++++++++++--- docs/nwb_imaging_export_plan.md | 2 + u19_pipeline/utils/imaging_behavior_sync.py | 41 +++++++++- 4 files changed, 121 insertions(+), 14 deletions(-) diff --git a/docs/HANDOFF_nwb_imaging_export.md b/docs/HANDOFF_nwb_imaging_export.md index 1b06a600..4926ffae 100644 --- a/docs/HANDOFF_nwb_imaging_export.md +++ b/docs/HANDOFF_nwb_imaging_export.md @@ -59,7 +59,8 @@ uv run python -m u19_pipeline.utils.imaging_behavior_sync ~/neuro-data/ef932_act ``` Expected: trials at frames 644–1176 / 1177–1690 / 1691–2000; fit slope -≈1.000027891, residual ≈10.4 ms. +≈0.999997709, residual ≈1.2 ms. (Before late-packet rejection this read +1.000027891 / 10.4 ms; see `docs/imaging_behavior_sync.md` section 8.) ## Synchronization ownership — Python, not MATLAB diff --git a/docs/imaging_behavior_sync.md b/docs/imaging_behavior_sync.md index 11ff6cad..4dc62e68 100644 --- a/docs/imaging_behavior_sync.md +++ b/docs/imaging_behavior_sync.md @@ -210,13 +210,15 @@ frames with behavior info: 1357 (67.8%) trial 1 frame span: [644, 1176] trial 2 frame span: [1177, 1690] trial 3 frame span: [1691, 2000] -behavior-clock fit: slope=1.000027891, offset=-11.028s, residual std=10.4 ms +behavior-clock fit: slope=0.999997709, offset=-11.027s, residual std=1.2 ms ``` -Frame spans match an independent raw-header decode exactly; the fitted slope -(≈28 ppm) is the real clock drift between the two computers, and the 10 ms -residual is the expected sub-frame jitter (iterations arrive faster than -frames and only the first packet per frame is kept). +Frame spans match an independent raw-header decode exactly. The fit rejects +late packets (section 8) before fitting; the 1.2 ms residual is the scatter of +the packets it keeps. Do not read clock drift off this single-file slope: 40 s +of baseline cannot resolve a few ppm, and the long-baseline figure is about ++5 ppm (section 8). An earlier version of this fit had no rejection and reported ++28 ppm and 10.4 ms here; both numbers were artifacts of one late packet. ## 5. Building an NWB file from this @@ -272,9 +274,10 @@ Choices worth noting: - **Clock choice**: use the ViRMEn session clock as the NWB timebase (trials and behavior arrays are already in it; `session_start_time` = `log.initialTimestamp`). Imaging gets explicit per-frame `timestamps` - instead of a start+rate pair — this also absorbs the measured 28 ppm drift. -- **Sub-frame accuracy**: the linear fit is good to ~10 ms (≈ half a frame at - 50 Hz). If per-iteration precision is ever needed, the I2C packet + instead of a start+rate pair — this also absorbs the ~5 ppm drift between + the two computers (about 8 ms over a 29-minute session). +- **Sub-frame accuracy**: the linear fit is good to ~1 ms (packet scatter), + well inside one 20 ms frame at 50 Hz. If per-iteration precision is ever needed, the I2C packet timestamps (`sync_time`) pin individual iterations to the imaging clock at millisecond level. - **Multi-file / volumetric sessions**: pass all split TIFFs in order; @@ -482,5 +485,71 @@ timeline. ViRMEn executes that iteration's display update. The logged time and the broadcast packet refer to the same instant, so they stay mutually consistent, but an unmeasured display latency separates both from what the animal saw. It - is a constant offset rather than a drift, and it is smaller than the ~10 ms - fit residual. + is a constant offset rather than a drift. It cannot be measured from these + files, since both the logged time and the packet sit on the ViRMEn side of + the display. + +## 8. Late packets at trial end, and what the clock fit really shows + +Checked against files 1, 2, 3 and 40 of the sample session (40 is ~25 minutes +in; the files in between were not copied). + +### Files split by ScanImage are one continuous recording + +ScanImage rolls to a new file every `SI.hScan2D.logFramesPerFile` = 2000 +frames. Across files 1 -> 2 -> 3, and at file 40 (first frame 78001 = 39 x 2000 ++ 1), frame numbers and `frameTimestamps_sec` continue without a reset, every +file carries the same `epoch`, and the I2C stream picks up where it left off +(trial 3, iteration 565 at the end of file 1; iteration 567 at the start of +file 2). Passing the files in order to `sync_imaging_behavior` and to +`ScanImageImagingInterface(file_paths=...)` therefore gives one recording with +increasing timestamps across the boundaries. This session is single-FOV +(`mroiEnable = False`) with 5 fastZ planes interleaved within each file. + +### One late packet per trial + +Once per trial, one packet reaches ScanImage 200-450 ms after the time the +behavior log records for its iteration. It is always iteration +`trial.iterations + 1`, the first after the trial proper ends, and it lines up +with a single long gap in `trial.time` (e.g. 451 ms where the median step is +11.7 ms). The call order in `LSTT_Active_TrialStructure_EF.m` explains it: + +1. The engine stamps `vr.timeElapsed` at the top of the loop + (`virmenEngine.m:367`), before `runtimeCodeFun` runs. +2. In the `EndOfTrial` state, `runtimeCodeFun` calls `logEnd`, `endVRTrial` and + `protocol.updateRun` (`:540-548`). +3. Only then do `logTick` (`:684`), which stores the time stamped in step 1, + and `updateDAQSyncSignals` (`:690`), which sends the packet, run. + +So the logged time is right and the packet is late by the duration of the +end-of-trial work. The delay grows through the session (~210 ms early, ~450 ms +by trial 169), consistent with work that scales with the number of trials run +so far. + +### Effect on the fit, and the fix + +A plain least-squares fit gives those ~1 in 130 packets enough weight to +drag it. `frame_times_on_behavior_clock` now rejects packets more than +max(5 x MAD, 5 ms) from the fit, iterating until the kept set stops changing, +and never rejects down to fewer than two points. + +| Files | Plain fit | With rejection | Packets rejected | +|---|---|---|---| +| 1 | +27.9 ppm, residual 10.4 ms | -2.3 ppm, residual 1.16 ms | 10 / 1180 | +| 1-3 | +6.0 ppm, residual 9.2 ms | +3.9 ppm, residual 1.18 ms | 35 / 4674 | +| 1-3 + 40 | +4.8 ppm, residual 13.0 ms | +5.2 ppm, residual 1.13 ms | 45 / 6288 | + +- **Drift is about +5 ppm**, roughly 8 ms over the 29-minute session. The +28 + ppm reported earlier came from the first file alone: 40 s of baseline plus + one 573 ms late packet. +- **Packet scatter is ~1.1 ms**, not ~10 ms. +- **The linear model holds over the session**: a fit on files 1-3 predicts + file 40's packets, 25 minutes later, with a median error of -1.9 ms and 1.2 + ms scatter. +- **The alignment result barely moves**: frame 644 is +22.6 ms after trial 1 + starts with the plain fit and +23.0 ms with rejection. Through the export + path on files 1-3, the first imaging frame of trials 2-12 lands within + +/-10 ms (half a frame) of trial start; trial 1 is at +23 ms (about one + frame). The trial-1 difference is not yet explained. + +Covered by `tests/utils/test_imaging_behavior_sync.py`. diff --git a/docs/nwb_imaging_export_plan.md b/docs/nwb_imaging_export_plan.md index 2ab8df8c..521bf416 100644 --- a/docs/nwb_imaging_export_plan.md +++ b/docs/nwb_imaging_export_plan.md @@ -98,6 +98,8 @@ which is physically backwards. source_data: ['ScanImageImaging', 'VirmenData'] diagnostics: slope 1.000027891, residual 10.4 ms, epoch_offset 27.0 ms, 2000 frames -> 400 volumes + (pre-rejection fit; with late-packet rejection the same file + gives slope 0.999997709, residual 1.2 ms, frame 644 at +23.0 ms) nwb: TwoPhotonSeries + 179 trials, 0.420 GB frame 644 (trial 1's first imaging frame) = +22.3 ms after trial 1 start ``` diff --git a/u19_pipeline/utils/imaging_behavior_sync.py b/u19_pipeline/utils/imaging_behavior_sync.py index 0640fe3e..a573cdc7 100644 --- a/u19_pipeline/utils/imaging_behavior_sync.py +++ b/u19_pipeline/utils/imaging_behavior_sync.py @@ -438,9 +438,44 @@ def frame_times_on_behavior_clock(sync, log): raise ValueError('Not enough synchronized frames to fit a clock mapping.') # the I2C packet timestamp marks when the iteration happened on the # imaging clock; frames between packets interpolate linearly - slope, offset = np.polyfit(sync_time[valid], behav_t[valid], 1) - residuals = behav_t[valid] - (slope * sync_time[valid] + offset) - return slope * frame_time + offset, slope, offset, float(np.std(residuals)) + slope, offset, residual = _robust_linear_fit(sync_time[valid], behav_t[valid]) + return slope * frame_time + offset, slope, offset, residual + + +# Packets further than this from the fit are candidates for rejection even +# when the scatter of good packets is tiny; well above the ~1 ms scatter of +# good packets, well below the 200-450 ms lateness of end-of-trial packets. +_OUTLIER_FLOOR_S = 0.005 +_OUTLIER_MADS = 5.0 + + +def _robust_linear_fit(x, y, max_passes=5): + """Least-squares line with iterative rejection of late packets. + + Once per trial, ViRMEn does its end-of-trial work (``logEnd``, + ``endVRTrial``, the performance-plot update) after ``vr.timeElapsed`` has + been stamped for that iteration and before ``updateDAQSyncSignals`` sends + the packet. That one packet reaches ScanImage 200-450 ms after the time the + behavior log records for it. A plain fit lets those outliers drag the + slope and inflate the residual; here they are dropped by a MAD-based + threshold and the line is refit on the rest. + + Returns ``(slope, offset, residual_std)`` where the residual is the scatter + of the packets kept. Never rejects down to fewer than two points. + """ + keep = np.ones(x.size, dtype=bool) + slope, offset = np.polyfit(x, y, 1) + for _ in range(max_passes): + resid = y - (slope * x + offset) + centre = np.median(resid[keep]) + mad = 1.4826 * np.median(np.abs(resid[keep] - centre)) + new_keep = np.abs(resid - centre) <= max(_OUTLIER_MADS * mad, _OUTLIER_FLOOR_S) + if new_keep.sum() < 2 or np.array_equal(new_keep, keep): + break + keep = new_keep + slope, offset = np.polyfit(x[keep], y[keep], 1) + resid = y[keep] - (slope * x[keep] + offset) + return slope, offset, float(np.std(resid)) def _main(argv=None): From baa56015bf007248792bc57233c7698aa71c885b Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:55:09 -0400 Subject: [PATCH 22/30] docs: trial 1's +23 ms is a late packet, and packet-based spans lag Checked on the full sample session (45 files, 179 trials). The first iteration of every trial is slow: ViRMEn records the time, sets up the trial, then sends the packet, so iteration 1's packet arrives a median 8.9 ms late (trial 1: 23.2 ms). Frame timestamps come from the clock fit and are unaffected, but spans that assign frames by which header received a packet start one frame late in 100 of 179 trials (two frames for trial 1). NWB export does not write those spans, so it is unaffected; the docs now say to derive frame membership from timestamps. Also withdraws the earlier claim that trial 1's +22.3 ms showed the 27 ms session offset to be physically right; the offset stands on the shared-zero argument alone. Assisted-by: ClaudeCode:claude-opus-5-5 --- docs/HANDOFF_nwb_imaging_export.md | 4 ++- docs/imaging_behavior_sync.md | 54 +++++++++++++++++++++++++----- docs/nwb_imaging_export_plan.md | 12 ++++--- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/docs/HANDOFF_nwb_imaging_export.md b/docs/HANDOFF_nwb_imaging_export.md index 4926ffae..2c1916b5 100644 --- a/docs/HANDOFF_nwb_imaging_export.md +++ b/docs/HANDOFF_nwb_imaging_export.md @@ -112,7 +112,9 @@ this personally (it's the decision point). 3. Run the conversion (stub-sized write is fine). **Pass:** NWB file has VirmenData behavior + TwoPhotonSeries, trial 1 -(start 1.757 s) has its first imaging frame at ≈1.77 s. +(start 1.757 s) has its first packet-carrying frame at ≈1.78 s. (That 23 ms is +trial 1's late first packet, not alignment error — see +`docs/imaging_behavior_sync.md` section 9.) **Fail:** version conflict or the converter can't take per-interface timestamps → report findings on issue #111 before proceeding; the fix then happens in tank-lab-to-nwb first. diff --git a/docs/imaging_behavior_sync.md b/docs/imaging_behavior_sync.md index 4dc62e68..b0bb2f3a 100644 --- a/docs/imaging_behavior_sync.md +++ b/docs/imaging_behavior_sync.md @@ -259,8 +259,10 @@ nwbfile = interface.create_nwbfile(metadata=...) # TwoPhotonSeries w/ timestamp # trials table straight from the spans / behavior log for i, tr in enumerate(log.block.trial): nwbfile.add_trial(start_time=tr.start, stop_time=tr.start + tr.duration) - # + columns: trialType, choice, cuePos, ... and the imaging frame span - # from sync['sync_im_frame_span_by_behav_trial'][i] + # + columns: trialType, choice, cuePos, ... + # Do NOT add frame spans from sync['sync_im_frame_span_by_behav_trial']: + # they are packet-based and one frame late at the onset of over half the + # trials (section 9). Derive frame membership from the timestamps. # per-iteration behavior (position, velocity) as TimeSeries on the same clock # t = tr.start + tr.time; data = tr.position / tr.velocity @@ -305,9 +307,10 @@ trial 1 row: {'start_time': 1.757, 'stop_time': 12.400, 'first_im_frame': 644, 'last_im_frame': 1176} ``` -Cross-check: trial 1 starts at 1.757 s on the behavior clock, and its first -imaging frame (page 644) maps to ≈1.77 s — the two data streams agree to -within the expected sub-frame jitter. Negative timestamps are the ~11 s of +Cross-check: trial 1 starts at 1.757 s on the behavior clock, and page 644, +the first page carrying a trial-1 packet, maps to ≈1.78 s. That 23 ms is not +alignment error: trial 1's first packet was sent late (section 9), and the +trial actually starts inside page 642. Negative timestamps are the ~11 s of imaging acquired before ViRMEn behavior started (frames with `I2CData = {}`). ### Relationship to the existing NWB export branches @@ -400,9 +403,12 @@ timestamps = frame_times_on_behavior_clock(sync, log)[0] + epoch_offset ``` `VirmenDataInterface` already applies this shift to its trials table -(`epoch_start_nwb`). Imaging must match it. Skipping it puts trial 1's first -imaging frame 4.7 ms *before* trial 1 starts instead of 22.3 ms after — wrong -by one frame period, and small enough to pass for ordinary jitter. +(`epoch_start_nwb`). Imaging must match it: the two must share one zero, and +27 ms of disagreement is more than a frame at 50 Hz. (An earlier version of +this paragraph cited trial 1's +22.3 ms first-frame offset as evidence that the +shift was physically right. That was wrong reasoning — the +22 ms is trial 1's +late first packet, section 9 — but the shift itself stands on the +shared-zero argument.) ### Why wall clocks can't do this job @@ -553,3 +559,35 @@ and never rejects down to fewer than two points. frame). The trial-1 difference is not yet explained. Covered by `tests/utils/test_imaging_behavior_sync.py`. + +## 9. The first packet of every trial is late, so packet-based frame spans are too + +Checked on the full sample session (all 45 files, 89,508 frames, 179 trials; +fit +5.14 ppm, 1.05 ms scatter). + +The first iteration of every trial is slow: ViRMEn records `vr.timeElapsed`, +then does its trial-setup work, then sends the packet. The step from iteration +1 to 2 has a median of 21.0 ms against ~11.7 ms elsewhere, and the iteration-1 +packet arrives a median **8.9 ms** late (95th percentile 11.6 ms). Trial 1, +the first trial of the session, is the extreme case: a 40.8 ms first step and a +packet 23.2 ms late, which lands 0.2 ms into page 644 although the trial began +inside page 642. + +Frame timestamps come from the robust clock fit and are unaffected. What is +affected is anything that decides a trial's frames by *which frame header +received the packet*: `sync_im_frame_span_by_behav_trial` here, and the +production `u19_imaging_pipeline.SyncImagingBehavior` spans it reproduces. +Against the frame that contains each trial's start: + +| Span's first frame | Trials | +|---|---| +| same frame | 78 | +| one frame late | 100 | +| two frames late | 1 (trial 1) | + +- **NWB export is not affected.** It writes per-frame timestamps and the trial + table's start times; it does not write packet-based spans. Frame membership + should be derived from those timestamps. +- **Analyses that cut trials with the DataJoint spans** have up to one frame of + onset jitter (20 ms at 50 Hz, ~70 ms on the mesoscope). The spans keep + matching production on purpose, so they are left as they are here. diff --git a/docs/nwb_imaging_export_plan.md b/docs/nwb_imaging_export_plan.md index 521bf416..5ac682df 100644 --- a/docs/nwb_imaging_export_plan.md +++ b/docs/nwb_imaging_export_plan.md @@ -34,8 +34,10 @@ timestamps coexist in one env (neuroconv 0.10.0, roiextractors 0.9.0, pynwb 4.1.0, hdmf 6.2.0, spikeinterface 0.104.8, datajoint 0.14.9 — no conflict). A real conversion of the sample session wrote a 0.42 GB NWB with VirmenData behavior (179 trials) + a `TwoPhotonSeries` of 400 volume timestamps, and -trial 1's first imaging frame lands **+22.3 ms** after trial 1 starts — one -frame period at 50.2 Hz, as expected. +trial 1's first packet-carrying frame lands **+22.3 ms** after trial 1 starts. +(Later checked on the full session: that is trial 1's late first packet, not +alignment error; the typical trial is +1 ms. See `docs/imaging_behavior_sync.md` +section 9.) Three defects surfaced that task D must fix in `tank-lab-to-nwb`: @@ -62,8 +64,10 @@ Three defects surfaced that task D must fix in `tank-lab-to-nwb`: clock (`trial.start + trial.time`), but the converter zeroes the NWB timeline at `log.session.start` and shifts its trials table by `epoch_start_nwb`. On the sample session that offset is **+27.0 ms**. Imaging timestamps must take -the same shift; without it frame 644 lands 4.7 ms *before* trial 1 starts, -which is physically backwards. +the same shift, because the trials table and the imaging series must share +one zero. (The original argument here, that skipping it made frame 644 land +"physically backwards", was wrong; see `docs/imaging_behavior_sync.md` section +9.) - [x] Spike: converter + ScanImage interface + our timestamps in one env, real conversion, aligned TwoPhotonSeries - [x] Rebase/merge strategy: bring `feat/nwb-export-handler-completion` and our sync branch together From 9c207cd3283947042fa4974d77a34736e7770139 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 08:40:40 -0400 Subject: [PATCH 23/30] test: per-plane imaging interfaces and partial last volumes Two bugs in the imaging export, found on the full sample session: - A recording that stops partway through its last fastZ volume (89,508 pages = 5 x 17,901 + 3) raised ValueError, because the timestamp code required the page count to be a whole multiple of the volume count. - Two fields of view wrote the same TwoPhotonSeries name, so the NWB build failed on the second one. These tests describe the replacement: one interface per field of view and plane, each with a unique metadata_key and its own page timestamps, keeping only complete volumes as neuroconv's per-plane reader does. The integration tests run a real conversion against ~/neuro-data and skip where the sample recordings or the NWB stack are absent. Assisted-by: ClaudeCode:claude-opus-5-5 --- tests/nwb_export/test_imaging_conversion.py | 107 +++++++++++------- .../test_imaging_nwb_integration.py | 81 +++++++++++++ .../test_imaging_plane_timestamps.py | 67 +++++++++++ 3 files changed, 217 insertions(+), 38 deletions(-) create mode 100644 tests/nwb_export/test_imaging_nwb_integration.py create mode 100644 tests/nwb_export/test_imaging_plane_timestamps.py diff --git a/tests/nwb_export/test_imaging_conversion.py b/tests/nwb_export/test_imaging_conversion.py index b3ac4d8e..8eb7f4cf 100644 --- a/tests/nwb_export/test_imaging_conversion.py +++ b/tests/nwb_export/test_imaging_conversion.py @@ -27,6 +27,19 @@ import pytest +@pytest.fixture(autouse=True) +def _single_plane_tiffs(): + """The source-data tests use made-up paths; build_source_data reads the + plane count from the first TIFF's header, so default it to one plane. + Tests that need several planes patch it again inside the test.""" + with patch( + "u19_pipeline.nwb_export.conversion.scanimage_plane_count", + create=True, + return_value=1, + ): + yield + + def _make_dj_table(rows: list): """ Mirrors the helper in tests/nwb_export/test_modality_validators.py. @@ -240,10 +253,10 @@ def test_omits_imaging_when_paths_do_not_resolve(self, virmen_file, base_job): @pytest.mark.no_db class TestBuildSourceDataMultipleFovs: """ - A mesoscope session has one TiffSplit per field of view, and fields of view - are separate regions rather than continuations of one another. Each must get - its own interface: merging them presents unrelated regions as one continuous - recording and misaligns every field of view after the first. + One interface per (field of view, plane). Fields of view are separate + regions, and fastZ planes are separate depths; each gets its own + TwoPhotonSeries, so every interface needs a unique key and metadata_key + (sharing one made the NWB build fail on the second series). """ @pytest.fixture() @@ -260,52 +273,70 @@ def base_job(self): "session_number": 1, } - def test_each_fov_gets_its_own_interface(self, virmen_file, base_job): + @staticmethod + def _build(base_job, virmen_file, export_params, by_fov=None, n_planes=1): from u19_pipeline.nwb_export.conversion import build_source_data + with ( + patch( + "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", + create=True, + return_value=by_fov or {}, + ), + patch( + "u19_pipeline.nwb_export.conversion.scanimage_plane_count", + create=True, + return_value=n_planes, + ), + ): + return build_source_data(base_job, export_params, virmen_file, None) + + def test_each_fov_and_plane_gets_its_own_interface(self, virmen_file, base_job): by_fov = { 0: ["/root/fov0_00001.tif", "/root/fov0_00002.tif"], 1: ["/root/fov1_00001.tif", "/root/fov1_00002.tif"], } - with patch( - "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", - create=True, - return_value=by_fov, - ): - source_data = build_source_data( - base_job, {"include_imaging": True}, virmen_file, None - ) - - assert source_data["ScanImageImagingFOV0"]["file_paths"] == by_fov[0] - assert source_data["ScanImageImagingFOV1"]["file_paths"] == by_fov[1] + sd = self._build( + base_job, virmen_file, {"include_imaging": True}, by_fov, n_planes=3 + ) + keys = sorted(k for k in sd if k.startswith("ScanImageImaging")) + assert keys == [f"ScanImageImagingFOV{f}Plane{k}" for f in (0, 1) for k in range(3)] + for f in (0, 1): + for k in range(3): + entry = sd[f"ScanImageImagingFOV{f}Plane{k}"] + assert entry["file_paths"] == by_fov[f] + assert entry["plane_index"] == k + + def test_metadata_keys_are_unique(self, virmen_file, base_job): + by_fov = {0: ["/root/fov0.tif"], 1: ["/root/fov1.tif"]} + sd = self._build( + base_job, virmen_file, {"include_imaging": True}, by_fov, n_planes=5 + ) + mks = [v["metadata_key"] for k, v in sd.items() if k.startswith("ScanImageImaging")] + assert len(mks) == 10 + assert len(set(mks)) == 10 def test_fov_files_are_not_cross_contaminated(self, virmen_file, base_job): - from u19_pipeline.nwb_export.conversion import build_source_data - by_fov = {0: ["/root/fov0.tif"], 1: ["/root/fov1.tif"]} - with patch( - "u19_pipeline.nwb_export.conversion.resolve_imaging_paths_by_fov", - create=True, - return_value=by_fov, - ): - source_data = build_source_data( - base_job, {"include_imaging": True}, virmen_file, None - ) - + sd = self._build(base_job, virmen_file, {"include_imaging": True}, by_fov) for fov in (0, 1): - paths = source_data[f"ScanImageImagingFOV{fov}"]["file_paths"] - assert len(paths) == 1 - assert f"fov{fov}" in paths[0] + paths = sd[f"ScanImageImagingFOV{fov}Plane0"]["file_paths"] + assert paths == [f"/root/fov{fov}.tif"] - def test_explicit_tiff_paths_stay_a_single_interface(self, virmen_file, base_job): - """An explicit override names exact files, so it is one interface.""" - from u19_pipeline.nwb_export.conversion import build_source_data + def test_single_plane_omits_plane_index(self, virmen_file, base_job): + """A single-plane file has no plane dimension to select.""" + sd = self._build( + base_job, virmen_file, {"include_imaging": True}, {0: ["/root/a.tif"]}, 1 + ) + assert "plane_index" not in sd["ScanImageImagingFOV0Plane0"] - source_data = build_source_data( + def test_explicit_tiff_paths_are_field_of_view_zero(self, virmen_file, base_job): + sd = self._build( base_job, - {"include_imaging": True, "tiff_paths": ["/root/a.tif", "/root/b.tif"]}, virmen_file, - None, + {"include_imaging": True, "tiff_paths": ["/root/a.tif", "/root/b.tif"]}, + n_planes=2, ) - imaging = [k for k in source_data if k.startswith("ScanImageImaging")] - assert imaging == ["ScanImageImaging"] + imaging = sorted(k for k in sd if k.startswith("ScanImageImaging")) + assert imaging == ["ScanImageImagingFOV0Plane0", "ScanImageImagingFOV0Plane1"] + assert sd["ScanImageImagingFOV0Plane1"]["file_paths"] == ["/root/a.tif", "/root/b.tif"] diff --git a/tests/nwb_export/test_imaging_nwb_integration.py b/tests/nwb_export/test_imaging_nwb_integration.py new file mode 100644 index 00000000..d36a66e5 --- /dev/null +++ b/tests/nwb_export/test_imaging_nwb_integration.py @@ -0,0 +1,81 @@ +""" +Integration tests against the real sample recordings in ~/neuro-data. + +These run a real conversion through TowersNWBConverter, so they catch what the +source-data unit tests cannot: two interfaces writing the same NWB object name, +and the per-plane reader disagreeing with our timestamp count. They skip when +the sample data or the NWB stack is not present. +""" + +from __future__ import annotations + +from pathlib import Path + +import numpy as np +import pytest + +DATA = Path.home() / "neuro-data" +FIRST = DATA / "ef932_act131_08072026_00001_00001.tif" +LAST = DATA / "ef932_act131_08072026_00001_00045.tif" # 1,508 pages = 5 x 301 + 3 +BEHAVIOR = next(DATA.glob("Session_*ef932_act131_20260807_1.mat"), None) + +tank_lab_to_nwb = pytest.importorskip("tank_lab_to_nwb") +pytest.importorskip("neuroconv") +pytestmark = pytest.mark.skipif( + not (FIRST.exists() and LAST.exists() and BEHAVIOR is not None), + reason="sample recordings not present in ~/neuro-data", +) + + +def _converter(source_data, **kw): + from tank_lab_to_nwb.convert_towers_task.towersnwbconverter import ( + TowersNWBConverter, + ) + + return TowersNWBConverter(source_data=source_data, **kw) + + +def test_plane_count_read_from_header(): + from u19_pipeline.nwb_export.conversion import scanimage_plane_count + + assert scanimage_plane_count(FIRST) == 5 + + +def test_partial_last_volume_matches_the_per_plane_reader(): + """Regression: a recording ending mid-volume raised ValueError.""" + from neuroconv.datainterfaces import ScanImageImagingInterface + + from u19_pipeline.nwb_export.conversion import ( + page_timestamps_for_session, + plane_timestamps, + ) + + page_ts, _ = page_timestamps_for_session([str(LAST)], BEHAVIOR) + assert page_ts.size == 1508 + for k in range(5): + ts = plane_timestamps(page_ts, plane_index=k, n_planes=5) + reader = ScanImageImagingInterface(file_paths=[LAST], plane_index=k) + assert ts.size == np.size(reader.get_original_timestamps()) == 301 + + +def test_two_fovs_and_planes_build_with_unique_names(): + """Regression: a second field of view failed on a duplicate TwoPhotonSeries.""" + from u19_pipeline.nwb_export.conversion import build_source_data + + job = {"subject_fullname": "s", "session_date": "2026-08-07", "session_number": 1} + sd = build_source_data(job, {"include_imaging": True, "tiff_paths": [str(FIRST)]}, BEHAVIOR, None) + # a second "field of view" pointing at the same file is enough to test naming + for key in [k for k in sd if k.startswith("ScanImageImagingFOV0")]: + twin = dict(sd[key], metadata_key=sd[key]["metadata_key"].replace("fov0", "fov1")) + sd[key.replace("FOV0", "FOV1")] = twin + + conv = _converter(sd) + md = conv.get_metadata() + nwb = conv.create_nwbfile( + metadata=md, + conversion_options={k: {"stub_test": True} for k in sd if k.startswith("ScanImageImaging")}, + ) + expected = {f"TwoPhotonSeriesFOV{f}Plane{k}" for f in (0, 1) for k in range(5)} + assert expected <= set(nwb.acquisition) + planes = {s.imaging_plane.name for s in nwb.acquisition.values() if s.name in expected} + assert planes == {f"ImagingPlaneFOV{f}Plane{k}" for f in (0, 1) for k in range(5)} diff --git a/tests/nwb_export/test_imaging_plane_timestamps.py b/tests/nwb_export/test_imaging_plane_timestamps.py new file mode 100644 index 00000000..281f3ead --- /dev/null +++ b/tests/nwb_export/test_imaging_plane_timestamps.py @@ -0,0 +1,67 @@ +""" +Per-plane imaging timestamps. + +ScanImage interleaves fastZ planes page by page: page p belongs to plane +p % n_planes. neuroconv's per-plane reader (ScanImageImagingInterface with +plane_index) exposes only complete volumes, so a recording that stops partway +through its last volume gives every plane floor(n_pages / n_planes) samples. +The sample session is such a recording: 89,508 pages = 5 x 17,901 + 3. +""" + +from __future__ import annotations + +import numpy as np +import pytest + +from u19_pipeline.nwb_export.conversion import plane_timestamps + + +@pytest.mark.no_db +class TestPlaneTimestamps: + def test_trailing_partial_volume_is_dropped(self): + """Regression: 13 pages / 5 planes used to raise ValueError.""" + page_ts = np.arange(13, dtype=float) + for k in range(5): + ts = plane_timestamps(page_ts, plane_index=k, n_planes=5) + np.testing.assert_array_equal(ts, page_ts[k::5][:2]) + + def test_each_plane_gets_its_own_page_times(self): + page_ts = np.arange(20, dtype=float) * 0.02 + planes = [plane_timestamps(page_ts, plane_index=k, n_planes=5) for k in range(5)] + for k in range(1, 5): + np.testing.assert_allclose(planes[k] - planes[k - 1], 0.02) + + def test_exact_multiple(self): + page_ts = np.arange(10, dtype=float) + np.testing.assert_array_equal( + plane_timestamps(page_ts, plane_index=1, n_planes=5), [1.0, 6.0] + ) + + def test_single_plane_keeps_every_page(self): + page_ts = np.arange(7, dtype=float) + np.testing.assert_array_equal( + plane_timestamps(page_ts, plane_index=0, n_planes=1), page_ts + ) + + def test_sample_session_page_count(self): + page_ts = np.arange(89_508, dtype=float) + for k in range(5): + assert plane_timestamps(page_ts, plane_index=k, n_planes=5).size == 17_901 + + @pytest.mark.parametrize("plane_index", [-1, 5, 7]) + def test_plane_index_out_of_range_raises(self, plane_index): + with pytest.raises(ValueError, match="plane_index"): + plane_timestamps(np.arange(10.0), plane_index=plane_index, n_planes=5) + + @pytest.mark.parametrize("n_planes", [0, -2]) + def test_non_positive_plane_count_raises(self, n_planes): + with pytest.raises(ValueError, match="n_planes"): + plane_timestamps(np.arange(10.0), plane_index=0, n_planes=n_planes) + + def test_no_complete_volume_raises(self): + with pytest.raises(ValueError, match="complete volume"): + plane_timestamps(np.arange(3.0), plane_index=0, n_planes=5) + + def test_empty_input_raises(self): + with pytest.raises(ValueError, match="complete volume"): + plane_timestamps(np.array([]), plane_index=0, n_planes=1) From 4503afd29ff9ce9ed6fcf2a1eded5a09591bd193 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 08:45:47 -0400 Subject: [PATCH 24/30] test: sync the partial-volume check on files 44 and 45 File 45 was recorded after behavior ended, so it carries no I2C packets and cannot be synced on its own; the export always syncs every file of a field of view. Files 44 and 45 together still end partway through a volume (3,508 pages = 5 x 701 + 3). Assisted-by: ClaudeCode:claude-opus-5-5 --- tests/nwb_export/test_imaging_nwb_integration.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tests/nwb_export/test_imaging_nwb_integration.py b/tests/nwb_export/test_imaging_nwb_integration.py index d36a66e5..bcd02f04 100644 --- a/tests/nwb_export/test_imaging_nwb_integration.py +++ b/tests/nwb_export/test_imaging_nwb_integration.py @@ -16,13 +16,17 @@ DATA = Path.home() / "neuro-data" FIRST = DATA / "ef932_act131_08072026_00001_00001.tif" -LAST = DATA / "ef932_act131_08072026_00001_00045.tif" # 1,508 pages = 5 x 301 + 3 +# The last two files: 2,000 + 1,508 = 3,508 pages = 5 x 701 + 3, so the +# recording stops partway through a volume. File 45 alone cannot be synced: +# it was recorded after behavior ended and carries no packets. +TAIL = [DATA / f"ef932_act131_08072026_00001_000{n}.tif" for n in (44, 45)] +LAST = TAIL[-1] BEHAVIOR = next(DATA.glob("Session_*ef932_act131_20260807_1.mat"), None) tank_lab_to_nwb = pytest.importorskip("tank_lab_to_nwb") pytest.importorskip("neuroconv") pytestmark = pytest.mark.skipif( - not (FIRST.exists() and LAST.exists() and BEHAVIOR is not None), + not (FIRST.exists() and all(f.exists() for f in TAIL) and BEHAVIOR is not None), reason="sample recordings not present in ~/neuro-data", ) @@ -50,12 +54,12 @@ def test_partial_last_volume_matches_the_per_plane_reader(): plane_timestamps, ) - page_ts, _ = page_timestamps_for_session([str(LAST)], BEHAVIOR) - assert page_ts.size == 1508 + page_ts, _ = page_timestamps_for_session([str(f) for f in TAIL], BEHAVIOR) + assert page_ts.size == 3508 for k in range(5): ts = plane_timestamps(page_ts, plane_index=k, n_planes=5) - reader = ScanImageImagingInterface(file_paths=[LAST], plane_index=k) - assert ts.size == np.size(reader.get_original_timestamps()) == 301 + reader = ScanImageImagingInterface(file_paths=TAIL, plane_index=k) + assert ts.size == np.size(reader.get_original_timestamps()) == 701 def test_two_fovs_and_planes_build_with_unique_names(): From 66fdf3a6999ae8d16bfe2b9c6751be0ac478f004 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 08:45:47 -0400 Subject: [PATCH 25/30] fix: one imaging series per plane, with complete-volume timestamps Two bugs broke imaging export on real sessions: - The timestamp code subset one volumetric series with a stride and required the page count to be a whole multiple of the volume count, so any recording that stopped partway through its last fastZ volume raised ValueError. The full sample session does (89,508 pages = 5 x 17,901 + 3). - Every field of view shared neuroconv's default metadata_key and wrote the same TwoPhotonSeries name, so a second field of view failed. Each field of view and plane is now its own interface, ScanImageImagingFOV{f}Plane{k}, with a unique metadata_key and plane_index. The I2C sync runs once per field of view (page_timestamps_for_session), and plane_timestamps gives plane k every n-th page over complete volumes only, matching neuroconv's per-plane reader. Planes keep their own page times instead of sharing one per volume, which within a 5-plane volume at 50 Hz differ by up to 80 ms. The plane count is read from the TIFF header (actualNumSlices, since numSlices can be stale); multi-channel and slow-stack files are refused. The full 45-file sample session now converts: five planes of 17,901 samples, unique series and imaging-plane names, planes one frame (19.92 ms) apart. Assisted-by: ClaudeCode:claude-opus-5-5 --- u19_pipeline/nwb_export/conversion.py | 206 +++++++++++++++++--------- 1 file changed, 136 insertions(+), 70 deletions(-) diff --git a/u19_pipeline/nwb_export/conversion.py b/u19_pipeline/nwb_export/conversion.py index c950ff04..cd4366ef 100644 --- a/u19_pipeline/nwb_export/conversion.py +++ b/u19_pipeline/nwb_export/conversion.py @@ -259,13 +259,53 @@ def resolve_imaging_paths_by_fov( return by_fov -def imaging_timestamps_for_session( - tiff_paths: list, - virmen_file, - n_samples: int | None = None, -): +def scanimage_plane_count(tiff_path) -> int: """ - Per-frame imaging timestamps on the NWB timeline for ``tiff_paths``. + Number of fastZ planes interleaved page by page in a ScanImage TIFF. + + Uses ``SI.hStackManager.actualNumSlices``, not ``numSlices``: the latter + can hold a stale setting (the sample mesoscope file says 91 for a + single-plane acquisition). Only the layouts the export handles are + accepted: one saved channel, and either no stack or a fast (interleaved) + stack. + """ + import tifffile # noqa: PLC0415 + + with tifffile.TiffFile(str(tiff_path)) as tif: + meta = tif.scanimage_metadata + frame_data = (meta or {}).get("FrameData") or {} + if not frame_data: + raise ValueError( + f"{tiff_path} has no ScanImage metadata, so its plane layout cannot be " + f"determined. Per-ROI splits written by the legacy u19_meso pipeline " + f"are missing it; export from the raw ScanImage files instead." + ) + + saved = frame_data.get("SI.hChannels.channelSave", 1) + n_channels = len(saved) if isinstance(saved, (list, tuple)) else 1 + if n_channels != 1: + raise NotImplementedError( + f"{tiff_path} saves {n_channels} channels; pages then interleave " + f"channels as well as planes, which the imaging export does not handle." + ) + + if not frame_data.get("SI.hStackManager.enable", False): + return 1 + mode = frame_data.get("SI.hStackManager.stackMode", "fast") + if mode != "fast": + raise NotImplementedError( + f"{tiff_path} is a '{mode}' z-stack; only fast (interleaved) stacks " + f"are supported." + ) + n = frame_data.get("SI.hStackManager.actualNumSlices") + if n is None: + n = frame_data.get("SI.hStackManager.numSlices", 1) + return max(int(n), 1) + + +def page_timestamps_for_session(tiff_paths: list, virmen_file): + """ + One NWB-timeline timestamp per TIFF page for ``tiff_paths``. Runs the I2C content-based sync (``u19_pipeline.utils.imaging_behavior_sync``) and then applies the block-vs-session shift, because the two clocks do not @@ -276,15 +316,11 @@ def imaging_timestamps_for_session( ``docs/imaging_behavior_sync.md`` section 6. Args: - tiff_paths: Split TIFFs in acquisition order. + tiff_paths: The TIFFs of one field of view, in acquisition order. virmen_file: The session's ViRMEn behavior .mat file. - n_samples: How many timestamps the imaging interface expects. A - volumetric fastZ file reports one sample per *volume*, not per page, - so the per-frame array is strided down to match. ``None`` returns - the full per-frame array. Returns: - ``(timestamps, diagnostics)`` — diagnostics carries the fit slope, + ``(page_timestamps, diagnostics)`` -- diagnostics carries the fit slope, residual and the applied offset, for logging and validation. """ import numpy as np # noqa: PLC0415 @@ -315,30 +351,17 @@ def _to_datetime(datevec): epoch_offset = (block_start - session_start).total_seconds() timestamps = timestamps + epoch_offset - n_frames = int(np.size(timestamps)) - if n_samples is not None and n_samples != n_frames: - if n_samples <= 0 or n_frames % n_samples: - raise ValueError( - f"Cannot map {n_frames} imaging frame timestamps onto {n_samples} " - f"interface samples: {n_frames} is not a whole multiple of {n_samples}. " - f"Expected a volumetric fastZ stack (frames = volumes x slices)." - ) - stride = n_frames // n_samples - timestamps = timestamps[::stride][:n_samples] - diagnostics = { "slope": float(slope), "fit_offset": float(offset), "residual_std_s": float(residual), "epoch_offset_s": float(epoch_offset), - "n_frames": n_frames, - "n_samples": int(np.size(timestamps)), + "n_pages": int(np.size(timestamps)), } log.info( - " imaging sync: %d frames -> %d samples, clock slope %.9f, " - "residual %.1f ms, block-vs-session offset %+.1f ms", - n_frames, - diagnostics["n_samples"], + " imaging sync: %d pages, clock slope %.9f, residual %.1f ms, " + "block-vs-session offset %+.1f ms", + diagnostics["n_pages"], slope, residual * 1000, epoch_offset * 1000, @@ -346,6 +369,63 @@ def _to_datetime(datevec): return timestamps, diagnostics +def plane_timestamps(page_timestamps, plane_index: int, n_planes: int): + """ + Timestamps for one fastZ plane: every ``n_planes``-th page from + ``plane_index``, over complete volumes only. + + ScanImage writes page p to plane ``p % n_planes``. neuroconv's per-plane + reader (``ScanImageImagingInterface(plane_index=k)``) keeps only complete + volumes, so a recording that stops partway through its last volume gives + every plane ``n_pages // n_planes`` samples; this matches that count. Each + plane keeps its own page times rather than sharing one time per volume -- + within a 5-plane volume at 50 Hz the planes span 80 ms. + """ + import numpy as np # noqa: PLC0415 + + if n_planes < 1: + raise ValueError(f"n_planes must be at least 1, got {n_planes}.") + if not 0 <= plane_index < n_planes: + raise ValueError( + f"plane_index {plane_index} is out of range for {n_planes} plane(s)." + ) + page_timestamps = np.asarray(page_timestamps) + n_volumes = page_timestamps.size // n_planes + if n_volumes == 0: + raise ValueError( + f"{page_timestamps.size} page(s) do not make up one complete volume " + f"of {n_planes} plane(s)." + ) + return page_timestamps[plane_index::n_planes][:n_volumes] + + +def imaging_aligned_timestamps(source_data: dict, virmen_file) -> dict: + """ + Per-interface NWB-timeline timestamps for every ScanImage interface in + ``source_data``. + + The I2C sync runs once per field of view -- all its planes share the same + files and page clock -- and each plane then takes its own pages + (:func:`plane_timestamps`). Returns ``{interface_name: timestamps}``, ready + for ``TowersNWBConverter(aligned_timestamps=...)``. + """ + aligned: dict = {} + by_files: dict = {} + for name in source_data: + if name.startswith("ScanImageImaging"): + files = tuple(source_data[name]["file_paths"]) + by_files.setdefault(files, []).append(name) + for files, names in by_files.items(): + page_ts, diagnostics = page_timestamps_for_session(list(files), virmen_file) + n_planes = scanimage_plane_count(files[0]) + log.info(f" {names} sync diagnostics: {diagnostics}") + for name in names: + aligned[name] = plane_timestamps( + page_ts, source_data[name].get("plane_index", 0), n_planes + ) + return aligned + + def build_source_data( job: dict, export_params: dict, @@ -403,14 +483,13 @@ def build_source_data( if export_params.get("include_imaging"): explicit = export_params.get("tiff_paths") if explicit: - # Manual override: one interface over exactly the files given. - source_data["ScanImageImaging"] = {"file_paths": [str(p) for p in explicit]} - log.info(f" ScanImageImaging: {len(explicit)} tiff file(s)") + # Manual override: exactly the files given, as field of view 0. + by_fov = {0: [str(p) for p in explicit]} else: fov_numbers = export_params.get("fov_numbers") or [] recording_ids = export_params.get("recording_ids") or [] if recording_ids: - by_fov: dict = {} + by_fov = {} for rid in recording_ids: for fov, paths in resolve_imaging_paths_by_fov( {"recording_id": rid}, fov_numbers @@ -424,18 +503,29 @@ def build_source_data( } by_fov = resolve_imaging_paths_by_fov(session_key, fov_numbers) - # One interface per field of view. Fields of view are separate - # regions, so merging them would both misrepresent the anatomy and - # break alignment for every FOV after the first. - for fov in sorted(by_fov): - source_data[f"ScanImageImagingFOV{fov}"] = {"file_paths": by_fov[fov]} - log.info(f" ScanImageImagingFOV{fov}: {len(by_fov[fov])} tiff file(s)") - - if not by_fov: - log.warning( - "include_imaging=True but no TIFF files resolved; " - "imaging data will not be included." - ) + # One interface per field of view and plane. Fields of view are separate + # regions and fastZ planes separate depths; each is its own + # TwoPhotonSeries with its own page times. Every interface gets a unique + # metadata_key -- sharing neuroconv's default made the second series + # collide with the first. + for fov in sorted(by_fov): + paths = by_fov[fov] + n_planes = scanimage_plane_count(paths[0]) + for k in range(n_planes): + entry = {"file_paths": paths, "metadata_key": f"fov{fov}_plane{k}"} + if n_planes > 1: + entry["plane_index"] = k + source_data[f"ScanImageImagingFOV{fov}Plane{k}"] = entry + log.info( + f" ScanImageImagingFOV{fov}: {len(paths)} tiff file(s), " + f"{n_planes} plane(s)" + ) + + if not by_fov: + log.warning( + "include_imaging=True but no TIFF files resolved; " + "imaging data will not be included." + ) return source_data @@ -545,31 +635,7 @@ def run_conversion_to_file( metadata = query_metadata(session_key) - # Imaging gets its own timestamp array rather than the shared behavior one: - # the interface reports one sample per volume for a fastZ stack, so a single - # array cannot describe both streams. Build the converter once without - # alignment to ask the interface how many samples it actually has, then - # again with an array cut to fit. - aligned_timestamps: dict = {} - imaging_interfaces = [k for k in source_data if k.startswith("ScanImageImaging")] - if imaging_interfaces: - import numpy as np # noqa: PLC0415 - - # Build once without alignment purely to ask each interface how many - # samples it reports: a volumetric fastZ stack exposes volumes, not - # pages, and the count differs per field of view. - probe = TowersNWBConverter(source_data=source_data) - for name in imaging_interfaces: - n_samples = int( - np.size(probe.data_interface_objects[name].get_original_timestamps()) - ) - imaging_ts, diagnostics = imaging_timestamps_for_session( - source_data[name]["file_paths"], - virmen_file, - n_samples=n_samples, - ) - aligned_timestamps[name] = imaging_ts - log.info(f" {name} sync diagnostics: {diagnostics}") + aligned_timestamps = imaging_aligned_timestamps(source_data, virmen_file) converter = TowersNWBConverter( source_data=source_data, From c68d98cd105b680537887b44f414387a7ce6b3b8 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 08:45:47 -0400 Subject: [PATCH 26/30] docs: describe the per-plane imaging layout Replaces the volumetric [::5] subsetting description with the per-plane series, naming and complete-volume rule, refreshes the stale wiring snapshot in nwb_export.md, and points the historical smoke-test and handoff notes at it. Assisted-by: ClaudeCode:claude-opus-5-5 --- docs/HANDOFF_nwb_imaging_export.md | 3 +- docs/imaging_behavior_sync.md | 4 +- docs/nwb_export.md | 66 +++++++++++++++++------------- 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/docs/HANDOFF_nwb_imaging_export.md b/docs/HANDOFF_nwb_imaging_export.md index 2c1916b5..3a52627a 100644 --- a/docs/HANDOFF_nwb_imaging_export.md +++ b/docs/HANDOFF_nwb_imaging_export.md @@ -108,7 +108,8 @@ this personally (it's the decision point). ScanImage entry for the sample TIFF; compute timestamps with `sync_imaging_behavior` + `frame_times_on_behavior_clock`; remember the file is volumetric — the interface exposes 400 volumes, so pass - `timestamps[::5][:400]`. + `timestamps[::5][:400]`. (Superseded: the export now writes one series per + plane; see `docs/nwb_export.md` §3.) 3. Run the conversion (stub-sized write is fine). **Pass:** NWB file has VirmenData behavior + TwoPhotonSeries, trial 1 diff --git a/docs/imaging_behavior_sync.md b/docs/imaging_behavior_sync.md index b0bb2f3a..2da3b379 100644 --- a/docs/imaging_behavior_sync.md +++ b/docs/imaging_behavior_sync.md @@ -296,7 +296,9 @@ The recipe above was executed for real against the sample data (neuroconv 0.10.0): `ScanImageImagingInterface` opened the 620 MB BigTIFF and, because of the 5-slice fastZ stack, exposed it as a **volumetric** series of **400 volumes** (2000 pages / 5 slices), with `get_original_timestamps()` returning -400 volume timestamps. Aligning with `set_aligned_timestamps(ts[::5][:400])` +400 volume timestamps. (This smoke test predates the per-plane export; see +`docs/nwb_export.md` §3 for the current layout.) Aligning with +`set_aligned_timestamps(ts[::5][:400])` (one behavior-clock timestamp per volume, from `frame_times_on_behavior_clock`) and building the file produced: diff --git a/docs/nwb_export.md b/docs/nwb_export.md index 31fa9f86..0152ad7d 100644 --- a/docs/nwb_export.md +++ b/docs/nwb_export.md @@ -170,27 +170,22 @@ you read this: `imaging_element.Scan`/`FieldOfView` references an earlier version had. - `estimate_total_size`'s imaging branch (`nwb_production_utils.py:222-236`) correctly resolves `recording_ids_for_session` and calls the estimator. -- **But** `NwbExportHandler.process_data_validation`'s imaging branch - (`nwb_export_handler.py:247-255`) still unconditionally raises - `"could not resolve imaging Scan ... imaging export not yet wired"` — it - does not call `validate_imaging_data_exists` at all yet. Any imaging job - fails DATA_VALIDATION today regardless of whether the data actually - exists. -- `conversion.py`'s `build_source_data` (`:112-165`) has no imaging branch — - only `VirmenData` and per-probe `Kilosort*` entries — and - `resolve_input_paths` has no notion of a TIFF/FOV path. -- `towersnwbconverter.py` on `tank-lab-to-nwb`'s - `feat/scanimage-per-interface-alignment` branch (the branch with the most - recent imaging-related work as of this read) still maps `"TiffImagaging"` - to the generic `TiffImagingInterface`, not `ScanImageImagingInterface`, and - `temporally_align_data_interfaces` still applies one `sync_timestamps` - array to every interface rather than a per-interface array. - -In other words: the validation/estimation half of imaging wiring (step 2/3 -above) is done; the path-resolution, source-data, and converter-registration -halves (steps 4/5/6) were not yet landed on this branch as of this read. If -you're picking this up, check `git log` / the other in-flight branches before -assuming either state — this section describes a snapshot, not a guarantee. +- `NwbExportHandler.process_data_validation`'s imaging branch resolves the + session's recordings and calls `validate_imaging_data_exists` for each. +- `conversion.py` resolves TIFFs per field of view + (`resolve_imaging_paths_by_fov`) and `build_source_data` emits one + `ScanImageImagingFOV{f}Plane{k}` interface per field of view and plane, each + with a unique `metadata_key`. `imaging_aligned_timestamps` computes each + one's timestamps, passed to the converter as `aligned_timestamps`. +- `tank-lab-to-nwb` (`feat/scanimage-per-interface-alignment`) registers + `ScanImageImaging*` keys dynamically, aligns per interface, and names each + interface's objects `TwoPhotonSeries{suffix}` / `ImagingPlane{suffix}` from + its key. + +Not yet covered: multi-ROI mesoscope sessions (the legacy per-ROI split TIFFs +lack ScanImage metadata and have clipped pixel values, and neuroconv cannot +read the raw multi-ROI stack), and Suite2p output (`imaging-processed`). See +`docs/imaging_behavior_sync.md` and the Suite2p design report tracked on #111. ## 3. Imaging specifics @@ -209,14 +204,27 @@ In brief: imaging data arrives as ScanImage BigTIFFs, read by `TwoPhotonSeries`. Per-frame timestamps on the behavior clock come from `u19_pipeline/utils/imaging_behavior_sync.py` (`sync_imaging_behavior` + `frame_times_on_behavior_clock`), not from the -TIFF's own clock (see §4 below for why). One subtlety worth restating because -it's easy to get backwards: a volumetric (fastZ) acquisition has more TIFF -*pages* than the interface exposes as *volumes* — the sample session's -5-slice fastZ file has 2000 pages but `ScanImageImagingInterface` reports 400 -volumes, so the per-frame timestamp array must be subset `[::5][:n_volumes]` -(one timestamp per volume, taking every 5th frame time) before being handed -to `set_aligned_timestamps`. Passing all 2000 per-frame timestamps to a -400-volume series is a length mismatch that neuroconv will reject. +TIFF's own clock (see §4 below for why). + +**One series per plane.** A fastZ acquisition interleaves its planes page by +page: page p belongs to plane `p % n_planes`. The export writes each plane as +its own `TwoPhotonSeries` (`ScanImageImagingInterface(plane_index=k)`), named +`TwoPhotonSeriesFOV{f}Plane{k}` on `ImagingPlaneFOV{f}Plane{k}`, and gives it +its own page times: `plane_timestamps(page_ts, k, n_planes)`, i.e. +`page_ts[k::n_planes]` over complete volumes. Two details matter: + +- **Recordings rarely end on a volume boundary.** The sample session has 89,508 + pages = 5 x 17,901 + 3. neuroconv's per-plane reader keeps complete volumes + only, and so does `plane_timestamps`, giving 17,901 samples per plane. An + earlier version subset one volumetric series with `[::5]` and required an + exact multiple, which raised `ValueError` on the full session. +- **Planes within a volume are not simultaneous.** At 50.2 Hz the five planes + of one volume span 80 ms; per-plane series keep that, where one timestamp + per volume could not. + +The plane count comes from the TIFF header (`scanimage_plane_count`, using +`SI.hStackManager.actualNumSlices`), and only single-channel, fast-stack files +are accepted. ## 4. The clock convention From 2e836dfcb652d410935ebe014380d0146f6594fd Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 09:58:06 -0400 Subject: [PATCH 27/30] test: trim exported imaging to the recorded behavior Frames recorded before behavior starts or after it ends cannot be tied to any part of the experiment. These tests define the window as the first through last page whose I2C packet maps to a trial present in the behavior log: inter-trial intervals and packet-less stalls inside it are kept, while leading and trailing frames, and packets for an aborted trial missing from the log, fall outside. Each plane keeps the samples whose pages fall in that window; a plane left with none raises. Assisted-by: ClaudeCode:claude-opus-5-5 --- .../test_imaging_nwb_integration.py | 35 ++++++++++++ .../test_imaging_plane_timestamps.py | 44 +++++++++++++- tests/utils/test_imaging_behavior_sync.py | 57 ++++++++++++++++++- 3 files changed, 134 insertions(+), 2 deletions(-) diff --git a/tests/nwb_export/test_imaging_nwb_integration.py b/tests/nwb_export/test_imaging_nwb_integration.py index bcd02f04..fe9d87f7 100644 --- a/tests/nwb_export/test_imaging_nwb_integration.py +++ b/tests/nwb_export/test_imaging_nwb_integration.py @@ -83,3 +83,38 @@ def test_two_fovs_and_planes_build_with_unique_names(): assert expected <= set(nwb.acquisition) planes = {s.imaging_plane.name for s in nwb.acquisition.values() if s.name in expected} assert planes == {f"ImagingPlaneFOV{f}Plane{k}" for f in (0, 1) for k in range(5)} + + +def _full_session(): + files = sorted(DATA.glob("ef932_act131_08072026_00001_*.tif")) + if len(files) != 45: + pytest.skip("full 45-file sample session not present") + return [str(f) for f in files] + + +def test_export_is_trimmed_to_the_behavior_window(): + """Frames before behavior starts or after it ends are left out.""" + from u19_pipeline.nwb_export.conversion import build_source_data, imaging_alignment + + files = _full_session() + job = {"subject_fullname": "s", "session_date": "2026-08-07", "session_number": 1} + sd = build_source_data(job, {"include_imaging": True, "tiff_paths": files}, BEHAVIOR, None) + aligned, ranges = imaging_alignment(sd, BEHAVIOR) + full, full_ranges = imaging_alignment(sd, BEHAVIOR, trim_to_behavior=False) + + from u19_pipeline.utils.imaging_behavior_sync import _as_list, load_behavior_log + + trials = _as_list(_as_list(load_behavior_log(BEHAVIOR).block)[0].trial) + for name, ts in aligned.items(): + start, stop = ranges[name] + assert ts.size == stop - start < full[name].size == 17_901 + np.testing.assert_array_equal(ts, full[name][start:stop]) + # nothing earlier than one volume before trial 1's first iteration + assert ts[0] >= trials[0].start + 0.027 - 0.1 + assert full_ranges[name] == (0, 17_901) + + conv = _converter(sd, aligned_timestamps=aligned, sample_ranges=ranges) + conv.temporally_align_data_interfaces() + for name, ts in aligned.items(): + got = conv.data_interface_objects[name].get_timestamps() + np.testing.assert_array_equal(got, ts) diff --git a/tests/nwb_export/test_imaging_plane_timestamps.py b/tests/nwb_export/test_imaging_plane_timestamps.py index 281f3ead..28cc63fc 100644 --- a/tests/nwb_export/test_imaging_plane_timestamps.py +++ b/tests/nwb_export/test_imaging_plane_timestamps.py @@ -13,7 +13,7 @@ import numpy as np import pytest -from u19_pipeline.nwb_export.conversion import plane_timestamps +from u19_pipeline.nwb_export.conversion import plane_sample_range, plane_timestamps @pytest.mark.no_db @@ -65,3 +65,45 @@ def test_no_complete_volume_raises(self): def test_empty_input_raises(self): with pytest.raises(ValueError, match="complete volume"): plane_timestamps(np.array([]), plane_index=0, n_planes=1) + + +@pytest.mark.no_db +class TestPlaneSampleRange: + """ + Samples of plane k whose page (k + i * n_planes) lies inside the behavior + window [first_page, last_page], as a half-open (start, stop) range over + that plane's complete-volume samples. + """ + + def test_window_covering_everything(self): + assert plane_sample_range(0, 99, plane_index=2, n_planes=5, n_volumes=20) == (0, 20) + + def test_leading_trim_depends_on_plane(self): + # pages: plane 0 -> 0,5,10,15.. plane 2 -> 2,7,12,17.. + assert plane_sample_range(12, 99, 0, 5, 20) == (3, 20) + assert plane_sample_range(12, 99, 2, 5, 20) == (2, 20) + + def test_trailing_trim_depends_on_plane(self): + # plane 4 -> 4,9,14 ; plane 3 -> 3,8,13 + assert plane_sample_range(0, 13, 4, 5, 20) == (0, 2) + assert plane_sample_range(0, 13, 3, 5, 20) == (0, 3) + + def test_capped_at_complete_volumes(self): + # 13 pages, 5 planes -> 2 complete volumes even though page 12 is in range + assert plane_sample_range(0, 12, 2, 5, 2) == (0, 2) + + def test_single_plane(self): + assert plane_sample_range(7, 30, 0, 1, 50) == (7, 31) + + def test_window_on_the_plane_boundary(self): + assert plane_sample_range(5, 9, 0, 5, 20) == (1, 2) + assert plane_sample_range(5, 9, 4, 5, 20) == (1, 2) + + def test_plane_with_no_sample_in_window_raises(self): + # window is pages 6..8: planes 1,2,3 of volume 1 only + with pytest.raises(ValueError, match="no samples"): + plane_sample_range(6, 8, 0, 5, 20) + + def test_inverted_window_raises(self): + with pytest.raises(ValueError, match="window"): + plane_sample_range(10, 5, 0, 1, 20) diff --git a/tests/utils/test_imaging_behavior_sync.py b/tests/utils/test_imaging_behavior_sync.py index 5db07c17..31c1abe9 100644 --- a/tests/utils/test_imaging_behavior_sync.py +++ b/tests/utils/test_imaging_behavior_sync.py @@ -17,7 +17,10 @@ import numpy as np import pytest -from u19_pipeline.utils.imaging_behavior_sync import frame_times_on_behavior_clock +from u19_pipeline.utils.imaging_behavior_sync import ( + behavior_page_window, + frame_times_on_behavior_clock, +) TRUE_SLOPE = 1.000005 # +5 ppm, the drift measured on the sample session TRUE_OFFSET = -11.03 # imaging started ~11 s before behavior @@ -31,6 +34,7 @@ def _session( late_packets=(), lead_frames=0, n_blocks=1, + trail_frames=0, ): """ Synthetic sync dict + behavior log with one imaging frame per iteration. @@ -71,6 +75,15 @@ def _session( t_behav += times[-1] + iti trial_global += 1 + # Imaging frames after behavior ended: no packet. + last = frame_time[-1] + for k in range(1, trail_frames + 1): + frame_time.append(last + k * dt) + sync_time.append(np.nan) + blk.append(0) + tri.append(0) + itr.append(0) + f = SimpleNamespace( frame_time=np.asarray(frame_time), sync_time=np.asarray(sync_time), @@ -206,3 +219,45 @@ def test_three_points_with_one_outlier_does_not_crash(self): ts, slope, offset, residual = frame_times_on_behavior_clock(sync, log) assert np.all(np.isfinite(ts)) assert np.isfinite(slope) and np.isfinite(offset) and np.isfinite(residual) + + +class TestBehaviorPageWindow: + """Frames outside the recorded behavior cannot be tied to the experiment, + so the export keeps only first..last page whose packet maps to a trial in + the behavior log (inter-trial intervals included).""" + + def test_leading_and_trailing_frames_are_outside(self): + sync, log = _session(lead_frames=50, trail_frames=30) + n = sync["files"][0].frame_time.size + assert behavior_page_window(sync, log) == (50, n - 31) + + def test_no_padding_means_every_page(self): + sync, log = _session() + n = sync["files"][0].frame_time.size + assert behavior_page_window(sync, log) == (0, n - 1) + + def test_packets_for_trials_missing_from_the_log_are_outside(self): + """An aborted final trial is stamped in the TIFF but absent from the log.""" + sync, log = _session() + n = sync["files"][0].frame_time.size + sync["sync_behav_trial_by_im_frame"][-40:] = 99 + assert behavior_page_window(sync, log) == (0, n - 41) + + def test_iterations_past_the_trial_end_are_outside(self): + sync, log = _session() + n = sync["files"][0].frame_time.size + sync["sync_behav_iter_by_im_frame"][-1] = 10_000 + assert behavior_page_window(sync, log)[1] == n - 2 + + def test_packetless_gaps_inside_the_window_are_kept(self): + """End-of-trial stalls leave frames without packets mid-session.""" + sync, log = _session() + sync["files"][0].sync_time[100:120] = np.nan + n = sync["files"][0].frame_time.size + assert behavior_page_window(sync, log) == (0, n - 1) + + def test_no_behavior_at_all_raises(self): + sync, log = _session() + sync["files"][0].sync_time[:] = np.nan + with pytest.raises(ValueError, match="behavior"): + behavior_page_window(sync, log) From 608b24652488758f07de8cbf4dcfc1419980d986 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 10:03:40 -0400 Subject: [PATCH 28/30] test: find the behavior window by time, not by packet arrival A trial's first packet is sent after trial setup, a median 9 ms late and 23 ms for trial 1 of the sample session, so bounding the window by the first page that received a packet dropped the frames in which behavior actually began. The window is now defined as the pages containing the first and last logged iterations on the fitted clock. Adds a late-first-packet regression, a check that the full session's kept frames start at most one frame before trial 1's first iteration, and an NWB build with trimming on (which failed: the sliced extractor lacked attributes the ScanImage interface reads). Assisted-by: ClaudeCode:claude-opus-5-5 --- .../test_imaging_nwb_integration.py | 20 +++++++- tests/utils/test_imaging_behavior_sync.py | 50 +++++++++++++------ 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/tests/nwb_export/test_imaging_nwb_integration.py b/tests/nwb_export/test_imaging_nwb_integration.py index fe9d87f7..33aa28f6 100644 --- a/tests/nwb_export/test_imaging_nwb_integration.py +++ b/tests/nwb_export/test_imaging_nwb_integration.py @@ -109,12 +109,28 @@ def test_export_is_trimmed_to_the_behavior_window(): start, stop = ranges[name] assert ts.size == stop - start < full[name].size == 17_901 np.testing.assert_array_equal(ts, full[name][start:stop]) - # nothing earlier than one volume before trial 1's first iteration - assert ts[0] >= trials[0].start + 0.027 - 0.1 assert full_ranges[name] == (0, 17_901) + # The earliest kept page is the one trial 1's first iteration falls in: it + # starts at most one frame (19.92 ms) before that iteration, not after it. + offset = 0.027 # block-vs-session offset of this session + t_first = trials[0].start + offset + t_last = trials[-1].start + np.atleast_1d(trials[-1].time)[-1] + offset + first = min(ts[0] for ts in aligned.values()) + last = max(ts[-1] for ts in aligned.values()) + assert t_first - 0.0200 < first <= t_first + assert t_last - 0.0200 < last <= t_last + conv = _converter(sd, aligned_timestamps=aligned, sample_ranges=ranges) conv.temporally_align_data_interfaces() for name, ts in aligned.items(): got = conv.data_interface_objects[name].get_timestamps() np.testing.assert_array_equal(got, ts) + + # Regression: the sliced extractor lacked attributes the ScanImage + # interface reads, so building the file failed. + nwb = conv.create_nwbfile( + metadata=conv.get_metadata(), + conversion_options={k: {"stub_test": True} for k in aligned}, + ) + assert {f"TwoPhotonSeriesFOV0Plane{k}" for k in range(5)} <= set(nwb.acquisition) diff --git a/tests/utils/test_imaging_behavior_sync.py b/tests/utils/test_imaging_behavior_sync.py index 31c1abe9..511dc964 100644 --- a/tests/utils/test_imaging_behavior_sync.py +++ b/tests/utils/test_imaging_behavior_sync.py @@ -222,9 +222,22 @@ def test_three_points_with_one_outlier_does_not_crash(self): class TestBehaviorPageWindow: - """Frames outside the recorded behavior cannot be tied to the experiment, - so the export keeps only first..last page whose packet maps to a trial in - the behavior log (inter-trial intervals included).""" + """ + Frames outside the recorded behavior cannot be tied to the experiment, so + the export keeps only the pages from the one containing the first logged + iteration to the one containing the last. The window is found by time on + the fitted clock, not by where packets landed: the first packet of a trial + is routinely late (trial setup runs between stamping the time and sending + it), which would otherwise push the start a frame or two too late. + """ + + @staticmethod + def _drop_leading(sync, n): + f = sync["files"][0] + f.frame_time, f.sync_time = f.frame_time[n:], f.sync_time[n:] + for k in ("block", "trial", "iter"): + key = f"sync_behav_{k}_by_im_frame" + sync[key] = sync[key][n:] def test_leading_and_trailing_frames_are_outside(self): sync, log = _session(lead_frames=50, trail_frames=30) @@ -236,18 +249,22 @@ def test_no_padding_means_every_page(self): n = sync["files"][0].frame_time.size assert behavior_page_window(sync, log) == (0, n - 1) + def test_late_first_packet_does_not_move_the_start(self): + """Regression: the window started where trial 1's late packet landed.""" + sync, log = _session(lead_frames=50) + sync["files"][0].sync_time[50:52] = np.nan # first packet two frames late + assert behavior_page_window(sync, log)[0] == 50 + def test_packets_for_trials_missing_from_the_log_are_outside(self): """An aborted final trial is stamped in the TIFF but absent from the log.""" - sync, log = _session() + sync, log = _session(trail_frames=30) n = sync["files"][0].frame_time.size - sync["sync_behav_trial_by_im_frame"][-40:] = 99 - assert behavior_page_window(sync, log) == (0, n - 41) - - def test_iterations_past_the_trial_end_are_outside(self): - sync, log = _session() - n = sync["files"][0].frame_time.size - sync["sync_behav_iter_by_im_frame"][-1] = 10_000 - assert behavior_page_window(sync, log)[1] == n - 2 + f = sync["files"][0] + f.sync_time[-30:] = f.frame_time[-30:] + sync["sync_behav_block_by_im_frame"][-30:] = 1 + sync["sync_behav_trial_by_im_frame"][-30:] = 99 + sync["sync_behav_iter_by_im_frame"][-30:] = np.arange(1, 31) + assert behavior_page_window(sync, log) == (0, n - 31) def test_packetless_gaps_inside_the_window_are_kept(self): """End-of-trial stalls leave frames without packets mid-session.""" @@ -256,8 +273,13 @@ def test_packetless_gaps_inside_the_window_are_kept(self): n = sync["files"][0].frame_time.size assert behavior_page_window(sync, log) == (0, n - 1) - def test_no_behavior_at_all_raises(self): + def test_imaging_starting_after_behavior_starts_at_page_zero(self): + sync, log = _session() + self._drop_leading(sync, 10) + assert behavior_page_window(sync, log)[0] == 0 + + def test_no_synchronized_frames_raises(self): sync, log = _session() sync["files"][0].sync_time[:] = np.nan - with pytest.raises(ValueError, match="behavior"): + with pytest.raises(ValueError, match="synchroniz"): behavior_page_window(sync, log) From 6372d7371380479d55816c337bf3dbc72a28bc94 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 10:06:25 -0400 Subject: [PATCH 29/30] feat: export only imaging recorded during behavior Frames recorded before the first trial or after the last cannot be tied to any part of the experiment. On the sample session that is 12.8 s before behavior and 43.4 s after, including all of the last file. imaging_alignment now returns, per interface, the sample range from the frame in which the first logged iteration falls through the frame in which the last one falls, with timestamps cut to match; run_conversion_to_file passes both to the converter. export_parameters['trim_imaging_to_behavior'] = False keeps every frame. The window is found by time on the fitted clock (behavior_page_window), not by packet arrival: a trial's first packet is sent after trial setup and lands a median 9 ms late (23 ms for trial 1), which would have dropped the frames in which behavior began. Pages are matched with a 1 us tolerance so an iteration exactly on a page start stays in that page despite fit round-off. behavior_times_by_page now holds the page-to-trial lookup shared with the clock fit, and skips block or trial numbers beyond the log rather than indexing past them. Assisted-by: ClaudeCode:claude-opus-5-5 --- u19_pipeline/nwb_export/conversion.py | 70 ++++++++++++++++--- u19_pipeline/utils/imaging_behavior_sync.py | 76 +++++++++++++++++---- 2 files changed, 122 insertions(+), 24 deletions(-) diff --git a/u19_pipeline/nwb_export/conversion.py b/u19_pipeline/nwb_export/conversion.py index cd4366ef..133ee7b2 100644 --- a/u19_pipeline/nwb_export/conversion.py +++ b/u19_pipeline/nwb_export/conversion.py @@ -321,12 +321,14 @@ def page_timestamps_for_session(tiff_paths: list, virmen_file): Returns: ``(page_timestamps, diagnostics)`` -- diagnostics carries the fit slope, - residual and the applied offset, for logging and validation. + residual and the applied offset, and ``behavior_pages``: the first and + last page (0-based, inclusive) recorded during behavior. """ import numpy as np # noqa: PLC0415 from u19_pipeline.utils.imaging_behavior_sync import ( # noqa: PLC0415 _as_list, + behavior_page_window, frame_times_on_behavior_clock, load_behavior_log, sync_imaging_behavior, @@ -357,6 +359,7 @@ def _to_datetime(datevec): "residual_std_s": float(residual), "epoch_offset_s": float(epoch_offset), "n_pages": int(np.size(timestamps)), + "behavior_pages": behavior_page_window(sync, log_struct), } log.info( " imaging sync: %d pages, clock slope %.9f, residual %.1f ms, " @@ -399,17 +402,49 @@ def plane_timestamps(page_timestamps, plane_index: int, n_planes: int): return page_timestamps[plane_index::n_planes][:n_volumes] -def imaging_aligned_timestamps(source_data: dict, virmen_file) -> dict: +def plane_sample_range( + first_page: int, last_page: int, plane_index: int, n_planes: int, n_volumes: int +) -> tuple: """ - Per-interface NWB-timeline timestamps for every ScanImage interface in + Half-open ``(start, stop)`` range of one plane's samples whose pages fall + inside ``[first_page, last_page]``. + + Plane k's sample i is page ``k + i * n_planes``. The range is also capped at + ``n_volumes`` (complete volumes, as in :func:`plane_timestamps`). Raises if + the plane has no sample in the window. + """ + if last_page < first_page: + raise ValueError(f"Empty page window: {first_page}..{last_page}.") + start = max(0, -(-(first_page - plane_index) // n_planes)) # ceil division + stop = min(n_volumes, (last_page - plane_index) // n_planes + 1) + if stop <= start: + raise ValueError( + f"Plane {plane_index} has no samples in pages {first_page}..{last_page}." + ) + return start, stop + + +def imaging_alignment( + source_data: dict, virmen_file, trim_to_behavior: bool = True +) -> tuple: + """ + Timestamps and sample ranges for every ScanImage interface in ``source_data``. The I2C sync runs once per field of view -- all its planes share the same files and page clock -- and each plane then takes its own pages - (:func:`plane_timestamps`). Returns ``{interface_name: timestamps}``, ready - for ``TowersNWBConverter(aligned_timestamps=...)``. + (:func:`plane_timestamps`). With ``trim_to_behavior`` (the default) each + plane keeps only the samples recorded between the first and last page tied + to a trial in the behavior log; frames before behavior starts or after it + ends cannot be related to the experiment. Pass False to keep every frame, + e.g. to use pre-behavior imaging as a fluorescence baseline. + + Returns ``(aligned_timestamps, sample_ranges)``, both keyed by interface + name, for ``TowersNWBConverter(aligned_timestamps=..., sample_ranges=...)``. + Each timestamp array already covers exactly its ``(start, stop)`` range. """ aligned: dict = {} + ranges: dict = {} by_files: dict = {} for name in source_data: if name.startswith("ScanImageImaging"): @@ -418,12 +453,22 @@ def imaging_aligned_timestamps(source_data: dict, virmen_file) -> dict: for files, names in by_files.items(): page_ts, diagnostics = page_timestamps_for_session(list(files), virmen_file) n_planes = scanimage_plane_count(files[0]) - log.info(f" {names} sync diagnostics: {diagnostics}") + n_volumes = page_ts.size // n_planes + first_page, last_page = ( + diagnostics["behavior_pages"] if trim_to_behavior else (0, page_ts.size - 1) + ) + log.info( + f" {names} sync diagnostics: {diagnostics}; exporting pages " + f"{first_page}..{last_page} of {page_ts.size}" + ) for name in names: - aligned[name] = plane_timestamps( - page_ts, source_data[name].get("plane_index", 0), n_planes + k = source_data[name].get("plane_index", 0) + start, stop = plane_sample_range( + first_page, last_page, k, n_planes, n_volumes ) - return aligned + aligned[name] = plane_timestamps(page_ts, k, n_planes)[start:stop] + ranges[name] = (start, stop) + return aligned, ranges def build_source_data( @@ -635,12 +680,17 @@ def run_conversion_to_file( metadata = query_metadata(session_key) - aligned_timestamps = imaging_aligned_timestamps(source_data, virmen_file) + aligned_timestamps, sample_ranges = imaging_alignment( + source_data, + virmen_file, + trim_to_behavior=export_params.get("trim_imaging_to_behavior", True), + ) converter = TowersNWBConverter( source_data=source_data, sync_timestamps=metadata["sync_timestamps"], aligned_timestamps=aligned_timestamps or None, + sample_ranges=sample_ranges or None, ) raw_metadata = converter.get_metadata() diff --git a/u19_pipeline/utils/imaging_behavior_sync.py b/u19_pipeline/utils/imaging_behavior_sync.py index a573cdc7..06e8f4f8 100644 --- a/u19_pipeline/utils/imaging_behavior_sync.py +++ b/u19_pipeline/utils/imaging_behavior_sync.py @@ -404,6 +404,67 @@ def sync_imaging_behavior(tif_files, log=None, min_behavior_secs=MIN_BEHAVIOR_SE } +def behavior_times_by_page(sync, log): + """Behavior-clock time of each page's I2C packet, NaN where there is none. + + A page gets a time when its packet names a (block, trial, iteration) that + exists in the behavior log: ``trial.start + trial.time[iteration - 1]``. + Pages without a packet, with zeroed indices, or naming a trial or + iteration the log does not contain (an aborted final trial) get NaN. + """ + blocks = _as_list(log.block) + sync_time = np.concatenate([f.sync_time for f in sync['files']]) + behav_t = np.full(sync_time.size, np.nan) + for i in np.flatnonzero(~np.isnan(sync_time)): + blk = int(sync['sync_behav_block_by_im_frame'][i]) + tri = int(sync['sync_behav_trial_by_im_frame'][i]) + itr = int(sync['sync_behav_iter_by_im_frame'][i]) + if blk < 1 or tri < 1 or itr < 1 or blk > len(blocks): + continue + trials = _as_list(blocks[blk - 1].trial) + if tri > len(trials): + continue + t = np.atleast_1d(trials[tri - 1].time) + if itr <= t.size: + behav_t[i] = trials[tri - 1].start + t[itr - 1] + return behav_t + + +def behavior_page_window(sync, log): + """First and last page (0-based, inclusive) recorded during behavior. + + Found by time on the fitted clock: the page in which the first logged + iteration falls, through the page in which the last one falls. Packet + arrival is not used to bound it -- a trial's first packet is sent after + trial setup and routinely arrives a frame or more late, which would drop + the frames in which behavior began. Pages outside cannot be tied to any + part of the experiment; pages inside without a packet (stalls at trial + ends) stay inside. Trials missing from the log (an aborted final trial) + are not behavior. If imaging started after behavior, the window starts at + page 0 (likewise at the end). + """ + page_t, *_ = frame_times_on_behavior_clock(sync, log) + starts, ends = [], [] + for blk in _as_list(log.block): + for trial in _as_list(blk.trial): + t = np.atleast_1d(trial.time) + if t.size and np.isfinite(trial.start): + starts.append(trial.start + t[0]) + ends.append(trial.start + t[-1]) + if not starts: + raise ValueError('The behavior log contains no iterations.') + # page p covers [page_t[p], page_t[p + 1]); the 1 us tolerance keeps an + # iteration that lands exactly on a page start (up to fit round-off) in + # that page rather than the one before + tol = 1e-6 + first = int(np.searchsorted(page_t, min(starts) + tol, side='right')) - 1 + last = int(np.searchsorted(page_t, max(ends) + tol, side='right')) - 1 + first, last = max(first, 0), min(last, page_t.size - 1) + if last < 0 or first > page_t.size - 1 or last < first: + raise ValueError('The behavior log does not overlap the imaging.') + return first, last + + def frame_times_on_behavior_clock(sync, log): """Per-frame timestamps on the ViRMEn behavior clock, for NWB alignment. @@ -416,22 +477,9 @@ def frame_times_on_behavior_clock(sync, log): Returns (timestamps, slope, offset, residual_std). """ - blocks = _as_list(log.block) frame_time = np.concatenate([f.frame_time for f in sync['files']]) sync_time = np.concatenate([f.sync_time for f in sync['files']]) - - has_sync = ~np.isnan(sync_time) - behav_t = np.full(frame_time.size, np.nan) - for i in np.flatnonzero(has_sync): - blk = sync['sync_behav_block_by_im_frame'][i] - tri = sync['sync_behav_trial_by_im_frame'][i] - itr = sync['sync_behav_iter_by_im_frame'][i] - if blk < 1 or tri < 1 or itr < 1: - continue - trial = _as_list(blocks[blk - 1].trial)[tri - 1] - t = np.atleast_1d(trial.time) - if itr <= t.size: - behav_t[i] = trial.start + t[itr - 1] + behav_t = behavior_times_by_page(sync, log) valid = ~np.isnan(behav_t) if valid.sum() < 2: From 9624e27f39935a1a73e7de60b4128449e02d56e7 Mon Sep 17 00:00:00 2001 From: Christian Tabedzki <35670232+tabedzki@users.noreply.github.com> Date: Fri, 25 Sep 2026 10:06:25 -0400 Subject: [PATCH 30/30] docs: describe trimming imaging to the behavior window Assisted-by: ClaudeCode:claude-opus-5-5 --- docs/nwb_export.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/nwb_export.md b/docs/nwb_export.md index 0152ad7d..41a2aea6 100644 --- a/docs/nwb_export.md +++ b/docs/nwb_export.md @@ -175,8 +175,9 @@ you read this: - `conversion.py` resolves TIFFs per field of view (`resolve_imaging_paths_by_fov`) and `build_source_data` emits one `ScanImageImagingFOV{f}Plane{k}` interface per field of view and plane, each - with a unique `metadata_key`. `imaging_aligned_timestamps` computes each - one's timestamps, passed to the converter as `aligned_timestamps`. + with a unique `metadata_key`. `imaging_alignment` computes each one's + timestamps and the sample range to keep, passed to the converter as + `aligned_timestamps` and `sample_ranges`. - `tank-lab-to-nwb` (`feat/scanimage-per-interface-alignment`) registers `ScanImageImaging*` keys dynamically, aligns per interface, and names each interface's objects `TwoPhotonSeries{suffix}` / `ImagingPlane{suffix}` from @@ -222,6 +223,19 @@ its own page times: `plane_timestamps(page_ts, k, n_planes)`, i.e. of one volume span 80 ms; per-plane series keep that, where one timestamp per volume could not. +**Only frames recorded during behavior are exported.** Imaging usually runs +before the first trial and after the last (on the sample session, 12.8 s +before and 43.4 s after, including all of the last file). Those frames cannot +be tied to anything in the experiment, so each plane keeps only the samples +from the frame in which the first logged iteration falls through the frame in +which the last one falls, located by time on the fitted clock +(`behavior_page_window`). The window is deliberately not bounded by packet +arrival: a trial's first packet is sent after trial setup and routinely lands a +frame late, which would drop the frames in which behavior began. The converter +cuts each interface to its range (`sample_ranges`) before writing. Set +`export_parameters["trim_imaging_to_behavior"] = False` to keep every frame, +e.g. to use pre-behavior imaging as a fluorescence baseline. + The plane count comes from the TIFF header (`scanimage_plane_count`, using `SI.hStackManager.actualNumSlices`), and only single-channel, fast-stack files are accepted.