From 8caa4f227b45008860ab07f690a0d5b044127bcb Mon Sep 17 00:00:00 2001 From: linarphy Date: Wed, 9 Apr 2025 13:44:31 +0200 Subject: [PATCH] add current code --- bad weather.ipynb | 697 +++++++++++++++++++ main.ipynb | 582 ++++++++++++++++ mise.toml | 5 + pyproject.toml | 22 + uv.lock | 1670 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 2976 insertions(+) create mode 100644 bad weather.ipynb create mode 100644 main.ipynb create mode 100644 mise.toml create mode 100644 pyproject.toml create mode 100644 uv.lock diff --git a/bad weather.ipynb b/bad weather.ipynb new file mode 100644 index 0000000..b22f362 --- /dev/null +++ b/bad weather.ipynb @@ -0,0 +1,697 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6c9023fe-f86d-428a-8072-4264ff672025", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from rich.console import Console\n", + "from rich.table import Table\n", + "\n", + "from numpy import loadtxt\n", + "\n", + "from numpy import float32, bool as np_bool\n", + "from numpy.typing import NDArray\n", + "from typing import Any\n", + "from collections.abc import Callable" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2d82f94d-b69a-4ad0-b042-08d045925545", + "metadata": {}, + "outputs": [], + "source": [ + "from numpy import mean, diff, sqrt, pi, linspace\n", + "\n", + "from backscattering_analyzer.experiment import Experiment\n", + "from backscattering_analyzer.acquisition import AcquisitionType\n", + "\n", + "from matplotlib.pyplot import figure, show\n", + "\n", + "from science_signal import Signal\n", + "from science_signal.generator import sin as sin_gen" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "62328640-6c4f-47a1-8461-9637a50f52e5", + "metadata": {}, + "outputs": [], + "source": [ + "def is_over(signal1: Signal, signal2: Signal) -> bool:\n", + " \"\"\"\n", + " True if signal1 is over signal2\n", + " \"\"\"\n", + " return not ((signal1 - signal2).y < 0).any()\n", + "\n", + "\n", + "def get_speed(signal: Signal) -> NDArray[float32]:\n", + " \"\"\"\n", + " get speed from position signal\n", + " \"\"\"\n", + " return 1 / mean(diff(signal.x)) * diff(signal.y)\n", + "\n", + "\n", + "def compute_rms(signal: NDArray[float32]) -> float:\n", + " \"\"\"\n", + " compute RMS of data\n", + " \"\"\"\n", + " return sqrt(mean(signal**2)) # pyright: ignore[reportAny]\n", + "\n", + "\n", + "def accelerate_timesignal(factor: float, signal: Signal) -> Signal:\n", + " \"\"\"\n", + " accelerate a signal by a factor\n", + " \"\"\"\n", + " return Signal(\n", + " signal.x[0] + (signal.x - signal.x[0]) * (1 / factor),\n", + " signal.y,\n", + " )\n", + "\n", + "\n", + "def generate_movement(max_speed: float, start: int, end: int) -> Signal:\n", + " \"\"\"\n", + " generate a sine movement with a given maximum speed\n", + " \"\"\"\n", + " amplitude: float = sqrt(max_speed / (2 * pi))\n", + " frequency: float = sqrt(max_speed / (2 * pi))\n", + " signal = sin_gen(end - start, 1000, frequency, amplitude)\n", + " return Signal(\n", + " start + signal.x,\n", + " signal.y,\n", + " )\n", + "\n", + "\n", + "def fit_value(\n", + " start: float,\n", + " end: float,\n", + " nb_loop: int,\n", + " experiment: Experiment,\n", + " reference: Signal,\n", + " generate: Callable[[float, Any], Signal],\n", + " condition: Callable[[Signal, Signal], np_bool | bool],\n", + " generate_args: list[Any],\n", + ") -> float:\n", + " \"\"\"\n", + " find the value that is the closest to NOT respecting the condition function\n", + " Considering it start by not respecting the condition, and after some time, it will\n", + " \"\"\"\n", + " for _ in range(nb_loop):\n", + " values = linspace(start, end, 10, dtype=float32)\n", + " detected = False\n", + " for j in range(len(values)):\n", + " value = values[j]\n", + " experiment.reference_movement = generate(value, *generate_args)\n", + " experiment.projection_reference = experiment.compute_projection(\n", + " AcquisitionType.REFERENCE\n", + " )\n", + " if (\n", + " not condition(reference, experiment.projection_reference)\n", + " and not detected\n", + " ):\n", + " detected = True\n", + " end = value\n", + " start = values[j - 1]\n", + " if not detected:\n", + " raise Exception(\"not in range\")\n", + " return start + (end - start) / 2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "587e2e3a-767b-4a6e-80df-188b6152bbb4", + "metadata": {}, + "outputs": [], + "source": [ + "console = Console()\n", + "o5_mat = (\n", + " Path(\"/home/demagny/data\")\n", + " / \"simulation\"\n", + " / \"optickle\"\n", + " / \"transfer_function\"\n", + " / \"O5.mat\"\n", + ")\n", + "sensitivities: dict[str, Signal] = dict()\n", + "for name in [\"high\", \"low\"]:\n", + " data = loadtxt(\n", + " Path(\n", + " \"/home/demagny/data/sensitivity/O5/23932_O5{}SensASD.txt\".format(\n", + " name.capitalize()\n", + " )\n", + " ),\n", + " dtype=float32,\n", + " )\n", + " sensitivities[name] = Signal(\n", + " data[:, 0],\n", + " data[:, 1],\n", + " )\n", + "sensitivities[\"high\"].y /= 10" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b7f534cc-0b50-4fc1-ba62-8a36747eb646", + "metadata": {}, + "outputs": [], + "source": [ + "C_BENCH = \"SDB1\"\n", + "C_COUPLING = \"../main_script_virgo/values-coupling.toml\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a72635ea-8395-4783-9be1-8a89e82b7e21", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "no excited signal given, cannot get factors of the excited signal\n", + "no excited signal given, cannot get factors of the excited signal\n" + ] + } + ], + "source": [ + "base_experiment = Experiment(C_BENCH, \"2024_08_15\", C_COUPLING, 0.1)\n", + "temp_experiment = Experiment(C_BENCH, \"2024_08_15\", C_COUPLING, 0.1)\n", + "base_experiment.factors = {\"pre\": 2e-10 * 1e6, \"true\": 2e-10}\n", + "temp_experiment.factors = {\"pre\": 2e-10 * 1e6, \"true\": 2e-10}\n", + "base_experiment.modelisation_file = str(o5_mat)\n", + "temp_experiment.modelisation_file = str(o5_mat)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03d6c7a8-3391-49f3-af96-c476f6ff8160", + "metadata": {}, + "outputs": [], + "source": [ + "factor = default_rng().random(1) * 10\n", + "# check if frequency is multiplied by the factor after going into accelerate_timesignal function\n", + "assert abs(factor/mean(diff(base_experiment.reference_movement.x)) - 1/mean(diff(accelerate_timesignal(factor, base_experiment.reference_movement).x))) < 1e-1, abs(factor/mean(diff(base_experiment.reference_movement.x)) - 1/mean(diff(accelerate_timesignal(factor, base_experiment.reference_movement).x)))\n", + "# check if amplitude is not modified after going into accelerate_timesignal function\n", + "assert (base_experiment.reference_movement.y == accelerate_timesignal(factor, base_experiment.reference_movement).y).all(), base_experiment.reference_movement.y - accelerate_timesignal(factor, base_experiment.reference_movement).y" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8dbb68d6-fba3-4488-b951-b5bf860152d2", + "metadata": {}, + "outputs": [], + "source": [ + "high_fitted_value = fit_value(\n", + " 1e-6,\n", + " 1e-5,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"high\"],\n", + " generate_movement,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + " ],\n", + ")\n", + "low_fitted_value = fit_value(\n", + " 1e-6,\n", + " 1e-5,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"low\"],\n", + " generate_movement,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "132a82c5-b69b-402c-b278-c565ccf6e504", + "metadata": {}, + "outputs": [], + "source": [ + "high_movement = generate_movement(\n", + " high_fitted_value,\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + ")\n", + "temp_experiment.reference_movement = high_movement\n", + "high_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)\n", + "low_movement = generate_movement(\n", + " low_fitted_value,\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + ")\n", + "temp_experiment.reference_movement = low_movement\n", + "low_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "2966a38e-9020-4cdd-a186-70519afb85de", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Figure = figure()\n", + "_ = Figure.gca().loglog(\n", + " high_projection.x, high_projection.y, label=\"projection for high\"\n", + ")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"high\"].x,\n", + " sensitivities[\"high\"].y,\n", + " label=\"one order below high sensitivity\",\n", + ")\n", + "_ = Figure.gca().loglog(low_projection.x, low_projection.y, label=\"projection for low\")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"low\"].x, sensitivities[\"low\"].y, label=\"low sensitivity\"\n", + ")\n", + "_ = Figure.gca().legend()\n", + "Figure.gca().grid(True, \"both\", \"both\")\n", + "show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "cf7aa342-1ffe-4262-80fd-e900acf590c0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
  Vérification des calculs: haute   \n",
+       "            sensibilitée            \n",
+       "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n",
+       "┃ nom      RMS       vitesse max ┃\n",
+       "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n",
+       "│ calculé │ 3.33E-06 │ 4.71E-06    │\n",
+       "│ mesuré  │ 3.04E-06 │ 4.71E-06    │\n",
+       "└─────────┴──────────┴─────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[3m Vérification des calculs: haute \u001b[0m\n", + "\u001b[3m sensibilitée \u001b[0m\n", + "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mnom \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mRMS \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mvitesse max\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n", + "│ calculé │ 3.33E-06 │ 4.71E-06 │\n", + "│ mesuré │ 3.04E-06 │ 4.71E-06 │\n", + "└─────────┴──────────┴─────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
  Vérification des calculs: basse   \n",
+       "            sensibilitée            \n",
+       "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n",
+       "┃ nom      RMS       vitesse max ┃\n",
+       "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n",
+       "│ calculé │ 3.66E-06 │ 5.18E-06    │\n",
+       "│ mesuré  │ 3.41E-06 │ 5.18E-06    │\n",
+       "└─────────┴──────────┴─────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[3m Vérification des calculs: basse \u001b[0m\n", + "\u001b[3m sensibilitée \u001b[0m\n", + "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mnom \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mRMS \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mvitesse max\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n", + "│ calculé │ 3.66E-06 │ 5.18E-06 │\n", + "│ mesuré │ 3.41E-06 │ 5.18E-06 │\n", + "└─────────┴──────────┴─────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = Table(title=\"Vérification des calculs: haute sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(high_fitted_value / sqrt(2)),\n", + " \"{:.2E}\".format(high_fitted_value),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(high_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(high_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)\n", + "\n", + "table = Table(title=\"Vérification des calculs: basse sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(low_fitted_value / sqrt(2)),\n", + " \"{:.2E}\".format(low_fitted_value),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(low_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(low_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)" + ] + }, + { + "cell_type": "markdown", + "id": "245c09ba-be17-4f8e-a41a-e6e6f02696a7", + "metadata": {}, + "source": [ + "# Utilisation du mouvement réel du banc" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c61da9e2-0339-4345-b601-395ef00b380c", + "metadata": {}, + "outputs": [], + "source": [ + "high_fitted_value = fit_value(\n", + " 0.5,\n", + " 3,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"high\"],\n", + " accelerate_timesignal,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement,\n", + " ],\n", + ")\n", + "low_fitted_value = fit_value(\n", + " 0.5,\n", + " 6,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"low\"],\n", + " accelerate_timesignal,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement,\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "13cbbcf4-4753-4cef-90a3-83477177a102", + "metadata": {}, + "outputs": [], + "source": [ + "high_movement = accelerate_timesignal(\n", + " high_fitted_value, base_experiment.reference_movement\n", + ")\n", + "low_movement = accelerate_timesignal(\n", + " low_fitted_value, base_experiment.reference_movement\n", + ")\n", + "temp_experiment.reference_movement = high_movement\n", + "high_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)\n", + "temp_experiment.reference_movement = low_movement\n", + "low_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "5ff45ff8-8d0f-4f9a-a060-839700121e43", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AHjjjTcKPO6nn37KnDlz+N///kerVq34+uuvGTx4MMePH6dBgwb/nMq0acyZM4dWrVphZ2fHnDlzWLx4MV9//TVNmjRhzpw5rFq1ih49euTu8/777/PDDz+wcOFCGjRowPbt23n88cepUaMGXbt2zdP2Rx99RN26dXMvJxRk6tSpzJ07l8aNG/Phhx/ywAMPEBUVhaenJykpKfTo0YMnn3ySTz75hKysLF555RUeeeQRNm/eXGB7zz77LNHR0fz222+4uLjwyiuv0L9/f06cOIFWq6VLly5s3bqVhx56iOTkZE6ePImdnR2nTp2iadOmbNu2jXbt2hU50rJ161b8/f3ZsmUL586dY/jw4YSEhOQ+sf52RqORIUOGEBgYyJ49e0hNTc0dQf23119/nZkzZxIcHMzrr7/OiBEjOHfuXIGjXCtXruSTTz5h2bJlNGvWjNjYWA4fPpxbPmnSJE6cOMGyZcvw9/dn1apV9O3bl6NHj+b2gczMTD766CO+++47VCoVjz/+OFOmTOGHH37AYDAwZMgQJkyYwI8//khOTg579+4tcH2YKVOmcPLkSVJTU/n0009xdnbGy8uLq1ev5tZRqVSMGDGCpUuXMnHixNztP/zwA506daJ27dr52t27dy+hoaFs2rSJZs2aodFo0Gg01K1bl++++46pU6cCllHGH374gQ8//LCwfzJRCbg5aGnvbebN/j3JNPRk04k4fj12ir1x21F7bkClyQBgweEFLDj8T/K7uO9i2vi0sVbYogxVzsUoRLFkZGSwYMECZs+eTb9+/WjatClffPEF9vb2fP3113nqvvXWW3Tq1ImmTZsybdo0du3aRXa2ZaGrWbNmMW3aNMaMGUPdunXp1asXb731Fv/73/8KPfZHH33EK6+8wqOPPkqjRo344IMPCAkJYe7cuXnqvfjiiwwdOpQ6derg5+fH3LlzmT59OkOHDqVJkyYsXLgQV1fX3Po6nY733nuPr7/+mj59+lC3bl3Gjh3L448/ni+eN998k169elGvXj08PDwKjXXSpEkMGzYsN4lydXXlq6++AmDevHm0atWKd999l8aNG+cmaFu2bOHMmTP52jp79ixr167liy++4L777iM4OJgffviBK1eu5P71361bt9wRi+3bt9OqVSs6d+6cu23r1q15krOCuLu7M2/ePBo3bszAgQMZMGBAngn4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Figure = figure()\n", + "_ = Figure.gca().loglog(\n", + " high_projection.x, high_projection.y, label=\"projection for high\"\n", + ")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"high\"].x,\n", + " sensitivities[\"high\"].y,\n", + " label=\"one order below high sensitivity\",\n", + ")\n", + "_ = Figure.gca().loglog(low_projection.x, low_projection.y, label=\"projection for low\")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"low\"].x, sensitivities[\"low\"].y, label=\"low sensitivity\"\n", + ")\n", + "_ = Figure.gca().legend()\n", + "Figure.gca().grid(True, \"both\", \"both\")\n", + "show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "12b9b3ee-a882-4088-9705-5c8a4c38834c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
  Vérification des calculs: haute   \n",
+       "            sensibilitée            \n",
+       "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n",
+       "┃ nom      RMS       vitesse max ┃\n",
+       "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n",
+       "│ calculé │ 1.07E-06 │ 6.04E-06    │\n",
+       "│ mesuré  │ 1.07E-06 │ 6.04E-06    │\n",
+       "└─────────┴──────────┴─────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[3m Vérification des calculs: haute \u001b[0m\n", + "\u001b[3m sensibilitée \u001b[0m\n", + "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mnom \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mRMS \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mvitesse max\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n", + "│ calculé │ 1.07E-06 │ 6.04E-06 │\n", + "│ mesuré │ 1.07E-06 │ 6.04E-06 │\n", + "└─────────┴──────────┴─────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
  Vérification des calculs: basse   \n",
+       "            sensibilitée            \n",
+       "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n",
+       "┃ nom      RMS       vitesse max ┃\n",
+       "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n",
+       "│ calculé │ 1.30E-06 │ 7.37E-06    │\n",
+       "│ mesuré  │ 1.30E-06 │ 7.37E-06    │\n",
+       "└─────────┴──────────┴─────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[3m Vérification des calculs: basse \u001b[0m\n", + "\u001b[3m sensibilitée \u001b[0m\n", + "┏━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mnom \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mRMS \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mvitesse max\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━┩\n", + "│ calculé │ 1.30E-06 │ 7.37E-06 │\n", + "│ mesuré │ 1.30E-06 │ 7.37E-06 │\n", + "└─────────┴──────────┴─────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = Table(title=\"Vérification des calculs: haute sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(compute_rms(get_speed(base_experiment.reference_movement)) * high_fitted_value),\n", + " \"{:.2E}\".format(max(get_speed(base_experiment.reference_movement)) * high_fitted_value),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(high_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(high_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)\n", + "\n", + "table = Table(title=\"Vérification des calculs: basse sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(compute_rms(get_speed(base_experiment.reference_movement)) * low_fitted_value),\n", + " \"{:.2E}\".format(max(get_speed(base_experiment.reference_movement)) * low_fitted_value),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(low_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(low_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5e985e2c-ac0d-4ba7-8527-cadf16fcb22d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
base rms: 1.33E-06\n",
+       "base max speed: 7.52E-06\n",
+       "
\n" + ], + "text/plain": [ + "base rms: \u001b[1;36m1.\u001b[0m\u001b[1;36m33E-\u001b[0m\u001b[1;36m06\u001b[0m\n", + "base max speed: \u001b[1;36m7.\u001b[0m\u001b[1;36m52E-\u001b[0m\u001b[1;36m06\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "console.print(\n", + " \"base rms: [repr.number]{:.2E}[/repr.number]\\nbase max speed: [repr.number]{:.2E}[/repr.number]\".format(\n", + " compute_rms(get_speed(base_experiment.reference_movement)),\n", + " max(get_speed(base_experiment.reference_movement)),\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5f447e42-d7a9-4c69-8721-d6c21ba0cf15", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
0.8034556 0.9801055\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1;36m0.8034556\u001b[0m \u001b[1;36m0.9801055\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "console.print(high_fitted_value, low_fitted_value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8fca5784-d5ca-4626-9e27-650b6d5c679a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/main.ipynb b/main.ipynb new file mode 100644 index 0000000..f985c10 --- /dev/null +++ b/main.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "6c9023fe-f86d-428a-8072-4264ff672025", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from rich.console import Console\n", + "from rich.table import Table\n", + "\n", + "from numpy import loadtxt\n", + "\n", + "from numpy import float32, bool as np_bool\n", + "from numpy.typing import NDArray\n", + "from typing import Any\n", + "from collections.abc import Callable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2d82f94d-b69a-4ad0-b042-08d045925545", + "metadata": {}, + "outputs": [], + "source": [ + "from numpy import mean, diff, sqrt, pi, linspace\n", + "from numpy.random import default_rng\n", + "\n", + "from backscattering_analyzer.experiment import Experiment\n", + "from backscattering_analyzer.acquisition import AcquisitionType\n", + "\n", + "from matplotlib.pyplot import figure, show\n", + "\n", + "from science_signal import Signal\n", + "from science_signal.generator import sin as sin_gen" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d91d36b8-28fb-40d8-a4e6-77b659839fbe", + "metadata": {}, + "outputs": [], + "source": [ + "from labellines import labelLines # from matplotlib-label-lines" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "62328640-6c4f-47a1-8461-9637a50f52e5", + "metadata": {}, + "outputs": [], + "source": [ + "def is_over(signal1: Signal, signal2: Signal) -> bool:\n", + " \"\"\"\n", + " True if signal1 is over signal2\n", + " \"\"\"\n", + " return not ((signal1 - signal2).y < 0).any()\n", + "\n", + "\n", + "def get_speed(signal: Signal) -> NDArray[float32]:\n", + " \"\"\"\n", + " get speed from position signal\n", + " \"\"\"\n", + " return 1 / mean(diff(signal.x)) * diff(signal.y)\n", + "\n", + "\n", + "def compute_rms(signal: NDArray[float32]) -> float:\n", + " \"\"\"\n", + " compute RMS of data\n", + " \"\"\"\n", + " return sqrt(mean(signal**2)) # pyright: ignore[reportAny]\n", + "\n", + "\n", + "def accelerate_timesignal(factor: float, signal: Signal) -> Signal:\n", + " \"\"\"\n", + " accelerate a signal by a factor\n", + " \"\"\"\n", + " return Signal(\n", + " signal.x[0] + (signal.x - signal.x[0]) * (1 / factor),\n", + " signal.y,\n", + " )\n", + "\n", + "\n", + "def generate_movement(max_speed: float, start: int, end: int) -> Signal:\n", + " \"\"\"\n", + " generate a sine movement with a given maximum speed\n", + " \"\"\"\n", + " amplitude: float = sqrt(max_speed / (2 * pi))\n", + " frequency: float = sqrt(max_speed / (2 * pi))\n", + " signal = sin_gen(end - start, 1000, frequency, amplitude)\n", + " return Signal(\n", + " start + signal.x,\n", + " signal.y,\n", + " )\n", + "\n", + "\n", + "def fit_value(\n", + " start: float,\n", + " end: float,\n", + " nb_loop: int,\n", + " experiment: Experiment,\n", + " reference: Signal,\n", + " generate: Callable[[float, Any], Signal],\n", + " condition: Callable[[Signal, Signal], np_bool | bool],\n", + " generate_args: list[Any],\n", + ") -> float:\n", + " \"\"\"\n", + " find the value that is the closest to NOT respecting the condition function\n", + " Considering it start by not respecting the condition, and after some time, it will\n", + " \"\"\"\n", + " for _ in range(nb_loop):\n", + " values = linspace(start, end, 10, dtype=float32)\n", + " detected = False\n", + " for j in range(len(values)):\n", + " value = values[j]\n", + " experiment.reference_movement = generate(value, *generate_args)\n", + " experiment.projection_reference = experiment.compute_projection(\n", + " AcquisitionType.REFERENCE\n", + " )\n", + " if (\n", + " not condition(reference, experiment.projection_reference)\n", + " and not detected\n", + " ):\n", + " detected = True\n", + " end = value\n", + " start = values[j - 1]\n", + " if not detected:\n", + " raise Exception(\"not in range\")\n", + " return start + (end - start) / 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "587e2e3a-767b-4a6e-80df-188b6152bbb4", + "metadata": {}, + "outputs": [], + "source": [ + "console = Console()\n", + "o5_mat = (\n", + " Path(\"/home/demagny/data\")\n", + " / \"simulation\"\n", + " / \"optickle\"\n", + " / \"transfer_function\"\n", + " / \"O5.mat\"\n", + ")\n", + "sensitivities: dict[str, Signal] = dict()\n", + "for name in [\"high\", \"low\"]:\n", + " data = loadtxt(\n", + " Path(\n", + " \"/home/demagny/data/sensitivity/O5/23932_O5{}SensASD.txt\".format(\n", + " name.capitalize()\n", + " )\n", + " ),\n", + " dtype=float32,\n", + " )\n", + " sensitivities[name] = Signal(\n", + " data[:, 0],\n", + " data[:, 1],\n", + " )\n", + "sensitivities[\"high\"].y /= 10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7f534cc-0b50-4fc1-ba62-8a36747eb646", + "metadata": {}, + "outputs": [], + "source": [ + "C_BENCH = \"SDB1\"\n", + "C_COUPLING = \"../main_script_virgo/values-coupling.toml\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a72635ea-8395-4783-9be1-8a89e82b7e21", + "metadata": {}, + "outputs": [], + "source": [ + "base_experiment = Experiment(C_BENCH, \"2024_06_07\", C_COUPLING, 0.1)\n", + "temp_experiment = Experiment(C_BENCH, \"2024_06_07\", C_COUPLING, 0.1)\n", + "base_experiment.factors = {\"pre\": 2e-10 * 1e6, \"true\": 2e-10}\n", + "temp_experiment.factors = {\"pre\": 2e-10 * 1e6, \"true\": 2e-10}\n", + "base_experiment.modelisation_file = str(o5_mat)\n", + "temp_experiment.modelisation_file = str(o5_mat)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "850dd2af-2b7b-43b3-8758-6b36d9bced20", + "metadata": {}, + "outputs": [], + "source": [ + "factor = default_rng().random(1) * 10\n", + "# check if frequency is multiplied by the factor after going into accelerate_timesignal function\n", + "assert (\n", + " abs(\n", + " factor / mean(diff(base_experiment.reference_movement.x))\n", + " - 1\n", + " / mean(\n", + " diff(accelerate_timesignal(factor, base_experiment.reference_movement).x)\n", + " )\n", + " )\n", + " < 1e-1\n", + "), abs(\n", + " factor / mean(diff(base_experiment.reference_movement.x))\n", + " - 1\n", + " / mean(diff(accelerate_timesignal(factor, base_experiment.reference_movement).x))\n", + ")\n", + "# check if amplitude is not modified after going into accelerate_timesignal function\n", + "assert (\n", + " base_experiment.reference_movement.y\n", + " == accelerate_timesignal(factor, base_experiment.reference_movement).y\n", + ").all(), (\n", + " base_experiment.reference_movement.y\n", + " - accelerate_timesignal(factor, base_experiment.reference_movement).y\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8dbb68d6-fba3-4488-b951-b5bf860152d2", + "metadata": {}, + "outputs": [], + "source": [ + "high_fitted_value = fit_value(\n", + " 1e-6,\n", + " 1e-5,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"high\"],\n", + " generate_movement,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + " ],\n", + ")\n", + "low_fitted_value = fit_value(\n", + " 1e-6,\n", + " 1e-5,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"low\"],\n", + " generate_movement,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "132a82c5-b69b-402c-b278-c565ccf6e504", + "metadata": {}, + "outputs": [], + "source": [ + "high_movement = generate_movement(\n", + " high_fitted_value,\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + ")\n", + "temp_experiment.reference_movement = high_movement\n", + "high_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)\n", + "low_movement = generate_movement(\n", + " low_fitted_value,\n", + " base_experiment.reference_movement.x[0],\n", + " base_experiment.reference_movement.x[-1],\n", + ")\n", + "temp_experiment.reference_movement = low_movement\n", + "low_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2966a38e-9020-4cdd-a186-70519afb85de", + "metadata": {}, + "outputs": [], + "source": [ + "Figure = figure()\n", + "_ = Figure.gca().loglog(\n", + " high_projection.x, high_projection.y, label=\"projection for high\"\n", + ")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"high\"].x,\n", + " sensitivities[\"high\"].y,\n", + " label=\"one order below high sensitivity\",\n", + ")\n", + "_ = Figure.gca().loglog(low_projection.x, low_projection.y, label=\"projection for low\")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"low\"].x, sensitivities[\"low\"].y, label=\"low sensitivity\"\n", + ")\n", + "_ = Figure.gca().legend()\n", + "Figure.gca().grid(True, \"both\", \"both\")\n", + "show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf7aa342-1ffe-4262-80fd-e900acf590c0", + "metadata": {}, + "outputs": [], + "source": [ + "table = Table(title=\"Vérification des calculs: haute sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(high_fitted_value / sqrt(2)),\n", + " \"{:.2E}\".format(high_fitted_value),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(high_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(high_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)\n", + "\n", + "table = Table(title=\"Vérification des calculs: basse sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(low_fitted_value / sqrt(2)),\n", + " \"{:.2E}\".format(low_fitted_value),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(low_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(low_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)" + ] + }, + { + "cell_type": "markdown", + "id": "a7ca8aea-80f5-4306-916d-a4cb9240bd1b", + "metadata": {}, + "source": [ + "# Utilisation du mouvement réel du banc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c61da9e2-0339-4345-b601-395ef00b380c", + "metadata": {}, + "outputs": [], + "source": [ + "high_fitted_value = fit_value(\n", + " 1,\n", + " 3,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"high\"],\n", + " accelerate_timesignal,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement,\n", + " ],\n", + ")\n", + "low_fitted_value = fit_value(\n", + " 1,\n", + " 6,\n", + " 5,\n", + " temp_experiment,\n", + " sensitivities[\"low\"],\n", + " accelerate_timesignal,\n", + " is_over,\n", + " [\n", + " base_experiment.reference_movement,\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13cbbcf4-4753-4cef-90a3-83477177a102", + "metadata": {}, + "outputs": [], + "source": [ + "high_movement = accelerate_timesignal(\n", + " high_fitted_value, base_experiment.reference_movement\n", + ")\n", + "low_movement = accelerate_timesignal(\n", + " low_fitted_value, base_experiment.reference_movement\n", + ")\n", + "temp_experiment.reference_movement = high_movement\n", + "high_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)\n", + "temp_experiment.reference_movement = low_movement\n", + "low_projection = temp_experiment.compute_projection(AcquisitionType.REFERENCE)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12b9b3ee-a882-4088-9705-5c8a4c38834c", + "metadata": {}, + "outputs": [], + "source": [ + "table = Table(title=\"Vérification des calculs: haute sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(base_experiment.reference_movement)) * high_fitted_value\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(base_experiment.reference_movement)) * high_fitted_value\n", + " ),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(high_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(high_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)\n", + "\n", + "table = Table(title=\"Vérification des calculs: basse sensibilité\")\n", + "table.add_column(\"nom\")\n", + "table.add_column(\"RMS\")\n", + "table.add_column(\"vitesse max\")\n", + "\n", + "table.add_row(\n", + " \"calculé\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(base_experiment.reference_movement)) * low_fitted_value\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(base_experiment.reference_movement)) * low_fitted_value\n", + " ),\n", + ")\n", + "table.add_row(\n", + " \"mesuré\",\n", + " \"{:.2E}\".format(\n", + " compute_rms(get_speed(low_movement)),\n", + " ),\n", + " \"{:.2E}\".format(\n", + " max(get_speed(low_movement)),\n", + " ),\n", + ")\n", + "\n", + "console.print(table)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ff45ff8-8d0f-4f9a-a060-839700121e43", + "metadata": {}, + "outputs": [], + "source": [ + "Figure = figure(figsize=(8, 5))\n", + "_ = Figure.gca().loglog(\n", + " high_projection.x,\n", + " high_projection.y,\n", + " label=\"rms = {:.2E}, max = {:.2E}\".format(\n", + " compute_rms(get_speed(high_movement)), max(get_speed(high_movement))\n", + " ),\n", + ")\n", + "_ = Figure.gca().loglog(\n", + " low_projection.x,\n", + " low_projection.y,\n", + " label=\"rms= {:.2E} max= {:.2E}\".format(\n", + " compute_rms(get_speed(low_movement)), max(get_speed(low_movement))\n", + " ),\n", + ")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"low\"].x, sensitivities[\"low\"].y, label=\"low sensitivity\"\n", + ")\n", + "_ = Figure.gca().loglog(\n", + " sensitivities[\"high\"].x,\n", + " sensitivities[\"high\"].y,\n", + " label=\"one order below high sensitivity\",\n", + ")\n", + "\n", + "labelLines(Figure.gca().get_lines(), xvals=[9, 20, 50, 50], align=False)\n", + "\n", + "# _ = Figure.gca().legend(loc=\"upper right\")\n", + "_ = Figure.gca().set_xlim(5, 100)\n", + "_ = Figure.gca().set_ylim(1e-26, 1e-18)\n", + "_ = Figure.gca().set_xlabel(\"Frequencies Hz\")\n", + "_ = Figure.gca().set_ylabel(\"Sensitivity $\\\\frac { 1 } { \\\\sqrt{ Hz } }$\")\n", + "_ = Figure.gca().set_title(\"projection of noise from backscatterd light on SRB\")\n", + "Figure.gca().grid(True, \"both\", \"both\")\n", + "show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e985e2c-ac0d-4ba7-8527-cadf16fcb22d", + "metadata": {}, + "outputs": [], + "source": [ + "console.print(\n", + " \"base rms: [repr.number]{:.2E}[/repr.number]\\nbase max speed: [repr.number]{:.2E}[/repr.number]\".format(\n", + " compute_rms(get_speed(base_experiment.reference_movement)),\n", + " max(get_speed(base_experiment.reference_movement)),\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5f447e42-d7a9-4c69-8721-d6c21ba0cf15", + "metadata": {}, + "outputs": [], + "source": [ + "console.print(high_fitted_value, low_fitted_value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9ef341b0-8d63-4130-81f7-82cdad1b0052", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..9164165 --- /dev/null +++ b/mise.toml @@ -0,0 +1,5 @@ +[tools] +python = "3.13.2" + +[env] +_.python.venv = { path = ".venv", create = true, uv_create_args = ["--seed"] } diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3e92e91 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,22 @@ +[project] +name = "jupyter-speed" +version = "0.1.0" +description = "Jupyter work to compute and check maximum speed accepted on benches on Virgo" +authors = [{name = "augustin.demagny", email = "augustin.demagny@ligo.org"}] +readme = "README.md" +requires-python = ">=3.13" +dependencies = [ + "backscattering-analyzer", + "basedpyright>=1.28.4", + "ipympl>=0.9.7", + "jupyter-lsp>=2.2.5", + "jupyterlab>=4.4.0", + "matplotlib-label-lines>=0.8.0", + "rich>=14.0.0", + "ruff>=0.11.4", + "science-signal", +] + +[tool.uv.sources] +science-signal = { path = "../main_script_virgo/modules/science_signal" } +backscattering-analyzer = { path = "../main_script_virgo/modules/backscattering-analyzer" } diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..8e871c9 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1670 @@ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "anyio" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/fa/57ec2c6d16ecd2ba0cf15f3c7d1c3c2e7b5fcb83555ff56d7ab10888ec8f/argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08", size = 42798 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6a/e8a041599e78b6b3752da48000b14c8d1e8a04ded09c88c714ba047f34f5/argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea", size = 15124 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658 }, + { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583 }, + { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168 }, + { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709 }, + { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613 }, + { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583 }, + { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475 }, + { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698 }, + { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817 }, + { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104 }, +] + +[[package]] +name = "arrow" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "types-python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419 }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, +] + +[[package]] +name = "async-lru" +version = "2.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, +] + +[[package]] +name = "attrs" +version = "25.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, +] + +[[package]] +name = "backscattering-analyzer" +version = "1.0.0" +source = { directory = "../main_script_virgo/modules/backscattering-analyzer" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "science-signal" }, + { name = "scipy" }, +] + +[package.metadata] +requires-dist = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "science-signal" }, + { name = "scipy" }, +] + +[[package]] +name = "basedpyright" +version = "1.28.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nodejs-wheel-binaries" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/4e/445fe8de5fdea8aba6fea36c126410f0e48fc83a407d8a341b91dcfcc773/basedpyright-1.28.4.tar.gz", hash = "sha256:0d4a67e8d3df0d724ac043d7110fea46478f3f1d970fadcd015be1c39054bdb2", size = 21924470 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/9f/d03c2ae879282d284e42687ee428fb50b4fa1479e63525bb64ef71011495/basedpyright-1.28.4-py3-none-any.whl", hash = "sha256:9cad30f84abb10c691ddb4c38e95a6dda755d2aa0ebd764da20773bcee76bc28", size = 11597694 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f0/3c/adaf39ce1fb4afdd21b611e3d530b183bb7759c9b673d60db0e347fd4439/beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b", size = 619516 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16", size = 186015 }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + +[[package]] +name = "certifi" +version = "2025.1.31" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, +] + +[[package]] +name = "contourpy" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "debugpy" +version = "1.8.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416 }, + { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784 }, + { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270 }, + { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621 }, + { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, +] + +[[package]] +name = "fastjsonschema" +version = "2.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924 }, +] + +[[package]] +name = "fonttools" +version = "4.57.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/2d/a9a0b6e3a0cf6bd502e64fc16d894269011930cabfc89aee20d1635b1441/fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de", size = 3492448 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/2f/11439f3af51e4bb75ac9598c29f8601aa501902dcedf034bdc41f47dd799/fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef", size = 2739175 }, + { url = "https://files.pythonhosted.org/packages/25/52/677b55a4c0972dc3820c8dba20a29c358197a78229daa2ea219fdb19e5d5/fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c", size = 2276583 }, + { url = "https://files.pythonhosted.org/packages/64/79/184555f8fa77b827b9460a4acdbbc0b5952bb6915332b84c615c3a236826/fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72", size = 4766437 }, + { url = "https://files.pythonhosted.org/packages/f8/ad/c25116352f456c0d1287545a7aa24e98987b6d99c5b0456c4bd14321f20f/fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817", size = 4838431 }, + { url = "https://files.pythonhosted.org/packages/53/ae/398b2a833897297797a44f519c9af911c2136eb7aa27d3f1352c6d1129fa/fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9", size = 4951011 }, + { url = "https://files.pythonhosted.org/packages/b7/5d/7cb31c4bc9ffb9a2bbe8b08f8f53bad94aeb158efad75da645b40b62cb73/fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13", size = 5205679 }, + { url = "https://files.pythonhosted.org/packages/4c/e4/6934513ec2c4d3d69ca1bc3bd34d5c69dafcbf68c15388dd3bb062daf345/fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199", size = 2144833 }, + { url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3", size = 2190799 }, + { url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 }, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, +] + +[[package]] +name = "ipympl" +version = "0.9.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipython" }, + { name = "ipywidgets" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pillow" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/1b/acd3d481869d614a7acbb831bd9304411eae47b05d7607db989613028788/ipympl-0.9.7.tar.gz", hash = "sha256:3e505a56b6e9a7bfc4d40c1a861a0547adb16820eb67ec79131335dd0a5084f0", size = 58547447 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/6b/21c62f1b2b5e18c6553f7364487dfdf7eb7952b1000a1b7863c1f97819e9/ipympl-0.9.7-py3-none-any.whl", hash = "sha256:3698ee7eaa0b047a7603517d7aa1b71b32118a5f51754cab45ec5d994f67208f", size = 515702 }, +] + +[[package]] +name = "ipython" +version = "9.1.0" +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 = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/9a/6b8984bedc990f3a4aa40ba8436dea27e23d26a64527de7c2e5e12e76841/ipython-9.1.0.tar.gz", hash = "sha256:a47e13a5e05e02f3b8e1e7a0f9db372199fe8c3763532fe7a1e0379e4e135f16", size = 4373688 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/9d/4ff2adf55d1b6e3777b0303fdbe5b723f76e46cba4a53a32fe82260d2077/ipython-9.1.0-py3-none-any.whl", hash = "sha256:2df07257ec2f84a6b346b8d83100bcf8fa501c6e01ab75cd3799b0bb253b3d2a", size = 604053 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + +[[package]] +name = "ipywidgets" +version = "8.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/4c/dab2a281b07596a5fc220d49827fe6c794c66f1493d7a74f1df0640f2cc5/ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17", size = 116723 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/2d/9c0b76f2f9cc0ebede1b9371b6f317243028ed60b90705863d493bae622e/ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245", size = 139767 }, +] + +[[package]] +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "json5" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/be/c6c745ec4c4539b25a278b70e29793f10382947df0d9efba2fa09120895d/json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a", size = 51907 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/9f/3500910d5a98549e3098807493851eeef2b89cdd3032227558a104dfe926/json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db", size = 36079 }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/2e/03362ee4034a4c917f697890ccd4aec0800ccf9ded7f511971c75451deec/jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4", size = 325778 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566", size = 88462 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn" }, + { name = "idna" }, + { name = "isoduration" }, + { name = "jsonpointer" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "uri-template" }, + { name = "webcolors" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/db/58f950c996c793472e336ff3655b13fbcf1e3b359dcf52dcf3ed3b52c352/jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272", size = 15561 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf", size = 18459 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", extra = ["format-nongpl"] }, + { name = "packaging" }, + { name = "python-json-logger" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, +] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/b4/3200b0b09c12bc3b72d943d923323c398eff382d1dcc7c0dbc8b74630e40/jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001", size = 48741 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/e0/7bd7cff65594fd9936e2f9385701e44574fc7d721331ff676ce440b14100/jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da", size = 69146 }, +] + +[[package]] +name = "jupyter-server" +version = "2.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/8c/df09d4ab646141f130f9977b32b206ba8615d1969b2eba6a2e84b7f89137/jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084", size = 725227 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/a2/89eeaf0bb954a123a909859fa507fa86f96eb61b62dc30667b60dbd5fdaf/jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3", size = 385826 }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656 }, +] + +[[package]] +name = "jupyter-speed" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "backscattering-analyzer" }, + { name = "basedpyright" }, + { name = "ipympl" }, + { name = "jupyter-lsp" }, + { name = "jupyterlab" }, + { name = "matplotlib-label-lines" }, + { name = "rich" }, + { name = "ruff" }, + { name = "science-signal" }, +] + +[package.metadata] +requires-dist = [ + { name = "backscattering-analyzer", directory = "../main_script_virgo/modules/backscattering-analyzer" }, + { name = "basedpyright", specifier = ">=1.28.4" }, + { name = "ipympl", specifier = ">=0.9.7" }, + { name = "jupyter-lsp", specifier = ">=2.2.5" }, + { name = "jupyterlab", specifier = ">=4.4.0" }, + { name = "matplotlib-label-lines", specifier = ">=0.8.0" }, + { name = "rich", specifier = ">=14.0.0" }, + { name = "ruff", specifier = ">=0.11.4" }, + { name = "science-signal", directory = "../main_script_virgo/modules/science_signal" }, +] + +[[package]] +name = "jupyterlab" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-lru" }, + { name = "httpx" }, + { name = "ipykernel" }, + { name = "jinja2" }, + { 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/46/49/0beaab21155e5f7438032f3da920abbcf46159b28adafbdf596dd33c57a6/jupyterlab-4.4.0.tar.gz", hash = "sha256:f1767d5f0104e40f3b4a63bf6892bbef8e4704dcabf0c78408a3bdc411792f04", size = 22996521 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/64/1a559e1b945c3d424c1ac9f333bfd6f595d5819efde3a6d8b036e6b0585f/jupyterlab-4.4.0-py3-none-any.whl", hash = "sha256:61d33991fbb352cc7caac08bd0c34577fea86d8d5d9772600d9d5a6bcbc882c0", size = 12291918 }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "babel" }, + { name = "jinja2" }, + { name = "json5" }, + { name = "jsonschema" }, + { name = "jupyter-server" }, + { name = "packaging" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700 }, +] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/73/fa26bbb747a9ea4fca6b01453aa22990d52ab62dd61384f1ac0dc9d4e7ba/jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed", size = 203556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/93/858e87edc634d628e5d752ba944c2833133a28fa87bb093e6832ced36a3e/jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54", size = 214392 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "matplotlib" +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, + { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, + { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, + { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, + { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, + { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, + { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, + { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, + { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, + { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, + { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, + { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + +[[package]] +name = "matplotlib-label-lines" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "more-itertools" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/8f/696490f3011f787fe1126c182e2edbbca92bea4811a62100296e04288e5c/matplotlib_label_lines-0.8.0.tar.gz", hash = "sha256:9092e4df7a923a14ad3fb8e6b6ec2852e0ee9cf21cfd226a1318fd289dce8796", size = 684431 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e8/c1d983e7eca45b97ce86c0a0d77e12c22df0887b70bcec22afed02949d22/matplotlib_label_lines-0.8.0-py3-none-any.whl", hash = "sha256:d865a63d7b6b5d12b3d47b6c4a6b356913f2e659fddfbea5eb4cc323a306de9d", size = 690250 }, +] + +[[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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "mistune" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410 }, +] + +[[package]] +name = "more-itertools" +version = "10.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/3b/7fa1fe835e2e93fd6d7b52b2f95ae810cf5ba133e1845f726f5a992d62c2/more-itertools-10.6.0.tar.gz", hash = "sha256:2cd7fad1009c31cc9fb6a035108509e6547547a7a738374f10bd49a09eb3ee3b", size = 125009 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl", hash = "sha256:6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89", size = 63038 }, +] + +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, +] + +[[package]] +name = "nbconvert" +version = "7.16.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { 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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + +[[package]] +name = "nodejs-wheel-binaries" +version = "22.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/c7/4fd3871d2b7fd5122216245e273201ab98eda92bbd6fe9ad04846b758c56/nodejs_wheel_binaries-22.14.0.tar.gz", hash = "sha256:c1dc43713598c7310d53795c764beead861b8c5021fe4b1366cb912ce1a4c8bf", size = 8055 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/b6/66ef4ef75ea7389ea788f2d5505bf9a8e5c3806d56c7a90cf46a6942f1cf/nodejs_wheel_binaries-22.14.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:d8ab8690516a3e98458041286e3f0d6458de176d15c14f205c3ea2972131420d", size = 50326597 }, + { url = "https://files.pythonhosted.org/packages/7d/78/023d91a293ba73572a643bc89d11620d189f35f205a309dd8296aa45e69a/nodejs_wheel_binaries-22.14.0-py2.py3-none-macosx_11_0_x86_64.whl", hash = "sha256:b2f200f23b3610bdbee01cf136279e005ffdf8ee74557aa46c0940a7867956f6", size = 51158258 }, + { url = "https://files.pythonhosted.org/packages/af/86/324f6342c79e5034a13319b02ba9ed1f4ac8813af567d223c9a9e56cd338/nodejs_wheel_binaries-22.14.0-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0877832abd7a9c75c8c5caafa37f986c9341ee025043c2771213d70c4c1defa", size = 57180264 }, + { url = "https://files.pythonhosted.org/packages/6d/9f/42bdaab26137e31732bff00147b9aca2185d475b5752b57a443e6c7ba93f/nodejs_wheel_binaries-22.14.0-py2.py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fded5a70a8a55c2135e67bd580d8b7f2e94fcbafcc679b6a2d5b92f88373d69", size = 57693251 }, + { url = "https://files.pythonhosted.org/packages/ab/d7/94f8f269aa86cf35f9ed2b70d09aca48dc971fb5656fdc4a3b69364b189f/nodejs_wheel_binaries-22.14.0-py2.py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c1ade6f3ece458b40c02e89c91d5103792a9f18aaad5026da533eb0dcb87090e", size = 58841717 }, + { url = "https://files.pythonhosted.org/packages/2d/a0/43b7316eaf22b4ee9bfb897ee36c724efceac7b89d7d1bedca28057b7be1/nodejs_wheel_binaries-22.14.0-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:34fa5ed4cf3f65cbfbe9b45c407ffc2fc7d97a06cd8993e6162191ff81f29f48", size = 59808791 }, + { url = "https://files.pythonhosted.org/packages/10/0a/814491f751a25136e37de68a2728c9a9e3c1d20494aba5ff3c230d5f9c2d/nodejs_wheel_binaries-22.14.0-py2.py3-none-win_amd64.whl", hash = "sha256:ca7023276327455988b81390fa6bbfa5191c1da7fc45bc57c7abc281ba9967e9", size = 40478921 }, + { url = "https://files.pythonhosted.org/packages/f4/5c/cab444afaa387dceac8debb817b52fd00596efcd2d54506c27311c6fe6a8/nodejs_wheel_binaries-22.14.0-py2.py3-none-win_arm64.whl", hash = "sha256:fd59c8e9a202221e316febe1624a1ae3b42775b7fb27737bf12ec79565983eaf", size = 36206637 }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, +] + +[[package]] +name = "numpy" +version = "2.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 }, + { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 }, + { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 }, + { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 }, + { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 }, + { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 }, + { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 }, + { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 }, + { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 }, + { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 }, + { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 }, + { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 }, + { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 }, + { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 }, + { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 }, + { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 }, + { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 }, + { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 }, + { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 }, + { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + +[[package]] +name = "pillow" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, + { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, + { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, + { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, + { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, + { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, + { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, + { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, + { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, + { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, + { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, + { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, + { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, + { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, + { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, + { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, + { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, +] + +[[package]] +name = "platformdirs" +version = "4.3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/2d/7d512a3913d60623e7eb945c6d1b4f0bddf1d0b7ada5225274c87e5b53d1/platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351", size = 21291 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/45/59578566b3275b8fd9157885918fcd0c4d74162928a5310926887b856a51/platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94", size = 18499 }, +] + +[[package]] +name = "prometheus-client" +version = "0.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/14/7d0f567991f3a9af8d1cd4f619040c93b68f09a02b6d0b6ab1b2d1ded5fe/prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb", size = 78551 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/c2/ab7d37426c179ceb9aeb109a85cda8948bb269b7561a0be870cc656eefe4/prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301", size = 54682 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816 }, +] + +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-json-logger" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163 }, +] + +[[package]] +name = "pywin32" +version = "310" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, +] + +[[package]] +name = "pywinpty" +version = "2.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/7c/917f9c4681bb8d34bfbe0b79d36bbcd902651aeab48790df3d30ba0202fb/pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2", size = 29017 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/16/2ab7b3b7f55f3c6929e5f629e1a68362981e4e5fed592a2ed1cb4b4914a5/pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408", size = 1405020 }, + { url = "https://files.pythonhosted.org/packages/7c/16/edef3515dd2030db2795dbfbe392232c7a0f3dc41b98e92b38b42ba497c7/pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901", size = 1404151 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "pyzmq" +version = "26.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/11/b9213d25230ac18a71b39b3723494e57adebe36e066397b961657b3b41c1/pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d", size = 278293 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/20/fb2c92542488db70f833b92893769a569458311a76474bda89dc4264bd18/pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3", size = 1339484 }, + { url = "https://files.pythonhosted.org/packages/58/29/2f06b9cabda3a6ea2c10f43e67ded3e47fc25c54822e2506dfb8325155d4/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43", size = 666106 }, + { url = "https://files.pythonhosted.org/packages/77/e4/dcf62bd29e5e190bd21bfccaa4f3386e01bf40d948c239239c2f1e726729/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6", size = 902056 }, + { url = "https://files.pythonhosted.org/packages/1a/cf/b36b3d7aea236087d20189bec1a87eeb2b66009731d7055e5c65f845cdba/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e", size = 860148 }, + { url = "https://files.pythonhosted.org/packages/18/a6/f048826bc87528c208e90604c3bf573801e54bd91e390cbd2dfa860e82dc/pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771", size = 855983 }, + { url = "https://files.pythonhosted.org/packages/0a/27/454d34ab6a1d9772a36add22f17f6b85baf7c16e14325fa29e7202ca8ee8/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30", size = 1197274 }, + { url = "https://files.pythonhosted.org/packages/f4/3d/7abfeab6b83ad38aa34cbd57c6fc29752c391e3954fd12848bd8d2ec0df6/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86", size = 1507120 }, + { url = "https://files.pythonhosted.org/packages/13/ff/bc8d21dbb9bc8705126e875438a1969c4f77e03fc8565d6901c7933a3d01/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101", size = 1406738 }, + { url = "https://files.pythonhosted.org/packages/f5/5d/d4cd85b24de71d84d81229e3bbb13392b2698432cf8fdcea5afda253d587/pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637", size = 577826 }, + { url = "https://files.pythonhosted.org/packages/c6/6c/f289c1789d7bb6e5a3b3bef7b2a55089b8561d17132be7d960d3ff33b14e/pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b", size = 640406 }, + { url = "https://files.pythonhosted.org/packages/b3/99/676b8851cb955eb5236a0c1e9ec679ea5ede092bf8bf2c8a68d7e965cac3/pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08", size = 556216 }, + { url = "https://files.pythonhosted.org/packages/65/c2/1fac340de9d7df71efc59d9c50fc7a635a77b103392d1842898dd023afcb/pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4", size = 1333769 }, + { url = "https://files.pythonhosted.org/packages/5c/c7/6c03637e8d742c3b00bec4f5e4cd9d1c01b2f3694c6f140742e93ca637ed/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a", size = 658826 }, + { url = "https://files.pythonhosted.org/packages/a5/97/a8dca65913c0f78e0545af2bb5078aebfc142ca7d91cdaffa1fbc73e5dbd/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b", size = 891650 }, + { url = "https://files.pythonhosted.org/packages/7d/7e/f63af1031eb060bf02d033732b910fe48548dcfdbe9c785e9f74a6cc6ae4/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d", size = 849776 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/1a009ce582802a895c0d5fe9413f029c940a0a8ee828657a3bb0acffd88b/pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf", size = 842516 }, + { url = "https://files.pythonhosted.org/packages/6e/bc/f88b0bad0f7a7f500547d71e99f10336f2314e525d4ebf576a1ea4a1d903/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c", size = 1189183 }, + { url = "https://files.pythonhosted.org/packages/d9/8c/db446a3dd9cf894406dec2e61eeffaa3c07c3abb783deaebb9812c4af6a5/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8", size = 1495501 }, + { url = "https://files.pythonhosted.org/packages/05/4c/bf3cad0d64c3214ac881299c4562b815f05d503bccc513e3fd4fdc6f67e4/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", size = 1395540 }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, +] + +[[package]] +name = "rich" +version = "14.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/53/830aa4c3066a8ab0ae9a9955976fb770fe9c6102117c8ec4ab3ea62d89e8/rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725", size = 224078 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/9b/63f4c7ebc259242c89b3acafdb37b41d1185c07ff0011164674e9076b491/rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0", size = 243229 }, +] + +[[package]] +name = "rpds-py" +version = "0.24.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/b3/52b213298a0ba7097c7ea96bee95e1947aa84cc816d48cebb539770cdf41/rpds_py-0.24.0.tar.gz", hash = "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e", size = 26863 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/c3/3607abc770395bc6d5a00cb66385a5479fb8cd7416ddef90393b17ef4340/rpds_py-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c", size = 367072 }, + { url = "https://files.pythonhosted.org/packages/d8/35/8c7ee0fe465793e3af3298dc5a9f3013bd63e7a69df04ccfded8293a4982/rpds_py-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c", size = 351919 }, + { url = "https://files.pythonhosted.org/packages/91/d3/7e1b972501eb5466b9aca46a9c31bcbbdc3ea5a076e9ab33f4438c1d069d/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240", size = 390360 }, + { url = "https://files.pythonhosted.org/packages/a2/a8/ccabb50d3c91c26ad01f9b09a6a3b03e4502ce51a33867c38446df9f896b/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8", size = 400704 }, + { url = "https://files.pythonhosted.org/packages/53/ae/5fa5bf0f3bc6ce21b5ea88fc0ecd3a439e7cb09dd5f9ffb3dbe1b6894fc5/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8", size = 450839 }, + { url = "https://files.pythonhosted.org/packages/e3/ac/c4e18b36d9938247e2b54f6a03746f3183ca20e1edd7d3654796867f5100/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b", size = 441494 }, + { url = "https://files.pythonhosted.org/packages/bf/08/b543969c12a8f44db6c0f08ced009abf8f519191ca6985509e7c44102e3c/rpds_py-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d", size = 393185 }, + { url = "https://files.pythonhosted.org/packages/da/7e/f6eb6a7042ce708f9dfc781832a86063cea8a125bbe451d663697b51944f/rpds_py-0.24.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7", size = 426168 }, + { url = "https://files.pythonhosted.org/packages/38/b0/6cd2bb0509ac0b51af4bb138e145b7c4c902bb4b724d6fd143689d6e0383/rpds_py-0.24.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad", size = 567622 }, + { url = "https://files.pythonhosted.org/packages/64/b0/c401f4f077547d98e8b4c2ec6526a80e7cb04f519d416430ec1421ee9e0b/rpds_py-0.24.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120", size = 595435 }, + { url = "https://files.pythonhosted.org/packages/9f/ec/7993b6e803294c87b61c85bd63e11142ccfb2373cf88a61ec602abcbf9d6/rpds_py-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9", size = 563762 }, + { url = "https://files.pythonhosted.org/packages/1f/29/4508003204cb2f461dc2b83dd85f8aa2b915bc98fe6046b9d50d4aa05401/rpds_py-0.24.0-cp313-cp313-win32.whl", hash = "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143", size = 223510 }, + { url = "https://files.pythonhosted.org/packages/f9/12/09e048d1814195e01f354155fb772fb0854bd3450b5f5a82224b3a319f0e/rpds_py-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a", size = 239075 }, + { url = "https://files.pythonhosted.org/packages/d2/03/5027cde39bb2408d61e4dd0cf81f815949bb629932a6c8df1701d0257fc4/rpds_py-0.24.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114", size = 362974 }, + { url = "https://files.pythonhosted.org/packages/bf/10/24d374a2131b1ffafb783e436e770e42dfdb74b69a2cd25eba8c8b29d861/rpds_py-0.24.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405", size = 348730 }, + { url = "https://files.pythonhosted.org/packages/7a/d1/1ef88d0516d46cd8df12e5916966dbf716d5ec79b265eda56ba1b173398c/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47", size = 387627 }, + { url = "https://files.pythonhosted.org/packages/4e/35/07339051b8b901ecefd449ebf8e5522e92bcb95e1078818cbfd9db8e573c/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272", size = 394094 }, + { url = "https://files.pythonhosted.org/packages/dc/62/ee89ece19e0ba322b08734e95441952062391065c157bbd4f8802316b4f1/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd", size = 449639 }, + { url = "https://files.pythonhosted.org/packages/15/24/b30e9f9e71baa0b9dada3a4ab43d567c6b04a36d1cb531045f7a8a0a7439/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a", size = 438584 }, + { url = "https://files.pythonhosted.org/packages/28/d9/49f7b8f3b4147db13961e19d5e30077cd0854ccc08487026d2cb2142aa4a/rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d", size = 391047 }, + { url = "https://files.pythonhosted.org/packages/49/b0/e66918d0972c33a259ba3cd7b7ff10ed8bd91dbcfcbec6367b21f026db75/rpds_py-0.24.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7", size = 418085 }, + { url = "https://files.pythonhosted.org/packages/e1/6b/99ed7ea0a94c7ae5520a21be77a82306aac9e4e715d4435076ead07d05c6/rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d", size = 564498 }, + { url = "https://files.pythonhosted.org/packages/28/26/1cacfee6b800e6fb5f91acecc2e52f17dbf8b0796a7c984b4568b6d70e38/rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797", size = 590202 }, + { url = "https://files.pythonhosted.org/packages/a9/9e/57bd2f9fba04a37cef673f9a66b11ca8c43ccdd50d386c455cd4380fe461/rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c", size = 561771 }, + { url = "https://files.pythonhosted.org/packages/9f/cf/b719120f375ab970d1c297dbf8de1e3c9edd26fe92c0ed7178dd94b45992/rpds_py-0.24.0-cp313-cp313t-win32.whl", hash = "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba", size = 221195 }, + { url = "https://files.pythonhosted.org/packages/2d/e5/22865285789f3412ad0c3d7ec4dc0a3e86483b794be8a5d9ed5a19390900/rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350", size = 237354 }, +] + +[[package]] +name = "ruff" +version = "0.11.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5b/3ae20f89777115944e89c2d8c2e795dcc5b9e04052f76d5347e35e0da66e/ruff-0.11.4.tar.gz", hash = "sha256:f45bd2fb1a56a5a85fae3b95add03fb185a0b30cf47f5edc92aa0355ca1d7407", size = 3933063 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/db/baee59ac88f57527fcbaad3a7b309994e42329c6bc4d4d2b681a3d7b5426/ruff-0.11.4-py3-none-linux_armv6l.whl", hash = "sha256:d9f4a761ecbde448a2d3e12fb398647c7f0bf526dbc354a643ec505965824ed2", size = 10106493 }, + { url = "https://files.pythonhosted.org/packages/c1/d6/9a0962cbb347f4ff98b33d699bf1193ff04ca93bed4b4222fd881b502154/ruff-0.11.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8c1747d903447d45ca3d40c794d1a56458c51e5cc1bc77b7b64bd2cf0b1626cc", size = 10876382 }, + { url = "https://files.pythonhosted.org/packages/3a/8f/62bab0c7d7e1ae3707b69b157701b41c1ccab8f83e8501734d12ea8a839f/ruff-0.11.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:51a6494209cacca79e121e9b244dc30d3414dac8cc5afb93f852173a2ecfc906", size = 10237050 }, + { url = "https://files.pythonhosted.org/packages/09/96/e296965ae9705af19c265d4d441958ed65c0c58fc4ec340c27cc9d2a1f5b/ruff-0.11.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f171605f65f4fc49c87f41b456e882cd0c89e4ac9d58e149a2b07930e1d466f", size = 10424984 }, + { url = "https://files.pythonhosted.org/packages/e5/56/644595eb57d855afed6e54b852e2df8cd5ca94c78043b2f29bdfb29882d5/ruff-0.11.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebf99ea9af918878e6ce42098981fc8c1db3850fef2f1ada69fb1dcdb0f8e79e", size = 9957438 }, + { url = "https://files.pythonhosted.org/packages/86/83/9d3f3bed0118aef3e871ded9e5687fb8c5776bde233427fd9ce0a45db2d4/ruff-0.11.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edad2eac42279df12e176564a23fc6f4aaeeb09abba840627780b1bb11a9d223", size = 11547282 }, + { url = "https://files.pythonhosted.org/packages/40/e6/0c6e4f5ae72fac5ccb44d72c0111f294a5c2c8cc5024afcb38e6bda5f4b3/ruff-0.11.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f103a848be9ff379fc19b5d656c1f911d0a0b4e3e0424f9532ececf319a4296e", size = 12182020 }, + { url = "https://files.pythonhosted.org/packages/b5/92/4aed0e460aeb1df5ea0c2fbe8d04f9725cccdb25d8da09a0d3f5b8764bf8/ruff-0.11.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:193e6fac6eb60cc97b9f728e953c21cc38a20077ed64f912e9d62b97487f3f2d", size = 11679154 }, + { url = "https://files.pythonhosted.org/packages/1b/d3/7316aa2609f2c592038e2543483eafbc62a0e1a6a6965178e284808c095c/ruff-0.11.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7af4e5f69b7c138be8dcffa5b4a061bf6ba6a3301f632a6bce25d45daff9bc99", size = 13905985 }, + { url = "https://files.pythonhosted.org/packages/63/80/734d3d17546e47ff99871f44ea7540ad2bbd7a480ed197fe8a1c8a261075/ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:126b1bf13154aa18ae2d6c3c5efe144ec14b97c60844cfa6eb960c2a05188222", size = 11348343 }, + { url = "https://files.pythonhosted.org/packages/04/7b/70fc7f09a0161dce9613a4671d198f609e653d6f4ff9eee14d64c4c240fb/ruff-0.11.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8806daaf9dfa881a0ed603f8a0e364e4f11b6ed461b56cae2b1c0cab0645304", size = 10308487 }, + { url = "https://files.pythonhosted.org/packages/1a/22/1cdd62dabd678d75842bf4944fd889cf794dc9e58c18cc547f9eb28f95ed/ruff-0.11.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5d94bb1cc2fc94a769b0eb975344f1b1f3d294da1da9ddbb5a77665feb3a3019", size = 9929091 }, + { url = "https://files.pythonhosted.org/packages/9f/20/40e0563506332313148e783bbc1e4276d657962cc370657b2fff20e6e058/ruff-0.11.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:995071203d0fe2183fc7a268766fd7603afb9996785f086b0d76edee8755c896", size = 10924659 }, + { url = "https://files.pythonhosted.org/packages/b5/41/eef9b7aac8819d9e942f617f9db296f13d2c4576806d604aba8db5a753f1/ruff-0.11.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7a37ca937e307ea18156e775a6ac6e02f34b99e8c23fe63c1996185a4efe0751", size = 11428160 }, + { url = "https://files.pythonhosted.org/packages/ff/61/c488943414fb2b8754c02f3879de003e26efdd20f38167ded3fb3fc1cda3/ruff-0.11.4-py3-none-win32.whl", hash = "sha256:0e9365a7dff9b93af933dab8aebce53b72d8f815e131796268709890b4a83270", size = 10311496 }, + { url = "https://files.pythonhosted.org/packages/b6/2b/2a1c8deb5f5dfa3871eb7daa41492c4d2b2824a74d2b38e788617612a66d/ruff-0.11.4-py3-none-win_amd64.whl", hash = "sha256:5a9fa1c69c7815e39fcfb3646bbfd7f528fa8e2d4bebdcf4c2bd0fa037a255fb", size = 11399146 }, + { url = "https://files.pythonhosted.org/packages/4f/03/3aec4846226d54a37822e4c7ea39489e4abd6f88388fba74e3d4abe77300/ruff-0.11.4-py3-none-win_arm64.whl", hash = "sha256:d435db6b9b93d02934cf61ef332e66af82da6d8c69aefdea5994c89997c7a0fc", size = 10450306 }, +] + +[[package]] +name = "science-signal" +version = "1.0.0" +source = { directory = "../main_script_virgo/modules/science_signal" } +dependencies = [ + { name = "numpy" }, + { name = "scipy" }, +] + +[package.metadata] +requires-dist = [ + { name = "numpy" }, + { name = "scipy" }, +] + +[[package]] +name = "scipy" +version = "1.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, + { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, + { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, + { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, + { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, + { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, + { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, + { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, + { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, + { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, + { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, + { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, + { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, + { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, + { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, + { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, + { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +] + +[[package]] +name = "send2trash" +version = "1.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072 }, +] + +[[package]] +name = "setuptools" +version = "78.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/5a/0db4da3bc908df06e5efae42b44e75c81dd52716e10192ff36d0c1c8e379/setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", size = 1367827 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8", size = 1256108 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "soupsieve" +version = "2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + +[[package]] +name = "tornado" +version = "6.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241206" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/60/47d92293d9bc521cd2301e423a358abfac0ad409b3a1606d8fbae1321961/types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb", size = 13802 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/b3/ca41df24db5eb99b00d97f89d7674a90cb6b3134c52fb8121b6d8d30f15c/types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53", size = 14384 }, +] + +[[package]] +name = "typing-extensions" +version = "4.13.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/ad/cd3e3465232ec2416ae9b983f27b9e94dc8171d56ac99b345319a9475967/typing_extensions-4.13.1.tar.gz", hash = "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff", size = 106633 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/c5/e7a0b0f5ed69f94c8ab7379c599e6036886bffcde609969a5325f47f1332/typing_extensions-4.13.1-py3-none-any.whl", hash = "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69", size = 45739 }, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, +] + +[[package]] +name = "urllib3" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, +] + +[[package]] +name = "webencodings" +version = "0.5.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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/fc/238c424fd7f4ebb25f8b1da9a934a3ad7c848286732ae04263661eb0fc03/widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6", size = 1164730 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/02/88b65cc394961a60c43c70517066b6b679738caf78506a5da7b88ffcb643/widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71", size = 2335872 }, +]